OSDN Git Service

a4cb347b80c2220e98ed895b66a9920bc7946055
[pf3gnuchains/gcc-fork.git] / gcc / dwarf2out.c
1 /* Output Dwarf2 format symbol table information from GCC.
2    Copyright (C) 1992, 1993, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
3    2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
4    Free Software Foundation, Inc.
5    Contributed by Gary Funck (gary@intrepid.com).
6    Derived from DWARF 1 implementation of Ron Guilmette (rfg@monkeys.com).
7    Extensively modified by Jason Merrill (jason@cygnus.com).
8
9 This file is part of GCC.
10
11 GCC is free software; you can redistribute it and/or modify it under
12 the terms of the GNU General Public License as published by the Free
13 Software Foundation; either version 3, or (at your option) any later
14 version.
15
16 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
17 WARRANTY; without even the implied warranty of MERCHANTABILITY or
18 FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
19 for more details.
20
21 You should have received a copy of the GNU General Public License
22 along with GCC; see the file COPYING3.  If not see
23 <http://www.gnu.org/licenses/>.  */
24
25 /* TODO: Emit .debug_line header even when there are no functions, since
26            the file numbers are used by .debug_info.  Alternately, leave
27            out locations for types and decls.
28          Avoid talking about ctors and op= for PODs.
29          Factor out common prologue sequences into multiple CIEs.  */
30
31 /* The first part of this file deals with the DWARF 2 frame unwind
32    information, which is also used by the GCC efficient exception handling
33    mechanism.  The second part, controlled only by an #ifdef
34    DWARF2_DEBUGGING_INFO, deals with the other DWARF 2 debugging
35    information.  */
36
37 /* DWARF2 Abbreviation Glossary:
38
39    CFA = Canonical Frame Address
40            a fixed address on the stack which identifies a call frame.
41            We define it to be the value of SP just before the call insn.
42            The CFA register and offset, which may change during the course
43            of the function, are used to calculate its value at runtime.
44
45    CFI = Call Frame Instruction
46            an instruction for the DWARF2 abstract machine
47
48    CIE = Common Information Entry
49            information describing information common to one or more FDEs
50
51    DIE = Debugging Information Entry
52
53    FDE = Frame Description Entry
54            information describing the stack call frame, in particular,
55            how to restore registers
56
57    DW_CFA_... = DWARF2 CFA call frame instruction
58    DW_TAG_... = DWARF2 DIE tag */
59
60 #include "config.h"
61 #include "system.h"
62 #include "coretypes.h"
63 #include "tm.h"
64 #include "tree.h"
65 #include "version.h"
66 #include "flags.h"
67 #include "real.h"
68 #include "rtl.h"
69 #include "hard-reg-set.h"
70 #include "regs.h"
71 #include "insn-config.h"
72 #include "reload.h"
73 #include "function.h"
74 #include "output.h"
75 #include "expr.h"
76 #include "libfuncs.h"
77 #include "except.h"
78 #include "dwarf2.h"
79 #include "dwarf2out.h"
80 #include "dwarf2asm.h"
81 #include "toplev.h"
82 #include "varray.h"
83 #include "ggc.h"
84 #include "md5.h"
85 #include "tm_p.h"
86 #include "diagnostic.h"
87 #include "debug.h"
88 #include "target.h"
89 #include "langhooks.h"
90 #include "hashtab.h"
91 #include "cgraph.h"
92 #include "input.h"
93 #include "gimple.h"
94 #include "tree-pass.h"
95
96 #ifdef DWARF2_DEBUGGING_INFO
97 static void dwarf2out_source_line (unsigned int, const char *, int, bool);
98
99 static rtx last_var_location_insn;
100 #endif
101
102 #ifdef VMS_DEBUGGING_INFO
103 int vms_file_stats_name (const char *, long long *, long *, char *, int *);
104
105 /* Define this macro to be a nonzero value if the directory specifications
106     which are output in the debug info should end with a separator.  */
107 #define DWARF2_DIR_SHOULD_END_WITH_SEPARATOR 1
108 /* Define this macro to evaluate to a nonzero value if GCC should refrain
109    from generating indirect strings in DWARF2 debug information, for instance
110    if your target is stuck with an old version of GDB that is unable to
111    process them properly or uses VMS Debug.  */
112 #define DWARF2_INDIRECT_STRING_SUPPORT_MISSING_ON_TARGET 1
113 #else
114 #define DWARF2_DIR_SHOULD_END_WITH_SEPARATOR 0
115 #define DWARF2_INDIRECT_STRING_SUPPORT_MISSING_ON_TARGET 0
116 #endif
117
118 #ifndef DWARF2_FRAME_INFO
119 # ifdef DWARF2_DEBUGGING_INFO
120 #  define DWARF2_FRAME_INFO \
121   (write_symbols == DWARF2_DEBUG || write_symbols == VMS_AND_DWARF2_DEBUG)
122 # else
123 #  define DWARF2_FRAME_INFO 0
124 # endif
125 #endif
126
127 /* Map register numbers held in the call frame info that gcc has
128    collected using DWARF_FRAME_REGNUM to those that should be output in
129    .debug_frame and .eh_frame.  */
130 #ifndef DWARF2_FRAME_REG_OUT
131 #define DWARF2_FRAME_REG_OUT(REGNO, FOR_EH) (REGNO)
132 #endif
133
134 /* Save the result of dwarf2out_do_frame across PCH.  */
135 static GTY(()) bool saved_do_cfi_asm = 0;
136
137 /* Decide whether we want to emit frame unwind information for the current
138    translation unit.  */
139
140 int
141 dwarf2out_do_frame (void)
142 {
143   /* We want to emit correct CFA location expressions or lists, so we
144      have to return true if we're going to output debug info, even if
145      we're not going to output frame or unwind info.  */
146   return (write_symbols == DWARF2_DEBUG
147           || write_symbols == VMS_AND_DWARF2_DEBUG
148           || DWARF2_FRAME_INFO || saved_do_cfi_asm
149 #ifdef DWARF2_UNWIND_INFO
150           || (DWARF2_UNWIND_INFO
151               && (flag_unwind_tables
152                   || (flag_exceptions && ! USING_SJLJ_EXCEPTIONS)))
153 #endif
154           );
155 }
156
157 /* Decide whether to emit frame unwind via assembler directives.  */
158
159 int
160 dwarf2out_do_cfi_asm (void)
161 {
162   int enc;
163
164 #ifdef MIPS_DEBUGGING_INFO
165   return false;
166 #endif
167   if (!flag_dwarf2_cfi_asm || !dwarf2out_do_frame ())
168     return false;
169   if (saved_do_cfi_asm)
170     return true;
171   if (!HAVE_GAS_CFI_PERSONALITY_DIRECTIVE)
172     return false;
173
174   /* Make sure the personality encoding is one the assembler can support.
175      In particular, aligned addresses can't be handled.  */
176   enc = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/2,/*global=*/1);
177   if ((enc & 0x70) != 0 && (enc & 0x70) != DW_EH_PE_pcrel)
178     return false;
179   enc = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/0,/*global=*/0);
180   if ((enc & 0x70) != 0 && (enc & 0x70) != DW_EH_PE_pcrel)
181     return false;
182
183   if (!HAVE_GAS_CFI_SECTIONS_DIRECTIVE)
184     {
185 #ifdef TARGET_UNWIND_INFO
186       return false;
187 #else
188       if (USING_SJLJ_EXCEPTIONS || (!flag_unwind_tables && !flag_exceptions))
189         return false;
190 #endif
191     }
192
193   saved_do_cfi_asm = true;
194   return true;
195 }
196
197 /* The size of the target's pointer type.  */
198 #ifndef PTR_SIZE
199 #define PTR_SIZE (POINTER_SIZE / BITS_PER_UNIT)
200 #endif
201
202 /* Array of RTXes referenced by the debugging information, which therefore
203    must be kept around forever.  */
204 static GTY(()) VEC(rtx,gc) *used_rtx_array;
205
206 /* A pointer to the base of a list of incomplete types which might be
207    completed at some later time.  incomplete_types_list needs to be a
208    VEC(tree,gc) because we want to tell the garbage collector about
209    it.  */
210 static GTY(()) VEC(tree,gc) *incomplete_types;
211
212 /* A pointer to the base of a table of references to declaration
213    scopes.  This table is a display which tracks the nesting
214    of declaration scopes at the current scope and containing
215    scopes.  This table is used to find the proper place to
216    define type declaration DIE's.  */
217 static GTY(()) VEC(tree,gc) *decl_scope_table;
218
219 /* Pointers to various DWARF2 sections.  */
220 static GTY(()) section *debug_info_section;
221 static GTY(()) section *debug_abbrev_section;
222 static GTY(()) section *debug_aranges_section;
223 static GTY(()) section *debug_macinfo_section;
224 static GTY(()) section *debug_line_section;
225 static GTY(()) section *debug_loc_section;
226 static GTY(()) section *debug_pubnames_section;
227 static GTY(()) section *debug_pubtypes_section;
228 static GTY(()) section *debug_dcall_section;
229 static GTY(()) section *debug_vcall_section;
230 static GTY(()) section *debug_str_section;
231 static GTY(()) section *debug_ranges_section;
232 static GTY(()) section *debug_frame_section;
233
234 /* Personality decl of current unit.  Used only when assembler does not support
235    personality CFI.  */
236 static GTY(()) rtx current_unit_personality;
237
238 /* How to start an assembler comment.  */
239 #ifndef ASM_COMMENT_START
240 #define ASM_COMMENT_START ";#"
241 #endif
242
243 typedef struct dw_cfi_struct *dw_cfi_ref;
244 typedef struct dw_fde_struct *dw_fde_ref;
245 typedef union  dw_cfi_oprnd_struct *dw_cfi_oprnd_ref;
246
247 /* Call frames are described using a sequence of Call Frame
248    Information instructions.  The register number, offset
249    and address fields are provided as possible operands;
250    their use is selected by the opcode field.  */
251
252 enum dw_cfi_oprnd_type {
253   dw_cfi_oprnd_unused,
254   dw_cfi_oprnd_reg_num,
255   dw_cfi_oprnd_offset,
256   dw_cfi_oprnd_addr,
257   dw_cfi_oprnd_loc
258 };
259
260 typedef union GTY(()) dw_cfi_oprnd_struct {
261   unsigned int GTY ((tag ("dw_cfi_oprnd_reg_num"))) dw_cfi_reg_num;
262   HOST_WIDE_INT GTY ((tag ("dw_cfi_oprnd_offset"))) dw_cfi_offset;
263   const char * GTY ((tag ("dw_cfi_oprnd_addr"))) dw_cfi_addr;
264   struct dw_loc_descr_struct * GTY ((tag ("dw_cfi_oprnd_loc"))) dw_cfi_loc;
265 }
266 dw_cfi_oprnd;
267
268 typedef struct GTY(()) dw_cfi_struct {
269   dw_cfi_ref dw_cfi_next;
270   enum dwarf_call_frame_info dw_cfi_opc;
271   dw_cfi_oprnd GTY ((desc ("dw_cfi_oprnd1_desc (%1.dw_cfi_opc)")))
272     dw_cfi_oprnd1;
273   dw_cfi_oprnd GTY ((desc ("dw_cfi_oprnd2_desc (%1.dw_cfi_opc)")))
274     dw_cfi_oprnd2;
275 }
276 dw_cfi_node;
277
278 /* This is how we define the location of the CFA. We use to handle it
279    as REG + OFFSET all the time,  but now it can be more complex.
280    It can now be either REG + CFA_OFFSET or *(REG + BASE_OFFSET) + CFA_OFFSET.
281    Instead of passing around REG and OFFSET, we pass a copy
282    of this structure.  */
283 typedef struct GTY(()) cfa_loc {
284   HOST_WIDE_INT offset;
285   HOST_WIDE_INT base_offset;
286   unsigned int reg;
287   BOOL_BITFIELD indirect : 1;  /* 1 if CFA is accessed via a dereference.  */
288   BOOL_BITFIELD in_use : 1;    /* 1 if a saved cfa is stored here.  */
289 } dw_cfa_location;
290
291 /* All call frame descriptions (FDE's) in the GCC generated DWARF
292    refer to a single Common Information Entry (CIE), defined at
293    the beginning of the .debug_frame section.  This use of a single
294    CIE obviates the need to keep track of multiple CIE's
295    in the DWARF generation routines below.  */
296
297 typedef struct GTY(()) dw_fde_struct {
298   tree decl;
299   const char *dw_fde_begin;
300   const char *dw_fde_current_label;
301   const char *dw_fde_end;
302   const char *dw_fde_hot_section_label;
303   const char *dw_fde_hot_section_end_label;
304   const char *dw_fde_unlikely_section_label;
305   const char *dw_fde_unlikely_section_end_label;
306   dw_cfi_ref dw_fde_cfi;
307   dw_cfi_ref dw_fde_switch_cfi; /* Last CFI before switching sections.  */
308   unsigned funcdef_number;
309   HOST_WIDE_INT stack_realignment;
310   /* Dynamic realign argument pointer register.  */
311   unsigned int drap_reg;
312   /* Virtual dynamic realign argument pointer register.  */
313   unsigned int vdrap_reg;
314   unsigned all_throwers_are_sibcalls : 1;
315   unsigned nothrow : 1;
316   unsigned uses_eh_lsda : 1;
317   /* Whether we did stack realign in this call frame.  */
318   unsigned stack_realign : 1;
319   /* Whether dynamic realign argument pointer register has been saved.  */
320   unsigned drap_reg_saved: 1;
321   /* True iff dw_fde_begin label is in text_section or cold_text_section.  */
322   unsigned in_std_section : 1;
323   /* True iff dw_fde_unlikely_section_label is in text_section or
324      cold_text_section.  */
325   unsigned cold_in_std_section : 1;
326   /* True iff switched sections.  */
327   unsigned dw_fde_switched_sections : 1;
328   /* True iff switching from cold to hot section.  */
329   unsigned dw_fde_switched_cold_to_hot : 1;
330 }
331 dw_fde_node;
332
333 /* Maximum size (in bytes) of an artificially generated label.  */
334 #define MAX_ARTIFICIAL_LABEL_BYTES      30
335
336 /* The size of addresses as they appear in the Dwarf 2 data.
337    Some architectures use word addresses to refer to code locations,
338    but Dwarf 2 info always uses byte addresses.  On such machines,
339    Dwarf 2 addresses need to be larger than the architecture's
340    pointers.  */
341 #ifndef DWARF2_ADDR_SIZE
342 #define DWARF2_ADDR_SIZE (POINTER_SIZE / BITS_PER_UNIT)
343 #endif
344
345 /* The size in bytes of a DWARF field indicating an offset or length
346    relative to a debug info section, specified to be 4 bytes in the
347    DWARF-2 specification.  The SGI/MIPS ABI defines it to be the same
348    as PTR_SIZE.  */
349
350 #ifndef DWARF_OFFSET_SIZE
351 #define DWARF_OFFSET_SIZE 4
352 #endif
353
354 /* The size in bytes of a DWARF 4 type signature.  */
355
356 #ifndef DWARF_TYPE_SIGNATURE_SIZE
357 #define DWARF_TYPE_SIGNATURE_SIZE 8
358 #endif
359
360 /* According to the (draft) DWARF 3 specification, the initial length
361    should either be 4 or 12 bytes.  When it's 12 bytes, the first 4
362    bytes are 0xffffffff, followed by the length stored in the next 8
363    bytes.
364
365    However, the SGI/MIPS ABI uses an initial length which is equal to
366    DWARF_OFFSET_SIZE.  It is defined (elsewhere) accordingly.  */
367
368 #ifndef DWARF_INITIAL_LENGTH_SIZE
369 #define DWARF_INITIAL_LENGTH_SIZE (DWARF_OFFSET_SIZE == 4 ? 4 : 12)
370 #endif
371
372 /* Round SIZE up to the nearest BOUNDARY.  */
373 #define DWARF_ROUND(SIZE,BOUNDARY) \
374   ((((SIZE) + (BOUNDARY) - 1) / (BOUNDARY)) * (BOUNDARY))
375
376 /* Offsets recorded in opcodes are a multiple of this alignment factor.  */
377 #ifndef DWARF_CIE_DATA_ALIGNMENT
378 #ifdef STACK_GROWS_DOWNWARD
379 #define DWARF_CIE_DATA_ALIGNMENT (-((int) UNITS_PER_WORD))
380 #else
381 #define DWARF_CIE_DATA_ALIGNMENT ((int) UNITS_PER_WORD)
382 #endif
383 #endif
384
385 /* CIE identifier.  */
386 #if HOST_BITS_PER_WIDE_INT >= 64
387 #define DWARF_CIE_ID \
388   (unsigned HOST_WIDE_INT) (DWARF_OFFSET_SIZE == 4 ? DW_CIE_ID : DW64_CIE_ID)
389 #else
390 #define DWARF_CIE_ID DW_CIE_ID
391 #endif
392
393 /* A pointer to the base of a table that contains frame description
394    information for each routine.  */
395 static GTY((length ("fde_table_allocated"))) dw_fde_ref fde_table;
396
397 /* Number of elements currently allocated for fde_table.  */
398 static GTY(()) unsigned fde_table_allocated;
399
400 /* Number of elements in fde_table currently in use.  */
401 static GTY(()) unsigned fde_table_in_use;
402
403 /* Size (in elements) of increments by which we may expand the
404    fde_table.  */
405 #define FDE_TABLE_INCREMENT 256
406
407 /* Get the current fde_table entry we should use.  */
408
409 static inline dw_fde_ref
410 current_fde (void)
411 {
412   return fde_table_in_use ? &fde_table[fde_table_in_use - 1] : NULL;
413 }
414
415 /* A list of call frame insns for the CIE.  */
416 static GTY(()) dw_cfi_ref cie_cfi_head;
417
418 #if defined (DWARF2_DEBUGGING_INFO) || defined (DWARF2_UNWIND_INFO)
419 /* Some DWARF extensions (e.g., MIPS/SGI) implement a subprogram
420    attribute that accelerates the lookup of the FDE associated
421    with the subprogram.  This variable holds the table index of the FDE
422    associated with the current function (body) definition.  */
423 static unsigned current_funcdef_fde;
424 #endif
425
426 struct GTY(()) indirect_string_node {
427   const char *str;
428   unsigned int refcount;
429   enum dwarf_form form;
430   char *label;
431 };
432
433 static GTY ((param_is (struct indirect_string_node))) htab_t debug_str_hash;
434
435 /* True if the compilation unit has location entries that reference
436    debug strings.  */
437 static GTY(()) bool debug_str_hash_forced = false;
438
439 static GTY(()) int dw2_string_counter;
440 static GTY(()) unsigned long dwarf2out_cfi_label_num;
441
442 /* True if the compilation unit places functions in more than one section.  */
443 static GTY(()) bool have_multiple_function_sections = false;
444
445 /* Whether the default text and cold text sections have been used at all.  */
446
447 static GTY(()) bool text_section_used = false;
448 static GTY(()) bool cold_text_section_used = false;
449
450 /* The default cold text section.  */
451 static GTY(()) section *cold_text_section;
452
453 #if defined (DWARF2_DEBUGGING_INFO) || defined (DWARF2_UNWIND_INFO)
454
455 /* Forward declarations for functions defined in this file.  */
456
457 static char *stripattributes (const char *);
458 static const char *dwarf_cfi_name (unsigned);
459 static dw_cfi_ref new_cfi (void);
460 static void add_cfi (dw_cfi_ref *, dw_cfi_ref);
461 static void add_fde_cfi (const char *, dw_cfi_ref);
462 static void lookup_cfa_1 (dw_cfi_ref, dw_cfa_location *, dw_cfa_location *);
463 static void lookup_cfa (dw_cfa_location *);
464 static void reg_save (const char *, unsigned, unsigned, HOST_WIDE_INT);
465 #ifdef DWARF2_UNWIND_INFO
466 static void initial_return_save (rtx);
467 #endif
468 static HOST_WIDE_INT stack_adjust_offset (const_rtx, HOST_WIDE_INT,
469                                           HOST_WIDE_INT);
470 static void output_cfi (dw_cfi_ref, dw_fde_ref, int);
471 static void output_cfi_directive (dw_cfi_ref);
472 static void output_call_frame_info (int);
473 static void dwarf2out_note_section_used (void);
474 static void flush_queued_reg_saves (void);
475 static bool clobbers_queued_reg_save (const_rtx);
476 static void dwarf2out_frame_debug_expr (rtx, const char *);
477
478 /* Support for complex CFA locations.  */
479 static void output_cfa_loc (dw_cfi_ref);
480 static void output_cfa_loc_raw (dw_cfi_ref);
481 static void get_cfa_from_loc_descr (dw_cfa_location *,
482                                     struct dw_loc_descr_struct *);
483 static struct dw_loc_descr_struct *build_cfa_loc
484   (dw_cfa_location *, HOST_WIDE_INT);
485 static struct dw_loc_descr_struct *build_cfa_aligned_loc
486   (HOST_WIDE_INT, HOST_WIDE_INT);
487 static void def_cfa_1 (const char *, dw_cfa_location *);
488
489 /* How to start an assembler comment.  */
490 #ifndef ASM_COMMENT_START
491 #define ASM_COMMENT_START ";#"
492 #endif
493
494 /* Data and reference forms for relocatable data.  */
495 #define DW_FORM_data (DWARF_OFFSET_SIZE == 8 ? DW_FORM_data8 : DW_FORM_data4)
496 #define DW_FORM_ref (DWARF_OFFSET_SIZE == 8 ? DW_FORM_ref8 : DW_FORM_ref4)
497
498 #ifndef DEBUG_FRAME_SECTION
499 #define DEBUG_FRAME_SECTION     ".debug_frame"
500 #endif
501
502 #ifndef FUNC_BEGIN_LABEL
503 #define FUNC_BEGIN_LABEL        "LFB"
504 #endif
505
506 #ifndef FUNC_END_LABEL
507 #define FUNC_END_LABEL          "LFE"
508 #endif
509
510 #ifndef FRAME_BEGIN_LABEL
511 #define FRAME_BEGIN_LABEL       "Lframe"
512 #endif
513 #define CIE_AFTER_SIZE_LABEL    "LSCIE"
514 #define CIE_END_LABEL           "LECIE"
515 #define FDE_LABEL               "LSFDE"
516 #define FDE_AFTER_SIZE_LABEL    "LASFDE"
517 #define FDE_END_LABEL           "LEFDE"
518 #define LINE_NUMBER_BEGIN_LABEL "LSLT"
519 #define LINE_NUMBER_END_LABEL   "LELT"
520 #define LN_PROLOG_AS_LABEL      "LASLTP"
521 #define LN_PROLOG_END_LABEL     "LELTP"
522 #define DIE_LABEL_PREFIX        "DW"
523
524 /* The DWARF 2 CFA column which tracks the return address.  Normally this
525    is the column for PC, or the first column after all of the hard
526    registers.  */
527 #ifndef DWARF_FRAME_RETURN_COLUMN
528 #ifdef PC_REGNUM
529 #define DWARF_FRAME_RETURN_COLUMN       DWARF_FRAME_REGNUM (PC_REGNUM)
530 #else
531 #define DWARF_FRAME_RETURN_COLUMN       DWARF_FRAME_REGISTERS
532 #endif
533 #endif
534
535 /* The mapping from gcc register number to DWARF 2 CFA column number.  By
536    default, we just provide columns for all registers.  */
537 #ifndef DWARF_FRAME_REGNUM
538 #define DWARF_FRAME_REGNUM(REG) DBX_REGISTER_NUMBER (REG)
539 #endif
540 \f
541 /* Hook used by __throw.  */
542
543 rtx
544 expand_builtin_dwarf_sp_column (void)
545 {
546   unsigned int dwarf_regnum = DWARF_FRAME_REGNUM (STACK_POINTER_REGNUM);
547   return GEN_INT (DWARF2_FRAME_REG_OUT (dwarf_regnum, 1));
548 }
549
550 /* Return a pointer to a copy of the section string name S with all
551    attributes stripped off, and an asterisk prepended (for assemble_name).  */
552
553 static inline char *
554 stripattributes (const char *s)
555 {
556   char *stripped = XNEWVEC (char, strlen (s) + 2);
557   char *p = stripped;
558
559   *p++ = '*';
560
561   while (*s && *s != ',')
562     *p++ = *s++;
563
564   *p = '\0';
565   return stripped;
566 }
567
568 /* MEM is a memory reference for the register size table, each element of
569    which has mode MODE.  Initialize column C as a return address column.  */
570
571 static void
572 init_return_column_size (enum machine_mode mode, rtx mem, unsigned int c)
573 {
574   HOST_WIDE_INT offset = c * GET_MODE_SIZE (mode);
575   HOST_WIDE_INT size = GET_MODE_SIZE (Pmode);
576   emit_move_insn (adjust_address (mem, mode, offset), GEN_INT (size));
577 }
578
579 /* Divide OFF by DWARF_CIE_DATA_ALIGNMENT, asserting no remainder.  */
580
581 static inline HOST_WIDE_INT
582 div_data_align (HOST_WIDE_INT off)
583 {
584   HOST_WIDE_INT r = off / DWARF_CIE_DATA_ALIGNMENT;
585   gcc_assert (r * DWARF_CIE_DATA_ALIGNMENT == off);
586   return r;
587 }
588
589 /* Return true if we need a signed version of a given opcode
590    (e.g. DW_CFA_offset_extended_sf vs DW_CFA_offset_extended).  */
591
592 static inline bool
593 need_data_align_sf_opcode (HOST_WIDE_INT off)
594 {
595   return DWARF_CIE_DATA_ALIGNMENT < 0 ? off > 0 : off < 0;
596 }
597
598 /* Generate code to initialize the register size table.  */
599
600 void
601 expand_builtin_init_dwarf_reg_sizes (tree address)
602 {
603   unsigned int i;
604   enum machine_mode mode = TYPE_MODE (char_type_node);
605   rtx addr = expand_normal (address);
606   rtx mem = gen_rtx_MEM (BLKmode, addr);
607   bool wrote_return_column = false;
608
609   for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
610     {
611       int rnum = DWARF2_FRAME_REG_OUT (DWARF_FRAME_REGNUM (i), 1);
612
613       if (rnum < DWARF_FRAME_REGISTERS)
614         {
615           HOST_WIDE_INT offset = rnum * GET_MODE_SIZE (mode);
616           enum machine_mode save_mode = reg_raw_mode[i];
617           HOST_WIDE_INT size;
618
619           if (HARD_REGNO_CALL_PART_CLOBBERED (i, save_mode))
620             save_mode = choose_hard_reg_mode (i, 1, true);
621           if (DWARF_FRAME_REGNUM (i) == DWARF_FRAME_RETURN_COLUMN)
622             {
623               if (save_mode == VOIDmode)
624                 continue;
625               wrote_return_column = true;
626             }
627           size = GET_MODE_SIZE (save_mode);
628           if (offset < 0)
629             continue;
630
631           emit_move_insn (adjust_address (mem, mode, offset),
632                           gen_int_mode (size, mode));
633         }
634     }
635
636   if (!wrote_return_column)
637     init_return_column_size (mode, mem, DWARF_FRAME_RETURN_COLUMN);
638
639 #ifdef DWARF_ALT_FRAME_RETURN_COLUMN
640   init_return_column_size (mode, mem, DWARF_ALT_FRAME_RETURN_COLUMN);
641 #endif
642
643   targetm.init_dwarf_reg_sizes_extra (address);
644 }
645
646 /* Convert a DWARF call frame info. operation to its string name */
647
648 static const char *
649 dwarf_cfi_name (unsigned int cfi_opc)
650 {
651   switch (cfi_opc)
652     {
653     case DW_CFA_advance_loc:
654       return "DW_CFA_advance_loc";
655     case DW_CFA_offset:
656       return "DW_CFA_offset";
657     case DW_CFA_restore:
658       return "DW_CFA_restore";
659     case DW_CFA_nop:
660       return "DW_CFA_nop";
661     case DW_CFA_set_loc:
662       return "DW_CFA_set_loc";
663     case DW_CFA_advance_loc1:
664       return "DW_CFA_advance_loc1";
665     case DW_CFA_advance_loc2:
666       return "DW_CFA_advance_loc2";
667     case DW_CFA_advance_loc4:
668       return "DW_CFA_advance_loc4";
669     case DW_CFA_offset_extended:
670       return "DW_CFA_offset_extended";
671     case DW_CFA_restore_extended:
672       return "DW_CFA_restore_extended";
673     case DW_CFA_undefined:
674       return "DW_CFA_undefined";
675     case DW_CFA_same_value:
676       return "DW_CFA_same_value";
677     case DW_CFA_register:
678       return "DW_CFA_register";
679     case DW_CFA_remember_state:
680       return "DW_CFA_remember_state";
681     case DW_CFA_restore_state:
682       return "DW_CFA_restore_state";
683     case DW_CFA_def_cfa:
684       return "DW_CFA_def_cfa";
685     case DW_CFA_def_cfa_register:
686       return "DW_CFA_def_cfa_register";
687     case DW_CFA_def_cfa_offset:
688       return "DW_CFA_def_cfa_offset";
689
690     /* DWARF 3 */
691     case DW_CFA_def_cfa_expression:
692       return "DW_CFA_def_cfa_expression";
693     case DW_CFA_expression:
694       return "DW_CFA_expression";
695     case DW_CFA_offset_extended_sf:
696       return "DW_CFA_offset_extended_sf";
697     case DW_CFA_def_cfa_sf:
698       return "DW_CFA_def_cfa_sf";
699     case DW_CFA_def_cfa_offset_sf:
700       return "DW_CFA_def_cfa_offset_sf";
701
702     /* SGI/MIPS specific */
703     case DW_CFA_MIPS_advance_loc8:
704       return "DW_CFA_MIPS_advance_loc8";
705
706     /* GNU extensions */
707     case DW_CFA_GNU_window_save:
708       return "DW_CFA_GNU_window_save";
709     case DW_CFA_GNU_args_size:
710       return "DW_CFA_GNU_args_size";
711     case DW_CFA_GNU_negative_offset_extended:
712       return "DW_CFA_GNU_negative_offset_extended";
713
714     default:
715       return "DW_CFA_<unknown>";
716     }
717 }
718
719 /* Return a pointer to a newly allocated Call Frame Instruction.  */
720
721 static inline dw_cfi_ref
722 new_cfi (void)
723 {
724   dw_cfi_ref cfi = GGC_NEW (dw_cfi_node);
725
726   cfi->dw_cfi_next = NULL;
727   cfi->dw_cfi_oprnd1.dw_cfi_reg_num = 0;
728   cfi->dw_cfi_oprnd2.dw_cfi_reg_num = 0;
729
730   return cfi;
731 }
732
733 /* Add a Call Frame Instruction to list of instructions.  */
734
735 static inline void
736 add_cfi (dw_cfi_ref *list_head, dw_cfi_ref cfi)
737 {
738   dw_cfi_ref *p;
739   dw_fde_ref fde = current_fde ();
740
741   /* When DRAP is used, CFA is defined with an expression.  Redefine
742      CFA may lead to a different CFA value.   */
743   /* ??? Of course, this heuristic fails when we're annotating epilogues,
744      because of course we'll always want to redefine the CFA back to the
745      stack pointer on the way out.  Where should we move this check?  */
746   if (0 && fde && fde->drap_reg != INVALID_REGNUM)
747     switch (cfi->dw_cfi_opc)
748       {
749         case DW_CFA_def_cfa_register:
750         case DW_CFA_def_cfa_offset:
751         case DW_CFA_def_cfa_offset_sf:
752         case DW_CFA_def_cfa:
753         case DW_CFA_def_cfa_sf:
754           gcc_unreachable ();
755
756         default:
757           break;
758       }
759
760   /* Find the end of the chain.  */
761   for (p = list_head; (*p) != NULL; p = &(*p)->dw_cfi_next)
762     ;
763
764   *p = cfi;
765 }
766
767 /* Generate a new label for the CFI info to refer to.  FORCE is true
768    if a label needs to be output even when using .cfi_* directives.  */
769
770 char *
771 dwarf2out_cfi_label (bool force)
772 {
773   static char label[20];
774
775   if (!force && dwarf2out_do_cfi_asm ())
776     {
777       /* In this case, we will be emitting the asm directive instead of
778          the label, so just return a placeholder to keep the rest of the
779          interfaces happy.  */
780       strcpy (label, "<do not output>");
781     }
782   else
783     {
784       ASM_GENERATE_INTERNAL_LABEL (label, "LCFI", dwarf2out_cfi_label_num++);
785       ASM_OUTPUT_LABEL (asm_out_file, label);
786     }
787
788   return label;
789 }
790
791 /* True if remember_state should be emitted before following CFI directive.  */
792 static bool emit_cfa_remember;
793
794 /* Add CFI to the current fde at the PC value indicated by LABEL if specified,
795    or to the CIE if LABEL is NULL.  */
796
797 static void
798 add_fde_cfi (const char *label, dw_cfi_ref cfi)
799 {
800   dw_cfi_ref *list_head;
801
802   if (emit_cfa_remember)
803     {
804       dw_cfi_ref cfi_remember;
805
806       /* Emit the state save.  */
807       emit_cfa_remember = false;
808       cfi_remember = new_cfi ();
809       cfi_remember->dw_cfi_opc = DW_CFA_remember_state;
810       add_fde_cfi (label, cfi_remember);
811     }
812
813   list_head = &cie_cfi_head;
814
815   if (dwarf2out_do_cfi_asm ())
816     {
817       if (label)
818         {
819           dw_fde_ref fde = current_fde ();
820
821           gcc_assert (fde != NULL);
822
823           /* We still have to add the cfi to the list so that lookup_cfa
824              works later on.  When -g2 and above we even need to force
825              emitting of CFI labels and add to list a DW_CFA_set_loc for
826              convert_cfa_to_fb_loc_list purposes.  If we're generating
827              DWARF3 output we use DW_OP_call_frame_cfa and so don't use
828              convert_cfa_to_fb_loc_list.  */
829           if (dwarf_version == 2
830               && debug_info_level > DINFO_LEVEL_TERSE
831               && (write_symbols == DWARF2_DEBUG
832                   || write_symbols == VMS_AND_DWARF2_DEBUG))
833             {
834               switch (cfi->dw_cfi_opc)
835                 {
836                 case DW_CFA_def_cfa_offset:
837                 case DW_CFA_def_cfa_offset_sf:
838                 case DW_CFA_def_cfa_register:
839                 case DW_CFA_def_cfa:
840                 case DW_CFA_def_cfa_sf:
841                 case DW_CFA_def_cfa_expression:
842                 case DW_CFA_restore_state:
843                   if (*label == 0 || strcmp (label, "<do not output>") == 0)
844                     label = dwarf2out_cfi_label (true);
845
846                   if (fde->dw_fde_current_label == NULL
847                       || strcmp (label, fde->dw_fde_current_label) != 0)
848                     {
849                       dw_cfi_ref xcfi;
850
851                       label = xstrdup (label);
852
853                       /* Set the location counter to the new label.  */
854                       xcfi = new_cfi ();
855                       /* It doesn't metter whether DW_CFA_set_loc
856                          or DW_CFA_advance_loc4 is added here, those aren't
857                          emitted into assembly, only looked up by
858                          convert_cfa_to_fb_loc_list.  */
859                       xcfi->dw_cfi_opc = DW_CFA_set_loc;
860                       xcfi->dw_cfi_oprnd1.dw_cfi_addr = label;
861                       add_cfi (&fde->dw_fde_cfi, xcfi);
862                       fde->dw_fde_current_label = label;
863                     }
864                   break;
865                 default:
866                   break;
867                 }
868             }
869
870           output_cfi_directive (cfi);
871
872           list_head = &fde->dw_fde_cfi;
873         }
874       /* ??? If this is a CFI for the CIE, we don't emit.  This
875          assumes that the standard CIE contents that the assembler
876          uses matches the standard CIE contents that the compiler
877          uses.  This is probably a bad assumption.  I'm not quite
878          sure how to address this for now.  */
879     }
880   else if (label)
881     {
882       dw_fde_ref fde = current_fde ();
883
884       gcc_assert (fde != NULL);
885
886       if (*label == 0)
887         label = dwarf2out_cfi_label (false);
888
889       if (fde->dw_fde_current_label == NULL
890           || strcmp (label, fde->dw_fde_current_label) != 0)
891         {
892           dw_cfi_ref xcfi;
893
894           label = xstrdup (label);
895
896           /* Set the location counter to the new label.  */
897           xcfi = new_cfi ();
898           /* If we have a current label, advance from there, otherwise
899              set the location directly using set_loc.  */
900           xcfi->dw_cfi_opc = fde->dw_fde_current_label
901                              ? DW_CFA_advance_loc4
902                              : DW_CFA_set_loc;
903           xcfi->dw_cfi_oprnd1.dw_cfi_addr = label;
904           add_cfi (&fde->dw_fde_cfi, xcfi);
905
906           fde->dw_fde_current_label = label;
907         }
908
909       list_head = &fde->dw_fde_cfi;
910     }
911
912   add_cfi (list_head, cfi);
913 }
914
915 /* Subroutine of lookup_cfa.  */
916
917 static void
918 lookup_cfa_1 (dw_cfi_ref cfi, dw_cfa_location *loc, dw_cfa_location *remember)
919 {
920   switch (cfi->dw_cfi_opc)
921     {
922     case DW_CFA_def_cfa_offset:
923     case DW_CFA_def_cfa_offset_sf:
924       loc->offset = cfi->dw_cfi_oprnd1.dw_cfi_offset;
925       break;
926     case DW_CFA_def_cfa_register:
927       loc->reg = cfi->dw_cfi_oprnd1.dw_cfi_reg_num;
928       break;
929     case DW_CFA_def_cfa:
930     case DW_CFA_def_cfa_sf:
931       loc->reg = cfi->dw_cfi_oprnd1.dw_cfi_reg_num;
932       loc->offset = cfi->dw_cfi_oprnd2.dw_cfi_offset;
933       break;
934     case DW_CFA_def_cfa_expression:
935       get_cfa_from_loc_descr (loc, cfi->dw_cfi_oprnd1.dw_cfi_loc);
936       break;
937
938     case DW_CFA_remember_state:
939       gcc_assert (!remember->in_use);
940       *remember = *loc;
941       remember->in_use = 1;
942       break;
943     case DW_CFA_restore_state:
944       gcc_assert (remember->in_use);
945       *loc = *remember;
946       remember->in_use = 0;
947       break;
948
949     default:
950       break;
951     }
952 }
953
954 /* Find the previous value for the CFA.  */
955
956 static void
957 lookup_cfa (dw_cfa_location *loc)
958 {
959   dw_cfi_ref cfi;
960   dw_fde_ref fde;
961   dw_cfa_location remember;
962
963   memset (loc, 0, sizeof (*loc));
964   loc->reg = INVALID_REGNUM;
965   remember = *loc;
966
967   for (cfi = cie_cfi_head; cfi; cfi = cfi->dw_cfi_next)
968     lookup_cfa_1 (cfi, loc, &remember);
969
970   fde = current_fde ();
971   if (fde)
972     for (cfi = fde->dw_fde_cfi; cfi; cfi = cfi->dw_cfi_next)
973       lookup_cfa_1 (cfi, loc, &remember);
974 }
975
976 /* The current rule for calculating the DWARF2 canonical frame address.  */
977 static dw_cfa_location cfa;
978
979 /* The register used for saving registers to the stack, and its offset
980    from the CFA.  */
981 static dw_cfa_location cfa_store;
982
983 /* The current save location around an epilogue.  */
984 static dw_cfa_location cfa_remember;
985
986 /* The running total of the size of arguments pushed onto the stack.  */
987 static HOST_WIDE_INT args_size;
988
989 /* The last args_size we actually output.  */
990 static HOST_WIDE_INT old_args_size;
991
992 /* Entry point to update the canonical frame address (CFA).
993    LABEL is passed to add_fde_cfi.  The value of CFA is now to be
994    calculated from REG+OFFSET.  */
995
996 void
997 dwarf2out_def_cfa (const char *label, unsigned int reg, HOST_WIDE_INT offset)
998 {
999   dw_cfa_location loc;
1000   loc.indirect = 0;
1001   loc.base_offset = 0;
1002   loc.reg = reg;
1003   loc.offset = offset;
1004   def_cfa_1 (label, &loc);
1005 }
1006
1007 /* Determine if two dw_cfa_location structures define the same data.  */
1008
1009 static bool
1010 cfa_equal_p (const dw_cfa_location *loc1, const dw_cfa_location *loc2)
1011 {
1012   return (loc1->reg == loc2->reg
1013           && loc1->offset == loc2->offset
1014           && loc1->indirect == loc2->indirect
1015           && (loc1->indirect == 0
1016               || loc1->base_offset == loc2->base_offset));
1017 }
1018
1019 /* This routine does the actual work.  The CFA is now calculated from
1020    the dw_cfa_location structure.  */
1021
1022 static void
1023 def_cfa_1 (const char *label, dw_cfa_location *loc_p)
1024 {
1025   dw_cfi_ref cfi;
1026   dw_cfa_location old_cfa, loc;
1027
1028   cfa = *loc_p;
1029   loc = *loc_p;
1030
1031   if (cfa_store.reg == loc.reg && loc.indirect == 0)
1032     cfa_store.offset = loc.offset;
1033
1034   loc.reg = DWARF_FRAME_REGNUM (loc.reg);
1035   lookup_cfa (&old_cfa);
1036
1037   /* If nothing changed, no need to issue any call frame instructions.  */
1038   if (cfa_equal_p (&loc, &old_cfa))
1039     return;
1040
1041   cfi = new_cfi ();
1042
1043   if (loc.reg == old_cfa.reg && !loc.indirect)
1044     {
1045       /* Construct a "DW_CFA_def_cfa_offset <offset>" instruction, indicating
1046          the CFA register did not change but the offset did.  The data
1047          factoring for DW_CFA_def_cfa_offset_sf happens in output_cfi, or
1048          in the assembler via the .cfi_def_cfa_offset directive.  */
1049       if (loc.offset < 0)
1050         cfi->dw_cfi_opc = DW_CFA_def_cfa_offset_sf;
1051       else
1052         cfi->dw_cfi_opc = DW_CFA_def_cfa_offset;
1053       cfi->dw_cfi_oprnd1.dw_cfi_offset = loc.offset;
1054     }
1055
1056 #ifndef MIPS_DEBUGGING_INFO  /* SGI dbx thinks this means no offset.  */
1057   else if (loc.offset == old_cfa.offset
1058            && old_cfa.reg != INVALID_REGNUM
1059            && !loc.indirect)
1060     {
1061       /* Construct a "DW_CFA_def_cfa_register <register>" instruction,
1062          indicating the CFA register has changed to <register> but the
1063          offset has not changed.  */
1064       cfi->dw_cfi_opc = DW_CFA_def_cfa_register;
1065       cfi->dw_cfi_oprnd1.dw_cfi_reg_num = loc.reg;
1066     }
1067 #endif
1068
1069   else if (loc.indirect == 0)
1070     {
1071       /* Construct a "DW_CFA_def_cfa <register> <offset>" instruction,
1072          indicating the CFA register has changed to <register> with
1073          the specified offset.  The data factoring for DW_CFA_def_cfa_sf
1074          happens in output_cfi, or in the assembler via the .cfi_def_cfa
1075          directive.  */
1076       if (loc.offset < 0)
1077         cfi->dw_cfi_opc = DW_CFA_def_cfa_sf;
1078       else
1079         cfi->dw_cfi_opc = DW_CFA_def_cfa;
1080       cfi->dw_cfi_oprnd1.dw_cfi_reg_num = loc.reg;
1081       cfi->dw_cfi_oprnd2.dw_cfi_offset = loc.offset;
1082     }
1083   else
1084     {
1085       /* Construct a DW_CFA_def_cfa_expression instruction to
1086          calculate the CFA using a full location expression since no
1087          register-offset pair is available.  */
1088       struct dw_loc_descr_struct *loc_list;
1089
1090       cfi->dw_cfi_opc = DW_CFA_def_cfa_expression;
1091       loc_list = build_cfa_loc (&loc, 0);
1092       cfi->dw_cfi_oprnd1.dw_cfi_loc = loc_list;
1093     }
1094
1095   add_fde_cfi (label, cfi);
1096 }
1097
1098 /* Add the CFI for saving a register.  REG is the CFA column number.
1099    LABEL is passed to add_fde_cfi.
1100    If SREG is -1, the register is saved at OFFSET from the CFA;
1101    otherwise it is saved in SREG.  */
1102
1103 static void
1104 reg_save (const char *label, unsigned int reg, unsigned int sreg, HOST_WIDE_INT offset)
1105 {
1106   dw_cfi_ref cfi = new_cfi ();
1107   dw_fde_ref fde = current_fde ();
1108
1109   cfi->dw_cfi_oprnd1.dw_cfi_reg_num = reg;
1110
1111   /* When stack is aligned, store REG using DW_CFA_expression with
1112      FP.  */
1113   if (fde
1114       && fde->stack_realign
1115       && sreg == INVALID_REGNUM)
1116     {
1117       cfi->dw_cfi_opc = DW_CFA_expression;
1118       cfi->dw_cfi_oprnd1.dw_cfi_reg_num = reg;
1119       cfi->dw_cfi_oprnd2.dw_cfi_loc
1120         = build_cfa_aligned_loc (offset, fde->stack_realignment);
1121     }
1122   else if (sreg == INVALID_REGNUM)
1123     {
1124       if (need_data_align_sf_opcode (offset))
1125         cfi->dw_cfi_opc = DW_CFA_offset_extended_sf;
1126       else if (reg & ~0x3f)
1127         cfi->dw_cfi_opc = DW_CFA_offset_extended;
1128       else
1129         cfi->dw_cfi_opc = DW_CFA_offset;
1130       cfi->dw_cfi_oprnd2.dw_cfi_offset = offset;
1131     }
1132   else if (sreg == reg)
1133     cfi->dw_cfi_opc = DW_CFA_same_value;
1134   else
1135     {
1136       cfi->dw_cfi_opc = DW_CFA_register;
1137       cfi->dw_cfi_oprnd2.dw_cfi_reg_num = sreg;
1138     }
1139
1140   add_fde_cfi (label, cfi);
1141 }
1142
1143 /* Add the CFI for saving a register window.  LABEL is passed to reg_save.
1144    This CFI tells the unwinder that it needs to restore the window registers
1145    from the previous frame's window save area.
1146
1147    ??? Perhaps we should note in the CIE where windows are saved (instead of
1148    assuming 0(cfa)) and what registers are in the window.  */
1149
1150 void
1151 dwarf2out_window_save (const char *label)
1152 {
1153   dw_cfi_ref cfi = new_cfi ();
1154
1155   cfi->dw_cfi_opc = DW_CFA_GNU_window_save;
1156   add_fde_cfi (label, cfi);
1157 }
1158
1159 /* Entry point for saving a register to the stack.  REG is the GCC register
1160    number.  LABEL and OFFSET are passed to reg_save.  */
1161
1162 void
1163 dwarf2out_reg_save (const char *label, unsigned int reg, HOST_WIDE_INT offset)
1164 {
1165   reg_save (label, DWARF_FRAME_REGNUM (reg), INVALID_REGNUM, offset);
1166 }
1167
1168 /* Entry point for saving the return address in the stack.
1169    LABEL and OFFSET are passed to reg_save.  */
1170
1171 void
1172 dwarf2out_return_save (const char *label, HOST_WIDE_INT offset)
1173 {
1174   reg_save (label, DWARF_FRAME_RETURN_COLUMN, INVALID_REGNUM, offset);
1175 }
1176
1177 /* Entry point for saving the return address in a register.
1178    LABEL and SREG are passed to reg_save.  */
1179
1180 void
1181 dwarf2out_return_reg (const char *label, unsigned int sreg)
1182 {
1183   reg_save (label, DWARF_FRAME_RETURN_COLUMN, DWARF_FRAME_REGNUM (sreg), 0);
1184 }
1185
1186 #ifdef DWARF2_UNWIND_INFO
1187 /* Record the initial position of the return address.  RTL is
1188    INCOMING_RETURN_ADDR_RTX.  */
1189
1190 static void
1191 initial_return_save (rtx rtl)
1192 {
1193   unsigned int reg = INVALID_REGNUM;
1194   HOST_WIDE_INT offset = 0;
1195
1196   switch (GET_CODE (rtl))
1197     {
1198     case REG:
1199       /* RA is in a register.  */
1200       reg = DWARF_FRAME_REGNUM (REGNO (rtl));
1201       break;
1202
1203     case MEM:
1204       /* RA is on the stack.  */
1205       rtl = XEXP (rtl, 0);
1206       switch (GET_CODE (rtl))
1207         {
1208         case REG:
1209           gcc_assert (REGNO (rtl) == STACK_POINTER_REGNUM);
1210           offset = 0;
1211           break;
1212
1213         case PLUS:
1214           gcc_assert (REGNO (XEXP (rtl, 0)) == STACK_POINTER_REGNUM);
1215           offset = INTVAL (XEXP (rtl, 1));
1216           break;
1217
1218         case MINUS:
1219           gcc_assert (REGNO (XEXP (rtl, 0)) == STACK_POINTER_REGNUM);
1220           offset = -INTVAL (XEXP (rtl, 1));
1221           break;
1222
1223         default:
1224           gcc_unreachable ();
1225         }
1226
1227       break;
1228
1229     case PLUS:
1230       /* The return address is at some offset from any value we can
1231          actually load.  For instance, on the SPARC it is in %i7+8. Just
1232          ignore the offset for now; it doesn't matter for unwinding frames.  */
1233       gcc_assert (CONST_INT_P (XEXP (rtl, 1)));
1234       initial_return_save (XEXP (rtl, 0));
1235       return;
1236
1237     default:
1238       gcc_unreachable ();
1239     }
1240
1241   if (reg != DWARF_FRAME_RETURN_COLUMN)
1242     reg_save (NULL, DWARF_FRAME_RETURN_COLUMN, reg, offset - cfa.offset);
1243 }
1244 #endif
1245
1246 /* Given a SET, calculate the amount of stack adjustment it
1247    contains.  */
1248
1249 static HOST_WIDE_INT
1250 stack_adjust_offset (const_rtx pattern, HOST_WIDE_INT cur_args_size,
1251                      HOST_WIDE_INT cur_offset)
1252 {
1253   const_rtx src = SET_SRC (pattern);
1254   const_rtx dest = SET_DEST (pattern);
1255   HOST_WIDE_INT offset = 0;
1256   enum rtx_code code;
1257
1258   if (dest == stack_pointer_rtx)
1259     {
1260       code = GET_CODE (src);
1261
1262       /* Assume (set (reg sp) (reg whatever)) sets args_size
1263          level to 0.  */
1264       if (code == REG && src != stack_pointer_rtx)
1265         {
1266           offset = -cur_args_size;
1267 #ifndef STACK_GROWS_DOWNWARD
1268           offset = -offset;
1269 #endif
1270           return offset - cur_offset;
1271         }
1272
1273       if (! (code == PLUS || code == MINUS)
1274           || XEXP (src, 0) != stack_pointer_rtx
1275           || !CONST_INT_P (XEXP (src, 1)))
1276         return 0;
1277
1278       /* (set (reg sp) (plus (reg sp) (const_int))) */
1279       offset = INTVAL (XEXP (src, 1));
1280       if (code == PLUS)
1281         offset = -offset;
1282       return offset;
1283     }
1284
1285   if (MEM_P (src) && !MEM_P (dest))
1286     dest = src;
1287   if (MEM_P (dest))
1288     {
1289       /* (set (mem (pre_dec (reg sp))) (foo)) */
1290       src = XEXP (dest, 0);
1291       code = GET_CODE (src);
1292
1293       switch (code)
1294         {
1295         case PRE_MODIFY:
1296         case POST_MODIFY:
1297           if (XEXP (src, 0) == stack_pointer_rtx)
1298             {
1299               rtx val = XEXP (XEXP (src, 1), 1);
1300               /* We handle only adjustments by constant amount.  */
1301               gcc_assert (GET_CODE (XEXP (src, 1)) == PLUS
1302                           && CONST_INT_P (val));
1303               offset = -INTVAL (val);
1304               break;
1305             }
1306           return 0;
1307
1308         case PRE_DEC:
1309         case POST_DEC:
1310           if (XEXP (src, 0) == stack_pointer_rtx)
1311             {
1312               offset = GET_MODE_SIZE (GET_MODE (dest));
1313               break;
1314             }
1315           return 0;
1316
1317         case PRE_INC:
1318         case POST_INC:
1319           if (XEXP (src, 0) == stack_pointer_rtx)
1320             {
1321               offset = -GET_MODE_SIZE (GET_MODE (dest));
1322               break;
1323             }
1324           return 0;
1325
1326         default:
1327           return 0;
1328         }
1329     }
1330   else
1331     return 0;
1332
1333   return offset;
1334 }
1335
1336 /* Precomputed args_size for CODE_LABELs and BARRIERs preceeding them,
1337    indexed by INSN_UID.  */
1338
1339 static HOST_WIDE_INT *barrier_args_size;
1340
1341 /* Helper function for compute_barrier_args_size.  Handle one insn.  */
1342
1343 static HOST_WIDE_INT
1344 compute_barrier_args_size_1 (rtx insn, HOST_WIDE_INT cur_args_size,
1345                              VEC (rtx, heap) **next)
1346 {
1347   HOST_WIDE_INT offset = 0;
1348   int i;
1349
1350   if (! RTX_FRAME_RELATED_P (insn))
1351     {
1352       if (prologue_epilogue_contains (insn))
1353         /* Nothing */;
1354       else if (GET_CODE (PATTERN (insn)) == SET)
1355         offset = stack_adjust_offset (PATTERN (insn), cur_args_size, 0);
1356       else if (GET_CODE (PATTERN (insn)) == PARALLEL
1357                || GET_CODE (PATTERN (insn)) == SEQUENCE)
1358         {
1359           /* There may be stack adjustments inside compound insns.  Search
1360              for them.  */
1361           for (i = XVECLEN (PATTERN (insn), 0) - 1; i >= 0; i--)
1362             if (GET_CODE (XVECEXP (PATTERN (insn), 0, i)) == SET)
1363               offset += stack_adjust_offset (XVECEXP (PATTERN (insn), 0, i),
1364                                              cur_args_size, offset);
1365         }
1366     }
1367   else
1368     {
1369       rtx expr = find_reg_note (insn, REG_FRAME_RELATED_EXPR, NULL_RTX);
1370
1371       if (expr)
1372         {
1373           expr = XEXP (expr, 0);
1374           if (GET_CODE (expr) == PARALLEL
1375               || GET_CODE (expr) == SEQUENCE)
1376             for (i = 1; i < XVECLEN (expr, 0); i++)
1377               {
1378                 rtx elem = XVECEXP (expr, 0, i);
1379
1380                 if (GET_CODE (elem) == SET && !RTX_FRAME_RELATED_P (elem))
1381                   offset += stack_adjust_offset (elem, cur_args_size, offset);
1382               }
1383         }
1384     }
1385
1386 #ifndef STACK_GROWS_DOWNWARD
1387   offset = -offset;
1388 #endif
1389
1390   cur_args_size += offset;
1391   if (cur_args_size < 0)
1392     cur_args_size = 0;
1393
1394   if (JUMP_P (insn))
1395     {
1396       rtx dest = JUMP_LABEL (insn);
1397
1398       if (dest)
1399         {
1400           if (barrier_args_size [INSN_UID (dest)] < 0)
1401             {
1402               barrier_args_size [INSN_UID (dest)] = cur_args_size;
1403               VEC_safe_push (rtx, heap, *next, dest);
1404             }
1405         }
1406     }
1407
1408   return cur_args_size;
1409 }
1410
1411 /* Walk the whole function and compute args_size on BARRIERs.  */
1412
1413 static void
1414 compute_barrier_args_size (void)
1415 {
1416   int max_uid = get_max_uid (), i;
1417   rtx insn;
1418   VEC (rtx, heap) *worklist, *next, *tmp;
1419
1420   barrier_args_size = XNEWVEC (HOST_WIDE_INT, max_uid);
1421   for (i = 0; i < max_uid; i++)
1422     barrier_args_size[i] = -1;
1423
1424   worklist = VEC_alloc (rtx, heap, 20);
1425   next = VEC_alloc (rtx, heap, 20);
1426   insn = get_insns ();
1427   barrier_args_size[INSN_UID (insn)] = 0;
1428   VEC_quick_push (rtx, worklist, insn);
1429   for (;;)
1430     {
1431       while (!VEC_empty (rtx, worklist))
1432         {
1433           rtx prev, body, first_insn;
1434           HOST_WIDE_INT cur_args_size;
1435
1436           first_insn = insn = VEC_pop (rtx, worklist);
1437           cur_args_size = barrier_args_size[INSN_UID (insn)];
1438           prev = prev_nonnote_insn (insn);
1439           if (prev && BARRIER_P (prev))
1440             barrier_args_size[INSN_UID (prev)] = cur_args_size;
1441
1442           for (; insn; insn = NEXT_INSN (insn))
1443             {
1444               if (INSN_DELETED_P (insn) || NOTE_P (insn))
1445                 continue;
1446               if (BARRIER_P (insn))
1447                 break;
1448
1449               if (LABEL_P (insn))
1450                 {
1451                   if (insn == first_insn)
1452                     continue;
1453                   else if (barrier_args_size[INSN_UID (insn)] < 0)
1454                     {
1455                       barrier_args_size[INSN_UID (insn)] = cur_args_size;
1456                       continue;
1457                     }
1458                   else
1459                     {
1460                       /* The insns starting with this label have been
1461                          already scanned or are in the worklist.  */
1462                       break;
1463                     }
1464                 }
1465
1466               body = PATTERN (insn);
1467               if (GET_CODE (body) == SEQUENCE)
1468                 {
1469                   HOST_WIDE_INT dest_args_size = cur_args_size;
1470                   for (i = 1; i < XVECLEN (body, 0); i++)
1471                     if (INSN_ANNULLED_BRANCH_P (XVECEXP (body, 0, 0))
1472                         && INSN_FROM_TARGET_P (XVECEXP (body, 0, i)))
1473                       dest_args_size
1474                         = compute_barrier_args_size_1 (XVECEXP (body, 0, i),
1475                                                        dest_args_size, &next);
1476                     else
1477                       cur_args_size
1478                         = compute_barrier_args_size_1 (XVECEXP (body, 0, i),
1479                                                        cur_args_size, &next);
1480
1481                   if (INSN_ANNULLED_BRANCH_P (XVECEXP (body, 0, 0)))
1482                     compute_barrier_args_size_1 (XVECEXP (body, 0, 0),
1483                                                  dest_args_size, &next);
1484                   else
1485                     cur_args_size
1486                       = compute_barrier_args_size_1 (XVECEXP (body, 0, 0),
1487                                                      cur_args_size, &next);
1488                 }
1489               else
1490                 cur_args_size
1491                   = compute_barrier_args_size_1 (insn, cur_args_size, &next);
1492             }
1493         }
1494
1495       if (VEC_empty (rtx, next))
1496         break;
1497
1498       /* Swap WORKLIST with NEXT and truncate NEXT for next iteration.  */
1499       tmp = next;
1500       next = worklist;
1501       worklist = tmp;
1502       VEC_truncate (rtx, next, 0);
1503     }
1504
1505   VEC_free (rtx, heap, worklist);
1506   VEC_free (rtx, heap, next);
1507 }
1508
1509 /* Add a CFI to update the running total of the size of arguments
1510    pushed onto the stack.  */
1511
1512 static void
1513 dwarf2out_args_size (const char *label, HOST_WIDE_INT size)
1514 {
1515   dw_cfi_ref cfi;
1516
1517   if (size == old_args_size)
1518     return;
1519
1520   old_args_size = size;
1521
1522   cfi = new_cfi ();
1523   cfi->dw_cfi_opc = DW_CFA_GNU_args_size;
1524   cfi->dw_cfi_oprnd1.dw_cfi_offset = size;
1525   add_fde_cfi (label, cfi);
1526 }
1527
1528 /* Record a stack adjustment of OFFSET bytes.  */
1529
1530 static void
1531 dwarf2out_stack_adjust (HOST_WIDE_INT offset, const char *label)
1532 {
1533   if (cfa.reg == STACK_POINTER_REGNUM)
1534     cfa.offset += offset;
1535
1536   if (cfa_store.reg == STACK_POINTER_REGNUM)
1537     cfa_store.offset += offset;
1538
1539   if (ACCUMULATE_OUTGOING_ARGS)
1540     return;
1541
1542 #ifndef STACK_GROWS_DOWNWARD
1543   offset = -offset;
1544 #endif
1545
1546   args_size += offset;
1547   if (args_size < 0)
1548     args_size = 0;
1549
1550   def_cfa_1 (label, &cfa);
1551   if (flag_asynchronous_unwind_tables)
1552     dwarf2out_args_size (label, args_size);
1553 }
1554
1555 /* Check INSN to see if it looks like a push or a stack adjustment, and
1556    make a note of it if it does.  EH uses this information to find out
1557    how much extra space it needs to pop off the stack.  */
1558
1559 static void
1560 dwarf2out_notice_stack_adjust (rtx insn, bool after_p)
1561 {
1562   HOST_WIDE_INT offset;
1563   const char *label;
1564   int i;
1565
1566   /* Don't handle epilogues at all.  Certainly it would be wrong to do so
1567      with this function.  Proper support would require all frame-related
1568      insns to be marked, and to be able to handle saving state around
1569      epilogues textually in the middle of the function.  */
1570   if (prologue_epilogue_contains (insn))
1571     return;
1572
1573   /* If INSN is an instruction from target of an annulled branch, the
1574      effects are for the target only and so current argument size
1575      shouldn't change at all.  */
1576   if (final_sequence
1577       && INSN_ANNULLED_BRANCH_P (XVECEXP (final_sequence, 0, 0))
1578       && INSN_FROM_TARGET_P (insn))
1579     return;
1580
1581   /* If only calls can throw, and we have a frame pointer,
1582      save up adjustments until we see the CALL_INSN.  */
1583   if (!flag_asynchronous_unwind_tables && cfa.reg != STACK_POINTER_REGNUM)
1584     {
1585       if (CALL_P (insn) && !after_p)
1586         {
1587           /* Extract the size of the args from the CALL rtx itself.  */
1588           insn = PATTERN (insn);
1589           if (GET_CODE (insn) == PARALLEL)
1590             insn = XVECEXP (insn, 0, 0);
1591           if (GET_CODE (insn) == SET)
1592             insn = SET_SRC (insn);
1593           gcc_assert (GET_CODE (insn) == CALL);
1594           dwarf2out_args_size ("", INTVAL (XEXP (insn, 1)));
1595         }
1596       return;
1597     }
1598
1599   if (CALL_P (insn) && !after_p)
1600     {
1601       if (!flag_asynchronous_unwind_tables)
1602         dwarf2out_args_size ("", args_size);
1603       return;
1604     }
1605   else if (BARRIER_P (insn))
1606     {
1607       /* Don't call compute_barrier_args_size () if the only
1608          BARRIER is at the end of function.  */
1609       if (barrier_args_size == NULL && next_nonnote_insn (insn))
1610         compute_barrier_args_size ();
1611       if (barrier_args_size == NULL)
1612         offset = 0;
1613       else
1614         {
1615           offset = barrier_args_size[INSN_UID (insn)];
1616           if (offset < 0)
1617             offset = 0;
1618         }
1619
1620       offset -= args_size;
1621 #ifndef STACK_GROWS_DOWNWARD
1622       offset = -offset;
1623 #endif
1624     }
1625   else if (GET_CODE (PATTERN (insn)) == SET)
1626     offset = stack_adjust_offset (PATTERN (insn), args_size, 0);
1627   else if (GET_CODE (PATTERN (insn)) == PARALLEL
1628            || GET_CODE (PATTERN (insn)) == SEQUENCE)
1629     {
1630       /* There may be stack adjustments inside compound insns.  Search
1631          for them.  */
1632       for (offset = 0, i = XVECLEN (PATTERN (insn), 0) - 1; i >= 0; i--)
1633         if (GET_CODE (XVECEXP (PATTERN (insn), 0, i)) == SET)
1634           offset += stack_adjust_offset (XVECEXP (PATTERN (insn), 0, i),
1635                                          args_size, offset);
1636     }
1637   else
1638     return;
1639
1640   if (offset == 0)
1641     return;
1642
1643   label = dwarf2out_cfi_label (false);
1644   dwarf2out_stack_adjust (offset, label);
1645 }
1646
1647 #endif
1648
1649 /* We delay emitting a register save until either (a) we reach the end
1650    of the prologue or (b) the register is clobbered.  This clusters
1651    register saves so that there are fewer pc advances.  */
1652
1653 struct GTY(()) queued_reg_save {
1654   struct queued_reg_save *next;
1655   rtx reg;
1656   HOST_WIDE_INT cfa_offset;
1657   rtx saved_reg;
1658 };
1659
1660 static GTY(()) struct queued_reg_save *queued_reg_saves;
1661
1662 /* The caller's ORIG_REG is saved in SAVED_IN_REG.  */
1663 struct GTY(()) reg_saved_in_data {
1664   rtx orig_reg;
1665   rtx saved_in_reg;
1666 };
1667
1668 /* A list of registers saved in other registers.
1669    The list intentionally has a small maximum capacity of 4; if your
1670    port needs more than that, you might consider implementing a
1671    more efficient data structure.  */
1672 static GTY(()) struct reg_saved_in_data regs_saved_in_regs[4];
1673 static GTY(()) size_t num_regs_saved_in_regs;
1674
1675 #if defined (DWARF2_DEBUGGING_INFO) || defined (DWARF2_UNWIND_INFO)
1676 static const char *last_reg_save_label;
1677
1678 /* Add an entry to QUEUED_REG_SAVES saying that REG is now saved at
1679    SREG, or if SREG is NULL then it is saved at OFFSET to the CFA.  */
1680
1681 static void
1682 queue_reg_save (const char *label, rtx reg, rtx sreg, HOST_WIDE_INT offset)
1683 {
1684   struct queued_reg_save *q;
1685
1686   /* Duplicates waste space, but it's also necessary to remove them
1687      for correctness, since the queue gets output in reverse
1688      order.  */
1689   for (q = queued_reg_saves; q != NULL; q = q->next)
1690     if (REGNO (q->reg) == REGNO (reg))
1691       break;
1692
1693   if (q == NULL)
1694     {
1695       q = GGC_NEW (struct queued_reg_save);
1696       q->next = queued_reg_saves;
1697       queued_reg_saves = q;
1698     }
1699
1700   q->reg = reg;
1701   q->cfa_offset = offset;
1702   q->saved_reg = sreg;
1703
1704   last_reg_save_label = label;
1705 }
1706
1707 /* Output all the entries in QUEUED_REG_SAVES.  */
1708
1709 static void
1710 flush_queued_reg_saves (void)
1711 {
1712   struct queued_reg_save *q;
1713
1714   for (q = queued_reg_saves; q; q = q->next)
1715     {
1716       size_t i;
1717       unsigned int reg, sreg;
1718
1719       for (i = 0; i < num_regs_saved_in_regs; i++)
1720         if (REGNO (regs_saved_in_regs[i].orig_reg) == REGNO (q->reg))
1721           break;
1722       if (q->saved_reg && i == num_regs_saved_in_regs)
1723         {
1724           gcc_assert (i != ARRAY_SIZE (regs_saved_in_regs));
1725           num_regs_saved_in_regs++;
1726         }
1727       if (i != num_regs_saved_in_regs)
1728         {
1729           regs_saved_in_regs[i].orig_reg = q->reg;
1730           regs_saved_in_regs[i].saved_in_reg = q->saved_reg;
1731         }
1732
1733       reg = DWARF_FRAME_REGNUM (REGNO (q->reg));
1734       if (q->saved_reg)
1735         sreg = DWARF_FRAME_REGNUM (REGNO (q->saved_reg));
1736       else
1737         sreg = INVALID_REGNUM;
1738       reg_save (last_reg_save_label, reg, sreg, q->cfa_offset);
1739     }
1740
1741   queued_reg_saves = NULL;
1742   last_reg_save_label = NULL;
1743 }
1744
1745 /* Does INSN clobber any register which QUEUED_REG_SAVES lists a saved
1746    location for?  Or, does it clobber a register which we've previously
1747    said that some other register is saved in, and for which we now
1748    have a new location for?  */
1749
1750 static bool
1751 clobbers_queued_reg_save (const_rtx insn)
1752 {
1753   struct queued_reg_save *q;
1754
1755   for (q = queued_reg_saves; q; q = q->next)
1756     {
1757       size_t i;
1758       if (modified_in_p (q->reg, insn))
1759         return true;
1760       for (i = 0; i < num_regs_saved_in_regs; i++)
1761         if (REGNO (q->reg) == REGNO (regs_saved_in_regs[i].orig_reg)
1762             && modified_in_p (regs_saved_in_regs[i].saved_in_reg, insn))
1763           return true;
1764     }
1765
1766   return false;
1767 }
1768
1769 /* Entry point for saving the first register into the second.  */
1770
1771 void
1772 dwarf2out_reg_save_reg (const char *label, rtx reg, rtx sreg)
1773 {
1774   size_t i;
1775   unsigned int regno, sregno;
1776
1777   for (i = 0; i < num_regs_saved_in_regs; i++)
1778     if (REGNO (regs_saved_in_regs[i].orig_reg) == REGNO (reg))
1779       break;
1780   if (i == num_regs_saved_in_regs)
1781     {
1782       gcc_assert (i != ARRAY_SIZE (regs_saved_in_regs));
1783       num_regs_saved_in_regs++;
1784     }
1785   regs_saved_in_regs[i].orig_reg = reg;
1786   regs_saved_in_regs[i].saved_in_reg = sreg;
1787
1788   regno = DWARF_FRAME_REGNUM (REGNO (reg));
1789   sregno = DWARF_FRAME_REGNUM (REGNO (sreg));
1790   reg_save (label, regno, sregno, 0);
1791 }
1792
1793 /* What register, if any, is currently saved in REG?  */
1794
1795 static rtx
1796 reg_saved_in (rtx reg)
1797 {
1798   unsigned int regn = REGNO (reg);
1799   size_t i;
1800   struct queued_reg_save *q;
1801
1802   for (q = queued_reg_saves; q; q = q->next)
1803     if (q->saved_reg && regn == REGNO (q->saved_reg))
1804       return q->reg;
1805
1806   for (i = 0; i < num_regs_saved_in_regs; i++)
1807     if (regs_saved_in_regs[i].saved_in_reg
1808         && regn == REGNO (regs_saved_in_regs[i].saved_in_reg))
1809       return regs_saved_in_regs[i].orig_reg;
1810
1811   return NULL_RTX;
1812 }
1813
1814
1815 /* A temporary register holding an integral value used in adjusting SP
1816    or setting up the store_reg.  The "offset" field holds the integer
1817    value, not an offset.  */
1818 static dw_cfa_location cfa_temp;
1819
1820 /* A subroutine of dwarf2out_frame_debug, process a REG_DEF_CFA note.  */
1821
1822 static void
1823 dwarf2out_frame_debug_def_cfa (rtx pat, const char *label)
1824 {
1825   memset (&cfa, 0, sizeof (cfa));
1826
1827   switch (GET_CODE (pat))
1828     {
1829     case PLUS:
1830       cfa.reg = REGNO (XEXP (pat, 0));
1831       cfa.offset = INTVAL (XEXP (pat, 1));
1832       break;
1833
1834     case REG:
1835       cfa.reg = REGNO (pat);
1836       break;
1837
1838     default:
1839       /* Recurse and define an expression.  */
1840       gcc_unreachable ();
1841     }
1842
1843   def_cfa_1 (label, &cfa);
1844 }
1845
1846 /* A subroutine of dwarf2out_frame_debug, process a REG_ADJUST_CFA note.  */
1847
1848 static void
1849 dwarf2out_frame_debug_adjust_cfa (rtx pat, const char *label)
1850 {
1851   rtx src, dest;
1852
1853   gcc_assert (GET_CODE (pat) == SET);
1854   dest = XEXP (pat, 0);
1855   src = XEXP (pat, 1);
1856
1857   switch (GET_CODE (src))
1858     {
1859     case PLUS:
1860       gcc_assert (REGNO (XEXP (src, 0)) == cfa.reg);
1861       cfa.offset -= INTVAL (XEXP (src, 1));
1862       break;
1863
1864     case REG:
1865         break;
1866
1867     default:
1868         gcc_unreachable ();
1869     }
1870
1871   cfa.reg = REGNO (dest);
1872   gcc_assert (cfa.indirect == 0);
1873
1874   def_cfa_1 (label, &cfa);
1875 }
1876
1877 /* A subroutine of dwarf2out_frame_debug, process a REG_CFA_OFFSET note.  */
1878
1879 static void
1880 dwarf2out_frame_debug_cfa_offset (rtx set, const char *label)
1881 {
1882   HOST_WIDE_INT offset;
1883   rtx src, addr, span;
1884
1885   src = XEXP (set, 1);
1886   addr = XEXP (set, 0);
1887   gcc_assert (MEM_P (addr));
1888   addr = XEXP (addr, 0);
1889
1890   /* As documented, only consider extremely simple addresses.  */
1891   switch (GET_CODE (addr))
1892     {
1893     case REG:
1894       gcc_assert (REGNO (addr) == cfa.reg);
1895       offset = -cfa.offset;
1896       break;
1897     case PLUS:
1898       gcc_assert (REGNO (XEXP (addr, 0)) == cfa.reg);
1899       offset = INTVAL (XEXP (addr, 1)) - cfa.offset;
1900       break;
1901     default:
1902       gcc_unreachable ();
1903     }
1904
1905   span = targetm.dwarf_register_span (src);
1906
1907   /* ??? We'd like to use queue_reg_save, but we need to come up with
1908      a different flushing heuristic for epilogues.  */
1909   if (!span)
1910     reg_save (label, DWARF_FRAME_REGNUM (REGNO (src)), INVALID_REGNUM, offset);
1911   else
1912     {
1913       /* We have a PARALLEL describing where the contents of SRC live.
1914          Queue register saves for each piece of the PARALLEL.  */
1915       int par_index;
1916       int limit;
1917       HOST_WIDE_INT span_offset = offset;
1918
1919       gcc_assert (GET_CODE (span) == PARALLEL);
1920
1921       limit = XVECLEN (span, 0);
1922       for (par_index = 0; par_index < limit; par_index++)
1923         {
1924           rtx elem = XVECEXP (span, 0, par_index);
1925
1926           reg_save (label, DWARF_FRAME_REGNUM (REGNO (elem)),
1927                     INVALID_REGNUM, span_offset);
1928           span_offset += GET_MODE_SIZE (GET_MODE (elem));
1929         }
1930     }
1931 }
1932
1933 /* A subroutine of dwarf2out_frame_debug, process a REG_CFA_REGISTER note.  */
1934
1935 static void
1936 dwarf2out_frame_debug_cfa_register (rtx set, const char *label)
1937 {
1938   rtx src, dest;
1939   unsigned sregno, dregno;
1940
1941   src = XEXP (set, 1);
1942   dest = XEXP (set, 0);
1943
1944   if (src == pc_rtx)
1945     sregno = DWARF_FRAME_RETURN_COLUMN;
1946   else
1947     sregno = DWARF_FRAME_REGNUM (REGNO (src));
1948
1949   dregno = DWARF_FRAME_REGNUM (REGNO (dest));
1950
1951   /* ??? We'd like to use queue_reg_save, but we need to come up with
1952      a different flushing heuristic for epilogues.  */
1953   reg_save (label, sregno, dregno, 0);
1954 }
1955
1956 /* A subroutine of dwarf2out_frame_debug, process a REG_CFA_RESTORE note.  */
1957
1958 static void
1959 dwarf2out_frame_debug_cfa_restore (rtx reg, const char *label)
1960 {
1961   dw_cfi_ref cfi = new_cfi ();
1962   unsigned int regno = DWARF_FRAME_REGNUM (REGNO (reg));
1963
1964   cfi->dw_cfi_opc = (regno & ~0x3f ? DW_CFA_restore_extended : DW_CFA_restore);
1965   cfi->dw_cfi_oprnd1.dw_cfi_reg_num = regno;
1966
1967   add_fde_cfi (label, cfi);
1968 }
1969
1970 /* Record call frame debugging information for an expression EXPR,
1971    which either sets SP or FP (adjusting how we calculate the frame
1972    address) or saves a register to the stack or another register.
1973    LABEL indicates the address of EXPR.
1974
1975    This function encodes a state machine mapping rtxes to actions on
1976    cfa, cfa_store, and cfa_temp.reg.  We describe these rules so
1977    users need not read the source code.
1978
1979   The High-Level Picture
1980
1981   Changes in the register we use to calculate the CFA: Currently we
1982   assume that if you copy the CFA register into another register, we
1983   should take the other one as the new CFA register; this seems to
1984   work pretty well.  If it's wrong for some target, it's simple
1985   enough not to set RTX_FRAME_RELATED_P on the insn in question.
1986
1987   Changes in the register we use for saving registers to the stack:
1988   This is usually SP, but not always.  Again, we deduce that if you
1989   copy SP into another register (and SP is not the CFA register),
1990   then the new register is the one we will be using for register
1991   saves.  This also seems to work.
1992
1993   Register saves: There's not much guesswork about this one; if
1994   RTX_FRAME_RELATED_P is set on an insn which modifies memory, it's a
1995   register save, and the register used to calculate the destination
1996   had better be the one we think we're using for this purpose.
1997   It's also assumed that a copy from a call-saved register to another
1998   register is saving that register if RTX_FRAME_RELATED_P is set on
1999   that instruction.  If the copy is from a call-saved register to
2000   the *same* register, that means that the register is now the same
2001   value as in the caller.
2002
2003   Except: If the register being saved is the CFA register, and the
2004   offset is nonzero, we are saving the CFA, so we assume we have to
2005   use DW_CFA_def_cfa_expression.  If the offset is 0, we assume that
2006   the intent is to save the value of SP from the previous frame.
2007
2008   In addition, if a register has previously been saved to a different
2009   register,
2010
2011   Invariants / Summaries of Rules
2012
2013   cfa          current rule for calculating the CFA.  It usually
2014                consists of a register and an offset.
2015   cfa_store    register used by prologue code to save things to the stack
2016                cfa_store.offset is the offset from the value of
2017                cfa_store.reg to the actual CFA
2018   cfa_temp     register holding an integral value.  cfa_temp.offset
2019                stores the value, which will be used to adjust the
2020                stack pointer.  cfa_temp is also used like cfa_store,
2021                to track stores to the stack via fp or a temp reg.
2022
2023   Rules  1- 4: Setting a register's value to cfa.reg or an expression
2024                with cfa.reg as the first operand changes the cfa.reg and its
2025                cfa.offset.  Rule 1 and 4 also set cfa_temp.reg and
2026                cfa_temp.offset.
2027
2028   Rules  6- 9: Set a non-cfa.reg register value to a constant or an
2029                expression yielding a constant.  This sets cfa_temp.reg
2030                and cfa_temp.offset.
2031
2032   Rule 5:      Create a new register cfa_store used to save items to the
2033                stack.
2034
2035   Rules 10-14: Save a register to the stack.  Define offset as the
2036                difference of the original location and cfa_store's
2037                location (or cfa_temp's location if cfa_temp is used).
2038
2039   Rules 16-20: If AND operation happens on sp in prologue, we assume
2040                stack is realigned.  We will use a group of DW_OP_XXX
2041                expressions to represent the location of the stored
2042                register instead of CFA+offset.
2043
2044   The Rules
2045
2046   "{a,b}" indicates a choice of a xor b.
2047   "<reg>:cfa.reg" indicates that <reg> must equal cfa.reg.
2048
2049   Rule 1:
2050   (set <reg1> <reg2>:cfa.reg)
2051   effects: cfa.reg = <reg1>
2052            cfa.offset unchanged
2053            cfa_temp.reg = <reg1>
2054            cfa_temp.offset = cfa.offset
2055
2056   Rule 2:
2057   (set sp ({minus,plus,losum} {sp,fp}:cfa.reg
2058                               {<const_int>,<reg>:cfa_temp.reg}))
2059   effects: cfa.reg = sp if fp used
2060            cfa.offset += {+/- <const_int>, cfa_temp.offset} if cfa.reg==sp
2061            cfa_store.offset += {+/- <const_int>, cfa_temp.offset}
2062              if cfa_store.reg==sp
2063
2064   Rule 3:
2065   (set fp ({minus,plus,losum} <reg>:cfa.reg <const_int>))
2066   effects: cfa.reg = fp
2067            cfa_offset += +/- <const_int>
2068
2069   Rule 4:
2070   (set <reg1> ({plus,losum} <reg2>:cfa.reg <const_int>))
2071   constraints: <reg1> != fp
2072                <reg1> != sp
2073   effects: cfa.reg = <reg1>
2074            cfa_temp.reg = <reg1>
2075            cfa_temp.offset = cfa.offset
2076
2077   Rule 5:
2078   (set <reg1> (plus <reg2>:cfa_temp.reg sp:cfa.reg))
2079   constraints: <reg1> != fp
2080                <reg1> != sp
2081   effects: cfa_store.reg = <reg1>
2082            cfa_store.offset = cfa.offset - cfa_temp.offset
2083
2084   Rule 6:
2085   (set <reg> <const_int>)
2086   effects: cfa_temp.reg = <reg>
2087            cfa_temp.offset = <const_int>
2088
2089   Rule 7:
2090   (set <reg1>:cfa_temp.reg (ior <reg2>:cfa_temp.reg <const_int>))
2091   effects: cfa_temp.reg = <reg1>
2092            cfa_temp.offset |= <const_int>
2093
2094   Rule 8:
2095   (set <reg> (high <exp>))
2096   effects: none
2097
2098   Rule 9:
2099   (set <reg> (lo_sum <exp> <const_int>))
2100   effects: cfa_temp.reg = <reg>
2101            cfa_temp.offset = <const_int>
2102
2103   Rule 10:
2104   (set (mem (pre_modify sp:cfa_store (???? <reg1> <const_int>))) <reg2>)
2105   effects: cfa_store.offset -= <const_int>
2106            cfa.offset = cfa_store.offset if cfa.reg == sp
2107            cfa.reg = sp
2108            cfa.base_offset = -cfa_store.offset
2109
2110   Rule 11:
2111   (set (mem ({pre_inc,pre_dec} sp:cfa_store.reg)) <reg>)
2112   effects: cfa_store.offset += -/+ mode_size(mem)
2113            cfa.offset = cfa_store.offset if cfa.reg == sp
2114            cfa.reg = sp
2115            cfa.base_offset = -cfa_store.offset
2116
2117   Rule 12:
2118   (set (mem ({minus,plus,losum} <reg1>:{cfa_store,cfa_temp} <const_int>))
2119
2120        <reg2>)
2121   effects: cfa.reg = <reg1>
2122            cfa.base_offset = -/+ <const_int> - {cfa_store,cfa_temp}.offset
2123
2124   Rule 13:
2125   (set (mem <reg1>:{cfa_store,cfa_temp}) <reg2>)
2126   effects: cfa.reg = <reg1>
2127            cfa.base_offset = -{cfa_store,cfa_temp}.offset
2128
2129   Rule 14:
2130   (set (mem (postinc <reg1>:cfa_temp <const_int>)) <reg2>)
2131   effects: cfa.reg = <reg1>
2132            cfa.base_offset = -cfa_temp.offset
2133            cfa_temp.offset -= mode_size(mem)
2134
2135   Rule 15:
2136   (set <reg> {unspec, unspec_volatile})
2137   effects: target-dependent
2138
2139   Rule 16:
2140   (set sp (and: sp <const_int>))
2141   constraints: cfa_store.reg == sp
2142   effects: current_fde.stack_realign = 1
2143            cfa_store.offset = 0
2144            fde->drap_reg = cfa.reg if cfa.reg != sp and cfa.reg != fp
2145
2146   Rule 17:
2147   (set (mem ({pre_inc, pre_dec} sp)) (mem (plus (cfa.reg) (const_int))))
2148   effects: cfa_store.offset += -/+ mode_size(mem)
2149
2150   Rule 18:
2151   (set (mem ({pre_inc, pre_dec} sp)) fp)
2152   constraints: fde->stack_realign == 1
2153   effects: cfa_store.offset = 0
2154            cfa.reg != HARD_FRAME_POINTER_REGNUM
2155
2156   Rule 19:
2157   (set (mem ({pre_inc, pre_dec} sp)) cfa.reg)
2158   constraints: fde->stack_realign == 1
2159                && cfa.offset == 0
2160                && cfa.indirect == 0
2161                && cfa.reg != HARD_FRAME_POINTER_REGNUM
2162   effects: Use DW_CFA_def_cfa_expression to define cfa
2163            cfa.reg == fde->drap_reg  */
2164
2165 static void
2166 dwarf2out_frame_debug_expr (rtx expr, const char *label)
2167 {
2168   rtx src, dest, span;
2169   HOST_WIDE_INT offset;
2170   dw_fde_ref fde;
2171
2172   /* If RTX_FRAME_RELATED_P is set on a PARALLEL, process each member of
2173      the PARALLEL independently. The first element is always processed if
2174      it is a SET. This is for backward compatibility.   Other elements
2175      are processed only if they are SETs and the RTX_FRAME_RELATED_P
2176      flag is set in them.  */
2177   if (GET_CODE (expr) == PARALLEL || GET_CODE (expr) == SEQUENCE)
2178     {
2179       int par_index;
2180       int limit = XVECLEN (expr, 0);
2181       rtx elem;
2182
2183       /* PARALLELs have strict read-modify-write semantics, so we
2184          ought to evaluate every rvalue before changing any lvalue.
2185          It's cumbersome to do that in general, but there's an
2186          easy approximation that is enough for all current users:
2187          handle register saves before register assignments.  */
2188       if (GET_CODE (expr) == PARALLEL)
2189         for (par_index = 0; par_index < limit; par_index++)
2190           {
2191             elem = XVECEXP (expr, 0, par_index);
2192             if (GET_CODE (elem) == SET
2193                 && MEM_P (SET_DEST (elem))
2194                 && (RTX_FRAME_RELATED_P (elem) || par_index == 0))
2195               dwarf2out_frame_debug_expr (elem, label);
2196           }
2197
2198       for (par_index = 0; par_index < limit; par_index++)
2199         {
2200           elem = XVECEXP (expr, 0, par_index);
2201           if (GET_CODE (elem) == SET
2202               && (!MEM_P (SET_DEST (elem)) || GET_CODE (expr) == SEQUENCE)
2203               && (RTX_FRAME_RELATED_P (elem) || par_index == 0))
2204             dwarf2out_frame_debug_expr (elem, label);
2205           else if (GET_CODE (elem) == SET
2206                    && par_index != 0
2207                    && !RTX_FRAME_RELATED_P (elem))
2208             {
2209               /* Stack adjustment combining might combine some post-prologue
2210                  stack adjustment into a prologue stack adjustment.  */
2211               HOST_WIDE_INT offset = stack_adjust_offset (elem, args_size, 0);
2212
2213               if (offset != 0)
2214                 dwarf2out_stack_adjust (offset, label);
2215             }
2216         }
2217       return;
2218     }
2219
2220   gcc_assert (GET_CODE (expr) == SET);
2221
2222   src = SET_SRC (expr);
2223   dest = SET_DEST (expr);
2224
2225   if (REG_P (src))
2226     {
2227       rtx rsi = reg_saved_in (src);
2228       if (rsi)
2229         src = rsi;
2230     }
2231
2232   fde = current_fde ();
2233
2234   switch (GET_CODE (dest))
2235     {
2236     case REG:
2237       switch (GET_CODE (src))
2238         {
2239           /* Setting FP from SP.  */
2240         case REG:
2241           if (cfa.reg == (unsigned) REGNO (src))
2242             {
2243               /* Rule 1 */
2244               /* Update the CFA rule wrt SP or FP.  Make sure src is
2245                  relative to the current CFA register.
2246
2247                  We used to require that dest be either SP or FP, but the
2248                  ARM copies SP to a temporary register, and from there to
2249                  FP.  So we just rely on the backends to only set
2250                  RTX_FRAME_RELATED_P on appropriate insns.  */
2251               cfa.reg = REGNO (dest);
2252               cfa_temp.reg = cfa.reg;
2253               cfa_temp.offset = cfa.offset;
2254             }
2255           else
2256             {
2257               /* Saving a register in a register.  */
2258               gcc_assert (!fixed_regs [REGNO (dest)]
2259                           /* For the SPARC and its register window.  */
2260                           || (DWARF_FRAME_REGNUM (REGNO (src))
2261                               == DWARF_FRAME_RETURN_COLUMN));
2262
2263               /* After stack is aligned, we can only save SP in FP
2264                  if drap register is used.  In this case, we have
2265                  to restore stack pointer with the CFA value and we
2266                  don't generate this DWARF information.  */
2267               if (fde
2268                   && fde->stack_realign
2269                   && REGNO (src) == STACK_POINTER_REGNUM)
2270                 gcc_assert (REGNO (dest) == HARD_FRAME_POINTER_REGNUM
2271                             && fde->drap_reg != INVALID_REGNUM
2272                             && cfa.reg != REGNO (src));
2273               else
2274                 queue_reg_save (label, src, dest, 0);
2275             }
2276           break;
2277
2278         case PLUS:
2279         case MINUS:
2280         case LO_SUM:
2281           if (dest == stack_pointer_rtx)
2282             {
2283               /* Rule 2 */
2284               /* Adjusting SP.  */
2285               switch (GET_CODE (XEXP (src, 1)))
2286                 {
2287                 case CONST_INT:
2288                   offset = INTVAL (XEXP (src, 1));
2289                   break;
2290                 case REG:
2291                   gcc_assert ((unsigned) REGNO (XEXP (src, 1))
2292                               == cfa_temp.reg);
2293                   offset = cfa_temp.offset;
2294                   break;
2295                 default:
2296                   gcc_unreachable ();
2297                 }
2298
2299               if (XEXP (src, 0) == hard_frame_pointer_rtx)
2300                 {
2301                   /* Restoring SP from FP in the epilogue.  */
2302                   gcc_assert (cfa.reg == (unsigned) HARD_FRAME_POINTER_REGNUM);
2303                   cfa.reg = STACK_POINTER_REGNUM;
2304                 }
2305               else if (GET_CODE (src) == LO_SUM)
2306                 /* Assume we've set the source reg of the LO_SUM from sp.  */
2307                 ;
2308               else
2309                 gcc_assert (XEXP (src, 0) == stack_pointer_rtx);
2310
2311               if (GET_CODE (src) != MINUS)
2312                 offset = -offset;
2313               if (cfa.reg == STACK_POINTER_REGNUM)
2314                 cfa.offset += offset;
2315               if (cfa_store.reg == STACK_POINTER_REGNUM)
2316                 cfa_store.offset += offset;
2317             }
2318           else if (dest == hard_frame_pointer_rtx)
2319             {
2320               /* Rule 3 */
2321               /* Either setting the FP from an offset of the SP,
2322                  or adjusting the FP */
2323               gcc_assert (frame_pointer_needed);
2324
2325               gcc_assert (REG_P (XEXP (src, 0))
2326                           && (unsigned) REGNO (XEXP (src, 0)) == cfa.reg
2327                           && CONST_INT_P (XEXP (src, 1)));
2328               offset = INTVAL (XEXP (src, 1));
2329               if (GET_CODE (src) != MINUS)
2330                 offset = -offset;
2331               cfa.offset += offset;
2332               cfa.reg = HARD_FRAME_POINTER_REGNUM;
2333             }
2334           else
2335             {
2336               gcc_assert (GET_CODE (src) != MINUS);
2337
2338               /* Rule 4 */
2339               if (REG_P (XEXP (src, 0))
2340                   && REGNO (XEXP (src, 0)) == cfa.reg
2341                   && CONST_INT_P (XEXP (src, 1)))
2342                 {
2343                   /* Setting a temporary CFA register that will be copied
2344                      into the FP later on.  */
2345                   offset = - INTVAL (XEXP (src, 1));
2346                   cfa.offset += offset;
2347                   cfa.reg = REGNO (dest);
2348                   /* Or used to save regs to the stack.  */
2349                   cfa_temp.reg = cfa.reg;
2350                   cfa_temp.offset = cfa.offset;
2351                 }
2352
2353               /* Rule 5 */
2354               else if (REG_P (XEXP (src, 0))
2355                        && REGNO (XEXP (src, 0)) == cfa_temp.reg
2356                        && XEXP (src, 1) == stack_pointer_rtx)
2357                 {
2358                   /* Setting a scratch register that we will use instead
2359                      of SP for saving registers to the stack.  */
2360                   gcc_assert (cfa.reg == STACK_POINTER_REGNUM);
2361                   cfa_store.reg = REGNO (dest);
2362                   cfa_store.offset = cfa.offset - cfa_temp.offset;
2363                 }
2364
2365               /* Rule 9 */
2366               else if (GET_CODE (src) == LO_SUM
2367                        && CONST_INT_P (XEXP (src, 1)))
2368                 {
2369                   cfa_temp.reg = REGNO (dest);
2370                   cfa_temp.offset = INTVAL (XEXP (src, 1));
2371                 }
2372               else
2373                 gcc_unreachable ();
2374             }
2375           break;
2376
2377           /* Rule 6 */
2378         case CONST_INT:
2379           cfa_temp.reg = REGNO (dest);
2380           cfa_temp.offset = INTVAL (src);
2381           break;
2382
2383           /* Rule 7 */
2384         case IOR:
2385           gcc_assert (REG_P (XEXP (src, 0))
2386                       && (unsigned) REGNO (XEXP (src, 0)) == cfa_temp.reg
2387                       && CONST_INT_P (XEXP (src, 1)));
2388
2389           if ((unsigned) REGNO (dest) != cfa_temp.reg)
2390             cfa_temp.reg = REGNO (dest);
2391           cfa_temp.offset |= INTVAL (XEXP (src, 1));
2392           break;
2393
2394           /* Skip over HIGH, assuming it will be followed by a LO_SUM,
2395              which will fill in all of the bits.  */
2396           /* Rule 8 */
2397         case HIGH:
2398           break;
2399
2400           /* Rule 15 */
2401         case UNSPEC:
2402         case UNSPEC_VOLATILE:
2403           gcc_assert (targetm.dwarf_handle_frame_unspec);
2404           targetm.dwarf_handle_frame_unspec (label, expr, XINT (src, 1));
2405           return;
2406
2407           /* Rule 16 */
2408         case AND:
2409           /* If this AND operation happens on stack pointer in prologue,
2410              we assume the stack is realigned and we extract the
2411              alignment.  */
2412           if (fde && XEXP (src, 0) == stack_pointer_rtx)
2413             {
2414               gcc_assert (cfa_store.reg == REGNO (XEXP (src, 0)));
2415               fde->stack_realign = 1;
2416               fde->stack_realignment = INTVAL (XEXP (src, 1));
2417               cfa_store.offset = 0;
2418
2419               if (cfa.reg != STACK_POINTER_REGNUM
2420                   && cfa.reg != HARD_FRAME_POINTER_REGNUM)
2421                 fde->drap_reg = cfa.reg;
2422             }
2423           return;
2424
2425         default:
2426           gcc_unreachable ();
2427         }
2428
2429       def_cfa_1 (label, &cfa);
2430       break;
2431
2432     case MEM:
2433
2434       /* Saving a register to the stack.  Make sure dest is relative to the
2435          CFA register.  */
2436       switch (GET_CODE (XEXP (dest, 0)))
2437         {
2438           /* Rule 10 */
2439           /* With a push.  */
2440         case PRE_MODIFY:
2441           /* We can't handle variable size modifications.  */
2442           gcc_assert (GET_CODE (XEXP (XEXP (XEXP (dest, 0), 1), 1))
2443                       == CONST_INT);
2444           offset = -INTVAL (XEXP (XEXP (XEXP (dest, 0), 1), 1));
2445
2446           gcc_assert (REGNO (XEXP (XEXP (dest, 0), 0)) == STACK_POINTER_REGNUM
2447                       && cfa_store.reg == STACK_POINTER_REGNUM);
2448
2449           cfa_store.offset += offset;
2450           if (cfa.reg == STACK_POINTER_REGNUM)
2451             cfa.offset = cfa_store.offset;
2452
2453           offset = -cfa_store.offset;
2454           break;
2455
2456           /* Rule 11 */
2457         case PRE_INC:
2458         case PRE_DEC:
2459           offset = GET_MODE_SIZE (GET_MODE (dest));
2460           if (GET_CODE (XEXP (dest, 0)) == PRE_INC)
2461             offset = -offset;
2462
2463           gcc_assert ((REGNO (XEXP (XEXP (dest, 0), 0))
2464                        == STACK_POINTER_REGNUM)
2465                       && cfa_store.reg == STACK_POINTER_REGNUM);
2466
2467           cfa_store.offset += offset;
2468
2469           /* Rule 18: If stack is aligned, we will use FP as a
2470              reference to represent the address of the stored
2471              regiser.  */
2472           if (fde
2473               && fde->stack_realign
2474               && src == hard_frame_pointer_rtx)
2475             {
2476               gcc_assert (cfa.reg != HARD_FRAME_POINTER_REGNUM);
2477               cfa_store.offset = 0;
2478             }
2479
2480           if (cfa.reg == STACK_POINTER_REGNUM)
2481             cfa.offset = cfa_store.offset;
2482
2483           offset = -cfa_store.offset;
2484           break;
2485
2486           /* Rule 12 */
2487           /* With an offset.  */
2488         case PLUS:
2489         case MINUS:
2490         case LO_SUM:
2491           {
2492             int regno;
2493
2494             gcc_assert (CONST_INT_P (XEXP (XEXP (dest, 0), 1))
2495                         && REG_P (XEXP (XEXP (dest, 0), 0)));
2496             offset = INTVAL (XEXP (XEXP (dest, 0), 1));
2497             if (GET_CODE (XEXP (dest, 0)) == MINUS)
2498               offset = -offset;
2499
2500             regno = REGNO (XEXP (XEXP (dest, 0), 0));
2501
2502             if (cfa_store.reg == (unsigned) regno)
2503               offset -= cfa_store.offset;
2504             else
2505               {
2506                 gcc_assert (cfa_temp.reg == (unsigned) regno);
2507                 offset -= cfa_temp.offset;
2508               }
2509           }
2510           break;
2511
2512           /* Rule 13 */
2513           /* Without an offset.  */
2514         case REG:
2515           {
2516             int regno = REGNO (XEXP (dest, 0));
2517
2518             if (cfa_store.reg == (unsigned) regno)
2519               offset = -cfa_store.offset;
2520             else
2521               {
2522                 gcc_assert (cfa_temp.reg == (unsigned) regno);
2523                 offset = -cfa_temp.offset;
2524               }
2525           }
2526           break;
2527
2528           /* Rule 14 */
2529         case POST_INC:
2530           gcc_assert (cfa_temp.reg
2531                       == (unsigned) REGNO (XEXP (XEXP (dest, 0), 0)));
2532           offset = -cfa_temp.offset;
2533           cfa_temp.offset -= GET_MODE_SIZE (GET_MODE (dest));
2534           break;
2535
2536         default:
2537           gcc_unreachable ();
2538         }
2539
2540         /* Rule 17 */
2541         /* If the source operand of this MEM operation is not a
2542            register, basically the source is return address.  Here
2543            we only care how much stack grew and we don't save it.  */
2544       if (!REG_P (src))
2545         break;
2546
2547       if (REGNO (src) != STACK_POINTER_REGNUM
2548           && REGNO (src) != HARD_FRAME_POINTER_REGNUM
2549           && (unsigned) REGNO (src) == cfa.reg)
2550         {
2551           /* We're storing the current CFA reg into the stack.  */
2552
2553           if (cfa.offset == 0)
2554             {
2555               /* Rule 19 */
2556               /* If stack is aligned, putting CFA reg into stack means
2557                  we can no longer use reg + offset to represent CFA.
2558                  Here we use DW_CFA_def_cfa_expression instead.  The
2559                  result of this expression equals to the original CFA
2560                  value.  */
2561               if (fde
2562                   && fde->stack_realign
2563                   && cfa.indirect == 0
2564                   && cfa.reg != HARD_FRAME_POINTER_REGNUM)
2565                 {
2566                   dw_cfa_location cfa_exp;
2567
2568                   gcc_assert (fde->drap_reg == cfa.reg);
2569
2570                   cfa_exp.indirect = 1;
2571                   cfa_exp.reg = HARD_FRAME_POINTER_REGNUM;
2572                   cfa_exp.base_offset = offset;
2573                   cfa_exp.offset = 0;
2574
2575                   fde->drap_reg_saved = 1;
2576
2577                   def_cfa_1 (label, &cfa_exp);
2578                   break;
2579                 }
2580
2581               /* If the source register is exactly the CFA, assume
2582                  we're saving SP like any other register; this happens
2583                  on the ARM.  */
2584               def_cfa_1 (label, &cfa);
2585               queue_reg_save (label, stack_pointer_rtx, NULL_RTX, offset);
2586               break;
2587             }
2588           else
2589             {
2590               /* Otherwise, we'll need to look in the stack to
2591                  calculate the CFA.  */
2592               rtx x = XEXP (dest, 0);
2593
2594               if (!REG_P (x))
2595                 x = XEXP (x, 0);
2596               gcc_assert (REG_P (x));
2597
2598               cfa.reg = REGNO (x);
2599               cfa.base_offset = offset;
2600               cfa.indirect = 1;
2601               def_cfa_1 (label, &cfa);
2602               break;
2603             }
2604         }
2605
2606       def_cfa_1 (label, &cfa);
2607       {
2608         span = targetm.dwarf_register_span (src);
2609
2610         if (!span)
2611           queue_reg_save (label, src, NULL_RTX, offset);
2612         else
2613           {
2614             /* We have a PARALLEL describing where the contents of SRC
2615                live.  Queue register saves for each piece of the
2616                PARALLEL.  */
2617             int par_index;
2618             int limit;
2619             HOST_WIDE_INT span_offset = offset;
2620
2621             gcc_assert (GET_CODE (span) == PARALLEL);
2622
2623             limit = XVECLEN (span, 0);
2624             for (par_index = 0; par_index < limit; par_index++)
2625               {
2626                 rtx elem = XVECEXP (span, 0, par_index);
2627
2628                 queue_reg_save (label, elem, NULL_RTX, span_offset);
2629                 span_offset += GET_MODE_SIZE (GET_MODE (elem));
2630               }
2631           }
2632       }
2633       break;
2634
2635     default:
2636       gcc_unreachable ();
2637     }
2638 }
2639
2640 /* Record call frame debugging information for INSN, which either
2641    sets SP or FP (adjusting how we calculate the frame address) or saves a
2642    register to the stack.  If INSN is NULL_RTX, initialize our state.
2643
2644    If AFTER_P is false, we're being called before the insn is emitted,
2645    otherwise after.  Call instructions get invoked twice.  */
2646
2647 void
2648 dwarf2out_frame_debug (rtx insn, bool after_p)
2649 {
2650   const char *label;
2651   rtx note, n;
2652   bool handled_one = false;
2653
2654   if (insn == NULL_RTX)
2655     {
2656       size_t i;
2657
2658       /* Flush any queued register saves.  */
2659       flush_queued_reg_saves ();
2660
2661       /* Set up state for generating call frame debug info.  */
2662       lookup_cfa (&cfa);
2663       gcc_assert (cfa.reg
2664                   == (unsigned long)DWARF_FRAME_REGNUM (STACK_POINTER_REGNUM));
2665
2666       cfa.reg = STACK_POINTER_REGNUM;
2667       cfa_store = cfa;
2668       cfa_temp.reg = -1;
2669       cfa_temp.offset = 0;
2670
2671       for (i = 0; i < num_regs_saved_in_regs; i++)
2672         {
2673           regs_saved_in_regs[i].orig_reg = NULL_RTX;
2674           regs_saved_in_regs[i].saved_in_reg = NULL_RTX;
2675         }
2676       num_regs_saved_in_regs = 0;
2677
2678       if (barrier_args_size)
2679         {
2680           XDELETEVEC (barrier_args_size);
2681           barrier_args_size = NULL;
2682         }
2683       return;
2684     }
2685
2686   if (!NONJUMP_INSN_P (insn) || clobbers_queued_reg_save (insn))
2687     flush_queued_reg_saves ();
2688
2689   if (!RTX_FRAME_RELATED_P (insn))
2690     {
2691       /* ??? This should be done unconditionally since stack adjustments
2692          matter if the stack pointer is not the CFA register anymore but
2693          is still used to save registers.  */
2694       if (!ACCUMULATE_OUTGOING_ARGS)
2695         dwarf2out_notice_stack_adjust (insn, after_p);
2696       return;
2697     }
2698
2699   label = dwarf2out_cfi_label (false);
2700
2701   for (note = REG_NOTES (insn); note; note = XEXP (note, 1))
2702     switch (REG_NOTE_KIND (note))
2703       {
2704       case REG_FRAME_RELATED_EXPR:
2705         insn = XEXP (note, 0);
2706         goto found;
2707
2708       case REG_CFA_DEF_CFA:
2709         dwarf2out_frame_debug_def_cfa (XEXP (note, 0), label);
2710         handled_one = true;
2711         break;
2712
2713       case REG_CFA_ADJUST_CFA:
2714         n = XEXP (note, 0);
2715         if (n == NULL)
2716           {
2717             n = PATTERN (insn);
2718             if (GET_CODE (n) == PARALLEL)
2719               n = XVECEXP (n, 0, 0);
2720           }
2721         dwarf2out_frame_debug_adjust_cfa (n, label);
2722         handled_one = true;
2723         break;
2724
2725       case REG_CFA_OFFSET:
2726         n = XEXP (note, 0);
2727         if (n == NULL)
2728           n = single_set (insn);
2729         dwarf2out_frame_debug_cfa_offset (n, label);
2730         handled_one = true;
2731         break;
2732
2733       case REG_CFA_REGISTER:
2734         n = XEXP (note, 0);
2735         if (n == NULL)
2736           {
2737             n = PATTERN (insn);
2738             if (GET_CODE (n) == PARALLEL)
2739               n = XVECEXP (n, 0, 0);
2740           }
2741         dwarf2out_frame_debug_cfa_register (n, label);
2742         handled_one = true;
2743         break;
2744
2745       case REG_CFA_RESTORE:
2746         n = XEXP (note, 0);
2747         if (n == NULL)
2748           {
2749             n = PATTERN (insn);
2750             if (GET_CODE (n) == PARALLEL)
2751               n = XVECEXP (n, 0, 0);
2752             n = XEXP (n, 0);
2753           }
2754         dwarf2out_frame_debug_cfa_restore (n, label);
2755         handled_one = true;
2756         break;
2757
2758       case REG_CFA_SET_VDRAP:
2759         n = XEXP (note, 0);
2760         if (REG_P (n))
2761           {
2762             dw_fde_ref fde = current_fde ();
2763             if (fde)
2764               {
2765                 gcc_assert (fde->vdrap_reg == INVALID_REGNUM);
2766                 if (REG_P (n))
2767                   fde->vdrap_reg = REGNO (n);
2768               }
2769           }
2770         handled_one = true;
2771         break;
2772
2773       default:
2774         break;
2775       }
2776   if (handled_one)
2777     return;
2778
2779   insn = PATTERN (insn);
2780  found:
2781   dwarf2out_frame_debug_expr (insn, label);
2782 }
2783
2784 /* Determine if we need to save and restore CFI information around this
2785    epilogue.  If SIBCALL is true, then this is a sibcall epilogue.  If
2786    we do need to save/restore, then emit the save now, and insert a
2787    NOTE_INSN_CFA_RESTORE_STATE at the appropriate place in the stream.  */
2788
2789 void
2790 dwarf2out_begin_epilogue (rtx insn)
2791 {
2792   bool saw_frp = false;
2793   rtx i;
2794
2795   /* Scan forward to the return insn, noticing if there are possible
2796      frame related insns.  */
2797   for (i = NEXT_INSN (insn); i ; i = NEXT_INSN (i))
2798     {
2799       if (!INSN_P (i))
2800         continue;
2801
2802       /* Look for both regular and sibcalls to end the block.  */
2803       if (returnjump_p (i))
2804         break;
2805       if (CALL_P (i) && SIBLING_CALL_P (i))
2806         break;
2807
2808       if (GET_CODE (PATTERN (i)) == SEQUENCE)
2809         {
2810           int idx;
2811           rtx seq = PATTERN (i);
2812
2813           if (returnjump_p (XVECEXP (seq, 0, 0)))
2814             break;
2815           if (CALL_P (XVECEXP (seq, 0, 0))
2816               && SIBLING_CALL_P (XVECEXP (seq, 0, 0)))
2817             break;
2818
2819           for (idx = 0; idx < XVECLEN (seq, 0); idx++)
2820             if (RTX_FRAME_RELATED_P (XVECEXP (seq, 0, idx)))
2821               saw_frp = true;
2822         }
2823
2824       if (RTX_FRAME_RELATED_P (i))
2825         saw_frp = true;
2826     }
2827
2828   /* If the port doesn't emit epilogue unwind info, we don't need a
2829      save/restore pair.  */
2830   if (!saw_frp)
2831     return;
2832
2833   /* Otherwise, search forward to see if the return insn was the last
2834      basic block of the function.  If so, we don't need save/restore.  */
2835   gcc_assert (i != NULL);
2836   i = next_real_insn (i);
2837   if (i == NULL)
2838     return;
2839
2840   /* Insert the restore before that next real insn in the stream, and before
2841      a potential NOTE_INSN_EPILOGUE_BEG -- we do need these notes to be
2842      properly nested.  This should be after any label or alignment.  This
2843      will be pushed into the CFI stream by the function below.  */
2844   while (1)
2845     {
2846       rtx p = PREV_INSN (i);
2847       if (!NOTE_P (p))
2848         break;
2849       if (NOTE_KIND (p) == NOTE_INSN_BASIC_BLOCK)
2850         break;
2851       i = p;
2852     }
2853   emit_note_before (NOTE_INSN_CFA_RESTORE_STATE, i);
2854
2855   emit_cfa_remember = true;
2856
2857   /* And emulate the state save.  */
2858   gcc_assert (!cfa_remember.in_use);
2859   cfa_remember = cfa;
2860   cfa_remember.in_use = 1;
2861 }
2862
2863 /* A "subroutine" of dwarf2out_begin_epilogue.  Emit the restore required.  */
2864
2865 void
2866 dwarf2out_frame_debug_restore_state (void)
2867 {
2868   dw_cfi_ref cfi = new_cfi ();
2869   const char *label = dwarf2out_cfi_label (false);
2870
2871   cfi->dw_cfi_opc = DW_CFA_restore_state;
2872   add_fde_cfi (label, cfi);
2873
2874   gcc_assert (cfa_remember.in_use);
2875   cfa = cfa_remember;
2876   cfa_remember.in_use = 0;
2877 }
2878
2879 #endif
2880
2881 /* Describe for the GTY machinery what parts of dw_cfi_oprnd1 are used.  */
2882 static enum dw_cfi_oprnd_type dw_cfi_oprnd1_desc
2883  (enum dwarf_call_frame_info cfi);
2884
2885 static enum dw_cfi_oprnd_type
2886 dw_cfi_oprnd1_desc (enum dwarf_call_frame_info cfi)
2887 {
2888   switch (cfi)
2889     {
2890     case DW_CFA_nop:
2891     case DW_CFA_GNU_window_save:
2892     case DW_CFA_remember_state:
2893     case DW_CFA_restore_state:
2894       return dw_cfi_oprnd_unused;
2895
2896     case DW_CFA_set_loc:
2897     case DW_CFA_advance_loc1:
2898     case DW_CFA_advance_loc2:
2899     case DW_CFA_advance_loc4:
2900     case DW_CFA_MIPS_advance_loc8:
2901       return dw_cfi_oprnd_addr;
2902
2903     case DW_CFA_offset:
2904     case DW_CFA_offset_extended:
2905     case DW_CFA_def_cfa:
2906     case DW_CFA_offset_extended_sf:
2907     case DW_CFA_def_cfa_sf:
2908     case DW_CFA_restore:
2909     case DW_CFA_restore_extended:
2910     case DW_CFA_undefined:
2911     case DW_CFA_same_value:
2912     case DW_CFA_def_cfa_register:
2913     case DW_CFA_register:
2914     case DW_CFA_expression:
2915       return dw_cfi_oprnd_reg_num;
2916
2917     case DW_CFA_def_cfa_offset:
2918     case DW_CFA_GNU_args_size:
2919     case DW_CFA_def_cfa_offset_sf:
2920       return dw_cfi_oprnd_offset;
2921
2922     case DW_CFA_def_cfa_expression:
2923       return dw_cfi_oprnd_loc;
2924
2925     default:
2926       gcc_unreachable ();
2927     }
2928 }
2929
2930 /* Describe for the GTY machinery what parts of dw_cfi_oprnd2 are used.  */
2931 static enum dw_cfi_oprnd_type dw_cfi_oprnd2_desc
2932  (enum dwarf_call_frame_info cfi);
2933
2934 static enum dw_cfi_oprnd_type
2935 dw_cfi_oprnd2_desc (enum dwarf_call_frame_info cfi)
2936 {
2937   switch (cfi)
2938     {
2939     case DW_CFA_def_cfa:
2940     case DW_CFA_def_cfa_sf:
2941     case DW_CFA_offset:
2942     case DW_CFA_offset_extended_sf:
2943     case DW_CFA_offset_extended:
2944       return dw_cfi_oprnd_offset;
2945
2946     case DW_CFA_register:
2947       return dw_cfi_oprnd_reg_num;
2948
2949     case DW_CFA_expression:
2950       return dw_cfi_oprnd_loc;
2951
2952     default:
2953       return dw_cfi_oprnd_unused;
2954     }
2955 }
2956
2957 #if defined (DWARF2_DEBUGGING_INFO) || defined (DWARF2_UNWIND_INFO)
2958
2959 /* Switch [BACK] to eh_frame_section.  If we don't have an eh_frame_section,
2960    switch to the data section instead, and write out a synthetic start label
2961    for collect2 the first time around.  */
2962
2963 static void
2964 switch_to_eh_frame_section (bool back)
2965 {
2966   tree label;
2967
2968 #ifdef EH_FRAME_SECTION_NAME
2969   if (eh_frame_section == 0)
2970     {
2971       int flags;
2972
2973       if (EH_TABLES_CAN_BE_READ_ONLY)
2974         {
2975           int fde_encoding;
2976           int per_encoding;
2977           int lsda_encoding;
2978
2979           fde_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/1,
2980                                                        /*global=*/0);
2981           per_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/2,
2982                                                        /*global=*/1);
2983           lsda_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/0,
2984                                                         /*global=*/0);
2985           flags = ((! flag_pic
2986                     || ((fde_encoding & 0x70) != DW_EH_PE_absptr
2987                         && (fde_encoding & 0x70) != DW_EH_PE_aligned
2988                         && (per_encoding & 0x70) != DW_EH_PE_absptr
2989                         && (per_encoding & 0x70) != DW_EH_PE_aligned
2990                         && (lsda_encoding & 0x70) != DW_EH_PE_absptr
2991                         && (lsda_encoding & 0x70) != DW_EH_PE_aligned))
2992                    ? 0 : SECTION_WRITE);
2993         }
2994       else
2995         flags = SECTION_WRITE;
2996       eh_frame_section = get_section (EH_FRAME_SECTION_NAME, flags, NULL);
2997     }
2998 #endif
2999
3000   if (eh_frame_section)
3001     switch_to_section (eh_frame_section);
3002   else
3003     {
3004       /* We have no special eh_frame section.  Put the information in
3005          the data section and emit special labels to guide collect2.  */
3006       switch_to_section (data_section);
3007
3008       if (!back)
3009         {
3010           label = get_file_function_name ("F");
3011           ASM_OUTPUT_ALIGN (asm_out_file, floor_log2 (PTR_SIZE));
3012           targetm.asm_out.globalize_label (asm_out_file,
3013                                            IDENTIFIER_POINTER (label));
3014           ASM_OUTPUT_LABEL (asm_out_file, IDENTIFIER_POINTER (label));
3015         }
3016     }
3017 }
3018
3019 /* Switch [BACK] to the eh or debug frame table section, depending on
3020    FOR_EH.  */
3021
3022 static void
3023 switch_to_frame_table_section (int for_eh, bool back)
3024 {
3025   if (for_eh)
3026     switch_to_eh_frame_section (back);
3027   else
3028     {
3029       if (!debug_frame_section)
3030         debug_frame_section = get_section (DEBUG_FRAME_SECTION,
3031                                            SECTION_DEBUG, NULL);
3032       switch_to_section (debug_frame_section);
3033     }
3034 }
3035
3036 /* Output a Call Frame Information opcode and its operand(s).  */
3037
3038 static void
3039 output_cfi (dw_cfi_ref cfi, dw_fde_ref fde, int for_eh)
3040 {
3041   unsigned long r;
3042   HOST_WIDE_INT off;
3043
3044   if (cfi->dw_cfi_opc == DW_CFA_advance_loc)
3045     dw2_asm_output_data (1, (cfi->dw_cfi_opc
3046                              | (cfi->dw_cfi_oprnd1.dw_cfi_offset & 0x3f)),
3047                          "DW_CFA_advance_loc " HOST_WIDE_INT_PRINT_HEX,
3048                          ((unsigned HOST_WIDE_INT)
3049                           cfi->dw_cfi_oprnd1.dw_cfi_offset));
3050   else if (cfi->dw_cfi_opc == DW_CFA_offset)
3051     {
3052       r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, for_eh);
3053       dw2_asm_output_data (1, (cfi->dw_cfi_opc | (r & 0x3f)),
3054                            "DW_CFA_offset, column %#lx", r);
3055       off = div_data_align (cfi->dw_cfi_oprnd2.dw_cfi_offset);
3056       dw2_asm_output_data_uleb128 (off, NULL);
3057     }
3058   else if (cfi->dw_cfi_opc == DW_CFA_restore)
3059     {
3060       r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, for_eh);
3061       dw2_asm_output_data (1, (cfi->dw_cfi_opc | (r & 0x3f)),
3062                            "DW_CFA_restore, column %#lx", r);
3063     }
3064   else
3065     {
3066       dw2_asm_output_data (1, cfi->dw_cfi_opc,
3067                            "%s", dwarf_cfi_name (cfi->dw_cfi_opc));
3068
3069       switch (cfi->dw_cfi_opc)
3070         {
3071         case DW_CFA_set_loc:
3072           if (for_eh)
3073             dw2_asm_output_encoded_addr_rtx (
3074                 ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/1, /*global=*/0),
3075                 gen_rtx_SYMBOL_REF (Pmode, cfi->dw_cfi_oprnd1.dw_cfi_addr),
3076                 false, NULL);
3077           else
3078             dw2_asm_output_addr (DWARF2_ADDR_SIZE,
3079                                  cfi->dw_cfi_oprnd1.dw_cfi_addr, NULL);
3080           fde->dw_fde_current_label = cfi->dw_cfi_oprnd1.dw_cfi_addr;
3081           break;
3082
3083         case DW_CFA_advance_loc1:
3084           dw2_asm_output_delta (1, cfi->dw_cfi_oprnd1.dw_cfi_addr,
3085                                 fde->dw_fde_current_label, NULL);
3086           fde->dw_fde_current_label = cfi->dw_cfi_oprnd1.dw_cfi_addr;
3087           break;
3088
3089         case DW_CFA_advance_loc2:
3090           dw2_asm_output_delta (2, cfi->dw_cfi_oprnd1.dw_cfi_addr,
3091                                 fde->dw_fde_current_label, NULL);
3092           fde->dw_fde_current_label = cfi->dw_cfi_oprnd1.dw_cfi_addr;
3093           break;
3094
3095         case DW_CFA_advance_loc4:
3096           dw2_asm_output_delta (4, cfi->dw_cfi_oprnd1.dw_cfi_addr,
3097                                 fde->dw_fde_current_label, NULL);
3098           fde->dw_fde_current_label = cfi->dw_cfi_oprnd1.dw_cfi_addr;
3099           break;
3100
3101         case DW_CFA_MIPS_advance_loc8:
3102           dw2_asm_output_delta (8, cfi->dw_cfi_oprnd1.dw_cfi_addr,
3103                                 fde->dw_fde_current_label, NULL);
3104           fde->dw_fde_current_label = cfi->dw_cfi_oprnd1.dw_cfi_addr;
3105           break;
3106
3107         case DW_CFA_offset_extended:
3108           r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, for_eh);
3109           dw2_asm_output_data_uleb128 (r, NULL);
3110           off = div_data_align (cfi->dw_cfi_oprnd2.dw_cfi_offset);
3111           dw2_asm_output_data_uleb128 (off, NULL);
3112           break;
3113
3114         case DW_CFA_def_cfa:
3115           r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, for_eh);
3116           dw2_asm_output_data_uleb128 (r, NULL);
3117           dw2_asm_output_data_uleb128 (cfi->dw_cfi_oprnd2.dw_cfi_offset, NULL);
3118           break;
3119
3120         case DW_CFA_offset_extended_sf:
3121           r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, for_eh);
3122           dw2_asm_output_data_uleb128 (r, NULL);
3123           off = div_data_align (cfi->dw_cfi_oprnd2.dw_cfi_offset);
3124           dw2_asm_output_data_sleb128 (off, NULL);
3125           break;
3126
3127         case DW_CFA_def_cfa_sf:
3128           r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, for_eh);
3129           dw2_asm_output_data_uleb128 (r, NULL);
3130           off = div_data_align (cfi->dw_cfi_oprnd2.dw_cfi_offset);
3131           dw2_asm_output_data_sleb128 (off, NULL);
3132           break;
3133
3134         case DW_CFA_restore_extended:
3135         case DW_CFA_undefined:
3136         case DW_CFA_same_value:
3137         case DW_CFA_def_cfa_register:
3138           r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, for_eh);
3139           dw2_asm_output_data_uleb128 (r, NULL);
3140           break;
3141
3142         case DW_CFA_register:
3143           r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, for_eh);
3144           dw2_asm_output_data_uleb128 (r, NULL);
3145           r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd2.dw_cfi_reg_num, for_eh);
3146           dw2_asm_output_data_uleb128 (r, NULL);
3147           break;
3148
3149         case DW_CFA_def_cfa_offset:
3150         case DW_CFA_GNU_args_size:
3151           dw2_asm_output_data_uleb128 (cfi->dw_cfi_oprnd1.dw_cfi_offset, NULL);
3152           break;
3153
3154         case DW_CFA_def_cfa_offset_sf:
3155           off = div_data_align (cfi->dw_cfi_oprnd1.dw_cfi_offset);
3156           dw2_asm_output_data_sleb128 (off, NULL);
3157           break;
3158
3159         case DW_CFA_GNU_window_save:
3160           break;
3161
3162         case DW_CFA_def_cfa_expression:
3163         case DW_CFA_expression:
3164           output_cfa_loc (cfi);
3165           break;
3166
3167         case DW_CFA_GNU_negative_offset_extended:
3168           /* Obsoleted by DW_CFA_offset_extended_sf.  */
3169           gcc_unreachable ();
3170
3171         default:
3172           break;
3173         }
3174     }
3175 }
3176
3177 /* Similar, but do it via assembler directives instead.  */
3178
3179 static void
3180 output_cfi_directive (dw_cfi_ref cfi)
3181 {
3182   unsigned long r, r2;
3183
3184   switch (cfi->dw_cfi_opc)
3185     {
3186     case DW_CFA_advance_loc:
3187     case DW_CFA_advance_loc1:
3188     case DW_CFA_advance_loc2:
3189     case DW_CFA_advance_loc4:
3190     case DW_CFA_MIPS_advance_loc8:
3191     case DW_CFA_set_loc:
3192       /* Should only be created by add_fde_cfi in a code path not
3193          followed when emitting via directives.  The assembler is
3194          going to take care of this for us.  */
3195       gcc_unreachable ();
3196
3197     case DW_CFA_offset:
3198     case DW_CFA_offset_extended:
3199     case DW_CFA_offset_extended_sf:
3200       r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, 1);
3201       fprintf (asm_out_file, "\t.cfi_offset %lu, "HOST_WIDE_INT_PRINT_DEC"\n",
3202                r, cfi->dw_cfi_oprnd2.dw_cfi_offset);
3203       break;
3204
3205     case DW_CFA_restore:
3206     case DW_CFA_restore_extended:
3207       r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, 1);
3208       fprintf (asm_out_file, "\t.cfi_restore %lu\n", r);
3209       break;
3210
3211     case DW_CFA_undefined:
3212       r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, 1);
3213       fprintf (asm_out_file, "\t.cfi_undefined %lu\n", r);
3214       break;
3215
3216     case DW_CFA_same_value:
3217       r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, 1);
3218       fprintf (asm_out_file, "\t.cfi_same_value %lu\n", r);
3219       break;
3220
3221     case DW_CFA_def_cfa:
3222     case DW_CFA_def_cfa_sf:
3223       r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, 1);
3224       fprintf (asm_out_file, "\t.cfi_def_cfa %lu, "HOST_WIDE_INT_PRINT_DEC"\n",
3225                r, cfi->dw_cfi_oprnd2.dw_cfi_offset);
3226       break;
3227
3228     case DW_CFA_def_cfa_register:
3229       r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, 1);
3230       fprintf (asm_out_file, "\t.cfi_def_cfa_register %lu\n", r);
3231       break;
3232
3233     case DW_CFA_register:
3234       r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, 1);
3235       r2 = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd2.dw_cfi_reg_num, 1);
3236       fprintf (asm_out_file, "\t.cfi_register %lu, %lu\n", r, r2);
3237       break;
3238
3239     case DW_CFA_def_cfa_offset:
3240     case DW_CFA_def_cfa_offset_sf:
3241       fprintf (asm_out_file, "\t.cfi_def_cfa_offset "
3242                HOST_WIDE_INT_PRINT_DEC"\n",
3243                cfi->dw_cfi_oprnd1.dw_cfi_offset);
3244       break;
3245
3246     case DW_CFA_remember_state:
3247       fprintf (asm_out_file, "\t.cfi_remember_state\n");
3248       break;
3249     case DW_CFA_restore_state:
3250       fprintf (asm_out_file, "\t.cfi_restore_state\n");
3251       break;
3252
3253     case DW_CFA_GNU_args_size:
3254       fprintf (asm_out_file, "\t.cfi_escape %#x,", DW_CFA_GNU_args_size);
3255       dw2_asm_output_data_uleb128_raw (cfi->dw_cfi_oprnd1.dw_cfi_offset);
3256       if (flag_debug_asm)
3257         fprintf (asm_out_file, "\t%s args_size "HOST_WIDE_INT_PRINT_DEC,
3258                  ASM_COMMENT_START, cfi->dw_cfi_oprnd1.dw_cfi_offset);
3259       fputc ('\n', asm_out_file);
3260       break;
3261
3262     case DW_CFA_GNU_window_save:
3263       fprintf (asm_out_file, "\t.cfi_window_save\n");
3264       break;
3265
3266     case DW_CFA_def_cfa_expression:
3267     case DW_CFA_expression:
3268       fprintf (asm_out_file, "\t.cfi_escape %#x,", cfi->dw_cfi_opc);
3269       output_cfa_loc_raw (cfi);
3270       fputc ('\n', asm_out_file);
3271       break;
3272
3273     default:
3274       gcc_unreachable ();
3275     }
3276 }
3277
3278 DEF_VEC_P (dw_cfi_ref);
3279 DEF_VEC_ALLOC_P (dw_cfi_ref, heap);
3280
3281 /* Output CFIs to bring current FDE to the same state as after executing
3282    CFIs in CFI chain.  DO_CFI_ASM is true if .cfi_* directives shall
3283    be emitted, false otherwise.  If it is false, FDE and FOR_EH are the
3284    other arguments to pass to output_cfi.  */
3285
3286 static void
3287 output_cfis (dw_cfi_ref cfi, bool do_cfi_asm, dw_fde_ref fde, bool for_eh)
3288 {
3289   struct dw_cfi_struct cfi_buf;
3290   dw_cfi_ref cfi2;
3291   dw_cfi_ref cfi_args_size = NULL, cfi_cfa = NULL, cfi_cfa_offset = NULL;
3292   VEC (dw_cfi_ref, heap) *regs = VEC_alloc (dw_cfi_ref, heap, 32);
3293   unsigned int len, idx;
3294
3295   for (;; cfi = cfi->dw_cfi_next)
3296     switch (cfi ? cfi->dw_cfi_opc : DW_CFA_nop)
3297       {
3298       case DW_CFA_advance_loc:
3299       case DW_CFA_advance_loc1:
3300       case DW_CFA_advance_loc2:
3301       case DW_CFA_advance_loc4:
3302       case DW_CFA_MIPS_advance_loc8:
3303       case DW_CFA_set_loc:
3304         /* All advances should be ignored.  */
3305         break;
3306       case DW_CFA_remember_state:
3307         {
3308           dw_cfi_ref args_size = cfi_args_size;
3309
3310           /* Skip everything between .cfi_remember_state and
3311              .cfi_restore_state.  */
3312           for (cfi2 = cfi->dw_cfi_next; cfi2; cfi2 = cfi2->dw_cfi_next)
3313             if (cfi2->dw_cfi_opc == DW_CFA_restore_state)
3314               break;
3315             else if (cfi2->dw_cfi_opc == DW_CFA_GNU_args_size)
3316               args_size = cfi2;
3317             else
3318               gcc_assert (cfi2->dw_cfi_opc != DW_CFA_remember_state);
3319
3320           if (cfi2 == NULL)
3321             goto flush_all;
3322           else
3323             {
3324               cfi = cfi2;
3325               cfi_args_size = args_size;
3326             }
3327           break;
3328         }
3329       case DW_CFA_GNU_args_size:
3330         cfi_args_size = cfi;
3331         break;
3332       case DW_CFA_GNU_window_save:
3333         goto flush_all;
3334       case DW_CFA_offset:
3335       case DW_CFA_offset_extended:
3336       case DW_CFA_offset_extended_sf:
3337       case DW_CFA_restore:
3338       case DW_CFA_restore_extended:
3339       case DW_CFA_undefined:
3340       case DW_CFA_same_value:
3341       case DW_CFA_register:
3342       case DW_CFA_val_offset:
3343       case DW_CFA_val_offset_sf:
3344       case DW_CFA_expression:
3345       case DW_CFA_val_expression:
3346       case DW_CFA_GNU_negative_offset_extended:
3347         if (VEC_length (dw_cfi_ref, regs) <= cfi->dw_cfi_oprnd1.dw_cfi_reg_num)
3348           VEC_safe_grow_cleared (dw_cfi_ref, heap, regs,
3349                                  cfi->dw_cfi_oprnd1.dw_cfi_reg_num + 1);
3350         VEC_replace (dw_cfi_ref, regs, cfi->dw_cfi_oprnd1.dw_cfi_reg_num, cfi);
3351         break;
3352       case DW_CFA_def_cfa:
3353       case DW_CFA_def_cfa_sf:
3354       case DW_CFA_def_cfa_expression:
3355         cfi_cfa = cfi;
3356         cfi_cfa_offset = cfi;
3357         break;
3358       case DW_CFA_def_cfa_register:
3359         cfi_cfa = cfi;
3360         break;
3361       case DW_CFA_def_cfa_offset:
3362       case DW_CFA_def_cfa_offset_sf:
3363         cfi_cfa_offset = cfi;
3364         break;
3365       case DW_CFA_nop:
3366         gcc_assert (cfi == NULL);
3367       flush_all:
3368         len = VEC_length (dw_cfi_ref, regs);
3369         for (idx = 0; idx < len; idx++)
3370           {
3371             cfi2 = VEC_replace (dw_cfi_ref, regs, idx, NULL);
3372             if (cfi2 != NULL
3373                 && cfi2->dw_cfi_opc != DW_CFA_restore
3374                 && cfi2->dw_cfi_opc != DW_CFA_restore_extended)
3375               {
3376                 if (do_cfi_asm)
3377                   output_cfi_directive (cfi2);
3378                 else
3379                   output_cfi (cfi2, fde, for_eh);
3380               }
3381           }
3382         if (cfi_cfa && cfi_cfa_offset && cfi_cfa_offset != cfi_cfa)
3383           {
3384             gcc_assert (cfi_cfa->dw_cfi_opc != DW_CFA_def_cfa_expression);
3385             cfi_buf = *cfi_cfa;
3386             switch (cfi_cfa_offset->dw_cfi_opc)
3387               {
3388               case DW_CFA_def_cfa_offset:
3389                 cfi_buf.dw_cfi_opc = DW_CFA_def_cfa;
3390                 cfi_buf.dw_cfi_oprnd2 = cfi_cfa_offset->dw_cfi_oprnd1;
3391                 break;
3392               case DW_CFA_def_cfa_offset_sf:
3393                 cfi_buf.dw_cfi_opc = DW_CFA_def_cfa_sf;
3394                 cfi_buf.dw_cfi_oprnd2 = cfi_cfa_offset->dw_cfi_oprnd1;
3395                 break;
3396               case DW_CFA_def_cfa:
3397               case DW_CFA_def_cfa_sf:
3398                 cfi_buf.dw_cfi_opc = cfi_cfa_offset->dw_cfi_opc;
3399                 cfi_buf.dw_cfi_oprnd2 = cfi_cfa_offset->dw_cfi_oprnd2;
3400                 break;
3401               default:
3402                 gcc_unreachable ();
3403               }
3404             cfi_cfa = &cfi_buf;
3405           }
3406         else if (cfi_cfa_offset)
3407           cfi_cfa = cfi_cfa_offset;
3408         if (cfi_cfa)
3409           {
3410             if (do_cfi_asm)
3411               output_cfi_directive (cfi_cfa);
3412             else
3413               output_cfi (cfi_cfa, fde, for_eh);
3414           }
3415         cfi_cfa = NULL;
3416         cfi_cfa_offset = NULL;
3417         if (cfi_args_size
3418             && cfi_args_size->dw_cfi_oprnd1.dw_cfi_offset)
3419           {
3420             if (do_cfi_asm)
3421               output_cfi_directive (cfi_args_size);
3422             else
3423               output_cfi (cfi_args_size, fde, for_eh);
3424           }
3425         cfi_args_size = NULL;
3426         if (cfi == NULL)
3427           {
3428             VEC_free (dw_cfi_ref, heap, regs);
3429             return;
3430           }
3431         else if (do_cfi_asm)
3432           output_cfi_directive (cfi);
3433         else
3434           output_cfi (cfi, fde, for_eh);
3435         break;
3436       default:
3437         gcc_unreachable ();
3438     }
3439 }
3440
3441 /* Output one FDE.  */
3442
3443 static void
3444 output_fde (dw_fde_ref fde, bool for_eh, bool second,
3445             char *section_start_label, int fde_encoding, char *augmentation,
3446             bool any_lsda_needed, int lsda_encoding)
3447 {
3448   const char *begin, *end;
3449   static unsigned int j;
3450   char l1[20], l2[20];
3451   dw_cfi_ref cfi;
3452
3453   targetm.asm_out.unwind_label (asm_out_file, fde->decl, for_eh,
3454                                 /* empty */ 0);
3455   targetm.asm_out.internal_label (asm_out_file, FDE_LABEL,
3456                                   for_eh + j);
3457   ASM_GENERATE_INTERNAL_LABEL (l1, FDE_AFTER_SIZE_LABEL, for_eh + j);
3458   ASM_GENERATE_INTERNAL_LABEL (l2, FDE_END_LABEL, for_eh + j);
3459   if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4 && !for_eh)
3460     dw2_asm_output_data (4, 0xffffffff, "Initial length escape value"
3461                          " indicating 64-bit DWARF extension");
3462   dw2_asm_output_delta (for_eh ? 4 : DWARF_OFFSET_SIZE, l2, l1,
3463                         "FDE Length");
3464   ASM_OUTPUT_LABEL (asm_out_file, l1);
3465
3466   if (for_eh)
3467     dw2_asm_output_delta (4, l1, section_start_label, "FDE CIE offset");
3468   else
3469     dw2_asm_output_offset (DWARF_OFFSET_SIZE, section_start_label,
3470                            debug_frame_section, "FDE CIE offset");
3471
3472   if (!fde->dw_fde_switched_sections)
3473     {
3474       begin = fde->dw_fde_begin;
3475       end = fde->dw_fde_end;
3476     }
3477   else
3478     {
3479       /* For the first section, prefer dw_fde_begin over
3480          dw_fde_{hot,cold}_section_label, as the latter
3481          might be separated from the real start of the
3482          function by alignment padding.  */
3483       if (!second)
3484         begin = fde->dw_fde_begin;
3485       else if (fde->dw_fde_switched_cold_to_hot)
3486         begin = fde->dw_fde_hot_section_label;
3487       else
3488         begin = fde->dw_fde_unlikely_section_label;
3489       if (second ^ fde->dw_fde_switched_cold_to_hot)
3490         end = fde->dw_fde_unlikely_section_end_label;
3491       else
3492         end = fde->dw_fde_hot_section_end_label;
3493     }
3494
3495   if (for_eh)
3496     {
3497       rtx sym_ref = gen_rtx_SYMBOL_REF (Pmode, begin);
3498       SYMBOL_REF_FLAGS (sym_ref) |= SYMBOL_FLAG_LOCAL;
3499       dw2_asm_output_encoded_addr_rtx (fde_encoding, sym_ref, false,
3500                                        "FDE initial location");
3501       dw2_asm_output_delta (size_of_encoded_value (fde_encoding),
3502                             end, begin, "FDE address range");
3503     }
3504   else
3505     {
3506       dw2_asm_output_addr (DWARF2_ADDR_SIZE, begin, "FDE initial location");
3507       dw2_asm_output_delta (DWARF2_ADDR_SIZE, end, begin, "FDE address range");
3508     }
3509
3510   if (augmentation[0])
3511     {
3512       if (any_lsda_needed)
3513         {
3514           int size = size_of_encoded_value (lsda_encoding);
3515
3516           if (lsda_encoding == DW_EH_PE_aligned)
3517             {
3518               int offset = (  4         /* Length */
3519                             + 4         /* CIE offset */
3520                             + 2 * size_of_encoded_value (fde_encoding)
3521                             + 1         /* Augmentation size */ );
3522               int pad = -offset & (PTR_SIZE - 1);
3523
3524               size += pad;
3525               gcc_assert (size_of_uleb128 (size) == 1);
3526             }
3527
3528           dw2_asm_output_data_uleb128 (size, "Augmentation size");
3529
3530           if (fde->uses_eh_lsda)
3531             {
3532               ASM_GENERATE_INTERNAL_LABEL (l1, second ? "LLSDAC" : "LLSDA",
3533                                            fde->funcdef_number);
3534               dw2_asm_output_encoded_addr_rtx (lsda_encoding,
3535                                                gen_rtx_SYMBOL_REF (Pmode, l1),
3536                                                false,
3537                                                "Language Specific Data Area");
3538             }
3539           else
3540             {
3541               if (lsda_encoding == DW_EH_PE_aligned)
3542                 ASM_OUTPUT_ALIGN (asm_out_file, floor_log2 (PTR_SIZE));
3543               dw2_asm_output_data (size_of_encoded_value (lsda_encoding), 0,
3544                                    "Language Specific Data Area (none)");
3545             }
3546         }
3547       else
3548         dw2_asm_output_data_uleb128 (0, "Augmentation size");
3549     }
3550
3551   /* Loop through the Call Frame Instructions associated with
3552      this FDE.  */
3553   fde->dw_fde_current_label = begin;
3554   if (!fde->dw_fde_switched_sections)
3555     for (cfi = fde->dw_fde_cfi; cfi != NULL; cfi = cfi->dw_cfi_next)
3556       output_cfi (cfi, fde, for_eh);
3557   else if (!second)
3558     {
3559       if (fde->dw_fde_switch_cfi)
3560         for (cfi = fde->dw_fde_cfi; cfi != NULL; cfi = cfi->dw_cfi_next)
3561           {
3562             output_cfi (cfi, fde, for_eh);
3563             if (cfi == fde->dw_fde_switch_cfi)
3564               break;
3565           }
3566     }
3567   else
3568     {
3569       dw_cfi_ref cfi_next = fde->dw_fde_cfi;
3570
3571       if (fde->dw_fde_switch_cfi)
3572         {
3573           cfi_next = fde->dw_fde_switch_cfi->dw_cfi_next;
3574           fde->dw_fde_switch_cfi->dw_cfi_next = NULL;
3575           output_cfis (fde->dw_fde_cfi, false, fde, for_eh);
3576           fde->dw_fde_switch_cfi->dw_cfi_next = cfi_next;
3577         }
3578       for (cfi = cfi_next; cfi != NULL; cfi = cfi->dw_cfi_next)
3579         output_cfi (cfi, fde, for_eh);
3580     }
3581
3582   /* If we are to emit a ref/link from function bodies to their frame tables,
3583      do it now.  This is typically performed to make sure that tables
3584      associated with functions are dragged with them and not discarded in
3585      garbage collecting links. We need to do this on a per function basis to
3586      cope with -ffunction-sections.  */
3587
3588 #ifdef ASM_OUTPUT_DWARF_TABLE_REF
3589   /* Switch to the function section, emit the ref to the tables, and
3590      switch *back* into the table section.  */
3591   switch_to_section (function_section (fde->decl));
3592   ASM_OUTPUT_DWARF_TABLE_REF (section_start_label);
3593   switch_to_frame_table_section (for_eh, true);
3594 #endif
3595
3596   /* Pad the FDE out to an address sized boundary.  */
3597   ASM_OUTPUT_ALIGN (asm_out_file,
3598                     floor_log2 ((for_eh ? PTR_SIZE : DWARF2_ADDR_SIZE)));
3599   ASM_OUTPUT_LABEL (asm_out_file, l2);
3600
3601   j += 2;
3602 }
3603
3604 /* Output the call frame information used to record information
3605    that relates to calculating the frame pointer, and records the
3606    location of saved registers.  */
3607
3608 static void
3609 output_call_frame_info (int for_eh)
3610 {
3611   unsigned int i;
3612   dw_fde_ref fde;
3613   dw_cfi_ref cfi;
3614   char l1[20], l2[20], section_start_label[20];
3615   bool any_lsda_needed = false;
3616   char augmentation[6];
3617   int augmentation_size;
3618   int fde_encoding = DW_EH_PE_absptr;
3619   int per_encoding = DW_EH_PE_absptr;
3620   int lsda_encoding = DW_EH_PE_absptr;
3621   int return_reg;
3622   rtx personality = NULL;
3623   int dw_cie_version;
3624
3625   /* Don't emit a CIE if there won't be any FDEs.  */
3626   if (fde_table_in_use == 0)
3627     return;
3628
3629   /* Nothing to do if the assembler's doing it all.  */
3630   if (dwarf2out_do_cfi_asm ())
3631     return;
3632
3633   /* If we make FDEs linkonce, we may have to emit an empty label for
3634      an FDE that wouldn't otherwise be emitted.  We want to avoid
3635      having an FDE kept around when the function it refers to is
3636      discarded.  Example where this matters: a primary function
3637      template in C++ requires EH information, but an explicit
3638      specialization doesn't.  */
3639   if (TARGET_USES_WEAK_UNWIND_INFO
3640       && ! flag_asynchronous_unwind_tables
3641       && flag_exceptions
3642       && for_eh)
3643     for (i = 0; i < fde_table_in_use; i++)
3644       if ((fde_table[i].nothrow || fde_table[i].all_throwers_are_sibcalls)
3645           && !fde_table[i].uses_eh_lsda
3646           && ! DECL_WEAK (fde_table[i].decl))
3647         targetm.asm_out.unwind_label (asm_out_file, fde_table[i].decl,
3648                                       for_eh, /* empty */ 1);
3649
3650   /* If we don't have any functions we'll want to unwind out of, don't
3651      emit any EH unwind information.  Note that if exceptions aren't
3652      enabled, we won't have collected nothrow information, and if we
3653      asked for asynchronous tables, we always want this info.  */
3654   if (for_eh)
3655     {
3656       bool any_eh_needed = !flag_exceptions || flag_asynchronous_unwind_tables;
3657
3658       for (i = 0; i < fde_table_in_use; i++)
3659         if (fde_table[i].uses_eh_lsda)
3660           any_eh_needed = any_lsda_needed = true;
3661         else if (TARGET_USES_WEAK_UNWIND_INFO && DECL_WEAK (fde_table[i].decl))
3662           any_eh_needed = true;
3663         else if (! fde_table[i].nothrow
3664                  && ! fde_table[i].all_throwers_are_sibcalls)
3665           any_eh_needed = true;
3666
3667       if (! any_eh_needed)
3668         return;
3669     }
3670
3671   /* We're going to be generating comments, so turn on app.  */
3672   if (flag_debug_asm)
3673     app_enable ();
3674
3675   /* Switch to the proper frame section, first time.  */
3676   switch_to_frame_table_section (for_eh, false);
3677
3678   ASM_GENERATE_INTERNAL_LABEL (section_start_label, FRAME_BEGIN_LABEL, for_eh);
3679   ASM_OUTPUT_LABEL (asm_out_file, section_start_label);
3680
3681   /* Output the CIE.  */
3682   ASM_GENERATE_INTERNAL_LABEL (l1, CIE_AFTER_SIZE_LABEL, for_eh);
3683   ASM_GENERATE_INTERNAL_LABEL (l2, CIE_END_LABEL, for_eh);
3684   if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4 && !for_eh)
3685     dw2_asm_output_data (4, 0xffffffff,
3686       "Initial length escape value indicating 64-bit DWARF extension");
3687   dw2_asm_output_delta (for_eh ? 4 : DWARF_OFFSET_SIZE, l2, l1,
3688                         "Length of Common Information Entry");
3689   ASM_OUTPUT_LABEL (asm_out_file, l1);
3690
3691   /* Now that the CIE pointer is PC-relative for EH,
3692      use 0 to identify the CIE.  */
3693   dw2_asm_output_data ((for_eh ? 4 : DWARF_OFFSET_SIZE),
3694                        (for_eh ? 0 : DWARF_CIE_ID),
3695                        "CIE Identifier Tag");
3696
3697   /* Use the CIE version 3 for DWARF3; allow DWARF2 to continue to
3698      use CIE version 1, unless that would produce incorrect results
3699      due to overflowing the return register column.  */
3700   return_reg = DWARF2_FRAME_REG_OUT (DWARF_FRAME_RETURN_COLUMN, for_eh);
3701   dw_cie_version = 1;
3702   if (return_reg >= 256 || dwarf_version > 2)
3703     dw_cie_version = 3;
3704   dw2_asm_output_data (1, dw_cie_version, "CIE Version");
3705
3706   augmentation[0] = 0;
3707   augmentation_size = 0;
3708
3709   personality = current_unit_personality;
3710   if (for_eh)
3711     {
3712       char *p;
3713
3714       /* Augmentation:
3715          z      Indicates that a uleb128 is present to size the
3716                 augmentation section.
3717          L      Indicates the encoding (and thus presence) of
3718                 an LSDA pointer in the FDE augmentation.
3719          R      Indicates a non-default pointer encoding for
3720                 FDE code pointers.
3721          P      Indicates the presence of an encoding + language
3722                 personality routine in the CIE augmentation.  */
3723
3724       fde_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/1, /*global=*/0);
3725       per_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/2, /*global=*/1);
3726       lsda_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/0, /*global=*/0);
3727
3728       p = augmentation + 1;
3729       if (personality)
3730         {
3731           *p++ = 'P';
3732           augmentation_size += 1 + size_of_encoded_value (per_encoding);
3733           assemble_external_libcall (personality);
3734         }
3735       if (any_lsda_needed)
3736         {
3737           *p++ = 'L';
3738           augmentation_size += 1;
3739         }
3740       if (fde_encoding != DW_EH_PE_absptr)
3741         {
3742           *p++ = 'R';
3743           augmentation_size += 1;
3744         }
3745       if (p > augmentation + 1)
3746         {
3747           augmentation[0] = 'z';
3748           *p = '\0';
3749         }
3750
3751       /* Ug.  Some platforms can't do unaligned dynamic relocations at all.  */
3752       if (personality && per_encoding == DW_EH_PE_aligned)
3753         {
3754           int offset = (  4             /* Length */
3755                         + 4             /* CIE Id */
3756                         + 1             /* CIE version */
3757                         + strlen (augmentation) + 1     /* Augmentation */
3758                         + size_of_uleb128 (1)           /* Code alignment */
3759                         + size_of_sleb128 (DWARF_CIE_DATA_ALIGNMENT)
3760                         + 1             /* RA column */
3761                         + 1             /* Augmentation size */
3762                         + 1             /* Personality encoding */ );
3763           int pad = -offset & (PTR_SIZE - 1);
3764
3765           augmentation_size += pad;
3766
3767           /* Augmentations should be small, so there's scarce need to
3768              iterate for a solution.  Die if we exceed one uleb128 byte.  */
3769           gcc_assert (size_of_uleb128 (augmentation_size) == 1);
3770         }
3771     }
3772
3773   dw2_asm_output_nstring (augmentation, -1, "CIE Augmentation");
3774   dw2_asm_output_data_uleb128 (1, "CIE Code Alignment Factor");
3775   dw2_asm_output_data_sleb128 (DWARF_CIE_DATA_ALIGNMENT,
3776                                "CIE Data Alignment Factor");
3777
3778   if (dw_cie_version == 1)
3779     dw2_asm_output_data (1, return_reg, "CIE RA Column");
3780   else
3781     dw2_asm_output_data_uleb128 (return_reg, "CIE RA Column");
3782
3783   if (augmentation[0])
3784     {
3785       dw2_asm_output_data_uleb128 (augmentation_size, "Augmentation size");
3786       if (personality)
3787         {
3788           dw2_asm_output_data (1, per_encoding, "Personality (%s)",
3789                                eh_data_format_name (per_encoding));
3790           dw2_asm_output_encoded_addr_rtx (per_encoding,
3791                                            personality,
3792                                            true, NULL);
3793         }
3794
3795       if (any_lsda_needed)
3796         dw2_asm_output_data (1, lsda_encoding, "LSDA Encoding (%s)",
3797                              eh_data_format_name (lsda_encoding));
3798
3799       if (fde_encoding != DW_EH_PE_absptr)
3800         dw2_asm_output_data (1, fde_encoding, "FDE Encoding (%s)",
3801                              eh_data_format_name (fde_encoding));
3802     }
3803
3804   for (cfi = cie_cfi_head; cfi != NULL; cfi = cfi->dw_cfi_next)
3805     output_cfi (cfi, NULL, for_eh);
3806
3807   /* Pad the CIE out to an address sized boundary.  */
3808   ASM_OUTPUT_ALIGN (asm_out_file,
3809                     floor_log2 (for_eh ? PTR_SIZE : DWARF2_ADDR_SIZE));
3810   ASM_OUTPUT_LABEL (asm_out_file, l2);
3811
3812   /* Loop through all of the FDE's.  */
3813   for (i = 0; i < fde_table_in_use; i++)
3814     {
3815       unsigned int k;
3816       fde = &fde_table[i];
3817
3818       /* Don't emit EH unwind info for leaf functions that don't need it.  */
3819       if (for_eh && !flag_asynchronous_unwind_tables && flag_exceptions
3820           && (fde->nothrow || fde->all_throwers_are_sibcalls)
3821           && ! (TARGET_USES_WEAK_UNWIND_INFO && DECL_WEAK (fde_table[i].decl))
3822           && !fde->uses_eh_lsda)
3823         continue;
3824
3825       for (k = 0; k < (fde->dw_fde_switched_sections ? 2 : 1); k++)
3826         output_fde (fde, for_eh, k, section_start_label, fde_encoding,
3827                     augmentation, any_lsda_needed, lsda_encoding);
3828     }
3829
3830   if (for_eh && targetm.terminate_dw2_eh_frame_info)
3831     dw2_asm_output_data (4, 0, "End of Table");
3832 #ifdef MIPS_DEBUGGING_INFO
3833   /* Work around Irix 6 assembler bug whereby labels at the end of a section
3834      get a value of 0.  Putting .align 0 after the label fixes it.  */
3835   ASM_OUTPUT_ALIGN (asm_out_file, 0);
3836 #endif
3837
3838   /* Turn off app to make assembly quicker.  */
3839   if (flag_debug_asm)
3840     app_disable ();
3841 }
3842
3843 /* Emit .cfi_startproc and .cfi_personality/.cfi_lsda if needed.  */
3844
3845 static void
3846 dwarf2out_do_cfi_startproc (bool second)
3847 {
3848   int enc;
3849   rtx ref;
3850   rtx personality = get_personality_function (current_function_decl);
3851
3852   fprintf (asm_out_file, "\t.cfi_startproc\n");
3853
3854   if (personality)
3855     {
3856       enc = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/2, /*global=*/1);
3857       ref = personality;
3858
3859       /* ??? The GAS support isn't entirely consistent.  We have to
3860          handle indirect support ourselves, but PC-relative is done
3861          in the assembler.  Further, the assembler can't handle any
3862          of the weirder relocation types.  */
3863       if (enc & DW_EH_PE_indirect)
3864         ref = dw2_force_const_mem (ref, true);
3865
3866       fprintf (asm_out_file, "\t.cfi_personality %#x,", enc);
3867       output_addr_const (asm_out_file, ref);
3868       fputc ('\n', asm_out_file);
3869     }
3870
3871   if (crtl->uses_eh_lsda)
3872     {
3873       char lab[20];
3874
3875       enc = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/0, /*global=*/0);
3876       ASM_GENERATE_INTERNAL_LABEL (lab, second ? "LLSDAC" : "LLSDA",
3877                                    current_function_funcdef_no);
3878       ref = gen_rtx_SYMBOL_REF (Pmode, lab);
3879       SYMBOL_REF_FLAGS (ref) = SYMBOL_FLAG_LOCAL;
3880
3881       if (enc & DW_EH_PE_indirect)
3882         ref = dw2_force_const_mem (ref, true);
3883
3884       fprintf (asm_out_file, "\t.cfi_lsda %#x,", enc);
3885       output_addr_const (asm_out_file, ref);
3886       fputc ('\n', asm_out_file);
3887     }
3888 }
3889
3890 /* Output a marker (i.e. a label) for the beginning of a function, before
3891    the prologue.  */
3892
3893 void
3894 dwarf2out_begin_prologue (unsigned int line ATTRIBUTE_UNUSED,
3895                           const char *file ATTRIBUTE_UNUSED)
3896 {
3897   char label[MAX_ARTIFICIAL_LABEL_BYTES];
3898   char * dup_label;
3899   dw_fde_ref fde;
3900   section *fnsec;
3901
3902   current_function_func_begin_label = NULL;
3903
3904 #ifdef TARGET_UNWIND_INFO
3905   /* ??? current_function_func_begin_label is also used by except.c
3906      for call-site information.  We must emit this label if it might
3907      be used.  */
3908   if ((! flag_exceptions || USING_SJLJ_EXCEPTIONS)
3909       && ! dwarf2out_do_frame ())
3910     return;
3911 #else
3912   if (! dwarf2out_do_frame ())
3913     return;
3914 #endif
3915
3916   fnsec = function_section (current_function_decl);
3917   switch_to_section (fnsec);
3918   ASM_GENERATE_INTERNAL_LABEL (label, FUNC_BEGIN_LABEL,
3919                                current_function_funcdef_no);
3920   ASM_OUTPUT_DEBUG_LABEL (asm_out_file, FUNC_BEGIN_LABEL,
3921                           current_function_funcdef_no);
3922   dup_label = xstrdup (label);
3923   current_function_func_begin_label = dup_label;
3924
3925 #ifdef TARGET_UNWIND_INFO
3926   /* We can elide the fde allocation if we're not emitting debug info.  */
3927   if (! dwarf2out_do_frame ())
3928     return;
3929 #endif
3930
3931   /* Expand the fde table if necessary.  */
3932   if (fde_table_in_use == fde_table_allocated)
3933     {
3934       fde_table_allocated += FDE_TABLE_INCREMENT;
3935       fde_table = GGC_RESIZEVEC (dw_fde_node, fde_table, fde_table_allocated);
3936       memset (fde_table + fde_table_in_use, 0,
3937               FDE_TABLE_INCREMENT * sizeof (dw_fde_node));
3938     }
3939
3940   /* Record the FDE associated with this function.  */
3941   current_funcdef_fde = fde_table_in_use;
3942
3943   /* Add the new FDE at the end of the fde_table.  */
3944   fde = &fde_table[fde_table_in_use++];
3945   fde->decl = current_function_decl;
3946   fde->dw_fde_begin = dup_label;
3947   fde->dw_fde_current_label = dup_label;
3948   fde->dw_fde_hot_section_label = NULL;
3949   fde->dw_fde_hot_section_end_label = NULL;
3950   fde->dw_fde_unlikely_section_label = NULL;
3951   fde->dw_fde_unlikely_section_end_label = NULL;
3952   fde->dw_fde_switched_sections = 0;
3953   fde->dw_fde_switched_cold_to_hot = 0;
3954   fde->dw_fde_end = NULL;
3955   fde->dw_fde_cfi = NULL;
3956   fde->dw_fde_switch_cfi = NULL;
3957   fde->funcdef_number = current_function_funcdef_no;
3958   fde->nothrow = crtl->nothrow;
3959   fde->uses_eh_lsda = crtl->uses_eh_lsda;
3960   fde->all_throwers_are_sibcalls = crtl->all_throwers_are_sibcalls;
3961   fde->drap_reg = INVALID_REGNUM;
3962   fde->vdrap_reg = INVALID_REGNUM;
3963   if (flag_reorder_blocks_and_partition)
3964     {
3965       section *unlikelysec;
3966       if (first_function_block_is_cold)
3967         fde->in_std_section = 1;
3968       else
3969         fde->in_std_section
3970           = (fnsec == text_section
3971              || (cold_text_section && fnsec == cold_text_section));
3972       unlikelysec = unlikely_text_section ();
3973       fde->cold_in_std_section
3974         = (unlikelysec == text_section
3975            || (cold_text_section && unlikelysec == cold_text_section));
3976     }
3977   else
3978     {
3979       fde->in_std_section
3980         = (fnsec == text_section
3981            || (cold_text_section && fnsec == cold_text_section));
3982       fde->cold_in_std_section = 0;
3983     }
3984
3985   args_size = old_args_size = 0;
3986
3987   /* We only want to output line number information for the genuine dwarf2
3988      prologue case, not the eh frame case.  */
3989 #ifdef DWARF2_DEBUGGING_INFO
3990   if (file)
3991     dwarf2out_source_line (line, file, 0, true);
3992 #endif
3993
3994   if (dwarf2out_do_cfi_asm ())
3995     dwarf2out_do_cfi_startproc (false);
3996   else
3997     {
3998       rtx personality = get_personality_function (current_function_decl);
3999       if (!current_unit_personality)
4000         current_unit_personality = personality;
4001
4002       /* We cannot keep a current personality per function as without CFI
4003          asm at the point where we emit the CFI data there is no current
4004          function anymore.  */
4005       if (personality
4006           && current_unit_personality != personality)
4007         sorry ("Multiple EH personalities are supported only with assemblers "
4008                "supporting .cfi.personality directive.");
4009     }
4010 }
4011
4012 /* Output a marker (i.e. a label) for the absolute end of the generated code
4013    for a function definition.  This gets called *after* the epilogue code has
4014    been generated.  */
4015
4016 void
4017 dwarf2out_end_epilogue (unsigned int line ATTRIBUTE_UNUSED,
4018                         const char *file ATTRIBUTE_UNUSED)
4019 {
4020   dw_fde_ref fde;
4021   char label[MAX_ARTIFICIAL_LABEL_BYTES];
4022
4023 #ifdef DWARF2_DEBUGGING_INFO
4024   last_var_location_insn = NULL_RTX;
4025 #endif
4026
4027   if (dwarf2out_do_cfi_asm ())
4028     fprintf (asm_out_file, "\t.cfi_endproc\n");
4029
4030   /* Output a label to mark the endpoint of the code generated for this
4031      function.  */
4032   ASM_GENERATE_INTERNAL_LABEL (label, FUNC_END_LABEL,
4033                                current_function_funcdef_no);
4034   ASM_OUTPUT_LABEL (asm_out_file, label);
4035   fde = current_fde ();
4036   gcc_assert (fde != NULL);
4037   fde->dw_fde_end = xstrdup (label);
4038 }
4039
4040 void
4041 dwarf2out_frame_init (void)
4042 {
4043   /* Allocate the initial hunk of the fde_table.  */
4044   fde_table = GGC_CNEWVEC (dw_fde_node, FDE_TABLE_INCREMENT);
4045   fde_table_allocated = FDE_TABLE_INCREMENT;
4046   fde_table_in_use = 0;
4047
4048   /* Generate the CFA instructions common to all FDE's.  Do it now for the
4049      sake of lookup_cfa.  */
4050
4051   /* On entry, the Canonical Frame Address is at SP.  */
4052   dwarf2out_def_cfa (NULL, STACK_POINTER_REGNUM, INCOMING_FRAME_SP_OFFSET);
4053
4054 #ifdef DWARF2_UNWIND_INFO
4055   if (DWARF2_UNWIND_INFO || DWARF2_FRAME_INFO)
4056     initial_return_save (INCOMING_RETURN_ADDR_RTX);
4057 #endif
4058 }
4059
4060 void
4061 dwarf2out_frame_finish (void)
4062 {
4063   /* Output call frame information.  */
4064   if (DWARF2_FRAME_INFO)
4065     output_call_frame_info (0);
4066
4067 #ifndef TARGET_UNWIND_INFO
4068   /* Output another copy for the unwinder.  */
4069   if (! USING_SJLJ_EXCEPTIONS && (flag_unwind_tables || flag_exceptions))
4070     output_call_frame_info (1);
4071 #endif
4072 }
4073
4074 /* Note that the current function section is being used for code.  */
4075
4076 static void
4077 dwarf2out_note_section_used (void)
4078 {
4079   section *sec = current_function_section ();
4080   if (sec == text_section)
4081     text_section_used = true;
4082   else if (sec == cold_text_section)
4083     cold_text_section_used = true;
4084 }
4085
4086 void
4087 dwarf2out_switch_text_section (void)
4088 {
4089   dw_fde_ref fde = current_fde ();
4090
4091   gcc_assert (cfun && fde && !fde->dw_fde_switched_sections);
4092
4093   fde->dw_fde_switched_sections = 1;
4094   fde->dw_fde_switched_cold_to_hot = !in_cold_section_p;
4095
4096   fde->dw_fde_hot_section_label = crtl->subsections.hot_section_label;
4097   fde->dw_fde_hot_section_end_label = crtl->subsections.hot_section_end_label;
4098   fde->dw_fde_unlikely_section_label = crtl->subsections.cold_section_label;
4099   fde->dw_fde_unlikely_section_end_label = crtl->subsections.cold_section_end_label;
4100   have_multiple_function_sections = true;
4101
4102   /* Reset the current label on switching text sections, so that we
4103      don't attempt to advance_loc4 between labels in different sections.  */
4104   fde->dw_fde_current_label = NULL;
4105
4106   /* There is no need to mark used sections when not debugging.  */
4107   if (cold_text_section != NULL)
4108     dwarf2out_note_section_used ();
4109
4110   if (dwarf2out_do_cfi_asm ())
4111     fprintf (asm_out_file, "\t.cfi_endproc\n");
4112
4113   /* Now do the real section switch.  */
4114   switch_to_section (current_function_section ());
4115
4116   if (dwarf2out_do_cfi_asm ())
4117     {
4118       dwarf2out_do_cfi_startproc (true);
4119       /* As this is a different FDE, insert all current CFI instructions
4120          again.  */
4121       output_cfis (fde->dw_fde_cfi, true, fde, true);
4122     }
4123   else
4124     {
4125       dw_cfi_ref cfi = fde->dw_fde_cfi;
4126
4127       cfi = fde->dw_fde_cfi;
4128       if (cfi)
4129         while (cfi->dw_cfi_next != NULL)
4130           cfi = cfi->dw_cfi_next;
4131       fde->dw_fde_switch_cfi = cfi;
4132     }
4133 }
4134 #endif
4135 \f
4136 /* And now, the subset of the debugging information support code necessary
4137    for emitting location expressions.  */
4138
4139 /* Data about a single source file.  */
4140 struct GTY(()) dwarf_file_data {
4141   const char * filename;
4142   int emitted_number;
4143 };
4144
4145 typedef struct dw_val_struct *dw_val_ref;
4146 typedef struct die_struct *dw_die_ref;
4147 typedef const struct die_struct *const_dw_die_ref;
4148 typedef struct dw_loc_descr_struct *dw_loc_descr_ref;
4149 typedef struct dw_loc_list_struct *dw_loc_list_ref;
4150
4151 typedef struct GTY(()) deferred_locations_struct
4152 {
4153   tree variable;
4154   dw_die_ref die;
4155 } deferred_locations;
4156
4157 DEF_VEC_O(deferred_locations);
4158 DEF_VEC_ALLOC_O(deferred_locations,gc);
4159
4160 static GTY(()) VEC(deferred_locations, gc) *deferred_locations_list;
4161
4162 DEF_VEC_P(dw_die_ref);
4163 DEF_VEC_ALLOC_P(dw_die_ref,heap);
4164
4165 /* Each DIE may have a series of attribute/value pairs.  Values
4166    can take on several forms.  The forms that are used in this
4167    implementation are listed below.  */
4168
4169 enum dw_val_class
4170 {
4171   dw_val_class_addr,
4172   dw_val_class_offset,
4173   dw_val_class_loc,
4174   dw_val_class_loc_list,
4175   dw_val_class_range_list,
4176   dw_val_class_const,
4177   dw_val_class_unsigned_const,
4178   dw_val_class_const_double,
4179   dw_val_class_vec,
4180   dw_val_class_flag,
4181   dw_val_class_die_ref,
4182   dw_val_class_fde_ref,
4183   dw_val_class_lbl_id,
4184   dw_val_class_lineptr,
4185   dw_val_class_str,
4186   dw_val_class_macptr,
4187   dw_val_class_file,
4188   dw_val_class_data8
4189 };
4190
4191 /* Describe a floating point constant value, or a vector constant value.  */
4192
4193 typedef struct GTY(()) dw_vec_struct {
4194   unsigned char * GTY((length ("%h.length"))) array;
4195   unsigned length;
4196   unsigned elt_size;
4197 }
4198 dw_vec_const;
4199
4200 /* The dw_val_node describes an attribute's value, as it is
4201    represented internally.  */
4202
4203 typedef struct GTY(()) dw_val_struct {
4204   enum dw_val_class val_class;
4205   union dw_val_struct_union
4206     {
4207       rtx GTY ((tag ("dw_val_class_addr"))) val_addr;
4208       unsigned HOST_WIDE_INT GTY ((tag ("dw_val_class_offset"))) val_offset;
4209       dw_loc_list_ref GTY ((tag ("dw_val_class_loc_list"))) val_loc_list;
4210       dw_loc_descr_ref GTY ((tag ("dw_val_class_loc"))) val_loc;
4211       HOST_WIDE_INT GTY ((default)) val_int;
4212       unsigned HOST_WIDE_INT GTY ((tag ("dw_val_class_unsigned_const"))) val_unsigned;
4213       double_int GTY ((tag ("dw_val_class_const_double"))) val_double;
4214       dw_vec_const GTY ((tag ("dw_val_class_vec"))) val_vec;
4215       struct dw_val_die_union
4216         {
4217           dw_die_ref die;
4218           int external;
4219         } GTY ((tag ("dw_val_class_die_ref"))) val_die_ref;
4220       unsigned GTY ((tag ("dw_val_class_fde_ref"))) val_fde_index;
4221       struct indirect_string_node * GTY ((tag ("dw_val_class_str"))) val_str;
4222       char * GTY ((tag ("dw_val_class_lbl_id"))) val_lbl_id;
4223       unsigned char GTY ((tag ("dw_val_class_flag"))) val_flag;
4224       struct dwarf_file_data * GTY ((tag ("dw_val_class_file"))) val_file;
4225       unsigned char GTY ((tag ("dw_val_class_data8"))) val_data8[8];
4226     }
4227   GTY ((desc ("%1.val_class"))) v;
4228 }
4229 dw_val_node;
4230
4231 /* Locations in memory are described using a sequence of stack machine
4232    operations.  */
4233
4234 typedef struct GTY(()) dw_loc_descr_struct {
4235   dw_loc_descr_ref dw_loc_next;
4236   ENUM_BITFIELD (dwarf_location_atom) dw_loc_opc : 8;
4237   /* Used to distinguish DW_OP_addr with a direct symbol relocation
4238      from DW_OP_addr with a dtp-relative symbol relocation.  */
4239   unsigned int dtprel : 1;
4240   int dw_loc_addr;
4241   dw_val_node dw_loc_oprnd1;
4242   dw_val_node dw_loc_oprnd2;
4243 }
4244 dw_loc_descr_node;
4245
4246 /* Location lists are ranges + location descriptions for that range,
4247    so you can track variables that are in different places over
4248    their entire life.  */
4249 typedef struct GTY(()) dw_loc_list_struct {
4250   dw_loc_list_ref dw_loc_next;
4251   const char *begin; /* Label for begin address of range */
4252   const char *end;  /* Label for end address of range */
4253   char *ll_symbol; /* Label for beginning of location list.
4254                       Only on head of list */
4255   const char *section; /* Section this loclist is relative to */
4256   dw_loc_descr_ref expr;
4257 } dw_loc_list_node;
4258
4259 #if defined (DWARF2_DEBUGGING_INFO) || defined (DWARF2_UNWIND_INFO)
4260
4261 static dw_loc_descr_ref int_loc_descriptor (HOST_WIDE_INT);
4262
4263 /* Convert a DWARF stack opcode into its string name.  */
4264
4265 static const char *
4266 dwarf_stack_op_name (unsigned int op)
4267 {
4268   switch (op)
4269     {
4270     case DW_OP_addr:
4271       return "DW_OP_addr";
4272     case DW_OP_deref:
4273       return "DW_OP_deref";
4274     case DW_OP_const1u:
4275       return "DW_OP_const1u";
4276     case DW_OP_const1s:
4277       return "DW_OP_const1s";
4278     case DW_OP_const2u:
4279       return "DW_OP_const2u";
4280     case DW_OP_const2s:
4281       return "DW_OP_const2s";
4282     case DW_OP_const4u:
4283       return "DW_OP_const4u";
4284     case DW_OP_const4s:
4285       return "DW_OP_const4s";
4286     case DW_OP_const8u:
4287       return "DW_OP_const8u";
4288     case DW_OP_const8s:
4289       return "DW_OP_const8s";
4290     case DW_OP_constu:
4291       return "DW_OP_constu";
4292     case DW_OP_consts:
4293       return "DW_OP_consts";
4294     case DW_OP_dup:
4295       return "DW_OP_dup";
4296     case DW_OP_drop:
4297       return "DW_OP_drop";
4298     case DW_OP_over:
4299       return "DW_OP_over";
4300     case DW_OP_pick:
4301       return "DW_OP_pick";
4302     case DW_OP_swap:
4303       return "DW_OP_swap";
4304     case DW_OP_rot:
4305       return "DW_OP_rot";
4306     case DW_OP_xderef:
4307       return "DW_OP_xderef";
4308     case DW_OP_abs:
4309       return "DW_OP_abs";
4310     case DW_OP_and:
4311       return "DW_OP_and";
4312     case DW_OP_div:
4313       return "DW_OP_div";
4314     case DW_OP_minus:
4315       return "DW_OP_minus";
4316     case DW_OP_mod:
4317       return "DW_OP_mod";
4318     case DW_OP_mul:
4319       return "DW_OP_mul";
4320     case DW_OP_neg:
4321       return "DW_OP_neg";
4322     case DW_OP_not:
4323       return "DW_OP_not";
4324     case DW_OP_or:
4325       return "DW_OP_or";
4326     case DW_OP_plus:
4327       return "DW_OP_plus";
4328     case DW_OP_plus_uconst:
4329       return "DW_OP_plus_uconst";
4330     case DW_OP_shl:
4331       return "DW_OP_shl";
4332     case DW_OP_shr:
4333       return "DW_OP_shr";
4334     case DW_OP_shra:
4335       return "DW_OP_shra";
4336     case DW_OP_xor:
4337       return "DW_OP_xor";
4338     case DW_OP_bra:
4339       return "DW_OP_bra";
4340     case DW_OP_eq:
4341       return "DW_OP_eq";
4342     case DW_OP_ge:
4343       return "DW_OP_ge";
4344     case DW_OP_gt:
4345       return "DW_OP_gt";
4346     case DW_OP_le:
4347       return "DW_OP_le";
4348     case DW_OP_lt:
4349       return "DW_OP_lt";
4350     case DW_OP_ne:
4351       return "DW_OP_ne";
4352     case DW_OP_skip:
4353       return "DW_OP_skip";
4354     case DW_OP_lit0:
4355       return "DW_OP_lit0";
4356     case DW_OP_lit1:
4357       return "DW_OP_lit1";
4358     case DW_OP_lit2:
4359       return "DW_OP_lit2";
4360     case DW_OP_lit3:
4361       return "DW_OP_lit3";
4362     case DW_OP_lit4:
4363       return "DW_OP_lit4";
4364     case DW_OP_lit5:
4365       return "DW_OP_lit5";
4366     case DW_OP_lit6:
4367       return "DW_OP_lit6";
4368     case DW_OP_lit7:
4369       return "DW_OP_lit7";
4370     case DW_OP_lit8:
4371       return "DW_OP_lit8";
4372     case DW_OP_lit9:
4373       return "DW_OP_lit9";
4374     case DW_OP_lit10:
4375       return "DW_OP_lit10";
4376     case DW_OP_lit11:
4377       return "DW_OP_lit11";
4378     case DW_OP_lit12:
4379       return "DW_OP_lit12";
4380     case DW_OP_lit13:
4381       return "DW_OP_lit13";
4382     case DW_OP_lit14:
4383       return "DW_OP_lit14";
4384     case DW_OP_lit15:
4385       return "DW_OP_lit15";
4386     case DW_OP_lit16:
4387       return "DW_OP_lit16";
4388     case DW_OP_lit17:
4389       return "DW_OP_lit17";
4390     case DW_OP_lit18:
4391       return "DW_OP_lit18";
4392     case DW_OP_lit19:
4393       return "DW_OP_lit19";
4394     case DW_OP_lit20:
4395       return "DW_OP_lit20";
4396     case DW_OP_lit21:
4397       return "DW_OP_lit21";
4398     case DW_OP_lit22:
4399       return "DW_OP_lit22";
4400     case DW_OP_lit23:
4401       return "DW_OP_lit23";
4402     case DW_OP_lit24:
4403       return "DW_OP_lit24";
4404     case DW_OP_lit25:
4405       return "DW_OP_lit25";
4406     case DW_OP_lit26:
4407       return "DW_OP_lit26";
4408     case DW_OP_lit27:
4409       return "DW_OP_lit27";
4410     case DW_OP_lit28:
4411       return "DW_OP_lit28";
4412     case DW_OP_lit29:
4413       return "DW_OP_lit29";
4414     case DW_OP_lit30:
4415       return "DW_OP_lit30";
4416     case DW_OP_lit31:
4417       return "DW_OP_lit31";
4418     case DW_OP_reg0:
4419       return "DW_OP_reg0";
4420     case DW_OP_reg1:
4421       return "DW_OP_reg1";
4422     case DW_OP_reg2:
4423       return "DW_OP_reg2";
4424     case DW_OP_reg3:
4425       return "DW_OP_reg3";
4426     case DW_OP_reg4:
4427       return "DW_OP_reg4";
4428     case DW_OP_reg5:
4429       return "DW_OP_reg5";
4430     case DW_OP_reg6:
4431       return "DW_OP_reg6";
4432     case DW_OP_reg7:
4433       return "DW_OP_reg7";
4434     case DW_OP_reg8:
4435       return "DW_OP_reg8";
4436     case DW_OP_reg9:
4437       return "DW_OP_reg9";
4438     case DW_OP_reg10:
4439       return "DW_OP_reg10";
4440     case DW_OP_reg11:
4441       return "DW_OP_reg11";
4442     case DW_OP_reg12:
4443       return "DW_OP_reg12";
4444     case DW_OP_reg13:
4445       return "DW_OP_reg13";
4446     case DW_OP_reg14:
4447       return "DW_OP_reg14";
4448     case DW_OP_reg15:
4449       return "DW_OP_reg15";
4450     case DW_OP_reg16:
4451       return "DW_OP_reg16";
4452     case DW_OP_reg17:
4453       return "DW_OP_reg17";
4454     case DW_OP_reg18:
4455       return "DW_OP_reg18";
4456     case DW_OP_reg19:
4457       return "DW_OP_reg19";
4458     case DW_OP_reg20:
4459       return "DW_OP_reg20";
4460     case DW_OP_reg21:
4461       return "DW_OP_reg21";
4462     case DW_OP_reg22:
4463       return "DW_OP_reg22";
4464     case DW_OP_reg23:
4465       return "DW_OP_reg23";
4466     case DW_OP_reg24:
4467       return "DW_OP_reg24";
4468     case DW_OP_reg25:
4469       return "DW_OP_reg25";
4470     case DW_OP_reg26:
4471       return "DW_OP_reg26";
4472     case DW_OP_reg27:
4473       return "DW_OP_reg27";
4474     case DW_OP_reg28:
4475       return "DW_OP_reg28";
4476     case DW_OP_reg29:
4477       return "DW_OP_reg29";
4478     case DW_OP_reg30:
4479       return "DW_OP_reg30";
4480     case DW_OP_reg31:
4481       return "DW_OP_reg31";
4482     case DW_OP_breg0:
4483       return "DW_OP_breg0";
4484     case DW_OP_breg1:
4485       return "DW_OP_breg1";
4486     case DW_OP_breg2:
4487       return "DW_OP_breg2";
4488     case DW_OP_breg3:
4489       return "DW_OP_breg3";
4490     case DW_OP_breg4:
4491       return "DW_OP_breg4";
4492     case DW_OP_breg5:
4493       return "DW_OP_breg5";
4494     case DW_OP_breg6:
4495       return "DW_OP_breg6";
4496     case DW_OP_breg7:
4497       return "DW_OP_breg7";
4498     case DW_OP_breg8:
4499       return "DW_OP_breg8";
4500     case DW_OP_breg9:
4501       return "DW_OP_breg9";
4502     case DW_OP_breg10:
4503       return "DW_OP_breg10";
4504     case DW_OP_breg11:
4505       return "DW_OP_breg11";
4506     case DW_OP_breg12:
4507       return "DW_OP_breg12";
4508     case DW_OP_breg13:
4509       return "DW_OP_breg13";
4510     case DW_OP_breg14:
4511       return "DW_OP_breg14";
4512     case DW_OP_breg15:
4513       return "DW_OP_breg15";
4514     case DW_OP_breg16:
4515       return "DW_OP_breg16";
4516     case DW_OP_breg17:
4517       return "DW_OP_breg17";
4518     case DW_OP_breg18:
4519       return "DW_OP_breg18";
4520     case DW_OP_breg19:
4521       return "DW_OP_breg19";
4522     case DW_OP_breg20:
4523       return "DW_OP_breg20";
4524     case DW_OP_breg21:
4525       return "DW_OP_breg21";
4526     case DW_OP_breg22:
4527       return "DW_OP_breg22";
4528     case DW_OP_breg23:
4529       return "DW_OP_breg23";
4530     case DW_OP_breg24:
4531       return "DW_OP_breg24";
4532     case DW_OP_breg25:
4533       return "DW_OP_breg25";
4534     case DW_OP_breg26:
4535       return "DW_OP_breg26";
4536     case DW_OP_breg27:
4537       return "DW_OP_breg27";
4538     case DW_OP_breg28:
4539       return "DW_OP_breg28";
4540     case DW_OP_breg29:
4541       return "DW_OP_breg29";
4542     case DW_OP_breg30:
4543       return "DW_OP_breg30";
4544     case DW_OP_breg31:
4545       return "DW_OP_breg31";
4546     case DW_OP_regx:
4547       return "DW_OP_regx";
4548     case DW_OP_fbreg:
4549       return "DW_OP_fbreg";
4550     case DW_OP_bregx:
4551       return "DW_OP_bregx";
4552     case DW_OP_piece:
4553       return "DW_OP_piece";
4554     case DW_OP_deref_size:
4555       return "DW_OP_deref_size";
4556     case DW_OP_xderef_size:
4557       return "DW_OP_xderef_size";
4558     case DW_OP_nop:
4559       return "DW_OP_nop";
4560
4561     case DW_OP_push_object_address:
4562       return "DW_OP_push_object_address";
4563     case DW_OP_call2:
4564       return "DW_OP_call2";
4565     case DW_OP_call4:
4566       return "DW_OP_call4";
4567     case DW_OP_call_ref:
4568       return "DW_OP_call_ref";
4569     case DW_OP_implicit_value:
4570       return "DW_OP_implicit_value";
4571     case DW_OP_stack_value:
4572       return "DW_OP_stack_value";
4573     case DW_OP_form_tls_address:
4574       return "DW_OP_form_tls_address";
4575     case DW_OP_call_frame_cfa:
4576       return "DW_OP_call_frame_cfa";
4577     case DW_OP_bit_piece:
4578       return "DW_OP_bit_piece";
4579
4580     case DW_OP_GNU_push_tls_address:
4581       return "DW_OP_GNU_push_tls_address";
4582     case DW_OP_GNU_uninit:
4583       return "DW_OP_GNU_uninit";
4584     case DW_OP_GNU_encoded_addr:
4585       return "DW_OP_GNU_encoded_addr";
4586
4587     default:
4588       return "OP_<unknown>";
4589     }
4590 }
4591
4592 /* Return a pointer to a newly allocated location description.  Location
4593    descriptions are simple expression terms that can be strung
4594    together to form more complicated location (address) descriptions.  */
4595
4596 static inline dw_loc_descr_ref
4597 new_loc_descr (enum dwarf_location_atom op, unsigned HOST_WIDE_INT oprnd1,
4598                unsigned HOST_WIDE_INT oprnd2)
4599 {
4600   dw_loc_descr_ref descr = GGC_CNEW (dw_loc_descr_node);
4601
4602   descr->dw_loc_opc = op;
4603   descr->dw_loc_oprnd1.val_class = dw_val_class_unsigned_const;
4604   descr->dw_loc_oprnd1.v.val_unsigned = oprnd1;
4605   descr->dw_loc_oprnd2.val_class = dw_val_class_unsigned_const;
4606   descr->dw_loc_oprnd2.v.val_unsigned = oprnd2;
4607
4608   return descr;
4609 }
4610
4611 /* Return a pointer to a newly allocated location description for
4612    REG and OFFSET.  */
4613
4614 static inline dw_loc_descr_ref
4615 new_reg_loc_descr (unsigned int reg,  unsigned HOST_WIDE_INT offset)
4616 {
4617   if (reg <= 31)
4618     return new_loc_descr ((enum dwarf_location_atom) (DW_OP_breg0 + reg),
4619                           offset, 0);
4620   else
4621     return new_loc_descr (DW_OP_bregx, reg, offset);
4622 }
4623
4624 /* Add a location description term to a location description expression.  */
4625
4626 static inline void
4627 add_loc_descr (dw_loc_descr_ref *list_head, dw_loc_descr_ref descr)
4628 {
4629   dw_loc_descr_ref *d;
4630
4631   /* Find the end of the chain.  */
4632   for (d = list_head; (*d) != NULL; d = &(*d)->dw_loc_next)
4633     ;
4634
4635   *d = descr;
4636 }
4637
4638 /* Add a constant OFFSET to a location expression.  */
4639
4640 static void
4641 loc_descr_plus_const (dw_loc_descr_ref *list_head, HOST_WIDE_INT offset)
4642 {
4643   dw_loc_descr_ref loc;
4644   HOST_WIDE_INT *p;
4645
4646   gcc_assert (*list_head != NULL);
4647
4648   if (!offset)
4649     return;
4650
4651   /* Find the end of the chain.  */
4652   for (loc = *list_head; loc->dw_loc_next != NULL; loc = loc->dw_loc_next)
4653     ;
4654
4655   p = NULL;
4656   if (loc->dw_loc_opc == DW_OP_fbreg
4657       || (loc->dw_loc_opc >= DW_OP_breg0 && loc->dw_loc_opc <= DW_OP_breg31))
4658     p = &loc->dw_loc_oprnd1.v.val_int;
4659   else if (loc->dw_loc_opc == DW_OP_bregx)
4660     p = &loc->dw_loc_oprnd2.v.val_int;
4661
4662   /* If the last operation is fbreg, breg{0..31,x}, optimize by adjusting its
4663      offset.  Don't optimize if an signed integer overflow would happen.  */
4664   if (p != NULL
4665       && ((offset > 0 && *p <= INTTYPE_MAXIMUM (HOST_WIDE_INT) - offset)
4666           || (offset < 0 && *p >= INTTYPE_MINIMUM (HOST_WIDE_INT) - offset)))
4667     *p += offset;
4668
4669   else if (offset > 0)
4670     loc->dw_loc_next = new_loc_descr (DW_OP_plus_uconst, offset, 0);
4671
4672   else
4673     {
4674       loc->dw_loc_next = int_loc_descriptor (offset);
4675       add_loc_descr (&loc->dw_loc_next, new_loc_descr (DW_OP_plus, 0, 0));
4676     }
4677 }
4678
4679 #ifdef DWARF2_DEBUGGING_INFO
4680 /* Add a constant OFFSET to a location list.  */
4681
4682 static void
4683 loc_list_plus_const (dw_loc_list_ref list_head, HOST_WIDE_INT offset)
4684 {
4685   dw_loc_list_ref d;
4686   for (d = list_head; d != NULL; d = d->dw_loc_next)
4687     loc_descr_plus_const (&d->expr, offset);
4688 }
4689 #endif
4690
4691 /* Return the size of a location descriptor.  */
4692
4693 static unsigned long
4694 size_of_loc_descr (dw_loc_descr_ref loc)
4695 {
4696   unsigned long size = 1;
4697
4698   switch (loc->dw_loc_opc)
4699     {
4700     case DW_OP_addr:
4701       size += DWARF2_ADDR_SIZE;
4702       break;
4703     case DW_OP_const1u:
4704     case DW_OP_const1s:
4705       size += 1;
4706       break;
4707     case DW_OP_const2u:
4708     case DW_OP_const2s:
4709       size += 2;
4710       break;
4711     case DW_OP_const4u:
4712     case DW_OP_const4s:
4713       size += 4;
4714       break;
4715     case DW_OP_const8u:
4716     case DW_OP_const8s:
4717       size += 8;
4718       break;
4719     case DW_OP_constu:
4720       size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
4721       break;
4722     case DW_OP_consts:
4723       size += size_of_sleb128 (loc->dw_loc_oprnd1.v.val_int);
4724       break;
4725     case DW_OP_pick:
4726       size += 1;
4727       break;
4728     case DW_OP_plus_uconst:
4729       size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
4730       break;
4731     case DW_OP_skip:
4732     case DW_OP_bra:
4733       size += 2;
4734       break;
4735     case DW_OP_breg0:
4736     case DW_OP_breg1:
4737     case DW_OP_breg2:
4738     case DW_OP_breg3:
4739     case DW_OP_breg4:
4740     case DW_OP_breg5:
4741     case DW_OP_breg6:
4742     case DW_OP_breg7:
4743     case DW_OP_breg8:
4744     case DW_OP_breg9:
4745     case DW_OP_breg10:
4746     case DW_OP_breg11:
4747     case DW_OP_breg12:
4748     case DW_OP_breg13:
4749     case DW_OP_breg14:
4750     case DW_OP_breg15:
4751     case DW_OP_breg16:
4752     case DW_OP_breg17:
4753     case DW_OP_breg18:
4754     case DW_OP_breg19:
4755     case DW_OP_breg20:
4756     case DW_OP_breg21:
4757     case DW_OP_breg22:
4758     case DW_OP_breg23:
4759     case DW_OP_breg24:
4760     case DW_OP_breg25:
4761     case DW_OP_breg26:
4762     case DW_OP_breg27:
4763     case DW_OP_breg28:
4764     case DW_OP_breg29:
4765     case DW_OP_breg30:
4766     case DW_OP_breg31:
4767       size += size_of_sleb128 (loc->dw_loc_oprnd1.v.val_int);
4768       break;
4769     case DW_OP_regx:
4770       size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
4771       break;
4772     case DW_OP_fbreg:
4773       size += size_of_sleb128 (loc->dw_loc_oprnd1.v.val_int);
4774       break;
4775     case DW_OP_bregx:
4776       size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
4777       size += size_of_sleb128 (loc->dw_loc_oprnd2.v.val_int);
4778       break;
4779     case DW_OP_piece:
4780       size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
4781       break;
4782     case DW_OP_deref_size:
4783     case DW_OP_xderef_size:
4784       size += 1;
4785       break;
4786     case DW_OP_call2:
4787       size += 2;
4788       break;
4789     case DW_OP_call4:
4790       size += 4;
4791       break;
4792     case DW_OP_call_ref:
4793       size += DWARF2_ADDR_SIZE;
4794       break;
4795     case DW_OP_implicit_value:
4796       size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned)
4797               + loc->dw_loc_oprnd1.v.val_unsigned;
4798       break;
4799     default:
4800       break;
4801     }
4802
4803   return size;
4804 }
4805
4806 /* Return the size of a series of location descriptors.  */
4807
4808 static unsigned long
4809 size_of_locs (dw_loc_descr_ref loc)
4810 {
4811   dw_loc_descr_ref l;
4812   unsigned long size;
4813
4814   /* If there are no skip or bra opcodes, don't fill in the dw_loc_addr
4815      field, to avoid writing to a PCH file.  */
4816   for (size = 0, l = loc; l != NULL; l = l->dw_loc_next)
4817     {
4818       if (l->dw_loc_opc == DW_OP_skip || l->dw_loc_opc == DW_OP_bra)
4819         break;
4820       size += size_of_loc_descr (l);
4821     }
4822   if (! l)
4823     return size;
4824
4825   for (size = 0, l = loc; l != NULL; l = l->dw_loc_next)
4826     {
4827       l->dw_loc_addr = size;
4828       size += size_of_loc_descr (l);
4829     }
4830
4831   return size;
4832 }
4833
4834 #ifdef DWARF2_DEBUGGING_INFO
4835 static HOST_WIDE_INT extract_int (const unsigned char *, unsigned);
4836 #endif
4837
4838 /* Output location description stack opcode's operands (if any).  */
4839
4840 static void
4841 output_loc_operands (dw_loc_descr_ref loc)
4842 {
4843   dw_val_ref val1 = &loc->dw_loc_oprnd1;
4844   dw_val_ref val2 = &loc->dw_loc_oprnd2;
4845
4846   switch (loc->dw_loc_opc)
4847     {
4848 #ifdef DWARF2_DEBUGGING_INFO
4849     case DW_OP_const2u:
4850     case DW_OP_const2s:
4851       dw2_asm_output_data (2, val1->v.val_int, NULL);
4852       break;
4853     case DW_OP_const4u:
4854     case DW_OP_const4s:
4855       dw2_asm_output_data (4, val1->v.val_int, NULL);
4856       break;
4857     case DW_OP_const8u:
4858     case DW_OP_const8s:
4859       gcc_assert (HOST_BITS_PER_WIDE_INT >= 64);
4860       dw2_asm_output_data (8, val1->v.val_int, NULL);
4861       break;
4862     case DW_OP_skip:
4863     case DW_OP_bra:
4864       {
4865         int offset;
4866
4867         gcc_assert (val1->val_class == dw_val_class_loc);
4868         offset = val1->v.val_loc->dw_loc_addr - (loc->dw_loc_addr + 3);
4869
4870         dw2_asm_output_data (2, offset, NULL);
4871       }
4872       break;
4873     case DW_OP_implicit_value:
4874       dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
4875       switch (val2->val_class)
4876         {
4877         case dw_val_class_const:
4878           dw2_asm_output_data (val1->v.val_unsigned, val2->v.val_int, NULL);
4879           break;
4880         case dw_val_class_vec:
4881           {
4882             unsigned int elt_size = val2->v.val_vec.elt_size;
4883             unsigned int len = val2->v.val_vec.length;
4884             unsigned int i;
4885             unsigned char *p;
4886
4887             if (elt_size > sizeof (HOST_WIDE_INT))
4888               {
4889                 elt_size /= 2;
4890                 len *= 2;
4891               }
4892             for (i = 0, p = val2->v.val_vec.array;
4893                  i < len;
4894                  i++, p += elt_size)
4895               dw2_asm_output_data (elt_size, extract_int (p, elt_size),
4896                                    "fp or vector constant word %u", i);
4897           }
4898           break;
4899         case dw_val_class_const_double:
4900           {
4901             unsigned HOST_WIDE_INT first, second;
4902
4903             if (WORDS_BIG_ENDIAN)
4904               {
4905                 first = val2->v.val_double.high;
4906                 second = val2->v.val_double.low;
4907               }
4908             else
4909               {
4910                 first = val2->v.val_double.low;
4911                 second = val2->v.val_double.high;
4912               }
4913             dw2_asm_output_data (HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR,
4914                                  first, NULL);
4915             dw2_asm_output_data (HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR,
4916                                  second, NULL);
4917           }
4918           break;
4919         case dw_val_class_addr:
4920           gcc_assert (val1->v.val_unsigned == DWARF2_ADDR_SIZE);
4921           dw2_asm_output_addr_rtx (DWARF2_ADDR_SIZE, val2->v.val_addr, NULL);
4922           break;
4923         default:
4924           gcc_unreachable ();
4925         }
4926       break;
4927 #else
4928     case DW_OP_const2u:
4929     case DW_OP_const2s:
4930     case DW_OP_const4u:
4931     case DW_OP_const4s:
4932     case DW_OP_const8u:
4933     case DW_OP_const8s:
4934     case DW_OP_skip:
4935     case DW_OP_bra:
4936     case DW_OP_implicit_value:
4937       /* We currently don't make any attempt to make sure these are
4938          aligned properly like we do for the main unwind info, so
4939          don't support emitting things larger than a byte if we're
4940          only doing unwinding.  */
4941       gcc_unreachable ();
4942 #endif
4943     case DW_OP_const1u:
4944     case DW_OP_const1s:
4945       dw2_asm_output_data (1, val1->v.val_int, NULL);
4946       break;
4947     case DW_OP_constu:
4948       dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
4949       break;
4950     case DW_OP_consts:
4951       dw2_asm_output_data_sleb128 (val1->v.val_int, NULL);
4952       break;
4953     case DW_OP_pick:
4954       dw2_asm_output_data (1, val1->v.val_int, NULL);
4955       break;
4956     case DW_OP_plus_uconst:
4957       dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
4958       break;
4959     case DW_OP_breg0:
4960     case DW_OP_breg1:
4961     case DW_OP_breg2:
4962     case DW_OP_breg3:
4963     case DW_OP_breg4:
4964     case DW_OP_breg5:
4965     case DW_OP_breg6:
4966     case DW_OP_breg7:
4967     case DW_OP_breg8:
4968     case DW_OP_breg9:
4969     case DW_OP_breg10:
4970     case DW_OP_breg11:
4971     case DW_OP_breg12:
4972     case DW_OP_breg13:
4973     case DW_OP_breg14:
4974     case DW_OP_breg15:
4975     case DW_OP_breg16:
4976     case DW_OP_breg17:
4977     case DW_OP_breg18:
4978     case DW_OP_breg19:
4979     case DW_OP_breg20:
4980     case DW_OP_breg21:
4981     case DW_OP_breg22:
4982     case DW_OP_breg23:
4983     case DW_OP_breg24:
4984     case DW_OP_breg25:
4985     case DW_OP_breg26:
4986     case DW_OP_breg27:
4987     case DW_OP_breg28:
4988     case DW_OP_breg29:
4989     case DW_OP_breg30:
4990     case DW_OP_breg31:
4991       dw2_asm_output_data_sleb128 (val1->v.val_int, NULL);
4992       break;
4993     case DW_OP_regx:
4994       dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
4995       break;
4996     case DW_OP_fbreg:
4997       dw2_asm_output_data_sleb128 (val1->v.val_int, NULL);
4998       break;
4999     case DW_OP_bregx:
5000       dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
5001       dw2_asm_output_data_sleb128 (val2->v.val_int, NULL);
5002       break;
5003     case DW_OP_piece:
5004       dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
5005       break;
5006     case DW_OP_deref_size:
5007     case DW_OP_xderef_size:
5008       dw2_asm_output_data (1, val1->v.val_int, NULL);
5009       break;
5010
5011     case DW_OP_addr:
5012       if (loc->dtprel)
5013         {
5014           if (targetm.asm_out.output_dwarf_dtprel)
5015             {
5016               targetm.asm_out.output_dwarf_dtprel (asm_out_file,
5017                                                    DWARF2_ADDR_SIZE,
5018                                                    val1->v.val_addr);
5019               fputc ('\n', asm_out_file);
5020             }
5021           else
5022             gcc_unreachable ();
5023         }
5024       else
5025         {
5026 #ifdef DWARF2_DEBUGGING_INFO
5027           dw2_asm_output_addr_rtx (DWARF2_ADDR_SIZE, val1->v.val_addr, NULL);
5028 #else
5029           gcc_unreachable ();
5030 #endif
5031         }
5032       break;
5033
5034     default:
5035       /* Other codes have no operands.  */
5036       break;
5037     }
5038 }
5039
5040 /* Output a sequence of location operations.  */
5041
5042 static void
5043 output_loc_sequence (dw_loc_descr_ref loc)
5044 {
5045   for (; loc != NULL; loc = loc->dw_loc_next)
5046     {
5047       /* Output the opcode.  */
5048       dw2_asm_output_data (1, loc->dw_loc_opc,
5049                            "%s", dwarf_stack_op_name (loc->dw_loc_opc));
5050
5051       /* Output the operand(s) (if any).  */
5052       output_loc_operands (loc);
5053     }
5054 }
5055
5056 /* Output location description stack opcode's operands (if any).
5057    The output is single bytes on a line, suitable for .cfi_escape.  */
5058
5059 static void
5060 output_loc_operands_raw (dw_loc_descr_ref loc)
5061 {
5062   dw_val_ref val1 = &loc->dw_loc_oprnd1;
5063   dw_val_ref val2 = &loc->dw_loc_oprnd2;
5064
5065   switch (loc->dw_loc_opc)
5066     {
5067     case DW_OP_addr:
5068     case DW_OP_implicit_value:
5069       /* We cannot output addresses in .cfi_escape, only bytes.  */
5070       gcc_unreachable ();
5071
5072     case DW_OP_const1u:
5073     case DW_OP_const1s:
5074     case DW_OP_pick:
5075     case DW_OP_deref_size:
5076     case DW_OP_xderef_size:
5077       fputc (',', asm_out_file);
5078       dw2_asm_output_data_raw (1, val1->v.val_int);
5079       break;
5080
5081     case DW_OP_const2u:
5082     case DW_OP_const2s:
5083       fputc (',', asm_out_file);
5084       dw2_asm_output_data_raw (2, val1->v.val_int);
5085       break;
5086
5087     case DW_OP_const4u:
5088     case DW_OP_const4s:
5089       fputc (',', asm_out_file);
5090       dw2_asm_output_data_raw (4, val1->v.val_int);
5091       break;
5092
5093     case DW_OP_const8u:
5094     case DW_OP_const8s:
5095       gcc_assert (HOST_BITS_PER_WIDE_INT >= 64);
5096       fputc (',', asm_out_file);
5097       dw2_asm_output_data_raw (8, val1->v.val_int);
5098       break;
5099
5100     case DW_OP_skip:
5101     case DW_OP_bra:
5102       {
5103         int offset;
5104
5105         gcc_assert (val1->val_class == dw_val_class_loc);
5106         offset = val1->v.val_loc->dw_loc_addr - (loc->dw_loc_addr + 3);
5107
5108         fputc (',', asm_out_file);
5109         dw2_asm_output_data_raw (2, offset);
5110       }
5111       break;
5112
5113     case DW_OP_constu:
5114     case DW_OP_plus_uconst:
5115     case DW_OP_regx:
5116     case DW_OP_piece:
5117       fputc (',', asm_out_file);
5118       dw2_asm_output_data_uleb128_raw (val1->v.val_unsigned);
5119       break;
5120
5121     case DW_OP_consts:
5122     case DW_OP_breg0:
5123     case DW_OP_breg1:
5124     case DW_OP_breg2:
5125     case DW_OP_breg3:
5126     case DW_OP_breg4:
5127     case DW_OP_breg5:
5128     case DW_OP_breg6:
5129     case DW_OP_breg7:
5130     case DW_OP_breg8:
5131     case DW_OP_breg9:
5132     case DW_OP_breg10:
5133     case DW_OP_breg11:
5134     case DW_OP_breg12:
5135     case DW_OP_breg13:
5136     case DW_OP_breg14:
5137     case DW_OP_breg15:
5138     case DW_OP_breg16:
5139     case DW_OP_breg17:
5140     case DW_OP_breg18:
5141     case DW_OP_breg19:
5142     case DW_OP_breg20:
5143     case DW_OP_breg21:
5144     case DW_OP_breg22:
5145     case DW_OP_breg23:
5146     case DW_OP_breg24:
5147     case DW_OP_breg25:
5148     case DW_OP_breg26:
5149     case DW_OP_breg27:
5150     case DW_OP_breg28:
5151     case DW_OP_breg29:
5152     case DW_OP_breg30:
5153     case DW_OP_breg31:
5154     case DW_OP_fbreg:
5155       fputc (',', asm_out_file);
5156       dw2_asm_output_data_sleb128_raw (val1->v.val_int);
5157       break;
5158
5159     case DW_OP_bregx:
5160       fputc (',', asm_out_file);
5161       dw2_asm_output_data_uleb128_raw (val1->v.val_unsigned);
5162       fputc (',', asm_out_file);
5163       dw2_asm_output_data_sleb128_raw (val2->v.val_int);
5164       break;
5165
5166     default:
5167       /* Other codes have no operands.  */
5168       break;
5169     }
5170 }
5171
5172 static void
5173 output_loc_sequence_raw (dw_loc_descr_ref loc)
5174 {
5175   while (1)
5176     {
5177       /* Output the opcode.  */
5178       fprintf (asm_out_file, "%#x", loc->dw_loc_opc);
5179       output_loc_operands_raw (loc);
5180
5181       if (!loc->dw_loc_next)
5182         break;
5183       loc = loc->dw_loc_next;
5184
5185       fputc (',', asm_out_file);
5186     }
5187 }
5188
5189 /* This routine will generate the correct assembly data for a location
5190    description based on a cfi entry with a complex address.  */
5191
5192 static void
5193 output_cfa_loc (dw_cfi_ref cfi)
5194 {
5195   dw_loc_descr_ref loc;
5196   unsigned long size;
5197
5198   if (cfi->dw_cfi_opc == DW_CFA_expression)
5199     {
5200       dw2_asm_output_data (1, cfi->dw_cfi_oprnd1.dw_cfi_reg_num, NULL);
5201       loc = cfi->dw_cfi_oprnd2.dw_cfi_loc;
5202     }
5203   else
5204     loc = cfi->dw_cfi_oprnd1.dw_cfi_loc;
5205
5206   /* Output the size of the block.  */
5207   size = size_of_locs (loc);
5208   dw2_asm_output_data_uleb128 (size, NULL);
5209
5210   /* Now output the operations themselves.  */
5211   output_loc_sequence (loc);
5212 }
5213
5214 /* Similar, but used for .cfi_escape.  */
5215
5216 static void
5217 output_cfa_loc_raw (dw_cfi_ref cfi)
5218 {
5219   dw_loc_descr_ref loc;
5220   unsigned long size;
5221
5222   if (cfi->dw_cfi_opc == DW_CFA_expression)
5223     {
5224       fprintf (asm_out_file, "%#x,", cfi->dw_cfi_oprnd1.dw_cfi_reg_num);
5225       loc = cfi->dw_cfi_oprnd2.dw_cfi_loc;
5226     }
5227   else
5228     loc = cfi->dw_cfi_oprnd1.dw_cfi_loc;
5229
5230   /* Output the size of the block.  */
5231   size = size_of_locs (loc);
5232   dw2_asm_output_data_uleb128_raw (size);
5233   fputc (',', asm_out_file);
5234
5235   /* Now output the operations themselves.  */
5236   output_loc_sequence_raw (loc);
5237 }
5238
5239 /* This function builds a dwarf location descriptor sequence from a
5240    dw_cfa_location, adding the given OFFSET to the result of the
5241    expression.  */
5242
5243 static struct dw_loc_descr_struct *
5244 build_cfa_loc (dw_cfa_location *cfa, HOST_WIDE_INT offset)
5245 {
5246   struct dw_loc_descr_struct *head, *tmp;
5247
5248   offset += cfa->offset;
5249
5250   if (cfa->indirect)
5251     {
5252       head = new_reg_loc_descr (cfa->reg, cfa->base_offset);
5253       head->dw_loc_oprnd1.val_class = dw_val_class_const;
5254       tmp = new_loc_descr (DW_OP_deref, 0, 0);
5255       add_loc_descr (&head, tmp);
5256       if (offset != 0)
5257         {
5258           tmp = new_loc_descr (DW_OP_plus_uconst, offset, 0);
5259           add_loc_descr (&head, tmp);
5260         }
5261     }
5262   else
5263     head = new_reg_loc_descr (cfa->reg, offset);
5264
5265   return head;
5266 }
5267
5268 /* This function builds a dwarf location descriptor sequence for
5269    the address at OFFSET from the CFA when stack is aligned to
5270    ALIGNMENT byte.  */
5271
5272 static struct dw_loc_descr_struct *
5273 build_cfa_aligned_loc (HOST_WIDE_INT offset, HOST_WIDE_INT alignment)
5274 {
5275   struct dw_loc_descr_struct *head;
5276   unsigned int dwarf_fp
5277     = DWARF_FRAME_REGNUM (HARD_FRAME_POINTER_REGNUM);
5278
5279  /* When CFA is defined as FP+OFFSET, emulate stack alignment.  */
5280   if (cfa.reg == HARD_FRAME_POINTER_REGNUM && cfa.indirect == 0)
5281     {
5282       head = new_reg_loc_descr (dwarf_fp, 0);
5283       add_loc_descr (&head, int_loc_descriptor (alignment));
5284       add_loc_descr (&head, new_loc_descr (DW_OP_and, 0, 0));
5285       loc_descr_plus_const (&head, offset);
5286     }
5287   else
5288     head = new_reg_loc_descr (dwarf_fp, offset);
5289   return head;
5290 }
5291
5292 /* This function fills in aa dw_cfa_location structure from a dwarf location
5293    descriptor sequence.  */
5294
5295 static void
5296 get_cfa_from_loc_descr (dw_cfa_location *cfa, struct dw_loc_descr_struct *loc)
5297 {
5298   struct dw_loc_descr_struct *ptr;
5299   cfa->offset = 0;
5300   cfa->base_offset = 0;
5301   cfa->indirect = 0;
5302   cfa->reg = -1;
5303
5304   for (ptr = loc; ptr != NULL; ptr = ptr->dw_loc_next)
5305     {
5306       enum dwarf_location_atom op = ptr->dw_loc_opc;
5307
5308       switch (op)
5309         {
5310         case DW_OP_reg0:
5311         case DW_OP_reg1:
5312         case DW_OP_reg2:
5313         case DW_OP_reg3:
5314         case DW_OP_reg4:
5315         case DW_OP_reg5:
5316         case DW_OP_reg6:
5317         case DW_OP_reg7:
5318         case DW_OP_reg8:
5319         case DW_OP_reg9:
5320         case DW_OP_reg10:
5321         case DW_OP_reg11:
5322         case DW_OP_reg12:
5323         case DW_OP_reg13:
5324         case DW_OP_reg14:
5325         case DW_OP_reg15:
5326         case DW_OP_reg16:
5327         case DW_OP_reg17:
5328         case DW_OP_reg18:
5329         case DW_OP_reg19:
5330         case DW_OP_reg20:
5331         case DW_OP_reg21:
5332         case DW_OP_reg22:
5333         case DW_OP_reg23:
5334         case DW_OP_reg24:
5335         case DW_OP_reg25:
5336         case DW_OP_reg26:
5337         case DW_OP_reg27:
5338         case DW_OP_reg28:
5339         case DW_OP_reg29:
5340         case DW_OP_reg30:
5341         case DW_OP_reg31:
5342           cfa->reg = op - DW_OP_reg0;
5343           break;
5344         case DW_OP_regx:
5345           cfa->reg = ptr->dw_loc_oprnd1.v.val_int;
5346           break;
5347         case DW_OP_breg0:
5348         case DW_OP_breg1:
5349         case DW_OP_breg2:
5350         case DW_OP_breg3:
5351         case DW_OP_breg4:
5352         case DW_OP_breg5:
5353         case DW_OP_breg6:
5354         case DW_OP_breg7:
5355         case DW_OP_breg8:
5356         case DW_OP_breg9:
5357         case DW_OP_breg10:
5358         case DW_OP_breg11:
5359         case DW_OP_breg12:
5360         case DW_OP_breg13:
5361         case DW_OP_breg14:
5362         case DW_OP_breg15:
5363         case DW_OP_breg16:
5364         case DW_OP_breg17:
5365         case DW_OP_breg18:
5366         case DW_OP_breg19:
5367         case DW_OP_breg20:
5368         case DW_OP_breg21:
5369         case DW_OP_breg22:
5370         case DW_OP_breg23:
5371         case DW_OP_breg24:
5372         case DW_OP_breg25:
5373         case DW_OP_breg26:
5374         case DW_OP_breg27:
5375         case DW_OP_breg28:
5376         case DW_OP_breg29:
5377         case DW_OP_breg30:
5378         case DW_OP_breg31:
5379           cfa->reg = op - DW_OP_breg0;
5380           cfa->base_offset = ptr->dw_loc_oprnd1.v.val_int;
5381           break;
5382         case DW_OP_bregx:
5383           cfa->reg = ptr->dw_loc_oprnd1.v.val_int;
5384           cfa->base_offset = ptr->dw_loc_oprnd2.v.val_int;
5385           break;
5386         case DW_OP_deref:
5387           cfa->indirect = 1;
5388           break;
5389         case DW_OP_plus_uconst:
5390           cfa->offset = ptr->dw_loc_oprnd1.v.val_unsigned;
5391           break;
5392         default:
5393           internal_error ("DW_LOC_OP %s not implemented",
5394                           dwarf_stack_op_name (ptr->dw_loc_opc));
5395         }
5396     }
5397 }
5398 #endif /* .debug_frame support */
5399 \f
5400 /* And now, the support for symbolic debugging information.  */
5401 #ifdef DWARF2_DEBUGGING_INFO
5402
5403 /* .debug_str support.  */
5404 static int output_indirect_string (void **, void *);
5405
5406 static void dwarf2out_init (const char *);
5407 static void dwarf2out_finish (const char *);
5408 static void dwarf2out_assembly_start (void);
5409 static void dwarf2out_define (unsigned int, const char *);
5410 static void dwarf2out_undef (unsigned int, const char *);
5411 static void dwarf2out_start_source_file (unsigned, const char *);
5412 static void dwarf2out_end_source_file (unsigned);
5413 static void dwarf2out_function_decl (tree);
5414 static void dwarf2out_begin_block (unsigned, unsigned);
5415 static void dwarf2out_end_block (unsigned, unsigned);
5416 static bool dwarf2out_ignore_block (const_tree);
5417 static void dwarf2out_global_decl (tree);
5418 static void dwarf2out_type_decl (tree, int);
5419 static void dwarf2out_imported_module_or_decl (tree, tree, tree, bool);
5420 static void dwarf2out_imported_module_or_decl_1 (tree, tree, tree,
5421                                                  dw_die_ref);
5422 static void dwarf2out_abstract_function (tree);
5423 static void dwarf2out_var_location (rtx);
5424 static void dwarf2out_direct_call (tree);
5425 static void dwarf2out_virtual_call_token (tree, int);
5426 static void dwarf2out_copy_call_info (rtx, rtx);
5427 static void dwarf2out_virtual_call (int);
5428 static void dwarf2out_begin_function (tree);
5429 static void dwarf2out_set_name (tree, tree);
5430
5431 /* The debug hooks structure.  */
5432
5433 const struct gcc_debug_hooks dwarf2_debug_hooks =
5434 {
5435   dwarf2out_init,
5436   dwarf2out_finish,
5437   dwarf2out_assembly_start,
5438   dwarf2out_define,
5439   dwarf2out_undef,
5440   dwarf2out_start_source_file,
5441   dwarf2out_end_source_file,
5442   dwarf2out_begin_block,
5443   dwarf2out_end_block,
5444   dwarf2out_ignore_block,
5445   dwarf2out_source_line,
5446   dwarf2out_begin_prologue,
5447   debug_nothing_int_charstar,   /* end_prologue */
5448   dwarf2out_end_epilogue,
5449   dwarf2out_begin_function,
5450   debug_nothing_int,            /* end_function */
5451   dwarf2out_function_decl,      /* function_decl */
5452   dwarf2out_global_decl,
5453   dwarf2out_type_decl,          /* type_decl */
5454   dwarf2out_imported_module_or_decl,
5455   debug_nothing_tree,           /* deferred_inline_function */
5456   /* The DWARF 2 backend tries to reduce debugging bloat by not
5457      emitting the abstract description of inline functions until
5458      something tries to reference them.  */
5459   dwarf2out_abstract_function,  /* outlining_inline_function */
5460   debug_nothing_rtx,            /* label */
5461   debug_nothing_int,            /* handle_pch */
5462   dwarf2out_var_location,
5463   dwarf2out_switch_text_section,
5464   dwarf2out_direct_call,
5465   dwarf2out_virtual_call_token,
5466   dwarf2out_copy_call_info,
5467   dwarf2out_virtual_call,
5468   dwarf2out_set_name,
5469   1                             /* start_end_main_source_file */
5470 };
5471 #endif
5472 \f
5473 /* NOTE: In the comments in this file, many references are made to
5474    "Debugging Information Entries".  This term is abbreviated as `DIE'
5475    throughout the remainder of this file.  */
5476
5477 /* An internal representation of the DWARF output is built, and then
5478    walked to generate the DWARF debugging info.  The walk of the internal
5479    representation is done after the entire program has been compiled.
5480    The types below are used to describe the internal representation.  */
5481
5482 /* Various DIE's use offsets relative to the beginning of the
5483    .debug_info section to refer to each other.  */
5484
5485 typedef long int dw_offset;
5486
5487 /* Define typedefs here to avoid circular dependencies.  */
5488
5489 typedef struct dw_attr_struct *dw_attr_ref;
5490 typedef struct dw_line_info_struct *dw_line_info_ref;
5491 typedef struct dw_separate_line_info_struct *dw_separate_line_info_ref;
5492 typedef struct pubname_struct *pubname_ref;
5493 typedef struct dw_ranges_struct *dw_ranges_ref;
5494 typedef struct dw_ranges_by_label_struct *dw_ranges_by_label_ref;
5495 typedef struct comdat_type_struct *comdat_type_node_ref;
5496
5497 /* Each entry in the line_info_table maintains the file and
5498    line number associated with the label generated for that
5499    entry.  The label gives the PC value associated with
5500    the line number entry.  */
5501
5502 typedef struct GTY(()) dw_line_info_struct {
5503   unsigned long dw_file_num;
5504   unsigned long dw_line_num;
5505 }
5506 dw_line_info_entry;
5507
5508 /* Line information for functions in separate sections; each one gets its
5509    own sequence.  */
5510 typedef struct GTY(()) dw_separate_line_info_struct {
5511   unsigned long dw_file_num;
5512   unsigned long dw_line_num;
5513   unsigned long function;
5514 }
5515 dw_separate_line_info_entry;
5516
5517 /* Each DIE attribute has a field specifying the attribute kind,
5518    a link to the next attribute in the chain, and an attribute value.
5519    Attributes are typically linked below the DIE they modify.  */
5520
5521 typedef struct GTY(()) dw_attr_struct {
5522   enum dwarf_attribute dw_attr;
5523   dw_val_node dw_attr_val;
5524 }
5525 dw_attr_node;
5526
5527 DEF_VEC_O(dw_attr_node);
5528 DEF_VEC_ALLOC_O(dw_attr_node,gc);
5529
5530 /* The Debugging Information Entry (DIE) structure.  DIEs form a tree.
5531    The children of each node form a circular list linked by
5532    die_sib.  die_child points to the node *before* the "first" child node.  */
5533
5534 typedef struct GTY((chain_circular ("%h.die_sib"))) die_struct {
5535   enum dwarf_tag die_tag;
5536   union die_symbol_or_type_node
5537     {
5538       char * GTY ((tag ("0"))) die_symbol;
5539       comdat_type_node_ref GTY ((tag ("1"))) die_type_node;
5540     }
5541   GTY ((desc ("dwarf_version >= 4"))) die_id;
5542   VEC(dw_attr_node,gc) * die_attr;
5543   dw_die_ref die_parent;
5544   dw_die_ref die_child;
5545   dw_die_ref die_sib;
5546   dw_die_ref die_definition; /* ref from a specification to its definition */
5547   dw_offset die_offset;
5548   unsigned long die_abbrev;
5549   int die_mark;
5550   /* Die is used and must not be pruned as unused.  */
5551   int die_perennial_p;
5552   unsigned int decl_id;
5553 }
5554 die_node;
5555
5556 /* Evaluate 'expr' while 'c' is set to each child of DIE in order.  */
5557 #define FOR_EACH_CHILD(die, c, expr) do {       \
5558   c = die->die_child;                           \
5559   if (c) do {                                   \
5560     c = c->die_sib;                             \
5561     expr;                                       \
5562   } while (c != die->die_child);                \
5563 } while (0)
5564
5565 /* The pubname structure */
5566
5567 typedef struct GTY(()) pubname_struct {
5568   dw_die_ref die;
5569   const char *name;
5570 }
5571 pubname_entry;
5572
5573 DEF_VEC_O(pubname_entry);
5574 DEF_VEC_ALLOC_O(pubname_entry, gc);
5575
5576 struct GTY(()) dw_ranges_struct {
5577   /* If this is positive, it's a block number, otherwise it's a
5578      bitwise-negated index into dw_ranges_by_label.  */
5579   int num;
5580 };
5581
5582 struct GTY(()) dw_ranges_by_label_struct {
5583   const char *begin;
5584   const char *end;
5585 };
5586
5587 /* The comdat type node structure.  */
5588 typedef struct GTY(()) comdat_type_struct
5589 {
5590   dw_die_ref root_die;
5591   dw_die_ref type_die;
5592   char signature[DWARF_TYPE_SIGNATURE_SIZE];
5593   struct comdat_type_struct *next;
5594 }
5595 comdat_type_node;
5596
5597 /* The limbo die list structure.  */
5598 typedef struct GTY(()) limbo_die_struct {
5599   dw_die_ref die;
5600   tree created_for;
5601   struct limbo_die_struct *next;
5602 }
5603 limbo_die_node;
5604
5605 typedef struct GTY(()) skeleton_chain_struct
5606 {
5607   dw_die_ref old_die;
5608   dw_die_ref new_die;
5609   struct skeleton_chain_struct *parent;
5610 }
5611 skeleton_chain_node;
5612
5613 /* How to start an assembler comment.  */
5614 #ifndef ASM_COMMENT_START
5615 #define ASM_COMMENT_START ";#"
5616 #endif
5617
5618 /* Define a macro which returns nonzero for a TYPE_DECL which was
5619    implicitly generated for a tagged type.
5620
5621    Note that unlike the gcc front end (which generates a NULL named
5622    TYPE_DECL node for each complete tagged type, each array type, and
5623    each function type node created) the g++ front end generates a
5624    _named_ TYPE_DECL node for each tagged type node created.
5625    These TYPE_DECLs have DECL_ARTIFICIAL set, so we know not to
5626    generate a DW_TAG_typedef DIE for them.  */
5627
5628 #define TYPE_DECL_IS_STUB(decl)                         \
5629   (DECL_NAME (decl) == NULL_TREE                        \
5630    || (DECL_ARTIFICIAL (decl)                           \
5631        && is_tagged_type (TREE_TYPE (decl))             \
5632        && ((decl == TYPE_STUB_DECL (TREE_TYPE (decl)))  \
5633            /* This is necessary for stub decls that     \
5634               appear in nested inline functions.  */    \
5635            || (DECL_ABSTRACT_ORIGIN (decl) != NULL_TREE \
5636                && (decl_ultimate_origin (decl)          \
5637                    == TYPE_STUB_DECL (TREE_TYPE (decl)))))))
5638
5639 /* Information concerning the compilation unit's programming
5640    language, and compiler version.  */
5641
5642 /* Fixed size portion of the DWARF compilation unit header.  */
5643 #define DWARF_COMPILE_UNIT_HEADER_SIZE \
5644   (DWARF_INITIAL_LENGTH_SIZE + DWARF_OFFSET_SIZE + 3)
5645
5646 /* Fixed size portion of the DWARF comdat type unit header.  */
5647 #define DWARF_COMDAT_TYPE_UNIT_HEADER_SIZE \
5648   (DWARF_COMPILE_UNIT_HEADER_SIZE + DWARF_TYPE_SIGNATURE_SIZE \
5649    + DWARF_OFFSET_SIZE)
5650
5651 /* Fixed size portion of public names info.  */
5652 #define DWARF_PUBNAMES_HEADER_SIZE (2 * DWARF_OFFSET_SIZE + 2)
5653
5654 /* Fixed size portion of the address range info.  */
5655 #define DWARF_ARANGES_HEADER_SIZE                                       \
5656   (DWARF_ROUND (DWARF_INITIAL_LENGTH_SIZE + DWARF_OFFSET_SIZE + 4,      \
5657                 DWARF2_ADDR_SIZE * 2)                                   \
5658    - DWARF_INITIAL_LENGTH_SIZE)
5659
5660 /* Size of padding portion in the address range info.  It must be
5661    aligned to twice the pointer size.  */
5662 #define DWARF_ARANGES_PAD_SIZE \
5663   (DWARF_ROUND (DWARF_INITIAL_LENGTH_SIZE + DWARF_OFFSET_SIZE + 4, \
5664                 DWARF2_ADDR_SIZE * 2)                              \
5665    - (DWARF_INITIAL_LENGTH_SIZE + DWARF_OFFSET_SIZE + 4))
5666
5667 /* Use assembler line directives if available.  */
5668 #ifndef DWARF2_ASM_LINE_DEBUG_INFO
5669 #ifdef HAVE_AS_DWARF2_DEBUG_LINE
5670 #define DWARF2_ASM_LINE_DEBUG_INFO 1
5671 #else
5672 #define DWARF2_ASM_LINE_DEBUG_INFO 0
5673 #endif
5674 #endif
5675
5676 /* Minimum line offset in a special line info. opcode.
5677    This value was chosen to give a reasonable range of values.  */
5678 #define DWARF_LINE_BASE  -10
5679
5680 /* First special line opcode - leave room for the standard opcodes.  */
5681 #define DWARF_LINE_OPCODE_BASE  10
5682
5683 /* Range of line offsets in a special line info. opcode.  */
5684 #define DWARF_LINE_RANGE  (254-DWARF_LINE_OPCODE_BASE+1)
5685
5686 /* Flag that indicates the initial value of the is_stmt_start flag.
5687    In the present implementation, we do not mark any lines as
5688    the beginning of a source statement, because that information
5689    is not made available by the GCC front-end.  */
5690 #define DWARF_LINE_DEFAULT_IS_STMT_START 1
5691
5692 /* Maximum number of operations per instruction bundle.  */
5693 #ifndef DWARF_LINE_DEFAULT_MAX_OPS_PER_INSN
5694 #define DWARF_LINE_DEFAULT_MAX_OPS_PER_INSN 1
5695 #endif
5696
5697 #ifdef DWARF2_DEBUGGING_INFO
5698 /* This location is used by calc_die_sizes() to keep track
5699    the offset of each DIE within the .debug_info section.  */
5700 static unsigned long next_die_offset;
5701 #endif
5702
5703 /* Record the root of the DIE's built for the current compilation unit.  */
5704 static GTY(()) dw_die_ref comp_unit_die;
5705
5706 /* A list of type DIEs that have been separated into comdat sections.  */
5707 static GTY(()) comdat_type_node *comdat_type_list;
5708
5709 /* A list of DIEs with a NULL parent waiting to be relocated.  */
5710 static GTY(()) limbo_die_node *limbo_die_list;
5711
5712 /* A list of DIEs for which we may have to generate
5713    DW_AT_MIPS_linkage_name once their DECL_ASSEMBLER_NAMEs are
5714    set.  */
5715 static GTY(()) limbo_die_node *deferred_asm_name;
5716
5717 /* Filenames referenced by this compilation unit.  */
5718 static GTY((param_is (struct dwarf_file_data))) htab_t file_table;
5719
5720 /* A hash table of references to DIE's that describe declarations.
5721    The key is a DECL_UID() which is a unique number identifying each decl.  */
5722 static GTY ((param_is (struct die_struct))) htab_t decl_die_table;
5723
5724 /* A hash table of references to DIE's that describe COMMON blocks.
5725    The key is DECL_UID() ^ die_parent.  */
5726 static GTY ((param_is (struct die_struct))) htab_t common_block_die_table;
5727
5728 typedef struct GTY(()) die_arg_entry_struct {
5729     dw_die_ref die;
5730     tree arg;
5731 } die_arg_entry;
5732
5733 DEF_VEC_O(die_arg_entry);
5734 DEF_VEC_ALLOC_O(die_arg_entry,gc);
5735
5736 /* Node of the variable location list.  */
5737 struct GTY ((chain_next ("%h.next"))) var_loc_node {
5738   rtx GTY (()) var_loc_note;
5739   const char * GTY (()) label;
5740   struct var_loc_node * GTY (()) next;
5741 };
5742
5743 /* Variable location list.  */
5744 struct GTY (()) var_loc_list_def {
5745   struct var_loc_node * GTY (()) first;
5746
5747   /* Do not mark the last element of the chained list because
5748      it is marked through the chain.  */
5749   struct var_loc_node * GTY ((skip ("%h"))) last;
5750
5751   /* DECL_UID of the variable decl.  */
5752   unsigned int decl_id;
5753 };
5754 typedef struct var_loc_list_def var_loc_list;
5755
5756
5757 /* Table of decl location linked lists.  */
5758 static GTY ((param_is (var_loc_list))) htab_t decl_loc_table;
5759
5760 /* A pointer to the base of a list of references to DIE's that
5761    are uniquely identified by their tag, presence/absence of
5762    children DIE's, and list of attribute/value pairs.  */
5763 static GTY((length ("abbrev_die_table_allocated")))
5764   dw_die_ref *abbrev_die_table;
5765
5766 /* Number of elements currently allocated for abbrev_die_table.  */
5767 static GTY(()) unsigned abbrev_die_table_allocated;
5768
5769 /* Number of elements in type_die_table currently in use.  */
5770 static GTY(()) unsigned abbrev_die_table_in_use;
5771
5772 /* Size (in elements) of increments by which we may expand the
5773    abbrev_die_table.  */
5774 #define ABBREV_DIE_TABLE_INCREMENT 256
5775
5776 /* A pointer to the base of a table that contains line information
5777    for each source code line in .text in the compilation unit.  */
5778 static GTY((length ("line_info_table_allocated")))
5779      dw_line_info_ref line_info_table;
5780
5781 /* Number of elements currently allocated for line_info_table.  */
5782 static GTY(()) unsigned line_info_table_allocated;
5783
5784 /* Number of elements in line_info_table currently in use.  */
5785 static GTY(()) unsigned line_info_table_in_use;
5786
5787 /* A pointer to the base of a table that contains line information
5788    for each source code line outside of .text in the compilation unit.  */
5789 static GTY ((length ("separate_line_info_table_allocated")))
5790      dw_separate_line_info_ref separate_line_info_table;
5791
5792 /* Number of elements currently allocated for separate_line_info_table.  */
5793 static GTY(()) unsigned separate_line_info_table_allocated;
5794
5795 /* Number of elements in separate_line_info_table currently in use.  */
5796 static GTY(()) unsigned separate_line_info_table_in_use;
5797
5798 /* Size (in elements) of increments by which we may expand the
5799    line_info_table.  */
5800 #define LINE_INFO_TABLE_INCREMENT 1024
5801
5802 /* A pointer to the base of a table that contains a list of publicly
5803    accessible names.  */
5804 static GTY (()) VEC (pubname_entry, gc) *  pubname_table;
5805
5806 /* A pointer to the base of a table that contains a list of publicly
5807    accessible types.  */
5808 static GTY (()) VEC (pubname_entry, gc) * pubtype_table;
5809
5810 /* Array of dies for which we should generate .debug_arange info.  */
5811 static GTY((length ("arange_table_allocated"))) dw_die_ref *arange_table;
5812
5813 /* Number of elements currently allocated for arange_table.  */
5814 static GTY(()) unsigned arange_table_allocated;
5815
5816 /* Number of elements in arange_table currently in use.  */
5817 static GTY(()) unsigned arange_table_in_use;
5818
5819 /* Size (in elements) of increments by which we may expand the
5820    arange_table.  */
5821 #define ARANGE_TABLE_INCREMENT 64
5822
5823 /* Array of dies for which we should generate .debug_ranges info.  */
5824 static GTY ((length ("ranges_table_allocated"))) dw_ranges_ref ranges_table;
5825
5826 /* Number of elements currently allocated for ranges_table.  */
5827 static GTY(()) unsigned ranges_table_allocated;
5828
5829 /* Number of elements in ranges_table currently in use.  */
5830 static GTY(()) unsigned ranges_table_in_use;
5831
5832 /* Array of pairs of labels referenced in ranges_table.  */
5833 static GTY ((length ("ranges_by_label_allocated")))
5834      dw_ranges_by_label_ref ranges_by_label;
5835
5836 /* Number of elements currently allocated for ranges_by_label.  */
5837 static GTY(()) unsigned ranges_by_label_allocated;
5838
5839 /* Number of elements in ranges_by_label currently in use.  */
5840 static GTY(()) unsigned ranges_by_label_in_use;
5841
5842 /* Size (in elements) of increments by which we may expand the
5843    ranges_table.  */
5844 #define RANGES_TABLE_INCREMENT 64
5845
5846 /* Whether we have location lists that need outputting */
5847 static GTY(()) bool have_location_lists;
5848
5849 /* Unique label counter.  */
5850 static GTY(()) unsigned int loclabel_num;
5851
5852 /* Unique label counter for point-of-call tables.  */
5853 static GTY(()) unsigned int poc_label_num;
5854
5855 /* The direct call table structure.  */
5856
5857 typedef struct GTY(()) dcall_struct {
5858   unsigned int poc_label_num;
5859   tree poc_decl;
5860   dw_die_ref targ_die;
5861 }
5862 dcall_entry;
5863
5864 DEF_VEC_O(dcall_entry);
5865 DEF_VEC_ALLOC_O(dcall_entry, gc);
5866
5867 /* The virtual call table structure.  */
5868
5869 typedef struct GTY(()) vcall_struct {
5870   unsigned int poc_label_num;
5871   unsigned int vtable_slot;
5872 }
5873 vcall_entry;
5874
5875 DEF_VEC_O(vcall_entry);
5876 DEF_VEC_ALLOC_O(vcall_entry, gc);
5877
5878 /* Pointers to the direct and virtual call tables.  */
5879 static GTY (()) VEC (dcall_entry, gc) * dcall_table = NULL;
5880 static GTY (()) VEC (vcall_entry, gc) * vcall_table = NULL;
5881
5882 /* A hash table to map INSN_UIDs to vtable slot indexes.  */
5883
5884 struct GTY (()) vcall_insn {
5885   int insn_uid;
5886   unsigned int vtable_slot;
5887 };
5888
5889 static GTY ((param_is (struct vcall_insn))) htab_t vcall_insn_table;
5890
5891 #ifdef DWARF2_DEBUGGING_INFO
5892 /* Record whether the function being analyzed contains inlined functions.  */
5893 static int current_function_has_inlines;
5894 #endif
5895 #if 0 && defined (MIPS_DEBUGGING_INFO)
5896 static int comp_unit_has_inlines;
5897 #endif
5898
5899 /* The last file entry emitted by maybe_emit_file().  */
5900 static GTY(()) struct dwarf_file_data * last_emitted_file;
5901
5902 /* Number of internal labels generated by gen_internal_sym().  */
5903 static GTY(()) int label_num;
5904
5905 /* Cached result of previous call to lookup_filename.  */
5906 static GTY(()) struct dwarf_file_data * file_table_last_lookup;
5907
5908 static GTY(()) VEC(die_arg_entry,gc) *tmpl_value_parm_die_table;
5909
5910 #ifdef DWARF2_DEBUGGING_INFO
5911
5912 /* Offset from the "steady-state frame pointer" to the frame base,
5913    within the current function.  */
5914 static HOST_WIDE_INT frame_pointer_fb_offset;
5915
5916 /* Forward declarations for functions defined in this file.  */
5917
5918 static int is_pseudo_reg (const_rtx);
5919 static tree type_main_variant (tree);
5920 static int is_tagged_type (const_tree);
5921 static const char *dwarf_tag_name (unsigned);
5922 static const char *dwarf_attr_name (unsigned);
5923 static const char *dwarf_form_name (unsigned);
5924 static tree decl_ultimate_origin (const_tree);
5925 static tree decl_class_context (tree);
5926 static void add_dwarf_attr (dw_die_ref, dw_attr_ref);
5927 static inline enum dw_val_class AT_class (dw_attr_ref);
5928 static void add_AT_flag (dw_die_ref, enum dwarf_attribute, unsigned);
5929 static inline unsigned AT_flag (dw_attr_ref);
5930 static void add_AT_int (dw_die_ref, enum dwarf_attribute, HOST_WIDE_INT);
5931 static inline HOST_WIDE_INT AT_int (dw_attr_ref);
5932 static void add_AT_unsigned (dw_die_ref, enum dwarf_attribute, unsigned HOST_WIDE_INT);
5933 static inline unsigned HOST_WIDE_INT AT_unsigned (dw_attr_ref);
5934 static void add_AT_double (dw_die_ref, enum dwarf_attribute,
5935                            HOST_WIDE_INT, unsigned HOST_WIDE_INT);
5936 static inline void add_AT_vec (dw_die_ref, enum dwarf_attribute, unsigned int,
5937                                unsigned int, unsigned char *);
5938 static void add_AT_data8 (dw_die_ref, enum dwarf_attribute, unsigned char *);
5939 static hashval_t debug_str_do_hash (const void *);
5940 static int debug_str_eq (const void *, const void *);
5941 static void add_AT_string (dw_die_ref, enum dwarf_attribute, const char *);
5942 static inline const char *AT_string (dw_attr_ref);
5943 static enum dwarf_form AT_string_form (dw_attr_ref);
5944 static void add_AT_die_ref (dw_die_ref, enum dwarf_attribute, dw_die_ref);
5945 static void add_AT_specification (dw_die_ref, dw_die_ref);
5946 static inline dw_die_ref AT_ref (dw_attr_ref);
5947 static inline int AT_ref_external (dw_attr_ref);
5948 static inline void set_AT_ref_external (dw_attr_ref, int);
5949 static void add_AT_fde_ref (dw_die_ref, enum dwarf_attribute, unsigned);
5950 static void add_AT_loc (dw_die_ref, enum dwarf_attribute, dw_loc_descr_ref);
5951 static inline dw_loc_descr_ref AT_loc (dw_attr_ref);
5952 static void add_AT_loc_list (dw_die_ref, enum dwarf_attribute,
5953                              dw_loc_list_ref);
5954 static inline dw_loc_list_ref AT_loc_list (dw_attr_ref);
5955 static void add_AT_addr (dw_die_ref, enum dwarf_attribute, rtx);
5956 static inline rtx AT_addr (dw_attr_ref);
5957 static void add_AT_lbl_id (dw_die_ref, enum dwarf_attribute, const char *);
5958 static void add_AT_lineptr (dw_die_ref, enum dwarf_attribute, const char *);
5959 static void add_AT_macptr (dw_die_ref, enum dwarf_attribute, const char *);
5960 static void add_AT_offset (dw_die_ref, enum dwarf_attribute,
5961                            unsigned HOST_WIDE_INT);
5962 static void add_AT_range_list (dw_die_ref, enum dwarf_attribute,
5963                                unsigned long);
5964 static inline const char *AT_lbl (dw_attr_ref);
5965 static dw_attr_ref get_AT (dw_die_ref, enum dwarf_attribute);
5966 static const char *get_AT_low_pc (dw_die_ref);
5967 static const char *get_AT_hi_pc (dw_die_ref);
5968 static const char *get_AT_string (dw_die_ref, enum dwarf_attribute);
5969 static int get_AT_flag (dw_die_ref, enum dwarf_attribute);
5970 static unsigned get_AT_unsigned (dw_die_ref, enum dwarf_attribute);
5971 static inline dw_die_ref get_AT_ref (dw_die_ref, enum dwarf_attribute);
5972 static bool is_cxx (void);
5973 static bool is_fortran (void);
5974 static bool is_ada (void);
5975 static void remove_AT (dw_die_ref, enum dwarf_attribute);
5976 static void remove_child_TAG (dw_die_ref, enum dwarf_tag);
5977 static void add_child_die (dw_die_ref, dw_die_ref);
5978 static dw_die_ref new_die (enum dwarf_tag, dw_die_ref, tree);
5979 static dw_die_ref lookup_type_die (tree);
5980 static void equate_type_number_to_die (tree, dw_die_ref);
5981 static hashval_t decl_die_table_hash (const void *);
5982 static int decl_die_table_eq (const void *, const void *);
5983 static dw_die_ref lookup_decl_die (tree);
5984 static hashval_t common_block_die_table_hash (const void *);
5985 static int common_block_die_table_eq (const void *, const void *);
5986 static hashval_t decl_loc_table_hash (const void *);
5987 static int decl_loc_table_eq (const void *, const void *);
5988 static var_loc_list *lookup_decl_loc (const_tree);
5989 static void equate_decl_number_to_die (tree, dw_die_ref);
5990 static struct var_loc_node *add_var_loc_to_decl (tree, rtx);
5991 static void print_spaces (FILE *);
5992 static void print_die (dw_die_ref, FILE *);
5993 static void print_dwarf_line_table (FILE *);
5994 static dw_die_ref push_new_compile_unit (dw_die_ref, dw_die_ref);
5995 static dw_die_ref pop_compile_unit (dw_die_ref);
5996 static void loc_checksum (dw_loc_descr_ref, struct md5_ctx *);
5997 static void attr_checksum (dw_attr_ref, struct md5_ctx *, int *);
5998 static void die_checksum (dw_die_ref, struct md5_ctx *, int *);
5999 static void checksum_sleb128 (HOST_WIDE_INT, struct md5_ctx *);
6000 static void checksum_uleb128 (unsigned HOST_WIDE_INT, struct md5_ctx *);
6001 static void loc_checksum_ordered (dw_loc_descr_ref, struct md5_ctx *);
6002 static void attr_checksum_ordered (enum dwarf_tag, dw_attr_ref,
6003                                    struct md5_ctx *, int *);
6004 struct checksum_attributes;
6005 static void collect_checksum_attributes (struct checksum_attributes *, dw_die_ref);
6006 static void die_checksum_ordered (dw_die_ref, struct md5_ctx *, int *);
6007 static void checksum_die_context (dw_die_ref, struct md5_ctx *);
6008 static void generate_type_signature (dw_die_ref, comdat_type_node *);
6009 static int same_loc_p (dw_loc_descr_ref, dw_loc_descr_ref, int *);
6010 static int same_dw_val_p (const dw_val_node *, const dw_val_node *, int *);
6011 static int same_attr_p (dw_attr_ref, dw_attr_ref, int *);
6012 static int same_die_p (dw_die_ref, dw_die_ref, int *);
6013 static int same_die_p_wrap (dw_die_ref, dw_die_ref);
6014 static void compute_section_prefix (dw_die_ref);
6015 static int is_type_die (dw_die_ref);
6016 static int is_comdat_die (dw_die_ref);
6017 static int is_symbol_die (dw_die_ref);
6018 static void assign_symbol_names (dw_die_ref);
6019 static void break_out_includes (dw_die_ref);
6020 static int is_declaration_die (dw_die_ref);
6021 static int should_move_die_to_comdat (dw_die_ref);
6022 static dw_die_ref clone_as_declaration (dw_die_ref);
6023 static dw_die_ref clone_die (dw_die_ref);
6024 static dw_die_ref clone_tree (dw_die_ref);
6025 static void copy_declaration_context (dw_die_ref, dw_die_ref);
6026 static void generate_skeleton_ancestor_tree (skeleton_chain_node *);
6027 static void generate_skeleton_bottom_up (skeleton_chain_node *);
6028 static dw_die_ref generate_skeleton (dw_die_ref);
6029 static dw_die_ref remove_child_or_replace_with_skeleton (dw_die_ref,
6030                                                          dw_die_ref);
6031 static void break_out_comdat_types (dw_die_ref);
6032 static dw_die_ref copy_ancestor_tree (dw_die_ref, dw_die_ref, htab_t);
6033 static void copy_decls_walk (dw_die_ref, dw_die_ref, htab_t);
6034 static void copy_decls_for_unworthy_types (dw_die_ref);
6035
6036 static hashval_t htab_cu_hash (const void *);
6037 static int htab_cu_eq (const void *, const void *);
6038 static void htab_cu_del (void *);
6039 static int check_duplicate_cu (dw_die_ref, htab_t, unsigned *);
6040 static void record_comdat_symbol_number (dw_die_ref, htab_t, unsigned);
6041 static void add_sibling_attributes (dw_die_ref);
6042 static void build_abbrev_table (dw_die_ref);
6043 static void output_location_lists (dw_die_ref);
6044 static int constant_size (unsigned HOST_WIDE_INT);
6045 static unsigned long size_of_die (dw_die_ref);
6046 static void calc_die_sizes (dw_die_ref);
6047 static void mark_dies (dw_die_ref);
6048 static void unmark_dies (dw_die_ref);
6049 static void unmark_all_dies (dw_die_ref);
6050 static unsigned long size_of_pubnames (VEC (pubname_entry,gc) *);
6051 static unsigned long size_of_aranges (void);
6052 static enum dwarf_form value_format (dw_attr_ref);
6053 static void output_value_format (dw_attr_ref);
6054 static void output_abbrev_section (void);
6055 static void output_die_symbol (dw_die_ref);
6056 static void output_die (dw_die_ref);
6057 static void output_compilation_unit_header (void);
6058 static void output_comp_unit (dw_die_ref, int);
6059 static void output_comdat_type_unit (comdat_type_node *);
6060 static const char *dwarf2_name (tree, int);
6061 static void add_pubname (tree, dw_die_ref);
6062 static void add_pubname_string (const char *, dw_die_ref);
6063 static void add_pubtype (tree, dw_die_ref);
6064 static void output_pubnames (VEC (pubname_entry,gc) *);
6065 static void add_arange (tree, dw_die_ref);
6066 static void output_aranges (void);
6067 static unsigned int add_ranges_num (int);
6068 static unsigned int add_ranges (const_tree);
6069 static void add_ranges_by_labels (dw_die_ref, const char *, const char *,
6070                                   bool *);
6071 static void output_ranges (void);
6072 static void output_line_info (void);
6073 static void output_file_names (void);
6074 static dw_die_ref base_type_die (tree);
6075 static int is_base_type (tree);
6076 static dw_die_ref subrange_type_die (tree, tree, tree, dw_die_ref);
6077 static dw_die_ref modified_type_die (tree, int, int, dw_die_ref);
6078 static dw_die_ref generic_parameter_die (tree, tree, bool, dw_die_ref);
6079 static dw_die_ref template_parameter_pack_die (tree, tree, dw_die_ref);
6080 static int type_is_enum (const_tree);
6081 static unsigned int dbx_reg_number (const_rtx);
6082 static void add_loc_descr_op_piece (dw_loc_descr_ref *, int);
6083 static dw_loc_descr_ref reg_loc_descriptor (rtx, enum var_init_status);
6084 static dw_loc_descr_ref one_reg_loc_descriptor (unsigned int,
6085                                                 enum var_init_status);
6086 static dw_loc_descr_ref multiple_reg_loc_descriptor (rtx, rtx,
6087                                                      enum var_init_status);
6088 static dw_loc_descr_ref based_loc_descr (rtx, HOST_WIDE_INT,
6089                                          enum var_init_status);
6090 static int is_based_loc (const_rtx);
6091 static int resolve_one_addr (rtx *, void *);
6092 static dw_loc_descr_ref mem_loc_descriptor (rtx, enum machine_mode mode,
6093                                             enum var_init_status);
6094 static dw_loc_descr_ref concat_loc_descriptor (rtx, rtx,
6095                                                enum var_init_status);
6096 static dw_loc_descr_ref loc_descriptor (rtx, enum machine_mode mode,
6097                                         enum var_init_status);
6098 static dw_loc_list_ref loc_list_from_tree (tree, int);
6099 static dw_loc_descr_ref loc_descriptor_from_tree (tree, int);
6100 static HOST_WIDE_INT ceiling (HOST_WIDE_INT, unsigned int);
6101 static tree field_type (const_tree);
6102 static unsigned int simple_type_align_in_bits (const_tree);
6103 static unsigned int simple_decl_align_in_bits (const_tree);
6104 static unsigned HOST_WIDE_INT simple_type_size_in_bits (const_tree);
6105 static HOST_WIDE_INT field_byte_offset (const_tree);
6106 static void add_AT_location_description (dw_die_ref, enum dwarf_attribute,
6107                                          dw_loc_list_ref);
6108 static void add_data_member_location_attribute (dw_die_ref, tree);
6109 static bool add_const_value_attribute (dw_die_ref, rtx);
6110 static void insert_int (HOST_WIDE_INT, unsigned, unsigned char *);
6111 static void insert_float (const_rtx, unsigned char *);
6112 static rtx rtl_for_decl_location (tree);
6113 static bool add_location_or_const_value_attribute (dw_die_ref, tree,
6114                                                    enum dwarf_attribute);
6115 static bool tree_add_const_value_attribute (dw_die_ref, tree);
6116 static bool tree_add_const_value_attribute_for_decl (dw_die_ref, tree);
6117 static void add_name_attribute (dw_die_ref, const char *);
6118 static void add_comp_dir_attribute (dw_die_ref);
6119 static void add_bound_info (dw_die_ref, enum dwarf_attribute, tree);
6120 static void add_subscript_info (dw_die_ref, tree, bool);
6121 static void add_byte_size_attribute (dw_die_ref, tree);
6122 static void add_bit_offset_attribute (dw_die_ref, tree);
6123 static void add_bit_size_attribute (dw_die_ref, tree);
6124 static void add_prototyped_attribute (dw_die_ref, tree);
6125 static dw_die_ref add_abstract_origin_attribute (dw_die_ref, tree);
6126 static void add_pure_or_virtual_attribute (dw_die_ref, tree);
6127 static void add_src_coords_attributes (dw_die_ref, tree);
6128 static void add_name_and_src_coords_attributes (dw_die_ref, tree);
6129 static void push_decl_scope (tree);
6130 static void pop_decl_scope (void);
6131 static dw_die_ref scope_die_for (tree, dw_die_ref);
6132 static inline int local_scope_p (dw_die_ref);
6133 static inline int class_scope_p (dw_die_ref);
6134 static inline int class_or_namespace_scope_p (dw_die_ref);
6135 static void add_type_attribute (dw_die_ref, tree, int, int, dw_die_ref);
6136 static void add_calling_convention_attribute (dw_die_ref, tree);
6137 static const char *type_tag (const_tree);
6138 static tree member_declared_type (const_tree);
6139 #if 0
6140 static const char *decl_start_label (tree);
6141 #endif
6142 static void gen_array_type_die (tree, dw_die_ref);
6143 static void gen_descr_array_type_die (tree, struct array_descr_info *, dw_die_ref);
6144 #if 0
6145 static void gen_entry_point_die (tree, dw_die_ref);
6146 #endif
6147 static dw_die_ref gen_enumeration_type_die (tree, dw_die_ref);
6148 static dw_die_ref gen_formal_parameter_die (tree, tree, bool, dw_die_ref);
6149 static dw_die_ref gen_formal_parameter_pack_die  (tree, tree, dw_die_ref, tree*);
6150 static void gen_unspecified_parameters_die (tree, dw_die_ref);
6151 static void gen_formal_types_die (tree, dw_die_ref);
6152 static void gen_subprogram_die (tree, dw_die_ref);
6153 static void gen_variable_die (tree, tree, dw_die_ref);
6154 static void gen_const_die (tree, dw_die_ref);
6155 static void gen_label_die (tree, dw_die_ref);
6156 static void gen_lexical_block_die (tree, dw_die_ref, int);
6157 static void gen_inlined_subroutine_die (tree, dw_die_ref, int);
6158 static void gen_field_die (tree, dw_die_ref);
6159 static void gen_ptr_to_mbr_type_die (tree, dw_die_ref);
6160 static dw_die_ref gen_compile_unit_die (const char *);
6161 static void gen_inheritance_die (tree, tree, dw_die_ref);
6162 static void gen_member_die (tree, dw_die_ref);
6163 static void gen_struct_or_union_type_die (tree, dw_die_ref,
6164                                                 enum debug_info_usage);
6165 static void gen_subroutine_type_die (tree, dw_die_ref);
6166 static void gen_typedef_die (tree, dw_die_ref);
6167 static void gen_type_die (tree, dw_die_ref);
6168 static void gen_block_die (tree, dw_die_ref, int);
6169 static void decls_for_scope (tree, dw_die_ref, int);
6170 static int is_redundant_typedef (const_tree);
6171 static inline dw_die_ref get_context_die (tree);
6172 static void gen_namespace_die (tree, dw_die_ref);
6173 static void gen_decl_die (tree, tree, dw_die_ref);
6174 static dw_die_ref force_decl_die (tree);
6175 static dw_die_ref force_type_die (tree);
6176 static dw_die_ref setup_namespace_context (tree, dw_die_ref);
6177 static dw_die_ref declare_in_namespace (tree, dw_die_ref);
6178 static struct dwarf_file_data * lookup_filename (const char *);
6179 static void retry_incomplete_types (void);
6180 static void gen_type_die_for_member (tree, tree, dw_die_ref);
6181 static void gen_generic_params_dies (tree);
6182 static void splice_child_die (dw_die_ref, dw_die_ref);
6183 static int file_info_cmp (const void *, const void *);
6184 static dw_loc_list_ref new_loc_list (dw_loc_descr_ref, const char *,
6185                                      const char *, const char *);
6186 static void output_loc_list (dw_loc_list_ref);
6187 static char *gen_internal_sym (const char *);
6188
6189 static void prune_unmark_dies (dw_die_ref);
6190 static void prune_unused_types_mark (dw_die_ref, int);
6191 static void prune_unused_types_walk (dw_die_ref);
6192 static void prune_unused_types_walk_attribs (dw_die_ref);
6193 static void prune_unused_types_prune (dw_die_ref);
6194 static void prune_unused_types (void);
6195 static int maybe_emit_file (struct dwarf_file_data *fd);
6196 static void append_entry_to_tmpl_value_parm_die_table (dw_die_ref, tree);
6197 static void gen_remaining_tmpl_value_param_die_attribute (void);
6198
6199 /* Section names used to hold DWARF debugging information.  */
6200 #ifndef DEBUG_INFO_SECTION
6201 #define DEBUG_INFO_SECTION      ".debug_info"
6202 #endif
6203 #ifndef DEBUG_ABBREV_SECTION
6204 #define DEBUG_ABBREV_SECTION    ".debug_abbrev"
6205 #endif
6206 #ifndef DEBUG_ARANGES_SECTION
6207 #define DEBUG_ARANGES_SECTION   ".debug_aranges"
6208 #endif
6209 #ifndef DEBUG_MACINFO_SECTION
6210 #define DEBUG_MACINFO_SECTION   ".debug_macinfo"
6211 #endif
6212 #ifndef DEBUG_LINE_SECTION
6213 #define DEBUG_LINE_SECTION      ".debug_line"
6214 #endif
6215 #ifndef DEBUG_LOC_SECTION
6216 #define DEBUG_LOC_SECTION       ".debug_loc"
6217 #endif
6218 #ifndef DEBUG_PUBNAMES_SECTION
6219 #define DEBUG_PUBNAMES_SECTION  ".debug_pubnames"
6220 #endif
6221 #ifndef DEBUG_PUBTYPES_SECTION
6222 #define DEBUG_PUBTYPES_SECTION  ".debug_pubtypes"
6223 #endif
6224 #ifndef DEBUG_DCALL_SECTION
6225 #define DEBUG_DCALL_SECTION     ".debug_dcall"
6226 #endif
6227 #ifndef DEBUG_VCALL_SECTION
6228 #define DEBUG_VCALL_SECTION     ".debug_vcall"
6229 #endif
6230 #ifndef DEBUG_STR_SECTION
6231 #define DEBUG_STR_SECTION       ".debug_str"
6232 #endif
6233 #ifndef DEBUG_RANGES_SECTION
6234 #define DEBUG_RANGES_SECTION    ".debug_ranges"
6235 #endif
6236
6237 /* Standard ELF section names for compiled code and data.  */
6238 #ifndef TEXT_SECTION_NAME
6239 #define TEXT_SECTION_NAME       ".text"
6240 #endif
6241
6242 /* Section flags for .debug_str section.  */
6243 #define DEBUG_STR_SECTION_FLAGS \
6244   (HAVE_GAS_SHF_MERGE && flag_merge_debug_strings               \
6245    ? SECTION_DEBUG | SECTION_MERGE | SECTION_STRINGS | 1        \
6246    : SECTION_DEBUG)
6247
6248 /* Labels we insert at beginning sections we can reference instead of
6249    the section names themselves.  */
6250
6251 #ifndef TEXT_SECTION_LABEL
6252 #define TEXT_SECTION_LABEL              "Ltext"
6253 #endif
6254 #ifndef COLD_TEXT_SECTION_LABEL
6255 #define COLD_TEXT_SECTION_LABEL         "Ltext_cold"
6256 #endif
6257 #ifndef DEBUG_LINE_SECTION_LABEL
6258 #define DEBUG_LINE_SECTION_LABEL        "Ldebug_line"
6259 #endif
6260 #ifndef DEBUG_INFO_SECTION_LABEL
6261 #define DEBUG_INFO_SECTION_LABEL        "Ldebug_info"
6262 #endif
6263 #ifndef DEBUG_ABBREV_SECTION_LABEL
6264 #define DEBUG_ABBREV_SECTION_LABEL      "Ldebug_abbrev"
6265 #endif
6266 #ifndef DEBUG_LOC_SECTION_LABEL
6267 #define DEBUG_LOC_SECTION_LABEL         "Ldebug_loc"
6268 #endif
6269 #ifndef DEBUG_RANGES_SECTION_LABEL
6270 #define DEBUG_RANGES_SECTION_LABEL      "Ldebug_ranges"
6271 #endif
6272 #ifndef DEBUG_MACINFO_SECTION_LABEL
6273 #define DEBUG_MACINFO_SECTION_LABEL     "Ldebug_macinfo"
6274 #endif
6275
6276 /* Definitions of defaults for formats and names of various special
6277    (artificial) labels which may be generated within this file (when the -g
6278    options is used and DWARF2_DEBUGGING_INFO is in effect.
6279    If necessary, these may be overridden from within the tm.h file, but
6280    typically, overriding these defaults is unnecessary.  */
6281
6282 static char text_end_label[MAX_ARTIFICIAL_LABEL_BYTES];
6283 static char text_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
6284 static char cold_text_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
6285 static char cold_end_label[MAX_ARTIFICIAL_LABEL_BYTES];
6286 static char abbrev_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
6287 static char debug_info_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
6288 static char debug_line_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
6289 static char macinfo_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
6290 static char loc_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
6291 static char ranges_section_label[2 * MAX_ARTIFICIAL_LABEL_BYTES];
6292
6293 #ifndef TEXT_END_LABEL
6294 #define TEXT_END_LABEL          "Letext"
6295 #endif
6296 #ifndef COLD_END_LABEL
6297 #define COLD_END_LABEL          "Letext_cold"
6298 #endif
6299 #ifndef BLOCK_BEGIN_LABEL
6300 #define BLOCK_BEGIN_LABEL       "LBB"
6301 #endif
6302 #ifndef BLOCK_END_LABEL
6303 #define BLOCK_END_LABEL         "LBE"
6304 #endif
6305 #ifndef LINE_CODE_LABEL
6306 #define LINE_CODE_LABEL         "LM"
6307 #endif
6308 #ifndef SEPARATE_LINE_CODE_LABEL
6309 #define SEPARATE_LINE_CODE_LABEL        "LSM"
6310 #endif
6311
6312 \f
6313 /* We allow a language front-end to designate a function that is to be
6314    called to "demangle" any name before it is put into a DIE.  */
6315
6316 static const char *(*demangle_name_func) (const char *);
6317
6318 void
6319 dwarf2out_set_demangle_name_func (const char *(*func) (const char *))
6320 {
6321   demangle_name_func = func;
6322 }
6323
6324 /* Test if rtl node points to a pseudo register.  */
6325
6326 static inline int
6327 is_pseudo_reg (const_rtx rtl)
6328 {
6329   return ((REG_P (rtl) && REGNO (rtl) >= FIRST_PSEUDO_REGISTER)
6330           || (GET_CODE (rtl) == SUBREG
6331               && REGNO (SUBREG_REG (rtl)) >= FIRST_PSEUDO_REGISTER));
6332 }
6333
6334 /* Return a reference to a type, with its const and volatile qualifiers
6335    removed.  */
6336
6337 static inline tree
6338 type_main_variant (tree type)
6339 {
6340   type = TYPE_MAIN_VARIANT (type);
6341
6342   /* ??? There really should be only one main variant among any group of
6343      variants of a given type (and all of the MAIN_VARIANT values for all
6344      members of the group should point to that one type) but sometimes the C
6345      front-end messes this up for array types, so we work around that bug
6346      here.  */
6347   if (TREE_CODE (type) == ARRAY_TYPE)
6348     while (type != TYPE_MAIN_VARIANT (type))
6349       type = TYPE_MAIN_VARIANT (type);
6350
6351   return type;
6352 }
6353
6354 /* Return nonzero if the given type node represents a tagged type.  */
6355
6356 static inline int
6357 is_tagged_type (const_tree type)
6358 {
6359   enum tree_code code = TREE_CODE (type);
6360
6361   return (code == RECORD_TYPE || code == UNION_TYPE
6362           || code == QUAL_UNION_TYPE || code == ENUMERAL_TYPE);
6363 }
6364
6365 /* Convert a DIE tag into its string name.  */
6366
6367 static const char *
6368 dwarf_tag_name (unsigned int tag)
6369 {
6370   switch (tag)
6371     {
6372     case DW_TAG_padding:
6373       return "DW_TAG_padding";
6374     case DW_TAG_array_type:
6375       return "DW_TAG_array_type";
6376     case DW_TAG_class_type:
6377       return "DW_TAG_class_type";
6378     case DW_TAG_entry_point:
6379       return "DW_TAG_entry_point";
6380     case DW_TAG_enumeration_type:
6381       return "DW_TAG_enumeration_type";
6382     case DW_TAG_formal_parameter:
6383       return "DW_TAG_formal_parameter";
6384     case DW_TAG_imported_declaration:
6385       return "DW_TAG_imported_declaration";
6386     case DW_TAG_label:
6387       return "DW_TAG_label";
6388     case DW_TAG_lexical_block:
6389       return "DW_TAG_lexical_block";
6390     case DW_TAG_member:
6391       return "DW_TAG_member";
6392     case DW_TAG_pointer_type:
6393       return "DW_TAG_pointer_type";
6394     case DW_TAG_reference_type:
6395       return "DW_TAG_reference_type";
6396     case DW_TAG_compile_unit:
6397       return "DW_TAG_compile_unit";
6398     case DW_TAG_string_type:
6399       return "DW_TAG_string_type";
6400     case DW_TAG_structure_type:
6401       return "DW_TAG_structure_type";
6402     case DW_TAG_subroutine_type:
6403       return "DW_TAG_subroutine_type";
6404     case DW_TAG_typedef:
6405       return "DW_TAG_typedef";
6406     case DW_TAG_union_type:
6407       return "DW_TAG_union_type";
6408     case DW_TAG_unspecified_parameters:
6409       return "DW_TAG_unspecified_parameters";
6410     case DW_TAG_variant:
6411       return "DW_TAG_variant";
6412     case DW_TAG_common_block:
6413       return "DW_TAG_common_block";
6414     case DW_TAG_common_inclusion:
6415       return "DW_TAG_common_inclusion";
6416     case DW_TAG_inheritance:
6417       return "DW_TAG_inheritance";
6418     case DW_TAG_inlined_subroutine:
6419       return "DW_TAG_inlined_subroutine";
6420     case DW_TAG_module:
6421       return "DW_TAG_module";
6422     case DW_TAG_ptr_to_member_type:
6423       return "DW_TAG_ptr_to_member_type";
6424     case DW_TAG_set_type:
6425       return "DW_TAG_set_type";
6426     case DW_TAG_subrange_type:
6427       return "DW_TAG_subrange_type";
6428     case DW_TAG_with_stmt:
6429       return "DW_TAG_with_stmt";
6430     case DW_TAG_access_declaration:
6431       return "DW_TAG_access_declaration";
6432     case DW_TAG_base_type:
6433       return "DW_TAG_base_type";
6434     case DW_TAG_catch_block:
6435       return "DW_TAG_catch_block";
6436     case DW_TAG_const_type:
6437       return "DW_TAG_const_type";
6438     case DW_TAG_constant:
6439       return "DW_TAG_constant";
6440     case DW_TAG_enumerator:
6441       return "DW_TAG_enumerator";
6442     case DW_TAG_file_type:
6443       return "DW_TAG_file_type";
6444     case DW_TAG_friend:
6445       return "DW_TAG_friend";
6446     case DW_TAG_namelist:
6447       return "DW_TAG_namelist";
6448     case DW_TAG_namelist_item:
6449       return "DW_TAG_namelist_item";
6450     case DW_TAG_packed_type:
6451       return "DW_TAG_packed_type";
6452     case DW_TAG_subprogram:
6453       return "DW_TAG_subprogram";
6454     case DW_TAG_template_type_param:
6455       return "DW_TAG_template_type_param";
6456     case DW_TAG_template_value_param:
6457       return "DW_TAG_template_value_param";
6458     case DW_TAG_thrown_type:
6459       return "DW_TAG_thrown_type";
6460     case DW_TAG_try_block:
6461       return "DW_TAG_try_block";
6462     case DW_TAG_variant_part:
6463       return "DW_TAG_variant_part";
6464     case DW_TAG_variable:
6465       return "DW_TAG_variable";
6466     case DW_TAG_volatile_type:
6467       return "DW_TAG_volatile_type";
6468     case DW_TAG_dwarf_procedure:
6469       return "DW_TAG_dwarf_procedure";
6470     case DW_TAG_restrict_type:
6471       return "DW_TAG_restrict_type";
6472     case DW_TAG_interface_type:
6473       return "DW_TAG_interface_type";
6474     case DW_TAG_namespace:
6475       return "DW_TAG_namespace";
6476     case DW_TAG_imported_module:
6477       return "DW_TAG_imported_module";
6478     case DW_TAG_unspecified_type:
6479       return "DW_TAG_unspecified_type";
6480     case DW_TAG_partial_unit:
6481       return "DW_TAG_partial_unit";
6482     case DW_TAG_imported_unit:
6483       return "DW_TAG_imported_unit";
6484     case DW_TAG_condition:
6485       return "DW_TAG_condition";
6486     case DW_TAG_shared_type:
6487       return "DW_TAG_shared_type";
6488     case DW_TAG_type_unit:
6489       return "DW_TAG_type_unit";
6490     case DW_TAG_rvalue_reference_type:
6491       return "DW_TAG_rvalue_reference_type";
6492     case DW_TAG_template_alias:
6493       return "DW_TAG_template_alias";
6494     case DW_TAG_GNU_template_parameter_pack:
6495       return "DW_TAG_GNU_template_parameter_pack";
6496     case DW_TAG_GNU_formal_parameter_pack:
6497       return "DW_TAG_GNU_formal_parameter_pack";
6498     case DW_TAG_MIPS_loop:
6499       return "DW_TAG_MIPS_loop";
6500     case DW_TAG_format_label:
6501       return "DW_TAG_format_label";
6502     case DW_TAG_function_template:
6503       return "DW_TAG_function_template";
6504     case DW_TAG_class_template:
6505       return "DW_TAG_class_template";
6506     case DW_TAG_GNU_BINCL:
6507       return "DW_TAG_GNU_BINCL";
6508     case DW_TAG_GNU_EINCL:
6509       return "DW_TAG_GNU_EINCL";
6510     case DW_TAG_GNU_template_template_param:
6511       return "DW_TAG_GNU_template_template_param";
6512     default:
6513       return "DW_TAG_<unknown>";
6514     }
6515 }
6516
6517 /* Convert a DWARF attribute code into its string name.  */
6518
6519 static const char *
6520 dwarf_attr_name (unsigned int attr)
6521 {
6522   switch (attr)
6523     {
6524     case DW_AT_sibling:
6525       return "DW_AT_sibling";
6526     case DW_AT_location:
6527       return "DW_AT_location";
6528     case DW_AT_name:
6529       return "DW_AT_name";
6530     case DW_AT_ordering:
6531       return "DW_AT_ordering";
6532     case DW_AT_subscr_data:
6533       return "DW_AT_subscr_data";
6534     case DW_AT_byte_size:
6535       return "DW_AT_byte_size";
6536     case DW_AT_bit_offset:
6537       return "DW_AT_bit_offset";
6538     case DW_AT_bit_size:
6539       return "DW_AT_bit_size";
6540     case DW_AT_element_list:
6541       return "DW_AT_element_list";
6542     case DW_AT_stmt_list:
6543       return "DW_AT_stmt_list";
6544     case DW_AT_low_pc:
6545       return "DW_AT_low_pc";
6546     case DW_AT_high_pc:
6547       return "DW_AT_high_pc";
6548     case DW_AT_language:
6549       return "DW_AT_language";
6550     case DW_AT_member:
6551       return "DW_AT_member";
6552     case DW_AT_discr:
6553       return "DW_AT_discr";
6554     case DW_AT_discr_value:
6555       return "DW_AT_discr_value";
6556     case DW_AT_visibility:
6557       return "DW_AT_visibility";
6558     case DW_AT_import:
6559       return "DW_AT_import";
6560     case DW_AT_string_length:
6561       return "DW_AT_string_length";
6562     case DW_AT_common_reference:
6563       return "DW_AT_common_reference";
6564     case DW_AT_comp_dir:
6565       return "DW_AT_comp_dir";
6566     case DW_AT_const_value:
6567       return "DW_AT_const_value";
6568     case DW_AT_containing_type:
6569       return "DW_AT_containing_type";
6570     case DW_AT_default_value:
6571       return "DW_AT_default_value";
6572     case DW_AT_inline:
6573       return "DW_AT_inline";
6574     case DW_AT_is_optional:
6575       return "DW_AT_is_optional";
6576     case DW_AT_lower_bound:
6577       return "DW_AT_lower_bound";
6578     case DW_AT_producer:
6579       return "DW_AT_producer";
6580     case DW_AT_prototyped:
6581       return "DW_AT_prototyped";
6582     case DW_AT_return_addr:
6583       return "DW_AT_return_addr";
6584     case DW_AT_start_scope:
6585       return "DW_AT_start_scope";
6586     case DW_AT_bit_stride:
6587       return "DW_AT_bit_stride";
6588     case DW_AT_upper_bound:
6589       return "DW_AT_upper_bound";
6590     case DW_AT_abstract_origin:
6591       return "DW_AT_abstract_origin";
6592     case DW_AT_accessibility:
6593       return "DW_AT_accessibility";
6594     case DW_AT_address_class:
6595       return "DW_AT_address_class";
6596     case DW_AT_artificial:
6597       return "DW_AT_artificial";
6598     case DW_AT_base_types:
6599       return "DW_AT_base_types";
6600     case DW_AT_calling_convention:
6601       return "DW_AT_calling_convention";
6602     case DW_AT_count:
6603       return "DW_AT_count";
6604     case DW_AT_data_member_location:
6605       return "DW_AT_data_member_location";
6606     case DW_AT_decl_column:
6607       return "DW_AT_decl_column";
6608     case DW_AT_decl_file:
6609       return "DW_AT_decl_file";
6610     case DW_AT_decl_line:
6611       return "DW_AT_decl_line";
6612     case DW_AT_declaration:
6613       return "DW_AT_declaration";
6614     case DW_AT_discr_list:
6615       return "DW_AT_discr_list";
6616     case DW_AT_encoding:
6617       return "DW_AT_encoding";
6618     case DW_AT_external:
6619       return "DW_AT_external";
6620     case DW_AT_explicit:
6621       return "DW_AT_explicit";
6622     case DW_AT_frame_base:
6623       return "DW_AT_frame_base";
6624     case DW_AT_friend:
6625       return "DW_AT_friend";
6626     case DW_AT_identifier_case:
6627       return "DW_AT_identifier_case";
6628     case DW_AT_macro_info:
6629       return "DW_AT_macro_info";
6630     case DW_AT_namelist_items:
6631       return "DW_AT_namelist_items";
6632     case DW_AT_priority:
6633       return "DW_AT_priority";
6634     case DW_AT_segment:
6635       return "DW_AT_segment";
6636     case DW_AT_specification:
6637       return "DW_AT_specification";
6638     case DW_AT_static_link:
6639       return "DW_AT_static_link";
6640     case DW_AT_type:
6641       return "DW_AT_type";
6642     case DW_AT_use_location:
6643       return "DW_AT_use_location";
6644     case DW_AT_variable_parameter:
6645       return "DW_AT_variable_parameter";
6646     case DW_AT_virtuality:
6647       return "DW_AT_virtuality";
6648     case DW_AT_vtable_elem_location:
6649       return "DW_AT_vtable_elem_location";
6650
6651     case DW_AT_allocated:
6652       return "DW_AT_allocated";
6653     case DW_AT_associated:
6654       return "DW_AT_associated";
6655     case DW_AT_data_location:
6656       return "DW_AT_data_location";
6657     case DW_AT_byte_stride:
6658       return "DW_AT_byte_stride";
6659     case DW_AT_entry_pc:
6660       return "DW_AT_entry_pc";
6661     case DW_AT_use_UTF8:
6662       return "DW_AT_use_UTF8";
6663     case DW_AT_extension:
6664       return "DW_AT_extension";
6665     case DW_AT_ranges:
6666       return "DW_AT_ranges";
6667     case DW_AT_trampoline:
6668       return "DW_AT_trampoline";
6669     case DW_AT_call_column:
6670       return "DW_AT_call_column";
6671     case DW_AT_call_file:
6672       return "DW_AT_call_file";
6673     case DW_AT_call_line:
6674       return "DW_AT_call_line";
6675
6676     case DW_AT_signature:
6677       return "DW_AT_signature";
6678     case DW_AT_main_subprogram:
6679       return "DW_AT_main_subprogram";
6680     case DW_AT_data_bit_offset:
6681       return "DW_AT_data_bit_offset";
6682     case DW_AT_const_expr:
6683       return "DW_AT_const_expr";
6684     case DW_AT_enum_class:
6685       return "DW_AT_enum_class";
6686     case DW_AT_linkage_name:
6687       return "DW_AT_linkage_name";
6688
6689     case DW_AT_MIPS_fde:
6690       return "DW_AT_MIPS_fde";
6691     case DW_AT_MIPS_loop_begin:
6692       return "DW_AT_MIPS_loop_begin";
6693     case DW_AT_MIPS_tail_loop_begin:
6694       return "DW_AT_MIPS_tail_loop_begin";
6695     case DW_AT_MIPS_epilog_begin:
6696       return "DW_AT_MIPS_epilog_begin";
6697     case DW_AT_MIPS_loop_unroll_factor:
6698       return "DW_AT_MIPS_loop_unroll_factor";
6699     case DW_AT_MIPS_software_pipeline_depth:
6700       return "DW_AT_MIPS_software_pipeline_depth";
6701     case DW_AT_MIPS_linkage_name:
6702       return "DW_AT_MIPS_linkage_name";
6703     case DW_AT_MIPS_stride:
6704       return "DW_AT_MIPS_stride";
6705     case DW_AT_MIPS_abstract_name:
6706       return "DW_AT_MIPS_abstract_name";
6707     case DW_AT_MIPS_clone_origin:
6708       return "DW_AT_MIPS_clone_origin";
6709     case DW_AT_MIPS_has_inlines:
6710       return "DW_AT_MIPS_has_inlines";
6711
6712     case DW_AT_sf_names:
6713       return "DW_AT_sf_names";
6714     case DW_AT_src_info:
6715       return "DW_AT_src_info";
6716     case DW_AT_mac_info:
6717       return "DW_AT_mac_info";
6718     case DW_AT_src_coords:
6719       return "DW_AT_src_coords";
6720     case DW_AT_body_begin:
6721       return "DW_AT_body_begin";
6722     case DW_AT_body_end:
6723       return "DW_AT_body_end";
6724     case DW_AT_GNU_vector:
6725       return "DW_AT_GNU_vector";
6726     case DW_AT_GNU_guarded_by:
6727       return "DW_AT_GNU_guarded_by";
6728     case DW_AT_GNU_pt_guarded_by:
6729       return "DW_AT_GNU_pt_guarded_by";
6730     case DW_AT_GNU_guarded:
6731       return "DW_AT_GNU_guarded";
6732     case DW_AT_GNU_pt_guarded:
6733       return "DW_AT_GNU_pt_guarded";
6734     case DW_AT_GNU_locks_excluded:
6735       return "DW_AT_GNU_locks_excluded";
6736     case DW_AT_GNU_exclusive_locks_required:
6737       return "DW_AT_GNU_exclusive_locks_required";
6738     case DW_AT_GNU_shared_locks_required:
6739       return "DW_AT_GNU_shared_locks_required";
6740     case DW_AT_GNU_odr_signature:
6741       return "DW_AT_GNU_odr_signature";
6742     case DW_AT_GNU_template_name:
6743       return "DW_AT_GNU_template_name";
6744
6745     case DW_AT_VMS_rtnbeg_pd_address:
6746       return "DW_AT_VMS_rtnbeg_pd_address";
6747
6748     default:
6749       return "DW_AT_<unknown>";
6750     }
6751 }
6752
6753 /* Convert a DWARF value form code into its string name.  */
6754
6755 static const char *
6756 dwarf_form_name (unsigned int form)
6757 {
6758   switch (form)
6759     {
6760     case DW_FORM_addr:
6761       return "DW_FORM_addr";
6762     case DW_FORM_block2:
6763       return "DW_FORM_block2";
6764     case DW_FORM_block4:
6765       return "DW_FORM_block4";
6766     case DW_FORM_data2:
6767       return "DW_FORM_data2";
6768     case DW_FORM_data4:
6769       return "DW_FORM_data4";
6770     case DW_FORM_data8:
6771       return "DW_FORM_data8";
6772     case DW_FORM_string:
6773       return "DW_FORM_string";
6774     case DW_FORM_block:
6775       return "DW_FORM_block";
6776     case DW_FORM_block1:
6777       return "DW_FORM_block1";
6778     case DW_FORM_data1:
6779       return "DW_FORM_data1";
6780     case DW_FORM_flag:
6781       return "DW_FORM_flag";
6782     case DW_FORM_sdata:
6783       return "DW_FORM_sdata";
6784     case DW_FORM_strp:
6785       return "DW_FORM_strp";
6786     case DW_FORM_udata:
6787       return "DW_FORM_udata";
6788     case DW_FORM_ref_addr:
6789       return "DW_FORM_ref_addr";
6790     case DW_FORM_ref1:
6791       return "DW_FORM_ref1";
6792     case DW_FORM_ref2:
6793       return "DW_FORM_ref2";
6794     case DW_FORM_ref4:
6795       return "DW_FORM_ref4";
6796     case DW_FORM_ref8:
6797       return "DW_FORM_ref8";
6798     case DW_FORM_ref_udata:
6799       return "DW_FORM_ref_udata";
6800     case DW_FORM_indirect:
6801       return "DW_FORM_indirect";
6802     case DW_FORM_sec_offset:
6803       return "DW_FORM_sec_offset";
6804     case DW_FORM_exprloc:
6805       return "DW_FORM_exprloc";
6806     case DW_FORM_flag_present:
6807       return "DW_FORM_flag_present";
6808     case DW_FORM_ref_sig8:
6809       return "DW_FORM_ref_sig8";
6810     default:
6811       return "DW_FORM_<unknown>";
6812     }
6813 }
6814 \f
6815 /* Determine the "ultimate origin" of a decl.  The decl may be an inlined
6816    instance of an inlined instance of a decl which is local to an inline
6817    function, so we have to trace all of the way back through the origin chain
6818    to find out what sort of node actually served as the original seed for the
6819    given block.  */
6820
6821 static tree
6822 decl_ultimate_origin (const_tree decl)
6823 {
6824   if (!CODE_CONTAINS_STRUCT (TREE_CODE (decl), TS_DECL_COMMON))
6825     return NULL_TREE;
6826
6827   /* output_inline_function sets DECL_ABSTRACT_ORIGIN for all the
6828      nodes in the function to point to themselves; ignore that if
6829      we're trying to output the abstract instance of this function.  */
6830   if (DECL_ABSTRACT (decl) && DECL_ABSTRACT_ORIGIN (decl) == decl)
6831     return NULL_TREE;
6832
6833   /* Since the DECL_ABSTRACT_ORIGIN for a DECL is supposed to be the
6834      most distant ancestor, this should never happen.  */
6835   gcc_assert (!DECL_FROM_INLINE (DECL_ORIGIN (decl)));
6836
6837   return DECL_ABSTRACT_ORIGIN (decl);
6838 }
6839
6840 /* Get the class to which DECL belongs, if any.  In g++, the DECL_CONTEXT
6841    of a virtual function may refer to a base class, so we check the 'this'
6842    parameter.  */
6843
6844 static tree
6845 decl_class_context (tree decl)
6846 {
6847   tree context = NULL_TREE;
6848
6849   if (TREE_CODE (decl) != FUNCTION_DECL || ! DECL_VINDEX (decl))
6850     context = DECL_CONTEXT (decl);
6851   else
6852     context = TYPE_MAIN_VARIANT
6853       (TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (TREE_TYPE (decl)))));
6854
6855   if (context && !TYPE_P (context))
6856     context = NULL_TREE;
6857
6858   return context;
6859 }
6860 \f
6861 /* Add an attribute/value pair to a DIE.  */
6862
6863 static inline void
6864 add_dwarf_attr (dw_die_ref die, dw_attr_ref attr)
6865 {
6866   /* Maybe this should be an assert?  */
6867   if (die == NULL)
6868     return;
6869
6870   if (die->die_attr == NULL)
6871     die->die_attr = VEC_alloc (dw_attr_node, gc, 1);
6872   VEC_safe_push (dw_attr_node, gc, die->die_attr, attr);
6873 }
6874
6875 static inline enum dw_val_class
6876 AT_class (dw_attr_ref a)
6877 {
6878   return a->dw_attr_val.val_class;
6879 }
6880
6881 /* Add a flag value attribute to a DIE.  */
6882
6883 static inline void
6884 add_AT_flag (dw_die_ref die, enum dwarf_attribute attr_kind, unsigned int flag)
6885 {
6886   dw_attr_node attr;
6887
6888   attr.dw_attr = attr_kind;
6889   attr.dw_attr_val.val_class = dw_val_class_flag;
6890   attr.dw_attr_val.v.val_flag = flag;
6891   add_dwarf_attr (die, &attr);
6892 }
6893
6894 static inline unsigned
6895 AT_flag (dw_attr_ref a)
6896 {
6897   gcc_assert (a && AT_class (a) == dw_val_class_flag);
6898   return a->dw_attr_val.v.val_flag;
6899 }
6900
6901 /* Add a signed integer attribute value to a DIE.  */
6902
6903 static inline void
6904 add_AT_int (dw_die_ref die, enum dwarf_attribute attr_kind, HOST_WIDE_INT int_val)
6905 {
6906   dw_attr_node attr;
6907
6908   attr.dw_attr = attr_kind;
6909   attr.dw_attr_val.val_class = dw_val_class_const;
6910   attr.dw_attr_val.v.val_int = int_val;
6911   add_dwarf_attr (die, &attr);
6912 }
6913
6914 static inline HOST_WIDE_INT
6915 AT_int (dw_attr_ref a)
6916 {
6917   gcc_assert (a && AT_class (a) == dw_val_class_const);
6918   return a->dw_attr_val.v.val_int;
6919 }
6920
6921 /* Add an unsigned integer attribute value to a DIE.  */
6922
6923 static inline void
6924 add_AT_unsigned (dw_die_ref die, enum dwarf_attribute attr_kind,
6925                  unsigned HOST_WIDE_INT unsigned_val)
6926 {
6927   dw_attr_node attr;
6928
6929   attr.dw_attr = attr_kind;
6930   attr.dw_attr_val.val_class = dw_val_class_unsigned_const;
6931   attr.dw_attr_val.v.val_unsigned = unsigned_val;
6932   add_dwarf_attr (die, &attr);
6933 }
6934
6935 static inline unsigned HOST_WIDE_INT
6936 AT_unsigned (dw_attr_ref a)
6937 {
6938   gcc_assert (a && AT_class (a) == dw_val_class_unsigned_const);
6939   return a->dw_attr_val.v.val_unsigned;
6940 }
6941
6942 /* Add an unsigned double integer attribute value to a DIE.  */
6943
6944 static inline void
6945 add_AT_double (dw_die_ref die, enum dwarf_attribute attr_kind,
6946                HOST_WIDE_INT high, unsigned HOST_WIDE_INT low)
6947 {
6948   dw_attr_node attr;
6949
6950   attr.dw_attr = attr_kind;
6951   attr.dw_attr_val.val_class = dw_val_class_const_double;
6952   attr.dw_attr_val.v.val_double.high = high;
6953   attr.dw_attr_val.v.val_double.low = low;
6954   add_dwarf_attr (die, &attr);
6955 }
6956
6957 /* Add a floating point attribute value to a DIE and return it.  */
6958
6959 static inline void
6960 add_AT_vec (dw_die_ref die, enum dwarf_attribute attr_kind,
6961             unsigned int length, unsigned int elt_size, unsigned char *array)
6962 {
6963   dw_attr_node attr;
6964
6965   attr.dw_attr = attr_kind;
6966   attr.dw_attr_val.val_class = dw_val_class_vec;
6967   attr.dw_attr_val.v.val_vec.length = length;
6968   attr.dw_attr_val.v.val_vec.elt_size = elt_size;
6969   attr.dw_attr_val.v.val_vec.array = array;
6970   add_dwarf_attr (die, &attr);
6971 }
6972
6973 /* Add an 8-byte data attribute value to a DIE.  */
6974
6975 static inline void
6976 add_AT_data8 (dw_die_ref die, enum dwarf_attribute attr_kind,
6977               unsigned char data8[8])
6978 {
6979   dw_attr_node attr;
6980
6981   attr.dw_attr = attr_kind;
6982   attr.dw_attr_val.val_class = dw_val_class_data8;
6983   memcpy (attr.dw_attr_val.v.val_data8, data8, 8);
6984   add_dwarf_attr (die, &attr);
6985 }
6986
6987 /* Hash and equality functions for debug_str_hash.  */
6988
6989 static hashval_t
6990 debug_str_do_hash (const void *x)
6991 {
6992   return htab_hash_string (((const struct indirect_string_node *)x)->str);
6993 }
6994
6995 static int
6996 debug_str_eq (const void *x1, const void *x2)
6997 {
6998   return strcmp ((((const struct indirect_string_node *)x1)->str),
6999                  (const char *)x2) == 0;
7000 }
7001
7002 /* Add STR to the indirect string hash table.  */
7003
7004 static struct indirect_string_node *
7005 find_AT_string (const char *str)
7006 {
7007   struct indirect_string_node *node;
7008   void **slot;
7009
7010   if (! debug_str_hash)
7011     debug_str_hash = htab_create_ggc (10, debug_str_do_hash,
7012                                       debug_str_eq, NULL);
7013
7014   slot = htab_find_slot_with_hash (debug_str_hash, str,
7015                                    htab_hash_string (str), INSERT);
7016   if (*slot == NULL)
7017     {
7018       node = (struct indirect_string_node *)
7019                ggc_alloc_cleared (sizeof (struct indirect_string_node));
7020       node->str = ggc_strdup (str);
7021       *slot = node;
7022     }
7023   else
7024     node = (struct indirect_string_node *) *slot;
7025
7026   node->refcount++;
7027   return node;
7028 }
7029
7030 /* Add a string attribute value to a DIE.  */
7031
7032 static inline void
7033 add_AT_string (dw_die_ref die, enum dwarf_attribute attr_kind, const char *str)
7034 {
7035   dw_attr_node attr;
7036   struct indirect_string_node *node;
7037
7038   node = find_AT_string (str);
7039
7040   attr.dw_attr = attr_kind;
7041   attr.dw_attr_val.val_class = dw_val_class_str;
7042   attr.dw_attr_val.v.val_str = node;
7043   add_dwarf_attr (die, &attr);
7044 }
7045
7046 /* Create a label for an indirect string node, ensuring it is going to
7047    be output, unless its reference count goes down to zero.  */
7048
7049 static inline void
7050 gen_label_for_indirect_string (struct indirect_string_node *node)
7051 {
7052   char label[32];
7053
7054   if (node->label)
7055     return;
7056
7057   ASM_GENERATE_INTERNAL_LABEL (label, "LASF", dw2_string_counter);
7058   ++dw2_string_counter;
7059   node->label = xstrdup (label);
7060 }
7061
7062 /* Create a SYMBOL_REF rtx whose value is the initial address of a
7063    debug string STR.  */
7064
7065 static inline rtx
7066 get_debug_string_label (const char *str)
7067 {
7068   struct indirect_string_node *node = find_AT_string (str);
7069
7070   debug_str_hash_forced = true;
7071
7072   gen_label_for_indirect_string (node);
7073
7074   return gen_rtx_SYMBOL_REF (Pmode, node->label);
7075 }
7076
7077 static inline const char *
7078 AT_string (dw_attr_ref a)
7079 {
7080   gcc_assert (a && AT_class (a) == dw_val_class_str);
7081   return a->dw_attr_val.v.val_str->str;
7082 }
7083
7084 /* Find out whether a string should be output inline in DIE
7085    or out-of-line in .debug_str section.  */
7086
7087 static enum dwarf_form
7088 AT_string_form (dw_attr_ref a)
7089 {
7090   struct indirect_string_node *node;
7091   unsigned int len;
7092
7093   gcc_assert (a && AT_class (a) == dw_val_class_str);
7094
7095   node = a->dw_attr_val.v.val_str;
7096   if (node->form)
7097     return node->form;
7098
7099   len = strlen (node->str) + 1;
7100
7101   /* If the string is shorter or equal to the size of the reference, it is
7102      always better to put it inline.  */
7103   if (len <= DWARF_OFFSET_SIZE || node->refcount == 0)
7104     return node->form = DW_FORM_string;
7105
7106   /* If we cannot expect the linker to merge strings in .debug_str
7107      section, only put it into .debug_str if it is worth even in this
7108      single module.  */
7109   if (DWARF2_INDIRECT_STRING_SUPPORT_MISSING_ON_TARGET
7110       || ((debug_str_section->common.flags & SECTION_MERGE) == 0
7111       && (len - DWARF_OFFSET_SIZE) * node->refcount <= len))
7112     return node->form = DW_FORM_string;
7113
7114   gen_label_for_indirect_string (node);
7115
7116   return node->form = DW_FORM_strp;
7117 }
7118
7119 /* Add a DIE reference attribute value to a DIE.  */
7120
7121 static inline void
7122 add_AT_die_ref (dw_die_ref die, enum dwarf_attribute attr_kind, dw_die_ref targ_die)
7123 {
7124   dw_attr_node attr;
7125
7126   attr.dw_attr = attr_kind;
7127   attr.dw_attr_val.val_class = dw_val_class_die_ref;
7128   attr.dw_attr_val.v.val_die_ref.die = targ_die;
7129   attr.dw_attr_val.v.val_die_ref.external = 0;
7130   add_dwarf_attr (die, &attr);
7131 }
7132
7133 /* Add an AT_specification attribute to a DIE, and also make the back
7134    pointer from the specification to the definition.  */
7135
7136 static inline void
7137 add_AT_specification (dw_die_ref die, dw_die_ref targ_die)
7138 {
7139   add_AT_die_ref (die, DW_AT_specification, targ_die);
7140   gcc_assert (!targ_die->die_definition);
7141   targ_die->die_definition = die;
7142 }
7143
7144 static inline dw_die_ref
7145 AT_ref (dw_attr_ref a)
7146 {
7147   gcc_assert (a && AT_class (a) == dw_val_class_die_ref);
7148   return a->dw_attr_val.v.val_die_ref.die;
7149 }
7150
7151 static inline int
7152 AT_ref_external (dw_attr_ref a)
7153 {
7154   if (a && AT_class (a) == dw_val_class_die_ref)
7155     return a->dw_attr_val.v.val_die_ref.external;
7156
7157   return 0;
7158 }
7159
7160 static inline void
7161 set_AT_ref_external (dw_attr_ref a, int i)
7162 {
7163   gcc_assert (a && AT_class (a) == dw_val_class_die_ref);
7164   a->dw_attr_val.v.val_die_ref.external = i;
7165 }
7166
7167 /* Add an FDE reference attribute value to a DIE.  */
7168
7169 static inline void
7170 add_AT_fde_ref (dw_die_ref die, enum dwarf_attribute attr_kind, unsigned int targ_fde)
7171 {
7172   dw_attr_node attr;
7173
7174   attr.dw_attr = attr_kind;
7175   attr.dw_attr_val.val_class = dw_val_class_fde_ref;
7176   attr.dw_attr_val.v.val_fde_index = targ_fde;
7177   add_dwarf_attr (die, &attr);
7178 }
7179
7180 /* Add a location description attribute value to a DIE.  */
7181
7182 static inline void
7183 add_AT_loc (dw_die_ref die, enum dwarf_attribute attr_kind, dw_loc_descr_ref loc)
7184 {
7185   dw_attr_node attr;
7186
7187   attr.dw_attr = attr_kind;
7188   attr.dw_attr_val.val_class = dw_val_class_loc;
7189   attr.dw_attr_val.v.val_loc = loc;
7190   add_dwarf_attr (die, &attr);
7191 }
7192
7193 static inline dw_loc_descr_ref
7194 AT_loc (dw_attr_ref a)
7195 {
7196   gcc_assert (a && AT_class (a) == dw_val_class_loc);
7197   return a->dw_attr_val.v.val_loc;
7198 }
7199
7200 static inline void
7201 add_AT_loc_list (dw_die_ref die, enum dwarf_attribute attr_kind, dw_loc_list_ref loc_list)
7202 {
7203   dw_attr_node attr;
7204
7205   attr.dw_attr = attr_kind;
7206   attr.dw_attr_val.val_class = dw_val_class_loc_list;
7207   attr.dw_attr_val.v.val_loc_list = loc_list;
7208   add_dwarf_attr (die, &attr);
7209   have_location_lists = true;
7210 }
7211
7212 static inline dw_loc_list_ref
7213 AT_loc_list (dw_attr_ref a)
7214 {
7215   gcc_assert (a && AT_class (a) == dw_val_class_loc_list);
7216   return a->dw_attr_val.v.val_loc_list;
7217 }
7218
7219 static inline dw_loc_list_ref *
7220 AT_loc_list_ptr (dw_attr_ref a)
7221 {
7222   gcc_assert (a && AT_class (a) == dw_val_class_loc_list);
7223   return &a->dw_attr_val.v.val_loc_list;
7224 }
7225
7226 /* Add an address constant attribute value to a DIE.  */
7227
7228 static inline void
7229 add_AT_addr (dw_die_ref die, enum dwarf_attribute attr_kind, rtx addr)
7230 {
7231   dw_attr_node attr;
7232
7233   attr.dw_attr = attr_kind;
7234   attr.dw_attr_val.val_class = dw_val_class_addr;
7235   attr.dw_attr_val.v.val_addr = addr;
7236   add_dwarf_attr (die, &attr);
7237 }
7238
7239 /* Get the RTX from to an address DIE attribute.  */
7240
7241 static inline rtx
7242 AT_addr (dw_attr_ref a)
7243 {
7244   gcc_assert (a && AT_class (a) == dw_val_class_addr);
7245   return a->dw_attr_val.v.val_addr;
7246 }
7247
7248 /* Add a file attribute value to a DIE.  */
7249
7250 static inline void
7251 add_AT_file (dw_die_ref die, enum dwarf_attribute attr_kind,
7252              struct dwarf_file_data *fd)
7253 {
7254   dw_attr_node attr;
7255
7256   attr.dw_attr = attr_kind;
7257   attr.dw_attr_val.val_class = dw_val_class_file;
7258   attr.dw_attr_val.v.val_file = fd;
7259   add_dwarf_attr (die, &attr);
7260 }
7261
7262 /* Get the dwarf_file_data from a file DIE attribute.  */
7263
7264 static inline struct dwarf_file_data *
7265 AT_file (dw_attr_ref a)
7266 {
7267   gcc_assert (a && AT_class (a) == dw_val_class_file);
7268   return a->dw_attr_val.v.val_file;
7269 }
7270
7271 /* Add a label identifier attribute value to a DIE.  */
7272
7273 static inline void
7274 add_AT_lbl_id (dw_die_ref die, enum dwarf_attribute attr_kind, const char *lbl_id)
7275 {
7276   dw_attr_node attr;
7277
7278   attr.dw_attr = attr_kind;
7279   attr.dw_attr_val.val_class = dw_val_class_lbl_id;
7280   attr.dw_attr_val.v.val_lbl_id = xstrdup (lbl_id);
7281   add_dwarf_attr (die, &attr);
7282 }
7283
7284 /* Add a section offset attribute value to a DIE, an offset into the
7285    debug_line section.  */
7286
7287 static inline void
7288 add_AT_lineptr (dw_die_ref die, enum dwarf_attribute attr_kind,
7289                 const char *label)
7290 {
7291   dw_attr_node attr;
7292
7293   attr.dw_attr = attr_kind;
7294   attr.dw_attr_val.val_class = dw_val_class_lineptr;
7295   attr.dw_attr_val.v.val_lbl_id = xstrdup (label);
7296   add_dwarf_attr (die, &attr);
7297 }
7298
7299 /* Add a section offset attribute value to a DIE, an offset into the
7300    debug_macinfo section.  */
7301
7302 static inline void
7303 add_AT_macptr (dw_die_ref die, enum dwarf_attribute attr_kind,
7304                const char *label)
7305 {
7306   dw_attr_node attr;
7307
7308   attr.dw_attr = attr_kind;
7309   attr.dw_attr_val.val_class = dw_val_class_macptr;
7310   attr.dw_attr_val.v.val_lbl_id = xstrdup (label);
7311   add_dwarf_attr (die, &attr);
7312 }
7313
7314 /* Add an offset attribute value to a DIE.  */
7315
7316 static inline void
7317 add_AT_offset (dw_die_ref die, enum dwarf_attribute attr_kind,
7318                unsigned HOST_WIDE_INT offset)
7319 {
7320   dw_attr_node attr;
7321
7322   attr.dw_attr = attr_kind;
7323   attr.dw_attr_val.val_class = dw_val_class_offset;
7324   attr.dw_attr_val.v.val_offset = offset;
7325   add_dwarf_attr (die, &attr);
7326 }
7327
7328 /* Add an range_list attribute value to a DIE.  */
7329
7330 static void
7331 add_AT_range_list (dw_die_ref die, enum dwarf_attribute attr_kind,
7332                    long unsigned int offset)
7333 {
7334   dw_attr_node attr;
7335
7336   attr.dw_attr = attr_kind;
7337   attr.dw_attr_val.val_class = dw_val_class_range_list;
7338   attr.dw_attr_val.v.val_offset = offset;
7339   add_dwarf_attr (die, &attr);
7340 }
7341
7342 static inline const char *
7343 AT_lbl (dw_attr_ref a)
7344 {
7345   gcc_assert (a && (AT_class (a) == dw_val_class_lbl_id
7346                     || AT_class (a) == dw_val_class_lineptr
7347                     || AT_class (a) == dw_val_class_macptr));
7348   return a->dw_attr_val.v.val_lbl_id;
7349 }
7350
7351 /* Get the attribute of type attr_kind.  */
7352
7353 static dw_attr_ref
7354 get_AT (dw_die_ref die, enum dwarf_attribute attr_kind)
7355 {
7356   dw_attr_ref a;
7357   unsigned ix;
7358   dw_die_ref spec = NULL;
7359
7360   if (! die)
7361     return NULL;
7362
7363   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
7364     if (a->dw_attr == attr_kind)
7365       return a;
7366     else if (a->dw_attr == DW_AT_specification
7367              || a->dw_attr == DW_AT_abstract_origin)
7368       spec = AT_ref (a);
7369
7370   if (spec)
7371     return get_AT (spec, attr_kind);
7372
7373   return NULL;
7374 }
7375
7376 /* Return the "low pc" attribute value, typically associated with a subprogram
7377    DIE.  Return null if the "low pc" attribute is either not present, or if it
7378    cannot be represented as an assembler label identifier.  */
7379
7380 static inline const char *
7381 get_AT_low_pc (dw_die_ref die)
7382 {
7383   dw_attr_ref a = get_AT (die, DW_AT_low_pc);
7384
7385   return a ? AT_lbl (a) : NULL;
7386 }
7387
7388 /* Return the "high pc" attribute value, typically associated with a subprogram
7389    DIE.  Return null if the "high pc" attribute is either not present, or if it
7390    cannot be represented as an assembler label identifier.  */
7391
7392 static inline const char *
7393 get_AT_hi_pc (dw_die_ref die)
7394 {
7395   dw_attr_ref a = get_AT (die, DW_AT_high_pc);
7396
7397   return a ? AT_lbl (a) : NULL;
7398 }
7399
7400 /* Return the value of the string attribute designated by ATTR_KIND, or
7401    NULL if it is not present.  */
7402
7403 static inline const char *
7404 get_AT_string (dw_die_ref die, enum dwarf_attribute attr_kind)
7405 {
7406   dw_attr_ref a = get_AT (die, attr_kind);
7407
7408   return a ? AT_string (a) : NULL;
7409 }
7410
7411 /* Return the value of the flag attribute designated by ATTR_KIND, or -1
7412    if it is not present.  */
7413
7414 static inline int
7415 get_AT_flag (dw_die_ref die, enum dwarf_attribute attr_kind)
7416 {
7417   dw_attr_ref a = get_AT (die, attr_kind);
7418
7419   return a ? AT_flag (a) : 0;
7420 }
7421
7422 /* Return the value of the unsigned attribute designated by ATTR_KIND, or 0
7423    if it is not present.  */
7424
7425 static inline unsigned
7426 get_AT_unsigned (dw_die_ref die, enum dwarf_attribute attr_kind)
7427 {
7428   dw_attr_ref a = get_AT (die, attr_kind);
7429
7430   return a ? AT_unsigned (a) : 0;
7431 }
7432
7433 static inline dw_die_ref
7434 get_AT_ref (dw_die_ref die, enum dwarf_attribute attr_kind)
7435 {
7436   dw_attr_ref a = get_AT (die, attr_kind);
7437
7438   return a ? AT_ref (a) : NULL;
7439 }
7440
7441 static inline struct dwarf_file_data *
7442 get_AT_file (dw_die_ref die, enum dwarf_attribute attr_kind)
7443 {
7444   dw_attr_ref a = get_AT (die, attr_kind);
7445
7446   return a ? AT_file (a) : NULL;
7447 }
7448
7449 /* Return TRUE if the language is C++.  */
7450
7451 static inline bool
7452 is_cxx (void)
7453 {
7454   unsigned int lang = get_AT_unsigned (comp_unit_die, DW_AT_language);
7455
7456   return lang == DW_LANG_C_plus_plus || lang == DW_LANG_ObjC_plus_plus;
7457 }
7458
7459 /* Return TRUE if the language is Fortran.  */
7460
7461 static inline bool
7462 is_fortran (void)
7463 {
7464   unsigned int lang = get_AT_unsigned (comp_unit_die, DW_AT_language);
7465
7466   return (lang == DW_LANG_Fortran77
7467           || lang == DW_LANG_Fortran90
7468           || lang == DW_LANG_Fortran95);
7469 }
7470
7471 /* Return TRUE if the language is Ada.  */
7472
7473 static inline bool
7474 is_ada (void)
7475 {
7476   unsigned int lang = get_AT_unsigned (comp_unit_die, DW_AT_language);
7477
7478   return lang == DW_LANG_Ada95 || lang == DW_LANG_Ada83;
7479 }
7480
7481 /* Remove the specified attribute if present.  */
7482
7483 static void
7484 remove_AT (dw_die_ref die, enum dwarf_attribute attr_kind)
7485 {
7486   dw_attr_ref a;
7487   unsigned ix;
7488
7489   if (! die)
7490     return;
7491
7492   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
7493     if (a->dw_attr == attr_kind)
7494       {
7495         if (AT_class (a) == dw_val_class_str)
7496           if (a->dw_attr_val.v.val_str->refcount)
7497             a->dw_attr_val.v.val_str->refcount--;
7498
7499         /* VEC_ordered_remove should help reduce the number of abbrevs
7500            that are needed.  */
7501         VEC_ordered_remove (dw_attr_node, die->die_attr, ix);
7502         return;
7503       }
7504 }
7505
7506 /* Remove CHILD from its parent.  PREV must have the property that
7507    PREV->DIE_SIB == CHILD.  Does not alter CHILD.  */
7508
7509 static void
7510 remove_child_with_prev (dw_die_ref child, dw_die_ref prev)
7511 {
7512   gcc_assert (child->die_parent == prev->die_parent);
7513   gcc_assert (prev->die_sib == child);
7514   if (prev == child)
7515     {
7516       gcc_assert (child->die_parent->die_child == child);
7517       prev = NULL;
7518     }
7519   else
7520     prev->die_sib = child->die_sib;
7521   if (child->die_parent->die_child == child)
7522     child->die_parent->die_child = prev;
7523 }
7524
7525 /* Replace OLD_CHILD with NEW_CHILD.  PREV must have the property that
7526    PREV->DIE_SIB == OLD_CHILD.  Does not alter OLD_CHILD.  */
7527
7528 static void
7529 replace_child (dw_die_ref old_child, dw_die_ref new_child, dw_die_ref prev)
7530 {
7531   dw_die_ref parent = old_child->die_parent;
7532
7533   gcc_assert (parent == prev->die_parent);
7534   gcc_assert (prev->die_sib == old_child);
7535
7536   new_child->die_parent = parent;
7537   if (prev == old_child)
7538     {
7539       gcc_assert (parent->die_child == old_child);
7540       new_child->die_sib = new_child;
7541     }
7542   else
7543     {
7544       prev->die_sib = new_child;
7545       new_child->die_sib = old_child->die_sib;
7546     }
7547   if (old_child->die_parent->die_child == old_child)
7548     old_child->die_parent->die_child = new_child;
7549 }
7550
7551 /* Move all children from OLD_PARENT to NEW_PARENT.  */
7552
7553 static void
7554 move_all_children (dw_die_ref old_parent, dw_die_ref new_parent)
7555 {
7556   dw_die_ref c;
7557   new_parent->die_child = old_parent->die_child;
7558   old_parent->die_child = NULL;
7559   FOR_EACH_CHILD (new_parent, c, c->die_parent = new_parent);
7560 }
7561
7562 /* Remove child DIE whose die_tag is TAG.  Do nothing if no child
7563    matches TAG.  */
7564
7565 static void
7566 remove_child_TAG (dw_die_ref die, enum dwarf_tag tag)
7567 {
7568   dw_die_ref c;
7569
7570   c = die->die_child;
7571   if (c) do {
7572     dw_die_ref prev = c;
7573     c = c->die_sib;
7574     while (c->die_tag == tag)
7575       {
7576         remove_child_with_prev (c, prev);
7577         /* Might have removed every child.  */
7578         if (c == c->die_sib)
7579           return;
7580         c = c->die_sib;
7581       }
7582   } while (c != die->die_child);
7583 }
7584
7585 /* Add a CHILD_DIE as the last child of DIE.  */
7586
7587 static void
7588 add_child_die (dw_die_ref die, dw_die_ref child_die)
7589 {
7590   /* FIXME this should probably be an assert.  */
7591   if (! die || ! child_die)
7592     return;
7593   gcc_assert (die != child_die);
7594
7595   child_die->die_parent = die;
7596   if (die->die_child)
7597     {
7598       child_die->die_sib = die->die_child->die_sib;
7599       die->die_child->die_sib = child_die;
7600     }
7601   else
7602     child_die->die_sib = child_die;
7603   die->die_child = child_die;
7604 }
7605
7606 /* Move CHILD, which must be a child of PARENT or the DIE for which PARENT
7607    is the specification, to the end of PARENT's list of children.
7608    This is done by removing and re-adding it.  */
7609
7610 static void
7611 splice_child_die (dw_die_ref parent, dw_die_ref child)
7612 {
7613   dw_die_ref p;
7614
7615   /* We want the declaration DIE from inside the class, not the
7616      specification DIE at toplevel.  */
7617   if (child->die_parent != parent)
7618     {
7619       dw_die_ref tmp = get_AT_ref (child, DW_AT_specification);
7620
7621       if (tmp)
7622         child = tmp;
7623     }
7624
7625   gcc_assert (child->die_parent == parent
7626               || (child->die_parent
7627                   == get_AT_ref (parent, DW_AT_specification)));
7628
7629   for (p = child->die_parent->die_child; ; p = p->die_sib)
7630     if (p->die_sib == child)
7631       {
7632         remove_child_with_prev (child, p);
7633         break;
7634       }
7635
7636   add_child_die (parent, child);
7637 }
7638
7639 /* Return a pointer to a newly created DIE node.  */
7640
7641 static inline dw_die_ref
7642 new_die (enum dwarf_tag tag_value, dw_die_ref parent_die, tree t)
7643 {
7644   dw_die_ref die = GGC_CNEW (die_node);
7645
7646   die->die_tag = tag_value;
7647
7648   if (parent_die != NULL)
7649     add_child_die (parent_die, die);
7650   else
7651     {
7652       limbo_die_node *limbo_node;
7653
7654       limbo_node = GGC_CNEW (limbo_die_node);
7655       limbo_node->die = die;
7656       limbo_node->created_for = t;
7657       limbo_node->next = limbo_die_list;
7658       limbo_die_list = limbo_node;
7659     }
7660
7661   return die;
7662 }
7663
7664 /* Return the DIE associated with the given type specifier.  */
7665
7666 static inline dw_die_ref
7667 lookup_type_die (tree type)
7668 {
7669   return TYPE_SYMTAB_DIE (type);
7670 }
7671
7672 /* Equate a DIE to a given type specifier.  */
7673
7674 static inline void
7675 equate_type_number_to_die (tree type, dw_die_ref type_die)
7676 {
7677   TYPE_SYMTAB_DIE (type) = type_die;
7678 }
7679
7680 /* Returns a hash value for X (which really is a die_struct).  */
7681
7682 static hashval_t
7683 decl_die_table_hash (const void *x)
7684 {
7685   return (hashval_t) ((const_dw_die_ref) x)->decl_id;
7686 }
7687
7688 /* Return nonzero if decl_id of die_struct X is the same as UID of decl *Y.  */
7689
7690 static int
7691 decl_die_table_eq (const void *x, const void *y)
7692 {
7693   return (((const_dw_die_ref) x)->decl_id == DECL_UID ((const_tree) y));
7694 }
7695
7696 /* Return the DIE associated with a given declaration.  */
7697
7698 static inline dw_die_ref
7699 lookup_decl_die (tree decl)
7700 {
7701   return (dw_die_ref) htab_find_with_hash (decl_die_table, decl, DECL_UID (decl));
7702 }
7703
7704 /* Returns a hash value for X (which really is a var_loc_list).  */
7705
7706 static hashval_t
7707 decl_loc_table_hash (const void *x)
7708 {
7709   return (hashval_t) ((const var_loc_list *) x)->decl_id;
7710 }
7711
7712 /* Return nonzero if decl_id of var_loc_list X is the same as
7713    UID of decl *Y.  */
7714
7715 static int
7716 decl_loc_table_eq (const void *x, const void *y)
7717 {
7718   return (((const var_loc_list *) x)->decl_id == DECL_UID ((const_tree) y));
7719 }
7720
7721 /* Return the var_loc list associated with a given declaration.  */
7722
7723 static inline var_loc_list *
7724 lookup_decl_loc (const_tree decl)
7725 {
7726   if (!decl_loc_table)
7727     return NULL;
7728   return (var_loc_list *)
7729     htab_find_with_hash (decl_loc_table, decl, DECL_UID (decl));
7730 }
7731
7732 /* Equate a DIE to a particular declaration.  */
7733
7734 static void
7735 equate_decl_number_to_die (tree decl, dw_die_ref decl_die)
7736 {
7737   unsigned int decl_id = DECL_UID (decl);
7738   void **slot;
7739
7740   slot = htab_find_slot_with_hash (decl_die_table, decl, decl_id, INSERT);
7741   *slot = decl_die;
7742   decl_die->decl_id = decl_id;
7743 }
7744
7745 /* Add a variable location node to the linked list for DECL.  */
7746
7747 static struct var_loc_node *
7748 add_var_loc_to_decl (tree decl, rtx loc_note)
7749 {
7750   unsigned int decl_id = DECL_UID (decl);
7751   var_loc_list *temp;
7752   void **slot;
7753   struct var_loc_node *loc = NULL;
7754
7755   slot = htab_find_slot_with_hash (decl_loc_table, decl, decl_id, INSERT);
7756   if (*slot == NULL)
7757     {
7758       temp = GGC_CNEW (var_loc_list);
7759       temp->decl_id = decl_id;
7760       *slot = temp;
7761     }
7762   else
7763     temp = (var_loc_list *) *slot;
7764
7765   if (temp->last)
7766     {
7767       /* If the current location is the same as the end of the list,
7768          and either both or neither of the locations is uninitialized,
7769          we have nothing to do.  */
7770       if ((!rtx_equal_p (NOTE_VAR_LOCATION_LOC (temp->last->var_loc_note),
7771                          NOTE_VAR_LOCATION_LOC (loc_note)))
7772           || ((NOTE_VAR_LOCATION_STATUS (temp->last->var_loc_note)
7773                != NOTE_VAR_LOCATION_STATUS (loc_note))
7774               && ((NOTE_VAR_LOCATION_STATUS (temp->last->var_loc_note)
7775                    == VAR_INIT_STATUS_UNINITIALIZED)
7776                   || (NOTE_VAR_LOCATION_STATUS (loc_note)
7777                       == VAR_INIT_STATUS_UNINITIALIZED))))
7778         {
7779           /* Add LOC to the end of list and update LAST.  */
7780           loc = GGC_CNEW (struct var_loc_node);
7781           temp->last->next = loc;
7782           temp->last = loc;
7783         }
7784     }
7785   else
7786     {
7787       loc = GGC_CNEW (struct var_loc_node);
7788       temp->first = loc;
7789       temp->last = loc;
7790     }
7791   return loc;
7792 }
7793 \f
7794 /* Keep track of the number of spaces used to indent the
7795    output of the debugging routines that print the structure of
7796    the DIE internal representation.  */
7797 static int print_indent;
7798
7799 /* Indent the line the number of spaces given by print_indent.  */
7800
7801 static inline void
7802 print_spaces (FILE *outfile)
7803 {
7804   fprintf (outfile, "%*s", print_indent, "");
7805 }
7806
7807 /* Print a type signature in hex.  */
7808
7809 static inline void
7810 print_signature (FILE *outfile, char *sig)
7811 {
7812   int i;
7813
7814   for (i = 0; i < DWARF_TYPE_SIGNATURE_SIZE; i++)
7815     fprintf (outfile, "%02x", sig[i] & 0xff);
7816 }
7817
7818 /* Print the information associated with a given DIE, and its children.
7819    This routine is a debugging aid only.  */
7820
7821 static void
7822 print_die (dw_die_ref die, FILE *outfile)
7823 {
7824   dw_attr_ref a;
7825   dw_die_ref c;
7826   unsigned ix;
7827
7828   print_spaces (outfile);
7829   fprintf (outfile, "DIE %4ld: %s\n",
7830            die->die_offset, dwarf_tag_name (die->die_tag));
7831   print_spaces (outfile);
7832   fprintf (outfile, "  abbrev id: %lu", die->die_abbrev);
7833   fprintf (outfile, " offset: %ld\n", die->die_offset);
7834   if (dwarf_version >= 4 && die->die_id.die_type_node)
7835     {
7836       print_spaces (outfile);
7837       fprintf (outfile, "  signature: ");
7838       print_signature (outfile, die->die_id.die_type_node->signature);
7839       fprintf (outfile, "\n");
7840     }
7841
7842   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
7843     {
7844       print_spaces (outfile);
7845       fprintf (outfile, "  %s: ", dwarf_attr_name (a->dw_attr));
7846
7847       switch (AT_class (a))
7848         {
7849         case dw_val_class_addr:
7850           fprintf (outfile, "address");
7851           break;
7852         case dw_val_class_offset:
7853           fprintf (outfile, "offset");
7854           break;
7855         case dw_val_class_loc:
7856           fprintf (outfile, "location descriptor");
7857           break;
7858         case dw_val_class_loc_list:
7859           fprintf (outfile, "location list -> label:%s",
7860                    AT_loc_list (a)->ll_symbol);
7861           break;
7862         case dw_val_class_range_list:
7863           fprintf (outfile, "range list");
7864           break;
7865         case dw_val_class_const:
7866           fprintf (outfile, HOST_WIDE_INT_PRINT_DEC, AT_int (a));
7867           break;
7868         case dw_val_class_unsigned_const:
7869           fprintf (outfile, HOST_WIDE_INT_PRINT_UNSIGNED, AT_unsigned (a));
7870           break;
7871         case dw_val_class_const_double:
7872           fprintf (outfile, "constant ("HOST_WIDE_INT_PRINT_DEC","\
7873                             HOST_WIDE_INT_PRINT_UNSIGNED")",
7874                    a->dw_attr_val.v.val_double.high,
7875                    a->dw_attr_val.v.val_double.low);
7876           break;
7877         case dw_val_class_vec:
7878           fprintf (outfile, "floating-point or vector constant");
7879           break;
7880         case dw_val_class_flag:
7881           fprintf (outfile, "%u", AT_flag (a));
7882           break;
7883         case dw_val_class_die_ref:
7884           if (AT_ref (a) != NULL)
7885             {
7886               if (dwarf_version >= 4 && AT_ref (a)->die_id.die_type_node)
7887                 {
7888                   fprintf (outfile, "die -> signature: ");
7889                   print_signature (outfile,
7890                                    AT_ref (a)->die_id.die_type_node->signature);
7891                 }
7892               else if (dwarf_version < 4 && AT_ref (a)->die_id.die_symbol)
7893                 fprintf (outfile, "die -> label: %s",
7894                          AT_ref (a)->die_id.die_symbol);
7895               else
7896                 fprintf (outfile, "die -> %ld", AT_ref (a)->die_offset);
7897             }
7898           else
7899             fprintf (outfile, "die -> <null>");
7900           break;
7901         case dw_val_class_lbl_id:
7902         case dw_val_class_lineptr:
7903         case dw_val_class_macptr:
7904           fprintf (outfile, "label: %s", AT_lbl (a));
7905           break;
7906         case dw_val_class_str:
7907           if (AT_string (a) != NULL)
7908             fprintf (outfile, "\"%s\"", AT_string (a));
7909           else
7910             fprintf (outfile, "<null>");
7911           break;
7912         case dw_val_class_file:
7913           fprintf (outfile, "\"%s\" (%d)", AT_file (a)->filename,
7914                    AT_file (a)->emitted_number);
7915           break;
7916         case dw_val_class_data8:
7917           {
7918             int i;
7919
7920             for (i = 0; i < 8; i++)
7921               fprintf (outfile, "%02x", a->dw_attr_val.v.val_data8[i]);
7922             break;
7923           }
7924         default:
7925           break;
7926         }
7927
7928       fprintf (outfile, "\n");
7929     }
7930
7931   if (die->die_child != NULL)
7932     {
7933       print_indent += 4;
7934       FOR_EACH_CHILD (die, c, print_die (c, outfile));
7935       print_indent -= 4;
7936     }
7937   if (print_indent == 0)
7938     fprintf (outfile, "\n");
7939 }
7940
7941 /* Print the contents of the source code line number correspondence table.
7942    This routine is a debugging aid only.  */
7943
7944 static void
7945 print_dwarf_line_table (FILE *outfile)
7946 {
7947   unsigned i;
7948   dw_line_info_ref line_info;
7949
7950   fprintf (outfile, "\n\nDWARF source line information\n");
7951   for (i = 1; i < line_info_table_in_use; i++)
7952     {
7953       line_info = &line_info_table[i];
7954       fprintf (outfile, "%5d: %4ld %6ld\n", i,
7955                line_info->dw_file_num,
7956                line_info->dw_line_num);
7957     }
7958
7959   fprintf (outfile, "\n\n");
7960 }
7961
7962 /* Print the information collected for a given DIE.  */
7963
7964 void
7965 debug_dwarf_die (dw_die_ref die)
7966 {
7967   print_die (die, stderr);
7968 }
7969
7970 /* Print all DWARF information collected for the compilation unit.
7971    This routine is a debugging aid only.  */
7972
7973 void
7974 debug_dwarf (void)
7975 {
7976   print_indent = 0;
7977   print_die (comp_unit_die, stderr);
7978   if (! DWARF2_ASM_LINE_DEBUG_INFO)
7979     print_dwarf_line_table (stderr);
7980 }
7981 \f
7982 /* Start a new compilation unit DIE for an include file.  OLD_UNIT is the CU
7983    for the enclosing include file, if any.  BINCL_DIE is the DW_TAG_GNU_BINCL
7984    DIE that marks the start of the DIEs for this include file.  */
7985
7986 static dw_die_ref
7987 push_new_compile_unit (dw_die_ref old_unit, dw_die_ref bincl_die)
7988 {
7989   const char *filename = get_AT_string (bincl_die, DW_AT_name);
7990   dw_die_ref new_unit = gen_compile_unit_die (filename);
7991
7992   new_unit->die_sib = old_unit;
7993   return new_unit;
7994 }
7995
7996 /* Close an include-file CU and reopen the enclosing one.  */
7997
7998 static dw_die_ref
7999 pop_compile_unit (dw_die_ref old_unit)
8000 {
8001   dw_die_ref new_unit = old_unit->die_sib;
8002
8003   old_unit->die_sib = NULL;
8004   return new_unit;
8005 }
8006
8007 #define CHECKSUM(FOO) md5_process_bytes (&(FOO), sizeof (FOO), ctx)
8008 #define CHECKSUM_STRING(FOO) md5_process_bytes ((FOO), strlen (FOO), ctx)
8009
8010 /* Calculate the checksum of a location expression.  */
8011
8012 static inline void
8013 loc_checksum (dw_loc_descr_ref loc, struct md5_ctx *ctx)
8014 {
8015   int tem;
8016
8017   tem = (loc->dtprel << 8) | ((unsigned int) loc->dw_loc_opc);
8018   CHECKSUM (tem);
8019   CHECKSUM (loc->dw_loc_oprnd1);
8020   CHECKSUM (loc->dw_loc_oprnd2);
8021 }
8022
8023 /* Calculate the checksum of an attribute.  */
8024
8025 static void
8026 attr_checksum (dw_attr_ref at, struct md5_ctx *ctx, int *mark)
8027 {
8028   dw_loc_descr_ref loc;
8029   rtx r;
8030
8031   CHECKSUM (at->dw_attr);
8032
8033   /* We don't care that this was compiled with a different compiler
8034      snapshot; if the output is the same, that's what matters.  */
8035   if (at->dw_attr == DW_AT_producer)
8036     return;
8037
8038   switch (AT_class (at))
8039     {
8040     case dw_val_class_const:
8041       CHECKSUM (at->dw_attr_val.v.val_int);
8042       break;
8043     case dw_val_class_unsigned_const:
8044       CHECKSUM (at->dw_attr_val.v.val_unsigned);
8045       break;
8046     case dw_val_class_const_double:
8047       CHECKSUM (at->dw_attr_val.v.val_double);
8048       break;
8049     case dw_val_class_vec:
8050       CHECKSUM (at->dw_attr_val.v.val_vec);
8051       break;
8052     case dw_val_class_flag:
8053       CHECKSUM (at->dw_attr_val.v.val_flag);
8054       break;
8055     case dw_val_class_str:
8056       CHECKSUM_STRING (AT_string (at));
8057       break;
8058
8059     case dw_val_class_addr:
8060       r = AT_addr (at);
8061       gcc_assert (GET_CODE (r) == SYMBOL_REF);
8062       CHECKSUM_STRING (XSTR (r, 0));
8063       break;
8064
8065     case dw_val_class_offset:
8066       CHECKSUM (at->dw_attr_val.v.val_offset);
8067       break;
8068
8069     case dw_val_class_loc:
8070       for (loc = AT_loc (at); loc; loc = loc->dw_loc_next)
8071         loc_checksum (loc, ctx);
8072       break;
8073
8074     case dw_val_class_die_ref:
8075       die_checksum (AT_ref (at), ctx, mark);
8076       break;
8077
8078     case dw_val_class_fde_ref:
8079     case dw_val_class_lbl_id:
8080     case dw_val_class_lineptr:
8081     case dw_val_class_macptr:
8082       break;
8083
8084     case dw_val_class_file:
8085       CHECKSUM_STRING (AT_file (at)->filename);
8086       break;
8087
8088     case dw_val_class_data8:
8089       CHECKSUM (at->dw_attr_val.v.val_data8);
8090       break;
8091
8092     default:
8093       break;
8094     }
8095 }
8096
8097 /* Calculate the checksum of a DIE.  */
8098
8099 static void
8100 die_checksum (dw_die_ref die, struct md5_ctx *ctx, int *mark)
8101 {
8102   dw_die_ref c;
8103   dw_attr_ref a;
8104   unsigned ix;
8105
8106   /* To avoid infinite recursion.  */
8107   if (die->die_mark)
8108     {
8109       CHECKSUM (die->die_mark);
8110       return;
8111     }
8112   die->die_mark = ++(*mark);
8113
8114   CHECKSUM (die->die_tag);
8115
8116   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
8117     attr_checksum (a, ctx, mark);
8118
8119   FOR_EACH_CHILD (die, c, die_checksum (c, ctx, mark));
8120 }
8121
8122 #undef CHECKSUM
8123 #undef CHECKSUM_STRING
8124
8125 /* For DWARF-4 types, include the trailing NULL when checksumming strings.  */
8126 #define CHECKSUM(FOO) md5_process_bytes (&(FOO), sizeof (FOO), ctx)
8127 #define CHECKSUM_STRING(FOO) md5_process_bytes ((FOO), strlen (FOO) + 1, ctx)
8128 #define CHECKSUM_SLEB128(FOO) checksum_sleb128 ((FOO), ctx)
8129 #define CHECKSUM_ULEB128(FOO) checksum_uleb128 ((FOO), ctx)
8130 #define CHECKSUM_ATTR(FOO) \
8131   if (FOO) attr_checksum_ordered (die->die_tag, (FOO), ctx, mark)
8132
8133 /* Calculate the checksum of a number in signed LEB128 format.  */
8134
8135 static void
8136 checksum_sleb128 (HOST_WIDE_INT value, struct md5_ctx *ctx)
8137 {
8138   unsigned char byte;
8139   bool more;
8140
8141   while (1)
8142     {
8143       byte = (value & 0x7f);
8144       value >>= 7;
8145       more = !((value == 0 && (byte & 0x40) == 0)
8146                 || (value == -1 && (byte & 0x40) != 0));
8147       if (more)
8148         byte |= 0x80;
8149       CHECKSUM (byte);
8150       if (!more)
8151         break;
8152     }
8153 }
8154
8155 /* Calculate the checksum of a number in unsigned LEB128 format.  */
8156
8157 static void
8158 checksum_uleb128 (unsigned HOST_WIDE_INT value, struct md5_ctx *ctx)
8159 {
8160   while (1)
8161     {
8162       unsigned char byte = (value & 0x7f);
8163       value >>= 7;
8164       if (value != 0)
8165         /* More bytes to follow.  */
8166         byte |= 0x80;
8167       CHECKSUM (byte);
8168       if (value == 0)
8169         break;
8170     }
8171 }
8172
8173 /* Checksum the context of the DIE.  This adds the names of any
8174    surrounding namespaces or structures to the checksum.  */
8175
8176 static void
8177 checksum_die_context (dw_die_ref die, struct md5_ctx *ctx)
8178 {
8179   const char *name;
8180   dw_die_ref spec;
8181   int tag = die->die_tag;
8182
8183   if (tag != DW_TAG_namespace
8184       && tag != DW_TAG_structure_type
8185       && tag != DW_TAG_class_type)
8186     return;
8187
8188   name = get_AT_string (die, DW_AT_name);
8189
8190   spec = get_AT_ref (die, DW_AT_specification);
8191   if (spec != NULL)
8192     die = spec;
8193
8194   if (die->die_parent != NULL)
8195     checksum_die_context (die->die_parent, ctx);
8196
8197   CHECKSUM_ULEB128 ('C');
8198   CHECKSUM_ULEB128 (tag);
8199   if (name != NULL)
8200     CHECKSUM_STRING (name);
8201 }
8202
8203 /* Calculate the checksum of a location expression.  */
8204
8205 static inline void
8206 loc_checksum_ordered (dw_loc_descr_ref loc, struct md5_ctx *ctx)
8207 {
8208   /* Special case for lone DW_OP_plus_uconst: checksum as if the location
8209      were emitted as a DW_FORM_sdata instead of a location expression.  */
8210   if (loc->dw_loc_opc == DW_OP_plus_uconst && loc->dw_loc_next == NULL)
8211     {
8212       CHECKSUM_ULEB128 (DW_FORM_sdata);
8213       CHECKSUM_SLEB128 ((HOST_WIDE_INT) loc->dw_loc_oprnd1.v.val_unsigned);
8214       return;
8215     }
8216
8217   /* Otherwise, just checksum the raw location expression.  */
8218   while (loc != NULL)
8219     {
8220       CHECKSUM_ULEB128 (loc->dw_loc_opc);
8221       CHECKSUM (loc->dw_loc_oprnd1);
8222       CHECKSUM (loc->dw_loc_oprnd2);
8223       loc = loc->dw_loc_next;
8224     }
8225 }
8226
8227 /* Calculate the checksum of an attribute.  */
8228
8229 static void
8230 attr_checksum_ordered (enum dwarf_tag tag, dw_attr_ref at,
8231                        struct md5_ctx *ctx, int *mark)
8232 {
8233   dw_loc_descr_ref loc;
8234   rtx r;
8235
8236   if (AT_class (at) == dw_val_class_die_ref)
8237     {
8238       dw_die_ref target_die = AT_ref (at);
8239
8240       /* For pointer and reference types, we checksum only the (qualified)
8241          name of the target type (if there is a name).  For friend entries,
8242          we checksum only the (qualified) name of the target type or function.
8243          This allows the checksum to remain the same whether the target type
8244          is complete or not.  */
8245       if ((at->dw_attr == DW_AT_type
8246            && (tag == DW_TAG_pointer_type
8247                || tag == DW_TAG_reference_type
8248                || tag == DW_TAG_ptr_to_member_type))
8249           || (at->dw_attr == DW_AT_friend
8250               && tag == DW_TAG_friend))
8251         {
8252           dw_attr_ref name_attr = get_AT (target_die, DW_AT_name);
8253
8254           if (name_attr != NULL)
8255             {
8256               dw_die_ref decl = get_AT_ref (target_die, DW_AT_specification);
8257
8258               if (decl == NULL)
8259                 decl = target_die;
8260               CHECKSUM_ULEB128 ('N');
8261               CHECKSUM_ULEB128 (at->dw_attr);
8262               if (decl->die_parent != NULL)
8263                 checksum_die_context (decl->die_parent, ctx);
8264               CHECKSUM_ULEB128 ('E');
8265               CHECKSUM_STRING (AT_string (name_attr));
8266               return;
8267             }
8268         }
8269
8270       /* For all other references to another DIE, we check to see if the
8271          target DIE has already been visited.  If it has, we emit a
8272          backward reference; if not, we descend recursively.  */
8273       if (target_die->die_mark > 0)
8274         {
8275           CHECKSUM_ULEB128 ('R');
8276           CHECKSUM_ULEB128 (at->dw_attr);
8277           CHECKSUM_ULEB128 (target_die->die_mark);
8278         }
8279       else
8280         {
8281           dw_die_ref decl = get_AT_ref (target_die, DW_AT_specification);
8282
8283           if (decl == NULL)
8284             decl = target_die;
8285           target_die->die_mark = ++(*mark);
8286           CHECKSUM_ULEB128 ('T');
8287           CHECKSUM_ULEB128 (at->dw_attr);
8288           if (decl->die_parent != NULL)
8289             checksum_die_context (decl->die_parent, ctx);
8290           die_checksum_ordered (target_die, ctx, mark);
8291         }
8292       return;
8293     }
8294
8295   CHECKSUM_ULEB128 ('A');
8296   CHECKSUM_ULEB128 (at->dw_attr);
8297
8298   switch (AT_class (at))
8299     {
8300     case dw_val_class_const:
8301       CHECKSUM_ULEB128 (DW_FORM_sdata);
8302       CHECKSUM_SLEB128 (at->dw_attr_val.v.val_int);
8303       break;
8304
8305     case dw_val_class_unsigned_const:
8306       CHECKSUM_ULEB128 (DW_FORM_sdata);
8307       CHECKSUM_SLEB128 ((int) at->dw_attr_val.v.val_unsigned);
8308       break;
8309
8310     case dw_val_class_const_double:
8311       CHECKSUM_ULEB128 (DW_FORM_block);
8312       CHECKSUM_ULEB128 (sizeof (at->dw_attr_val.v.val_double));
8313       CHECKSUM (at->dw_attr_val.v.val_double);
8314       break;
8315
8316     case dw_val_class_vec:
8317       CHECKSUM_ULEB128 (DW_FORM_block);
8318       CHECKSUM_ULEB128 (sizeof (at->dw_attr_val.v.val_vec));
8319       CHECKSUM (at->dw_attr_val.v.val_vec);
8320       break;
8321
8322     case dw_val_class_flag:
8323       CHECKSUM_ULEB128 (DW_FORM_flag);
8324       CHECKSUM_ULEB128 (at->dw_attr_val.v.val_flag ? 1 : 0);
8325       break;
8326
8327     case dw_val_class_str:
8328       CHECKSUM_ULEB128 (DW_FORM_string);
8329       CHECKSUM_STRING (AT_string (at));
8330       break;
8331
8332     case dw_val_class_addr:
8333       r = AT_addr (at);
8334       gcc_assert (GET_CODE (r) == SYMBOL_REF);
8335       CHECKSUM_ULEB128 (DW_FORM_string);
8336       CHECKSUM_STRING (XSTR (r, 0));
8337       break;
8338
8339     case dw_val_class_offset:
8340       CHECKSUM_ULEB128 (DW_FORM_sdata);
8341       CHECKSUM_ULEB128 (at->dw_attr_val.v.val_offset);
8342       break;
8343
8344     case dw_val_class_loc:
8345       for (loc = AT_loc (at); loc; loc = loc->dw_loc_next)
8346         loc_checksum_ordered (loc, ctx);
8347       break;
8348
8349     case dw_val_class_fde_ref:
8350     case dw_val_class_lbl_id:
8351     case dw_val_class_lineptr:
8352     case dw_val_class_macptr:
8353       break;
8354
8355     case dw_val_class_file:
8356       CHECKSUM_ULEB128 (DW_FORM_string);
8357       CHECKSUM_STRING (AT_file (at)->filename);
8358       break;
8359
8360     case dw_val_class_data8:
8361       CHECKSUM (at->dw_attr_val.v.val_data8);
8362       break;
8363
8364     default:
8365       break;
8366     }
8367 }
8368
8369 struct checksum_attributes
8370 {
8371   dw_attr_ref at_name;
8372   dw_attr_ref at_type;
8373   dw_attr_ref at_friend;
8374   dw_attr_ref at_accessibility;
8375   dw_attr_ref at_address_class;
8376   dw_attr_ref at_allocated;
8377   dw_attr_ref at_artificial;
8378   dw_attr_ref at_associated;
8379   dw_attr_ref at_binary_scale;
8380   dw_attr_ref at_bit_offset;
8381   dw_attr_ref at_bit_size;
8382   dw_attr_ref at_bit_stride;
8383   dw_attr_ref at_byte_size;
8384   dw_attr_ref at_byte_stride;
8385   dw_attr_ref at_const_value;
8386   dw_attr_ref at_containing_type;
8387   dw_attr_ref at_count;
8388   dw_attr_ref at_data_location;
8389   dw_attr_ref at_data_member_location;
8390   dw_attr_ref at_decimal_scale;
8391   dw_attr_ref at_decimal_sign;
8392   dw_attr_ref at_default_value;
8393   dw_attr_ref at_digit_count;
8394   dw_attr_ref at_discr;
8395   dw_attr_ref at_discr_list;
8396   dw_attr_ref at_discr_value;
8397   dw_attr_ref at_encoding;
8398   dw_attr_ref at_endianity;
8399   dw_attr_ref at_explicit;
8400   dw_attr_ref at_is_optional;
8401   dw_attr_ref at_location;
8402   dw_attr_ref at_lower_bound;
8403   dw_attr_ref at_mutable;
8404   dw_attr_ref at_ordering;
8405   dw_attr_ref at_picture_string;
8406   dw_attr_ref at_prototyped;
8407   dw_attr_ref at_small;
8408   dw_attr_ref at_segment;
8409   dw_attr_ref at_string_length;
8410   dw_attr_ref at_threads_scaled;
8411   dw_attr_ref at_upper_bound;
8412   dw_attr_ref at_use_location;
8413   dw_attr_ref at_use_UTF8;
8414   dw_attr_ref at_variable_parameter;
8415   dw_attr_ref at_virtuality;
8416   dw_attr_ref at_visibility;
8417   dw_attr_ref at_vtable_elem_location;
8418 };
8419
8420 /* Collect the attributes that we will want to use for the checksum.  */
8421
8422 static void
8423 collect_checksum_attributes (struct checksum_attributes *attrs, dw_die_ref die)
8424 {
8425   dw_attr_ref a;
8426   unsigned ix;
8427
8428   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
8429     {
8430       switch (a->dw_attr)
8431         {
8432         case DW_AT_name:
8433           attrs->at_name = a;
8434           break;
8435         case DW_AT_type:
8436           attrs->at_type = a;
8437           break;
8438         case DW_AT_friend:
8439           attrs->at_friend = a;
8440           break;
8441         case DW_AT_accessibility:
8442           attrs->at_accessibility = a;
8443           break;
8444         case DW_AT_address_class:
8445           attrs->at_address_class = a;
8446           break;
8447         case DW_AT_allocated:
8448           attrs->at_allocated = a;
8449           break;
8450         case DW_AT_artificial:
8451           attrs->at_artificial = a;
8452           break;
8453         case DW_AT_associated:
8454           attrs->at_associated = a;
8455           break;
8456         case DW_AT_binary_scale:
8457           attrs->at_binary_scale = a;
8458           break;
8459         case DW_AT_bit_offset:
8460           attrs->at_bit_offset = a;
8461           break;
8462         case DW_AT_bit_size:
8463           attrs->at_bit_size = a;
8464           break;
8465         case DW_AT_bit_stride:
8466           attrs->at_bit_stride = a;
8467           break;
8468         case DW_AT_byte_size:
8469           attrs->at_byte_size = a;
8470           break;
8471         case DW_AT_byte_stride:
8472           attrs->at_byte_stride = a;
8473           break;
8474         case DW_AT_const_value:
8475           attrs->at_const_value = a;
8476           break;
8477         case DW_AT_containing_type:
8478           attrs->at_containing_type = a;
8479           break;
8480         case DW_AT_count:
8481           attrs->at_count = a;
8482           break;
8483         case DW_AT_data_location:
8484           attrs->at_data_location = a;
8485           break;
8486         case DW_AT_data_member_location:
8487           attrs->at_data_member_location = a;
8488           break;
8489         case DW_AT_decimal_scale:
8490           attrs->at_decimal_scale = a;
8491           break;
8492         case DW_AT_decimal_sign:
8493           attrs->at_decimal_sign = a;
8494           break;
8495         case DW_AT_default_value:
8496           attrs->at_default_value = a;
8497           break;
8498         case DW_AT_digit_count:
8499           attrs->at_digit_count = a;
8500           break;
8501         case DW_AT_discr:
8502           attrs->at_discr = a;
8503           break;
8504         case DW_AT_discr_list:
8505           attrs->at_discr_list = a;
8506           break;
8507         case DW_AT_discr_value:
8508           attrs->at_discr_value = a;
8509           break;
8510         case DW_AT_encoding:
8511           attrs->at_encoding = a;
8512           break;
8513         case DW_AT_endianity:
8514           attrs->at_endianity = a;
8515           break;
8516         case DW_AT_explicit:
8517           attrs->at_explicit = a;
8518           break;
8519         case DW_AT_is_optional:
8520           attrs->at_is_optional = a;
8521           break;
8522         case DW_AT_location:
8523           attrs->at_location = a;
8524           break;
8525         case DW_AT_lower_bound:
8526           attrs->at_lower_bound = a;
8527           break;
8528         case DW_AT_mutable:
8529           attrs->at_mutable = a;
8530           break;
8531         case DW_AT_ordering:
8532           attrs->at_ordering = a;
8533           break;
8534         case DW_AT_picture_string:
8535           attrs->at_picture_string = a;
8536           break;
8537         case DW_AT_prototyped:
8538           attrs->at_prototyped = a;
8539           break;
8540         case DW_AT_small:
8541           attrs->at_small = a;
8542           break;
8543         case DW_AT_segment:
8544           attrs->at_segment = a;
8545           break;
8546         case DW_AT_string_length:
8547           attrs->at_string_length = a;
8548           break;
8549         case DW_AT_threads_scaled:
8550           attrs->at_threads_scaled = a;
8551           break;
8552         case DW_AT_upper_bound:
8553           attrs->at_upper_bound = a;
8554           break;
8555         case DW_AT_use_location:
8556           attrs->at_use_location = a;
8557           break;
8558         case DW_AT_use_UTF8:
8559           attrs->at_use_UTF8 = a;
8560           break;
8561         case DW_AT_variable_parameter:
8562           attrs->at_variable_parameter = a;
8563           break;
8564         case DW_AT_virtuality:
8565           attrs->at_virtuality = a;
8566           break;
8567         case DW_AT_visibility:
8568           attrs->at_visibility = a;
8569           break;
8570         case DW_AT_vtable_elem_location:
8571           attrs->at_vtable_elem_location = a;
8572           break;
8573         default:
8574           break;
8575         }
8576     }
8577 }
8578
8579 /* Calculate the checksum of a DIE, using an ordered subset of attributes.  */
8580
8581 static void
8582 die_checksum_ordered (dw_die_ref die, struct md5_ctx *ctx, int *mark)
8583 {
8584   dw_die_ref c;
8585   dw_die_ref decl;
8586   struct checksum_attributes attrs;
8587
8588   CHECKSUM_ULEB128 ('D');
8589   CHECKSUM_ULEB128 (die->die_tag);
8590
8591   memset (&attrs, 0, sizeof (attrs));
8592
8593   decl = get_AT_ref (die, DW_AT_specification);
8594   if (decl != NULL)
8595     collect_checksum_attributes (&attrs, decl);
8596   collect_checksum_attributes (&attrs, die);
8597
8598   CHECKSUM_ATTR (attrs.at_name);
8599   CHECKSUM_ATTR (attrs.at_accessibility);
8600   CHECKSUM_ATTR (attrs.at_address_class);
8601   CHECKSUM_ATTR (attrs.at_allocated);
8602   CHECKSUM_ATTR (attrs.at_artificial);
8603   CHECKSUM_ATTR (attrs.at_associated);
8604   CHECKSUM_ATTR (attrs.at_binary_scale);
8605   CHECKSUM_ATTR (attrs.at_bit_offset);
8606   CHECKSUM_ATTR (attrs.at_bit_size);
8607   CHECKSUM_ATTR (attrs.at_bit_stride);
8608   CHECKSUM_ATTR (attrs.at_byte_size);
8609   CHECKSUM_ATTR (attrs.at_byte_stride);
8610   CHECKSUM_ATTR (attrs.at_const_value);
8611   CHECKSUM_ATTR (attrs.at_containing_type);
8612   CHECKSUM_ATTR (attrs.at_count);
8613   CHECKSUM_ATTR (attrs.at_data_location);
8614   CHECKSUM_ATTR (attrs.at_data_member_location);
8615   CHECKSUM_ATTR (attrs.at_decimal_scale);
8616   CHECKSUM_ATTR (attrs.at_decimal_sign);
8617   CHECKSUM_ATTR (attrs.at_default_value);
8618   CHECKSUM_ATTR (attrs.at_digit_count);
8619   CHECKSUM_ATTR (attrs.at_discr);
8620   CHECKSUM_ATTR (attrs.at_discr_list);
8621   CHECKSUM_ATTR (attrs.at_discr_value);
8622   CHECKSUM_ATTR (attrs.at_encoding);
8623   CHECKSUM_ATTR (attrs.at_endianity);
8624   CHECKSUM_ATTR (attrs.at_explicit);
8625   CHECKSUM_ATTR (attrs.at_is_optional);
8626   CHECKSUM_ATTR (attrs.at_location);
8627   CHECKSUM_ATTR (attrs.at_lower_bound);
8628   CHECKSUM_ATTR (attrs.at_mutable);
8629   CHECKSUM_ATTR (attrs.at_ordering);
8630   CHECKSUM_ATTR (attrs.at_picture_string);
8631   CHECKSUM_ATTR (attrs.at_prototyped);
8632   CHECKSUM_ATTR (attrs.at_small);
8633   CHECKSUM_ATTR (attrs.at_segment);
8634   CHECKSUM_ATTR (attrs.at_string_length);
8635   CHECKSUM_ATTR (attrs.at_threads_scaled);
8636   CHECKSUM_ATTR (attrs.at_upper_bound);
8637   CHECKSUM_ATTR (attrs.at_use_location);
8638   CHECKSUM_ATTR (attrs.at_use_UTF8);
8639   CHECKSUM_ATTR (attrs.at_variable_parameter);
8640   CHECKSUM_ATTR (attrs.at_virtuality);
8641   CHECKSUM_ATTR (attrs.at_visibility);
8642   CHECKSUM_ATTR (attrs.at_vtable_elem_location);
8643   CHECKSUM_ATTR (attrs.at_type);
8644   CHECKSUM_ATTR (attrs.at_friend);
8645
8646   /* Checksum the child DIEs, except for nested types and member functions.  */
8647   c = die->die_child;
8648   if (c) do {
8649     dw_attr_ref name_attr;
8650
8651     c = c->die_sib;
8652     name_attr = get_AT (c, DW_AT_name);
8653     if ((is_type_die (c) || c->die_tag == DW_TAG_subprogram)
8654         && name_attr != NULL)
8655       {
8656         CHECKSUM_ULEB128 ('S');
8657         CHECKSUM_ULEB128 (c->die_tag);
8658         CHECKSUM_STRING (AT_string (name_attr));
8659       }
8660     else
8661       {
8662         /* Mark this DIE so it gets processed when unmarking.  */
8663         if (c->die_mark == 0)
8664           c->die_mark = -1;
8665         die_checksum_ordered (c, ctx, mark);
8666       }
8667   } while (c != die->die_child);
8668
8669   CHECKSUM_ULEB128 (0);
8670 }
8671
8672 #undef CHECKSUM
8673 #undef CHECKSUM_STRING
8674 #undef CHECKSUM_ATTR
8675 #undef CHECKSUM_LEB128
8676 #undef CHECKSUM_ULEB128
8677
8678 /* Generate the type signature for DIE.  This is computed by generating an
8679    MD5 checksum over the DIE's tag, its relevant attributes, and its
8680    children.  Attributes that are references to other DIEs are processed
8681    by recursion, using the MARK field to prevent infinite recursion.
8682    If the DIE is nested inside a namespace or another type, we also
8683    need to include that context in the signature.  The lower 64 bits
8684    of the resulting MD5 checksum comprise the signature.  */
8685
8686 static void
8687 generate_type_signature (dw_die_ref die, comdat_type_node *type_node)
8688 {
8689   int mark;
8690   const char *name;
8691   unsigned char checksum[16];
8692   struct md5_ctx ctx;
8693   dw_die_ref decl;
8694
8695   name = get_AT_string (die, DW_AT_name);
8696   decl = get_AT_ref (die, DW_AT_specification);
8697
8698   /* First, compute a signature for just the type name (and its surrounding
8699      context, if any.  This is stored in the type unit DIE for link-time
8700      ODR (one-definition rule) checking.  */
8701
8702   if (is_cxx() && name != NULL)
8703     {
8704       md5_init_ctx (&ctx);
8705
8706       /* Checksum the names of surrounding namespaces and structures.  */
8707       if (decl != NULL && decl->die_parent != NULL)
8708         checksum_die_context (decl->die_parent, &ctx);
8709
8710       md5_process_bytes (&die->die_tag, sizeof (die->die_tag), &ctx);
8711       md5_process_bytes (name, strlen (name) + 1, &ctx);
8712       md5_finish_ctx (&ctx, checksum);
8713
8714       add_AT_data8 (type_node->root_die, DW_AT_GNU_odr_signature, &checksum[8]);
8715     }
8716
8717   /* Next, compute the complete type signature.  */
8718
8719   md5_init_ctx (&ctx);
8720   mark = 1;
8721   die->die_mark = mark;
8722
8723   /* Checksum the names of surrounding namespaces and structures.  */
8724   if (decl != NULL && decl->die_parent != NULL)
8725     checksum_die_context (decl->die_parent, &ctx);
8726
8727   /* Checksum the DIE and its children.  */
8728   die_checksum_ordered (die, &ctx, &mark);
8729   unmark_all_dies (die);
8730   md5_finish_ctx (&ctx, checksum);
8731
8732   /* Store the signature in the type node and link the type DIE and the
8733      type node together.  */
8734   memcpy (type_node->signature, &checksum[16 - DWARF_TYPE_SIGNATURE_SIZE],
8735           DWARF_TYPE_SIGNATURE_SIZE);
8736   die->die_id.die_type_node = type_node;
8737   type_node->type_die = die;
8738
8739   /* If the DIE is a specification, link its declaration to the type node
8740      as well.  */
8741   if (decl != NULL)
8742     decl->die_id.die_type_node = type_node;
8743 }
8744
8745 /* Do the location expressions look same?  */
8746 static inline int
8747 same_loc_p (dw_loc_descr_ref loc1, dw_loc_descr_ref loc2, int *mark)
8748 {
8749   return loc1->dw_loc_opc == loc2->dw_loc_opc
8750          && same_dw_val_p (&loc1->dw_loc_oprnd1, &loc2->dw_loc_oprnd1, mark)
8751          && same_dw_val_p (&loc1->dw_loc_oprnd2, &loc2->dw_loc_oprnd2, mark);
8752 }
8753
8754 /* Do the values look the same?  */
8755 static int
8756 same_dw_val_p (const dw_val_node *v1, const dw_val_node *v2, int *mark)
8757 {
8758   dw_loc_descr_ref loc1, loc2;
8759   rtx r1, r2;
8760
8761   if (v1->val_class != v2->val_class)
8762     return 0;
8763
8764   switch (v1->val_class)
8765     {
8766     case dw_val_class_const:
8767       return v1->v.val_int == v2->v.val_int;
8768     case dw_val_class_unsigned_const:
8769       return v1->v.val_unsigned == v2->v.val_unsigned;
8770     case dw_val_class_const_double:
8771       return v1->v.val_double.high == v2->v.val_double.high
8772              && v1->v.val_double.low == v2->v.val_double.low;
8773     case dw_val_class_vec:
8774       if (v1->v.val_vec.length != v2->v.val_vec.length
8775           || v1->v.val_vec.elt_size != v2->v.val_vec.elt_size)
8776         return 0;
8777       if (memcmp (v1->v.val_vec.array, v2->v.val_vec.array,
8778                   v1->v.val_vec.length * v1->v.val_vec.elt_size))
8779         return 0;
8780       return 1;
8781     case dw_val_class_flag:
8782       return v1->v.val_flag == v2->v.val_flag;
8783     case dw_val_class_str:
8784       return !strcmp(v1->v.val_str->str, v2->v.val_str->str);
8785
8786     case dw_val_class_addr:
8787       r1 = v1->v.val_addr;
8788       r2 = v2->v.val_addr;
8789       if (GET_CODE (r1) != GET_CODE (r2))
8790         return 0;
8791       return !rtx_equal_p (r1, r2);
8792
8793     case dw_val_class_offset:
8794       return v1->v.val_offset == v2->v.val_offset;
8795
8796     case dw_val_class_loc:
8797       for (loc1 = v1->v.val_loc, loc2 = v2->v.val_loc;
8798            loc1 && loc2;
8799            loc1 = loc1->dw_loc_next, loc2 = loc2->dw_loc_next)
8800         if (!same_loc_p (loc1, loc2, mark))
8801           return 0;
8802       return !loc1 && !loc2;
8803
8804     case dw_val_class_die_ref:
8805       return same_die_p (v1->v.val_die_ref.die, v2->v.val_die_ref.die, mark);
8806
8807     case dw_val_class_fde_ref:
8808     case dw_val_class_lbl_id:
8809     case dw_val_class_lineptr:
8810     case dw_val_class_macptr:
8811       return 1;
8812
8813     case dw_val_class_file:
8814       return v1->v.val_file == v2->v.val_file;
8815
8816     case dw_val_class_data8:
8817       return !memcmp (v1->v.val_data8, v2->v.val_data8, 8);
8818
8819     default:
8820       return 1;
8821     }
8822 }
8823
8824 /* Do the attributes look the same?  */
8825
8826 static int
8827 same_attr_p (dw_attr_ref at1, dw_attr_ref at2, int *mark)
8828 {
8829   if (at1->dw_attr != at2->dw_attr)
8830     return 0;
8831
8832   /* We don't care that this was compiled with a different compiler
8833      snapshot; if the output is the same, that's what matters. */
8834   if (at1->dw_attr == DW_AT_producer)
8835     return 1;
8836
8837   return same_dw_val_p (&at1->dw_attr_val, &at2->dw_attr_val, mark);
8838 }
8839
8840 /* Do the dies look the same?  */
8841
8842 static int
8843 same_die_p (dw_die_ref die1, dw_die_ref die2, int *mark)
8844 {
8845   dw_die_ref c1, c2;
8846   dw_attr_ref a1;
8847   unsigned ix;
8848
8849   /* To avoid infinite recursion.  */
8850   if (die1->die_mark)
8851     return die1->die_mark == die2->die_mark;
8852   die1->die_mark = die2->die_mark = ++(*mark);
8853
8854   if (die1->die_tag != die2->die_tag)
8855     return 0;
8856
8857   if (VEC_length (dw_attr_node, die1->die_attr)
8858       != VEC_length (dw_attr_node, die2->die_attr))
8859     return 0;
8860
8861   for (ix = 0; VEC_iterate (dw_attr_node, die1->die_attr, ix, a1); ix++)
8862     if (!same_attr_p (a1, VEC_index (dw_attr_node, die2->die_attr, ix), mark))
8863       return 0;
8864
8865   c1 = die1->die_child;
8866   c2 = die2->die_child;
8867   if (! c1)
8868     {
8869       if (c2)
8870         return 0;
8871     }
8872   else
8873     for (;;)
8874       {
8875         if (!same_die_p (c1, c2, mark))
8876           return 0;
8877         c1 = c1->die_sib;
8878         c2 = c2->die_sib;
8879         if (c1 == die1->die_child)
8880           {
8881             if (c2 == die2->die_child)
8882               break;
8883             else
8884               return 0;
8885           }
8886     }
8887
8888   return 1;
8889 }
8890
8891 /* Do the dies look the same?  Wrapper around same_die_p.  */
8892
8893 static int
8894 same_die_p_wrap (dw_die_ref die1, dw_die_ref die2)
8895 {
8896   int mark = 0;
8897   int ret = same_die_p (die1, die2, &mark);
8898
8899   unmark_all_dies (die1);
8900   unmark_all_dies (die2);
8901
8902   return ret;
8903 }
8904
8905 /* The prefix to attach to symbols on DIEs in the current comdat debug
8906    info section.  */
8907 static char *comdat_symbol_id;
8908
8909 /* The index of the current symbol within the current comdat CU.  */
8910 static unsigned int comdat_symbol_number;
8911
8912 /* Calculate the MD5 checksum of the compilation unit DIE UNIT_DIE and its
8913    children, and set comdat_symbol_id accordingly.  */
8914
8915 static void
8916 compute_section_prefix (dw_die_ref unit_die)
8917 {
8918   const char *die_name = get_AT_string (unit_die, DW_AT_name);
8919   const char *base = die_name ? lbasename (die_name) : "anonymous";
8920   char *name = XALLOCAVEC (char, strlen (base) + 64);
8921   char *p;
8922   int i, mark;
8923   unsigned char checksum[16];
8924   struct md5_ctx ctx;
8925
8926   /* Compute the checksum of the DIE, then append part of it as hex digits to
8927      the name filename of the unit.  */
8928
8929   md5_init_ctx (&ctx);
8930   mark = 0;
8931   die_checksum (unit_die, &ctx, &mark);
8932   unmark_all_dies (unit_die);
8933   md5_finish_ctx (&ctx, checksum);
8934
8935   sprintf (name, "%s.", base);
8936   clean_symbol_name (name);
8937
8938   p = name + strlen (name);
8939   for (i = 0; i < 4; i++)
8940     {
8941       sprintf (p, "%.2x", checksum[i]);
8942       p += 2;
8943     }
8944
8945   comdat_symbol_id = unit_die->die_id.die_symbol = xstrdup (name);
8946   comdat_symbol_number = 0;
8947 }
8948
8949 /* Returns nonzero if DIE represents a type, in the sense of TYPE_P.  */
8950
8951 static int
8952 is_type_die (dw_die_ref die)
8953 {
8954   switch (die->die_tag)
8955     {
8956     case DW_TAG_array_type:
8957     case DW_TAG_class_type:
8958     case DW_TAG_interface_type:
8959     case DW_TAG_enumeration_type:
8960     case DW_TAG_pointer_type:
8961     case DW_TAG_reference_type:
8962     case DW_TAG_string_type:
8963     case DW_TAG_structure_type:
8964     case DW_TAG_subroutine_type:
8965     case DW_TAG_union_type:
8966     case DW_TAG_ptr_to_member_type:
8967     case DW_TAG_set_type:
8968     case DW_TAG_subrange_type:
8969     case DW_TAG_base_type:
8970     case DW_TAG_const_type:
8971     case DW_TAG_file_type:
8972     case DW_TAG_packed_type:
8973     case DW_TAG_volatile_type:
8974     case DW_TAG_typedef:
8975       return 1;
8976     default:
8977       return 0;
8978     }
8979 }
8980
8981 /* Returns 1 iff C is the sort of DIE that should go into a COMDAT CU.
8982    Basically, we want to choose the bits that are likely to be shared between
8983    compilations (types) and leave out the bits that are specific to individual
8984    compilations (functions).  */
8985
8986 static int
8987 is_comdat_die (dw_die_ref c)
8988 {
8989   /* I think we want to leave base types and __vtbl_ptr_type in the main CU, as
8990      we do for stabs.  The advantage is a greater likelihood of sharing between
8991      objects that don't include headers in the same order (and therefore would
8992      put the base types in a different comdat).  jason 8/28/00 */
8993
8994   if (c->die_tag == DW_TAG_base_type)
8995     return 0;
8996
8997   if (c->die_tag == DW_TAG_pointer_type
8998       || c->die_tag == DW_TAG_reference_type
8999       || c->die_tag == DW_TAG_const_type
9000       || c->die_tag == DW_TAG_volatile_type)
9001     {
9002       dw_die_ref t = get_AT_ref (c, DW_AT_type);
9003
9004       return t ? is_comdat_die (t) : 0;
9005     }
9006
9007   return is_type_die (c);
9008 }
9009
9010 /* Returns 1 iff C is the sort of DIE that might be referred to from another
9011    compilation unit.  */
9012
9013 static int
9014 is_symbol_die (dw_die_ref c)
9015 {
9016   return (is_type_die (c)
9017           || is_declaration_die (c)
9018           || c->die_tag == DW_TAG_namespace
9019           || c->die_tag == DW_TAG_module);
9020 }
9021
9022 static char *
9023 gen_internal_sym (const char *prefix)
9024 {
9025   char buf[256];
9026
9027   ASM_GENERATE_INTERNAL_LABEL (buf, prefix, label_num++);
9028   return xstrdup (buf);
9029 }
9030
9031 /* Assign symbols to all worthy DIEs under DIE.  */
9032
9033 static void
9034 assign_symbol_names (dw_die_ref die)
9035 {
9036   dw_die_ref c;
9037
9038   if (is_symbol_die (die))
9039     {
9040       if (comdat_symbol_id)
9041         {
9042           char *p = XALLOCAVEC (char, strlen (comdat_symbol_id) + 64);
9043
9044           sprintf (p, "%s.%s.%x", DIE_LABEL_PREFIX,
9045                    comdat_symbol_id, comdat_symbol_number++);
9046           die->die_id.die_symbol = xstrdup (p);
9047         }
9048       else
9049         die->die_id.die_symbol = gen_internal_sym ("LDIE");
9050     }
9051
9052   FOR_EACH_CHILD (die, c, assign_symbol_names (c));
9053 }
9054
9055 struct cu_hash_table_entry
9056 {
9057   dw_die_ref cu;
9058   unsigned min_comdat_num, max_comdat_num;
9059   struct cu_hash_table_entry *next;
9060 };
9061
9062 /* Routines to manipulate hash table of CUs.  */
9063 static hashval_t
9064 htab_cu_hash (const void *of)
9065 {
9066   const struct cu_hash_table_entry *const entry =
9067     (const struct cu_hash_table_entry *) of;
9068
9069   return htab_hash_string (entry->cu->die_id.die_symbol);
9070 }
9071
9072 static int
9073 htab_cu_eq (const void *of1, const void *of2)
9074 {
9075   const struct cu_hash_table_entry *const entry1 =
9076     (const struct cu_hash_table_entry *) of1;
9077   const struct die_struct *const entry2 = (const struct die_struct *) of2;
9078
9079   return !strcmp (entry1->cu->die_id.die_symbol, entry2->die_id.die_symbol);
9080 }
9081
9082 static void
9083 htab_cu_del (void *what)
9084 {
9085   struct cu_hash_table_entry *next,
9086     *entry = (struct cu_hash_table_entry *) what;
9087
9088   while (entry)
9089     {
9090       next = entry->next;
9091       free (entry);
9092       entry = next;
9093     }
9094 }
9095
9096 /* Check whether we have already seen this CU and set up SYM_NUM
9097    accordingly.  */
9098 static int
9099 check_duplicate_cu (dw_die_ref cu, htab_t htable, unsigned int *sym_num)
9100 {
9101   struct cu_hash_table_entry dummy;
9102   struct cu_hash_table_entry **slot, *entry, *last = &dummy;
9103
9104   dummy.max_comdat_num = 0;
9105
9106   slot = (struct cu_hash_table_entry **)
9107     htab_find_slot_with_hash (htable, cu, htab_hash_string (cu->die_id.die_symbol),
9108         INSERT);
9109   entry = *slot;
9110
9111   for (; entry; last = entry, entry = entry->next)
9112     {
9113       if (same_die_p_wrap (cu, entry->cu))
9114         break;
9115     }
9116
9117   if (entry)
9118     {
9119       *sym_num = entry->min_comdat_num;
9120       return 1;
9121     }
9122
9123   entry = XCNEW (struct cu_hash_table_entry);
9124   entry->cu = cu;
9125   entry->min_comdat_num = *sym_num = last->max_comdat_num;
9126   entry->next = *slot;
9127   *slot = entry;
9128
9129   return 0;
9130 }
9131
9132 /* Record SYM_NUM to record of CU in HTABLE.  */
9133 static void
9134 record_comdat_symbol_number (dw_die_ref cu, htab_t htable, unsigned int sym_num)
9135 {
9136   struct cu_hash_table_entry **slot, *entry;
9137
9138   slot = (struct cu_hash_table_entry **)
9139     htab_find_slot_with_hash (htable, cu, htab_hash_string (cu->die_id.die_symbol),
9140         NO_INSERT);
9141   entry = *slot;
9142
9143   entry->max_comdat_num = sym_num;
9144 }
9145
9146 /* Traverse the DIE (which is always comp_unit_die), and set up
9147    additional compilation units for each of the include files we see
9148    bracketed by BINCL/EINCL.  */
9149
9150 static void
9151 break_out_includes (dw_die_ref die)
9152 {
9153   dw_die_ref c;
9154   dw_die_ref unit = NULL;
9155   limbo_die_node *node, **pnode;
9156   htab_t cu_hash_table;
9157
9158   c = die->die_child;
9159   if (c) do {
9160     dw_die_ref prev = c;
9161     c = c->die_sib;
9162     while (c->die_tag == DW_TAG_GNU_BINCL || c->die_tag == DW_TAG_GNU_EINCL
9163            || (unit && is_comdat_die (c)))
9164       {
9165         dw_die_ref next = c->die_sib;
9166
9167         /* This DIE is for a secondary CU; remove it from the main one.  */
9168         remove_child_with_prev (c, prev);
9169
9170         if (c->die_tag == DW_TAG_GNU_BINCL)
9171           unit = push_new_compile_unit (unit, c);
9172         else if (c->die_tag == DW_TAG_GNU_EINCL)
9173           unit = pop_compile_unit (unit);
9174         else
9175           add_child_die (unit, c);
9176         c = next;
9177         if (c == die->die_child)
9178           break;
9179       }
9180   } while (c != die->die_child);
9181
9182 #if 0
9183   /* We can only use this in debugging, since the frontend doesn't check
9184      to make sure that we leave every include file we enter.  */
9185   gcc_assert (!unit);
9186 #endif
9187
9188   assign_symbol_names (die);
9189   cu_hash_table = htab_create (10, htab_cu_hash, htab_cu_eq, htab_cu_del);
9190   for (node = limbo_die_list, pnode = &limbo_die_list;
9191        node;
9192        node = node->next)
9193     {
9194       int is_dupl;
9195
9196       compute_section_prefix (node->die);
9197       is_dupl = check_duplicate_cu (node->die, cu_hash_table,
9198                         &comdat_symbol_number);
9199       assign_symbol_names (node->die);
9200       if (is_dupl)
9201         *pnode = node->next;
9202       else
9203         {
9204           pnode = &node->next;
9205           record_comdat_symbol_number (node->die, cu_hash_table,
9206                 comdat_symbol_number);
9207         }
9208     }
9209   htab_delete (cu_hash_table);
9210 }
9211
9212 /* Return non-zero if this DIE is a declaration.  */
9213
9214 static int
9215 is_declaration_die (dw_die_ref die)
9216 {
9217   dw_attr_ref a;
9218   unsigned ix;
9219
9220   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
9221     if (a->dw_attr == DW_AT_declaration)
9222       return 1;
9223
9224   return 0;
9225 }
9226
9227 /* Return non-zero if this is a type DIE that should be moved to a
9228    COMDAT .debug_types section.  */
9229
9230 static int
9231 should_move_die_to_comdat (dw_die_ref die)
9232 {
9233   switch (die->die_tag)
9234     {
9235     case DW_TAG_class_type:
9236     case DW_TAG_structure_type:
9237     case DW_TAG_enumeration_type:
9238     case DW_TAG_union_type:
9239       /* Don't move declarations or inlined instances.  */
9240       if (is_declaration_die (die) || get_AT (die, DW_AT_abstract_origin))
9241         return 0;
9242       return 1;
9243     case DW_TAG_array_type:
9244     case DW_TAG_interface_type:
9245     case DW_TAG_pointer_type:
9246     case DW_TAG_reference_type:
9247     case DW_TAG_string_type:
9248     case DW_TAG_subroutine_type:
9249     case DW_TAG_ptr_to_member_type:
9250     case DW_TAG_set_type:
9251     case DW_TAG_subrange_type:
9252     case DW_TAG_base_type:
9253     case DW_TAG_const_type:
9254     case DW_TAG_file_type:
9255     case DW_TAG_packed_type:
9256     case DW_TAG_volatile_type:
9257     case DW_TAG_typedef:
9258     default:
9259       return 0;
9260     }
9261 }
9262
9263 /* Make a clone of DIE.  */
9264
9265 static dw_die_ref
9266 clone_die (dw_die_ref die)
9267 {
9268   dw_die_ref clone;
9269   dw_attr_ref a;
9270   unsigned ix;
9271
9272   clone = GGC_CNEW (die_node);
9273   clone->die_tag = die->die_tag;
9274
9275   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
9276     add_dwarf_attr (clone, a);
9277
9278   return clone;
9279 }
9280
9281 /* Make a clone of the tree rooted at DIE.  */
9282
9283 static dw_die_ref
9284 clone_tree (dw_die_ref die)
9285 {
9286   dw_die_ref c;
9287   dw_die_ref clone = clone_die (die);
9288
9289   FOR_EACH_CHILD (die, c, add_child_die (clone, clone_tree(c)));
9290
9291   return clone;
9292 }
9293
9294 /* Make a clone of DIE as a declaration.  */
9295
9296 static dw_die_ref
9297 clone_as_declaration (dw_die_ref die)
9298 {
9299   dw_die_ref clone;
9300   dw_die_ref decl;
9301   dw_attr_ref a;
9302   unsigned ix;
9303
9304   /* If the DIE is already a declaration, just clone it.  */
9305   if (is_declaration_die (die))
9306     return clone_die (die);
9307
9308   /* If the DIE is a specification, just clone its declaration DIE.  */
9309   decl = get_AT_ref (die, DW_AT_specification);
9310   if (decl != NULL)
9311     return clone_die (decl);
9312
9313   clone = GGC_CNEW (die_node);
9314   clone->die_tag = die->die_tag;
9315
9316   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
9317     {
9318       /* We don't want to copy over all attributes.
9319          For example we don't want DW_AT_byte_size because otherwise we will no
9320          longer have a declaration and GDB will treat it as a definition.  */
9321
9322       switch (a->dw_attr)
9323         {
9324         case DW_AT_artificial:
9325         case DW_AT_containing_type:
9326         case DW_AT_external:
9327         case DW_AT_name:
9328         case DW_AT_type:
9329         case DW_AT_virtuality:
9330         case DW_AT_MIPS_linkage_name:
9331           add_dwarf_attr (clone, a);
9332           break;
9333         case DW_AT_byte_size:
9334         default:
9335           break;
9336         }
9337     }
9338
9339   if (die->die_id.die_type_node)
9340     add_AT_die_ref (clone, DW_AT_signature, die);
9341
9342   add_AT_flag (clone, DW_AT_declaration, 1);
9343   return clone;
9344 }
9345
9346 /* Copy the declaration context to the new compile unit DIE.  This includes
9347    any surrounding namespace or type declarations.  If the DIE has an
9348    AT_specification attribute, it also includes attributes and children
9349    attached to the specification.  */
9350
9351 static void
9352 copy_declaration_context (dw_die_ref unit, dw_die_ref die)
9353 {
9354   dw_die_ref decl;
9355   dw_die_ref new_decl;
9356
9357   decl = get_AT_ref (die, DW_AT_specification);
9358   if (decl == NULL)
9359     decl = die;
9360   else
9361     {
9362       unsigned ix;
9363       dw_die_ref c;
9364       dw_attr_ref a;
9365
9366       /* Copy the type node pointer from the new DIE to the original
9367          declaration DIE so we can forward references later.  */
9368       decl->die_id.die_type_node = die->die_id.die_type_node;
9369
9370       remove_AT (die, DW_AT_specification);
9371
9372       for (ix = 0; VEC_iterate (dw_attr_node, decl->die_attr, ix, a); ix++)
9373         {
9374           if (a->dw_attr != DW_AT_name
9375               && a->dw_attr != DW_AT_declaration
9376               && a->dw_attr != DW_AT_external)
9377             add_dwarf_attr (die, a);
9378         }
9379
9380       FOR_EACH_CHILD (decl, c, add_child_die (die, clone_tree(c)));
9381     }
9382
9383   if (decl->die_parent != NULL
9384       && decl->die_parent->die_tag != DW_TAG_compile_unit
9385       && decl->die_parent->die_tag != DW_TAG_type_unit)
9386     {
9387       new_decl = copy_ancestor_tree (unit, decl, NULL);
9388       if (new_decl != NULL)
9389         {
9390           remove_AT (new_decl, DW_AT_signature);
9391           add_AT_specification (die, new_decl);
9392         }
9393     }
9394 }
9395
9396 /* Generate the skeleton ancestor tree for the given NODE, then clone
9397    the DIE and add the clone into the tree.  */
9398
9399 static void
9400 generate_skeleton_ancestor_tree (skeleton_chain_node *node)
9401 {
9402   if (node->new_die != NULL)
9403     return;
9404
9405   node->new_die = clone_as_declaration (node->old_die);
9406
9407   if (node->parent != NULL)
9408     {
9409       generate_skeleton_ancestor_tree (node->parent);
9410       add_child_die (node->parent->new_die, node->new_die);
9411     }
9412 }
9413
9414 /* Generate a skeleton tree of DIEs containing any declarations that are
9415    found in the original tree.  We traverse the tree looking for declaration
9416    DIEs, and construct the skeleton from the bottom up whenever we find one.  */
9417
9418 static void
9419 generate_skeleton_bottom_up (skeleton_chain_node *parent)
9420 {
9421   skeleton_chain_node node;
9422   dw_die_ref c;
9423   dw_die_ref first;
9424   dw_die_ref prev = NULL;
9425   dw_die_ref next = NULL;
9426
9427   node.parent = parent;
9428
9429   first = c = parent->old_die->die_child;
9430   if (c)
9431     next = c->die_sib;
9432   if (c) do {
9433     if (prev == NULL || prev->die_sib == c)
9434       prev = c;
9435     c = next;
9436     next = (c == first ? NULL : c->die_sib);
9437     node.old_die = c;
9438     node.new_die = NULL;
9439     if (is_declaration_die (c))
9440       {
9441         /* Clone the existing DIE, move the original to the skeleton
9442            tree (which is in the main CU), and put the clone, with
9443            all the original's children, where the original came from.  */
9444         dw_die_ref clone = clone_die (c);
9445         move_all_children (c, clone);
9446
9447         replace_child (c, clone, prev);
9448         generate_skeleton_ancestor_tree (parent);
9449         add_child_die (parent->new_die, c);
9450         node.new_die = c;
9451         c = clone;
9452       }
9453     generate_skeleton_bottom_up (&node);
9454   } while (next != NULL);
9455 }
9456
9457 /* Wrapper function for generate_skeleton_bottom_up.  */
9458
9459 static dw_die_ref
9460 generate_skeleton (dw_die_ref die)
9461 {
9462   skeleton_chain_node node;
9463
9464   node.old_die = die;
9465   node.new_die = NULL;
9466   node.parent = NULL;
9467
9468   /* If this type definition is nested inside another type,
9469      always leave at least a declaration in its place.  */
9470   if (die->die_parent != NULL && is_type_die (die->die_parent))
9471     node.new_die = clone_as_declaration (die);
9472
9473   generate_skeleton_bottom_up (&node);
9474   return node.new_die;
9475 }
9476
9477 /* Remove the DIE from its parent, possibly replacing it with a cloned
9478    declaration.  The original DIE will be moved to a new compile unit
9479    so that existing references to it follow it to the new location.  If
9480    any of the original DIE's descendants is a declaration, we need to
9481    replace the original DIE with a skeleton tree and move the
9482    declarations back into the skeleton tree.  */
9483
9484 static dw_die_ref
9485 remove_child_or_replace_with_skeleton (dw_die_ref child, dw_die_ref prev)
9486 {
9487   dw_die_ref skeleton;
9488
9489   skeleton = generate_skeleton (child);
9490   if (skeleton == NULL)
9491     remove_child_with_prev (child, prev);
9492   else
9493     {
9494       skeleton->die_id.die_type_node = child->die_id.die_type_node;
9495       replace_child (child, skeleton, prev);
9496     }
9497
9498   return skeleton;
9499 }
9500
9501 /* Traverse the DIE and set up additional .debug_types sections for each
9502    type worthy of being placed in a COMDAT section.  */
9503
9504 static void
9505 break_out_comdat_types (dw_die_ref die)
9506 {
9507   dw_die_ref c;
9508   dw_die_ref first;
9509   dw_die_ref prev = NULL;
9510   dw_die_ref next = NULL;
9511   dw_die_ref unit = NULL;
9512
9513   first = c = die->die_child;
9514   if (c)
9515     next = c->die_sib;
9516   if (c) do {
9517     if (prev == NULL || prev->die_sib == c)
9518       prev = c;
9519     c = next;
9520     next = (c == first ? NULL : c->die_sib);
9521     if (should_move_die_to_comdat (c))
9522       {
9523         dw_die_ref replacement;
9524         comdat_type_node_ref type_node;
9525
9526         /* Create a new type unit DIE as the root for the new tree, and
9527            add it to the list of comdat types.  */
9528         unit = new_die (DW_TAG_type_unit, NULL, NULL);
9529         add_AT_unsigned (unit, DW_AT_language,
9530                          get_AT_unsigned (comp_unit_die, DW_AT_language));
9531         type_node = GGC_CNEW (comdat_type_node);
9532         type_node->root_die = unit;
9533         type_node->next = comdat_type_list;
9534         comdat_type_list = type_node;
9535
9536         /* Generate the type signature.  */
9537         generate_type_signature (c, type_node);
9538
9539         /* Copy the declaration context, attributes, and children of the
9540            declaration into the new compile unit DIE.  */
9541         copy_declaration_context (unit, c);
9542
9543         /* Remove this DIE from the main CU.  */
9544         replacement = remove_child_or_replace_with_skeleton (c, prev);
9545
9546         /* Break out nested types into their own type units.  */
9547         break_out_comdat_types (c);
9548
9549         /* Add the DIE to the new compunit.  */
9550         add_child_die (unit, c);
9551
9552         if (replacement != NULL)
9553           c = replacement;
9554       }
9555     else if (c->die_tag == DW_TAG_namespace
9556              || c->die_tag == DW_TAG_class_type
9557              || c->die_tag == DW_TAG_structure_type
9558              || c->die_tag == DW_TAG_union_type)
9559       {
9560         /* Look for nested types that can be broken out.  */
9561         break_out_comdat_types (c);
9562       }
9563   } while (next != NULL);
9564 }
9565
9566 /* Structure to map a DIE in one CU to its copy in a comdat type unit.  */
9567
9568 struct decl_table_entry
9569 {
9570   dw_die_ref orig;
9571   dw_die_ref copy;
9572 };
9573
9574 /* Routines to manipulate hash table of copied declarations.  */
9575
9576 static hashval_t
9577 htab_decl_hash (const void *of)
9578 {
9579   const struct decl_table_entry *const entry =
9580     (const struct decl_table_entry *) of;
9581
9582   return htab_hash_pointer (entry->orig);
9583 }
9584
9585 static int
9586 htab_decl_eq (const void *of1, const void *of2)
9587 {
9588   const struct decl_table_entry *const entry1 =
9589     (const struct decl_table_entry *) of1;
9590   const struct die_struct *const entry2 = (const struct die_struct *) of2;
9591
9592   return entry1->orig == entry2;
9593 }
9594
9595 static void
9596 htab_decl_del (void *what)
9597 {
9598   struct decl_table_entry *entry = (struct decl_table_entry *) what;
9599
9600   free (entry);
9601 }
9602
9603 /* Copy DIE and its ancestors, up to, but not including, the compile unit
9604    or type unit entry, to a new tree.  Adds the new tree to UNIT and returns
9605    a pointer to the copy of DIE.  If DECL_TABLE is provided, it is used
9606    to check if the ancestor has already been copied into UNIT.  */
9607
9608 static dw_die_ref
9609 copy_ancestor_tree (dw_die_ref unit, dw_die_ref die, htab_t decl_table)
9610 {
9611   dw_die_ref parent = die->die_parent;
9612   dw_die_ref new_parent = unit;
9613   dw_die_ref copy;
9614   void **slot = NULL;
9615   struct decl_table_entry *entry = NULL;
9616
9617   if (decl_table)
9618     {
9619       /* Check if the entry has already been copied to UNIT.  */
9620       slot = htab_find_slot_with_hash (decl_table, die,
9621                                        htab_hash_pointer (die), INSERT);
9622       if (*slot != HTAB_EMPTY_ENTRY)
9623         {
9624           entry = (struct decl_table_entry *) *slot;
9625           return entry->copy;
9626         }
9627
9628       /* Record in DECL_TABLE that DIE has been copied to UNIT.  */
9629       entry = XCNEW (struct decl_table_entry);
9630       entry->orig = die;
9631       entry->copy = NULL;
9632       *slot = entry;
9633     }
9634
9635   if (parent != NULL)
9636     {
9637       dw_die_ref spec = get_AT_ref (parent, DW_AT_specification);
9638       if (spec != NULL)
9639         parent = spec;
9640       if (parent->die_tag != DW_TAG_compile_unit
9641           && parent->die_tag != DW_TAG_type_unit)
9642         new_parent = copy_ancestor_tree (unit, parent, decl_table);
9643     }
9644
9645   copy = clone_as_declaration (die);
9646   add_child_die (new_parent, copy);
9647
9648   if (decl_table != NULL)
9649     {
9650       /* Make sure the copy is marked as part of the type unit.  */
9651       copy->die_mark = 1;
9652       /* Record the pointer to the copy.  */
9653       entry->copy = copy;
9654     }
9655
9656   return copy;
9657 }
9658
9659 /* Walk the DIE and its children, looking for references to incomplete
9660    or trivial types that are unmarked (i.e., that are not in the current
9661    type_unit).  */
9662
9663 static void
9664 copy_decls_walk (dw_die_ref unit, dw_die_ref die, htab_t decl_table)
9665 {
9666   dw_die_ref c;
9667   dw_attr_ref a;
9668   unsigned ix;
9669
9670   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
9671     {
9672       if (AT_class (a) == dw_val_class_die_ref)
9673         {
9674           dw_die_ref targ = AT_ref (a);
9675           comdat_type_node_ref type_node = targ->die_id.die_type_node;
9676           void **slot;
9677           struct decl_table_entry *entry;
9678
9679           if (targ->die_mark != 0 || type_node != NULL)
9680             continue;
9681
9682           slot = htab_find_slot_with_hash (decl_table, targ,
9683                                            htab_hash_pointer (targ), INSERT);
9684
9685           if (*slot != HTAB_EMPTY_ENTRY)
9686             {
9687               /* TARG has already been copied, so we just need to
9688                  modify the reference to point to the copy.  */
9689               entry = (struct decl_table_entry *) *slot;
9690               a->dw_attr_val.v.val_die_ref.die = entry->copy;
9691             }
9692           else
9693             {
9694               dw_die_ref parent = unit;
9695               dw_die_ref copy = clone_tree (targ);
9696
9697               /* Make sure the cloned tree is marked as part of the
9698                  type unit.  */
9699               mark_dies (copy);
9700
9701               /* Record in DECL_TABLE that TARG has been copied.
9702                  Need to do this now, before the recursive call,
9703                  because DECL_TABLE may be expanded and SLOT
9704                  would no longer be a valid pointer.  */
9705               entry = XCNEW (struct decl_table_entry);
9706               entry->orig = targ;
9707               entry->copy = copy;
9708               *slot = entry;
9709
9710               /* If TARG has surrounding context, copy its ancestor tree
9711                  into the new type unit.  */
9712               if (targ->die_parent != NULL
9713                   && targ->die_parent->die_tag != DW_TAG_compile_unit
9714                   && targ->die_parent->die_tag != DW_TAG_type_unit)
9715                 parent = copy_ancestor_tree (unit, targ->die_parent,
9716                                              decl_table);
9717
9718               add_child_die (parent, copy);
9719               a->dw_attr_val.v.val_die_ref.die = copy;
9720
9721               /* Make sure the newly-copied DIE is walked.  If it was
9722                  installed in a previously-added context, it won't
9723                  get visited otherwise.  */
9724               if (parent != unit)
9725                 copy_decls_walk (unit, parent, decl_table);
9726             }
9727         }
9728     }
9729
9730   FOR_EACH_CHILD (die, c, copy_decls_walk (unit, c, decl_table));
9731 }
9732
9733 /* Copy declarations for "unworthy" types into the new comdat section.
9734    Incomplete types, modified types, and certain other types aren't broken
9735    out into comdat sections of their own, so they don't have a signature,
9736    and we need to copy the declaration into the same section so that we
9737    don't have an external reference.  */
9738
9739 static void
9740 copy_decls_for_unworthy_types (dw_die_ref unit)
9741 {
9742   htab_t decl_table;
9743
9744   mark_dies (unit);
9745   decl_table = htab_create (10, htab_decl_hash, htab_decl_eq, htab_decl_del);
9746   copy_decls_walk (unit, unit, decl_table);
9747   htab_delete (decl_table);
9748   unmark_dies (unit);
9749 }
9750
9751 /* Traverse the DIE and add a sibling attribute if it may have the
9752    effect of speeding up access to siblings.  To save some space,
9753    avoid generating sibling attributes for DIE's without children.  */
9754
9755 static void
9756 add_sibling_attributes (dw_die_ref die)
9757 {
9758   dw_die_ref c;
9759
9760   if (! die->die_child)
9761     return;
9762
9763   if (die->die_parent && die != die->die_parent->die_child)
9764     add_AT_die_ref (die, DW_AT_sibling, die->die_sib);
9765
9766   FOR_EACH_CHILD (die, c, add_sibling_attributes (c));
9767 }
9768
9769 /* Output all location lists for the DIE and its children.  */
9770
9771 static void
9772 output_location_lists (dw_die_ref die)
9773 {
9774   dw_die_ref c;
9775   dw_attr_ref a;
9776   unsigned ix;
9777
9778   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
9779     if (AT_class (a) == dw_val_class_loc_list)
9780       output_loc_list (AT_loc_list (a));
9781
9782   FOR_EACH_CHILD (die, c, output_location_lists (c));
9783 }
9784
9785 /* The format of each DIE (and its attribute value pairs) is encoded in an
9786    abbreviation table.  This routine builds the abbreviation table and assigns
9787    a unique abbreviation id for each abbreviation entry.  The children of each
9788    die are visited recursively.  */
9789
9790 static void
9791 build_abbrev_table (dw_die_ref die)
9792 {
9793   unsigned long abbrev_id;
9794   unsigned int n_alloc;
9795   dw_die_ref c;
9796   dw_attr_ref a;
9797   unsigned ix;
9798
9799   /* Scan the DIE references, and mark as external any that refer to
9800      DIEs from other CUs (i.e. those which are not marked).  */
9801   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
9802     if (AT_class (a) == dw_val_class_die_ref
9803         && AT_ref (a)->die_mark == 0)
9804       {
9805         gcc_assert (dwarf_version >= 4 || AT_ref (a)->die_id.die_symbol);
9806         set_AT_ref_external (a, 1);
9807       }
9808
9809   for (abbrev_id = 1; abbrev_id < abbrev_die_table_in_use; ++abbrev_id)
9810     {
9811       dw_die_ref abbrev = abbrev_die_table[abbrev_id];
9812       dw_attr_ref die_a, abbrev_a;
9813       unsigned ix;
9814       bool ok = true;
9815
9816       if (abbrev->die_tag != die->die_tag)
9817         continue;
9818       if ((abbrev->die_child != NULL) != (die->die_child != NULL))
9819         continue;
9820
9821       if (VEC_length (dw_attr_node, abbrev->die_attr)
9822           != VEC_length (dw_attr_node, die->die_attr))
9823         continue;
9824
9825       for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, die_a); ix++)
9826         {
9827           abbrev_a = VEC_index (dw_attr_node, abbrev->die_attr, ix);
9828           if ((abbrev_a->dw_attr != die_a->dw_attr)
9829               || (value_format (abbrev_a) != value_format (die_a)))
9830             {
9831               ok = false;
9832               break;
9833             }
9834         }
9835       if (ok)
9836         break;
9837     }
9838
9839   if (abbrev_id >= abbrev_die_table_in_use)
9840     {
9841       if (abbrev_die_table_in_use >= abbrev_die_table_allocated)
9842         {
9843           n_alloc = abbrev_die_table_allocated + ABBREV_DIE_TABLE_INCREMENT;
9844           abbrev_die_table = GGC_RESIZEVEC (dw_die_ref, abbrev_die_table,
9845                                             n_alloc);
9846
9847           memset (&abbrev_die_table[abbrev_die_table_allocated], 0,
9848                  (n_alloc - abbrev_die_table_allocated) * sizeof (dw_die_ref));
9849           abbrev_die_table_allocated = n_alloc;
9850         }
9851
9852       ++abbrev_die_table_in_use;
9853       abbrev_die_table[abbrev_id] = die;
9854     }
9855
9856   die->die_abbrev = abbrev_id;
9857   FOR_EACH_CHILD (die, c, build_abbrev_table (c));
9858 }
9859 \f
9860 /* Return the power-of-two number of bytes necessary to represent VALUE.  */
9861
9862 static int
9863 constant_size (unsigned HOST_WIDE_INT value)
9864 {
9865   int log;
9866
9867   if (value == 0)
9868     log = 0;
9869   else
9870     log = floor_log2 (value);
9871
9872   log = log / 8;
9873   log = 1 << (floor_log2 (log) + 1);
9874
9875   return log;
9876 }
9877
9878 /* Return the size of a DIE as it is represented in the
9879    .debug_info section.  */
9880
9881 static unsigned long
9882 size_of_die (dw_die_ref die)
9883 {
9884   unsigned long size = 0;
9885   dw_attr_ref a;
9886   unsigned ix;
9887
9888   size += size_of_uleb128 (die->die_abbrev);
9889   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
9890     {
9891       switch (AT_class (a))
9892         {
9893         case dw_val_class_addr:
9894           size += DWARF2_ADDR_SIZE;
9895           break;
9896         case dw_val_class_offset:
9897           size += DWARF_OFFSET_SIZE;
9898           break;
9899         case dw_val_class_loc:
9900           {
9901             unsigned long lsize = size_of_locs (AT_loc (a));
9902
9903             /* Block length.  */
9904             if (dwarf_version >= 4)
9905               size += size_of_uleb128 (lsize);
9906             else
9907               size += constant_size (lsize);
9908             size += lsize;
9909           }
9910           break;
9911         case dw_val_class_loc_list:
9912           size += DWARF_OFFSET_SIZE;
9913           break;
9914         case dw_val_class_range_list:
9915           size += DWARF_OFFSET_SIZE;
9916           break;
9917         case dw_val_class_const:
9918           size += size_of_sleb128 (AT_int (a));
9919           break;
9920         case dw_val_class_unsigned_const:
9921           size += constant_size (AT_unsigned (a));
9922           break;
9923         case dw_val_class_const_double:
9924           size += 2 * HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR;
9925           if (HOST_BITS_PER_WIDE_INT >= 64)
9926             size++; /* block */
9927           break;
9928         case dw_val_class_vec:
9929           size += constant_size (a->dw_attr_val.v.val_vec.length
9930                                  * a->dw_attr_val.v.val_vec.elt_size)
9931                   + a->dw_attr_val.v.val_vec.length
9932                     * a->dw_attr_val.v.val_vec.elt_size; /* block */
9933           break;
9934         case dw_val_class_flag:
9935           if (dwarf_version >= 4)
9936             /* Currently all add_AT_flag calls pass in 1 as last argument,
9937                so DW_FORM_flag_present can be used.  If that ever changes,
9938                we'll need to use DW_FORM_flag and have some optimization
9939                in build_abbrev_table that will change those to
9940                DW_FORM_flag_present if it is set to 1 in all DIEs using
9941                the same abbrev entry.  */
9942             gcc_assert (a->dw_attr_val.v.val_flag == 1);
9943           else
9944             size += 1;
9945           break;
9946         case dw_val_class_die_ref:
9947           if (AT_ref_external (a))
9948             {
9949               /* In DWARF4, we use DW_FORM_sig8; for earlier versions
9950                  we use DW_FORM_ref_addr.  In DWARF2, DW_FORM_ref_addr
9951                  is sized by target address length, whereas in DWARF3
9952                  it's always sized as an offset.  */
9953               if (dwarf_version >= 4)
9954                 size += DWARF_TYPE_SIGNATURE_SIZE;
9955               else if (dwarf_version == 2)
9956                 size += DWARF2_ADDR_SIZE;
9957               else
9958                 size += DWARF_OFFSET_SIZE;
9959             }
9960           else
9961             size += DWARF_OFFSET_SIZE;
9962           break;
9963         case dw_val_class_fde_ref:
9964           size += DWARF_OFFSET_SIZE;
9965           break;
9966         case dw_val_class_lbl_id:
9967           size += DWARF2_ADDR_SIZE;
9968           break;
9969         case dw_val_class_lineptr:
9970         case dw_val_class_macptr:
9971           size += DWARF_OFFSET_SIZE;
9972           break;
9973         case dw_val_class_str:
9974           if (AT_string_form (a) == DW_FORM_strp)
9975             size += DWARF_OFFSET_SIZE;
9976           else
9977             size += strlen (a->dw_attr_val.v.val_str->str) + 1;
9978           break;
9979         case dw_val_class_file:
9980           size += constant_size (maybe_emit_file (a->dw_attr_val.v.val_file));
9981           break;
9982         case dw_val_class_data8:
9983           size += 8;
9984           break;
9985         default:
9986           gcc_unreachable ();
9987         }
9988     }
9989
9990   return size;
9991 }
9992
9993 /* Size the debugging information associated with a given DIE.  Visits the
9994    DIE's children recursively.  Updates the global variable next_die_offset, on
9995    each time through.  Uses the current value of next_die_offset to update the
9996    die_offset field in each DIE.  */
9997
9998 static void
9999 calc_die_sizes (dw_die_ref die)
10000 {
10001   dw_die_ref c;
10002
10003   die->die_offset = next_die_offset;
10004   next_die_offset += size_of_die (die);
10005
10006   FOR_EACH_CHILD (die, c, calc_die_sizes (c));
10007
10008   if (die->die_child != NULL)
10009     /* Count the null byte used to terminate sibling lists.  */
10010     next_die_offset += 1;
10011 }
10012
10013 /* Set the marks for a die and its children.  We do this so
10014    that we know whether or not a reference needs to use FORM_ref_addr; only
10015    DIEs in the same CU will be marked.  We used to clear out the offset
10016    and use that as the flag, but ran into ordering problems.  */
10017
10018 static void
10019 mark_dies (dw_die_ref die)
10020 {
10021   dw_die_ref c;
10022
10023   gcc_assert (!die->die_mark);
10024
10025   die->die_mark = 1;
10026   FOR_EACH_CHILD (die, c, mark_dies (c));
10027 }
10028
10029 /* Clear the marks for a die and its children.  */
10030
10031 static void
10032 unmark_dies (dw_die_ref die)
10033 {
10034   dw_die_ref c;
10035
10036   if (dwarf_version < 4)
10037     gcc_assert (die->die_mark);
10038
10039   die->die_mark = 0;
10040   FOR_EACH_CHILD (die, c, unmark_dies (c));
10041 }
10042
10043 /* Clear the marks for a die, its children and referred dies.  */
10044
10045 static void
10046 unmark_all_dies (dw_die_ref die)
10047 {
10048   dw_die_ref c;
10049   dw_attr_ref a;
10050   unsigned ix;
10051
10052   if (!die->die_mark)
10053     return;
10054   die->die_mark = 0;
10055
10056   FOR_EACH_CHILD (die, c, unmark_all_dies (c));
10057
10058   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
10059     if (AT_class (a) == dw_val_class_die_ref)
10060       unmark_all_dies (AT_ref (a));
10061 }
10062
10063 /* Return the size of the .debug_pubnames or .debug_pubtypes table
10064    generated for the compilation unit.  */
10065
10066 static unsigned long
10067 size_of_pubnames (VEC (pubname_entry, gc) * names)
10068 {
10069   unsigned long size;
10070   unsigned i;
10071   pubname_ref p;
10072
10073   size = DWARF_PUBNAMES_HEADER_SIZE;
10074   for (i = 0; VEC_iterate (pubname_entry, names, i, p); i++)
10075     if (names != pubtype_table
10076         || p->die->die_offset != 0
10077         || !flag_eliminate_unused_debug_types)
10078       size += strlen (p->name) + DWARF_OFFSET_SIZE + 1;
10079
10080   size += DWARF_OFFSET_SIZE;
10081   return size;
10082 }
10083
10084 /* Return the size of the information in the .debug_aranges section.  */
10085
10086 static unsigned long
10087 size_of_aranges (void)
10088 {
10089   unsigned long size;
10090
10091   size = DWARF_ARANGES_HEADER_SIZE;
10092
10093   /* Count the address/length pair for this compilation unit.  */
10094   if (text_section_used)
10095     size += 2 * DWARF2_ADDR_SIZE;
10096   if (cold_text_section_used)
10097     size += 2 * DWARF2_ADDR_SIZE;
10098   size += 2 * DWARF2_ADDR_SIZE * arange_table_in_use;
10099
10100   /* Count the two zero words used to terminated the address range table.  */
10101   size += 2 * DWARF2_ADDR_SIZE;
10102   return size;
10103 }
10104 \f
10105 /* Select the encoding of an attribute value.  */
10106
10107 static enum dwarf_form
10108 value_format (dw_attr_ref a)
10109 {
10110   switch (a->dw_attr_val.val_class)
10111     {
10112     case dw_val_class_addr:
10113       /* Only very few attributes allow DW_FORM_addr.  */
10114       switch (a->dw_attr)
10115         {
10116         case DW_AT_low_pc:
10117         case DW_AT_high_pc:
10118         case DW_AT_entry_pc:
10119         case DW_AT_trampoline:
10120           return DW_FORM_addr;
10121         default:
10122           break;
10123         }
10124       switch (DWARF2_ADDR_SIZE)
10125         {
10126         case 1:
10127           return DW_FORM_data1;
10128         case 2:
10129           return DW_FORM_data2;
10130         case 4:
10131           return DW_FORM_data4;
10132         case 8:
10133           return DW_FORM_data8;
10134         default:
10135           gcc_unreachable ();
10136         }
10137     case dw_val_class_range_list:
10138     case dw_val_class_loc_list:
10139       if (dwarf_version >= 4)
10140         return DW_FORM_sec_offset;
10141       /* FALLTHRU */
10142     case dw_val_class_offset:
10143       switch (DWARF_OFFSET_SIZE)
10144         {
10145         case 4:
10146           return DW_FORM_data4;
10147         case 8:
10148           return DW_FORM_data8;
10149         default:
10150           gcc_unreachable ();
10151         }
10152     case dw_val_class_loc:
10153       if (dwarf_version >= 4)
10154         return DW_FORM_exprloc;
10155       switch (constant_size (size_of_locs (AT_loc (a))))
10156         {
10157         case 1:
10158           return DW_FORM_block1;
10159         case 2:
10160           return DW_FORM_block2;
10161         default:
10162           gcc_unreachable ();
10163         }
10164     case dw_val_class_const:
10165       return DW_FORM_sdata;
10166     case dw_val_class_unsigned_const:
10167       switch (constant_size (AT_unsigned (a)))
10168         {
10169         case 1:
10170           return DW_FORM_data1;
10171         case 2:
10172           return DW_FORM_data2;
10173         case 4:
10174           return DW_FORM_data4;
10175         case 8:
10176           return DW_FORM_data8;
10177         default:
10178           gcc_unreachable ();
10179         }
10180     case dw_val_class_const_double:
10181       switch (HOST_BITS_PER_WIDE_INT)
10182         {
10183         case 8:
10184           return DW_FORM_data2;
10185         case 16:
10186           return DW_FORM_data4;
10187         case 32:
10188           return DW_FORM_data8;
10189         case 64:
10190         default:
10191           return DW_FORM_block1;
10192         }
10193     case dw_val_class_vec:
10194       switch (constant_size (a->dw_attr_val.v.val_vec.length
10195                              * a->dw_attr_val.v.val_vec.elt_size))
10196         {
10197         case 1:
10198           return DW_FORM_block1;
10199         case 2:
10200           return DW_FORM_block2;
10201         case 4:
10202           return DW_FORM_block4;
10203         default:
10204           gcc_unreachable ();
10205         }
10206     case dw_val_class_flag:
10207       if (dwarf_version >= 4)
10208         {
10209           /* Currently all add_AT_flag calls pass in 1 as last argument,
10210              so DW_FORM_flag_present can be used.  If that ever changes,
10211              we'll need to use DW_FORM_flag and have some optimization
10212              in build_abbrev_table that will change those to
10213              DW_FORM_flag_present if it is set to 1 in all DIEs using
10214              the same abbrev entry.  */
10215           gcc_assert (a->dw_attr_val.v.val_flag == 1);
10216           return DW_FORM_flag_present;
10217         }
10218       return DW_FORM_flag;
10219     case dw_val_class_die_ref:
10220       if (AT_ref_external (a))
10221         return dwarf_version >= 4 ? DW_FORM_sig8 : DW_FORM_ref_addr;
10222       else
10223         return DW_FORM_ref;
10224     case dw_val_class_fde_ref:
10225       return DW_FORM_data;
10226     case dw_val_class_lbl_id:
10227       return DW_FORM_addr;
10228     case dw_val_class_lineptr:
10229     case dw_val_class_macptr:
10230       return dwarf_version >= 4 ? DW_FORM_sec_offset : DW_FORM_data;
10231     case dw_val_class_str:
10232       return AT_string_form (a);
10233     case dw_val_class_file:
10234       switch (constant_size (maybe_emit_file (a->dw_attr_val.v.val_file)))
10235         {
10236         case 1:
10237           return DW_FORM_data1;
10238         case 2:
10239           return DW_FORM_data2;
10240         case 4:
10241           return DW_FORM_data4;
10242         default:
10243           gcc_unreachable ();
10244         }
10245
10246     case dw_val_class_data8:
10247       return DW_FORM_data8;
10248
10249     default:
10250       gcc_unreachable ();
10251     }
10252 }
10253
10254 /* Output the encoding of an attribute value.  */
10255
10256 static void
10257 output_value_format (dw_attr_ref a)
10258 {
10259   enum dwarf_form form = value_format (a);
10260
10261   dw2_asm_output_data_uleb128 (form, "(%s)", dwarf_form_name (form));
10262 }
10263
10264 /* Output the .debug_abbrev section which defines the DIE abbreviation
10265    table.  */
10266
10267 static void
10268 output_abbrev_section (void)
10269 {
10270   unsigned long abbrev_id;
10271
10272   for (abbrev_id = 1; abbrev_id < abbrev_die_table_in_use; ++abbrev_id)
10273     {
10274       dw_die_ref abbrev = abbrev_die_table[abbrev_id];
10275       unsigned ix;
10276       dw_attr_ref a_attr;
10277
10278       dw2_asm_output_data_uleb128 (abbrev_id, "(abbrev code)");
10279       dw2_asm_output_data_uleb128 (abbrev->die_tag, "(TAG: %s)",
10280                                    dwarf_tag_name (abbrev->die_tag));
10281
10282       if (abbrev->die_child != NULL)
10283         dw2_asm_output_data (1, DW_children_yes, "DW_children_yes");
10284       else
10285         dw2_asm_output_data (1, DW_children_no, "DW_children_no");
10286
10287       for (ix = 0; VEC_iterate (dw_attr_node, abbrev->die_attr, ix, a_attr);
10288            ix++)
10289         {
10290           dw2_asm_output_data_uleb128 (a_attr->dw_attr, "(%s)",
10291                                        dwarf_attr_name (a_attr->dw_attr));
10292           output_value_format (a_attr);
10293         }
10294
10295       dw2_asm_output_data (1, 0, NULL);
10296       dw2_asm_output_data (1, 0, NULL);
10297     }
10298
10299   /* Terminate the table.  */
10300   dw2_asm_output_data (1, 0, NULL);
10301 }
10302
10303 /* Output a symbol we can use to refer to this DIE from another CU.  */
10304
10305 static inline void
10306 output_die_symbol (dw_die_ref die)
10307 {
10308   char *sym = die->die_id.die_symbol;
10309
10310   if (sym == 0)
10311     return;
10312
10313   if (strncmp (sym, DIE_LABEL_PREFIX, sizeof (DIE_LABEL_PREFIX) - 1) == 0)
10314     /* We make these global, not weak; if the target doesn't support
10315        .linkonce, it doesn't support combining the sections, so debugging
10316        will break.  */
10317     targetm.asm_out.globalize_label (asm_out_file, sym);
10318
10319   ASM_OUTPUT_LABEL (asm_out_file, sym);
10320 }
10321
10322 /* Return a new location list, given the begin and end range, and the
10323    expression.  */
10324
10325 static inline dw_loc_list_ref
10326 new_loc_list (dw_loc_descr_ref expr, const char *begin, const char *end,
10327               const char *section)
10328 {
10329   dw_loc_list_ref retlist = GGC_CNEW (dw_loc_list_node);
10330
10331   retlist->begin = begin;
10332   retlist->end = end;
10333   retlist->expr = expr;
10334   retlist->section = section;
10335
10336   return retlist;
10337 }
10338
10339 /* Generate a new internal symbol for this location list node, if it
10340    hasn't got one yet.  */
10341
10342 static inline void
10343 gen_llsym (dw_loc_list_ref list)
10344 {
10345   gcc_assert (!list->ll_symbol);
10346   list->ll_symbol = gen_internal_sym ("LLST");
10347 }
10348
10349 /* Output the location list given to us.  */
10350
10351 static void
10352 output_loc_list (dw_loc_list_ref list_head)
10353 {
10354   dw_loc_list_ref curr = list_head;
10355
10356   ASM_OUTPUT_LABEL (asm_out_file, list_head->ll_symbol);
10357
10358   /* Walk the location list, and output each range + expression.  */
10359   for (curr = list_head; curr != NULL; curr = curr->dw_loc_next)
10360     {
10361       unsigned long size;
10362       /* Don't output an entry that starts and ends at the same address.  */
10363       if (strcmp (curr->begin, curr->end) == 0)
10364         continue;
10365       if (!have_multiple_function_sections)
10366         {
10367           dw2_asm_output_delta (DWARF2_ADDR_SIZE, curr->begin, curr->section,
10368                                 "Location list begin address (%s)",
10369                                 list_head->ll_symbol);
10370           dw2_asm_output_delta (DWARF2_ADDR_SIZE, curr->end, curr->section,
10371                                 "Location list end address (%s)",
10372                                 list_head->ll_symbol);
10373         }
10374       else
10375         {
10376           dw2_asm_output_addr (DWARF2_ADDR_SIZE, curr->begin,
10377                                "Location list begin address (%s)",
10378                                list_head->ll_symbol);
10379           dw2_asm_output_addr (DWARF2_ADDR_SIZE, curr->end,
10380                                "Location list end address (%s)",
10381                                list_head->ll_symbol);
10382         }
10383       size = size_of_locs (curr->expr);
10384
10385       /* Output the block length for this list of location operations.  */
10386       gcc_assert (size <= 0xffff);
10387       dw2_asm_output_data (2, size, "%s", "Location expression size");
10388
10389       output_loc_sequence (curr->expr);
10390     }
10391
10392   dw2_asm_output_data (DWARF2_ADDR_SIZE, 0,
10393                        "Location list terminator begin (%s)",
10394                        list_head->ll_symbol);
10395   dw2_asm_output_data (DWARF2_ADDR_SIZE, 0,
10396                        "Location list terminator end (%s)",
10397                        list_head->ll_symbol);
10398 }
10399
10400 /* Output a type signature.  */
10401
10402 static inline void
10403 output_signature (const char *sig, const char *name)
10404 {
10405   int i;
10406
10407   for (i = 0; i < DWARF_TYPE_SIGNATURE_SIZE; i++)
10408     dw2_asm_output_data (1, sig[i], i == 0 ? "%s" : NULL, name);
10409 }
10410
10411 /* Output the DIE and its attributes.  Called recursively to generate
10412    the definitions of each child DIE.  */
10413
10414 static void
10415 output_die (dw_die_ref die)
10416 {
10417   dw_attr_ref a;
10418   dw_die_ref c;
10419   unsigned long size;
10420   unsigned ix;
10421
10422   /* If someone in another CU might refer to us, set up a symbol for
10423      them to point to.  */
10424   if (dwarf_version < 4 && die->die_id.die_symbol)
10425     output_die_symbol (die);
10426
10427   dw2_asm_output_data_uleb128 (die->die_abbrev, "(DIE (%#lx) %s)",
10428                                (unsigned long)die->die_offset,
10429                                dwarf_tag_name (die->die_tag));
10430
10431   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
10432     {
10433       const char *name = dwarf_attr_name (a->dw_attr);
10434
10435       switch (AT_class (a))
10436         {
10437         case dw_val_class_addr:
10438           dw2_asm_output_addr_rtx (DWARF2_ADDR_SIZE, AT_addr (a), "%s", name);
10439           break;
10440
10441         case dw_val_class_offset:
10442           dw2_asm_output_data (DWARF_OFFSET_SIZE, a->dw_attr_val.v.val_offset,
10443                                "%s", name);
10444           break;
10445
10446         case dw_val_class_range_list:
10447           {
10448             char *p = strchr (ranges_section_label, '\0');
10449
10450             sprintf (p, "+" HOST_WIDE_INT_PRINT_HEX,
10451                      a->dw_attr_val.v.val_offset);
10452             dw2_asm_output_offset (DWARF_OFFSET_SIZE, ranges_section_label,
10453                                    debug_ranges_section, "%s", name);
10454             *p = '\0';
10455           }
10456           break;
10457
10458         case dw_val_class_loc:
10459           size = size_of_locs (AT_loc (a));
10460
10461           /* Output the block length for this list of location operations.  */
10462           if (dwarf_version >= 4)
10463             dw2_asm_output_data_uleb128 (size, "%s", name);
10464           else
10465             dw2_asm_output_data (constant_size (size), size, "%s", name);
10466
10467           output_loc_sequence (AT_loc (a));
10468           break;
10469
10470         case dw_val_class_const:
10471           /* ??? It would be slightly more efficient to use a scheme like is
10472              used for unsigned constants below, but gdb 4.x does not sign
10473              extend.  Gdb 5.x does sign extend.  */
10474           dw2_asm_output_data_sleb128 (AT_int (a), "%s", name);
10475           break;
10476
10477         case dw_val_class_unsigned_const:
10478           dw2_asm_output_data (constant_size (AT_unsigned (a)),
10479                                AT_unsigned (a), "%s", name);
10480           break;
10481
10482         case dw_val_class_const_double:
10483           {
10484             unsigned HOST_WIDE_INT first, second;
10485
10486             if (HOST_BITS_PER_WIDE_INT >= 64)
10487               dw2_asm_output_data (1,
10488                                    2 * HOST_BITS_PER_WIDE_INT
10489                                    / HOST_BITS_PER_CHAR,
10490                                    NULL);
10491
10492             if (WORDS_BIG_ENDIAN)
10493               {
10494                 first = a->dw_attr_val.v.val_double.high;
10495                 second = a->dw_attr_val.v.val_double.low;
10496               }
10497             else
10498               {
10499                 first = a->dw_attr_val.v.val_double.low;
10500                 second = a->dw_attr_val.v.val_double.high;
10501               }
10502
10503             dw2_asm_output_data (HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR,
10504                                  first, name);
10505             dw2_asm_output_data (HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR,
10506                                  second, NULL);
10507           }
10508           break;
10509
10510         case dw_val_class_vec:
10511           {
10512             unsigned int elt_size = a->dw_attr_val.v.val_vec.elt_size;
10513             unsigned int len = a->dw_attr_val.v.val_vec.length;
10514             unsigned int i;
10515             unsigned char *p;
10516
10517             dw2_asm_output_data (constant_size (len * elt_size),
10518                                  len * elt_size, "%s", name);
10519             if (elt_size > sizeof (HOST_WIDE_INT))
10520               {
10521                 elt_size /= 2;
10522                 len *= 2;
10523               }
10524             for (i = 0, p = a->dw_attr_val.v.val_vec.array;
10525                  i < len;
10526                  i++, p += elt_size)
10527               dw2_asm_output_data (elt_size, extract_int (p, elt_size),
10528                                    "fp or vector constant word %u", i);
10529             break;
10530           }
10531
10532         case dw_val_class_flag:
10533           if (dwarf_version >= 4)
10534             {
10535               /* Currently all add_AT_flag calls pass in 1 as last argument,
10536                  so DW_FORM_flag_present can be used.  If that ever changes,
10537                  we'll need to use DW_FORM_flag and have some optimization
10538                  in build_abbrev_table that will change those to
10539                  DW_FORM_flag_present if it is set to 1 in all DIEs using
10540                  the same abbrev entry.  */
10541               gcc_assert (AT_flag (a) == 1);
10542               if (flag_debug_asm)
10543                 fprintf (asm_out_file, "\t\t\t%s %s\n",
10544                          ASM_COMMENT_START, name);
10545               break;
10546             }
10547           dw2_asm_output_data (1, AT_flag (a), "%s", name);
10548           break;
10549
10550         case dw_val_class_loc_list:
10551           {
10552             char *sym = AT_loc_list (a)->ll_symbol;
10553
10554             gcc_assert (sym);
10555             dw2_asm_output_offset (DWARF_OFFSET_SIZE, sym, debug_loc_section,
10556                                    "%s", name);
10557           }
10558           break;
10559
10560         case dw_val_class_die_ref:
10561           if (AT_ref_external (a))
10562             {
10563               if (dwarf_version >= 4)
10564                 {
10565                   comdat_type_node_ref type_node =
10566                     AT_ref (a)->die_id.die_type_node;
10567
10568                   gcc_assert (type_node);
10569                   output_signature (type_node->signature, name);
10570                 }
10571               else
10572                 {
10573                   char *sym = AT_ref (a)->die_id.die_symbol;
10574                   int size;
10575
10576                   gcc_assert (sym);
10577                   /* In DWARF2, DW_FORM_ref_addr is sized by target address
10578                      length, whereas in DWARF3 it's always sized as an
10579                      offset.  */
10580                   if (dwarf_version == 2)
10581                     size = DWARF2_ADDR_SIZE;
10582                   else
10583                     size = DWARF_OFFSET_SIZE;
10584                   dw2_asm_output_offset (size, sym, debug_info_section, "%s",
10585                                          name);
10586                 }
10587             }
10588           else
10589             {
10590               gcc_assert (AT_ref (a)->die_offset);
10591               dw2_asm_output_data (DWARF_OFFSET_SIZE, AT_ref (a)->die_offset,
10592                                    "%s", name);
10593             }
10594           break;
10595
10596         case dw_val_class_fde_ref:
10597           {
10598             char l1[20];
10599
10600             ASM_GENERATE_INTERNAL_LABEL (l1, FDE_LABEL,
10601                                          a->dw_attr_val.v.val_fde_index * 2);
10602             dw2_asm_output_offset (DWARF_OFFSET_SIZE, l1, debug_frame_section,
10603                                    "%s", name);
10604           }
10605           break;
10606
10607         case dw_val_class_lbl_id:
10608           dw2_asm_output_addr (DWARF2_ADDR_SIZE, AT_lbl (a), "%s", name);
10609           break;
10610
10611         case dw_val_class_lineptr:
10612           dw2_asm_output_offset (DWARF_OFFSET_SIZE, AT_lbl (a),
10613                                  debug_line_section, "%s", name);
10614           break;
10615
10616         case dw_val_class_macptr:
10617           dw2_asm_output_offset (DWARF_OFFSET_SIZE, AT_lbl (a),
10618                                  debug_macinfo_section, "%s", name);
10619           break;
10620
10621         case dw_val_class_str:
10622           if (AT_string_form (a) == DW_FORM_strp)
10623             dw2_asm_output_offset (DWARF_OFFSET_SIZE,
10624                                    a->dw_attr_val.v.val_str->label,
10625                                    debug_str_section,
10626                                    "%s: \"%s\"", name, AT_string (a));
10627           else
10628             dw2_asm_output_nstring (AT_string (a), -1, "%s", name);
10629           break;
10630
10631         case dw_val_class_file:
10632           {
10633             int f = maybe_emit_file (a->dw_attr_val.v.val_file);
10634
10635             dw2_asm_output_data (constant_size (f), f, "%s (%s)", name,
10636                                  a->dw_attr_val.v.val_file->filename);
10637             break;
10638           }
10639
10640         case dw_val_class_data8:
10641           {
10642             int i;
10643
10644             for (i = 0; i < 8; i++)
10645               dw2_asm_output_data (1, a->dw_attr_val.v.val_data8[i],
10646                                    i == 0 ? "%s" : NULL, name);
10647             break;
10648           }
10649
10650         default:
10651           gcc_unreachable ();
10652         }
10653     }
10654
10655   FOR_EACH_CHILD (die, c, output_die (c));
10656
10657   /* Add null byte to terminate sibling list.  */
10658   if (die->die_child != NULL)
10659     dw2_asm_output_data (1, 0, "end of children of DIE %#lx",
10660                          (unsigned long) die->die_offset);
10661 }
10662
10663 /* Output the compilation unit that appears at the beginning of the
10664    .debug_info section, and precedes the DIE descriptions.  */
10665
10666 static void
10667 output_compilation_unit_header (void)
10668 {
10669   int ver = dwarf_version;
10670
10671   if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
10672     dw2_asm_output_data (4, 0xffffffff,
10673       "Initial length escape value indicating 64-bit DWARF extension");
10674   dw2_asm_output_data (DWARF_OFFSET_SIZE,
10675                        next_die_offset - DWARF_INITIAL_LENGTH_SIZE,
10676                        "Length of Compilation Unit Info");
10677   dw2_asm_output_data (2, ver, "DWARF version number");
10678   dw2_asm_output_offset (DWARF_OFFSET_SIZE, abbrev_section_label,
10679                          debug_abbrev_section,
10680                          "Offset Into Abbrev. Section");
10681   dw2_asm_output_data (1, DWARF2_ADDR_SIZE, "Pointer Size (in bytes)");
10682 }
10683
10684 /* Output the compilation unit DIE and its children.  */
10685
10686 static void
10687 output_comp_unit (dw_die_ref die, int output_if_empty)
10688 {
10689   const char *secname;
10690   char *oldsym, *tmp;
10691
10692   /* Unless we are outputting main CU, we may throw away empty ones.  */
10693   if (!output_if_empty && die->die_child == NULL)
10694     return;
10695
10696   /* Even if there are no children of this DIE, we must output the information
10697      about the compilation unit.  Otherwise, on an empty translation unit, we
10698      will generate a present, but empty, .debug_info section.  IRIX 6.5 `nm'
10699      will then complain when examining the file.  First mark all the DIEs in
10700      this CU so we know which get local refs.  */
10701   mark_dies (die);
10702
10703   build_abbrev_table (die);
10704
10705   /* Initialize the beginning DIE offset - and calculate sizes/offsets.  */
10706   next_die_offset = DWARF_COMPILE_UNIT_HEADER_SIZE;
10707   calc_die_sizes (die);
10708
10709   oldsym = die->die_id.die_symbol;
10710   if (oldsym)
10711     {
10712       tmp = XALLOCAVEC (char, strlen (oldsym) + 24);
10713
10714       sprintf (tmp, ".gnu.linkonce.wi.%s", oldsym);
10715       secname = tmp;
10716       die->die_id.die_symbol = NULL;
10717       switch_to_section (get_section (secname, SECTION_DEBUG, NULL));
10718     }
10719   else
10720     switch_to_section (debug_info_section);
10721
10722   /* Output debugging information.  */
10723   output_compilation_unit_header ();
10724   output_die (die);
10725
10726   /* Leave the marks on the main CU, so we can check them in
10727      output_pubnames.  */
10728   if (oldsym)
10729     {
10730       unmark_dies (die);
10731       die->die_id.die_symbol = oldsym;
10732     }
10733 }
10734
10735 /* Output a comdat type unit DIE and its children.  */
10736
10737 static void
10738 output_comdat_type_unit (comdat_type_node *node)
10739 {
10740   const char *secname;
10741   char *tmp;
10742   int i;
10743 #if defined (OBJECT_FORMAT_ELF)
10744   tree comdat_key;
10745 #endif
10746
10747   /* First mark all the DIEs in this CU so we know which get local refs.  */
10748   mark_dies (node->root_die);
10749
10750   build_abbrev_table (node->root_die);
10751
10752   /* Initialize the beginning DIE offset - and calculate sizes/offsets.  */
10753   next_die_offset = DWARF_COMDAT_TYPE_UNIT_HEADER_SIZE;
10754   calc_die_sizes (node->root_die);
10755
10756 #if defined (OBJECT_FORMAT_ELF)
10757   secname = ".debug_types";
10758   tmp = XALLOCAVEC (char, 4 + DWARF_TYPE_SIGNATURE_SIZE * 2);
10759   sprintf (tmp, "wt.");
10760   for (i = 0; i < DWARF_TYPE_SIGNATURE_SIZE; i++)
10761     sprintf (tmp + 3 + i * 2, "%02x", node->signature[i] & 0xff);
10762   comdat_key = get_identifier (tmp);
10763   targetm.asm_out.named_section (secname,
10764                                  SECTION_DEBUG | SECTION_LINKONCE,
10765                                  comdat_key);
10766 #else
10767   tmp = XALLOCAVEC (char, 18 + DWARF_TYPE_SIGNATURE_SIZE * 2);
10768   sprintf (tmp, ".gnu.linkonce.wt.");
10769   for (i = 0; i < DWARF_TYPE_SIGNATURE_SIZE; i++)
10770     sprintf (tmp + 17 + i * 2, "%02x", node->signature[i] & 0xff);
10771   secname = tmp;
10772   switch_to_section (get_section (secname, SECTION_DEBUG, NULL));
10773 #endif
10774
10775   /* Output debugging information.  */
10776   output_compilation_unit_header ();
10777   output_signature (node->signature, "Type Signature");
10778   dw2_asm_output_data (DWARF_OFFSET_SIZE, node->type_die->die_offset,
10779                        "Offset to Type DIE");
10780   output_die (node->root_die);
10781
10782   unmark_dies (node->root_die);
10783 }
10784
10785 /* Return the DWARF2/3 pubname associated with a decl.  */
10786
10787 static const char *
10788 dwarf2_name (tree decl, int scope)
10789 {
10790   return lang_hooks.dwarf_name (decl, scope ? 1 : 0);
10791 }
10792
10793 /* Add a new entry to .debug_pubnames if appropriate.  */
10794
10795 static void
10796 add_pubname_string (const char *str, dw_die_ref die)
10797 {
10798   pubname_entry e;
10799
10800   e.die = die;
10801   e.name = xstrdup (str);
10802   VEC_safe_push (pubname_entry, gc, pubname_table, &e);
10803 }
10804
10805 static void
10806 add_pubname (tree decl, dw_die_ref die)
10807 {
10808   if (TREE_PUBLIC (decl))
10809     {
10810       const char *name = dwarf2_name (decl, 1);
10811       if (name)
10812         add_pubname_string (name, die);
10813     }
10814 }
10815
10816 /* Add a new entry to .debug_pubtypes if appropriate.  */
10817
10818 static void
10819 add_pubtype (tree decl, dw_die_ref die)
10820 {
10821   pubname_entry e;
10822
10823   e.name = NULL;
10824   if ((TREE_PUBLIC (decl)
10825        || die->die_parent == comp_unit_die)
10826       && (die->die_tag == DW_TAG_typedef || COMPLETE_TYPE_P (decl)))
10827     {
10828       e.die = die;
10829       if (TYPE_P (decl))
10830         {
10831           if (TYPE_NAME (decl))
10832             {
10833               if (TREE_CODE (TYPE_NAME (decl)) == IDENTIFIER_NODE)
10834                 e.name = IDENTIFIER_POINTER (TYPE_NAME (decl));
10835               else if (TREE_CODE (TYPE_NAME (decl)) == TYPE_DECL
10836                        && DECL_NAME (TYPE_NAME (decl)))
10837                 e.name = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (decl)));
10838               else
10839                e.name = xstrdup ((const char *) get_AT_string (die, DW_AT_name));
10840             }
10841         }
10842       else
10843         {
10844           e.name = dwarf2_name (decl, 1);
10845           if (e.name)
10846             e.name = xstrdup (e.name);
10847         }
10848
10849       /* If we don't have a name for the type, there's no point in adding
10850          it to the table.  */
10851       if (e.name && e.name[0] != '\0')
10852         VEC_safe_push (pubname_entry, gc, pubtype_table, &e);
10853     }
10854 }
10855
10856 /* Output the public names table used to speed up access to externally
10857    visible names; or the public types table used to find type definitions.  */
10858
10859 static void
10860 output_pubnames (VEC (pubname_entry, gc) * names)
10861 {
10862   unsigned i;
10863   unsigned long pubnames_length = size_of_pubnames (names);
10864   pubname_ref pub;
10865
10866   if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
10867     dw2_asm_output_data (4, 0xffffffff,
10868       "Initial length escape value indicating 64-bit DWARF extension");
10869   if (names == pubname_table)
10870     dw2_asm_output_data (DWARF_OFFSET_SIZE, pubnames_length,
10871                          "Length of Public Names Info");
10872   else
10873     dw2_asm_output_data (DWARF_OFFSET_SIZE, pubnames_length,
10874                          "Length of Public Type Names Info");
10875   /* Version number for pubnames/pubtypes is still 2, even in DWARF3.  */
10876   dw2_asm_output_data (2, 2, "DWARF Version");
10877   dw2_asm_output_offset (DWARF_OFFSET_SIZE, debug_info_section_label,
10878                          debug_info_section,
10879                          "Offset of Compilation Unit Info");
10880   dw2_asm_output_data (DWARF_OFFSET_SIZE, next_die_offset,
10881                        "Compilation Unit Length");
10882
10883   for (i = 0; VEC_iterate (pubname_entry, names, i, pub); i++)
10884     {
10885       /* We shouldn't see pubnames for DIEs outside of the main CU.  */
10886       if (names == pubname_table)
10887         gcc_assert (pub->die->die_mark);
10888
10889       if (names != pubtype_table
10890           || pub->die->die_offset != 0
10891           || !flag_eliminate_unused_debug_types)
10892         {
10893           dw2_asm_output_data (DWARF_OFFSET_SIZE, pub->die->die_offset,
10894                                "DIE offset");
10895
10896           dw2_asm_output_nstring (pub->name, -1, "external name");
10897         }
10898     }
10899
10900   dw2_asm_output_data (DWARF_OFFSET_SIZE, 0, NULL);
10901 }
10902
10903 /* Add a new entry to .debug_aranges if appropriate.  */
10904
10905 static void
10906 add_arange (tree decl, dw_die_ref die)
10907 {
10908   if (! DECL_SECTION_NAME (decl))
10909     return;
10910
10911   if (arange_table_in_use == arange_table_allocated)
10912     {
10913       arange_table_allocated += ARANGE_TABLE_INCREMENT;
10914       arange_table = GGC_RESIZEVEC (dw_die_ref, arange_table,
10915                                     arange_table_allocated);
10916       memset (arange_table + arange_table_in_use, 0,
10917               ARANGE_TABLE_INCREMENT * sizeof (dw_die_ref));
10918     }
10919
10920   arange_table[arange_table_in_use++] = die;
10921 }
10922
10923 /* Output the information that goes into the .debug_aranges table.
10924    Namely, define the beginning and ending address range of the
10925    text section generated for this compilation unit.  */
10926
10927 static void
10928 output_aranges (void)
10929 {
10930   unsigned i;
10931   unsigned long aranges_length = size_of_aranges ();
10932
10933   if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
10934     dw2_asm_output_data (4, 0xffffffff,
10935       "Initial length escape value indicating 64-bit DWARF extension");
10936   dw2_asm_output_data (DWARF_OFFSET_SIZE, aranges_length,
10937                        "Length of Address Ranges Info");
10938   /* Version number for aranges is still 2, even in DWARF3.  */
10939   dw2_asm_output_data (2, 2, "DWARF Version");
10940   dw2_asm_output_offset (DWARF_OFFSET_SIZE, debug_info_section_label,
10941                          debug_info_section,
10942                          "Offset of Compilation Unit Info");
10943   dw2_asm_output_data (1, DWARF2_ADDR_SIZE, "Size of Address");
10944   dw2_asm_output_data (1, 0, "Size of Segment Descriptor");
10945
10946   /* We need to align to twice the pointer size here.  */
10947   if (DWARF_ARANGES_PAD_SIZE)
10948     {
10949       /* Pad using a 2 byte words so that padding is correct for any
10950          pointer size.  */
10951       dw2_asm_output_data (2, 0, "Pad to %d byte boundary",
10952                            2 * DWARF2_ADDR_SIZE);
10953       for (i = 2; i < (unsigned) DWARF_ARANGES_PAD_SIZE; i += 2)
10954         dw2_asm_output_data (2, 0, NULL);
10955     }
10956
10957   /* It is necessary not to output these entries if the sections were
10958      not used; if the sections were not used, the length will be 0 and
10959      the address may end up as 0 if the section is discarded by ld
10960      --gc-sections, leaving an invalid (0, 0) entry that can be
10961      confused with the terminator.  */
10962   if (text_section_used)
10963     {
10964       dw2_asm_output_addr (DWARF2_ADDR_SIZE, text_section_label, "Address");
10965       dw2_asm_output_delta (DWARF2_ADDR_SIZE, text_end_label,
10966                             text_section_label, "Length");
10967     }
10968   if (cold_text_section_used)
10969     {
10970       dw2_asm_output_addr (DWARF2_ADDR_SIZE, cold_text_section_label,
10971                            "Address");
10972       dw2_asm_output_delta (DWARF2_ADDR_SIZE, cold_end_label,
10973                             cold_text_section_label, "Length");
10974     }
10975
10976   for (i = 0; i < arange_table_in_use; i++)
10977     {
10978       dw_die_ref die = arange_table[i];
10979
10980       /* We shouldn't see aranges for DIEs outside of the main CU.  */
10981       gcc_assert (die->die_mark);
10982
10983       if (die->die_tag == DW_TAG_subprogram)
10984         {
10985           dw2_asm_output_addr (DWARF2_ADDR_SIZE, get_AT_low_pc (die),
10986                                "Address");
10987           dw2_asm_output_delta (DWARF2_ADDR_SIZE, get_AT_hi_pc (die),
10988                                 get_AT_low_pc (die), "Length");
10989         }
10990       else
10991         {
10992           /* A static variable; extract the symbol from DW_AT_location.
10993              Note that this code isn't currently hit, as we only emit
10994              aranges for functions (jason 9/23/99).  */
10995           dw_attr_ref a = get_AT (die, DW_AT_location);
10996           dw_loc_descr_ref loc;
10997
10998           gcc_assert (a && AT_class (a) == dw_val_class_loc);
10999
11000           loc = AT_loc (a);
11001           gcc_assert (loc->dw_loc_opc == DW_OP_addr);
11002
11003           dw2_asm_output_addr_rtx (DWARF2_ADDR_SIZE,
11004                                    loc->dw_loc_oprnd1.v.val_addr, "Address");
11005           dw2_asm_output_data (DWARF2_ADDR_SIZE,
11006                                get_AT_unsigned (die, DW_AT_byte_size),
11007                                "Length");
11008         }
11009     }
11010
11011   /* Output the terminator words.  */
11012   dw2_asm_output_data (DWARF2_ADDR_SIZE, 0, NULL);
11013   dw2_asm_output_data (DWARF2_ADDR_SIZE, 0, NULL);
11014 }
11015
11016 /* Add a new entry to .debug_ranges.  Return the offset at which it
11017    was placed.  */
11018
11019 static unsigned int
11020 add_ranges_num (int num)
11021 {
11022   unsigned int in_use = ranges_table_in_use;
11023
11024   if (in_use == ranges_table_allocated)
11025     {
11026       ranges_table_allocated += RANGES_TABLE_INCREMENT;
11027       ranges_table = GGC_RESIZEVEC (struct dw_ranges_struct, ranges_table,
11028                                     ranges_table_allocated);
11029       memset (ranges_table + ranges_table_in_use, 0,
11030               RANGES_TABLE_INCREMENT * sizeof (struct dw_ranges_struct));
11031     }
11032
11033   ranges_table[in_use].num = num;
11034   ranges_table_in_use = in_use + 1;
11035
11036   return in_use * 2 * DWARF2_ADDR_SIZE;
11037 }
11038
11039 /* Add a new entry to .debug_ranges corresponding to a block, or a
11040    range terminator if BLOCK is NULL.  */
11041
11042 static unsigned int
11043 add_ranges (const_tree block)
11044 {
11045   return add_ranges_num (block ? BLOCK_NUMBER (block) : 0);
11046 }
11047
11048 /* Add a new entry to .debug_ranges corresponding to a pair of
11049    labels.  */
11050
11051 static void
11052 add_ranges_by_labels (dw_die_ref die, const char *begin, const char *end,
11053                       bool *added)
11054 {
11055   unsigned int in_use = ranges_by_label_in_use;
11056   unsigned int offset;
11057
11058   if (in_use == ranges_by_label_allocated)
11059     {
11060       ranges_by_label_allocated += RANGES_TABLE_INCREMENT;
11061       ranges_by_label = GGC_RESIZEVEC (struct dw_ranges_by_label_struct,
11062                                        ranges_by_label,
11063                                        ranges_by_label_allocated);
11064       memset (ranges_by_label + ranges_by_label_in_use, 0,
11065               RANGES_TABLE_INCREMENT
11066               * sizeof (struct dw_ranges_by_label_struct));
11067     }
11068
11069   ranges_by_label[in_use].begin = begin;
11070   ranges_by_label[in_use].end = end;
11071   ranges_by_label_in_use = in_use + 1;
11072
11073   offset = add_ranges_num (-(int)in_use - 1);
11074   if (!*added)
11075     {
11076       add_AT_range_list (die, DW_AT_ranges, offset);
11077       *added = true;
11078     }
11079 }
11080
11081 static void
11082 output_ranges (void)
11083 {
11084   unsigned i;
11085   static const char *const start_fmt = "Offset %#x";
11086   const char *fmt = start_fmt;
11087
11088   for (i = 0; i < ranges_table_in_use; i++)
11089     {
11090       int block_num = ranges_table[i].num;
11091
11092       if (block_num > 0)
11093         {
11094           char blabel[MAX_ARTIFICIAL_LABEL_BYTES];
11095           char elabel[MAX_ARTIFICIAL_LABEL_BYTES];
11096
11097           ASM_GENERATE_INTERNAL_LABEL (blabel, BLOCK_BEGIN_LABEL, block_num);
11098           ASM_GENERATE_INTERNAL_LABEL (elabel, BLOCK_END_LABEL, block_num);
11099
11100           /* If all code is in the text section, then the compilation
11101              unit base address defaults to DW_AT_low_pc, which is the
11102              base of the text section.  */
11103           if (!have_multiple_function_sections)
11104             {
11105               dw2_asm_output_delta (DWARF2_ADDR_SIZE, blabel,
11106                                     text_section_label,
11107                                     fmt, i * 2 * DWARF2_ADDR_SIZE);
11108               dw2_asm_output_delta (DWARF2_ADDR_SIZE, elabel,
11109                                     text_section_label, NULL);
11110             }
11111
11112           /* Otherwise, the compilation unit base address is zero,
11113              which allows us to use absolute addresses, and not worry
11114              about whether the target supports cross-section
11115              arithmetic.  */
11116           else
11117             {
11118               dw2_asm_output_addr (DWARF2_ADDR_SIZE, blabel,
11119                                    fmt, i * 2 * DWARF2_ADDR_SIZE);
11120               dw2_asm_output_addr (DWARF2_ADDR_SIZE, elabel, NULL);
11121             }
11122
11123           fmt = NULL;
11124         }
11125
11126       /* Negative block_num stands for an index into ranges_by_label.  */
11127       else if (block_num < 0)
11128         {
11129           int lab_idx = - block_num - 1;
11130
11131           if (!have_multiple_function_sections)
11132             {
11133               gcc_unreachable ();
11134 #if 0
11135               /* If we ever use add_ranges_by_labels () for a single
11136                  function section, all we have to do is to take out
11137                  the #if 0 above.  */
11138               dw2_asm_output_delta (DWARF2_ADDR_SIZE,
11139                                     ranges_by_label[lab_idx].begin,
11140                                     text_section_label,
11141                                     fmt, i * 2 * DWARF2_ADDR_SIZE);
11142               dw2_asm_output_delta (DWARF2_ADDR_SIZE,
11143                                     ranges_by_label[lab_idx].end,
11144                                     text_section_label, NULL);
11145 #endif
11146             }
11147           else
11148             {
11149               dw2_asm_output_addr (DWARF2_ADDR_SIZE,
11150                                    ranges_by_label[lab_idx].begin,
11151                                    fmt, i * 2 * DWARF2_ADDR_SIZE);
11152               dw2_asm_output_addr (DWARF2_ADDR_SIZE,
11153                                    ranges_by_label[lab_idx].end,
11154                                    NULL);
11155             }
11156         }
11157       else
11158         {
11159           dw2_asm_output_data (DWARF2_ADDR_SIZE, 0, NULL);
11160           dw2_asm_output_data (DWARF2_ADDR_SIZE, 0, NULL);
11161           fmt = start_fmt;
11162         }
11163     }
11164 }
11165
11166 /* Data structure containing information about input files.  */
11167 struct file_info
11168 {
11169   const char *path;     /* Complete file name.  */
11170   const char *fname;    /* File name part.  */
11171   int length;           /* Length of entire string.  */
11172   struct dwarf_file_data * file_idx;    /* Index in input file table.  */
11173   int dir_idx;          /* Index in directory table.  */
11174 };
11175
11176 /* Data structure containing information about directories with source
11177    files.  */
11178 struct dir_info
11179 {
11180   const char *path;     /* Path including directory name.  */
11181   int length;           /* Path length.  */
11182   int prefix;           /* Index of directory entry which is a prefix.  */
11183   int count;            /* Number of files in this directory.  */
11184   int dir_idx;          /* Index of directory used as base.  */
11185 };
11186
11187 /* Callback function for file_info comparison.  We sort by looking at
11188    the directories in the path.  */
11189
11190 static int
11191 file_info_cmp (const void *p1, const void *p2)
11192 {
11193   const struct file_info *const s1 = (const struct file_info *) p1;
11194   const struct file_info *const s2 = (const struct file_info *) p2;
11195   const unsigned char *cp1;
11196   const unsigned char *cp2;
11197
11198   /* Take care of file names without directories.  We need to make sure that
11199      we return consistent values to qsort since some will get confused if
11200      we return the same value when identical operands are passed in opposite
11201      orders.  So if neither has a directory, return 0 and otherwise return
11202      1 or -1 depending on which one has the directory.  */
11203   if ((s1->path == s1->fname || s2->path == s2->fname))
11204     return (s2->path == s2->fname) - (s1->path == s1->fname);
11205
11206   cp1 = (const unsigned char *) s1->path;
11207   cp2 = (const unsigned char *) s2->path;
11208
11209   while (1)
11210     {
11211       ++cp1;
11212       ++cp2;
11213       /* Reached the end of the first path?  If so, handle like above.  */
11214       if ((cp1 == (const unsigned char *) s1->fname)
11215           || (cp2 == (const unsigned char *) s2->fname))
11216         return ((cp2 == (const unsigned char *) s2->fname)
11217                 - (cp1 == (const unsigned char *) s1->fname));
11218
11219       /* Character of current path component the same?  */
11220       else if (*cp1 != *cp2)
11221         return *cp1 - *cp2;
11222     }
11223 }
11224
11225 struct file_name_acquire_data
11226 {
11227   struct file_info *files;
11228   int used_files;
11229   int max_files;
11230 };
11231
11232 /* Traversal function for the hash table.  */
11233
11234 static int
11235 file_name_acquire (void ** slot, void *data)
11236 {
11237   struct file_name_acquire_data *fnad = (struct file_name_acquire_data *) data;
11238   struct dwarf_file_data *d = (struct dwarf_file_data *) *slot;
11239   struct file_info *fi;
11240   const char *f;
11241
11242   gcc_assert (fnad->max_files >= d->emitted_number);
11243
11244   if (! d->emitted_number)
11245     return 1;
11246
11247   gcc_assert (fnad->max_files != fnad->used_files);
11248
11249   fi = fnad->files + fnad->used_files++;
11250
11251   /* Skip all leading "./".  */
11252   f = d->filename;
11253   while (f[0] == '.' && IS_DIR_SEPARATOR (f[1]))
11254     f += 2;
11255
11256   /* Create a new array entry.  */
11257   fi->path = f;
11258   fi->length = strlen (f);
11259   fi->file_idx = d;
11260
11261   /* Search for the file name part.  */
11262   f = strrchr (f, DIR_SEPARATOR);
11263 #if defined (DIR_SEPARATOR_2)
11264   {
11265     char *g = strrchr (fi->path, DIR_SEPARATOR_2);
11266
11267     if (g != NULL)
11268       {
11269         if (f == NULL || f < g)
11270           f = g;
11271       }
11272   }
11273 #endif
11274
11275   fi->fname = f == NULL ? fi->path : f + 1;
11276   return 1;
11277 }
11278
11279 /* Output the directory table and the file name table.  We try to minimize
11280    the total amount of memory needed.  A heuristic is used to avoid large
11281    slowdowns with many input files.  */
11282
11283 static void
11284 output_file_names (void)
11285 {
11286   struct file_name_acquire_data fnad;
11287   int numfiles;
11288   struct file_info *files;
11289   struct dir_info *dirs;
11290   int *saved;
11291   int *savehere;
11292   int *backmap;
11293   int ndirs;
11294   int idx_offset;
11295   int i;
11296
11297   if (!last_emitted_file)
11298     {
11299       dw2_asm_output_data (1, 0, "End directory table");
11300       dw2_asm_output_data (1, 0, "End file name table");
11301       return;
11302     }
11303
11304   numfiles = last_emitted_file->emitted_number;
11305
11306   /* Allocate the various arrays we need.  */
11307   files = XALLOCAVEC (struct file_info, numfiles);
11308   dirs = XALLOCAVEC (struct dir_info, numfiles);
11309
11310   fnad.files = files;
11311   fnad.used_files = 0;
11312   fnad.max_files = numfiles;
11313   htab_traverse (file_table, file_name_acquire, &fnad);
11314   gcc_assert (fnad.used_files == fnad.max_files);
11315
11316   qsort (files, numfiles, sizeof (files[0]), file_info_cmp);
11317
11318   /* Find all the different directories used.  */
11319   dirs[0].path = files[0].path;
11320   dirs[0].length = files[0].fname - files[0].path;
11321   dirs[0].prefix = -1;
11322   dirs[0].count = 1;
11323   dirs[0].dir_idx = 0;
11324   files[0].dir_idx = 0;
11325   ndirs = 1;
11326
11327   for (i = 1; i < numfiles; i++)
11328     if (files[i].fname - files[i].path == dirs[ndirs - 1].length
11329         && memcmp (dirs[ndirs - 1].path, files[i].path,
11330                    dirs[ndirs - 1].length) == 0)
11331       {
11332         /* Same directory as last entry.  */
11333         files[i].dir_idx = ndirs - 1;
11334         ++dirs[ndirs - 1].count;
11335       }
11336     else
11337       {
11338         int j;
11339
11340         /* This is a new directory.  */
11341         dirs[ndirs].path = files[i].path;
11342         dirs[ndirs].length = files[i].fname - files[i].path;
11343         dirs[ndirs].count = 1;
11344         dirs[ndirs].dir_idx = ndirs;
11345         files[i].dir_idx = ndirs;
11346
11347         /* Search for a prefix.  */
11348         dirs[ndirs].prefix = -1;
11349         for (j = 0; j < ndirs; j++)
11350           if (dirs[j].length < dirs[ndirs].length
11351               && dirs[j].length > 1
11352               && (dirs[ndirs].prefix == -1
11353                   || dirs[j].length > dirs[dirs[ndirs].prefix].length)
11354               && memcmp (dirs[j].path, dirs[ndirs].path, dirs[j].length) == 0)
11355             dirs[ndirs].prefix = j;
11356
11357         ++ndirs;
11358       }
11359
11360   /* Now to the actual work.  We have to find a subset of the directories which
11361      allow expressing the file name using references to the directory table
11362      with the least amount of characters.  We do not do an exhaustive search
11363      where we would have to check out every combination of every single
11364      possible prefix.  Instead we use a heuristic which provides nearly optimal
11365      results in most cases and never is much off.  */
11366   saved = XALLOCAVEC (int, ndirs);
11367   savehere = XALLOCAVEC (int, ndirs);
11368
11369   memset (saved, '\0', ndirs * sizeof (saved[0]));
11370   for (i = 0; i < ndirs; i++)
11371     {
11372       int j;
11373       int total;
11374
11375       /* We can always save some space for the current directory.  But this
11376          does not mean it will be enough to justify adding the directory.  */
11377       savehere[i] = dirs[i].length;
11378       total = (savehere[i] - saved[i]) * dirs[i].count;
11379
11380       for (j = i + 1; j < ndirs; j++)
11381         {
11382           savehere[j] = 0;
11383           if (saved[j] < dirs[i].length)
11384             {
11385               /* Determine whether the dirs[i] path is a prefix of the
11386                  dirs[j] path.  */
11387               int k;
11388
11389               k = dirs[j].prefix;
11390               while (k != -1 && k != (int) i)
11391                 k = dirs[k].prefix;
11392
11393               if (k == (int) i)
11394                 {
11395                   /* Yes it is.  We can possibly save some memory by
11396                      writing the filenames in dirs[j] relative to
11397                      dirs[i].  */
11398                   savehere[j] = dirs[i].length;
11399                   total += (savehere[j] - saved[j]) * dirs[j].count;
11400                 }
11401             }
11402         }
11403
11404       /* Check whether we can save enough to justify adding the dirs[i]
11405          directory.  */
11406       if (total > dirs[i].length + 1)
11407         {
11408           /* It's worthwhile adding.  */
11409           for (j = i; j < ndirs; j++)
11410             if (savehere[j] > 0)
11411               {
11412                 /* Remember how much we saved for this directory so far.  */
11413                 saved[j] = savehere[j];
11414
11415                 /* Remember the prefix directory.  */
11416                 dirs[j].dir_idx = i;
11417               }
11418         }
11419     }
11420
11421   /* Emit the directory name table.  */
11422   idx_offset = dirs[0].length > 0 ? 1 : 0;
11423   for (i = 1 - idx_offset; i < ndirs; i++)
11424     dw2_asm_output_nstring (dirs[i].path,
11425                             dirs[i].length
11426                              - !DWARF2_DIR_SHOULD_END_WITH_SEPARATOR,
11427                             "Directory Entry: %#x", i + idx_offset);
11428
11429   dw2_asm_output_data (1, 0, "End directory table");
11430
11431   /* We have to emit them in the order of emitted_number since that's
11432      used in the debug info generation.  To do this efficiently we
11433      generate a back-mapping of the indices first.  */
11434   backmap = XALLOCAVEC (int, numfiles);
11435   for (i = 0; i < numfiles; i++)
11436     backmap[files[i].file_idx->emitted_number - 1] = i;
11437
11438   /* Now write all the file names.  */
11439   for (i = 0; i < numfiles; i++)
11440     {
11441       int file_idx = backmap[i];
11442       int dir_idx = dirs[files[file_idx].dir_idx].dir_idx;
11443
11444 #ifdef VMS_DEBUGGING_INFO
11445 #define MAX_VMS_VERSION_LEN 6 /* ";32768" */
11446
11447       /* Setting these fields can lead to debugger miscomparisons,
11448          but VMS Debug requires them to be set correctly.  */
11449
11450       int ver;
11451       long long cdt;
11452       long siz;
11453       int maxfilelen = strlen (files[file_idx].path)
11454                                + dirs[dir_idx].length
11455                                + MAX_VMS_VERSION_LEN + 1;
11456       char *filebuf = XALLOCAVEC (char, maxfilelen);
11457
11458       vms_file_stats_name (files[file_idx].path, 0, 0, 0, &ver);
11459       snprintf (filebuf, maxfilelen, "%s;%d",
11460                 files[file_idx].path + dirs[dir_idx].length, ver);
11461
11462       dw2_asm_output_nstring
11463         (filebuf, -1, "File Entry: %#x", (unsigned) i + 1);
11464
11465       /* Include directory index.  */
11466       dw2_asm_output_data_uleb128 (dir_idx + idx_offset, NULL);
11467
11468       /* Modification time.  */
11469       dw2_asm_output_data_uleb128
11470         ((vms_file_stats_name (files[file_idx].path, &cdt, 0, 0, 0) == 0)
11471           ? cdt : 0,
11472          NULL);
11473
11474       /* File length in bytes.  */
11475       dw2_asm_output_data_uleb128
11476         ((vms_file_stats_name (files[file_idx].path, 0, &siz, 0, 0) == 0)
11477           ? siz : 0,
11478          NULL);
11479 #else
11480       dw2_asm_output_nstring (files[file_idx].path + dirs[dir_idx].length, -1,
11481                               "File Entry: %#x", (unsigned) i + 1);
11482
11483       /* Include directory index.  */
11484       dw2_asm_output_data_uleb128 (dir_idx + idx_offset, NULL);
11485
11486       /* Modification time.  */
11487       dw2_asm_output_data_uleb128 (0, NULL);
11488
11489       /* File length in bytes.  */
11490       dw2_asm_output_data_uleb128 (0, NULL);
11491 #endif
11492     }
11493
11494   dw2_asm_output_data (1, 0, "End file name table");
11495 }
11496
11497
11498 /* Output the source line number correspondence information.  This
11499    information goes into the .debug_line section.  */
11500
11501 static void
11502 output_line_info (void)
11503 {
11504   char l1[20], l2[20], p1[20], p2[20];
11505   char line_label[MAX_ARTIFICIAL_LABEL_BYTES];
11506   char prev_line_label[MAX_ARTIFICIAL_LABEL_BYTES];
11507   unsigned opc;
11508   unsigned n_op_args;
11509   unsigned long lt_index;
11510   unsigned long current_line;
11511   long line_offset;
11512   long line_delta;
11513   unsigned long current_file;
11514   unsigned long function;
11515   int ver = dwarf_version;
11516
11517   ASM_GENERATE_INTERNAL_LABEL (l1, LINE_NUMBER_BEGIN_LABEL, 0);
11518   ASM_GENERATE_INTERNAL_LABEL (l2, LINE_NUMBER_END_LABEL, 0);
11519   ASM_GENERATE_INTERNAL_LABEL (p1, LN_PROLOG_AS_LABEL, 0);
11520   ASM_GENERATE_INTERNAL_LABEL (p2, LN_PROLOG_END_LABEL, 0);
11521
11522   if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
11523     dw2_asm_output_data (4, 0xffffffff,
11524       "Initial length escape value indicating 64-bit DWARF extension");
11525   dw2_asm_output_delta (DWARF_OFFSET_SIZE, l2, l1,
11526                         "Length of Source Line Info");
11527   ASM_OUTPUT_LABEL (asm_out_file, l1);
11528
11529   dw2_asm_output_data (2, ver, "DWARF Version");
11530   dw2_asm_output_delta (DWARF_OFFSET_SIZE, p2, p1, "Prolog Length");
11531   ASM_OUTPUT_LABEL (asm_out_file, p1);
11532
11533   /* Define the architecture-dependent minimum instruction length (in
11534    bytes).  In this implementation of DWARF, this field is used for
11535    information purposes only.  Since GCC generates assembly language,
11536    we have no a priori knowledge of how many instruction bytes are
11537    generated for each source line, and therefore can use only the
11538    DW_LNE_set_address and DW_LNS_fixed_advance_pc line information
11539    commands.  Accordingly, we fix this as `1', which is "correct
11540    enough" for all architectures, and don't let the target override.  */
11541   dw2_asm_output_data (1, 1,
11542                        "Minimum Instruction Length");
11543
11544   if (ver >= 4)
11545     dw2_asm_output_data (1, DWARF_LINE_DEFAULT_MAX_OPS_PER_INSN,
11546                          "Maximum Operations Per Instruction");
11547   dw2_asm_output_data (1, DWARF_LINE_DEFAULT_IS_STMT_START,
11548                        "Default is_stmt_start flag");
11549   dw2_asm_output_data (1, DWARF_LINE_BASE,
11550                        "Line Base Value (Special Opcodes)");
11551   dw2_asm_output_data (1, DWARF_LINE_RANGE,
11552                        "Line Range Value (Special Opcodes)");
11553   dw2_asm_output_data (1, DWARF_LINE_OPCODE_BASE,
11554                        "Special Opcode Base");
11555
11556   for (opc = 1; opc < DWARF_LINE_OPCODE_BASE; opc++)
11557     {
11558       switch (opc)
11559         {
11560         case DW_LNS_advance_pc:
11561         case DW_LNS_advance_line:
11562         case DW_LNS_set_file:
11563         case DW_LNS_set_column:
11564         case DW_LNS_fixed_advance_pc:
11565           n_op_args = 1;
11566           break;
11567         default:
11568           n_op_args = 0;
11569           break;
11570         }
11571
11572       dw2_asm_output_data (1, n_op_args, "opcode: %#x has %d args",
11573                            opc, n_op_args);
11574     }
11575
11576   /* Write out the information about the files we use.  */
11577   output_file_names ();
11578   ASM_OUTPUT_LABEL (asm_out_file, p2);
11579
11580   /* We used to set the address register to the first location in the text
11581      section here, but that didn't accomplish anything since we already
11582      have a line note for the opening brace of the first function.  */
11583
11584   /* Generate the line number to PC correspondence table, encoded as
11585      a series of state machine operations.  */
11586   current_file = 1;
11587   current_line = 1;
11588
11589   if (cfun && in_cold_section_p)
11590     strcpy (prev_line_label, crtl->subsections.cold_section_label);
11591   else
11592     strcpy (prev_line_label, text_section_label);
11593   for (lt_index = 1; lt_index < line_info_table_in_use; ++lt_index)
11594     {
11595       dw_line_info_ref line_info = &line_info_table[lt_index];
11596
11597 #if 0
11598       /* Disable this optimization for now; GDB wants to see two line notes
11599          at the beginning of a function so it can find the end of the
11600          prologue.  */
11601
11602       /* Don't emit anything for redundant notes.  Just updating the
11603          address doesn't accomplish anything, because we already assume
11604          that anything after the last address is this line.  */
11605       if (line_info->dw_line_num == current_line
11606           && line_info->dw_file_num == current_file)
11607         continue;
11608 #endif
11609
11610       /* Emit debug info for the address of the current line.
11611
11612          Unfortunately, we have little choice here currently, and must always
11613          use the most general form.  GCC does not know the address delta
11614          itself, so we can't use DW_LNS_advance_pc.  Many ports do have length
11615          attributes which will give an upper bound on the address range.  We
11616          could perhaps use length attributes to determine when it is safe to
11617          use DW_LNS_fixed_advance_pc.  */
11618
11619       ASM_GENERATE_INTERNAL_LABEL (line_label, LINE_CODE_LABEL, lt_index);
11620       if (0)
11621         {
11622           /* This can handle deltas up to 0xffff.  This takes 3 bytes.  */
11623           dw2_asm_output_data (1, DW_LNS_fixed_advance_pc,
11624                                "DW_LNS_fixed_advance_pc");
11625           dw2_asm_output_delta (2, line_label, prev_line_label, NULL);
11626         }
11627       else
11628         {
11629           /* This can handle any delta.  This takes
11630              4+DWARF2_ADDR_SIZE bytes.  */
11631           dw2_asm_output_data (1, 0, "DW_LNE_set_address");
11632           dw2_asm_output_data_uleb128 (1 + DWARF2_ADDR_SIZE, NULL);
11633           dw2_asm_output_data (1, DW_LNE_set_address, NULL);
11634           dw2_asm_output_addr (DWARF2_ADDR_SIZE, line_label, NULL);
11635         }
11636
11637       strcpy (prev_line_label, line_label);
11638
11639       /* Emit debug info for the source file of the current line, if
11640          different from the previous line.  */
11641       if (line_info->dw_file_num != current_file)
11642         {
11643           current_file = line_info->dw_file_num;
11644           dw2_asm_output_data (1, DW_LNS_set_file, "DW_LNS_set_file");
11645           dw2_asm_output_data_uleb128 (current_file, "%lu", current_file);
11646         }
11647
11648       /* Emit debug info for the current line number, choosing the encoding
11649          that uses the least amount of space.  */
11650       if (line_info->dw_line_num != current_line)
11651         {
11652           line_offset = line_info->dw_line_num - current_line;
11653           line_delta = line_offset - DWARF_LINE_BASE;
11654           current_line = line_info->dw_line_num;
11655           if (line_delta >= 0 && line_delta < (DWARF_LINE_RANGE - 1))
11656             /* This can handle deltas from -10 to 234, using the current
11657                definitions of DWARF_LINE_BASE and DWARF_LINE_RANGE.  This
11658                takes 1 byte.  */
11659             dw2_asm_output_data (1, DWARF_LINE_OPCODE_BASE + line_delta,
11660                                  "line %lu", current_line);
11661           else
11662             {
11663               /* This can handle any delta.  This takes at least 4 bytes,
11664                  depending on the value being encoded.  */
11665               dw2_asm_output_data (1, DW_LNS_advance_line,
11666                                    "advance to line %lu", current_line);
11667               dw2_asm_output_data_sleb128 (line_offset, NULL);
11668               dw2_asm_output_data (1, DW_LNS_copy, "DW_LNS_copy");
11669             }
11670         }
11671       else
11672         /* We still need to start a new row, so output a copy insn.  */
11673         dw2_asm_output_data (1, DW_LNS_copy, "DW_LNS_copy");
11674     }
11675
11676   /* Emit debug info for the address of the end of the function.  */
11677   if (0)
11678     {
11679       dw2_asm_output_data (1, DW_LNS_fixed_advance_pc,
11680                            "DW_LNS_fixed_advance_pc");
11681       dw2_asm_output_delta (2, text_end_label, prev_line_label, NULL);
11682     }
11683   else
11684     {
11685       dw2_asm_output_data (1, 0, "DW_LNE_set_address");
11686       dw2_asm_output_data_uleb128 (1 + DWARF2_ADDR_SIZE, NULL);
11687       dw2_asm_output_data (1, DW_LNE_set_address, NULL);
11688       dw2_asm_output_addr (DWARF2_ADDR_SIZE, text_end_label, NULL);
11689     }
11690
11691   dw2_asm_output_data (1, 0, "DW_LNE_end_sequence");
11692   dw2_asm_output_data_uleb128 (1, NULL);
11693   dw2_asm_output_data (1, DW_LNE_end_sequence, NULL);
11694
11695   function = 0;
11696   current_file = 1;
11697   current_line = 1;
11698   for (lt_index = 0; lt_index < separate_line_info_table_in_use;)
11699     {
11700       dw_separate_line_info_ref line_info
11701         = &separate_line_info_table[lt_index];
11702
11703 #if 0
11704       /* Don't emit anything for redundant notes.  */
11705       if (line_info->dw_line_num == current_line
11706           && line_info->dw_file_num == current_file
11707           && line_info->function == function)
11708         goto cont;
11709 #endif
11710
11711       /* Emit debug info for the address of the current line.  If this is
11712          a new function, or the first line of a function, then we need
11713          to handle it differently.  */
11714       ASM_GENERATE_INTERNAL_LABEL (line_label, SEPARATE_LINE_CODE_LABEL,
11715                                    lt_index);
11716       if (function != line_info->function)
11717         {
11718           function = line_info->function;
11719
11720           /* Set the address register to the first line in the function.  */
11721           dw2_asm_output_data (1, 0, "DW_LNE_set_address");
11722           dw2_asm_output_data_uleb128 (1 + DWARF2_ADDR_SIZE, NULL);
11723           dw2_asm_output_data (1, DW_LNE_set_address, NULL);
11724           dw2_asm_output_addr (DWARF2_ADDR_SIZE, line_label, NULL);
11725         }
11726       else
11727         {
11728           /* ??? See the DW_LNS_advance_pc comment above.  */
11729           if (0)
11730             {
11731               dw2_asm_output_data (1, DW_LNS_fixed_advance_pc,
11732                                    "DW_LNS_fixed_advance_pc");
11733               dw2_asm_output_delta (2, line_label, prev_line_label, NULL);
11734             }
11735           else
11736             {
11737               dw2_asm_output_data (1, 0, "DW_LNE_set_address");
11738               dw2_asm_output_data_uleb128 (1 + DWARF2_ADDR_SIZE, NULL);
11739               dw2_asm_output_data (1, DW_LNE_set_address, NULL);
11740               dw2_asm_output_addr (DWARF2_ADDR_SIZE, line_label, NULL);
11741             }
11742         }
11743
11744       strcpy (prev_line_label, line_label);
11745
11746       /* Emit debug info for the source file of the current line, if
11747          different from the previous line.  */
11748       if (line_info->dw_file_num != current_file)
11749         {
11750           current_file = line_info->dw_file_num;
11751           dw2_asm_output_data (1, DW_LNS_set_file, "DW_LNS_set_file");
11752           dw2_asm_output_data_uleb128 (current_file, "%lu", current_file);
11753         }
11754
11755       /* Emit debug info for the current line number, choosing the encoding
11756          that uses the least amount of space.  */
11757       if (line_info->dw_line_num != current_line)
11758         {
11759           line_offset = line_info->dw_line_num - current_line;
11760           line_delta = line_offset - DWARF_LINE_BASE;
11761           current_line = line_info->dw_line_num;
11762           if (line_delta >= 0 && line_delta < (DWARF_LINE_RANGE - 1))
11763             dw2_asm_output_data (1, DWARF_LINE_OPCODE_BASE + line_delta,
11764                                  "line %lu", current_line);
11765           else
11766             {
11767               dw2_asm_output_data (1, DW_LNS_advance_line,
11768                                    "advance to line %lu", current_line);
11769               dw2_asm_output_data_sleb128 (line_offset, NULL);
11770               dw2_asm_output_data (1, DW_LNS_copy, "DW_LNS_copy");
11771             }
11772         }
11773       else
11774         dw2_asm_output_data (1, DW_LNS_copy, "DW_LNS_copy");
11775
11776 #if 0
11777     cont:
11778 #endif
11779
11780       lt_index++;
11781
11782       /* If we're done with a function, end its sequence.  */
11783       if (lt_index == separate_line_info_table_in_use
11784           || separate_line_info_table[lt_index].function != function)
11785         {
11786           current_file = 1;
11787           current_line = 1;
11788
11789           /* Emit debug info for the address of the end of the function.  */
11790           ASM_GENERATE_INTERNAL_LABEL (line_label, FUNC_END_LABEL, function);
11791           if (0)
11792             {
11793               dw2_asm_output_data (1, DW_LNS_fixed_advance_pc,
11794                                    "DW_LNS_fixed_advance_pc");
11795               dw2_asm_output_delta (2, line_label, prev_line_label, NULL);
11796             }
11797           else
11798             {
11799               dw2_asm_output_data (1, 0, "DW_LNE_set_address");
11800               dw2_asm_output_data_uleb128 (1 + DWARF2_ADDR_SIZE, NULL);
11801               dw2_asm_output_data (1, DW_LNE_set_address, NULL);
11802               dw2_asm_output_addr (DWARF2_ADDR_SIZE, line_label, NULL);
11803             }
11804
11805           /* Output the marker for the end of this sequence.  */
11806           dw2_asm_output_data (1, 0, "DW_LNE_end_sequence");
11807           dw2_asm_output_data_uleb128 (1, NULL);
11808           dw2_asm_output_data (1, DW_LNE_end_sequence, NULL);
11809         }
11810     }
11811
11812   /* Output the marker for the end of the line number info.  */
11813   ASM_OUTPUT_LABEL (asm_out_file, l2);
11814 }
11815
11816 /* Return the size of the .debug_dcall table for the compilation unit.  */
11817
11818 static unsigned long
11819 size_of_dcall_table (void)
11820 {
11821   unsigned long size;
11822   unsigned int i;
11823   dcall_entry *p;
11824   tree last_poc_decl = NULL;
11825
11826   /* Header:  version + debug info section pointer + pointer size.  */
11827   size = 2 + DWARF_OFFSET_SIZE + 1;
11828
11829   /* Each entry:  code label + DIE offset.  */
11830   for (i = 0; VEC_iterate (dcall_entry, dcall_table, i, p); i++)
11831     {
11832       gcc_assert (p->targ_die != NULL);
11833       /* Insert a "from" entry when the point-of-call DIE offset changes.  */
11834       if (p->poc_decl != last_poc_decl)
11835         {
11836           dw_die_ref poc_die = lookup_decl_die (p->poc_decl);
11837           gcc_assert (poc_die);
11838           last_poc_decl = p->poc_decl;
11839           if (poc_die)
11840             size += (DWARF_OFFSET_SIZE
11841                      + size_of_uleb128 (poc_die->die_offset));
11842         }
11843       size += DWARF_OFFSET_SIZE + size_of_uleb128 (p->targ_die->die_offset);
11844     }
11845
11846   return size;
11847 }
11848
11849 /* Output the direct call table used to disambiguate PC values when
11850    identical function have been merged.  */
11851
11852 static void
11853 output_dcall_table (void)
11854 {
11855   unsigned i;
11856   unsigned long dcall_length = size_of_dcall_table ();
11857   dcall_entry *p;
11858   char poc_label[MAX_ARTIFICIAL_LABEL_BYTES];
11859   tree last_poc_decl = NULL;
11860
11861   if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
11862     dw2_asm_output_data (4, 0xffffffff,
11863       "Initial length escape value indicating 64-bit DWARF extension");
11864   dw2_asm_output_data (DWARF_OFFSET_SIZE, dcall_length,
11865                        "Length of Direct Call Table");
11866   dw2_asm_output_data (2, 4, "Version number");
11867   dw2_asm_output_offset (DWARF_OFFSET_SIZE, debug_info_section_label,
11868                          debug_info_section,
11869                          "Offset of Compilation Unit Info");
11870   dw2_asm_output_data (1, DWARF2_ADDR_SIZE, "Pointer Size (in bytes)");
11871
11872   for (i = 0; VEC_iterate (dcall_entry, dcall_table, i, p); i++)
11873     {
11874       /* Insert a "from" entry when the point-of-call DIE offset changes.  */
11875       if (p->poc_decl != last_poc_decl)
11876         {
11877           dw_die_ref poc_die = lookup_decl_die (p->poc_decl);
11878           last_poc_decl = p->poc_decl;
11879           if (poc_die)
11880             {
11881               dw2_asm_output_data (DWARF_OFFSET_SIZE, 0, "New caller");
11882               dw2_asm_output_data_uleb128 (poc_die->die_offset,
11883                                            "Caller DIE offset");
11884             }
11885         }
11886       ASM_GENERATE_INTERNAL_LABEL (poc_label, "LPOC", p->poc_label_num);
11887       dw2_asm_output_addr (DWARF_OFFSET_SIZE, poc_label, "Point of call");
11888       dw2_asm_output_data_uleb128 (p->targ_die->die_offset,
11889                                    "Callee DIE offset");
11890     }
11891 }
11892 \f
11893 /* Return the size of the .debug_vcall table for the compilation unit.  */
11894
11895 static unsigned long
11896 size_of_vcall_table (void)
11897 {
11898   unsigned long size;
11899   unsigned int i;
11900   vcall_entry *p;
11901
11902   /* Header:  version + pointer size.  */
11903   size = 2 + 1;
11904
11905   /* Each entry:  code label + vtable slot index.  */
11906   for (i = 0; VEC_iterate (vcall_entry, vcall_table, i, p); i++)
11907     size += DWARF_OFFSET_SIZE + size_of_uleb128 (p->vtable_slot);
11908
11909   return size;
11910 }
11911
11912 /* Output the virtual call table used to disambiguate PC values when
11913    identical function have been merged.  */
11914
11915 static void
11916 output_vcall_table (void)
11917 {
11918   unsigned i;
11919   unsigned long vcall_length = size_of_vcall_table ();
11920   vcall_entry *p;
11921   char poc_label[MAX_ARTIFICIAL_LABEL_BYTES];
11922
11923   if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
11924     dw2_asm_output_data (4, 0xffffffff,
11925       "Initial length escape value indicating 64-bit DWARF extension");
11926   dw2_asm_output_data (DWARF_OFFSET_SIZE, vcall_length,
11927                        "Length of Virtual Call Table");
11928   dw2_asm_output_data (2, 4, "Version number");
11929   dw2_asm_output_data (1, DWARF2_ADDR_SIZE, "Pointer Size (in bytes)");
11930
11931   for (i = 0; VEC_iterate (vcall_entry, vcall_table, i, p); i++)
11932     {
11933       ASM_GENERATE_INTERNAL_LABEL (poc_label, "LPOC", p->poc_label_num);
11934       dw2_asm_output_addr (DWARF_OFFSET_SIZE, poc_label, "Point of call");
11935       dw2_asm_output_data_uleb128 (p->vtable_slot, "Vtable slot");
11936     }
11937 }
11938 \f
11939 /* Given a pointer to a tree node for some base type, return a pointer to
11940    a DIE that describes the given type.
11941
11942    This routine must only be called for GCC type nodes that correspond to
11943    Dwarf base (fundamental) types.  */
11944
11945 static dw_die_ref
11946 base_type_die (tree type)
11947 {
11948   dw_die_ref base_type_result;
11949   enum dwarf_type encoding;
11950
11951   if (TREE_CODE (type) == ERROR_MARK || TREE_CODE (type) == VOID_TYPE)
11952     return 0;
11953
11954   /* If this is a subtype that should not be emitted as a subrange type,
11955      use the base type.  See subrange_type_for_debug_p.  */
11956   if (TREE_CODE (type) == INTEGER_TYPE && TREE_TYPE (type) != NULL_TREE)
11957     type = TREE_TYPE (type);
11958
11959   switch (TREE_CODE (type))
11960     {
11961     case INTEGER_TYPE:
11962       if (TYPE_STRING_FLAG (type))
11963         {
11964           if (TYPE_UNSIGNED (type))
11965             encoding = DW_ATE_unsigned_char;
11966           else
11967             encoding = DW_ATE_signed_char;
11968         }
11969       else if (TYPE_UNSIGNED (type))
11970         encoding = DW_ATE_unsigned;
11971       else
11972         encoding = DW_ATE_signed;
11973       break;
11974
11975     case REAL_TYPE:
11976       if (DECIMAL_FLOAT_MODE_P (TYPE_MODE (type)))
11977         {
11978           if (dwarf_version >= 3 || !dwarf_strict)
11979             encoding = DW_ATE_decimal_float;
11980           else
11981             encoding = DW_ATE_lo_user;
11982         }
11983       else
11984         encoding = DW_ATE_float;
11985       break;
11986
11987     case FIXED_POINT_TYPE:
11988       if (!(dwarf_version >= 3 || !dwarf_strict))
11989         encoding = DW_ATE_lo_user;
11990       else if (TYPE_UNSIGNED (type))
11991         encoding = DW_ATE_unsigned_fixed;
11992       else
11993         encoding = DW_ATE_signed_fixed;
11994       break;
11995
11996       /* Dwarf2 doesn't know anything about complex ints, so use
11997          a user defined type for it.  */
11998     case COMPLEX_TYPE:
11999       if (TREE_CODE (TREE_TYPE (type)) == REAL_TYPE)
12000         encoding = DW_ATE_complex_float;
12001       else
12002         encoding = DW_ATE_lo_user;
12003       break;
12004
12005     case BOOLEAN_TYPE:
12006       /* GNU FORTRAN/Ada/C++ BOOLEAN type.  */
12007       encoding = DW_ATE_boolean;
12008       break;
12009
12010     default:
12011       /* No other TREE_CODEs are Dwarf fundamental types.  */
12012       gcc_unreachable ();
12013     }
12014
12015   base_type_result = new_die (DW_TAG_base_type, comp_unit_die, type);
12016
12017   /* This probably indicates a bug.  */
12018   if (! TYPE_NAME (type))
12019     add_name_attribute (base_type_result, "__unknown__");
12020
12021   add_AT_unsigned (base_type_result, DW_AT_byte_size,
12022                    int_size_in_bytes (type));
12023   add_AT_unsigned (base_type_result, DW_AT_encoding, encoding);
12024
12025   return base_type_result;
12026 }
12027
12028 /* Given a pointer to an arbitrary ..._TYPE tree node, return nonzero if the
12029    given input type is a Dwarf "fundamental" type.  Otherwise return null.  */
12030
12031 static inline int
12032 is_base_type (tree type)
12033 {
12034   switch (TREE_CODE (type))
12035     {
12036     case ERROR_MARK:
12037     case VOID_TYPE:
12038     case INTEGER_TYPE:
12039     case REAL_TYPE:
12040     case FIXED_POINT_TYPE:
12041     case COMPLEX_TYPE:
12042     case BOOLEAN_TYPE:
12043       return 1;
12044
12045     case ARRAY_TYPE:
12046     case RECORD_TYPE:
12047     case UNION_TYPE:
12048     case QUAL_UNION_TYPE:
12049     case ENUMERAL_TYPE:
12050     case FUNCTION_TYPE:
12051     case METHOD_TYPE:
12052     case POINTER_TYPE:
12053     case REFERENCE_TYPE:
12054     case OFFSET_TYPE:
12055     case LANG_TYPE:
12056     case VECTOR_TYPE:
12057       return 0;
12058
12059     default:
12060       gcc_unreachable ();
12061     }
12062
12063   return 0;
12064 }
12065
12066 /* Given a pointer to a tree node, assumed to be some kind of a ..._TYPE
12067    node, return the size in bits for the type if it is a constant, or else
12068    return the alignment for the type if the type's size is not constant, or
12069    else return BITS_PER_WORD if the type actually turns out to be an
12070    ERROR_MARK node.  */
12071
12072 static inline unsigned HOST_WIDE_INT
12073 simple_type_size_in_bits (const_tree type)
12074 {
12075   if (TREE_CODE (type) == ERROR_MARK)
12076     return BITS_PER_WORD;
12077   else if (TYPE_SIZE (type) == NULL_TREE)
12078     return 0;
12079   else if (host_integerp (TYPE_SIZE (type), 1))
12080     return tree_low_cst (TYPE_SIZE (type), 1);
12081   else
12082     return TYPE_ALIGN (type);
12083 }
12084
12085 /*  Given a pointer to a tree node for a subrange type, return a pointer
12086     to a DIE that describes the given type.  */
12087
12088 static dw_die_ref
12089 subrange_type_die (tree type, tree low, tree high, dw_die_ref context_die)
12090 {
12091   dw_die_ref subrange_die;
12092   const HOST_WIDE_INT size_in_bytes = int_size_in_bytes (type);
12093
12094   if (context_die == NULL)
12095     context_die = comp_unit_die;
12096
12097   subrange_die = new_die (DW_TAG_subrange_type, context_die, type);
12098
12099   if (int_size_in_bytes (TREE_TYPE (type)) != size_in_bytes)
12100     {
12101       /* The size of the subrange type and its base type do not match,
12102          so we need to generate a size attribute for the subrange type.  */
12103       add_AT_unsigned (subrange_die, DW_AT_byte_size, size_in_bytes);
12104     }
12105
12106   if (low)
12107     add_bound_info (subrange_die, DW_AT_lower_bound, low);
12108   if (high)
12109     add_bound_info (subrange_die, DW_AT_upper_bound, high);
12110
12111   return subrange_die;
12112 }
12113
12114 /* Given a pointer to an arbitrary ..._TYPE tree node, return a debugging
12115    entry that chains various modifiers in front of the given type.  */
12116
12117 static dw_die_ref
12118 modified_type_die (tree type, int is_const_type, int is_volatile_type,
12119                    dw_die_ref context_die)
12120 {
12121   enum tree_code code = TREE_CODE (type);
12122   dw_die_ref mod_type_die;
12123   dw_die_ref sub_die = NULL;
12124   tree item_type = NULL;
12125   tree qualified_type;
12126   tree name, low, high;
12127
12128   if (code == ERROR_MARK)
12129     return NULL;
12130
12131   /* See if we already have the appropriately qualified variant of
12132      this type.  */
12133   qualified_type
12134     = get_qualified_type (type,
12135                           ((is_const_type ? TYPE_QUAL_CONST : 0)
12136                            | (is_volatile_type ? TYPE_QUAL_VOLATILE : 0)));
12137
12138   /* If we do, then we can just use its DIE, if it exists.  */
12139   if (qualified_type)
12140     {
12141       mod_type_die = lookup_type_die (qualified_type);
12142       if (mod_type_die)
12143         return mod_type_die;
12144     }
12145
12146   name = qualified_type ? TYPE_NAME (qualified_type) : NULL;
12147
12148   /* Handle C typedef types.  */
12149   if (name && TREE_CODE (name) == TYPE_DECL && DECL_ORIGINAL_TYPE (name)
12150       && !DECL_ARTIFICIAL (name))
12151     {
12152       tree dtype = TREE_TYPE (name);
12153
12154       if (qualified_type == dtype)
12155         {
12156           /* For a named type, use the typedef.  */
12157           gen_type_die (qualified_type, context_die);
12158           return lookup_type_die (qualified_type);
12159         }
12160       else if (is_const_type < TYPE_READONLY (dtype)
12161                || is_volatile_type < TYPE_VOLATILE (dtype)
12162                || (is_const_type <= TYPE_READONLY (dtype)
12163                    && is_volatile_type <= TYPE_VOLATILE (dtype)
12164                    && DECL_ORIGINAL_TYPE (name) != type))
12165         /* cv-unqualified version of named type.  Just use the unnamed
12166            type to which it refers.  */
12167         return modified_type_die (DECL_ORIGINAL_TYPE (name),
12168                                   is_const_type, is_volatile_type,
12169                                   context_die);
12170       /* Else cv-qualified version of named type; fall through.  */
12171     }
12172
12173   if (is_const_type)
12174     {
12175       mod_type_die = new_die (DW_TAG_const_type, comp_unit_die, type);
12176       sub_die = modified_type_die (type, 0, is_volatile_type, context_die);
12177     }
12178   else if (is_volatile_type)
12179     {
12180       mod_type_die = new_die (DW_TAG_volatile_type, comp_unit_die, type);
12181       sub_die = modified_type_die (type, 0, 0, context_die);
12182     }
12183   else if (code == POINTER_TYPE)
12184     {
12185       mod_type_die = new_die (DW_TAG_pointer_type, comp_unit_die, type);
12186       add_AT_unsigned (mod_type_die, DW_AT_byte_size,
12187                        simple_type_size_in_bits (type) / BITS_PER_UNIT);
12188       item_type = TREE_TYPE (type);
12189       if (!ADDR_SPACE_GENERIC_P (TYPE_ADDR_SPACE (item_type)))
12190         add_AT_unsigned (mod_type_die, DW_AT_address_class,
12191                          TYPE_ADDR_SPACE (item_type));
12192     }
12193   else if (code == REFERENCE_TYPE)
12194     {
12195       mod_type_die = new_die (DW_TAG_reference_type, comp_unit_die, type);
12196       add_AT_unsigned (mod_type_die, DW_AT_byte_size,
12197                        simple_type_size_in_bits (type) / BITS_PER_UNIT);
12198       item_type = TREE_TYPE (type);
12199       if (!ADDR_SPACE_GENERIC_P (TYPE_ADDR_SPACE (item_type)))
12200         add_AT_unsigned (mod_type_die, DW_AT_address_class,
12201                          TYPE_ADDR_SPACE (item_type));
12202     }
12203   else if (code == INTEGER_TYPE
12204            && TREE_TYPE (type) != NULL_TREE
12205            && subrange_type_for_debug_p (type, &low, &high))
12206     {
12207       mod_type_die = subrange_type_die (type, low, high, context_die);
12208       item_type = TREE_TYPE (type);
12209     }
12210   else if (is_base_type (type))
12211     mod_type_die = base_type_die (type);
12212   else
12213     {
12214       gen_type_die (type, context_die);
12215
12216       /* We have to get the type_main_variant here (and pass that to the
12217          `lookup_type_die' routine) because the ..._TYPE node we have
12218          might simply be a *copy* of some original type node (where the
12219          copy was created to help us keep track of typedef names) and
12220          that copy might have a different TYPE_UID from the original
12221          ..._TYPE node.  */
12222       if (TREE_CODE (type) != VECTOR_TYPE)
12223         return lookup_type_die (type_main_variant (type));
12224       else
12225         /* Vectors have the debugging information in the type,
12226            not the main variant.  */
12227         return lookup_type_die (type);
12228     }
12229
12230   /* Builtin types don't have a DECL_ORIGINAL_TYPE.  For those,
12231      don't output a DW_TAG_typedef, since there isn't one in the
12232      user's program; just attach a DW_AT_name to the type.
12233      Don't attach a DW_AT_name to DW_TAG_const_type or DW_TAG_volatile_type
12234      if the base type already has the same name.  */
12235   if (name
12236       && ((TREE_CODE (name) != TYPE_DECL
12237            && (qualified_type == TYPE_MAIN_VARIANT (type)
12238                || (!is_const_type && !is_volatile_type)))
12239           || (TREE_CODE (name) == TYPE_DECL
12240               && TREE_TYPE (name) == qualified_type
12241               && DECL_NAME (name))))
12242     {
12243       if (TREE_CODE (name) == TYPE_DECL)
12244         /* Could just call add_name_and_src_coords_attributes here,
12245            but since this is a builtin type it doesn't have any
12246            useful source coordinates anyway.  */
12247         name = DECL_NAME (name);
12248       add_name_attribute (mod_type_die, IDENTIFIER_POINTER (name));
12249     }
12250
12251   if (qualified_type)
12252     equate_type_number_to_die (qualified_type, mod_type_die);
12253
12254   if (item_type)
12255     /* We must do this after the equate_type_number_to_die call, in case
12256        this is a recursive type.  This ensures that the modified_type_die
12257        recursion will terminate even if the type is recursive.  Recursive
12258        types are possible in Ada.  */
12259     sub_die = modified_type_die (item_type,
12260                                  TYPE_READONLY (item_type),
12261                                  TYPE_VOLATILE (item_type),
12262                                  context_die);
12263
12264   if (sub_die != NULL)
12265     add_AT_die_ref (mod_type_die, DW_AT_type, sub_die);
12266
12267   return mod_type_die;
12268 }
12269
12270 /* Generate DIEs for the generic parameters of T.
12271    T must be either a generic type or a generic function.
12272    See http://gcc.gnu.org/wiki/TemplateParmsDwarf for more.  */
12273
12274 static void
12275 gen_generic_params_dies (tree t)
12276 {
12277   tree parms, args;
12278   int parms_num, i;
12279   dw_die_ref die = NULL;
12280
12281   if (!t || (TYPE_P (t) && !COMPLETE_TYPE_P (t)))
12282     return;
12283
12284   if (TYPE_P (t))
12285     die = lookup_type_die (t);
12286   else if (DECL_P (t))
12287     die = lookup_decl_die (t);
12288
12289   gcc_assert (die);
12290
12291   parms = lang_hooks.get_innermost_generic_parms (t);
12292   if (!parms)
12293     /* T has no generic parameter. It means T is neither a generic type
12294        or function. End of story.  */
12295     return;
12296
12297   parms_num = TREE_VEC_LENGTH (parms);
12298   args = lang_hooks.get_innermost_generic_args (t);
12299   for (i = 0; i < parms_num; i++)
12300     {
12301       tree parm, arg, arg_pack_elems;
12302
12303       parm = TREE_VEC_ELT (parms, i);
12304       arg = TREE_VEC_ELT (args, i);
12305       arg_pack_elems = lang_hooks.types.get_argument_pack_elems (arg);
12306       gcc_assert (parm && TREE_VALUE (parm) && arg);
12307
12308       if (parm && TREE_VALUE (parm) && arg)
12309         {
12310           /* If PARM represents a template parameter pack,
12311              emit a DW_TAG_GNU_template_parameter_pack DIE, followed
12312              by DW_TAG_template_*_parameter DIEs for the argument
12313              pack elements of ARG. Note that ARG would then be
12314              an argument pack.  */
12315           if (arg_pack_elems)
12316             template_parameter_pack_die (TREE_VALUE (parm),
12317                                          arg_pack_elems,
12318                                          die);
12319           else
12320             generic_parameter_die (TREE_VALUE (parm), arg,
12321                                    true /* Emit DW_AT_name */, die);
12322         }
12323     }
12324 }
12325
12326 /* Create and return a DIE for PARM which should be
12327    the representation of a generic type parameter.
12328    For instance, in the C++ front end, PARM would be a template parameter.
12329    ARG is the argument to PARM.
12330    EMIT_NAME_P if tree, the DIE will have DW_AT_name attribute set to the
12331    name of the PARM.
12332    PARENT_DIE is the parent DIE which the new created DIE should be added to,
12333    as a child node.  */
12334
12335 static dw_die_ref
12336 generic_parameter_die (tree parm, tree arg,
12337                        bool emit_name_p,
12338                        dw_die_ref parent_die)
12339 {
12340   dw_die_ref tmpl_die = NULL;
12341   const char *name = NULL;
12342
12343   if (!parm || !DECL_NAME (parm) || !arg)
12344     return NULL;
12345
12346   /* We support non-type generic parameters and arguments,
12347      type generic parameters and arguments, as well as
12348      generic generic parameters (a.k.a. template template parameters in C++)
12349      and arguments.  */
12350   if (TREE_CODE (parm) == PARM_DECL)
12351     /* PARM is a nontype generic parameter  */
12352     tmpl_die = new_die (DW_TAG_template_value_param, parent_die, parm);
12353   else if (TREE_CODE (parm) == TYPE_DECL)
12354     /* PARM is a type generic parameter.  */
12355     tmpl_die = new_die (DW_TAG_template_type_param, parent_die, parm);
12356   else if (lang_hooks.decls.generic_generic_parameter_decl_p (parm))
12357     /* PARM is a generic generic parameter.
12358        Its DIE is a GNU extension. It shall have a
12359        DW_AT_name attribute to represent the name of the template template
12360        parameter, and a DW_AT_GNU_template_name attribute to represent the
12361        name of the template template argument.  */
12362     tmpl_die = new_die (DW_TAG_GNU_template_template_param,
12363                         parent_die, parm);
12364   else
12365     gcc_unreachable ();
12366
12367   if (tmpl_die)
12368     {
12369       tree tmpl_type;
12370
12371       /* If PARM is a generic parameter pack, it means we are
12372          emitting debug info for a template argument pack element.
12373          In other terms, ARG is a template argument pack element.
12374          In that case, we don't emit any DW_AT_name attribute for
12375          the die.  */
12376       if (emit_name_p)
12377         {
12378           name = IDENTIFIER_POINTER (DECL_NAME (parm));
12379           gcc_assert (name);
12380           add_AT_string (tmpl_die, DW_AT_name, name);
12381         }
12382
12383       if (!lang_hooks.decls.generic_generic_parameter_decl_p (parm))
12384         {
12385           /* DWARF3, 5.6.8 says if PARM is a non-type generic parameter
12386              TMPL_DIE should have a child DW_AT_type attribute that is set
12387              to the type of the argument to PARM, which is ARG.
12388              If PARM is a type generic parameter, TMPL_DIE should have a
12389              child DW_AT_type that is set to ARG.  */
12390           tmpl_type = TYPE_P (arg) ? arg : TREE_TYPE (arg);
12391           add_type_attribute (tmpl_die, tmpl_type, 0,
12392                               TREE_THIS_VOLATILE (tmpl_type),
12393                               parent_die);
12394         }
12395       else
12396         {
12397           /* So TMPL_DIE is a DIE representing a
12398              a generic generic template parameter, a.k.a template template
12399              parameter in C++ and arg is a template.  */
12400
12401           /* The DW_AT_GNU_template_name attribute of the DIE must be set
12402              to the name of the argument.  */
12403           name = dwarf2_name (TYPE_P (arg) ? TYPE_NAME (arg) : arg, 1);
12404           if (name)
12405             add_AT_string (tmpl_die, DW_AT_GNU_template_name, name);
12406         }
12407
12408       if (TREE_CODE (parm) == PARM_DECL)
12409         /* So PARM is a non-type generic parameter.
12410            DWARF3 5.6.8 says we must set a DW_AT_const_value child
12411            attribute of TMPL_DIE which value represents the value
12412            of ARG.
12413            We must be careful here:
12414            The value of ARG might reference some function decls.
12415            We might currently be emitting debug info for a generic
12416            type and types are emitted before function decls, we don't
12417            know if the function decls referenced by ARG will actually be
12418            emitted after cgraph computations.
12419            So must defer the generation of the DW_AT_const_value to
12420            after cgraph is ready.  */
12421         append_entry_to_tmpl_value_parm_die_table (tmpl_die, arg);
12422     }
12423
12424   return tmpl_die;
12425 }
12426
12427 /* Generate and return a  DW_TAG_GNU_template_parameter_pack DIE representing.
12428    PARM_PACK must be a template parameter pack. The returned DIE
12429    will be child DIE of PARENT_DIE.  */
12430
12431 static dw_die_ref
12432 template_parameter_pack_die (tree parm_pack,
12433                              tree parm_pack_args,
12434                              dw_die_ref parent_die)
12435 {
12436   dw_die_ref die;
12437   int j;
12438
12439   gcc_assert (parent_die && parm_pack);
12440
12441   die = new_die (DW_TAG_GNU_template_parameter_pack, parent_die, parm_pack);
12442   add_name_and_src_coords_attributes (die, parm_pack);
12443   for (j = 0; j < TREE_VEC_LENGTH (parm_pack_args); j++)
12444     generic_parameter_die (parm_pack,
12445                            TREE_VEC_ELT (parm_pack_args, j),
12446                            false /* Don't emit DW_AT_name */,
12447                            die);
12448   return die;
12449 }
12450
12451 /* Given a pointer to an arbitrary ..._TYPE tree node, return true if it is
12452    an enumerated type.  */
12453
12454 static inline int
12455 type_is_enum (const_tree type)
12456 {
12457   return TREE_CODE (type) == ENUMERAL_TYPE;
12458 }
12459
12460 /* Return the DBX register number described by a given RTL node.  */
12461
12462 static unsigned int
12463 dbx_reg_number (const_rtx rtl)
12464 {
12465   unsigned regno = REGNO (rtl);
12466
12467   gcc_assert (regno < FIRST_PSEUDO_REGISTER);
12468
12469 #ifdef LEAF_REG_REMAP
12470   if (current_function_uses_only_leaf_regs)
12471     {
12472       int leaf_reg = LEAF_REG_REMAP (regno);
12473       if (leaf_reg != -1)
12474         regno = (unsigned) leaf_reg;
12475     }
12476 #endif
12477
12478   return DBX_REGISTER_NUMBER (regno);
12479 }
12480
12481 /* Optionally add a DW_OP_piece term to a location description expression.
12482    DW_OP_piece is only added if the location description expression already
12483    doesn't end with DW_OP_piece.  */
12484
12485 static void
12486 add_loc_descr_op_piece (dw_loc_descr_ref *list_head, int size)
12487 {
12488   dw_loc_descr_ref loc;
12489
12490   if (*list_head != NULL)
12491     {
12492       /* Find the end of the chain.  */
12493       for (loc = *list_head; loc->dw_loc_next != NULL; loc = loc->dw_loc_next)
12494         ;
12495
12496       if (loc->dw_loc_opc != DW_OP_piece)
12497         loc->dw_loc_next = new_loc_descr (DW_OP_piece, size, 0);
12498     }
12499 }
12500
12501 /* Return a location descriptor that designates a machine register or
12502    zero if there is none.  */
12503
12504 static dw_loc_descr_ref
12505 reg_loc_descriptor (rtx rtl, enum var_init_status initialized)
12506 {
12507   rtx regs;
12508
12509   if (REGNO (rtl) >= FIRST_PSEUDO_REGISTER)
12510     return 0;
12511
12512   regs = targetm.dwarf_register_span (rtl);
12513
12514   if (hard_regno_nregs[REGNO (rtl)][GET_MODE (rtl)] > 1 || regs)
12515     return multiple_reg_loc_descriptor (rtl, regs, initialized);
12516   else
12517     return one_reg_loc_descriptor (dbx_reg_number (rtl), initialized);
12518 }
12519
12520 /* Return a location descriptor that designates a machine register for
12521    a given hard register number.  */
12522
12523 static dw_loc_descr_ref
12524 one_reg_loc_descriptor (unsigned int regno, enum var_init_status initialized)
12525 {
12526   dw_loc_descr_ref reg_loc_descr;
12527
12528   if (regno <= 31)
12529     reg_loc_descr
12530       = new_loc_descr ((enum dwarf_location_atom) (DW_OP_reg0 + regno), 0, 0);
12531   else
12532     reg_loc_descr = new_loc_descr (DW_OP_regx, regno, 0);
12533
12534   if (initialized == VAR_INIT_STATUS_UNINITIALIZED)
12535     add_loc_descr (&reg_loc_descr, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
12536
12537   return reg_loc_descr;
12538 }
12539
12540 /* Given an RTL of a register, return a location descriptor that
12541    designates a value that spans more than one register.  */
12542
12543 static dw_loc_descr_ref
12544 multiple_reg_loc_descriptor (rtx rtl, rtx regs,
12545                              enum var_init_status initialized)
12546 {
12547   int nregs, size, i;
12548   unsigned reg;
12549   dw_loc_descr_ref loc_result = NULL;
12550
12551   reg = REGNO (rtl);
12552 #ifdef LEAF_REG_REMAP
12553   if (current_function_uses_only_leaf_regs)
12554     {
12555       int leaf_reg = LEAF_REG_REMAP (reg);
12556       if (leaf_reg != -1)
12557         reg = (unsigned) leaf_reg;
12558     }
12559 #endif
12560   gcc_assert ((unsigned) DBX_REGISTER_NUMBER (reg) == dbx_reg_number (rtl));
12561   nregs = hard_regno_nregs[REGNO (rtl)][GET_MODE (rtl)];
12562
12563   /* Simple, contiguous registers.  */
12564   if (regs == NULL_RTX)
12565     {
12566       size = GET_MODE_SIZE (GET_MODE (rtl)) / nregs;
12567
12568       loc_result = NULL;
12569       while (nregs--)
12570         {
12571           dw_loc_descr_ref t;
12572
12573           t = one_reg_loc_descriptor (DBX_REGISTER_NUMBER (reg),
12574                                       VAR_INIT_STATUS_INITIALIZED);
12575           add_loc_descr (&loc_result, t);
12576           add_loc_descr_op_piece (&loc_result, size);
12577           ++reg;
12578         }
12579       return loc_result;
12580     }
12581
12582   /* Now onto stupid register sets in non contiguous locations.  */
12583
12584   gcc_assert (GET_CODE (regs) == PARALLEL);
12585
12586   size = GET_MODE_SIZE (GET_MODE (XVECEXP (regs, 0, 0)));
12587   loc_result = NULL;
12588
12589   for (i = 0; i < XVECLEN (regs, 0); ++i)
12590     {
12591       dw_loc_descr_ref t;
12592
12593       t = one_reg_loc_descriptor (REGNO (XVECEXP (regs, 0, i)),
12594                                   VAR_INIT_STATUS_INITIALIZED);
12595       add_loc_descr (&loc_result, t);
12596       size = GET_MODE_SIZE (GET_MODE (XVECEXP (regs, 0, 0)));
12597       add_loc_descr_op_piece (&loc_result, size);
12598     }
12599
12600   if (loc_result && initialized == VAR_INIT_STATUS_UNINITIALIZED)
12601     add_loc_descr (&loc_result, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
12602   return loc_result;
12603 }
12604
12605 #endif /* DWARF2_DEBUGGING_INFO */
12606
12607 #if defined (DWARF2_DEBUGGING_INFO) || defined (DWARF2_UNWIND_INFO)
12608
12609 /* Return a location descriptor that designates a constant.  */
12610
12611 static dw_loc_descr_ref
12612 int_loc_descriptor (HOST_WIDE_INT i)
12613 {
12614   enum dwarf_location_atom op;
12615
12616   /* Pick the smallest representation of a constant, rather than just
12617      defaulting to the LEB encoding.  */
12618   if (i >= 0)
12619     {
12620       if (i <= 31)
12621         op = (enum dwarf_location_atom) (DW_OP_lit0 + i);
12622       else if (i <= 0xff)
12623         op = DW_OP_const1u;
12624       else if (i <= 0xffff)
12625         op = DW_OP_const2u;
12626       else if (HOST_BITS_PER_WIDE_INT == 32
12627                || i <= 0xffffffff)
12628         op = DW_OP_const4u;
12629       else
12630         op = DW_OP_constu;
12631     }
12632   else
12633     {
12634       if (i >= -0x80)
12635         op = DW_OP_const1s;
12636       else if (i >= -0x8000)
12637         op = DW_OP_const2s;
12638       else if (HOST_BITS_PER_WIDE_INT == 32
12639                || i >= -0x80000000)
12640         op = DW_OP_const4s;
12641       else
12642         op = DW_OP_consts;
12643     }
12644
12645   return new_loc_descr (op, i, 0);
12646 }
12647 #endif
12648
12649 #ifdef DWARF2_DEBUGGING_INFO
12650 /* Return loc description representing "address" of integer value.
12651    This can appear only as toplevel expression.  */
12652
12653 static dw_loc_descr_ref
12654 address_of_int_loc_descriptor (int size, HOST_WIDE_INT i)
12655 {
12656   int litsize;
12657   dw_loc_descr_ref loc_result = NULL;
12658
12659   if (!(dwarf_version >= 4 || !dwarf_strict))
12660     return NULL;
12661
12662   if (i >= 0)
12663     {
12664       if (i <= 31)
12665         litsize = 1;
12666       else if (i <= 0xff)
12667         litsize = 2;
12668       else if (i <= 0xffff)
12669         litsize = 3;
12670       else if (HOST_BITS_PER_WIDE_INT == 32
12671                || i <= 0xffffffff)
12672         litsize = 5;
12673       else
12674         litsize = 1 + size_of_uleb128 ((unsigned HOST_WIDE_INT) i);
12675     }
12676   else
12677     {
12678       if (i >= -0x80)
12679         litsize = 2;
12680       else if (i >= -0x8000)
12681         litsize = 3;
12682       else if (HOST_BITS_PER_WIDE_INT == 32
12683                || i >= -0x80000000)
12684         litsize = 5;
12685       else
12686         litsize = 1 + size_of_sleb128 (i);
12687     }
12688   /* Determine if DW_OP_stack_value or DW_OP_implicit_value
12689      is more compact.  For DW_OP_stack_value we need:
12690      litsize + 1 (DW_OP_stack_value)
12691      and for DW_OP_implicit_value:
12692      1 (DW_OP_implicit_value) + 1 (length) + size.  */
12693   if ((int) DWARF2_ADDR_SIZE >= size && litsize + 1 <= 1 + 1 + size)
12694     {
12695       loc_result = int_loc_descriptor (i);
12696       add_loc_descr (&loc_result,
12697                      new_loc_descr (DW_OP_stack_value, 0, 0));
12698       return loc_result;
12699     }
12700
12701   loc_result = new_loc_descr (DW_OP_implicit_value,
12702                               size, 0);
12703   loc_result->dw_loc_oprnd2.val_class = dw_val_class_const;
12704   loc_result->dw_loc_oprnd2.v.val_int = i;
12705   return loc_result;
12706 }
12707
12708 /* Return a location descriptor that designates a base+offset location.  */
12709
12710 static dw_loc_descr_ref
12711 based_loc_descr (rtx reg, HOST_WIDE_INT offset,
12712                  enum var_init_status initialized)
12713 {
12714   unsigned int regno;
12715   dw_loc_descr_ref result;
12716   dw_fde_ref fde = current_fde ();
12717
12718   /* We only use "frame base" when we're sure we're talking about the
12719      post-prologue local stack frame.  We do this by *not* running
12720      register elimination until this point, and recognizing the special
12721      argument pointer and soft frame pointer rtx's.  */
12722   if (reg == arg_pointer_rtx || reg == frame_pointer_rtx)
12723     {
12724       rtx elim = eliminate_regs (reg, VOIDmode, NULL_RTX);
12725
12726       if (elim != reg)
12727         {
12728           if (GET_CODE (elim) == PLUS)
12729             {
12730               offset += INTVAL (XEXP (elim, 1));
12731               elim = XEXP (elim, 0);
12732             }
12733           gcc_assert ((SUPPORTS_STACK_ALIGNMENT
12734                        && (elim == hard_frame_pointer_rtx
12735                            || elim == stack_pointer_rtx))
12736                       || elim == (frame_pointer_needed
12737                                   ? hard_frame_pointer_rtx
12738                                   : stack_pointer_rtx));
12739
12740           /* If drap register is used to align stack, use frame
12741              pointer + offset to access stack variables.  If stack
12742              is aligned without drap, use stack pointer + offset to
12743              access stack variables.  */
12744           if (crtl->stack_realign_tried
12745               && reg == frame_pointer_rtx)
12746             {
12747               int base_reg
12748                 = DWARF_FRAME_REGNUM ((fde && fde->drap_reg != INVALID_REGNUM)
12749                                       ? HARD_FRAME_POINTER_REGNUM
12750                                       : STACK_POINTER_REGNUM);
12751               return new_reg_loc_descr (base_reg, offset);
12752             }
12753
12754           offset += frame_pointer_fb_offset;
12755           return new_loc_descr (DW_OP_fbreg, offset, 0);
12756         }
12757     }
12758   else if (!optimize
12759            && fde
12760            && (fde->drap_reg == REGNO (reg)
12761                || fde->vdrap_reg == REGNO (reg)))
12762     {
12763       /* Use cfa+offset to represent the location of arguments passed
12764          on the stack when drap is used to align stack.
12765          Only do this when not optimizing, for optimized code var-tracking
12766          is supposed to track where the arguments live and the register
12767          used as vdrap or drap in some spot might be used for something
12768          else in other part of the routine.  */
12769       return new_loc_descr (DW_OP_fbreg, offset, 0);
12770     }
12771
12772   regno = dbx_reg_number (reg);
12773   if (regno <= 31)
12774     result = new_loc_descr ((enum dwarf_location_atom) (DW_OP_breg0 + regno),
12775                             offset, 0);
12776   else
12777     result = new_loc_descr (DW_OP_bregx, regno, offset);
12778
12779   if (initialized == VAR_INIT_STATUS_UNINITIALIZED)
12780     add_loc_descr (&result, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
12781
12782   return result;
12783 }
12784
12785 /* Return true if this RTL expression describes a base+offset calculation.  */
12786
12787 static inline int
12788 is_based_loc (const_rtx rtl)
12789 {
12790   return (GET_CODE (rtl) == PLUS
12791           && ((REG_P (XEXP (rtl, 0))
12792                && REGNO (XEXP (rtl, 0)) < FIRST_PSEUDO_REGISTER
12793                && CONST_INT_P (XEXP (rtl, 1)))));
12794 }
12795
12796 /* Try to handle TLS MEMs, for which mem_loc_descriptor on XEXP (mem, 0)
12797    failed.  */
12798
12799 static dw_loc_descr_ref
12800 tls_mem_loc_descriptor (rtx mem)
12801 {
12802   tree base;
12803   dw_loc_descr_ref loc_result;
12804
12805   if (MEM_EXPR (mem) == NULL_TREE || MEM_OFFSET (mem) == NULL_RTX)
12806     return NULL;
12807
12808   base = get_base_address (MEM_EXPR (mem));
12809   if (base == NULL
12810       || TREE_CODE (base) != VAR_DECL
12811       || !DECL_THREAD_LOCAL_P (base))
12812     return NULL;
12813
12814   loc_result = loc_descriptor_from_tree (MEM_EXPR (mem), 1);
12815   if (loc_result == NULL)
12816     return NULL;
12817
12818   if (INTVAL (MEM_OFFSET (mem)))
12819     loc_descr_plus_const (&loc_result, INTVAL (MEM_OFFSET (mem)));
12820
12821   return loc_result;
12822 }
12823
12824 /* Output debug info about reason why we failed to expand expression as dwarf
12825    expression.  */
12826
12827 static void
12828 expansion_failed (tree expr, rtx rtl, char const *reason)
12829 {
12830   if (dump_file && (dump_flags & TDF_DETAILS))
12831     {
12832       fprintf (dump_file, "Failed to expand as dwarf: ");
12833       if (expr)
12834         print_generic_expr (dump_file, expr, dump_flags);
12835       if (rtl)
12836         {
12837           fprintf (dump_file, "\n");
12838           print_rtl (dump_file, rtl);
12839         }
12840       fprintf (dump_file, "\nReason: %s\n", reason);
12841     }
12842 }
12843
12844 /* Helper function for const_ok_for_output, called either directly
12845    or via for_each_rtx.  */
12846
12847 static int
12848 const_ok_for_output_1 (rtx *rtlp, void *data ATTRIBUTE_UNUSED)
12849 {
12850   rtx rtl = *rtlp;
12851
12852   if (GET_CODE (rtl) == UNSPEC)
12853     {
12854       /* If delegitimize_address couldn't do anything with the UNSPEC, assume
12855          we can't express it in the debug info.  */
12856 #ifdef ENABLE_CHECKING
12857       inform (current_function_decl
12858               ? DECL_SOURCE_LOCATION (current_function_decl)
12859               : UNKNOWN_LOCATION,
12860               "non-delegitimized UNSPEC %d found in variable location",
12861               XINT (rtl, 1));
12862 #endif
12863       expansion_failed (NULL_TREE, rtl,
12864                         "UNSPEC hasn't been delegitimized.\n");
12865       return 1;
12866     }
12867
12868   if (GET_CODE (rtl) != SYMBOL_REF)
12869     return 0;
12870
12871   if (CONSTANT_POOL_ADDRESS_P (rtl))
12872     {
12873       bool marked;
12874       get_pool_constant_mark (rtl, &marked);
12875       /* If all references to this pool constant were optimized away,
12876          it was not output and thus we can't represent it.  */
12877       if (!marked)
12878         {
12879           expansion_failed (NULL_TREE, rtl,
12880                             "Constant was removed from constant pool.\n");
12881           return 1;
12882         }
12883     }
12884
12885   if (SYMBOL_REF_TLS_MODEL (rtl) != TLS_MODEL_NONE)
12886     return 1;
12887
12888   /* Avoid references to external symbols in debug info, on several targets
12889      the linker might even refuse to link when linking a shared library,
12890      and in many other cases the relocations for .debug_info/.debug_loc are
12891      dropped, so the address becomes zero anyway.  Hidden symbols, guaranteed
12892      to be defined within the same shared library or executable are fine.  */
12893   if (SYMBOL_REF_EXTERNAL_P (rtl))
12894     {
12895       tree decl = SYMBOL_REF_DECL (rtl);
12896
12897       if (decl == NULL || !targetm.binds_local_p (decl))
12898         {
12899           expansion_failed (NULL_TREE, rtl,
12900                             "Symbol not defined in current TU.\n");
12901           return 1;
12902         }
12903     }
12904
12905   return 0;
12906 }
12907
12908 /* Return true if constant RTL can be emitted in DW_OP_addr or
12909    DW_AT_const_value.  TLS SYMBOL_REFs, external SYMBOL_REFs or
12910    non-marked constant pool SYMBOL_REFs can't be referenced in it.  */
12911
12912 static bool
12913 const_ok_for_output (rtx rtl)
12914 {
12915   if (GET_CODE (rtl) == SYMBOL_REF)
12916     return const_ok_for_output_1 (&rtl, NULL) == 0;
12917
12918   if (GET_CODE (rtl) == CONST)
12919     return for_each_rtx (&XEXP (rtl, 0), const_ok_for_output_1, NULL) == 0;
12920
12921   return true;
12922 }
12923
12924 /* The following routine converts the RTL for a variable or parameter
12925    (resident in memory) into an equivalent Dwarf representation of a
12926    mechanism for getting the address of that same variable onto the top of a
12927    hypothetical "address evaluation" stack.
12928
12929    When creating memory location descriptors, we are effectively transforming
12930    the RTL for a memory-resident object into its Dwarf postfix expression
12931    equivalent.  This routine recursively descends an RTL tree, turning
12932    it into Dwarf postfix code as it goes.
12933
12934    MODE is the mode of the memory reference, needed to handle some
12935    autoincrement addressing modes.
12936
12937    CAN_USE_FBREG is a flag whether we can use DW_AT_frame_base in the
12938    location list for RTL.
12939
12940    Return 0 if we can't represent the location.  */
12941
12942 static dw_loc_descr_ref
12943 mem_loc_descriptor (rtx rtl, enum machine_mode mode,
12944                     enum var_init_status initialized)
12945 {
12946   dw_loc_descr_ref mem_loc_result = NULL;
12947   enum dwarf_location_atom op;
12948   dw_loc_descr_ref op0, op1;
12949
12950   /* Note that for a dynamically sized array, the location we will generate a
12951      description of here will be the lowest numbered location which is
12952      actually within the array.  That's *not* necessarily the same as the
12953      zeroth element of the array.  */
12954
12955   rtl = targetm.delegitimize_address (rtl);
12956
12957   switch (GET_CODE (rtl))
12958     {
12959     case POST_INC:
12960     case POST_DEC:
12961     case POST_MODIFY:
12962       return mem_loc_descriptor (XEXP (rtl, 0), mode, initialized);
12963
12964     case SUBREG:
12965       /* The case of a subreg may arise when we have a local (register)
12966          variable or a formal (register) parameter which doesn't quite fill
12967          up an entire register.  For now, just assume that it is
12968          legitimate to make the Dwarf info refer to the whole register which
12969          contains the given subreg.  */
12970       if (!subreg_lowpart_p (rtl))
12971         break;
12972       rtl = SUBREG_REG (rtl);
12973       if (GET_MODE_SIZE (GET_MODE (rtl)) > DWARF2_ADDR_SIZE)
12974         break;
12975       if (GET_MODE_CLASS (GET_MODE (rtl)) != MODE_INT)
12976         break;
12977       mem_loc_result = mem_loc_descriptor (rtl, mode, initialized);
12978       break;
12979
12980     case REG:
12981       /* Whenever a register number forms a part of the description of the
12982          method for calculating the (dynamic) address of a memory resident
12983          object, DWARF rules require the register number be referred to as
12984          a "base register".  This distinction is not based in any way upon
12985          what category of register the hardware believes the given register
12986          belongs to.  This is strictly DWARF terminology we're dealing with
12987          here. Note that in cases where the location of a memory-resident
12988          data object could be expressed as: OP_ADD (OP_BASEREG (basereg),
12989          OP_CONST (0)) the actual DWARF location descriptor that we generate
12990          may just be OP_BASEREG (basereg).  This may look deceptively like
12991          the object in question was allocated to a register (rather than in
12992          memory) so DWARF consumers need to be aware of the subtle
12993          distinction between OP_REG and OP_BASEREG.  */
12994       if (REGNO (rtl) < FIRST_PSEUDO_REGISTER)
12995         mem_loc_result = based_loc_descr (rtl, 0, VAR_INIT_STATUS_INITIALIZED);
12996       else if (stack_realign_drap
12997                && crtl->drap_reg
12998                && crtl->args.internal_arg_pointer == rtl
12999                && REGNO (crtl->drap_reg) < FIRST_PSEUDO_REGISTER)
13000         {
13001           /* If RTL is internal_arg_pointer, which has been optimized
13002              out, use DRAP instead.  */
13003           mem_loc_result = based_loc_descr (crtl->drap_reg, 0,
13004                                             VAR_INIT_STATUS_INITIALIZED);
13005         }
13006       break;
13007
13008     case SIGN_EXTEND:
13009     case ZERO_EXTEND:
13010       op0 = mem_loc_descriptor (XEXP (rtl, 0), mode,
13011                                 VAR_INIT_STATUS_INITIALIZED);
13012       if (op0 == 0)
13013         break;
13014       else
13015         {
13016           int shift = DWARF2_ADDR_SIZE
13017                       - GET_MODE_SIZE (GET_MODE (XEXP (rtl, 0)));
13018           shift *= BITS_PER_UNIT;
13019           if (GET_CODE (rtl) == SIGN_EXTEND)
13020             op = DW_OP_shra;
13021           else
13022             op = DW_OP_shr;
13023           mem_loc_result = op0;
13024           add_loc_descr (&mem_loc_result, int_loc_descriptor (shift));
13025           add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_shl, 0, 0));
13026           add_loc_descr (&mem_loc_result, int_loc_descriptor (shift));
13027           add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0));
13028         }
13029       break;
13030
13031     case MEM:
13032       mem_loc_result = mem_loc_descriptor (XEXP (rtl, 0), GET_MODE (rtl),
13033                                            VAR_INIT_STATUS_INITIALIZED);
13034       if (mem_loc_result == NULL)
13035         mem_loc_result = tls_mem_loc_descriptor (rtl);
13036       if (mem_loc_result != 0)
13037         {
13038           if (GET_MODE_SIZE (GET_MODE (rtl)) > DWARF2_ADDR_SIZE)
13039             {
13040               expansion_failed (NULL_TREE, rtl, "DWARF address size mismatch");
13041               return 0;
13042             }
13043           else if (GET_MODE_SIZE (GET_MODE (rtl)) == DWARF2_ADDR_SIZE)
13044             add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_deref, 0, 0));
13045           else
13046             add_loc_descr (&mem_loc_result,
13047                            new_loc_descr (DW_OP_deref_size,
13048                                           GET_MODE_SIZE (GET_MODE (rtl)), 0));
13049         }
13050       else
13051         {
13052           rtx new_rtl = avoid_constant_pool_reference (rtl);
13053           if (new_rtl != rtl)
13054             return mem_loc_descriptor (new_rtl, mode, initialized);
13055         }
13056       break;
13057
13058     case LO_SUM:
13059          rtl = XEXP (rtl, 1);
13060
13061       /* ... fall through ...  */
13062
13063     case LABEL_REF:
13064       /* Some ports can transform a symbol ref into a label ref, because
13065          the symbol ref is too far away and has to be dumped into a constant
13066          pool.  */
13067     case CONST:
13068     case SYMBOL_REF:
13069       if (GET_CODE (rtl) == SYMBOL_REF
13070           && SYMBOL_REF_TLS_MODEL (rtl) != TLS_MODEL_NONE)
13071         {
13072           dw_loc_descr_ref temp;
13073
13074           /* If this is not defined, we have no way to emit the data.  */
13075           if (!targetm.have_tls || !targetm.asm_out.output_dwarf_dtprel)
13076             break;
13077
13078           temp = new_loc_descr (DW_OP_addr, 0, 0);
13079           temp->dw_loc_oprnd1.val_class = dw_val_class_addr;
13080           temp->dw_loc_oprnd1.v.val_addr = rtl;
13081           temp->dtprel = true;
13082
13083           mem_loc_result = new_loc_descr (DW_OP_GNU_push_tls_address, 0, 0);
13084           add_loc_descr (&mem_loc_result, temp);
13085
13086           break;
13087         }
13088
13089       if (!const_ok_for_output (rtl))
13090         break;
13091
13092     symref:
13093       mem_loc_result = new_loc_descr (DW_OP_addr, 0, 0);
13094       mem_loc_result->dw_loc_oprnd1.val_class = dw_val_class_addr;
13095       mem_loc_result->dw_loc_oprnd1.v.val_addr = rtl;
13096       VEC_safe_push (rtx, gc, used_rtx_array, rtl);
13097       break;
13098
13099     case CONCAT:
13100     case CONCATN:
13101     case VAR_LOCATION:
13102       expansion_failed (NULL_TREE, rtl,
13103                         "CONCAT/CONCATN/VAR_LOCATION is handled only by loc_descriptor");
13104       return 0;
13105
13106     case PRE_MODIFY:
13107       /* Extract the PLUS expression nested inside and fall into
13108          PLUS code below.  */
13109       rtl = XEXP (rtl, 1);
13110       goto plus;
13111
13112     case PRE_INC:
13113     case PRE_DEC:
13114       /* Turn these into a PLUS expression and fall into the PLUS code
13115          below.  */
13116       rtl = gen_rtx_PLUS (word_mode, XEXP (rtl, 0),
13117                           GEN_INT (GET_CODE (rtl) == PRE_INC
13118                                    ? GET_MODE_UNIT_SIZE (mode)
13119                                    : -GET_MODE_UNIT_SIZE (mode)));
13120
13121       /* ... fall through ...  */
13122
13123     case PLUS:
13124     plus:
13125       if (is_based_loc (rtl))
13126         mem_loc_result = based_loc_descr (XEXP (rtl, 0),
13127                                           INTVAL (XEXP (rtl, 1)),
13128                                           VAR_INIT_STATUS_INITIALIZED);
13129       else
13130         {
13131           mem_loc_result = mem_loc_descriptor (XEXP (rtl, 0), mode,
13132                                                VAR_INIT_STATUS_INITIALIZED);
13133           if (mem_loc_result == 0)
13134             break;
13135
13136           if (CONST_INT_P (XEXP (rtl, 1)))
13137             loc_descr_plus_const (&mem_loc_result, INTVAL (XEXP (rtl, 1)));
13138           else
13139             {
13140               dw_loc_descr_ref mem_loc_result2
13141                 = mem_loc_descriptor (XEXP (rtl, 1), mode,
13142                                       VAR_INIT_STATUS_INITIALIZED);
13143               if (mem_loc_result2 == 0)
13144                 break;
13145               add_loc_descr (&mem_loc_result, mem_loc_result2);
13146               add_loc_descr (&mem_loc_result,
13147                              new_loc_descr (DW_OP_plus, 0, 0));
13148             }
13149         }
13150       break;
13151
13152     /* If a pseudo-reg is optimized away, it is possible for it to
13153        be replaced with a MEM containing a multiply or shift.  */
13154     case MINUS:
13155       op = DW_OP_minus;
13156       goto do_binop;
13157
13158     case MULT:
13159       op = DW_OP_mul;
13160       goto do_binop;
13161
13162     case DIV:
13163       op = DW_OP_div;
13164       goto do_binop;
13165
13166     case UMOD:
13167       op = DW_OP_mod;
13168       goto do_binop;
13169
13170     case ASHIFT:
13171       op = DW_OP_shl;
13172       goto do_binop;
13173
13174     case ASHIFTRT:
13175       op = DW_OP_shra;
13176       goto do_binop;
13177
13178     case LSHIFTRT:
13179       op = DW_OP_shr;
13180       goto do_binop;
13181
13182     case AND:
13183       op = DW_OP_and;
13184       goto do_binop;
13185
13186     case IOR:
13187       op = DW_OP_or;
13188       goto do_binop;
13189
13190     case XOR:
13191       op = DW_OP_xor;
13192       goto do_binop;
13193
13194     do_binop:
13195       op0 = mem_loc_descriptor (XEXP (rtl, 0), mode,
13196                                 VAR_INIT_STATUS_INITIALIZED);
13197       op1 = mem_loc_descriptor (XEXP (rtl, 1), mode,
13198                                 VAR_INIT_STATUS_INITIALIZED);
13199
13200       if (op0 == 0 || op1 == 0)
13201         break;
13202
13203       mem_loc_result = op0;
13204       add_loc_descr (&mem_loc_result, op1);
13205       add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0));
13206       break;
13207
13208     case MOD:
13209       op0 = mem_loc_descriptor (XEXP (rtl, 0), mode,
13210                                 VAR_INIT_STATUS_INITIALIZED);
13211       op1 = mem_loc_descriptor (XEXP (rtl, 1), mode,
13212                                 VAR_INIT_STATUS_INITIALIZED);
13213
13214       if (op0 == 0 || op1 == 0)
13215         break;
13216
13217       mem_loc_result = op0;
13218       add_loc_descr (&mem_loc_result, op1);
13219       add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_over, 0, 0));
13220       add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_over, 0, 0));
13221       add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_div, 0, 0));
13222       add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_mul, 0, 0));
13223       add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_minus, 0, 0));
13224       break;
13225
13226     case NOT:
13227       op = DW_OP_not;
13228       goto do_unop;
13229
13230     case ABS:
13231       op = DW_OP_abs;
13232       goto do_unop;
13233
13234     case NEG:
13235       op = DW_OP_neg;
13236       goto do_unop;
13237
13238     do_unop:
13239       op0 = mem_loc_descriptor (XEXP (rtl, 0), mode,
13240                                 VAR_INIT_STATUS_INITIALIZED);
13241
13242       if (op0 == 0)
13243         break;
13244
13245       mem_loc_result = op0;
13246       add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0));
13247       break;
13248
13249     case CONST_INT:
13250       mem_loc_result = int_loc_descriptor (INTVAL (rtl));
13251       break;
13252
13253     case EQ:
13254       op = DW_OP_eq;
13255       goto do_scompare;
13256
13257     case GE:
13258       op = DW_OP_ge;
13259       goto do_scompare;
13260
13261     case GT:
13262       op = DW_OP_gt;
13263       goto do_scompare;
13264
13265     case LE:
13266       op = DW_OP_le;
13267       goto do_scompare;
13268
13269     case LT:
13270       op = DW_OP_lt;
13271       goto do_scompare;
13272
13273     case NE:
13274       op = DW_OP_ne;
13275       goto do_scompare;
13276
13277     do_scompare:
13278       if (GET_MODE_SIZE (GET_MODE (XEXP (rtl, 0))) > DWARF2_ADDR_SIZE
13279           || GET_MODE_SIZE (GET_MODE (XEXP (rtl, 1))) > DWARF2_ADDR_SIZE)
13280         break;
13281       else
13282         {
13283           enum machine_mode op_mode = GET_MODE (XEXP (rtl, 0));
13284
13285           if (op_mode == VOIDmode)
13286             op_mode = GET_MODE (XEXP (rtl, 1));
13287           if (op_mode != VOIDmode && GET_MODE_CLASS (op_mode) != MODE_INT)
13288             break;
13289
13290           op0 = mem_loc_descriptor (XEXP (rtl, 0), mode,
13291                                     VAR_INIT_STATUS_INITIALIZED);
13292           op1 = mem_loc_descriptor (XEXP (rtl, 1), mode,
13293                                     VAR_INIT_STATUS_INITIALIZED);
13294
13295           if (op0 == 0 || op1 == 0)
13296             break;
13297
13298           if (op_mode != VOIDmode
13299               && GET_MODE_SIZE (op_mode) < DWARF2_ADDR_SIZE)
13300             {
13301               int shift = DWARF2_ADDR_SIZE - GET_MODE_SIZE (op_mode);
13302               shift *= BITS_PER_UNIT;
13303               /* For eq/ne, if the operands are known to be zero-extended,
13304                  there is no need to do the fancy shifting up.  */
13305               if (op == DW_OP_eq || op == DW_OP_ne)
13306                 {
13307                   dw_loc_descr_ref last0, last1;
13308                   for (last0 = op0;
13309                        last0->dw_loc_next != NULL;
13310                        last0 = last0->dw_loc_next)
13311                     ;
13312                   for (last1 = op1;
13313                        last1->dw_loc_next != NULL;
13314                        last1 = last1->dw_loc_next)
13315                     ;
13316                   /* deref_size zero extends, and for constants we can check
13317                      whether they are zero extended or not.  */
13318                   if (((last0->dw_loc_opc == DW_OP_deref_size
13319                         && last0->dw_loc_oprnd1.v.val_int
13320                            <= GET_MODE_SIZE (op_mode))
13321                        || (CONST_INT_P (XEXP (rtl, 0))
13322                             && (unsigned HOST_WIDE_INT) INTVAL (XEXP (rtl, 0))
13323                                == (INTVAL (XEXP (rtl, 0))
13324                                    & GET_MODE_MASK (op_mode))))
13325                       && ((last1->dw_loc_opc == DW_OP_deref_size
13326                            && last1->dw_loc_oprnd1.v.val_int
13327                               <= GET_MODE_SIZE (op_mode))
13328                           || (CONST_INT_P (XEXP (rtl, 1))
13329                               && (unsigned HOST_WIDE_INT)
13330                                  INTVAL (XEXP (rtl, 1))
13331                                  == (INTVAL (XEXP (rtl, 1))
13332                                      & GET_MODE_MASK (op_mode)))))
13333                     goto do_compare;
13334                 }
13335               add_loc_descr (&op0, int_loc_descriptor (shift));
13336               add_loc_descr (&op0, new_loc_descr (DW_OP_shl, 0, 0));
13337               if (CONST_INT_P (XEXP (rtl, 1)))
13338                 op1 = int_loc_descriptor (INTVAL (XEXP (rtl, 1)) << shift);
13339               else
13340                 {
13341                   add_loc_descr (&op1, int_loc_descriptor (shift));
13342                   add_loc_descr (&op1, new_loc_descr (DW_OP_shl, 0, 0));
13343                 }
13344             }
13345         }
13346
13347     do_compare:
13348       mem_loc_result = op0;
13349       add_loc_descr (&mem_loc_result, op1);
13350       add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0));
13351       if (STORE_FLAG_VALUE != 1)
13352         {
13353           add_loc_descr (&mem_loc_result,
13354                          int_loc_descriptor (STORE_FLAG_VALUE));
13355           add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_mul, 0, 0));
13356         }
13357       break;
13358
13359     case GEU:
13360       op = DW_OP_ge;
13361       goto do_ucompare;
13362
13363     case GTU:
13364       op = DW_OP_gt;
13365       goto do_ucompare;
13366
13367     case LEU:
13368       op = DW_OP_le;
13369       goto do_ucompare;
13370
13371     case LTU:
13372       op = DW_OP_lt;
13373       goto do_ucompare;
13374
13375     do_ucompare:
13376       if (GET_MODE_SIZE (GET_MODE (XEXP (rtl, 0))) > DWARF2_ADDR_SIZE
13377           || GET_MODE_SIZE (GET_MODE (XEXP (rtl, 1))) > DWARF2_ADDR_SIZE)
13378         break;
13379       else
13380         {
13381           enum machine_mode op_mode = GET_MODE (XEXP (rtl, 0));
13382
13383           if (op_mode == VOIDmode)
13384             op_mode = GET_MODE (XEXP (rtl, 1));
13385           if (op_mode != VOIDmode && GET_MODE_CLASS (op_mode) != MODE_INT)
13386             break;
13387
13388           op0 = mem_loc_descriptor (XEXP (rtl, 0), mode,
13389                                     VAR_INIT_STATUS_INITIALIZED);
13390           op1 = mem_loc_descriptor (XEXP (rtl, 1), mode,
13391                                     VAR_INIT_STATUS_INITIALIZED);
13392
13393           if (op0 == 0 || op1 == 0)
13394             break;
13395
13396           if (op_mode != VOIDmode
13397               && GET_MODE_SIZE (op_mode) < DWARF2_ADDR_SIZE)
13398             {
13399               HOST_WIDE_INT mask = GET_MODE_MASK (op_mode);
13400               dw_loc_descr_ref last0, last1;
13401               for (last0 = op0;
13402                    last0->dw_loc_next != NULL;
13403                    last0 = last0->dw_loc_next)
13404                 ;
13405               for (last1 = op1;
13406                    last1->dw_loc_next != NULL;
13407                    last1 = last1->dw_loc_next)
13408                 ;
13409               if (CONST_INT_P (XEXP (rtl, 0)))
13410                 op0 = int_loc_descriptor (INTVAL (XEXP (rtl, 0)) & mask);
13411               /* deref_size zero extends, so no need to mask it again.  */
13412               else if (last0->dw_loc_opc != DW_OP_deref_size
13413                        || last0->dw_loc_oprnd1.v.val_int
13414                           > GET_MODE_SIZE (op_mode))
13415                 {
13416                   add_loc_descr (&op0, int_loc_descriptor (mask));
13417                   add_loc_descr (&op0, new_loc_descr (DW_OP_and, 0, 0));
13418                 }
13419               if (CONST_INT_P (XEXP (rtl, 1)))
13420                 op1 = int_loc_descriptor (INTVAL (XEXP (rtl, 1)) & mask);
13421               /* deref_size zero extends, so no need to mask it again.  */
13422               else if (last1->dw_loc_opc != DW_OP_deref_size
13423                        || last1->dw_loc_oprnd1.v.val_int
13424                           > GET_MODE_SIZE (op_mode))
13425                 {
13426                   add_loc_descr (&op1, int_loc_descriptor (mask));
13427                   add_loc_descr (&op1, new_loc_descr (DW_OP_and, 0, 0));
13428                 }
13429             }
13430           else
13431             {
13432               HOST_WIDE_INT bias = 1;
13433               bias <<= (DWARF2_ADDR_SIZE * BITS_PER_UNIT - 1);
13434               add_loc_descr (&op0, new_loc_descr (DW_OP_plus_uconst, bias, 0));
13435               if (CONST_INT_P (XEXP (rtl, 1)))
13436                 op1 = int_loc_descriptor ((unsigned HOST_WIDE_INT) bias
13437                                           + INTVAL (XEXP (rtl, 1)));
13438               else
13439                 add_loc_descr (&op1, new_loc_descr (DW_OP_plus_uconst,
13440                                                     bias, 0));
13441             }
13442         }
13443       goto do_compare;
13444
13445     case SMIN:
13446     case SMAX:
13447     case UMIN:
13448     case UMAX:
13449       if (GET_MODE_CLASS (GET_MODE (XEXP (rtl, 0))) != MODE_INT
13450           || GET_MODE_SIZE (GET_MODE (XEXP (rtl, 0))) > DWARF2_ADDR_SIZE
13451           || GET_MODE (XEXP (rtl, 0)) != GET_MODE (XEXP (rtl, 1)))
13452         break;
13453
13454       op0 = mem_loc_descriptor (XEXP (rtl, 0), mode,
13455                                 VAR_INIT_STATUS_INITIALIZED);
13456       op1 = mem_loc_descriptor (XEXP (rtl, 1), mode,
13457                                 VAR_INIT_STATUS_INITIALIZED);
13458
13459       if (op0 == 0 || op1 == 0)
13460         break;
13461
13462       add_loc_descr (&op0, new_loc_descr (DW_OP_dup, 0, 0));
13463       add_loc_descr (&op1, new_loc_descr (DW_OP_swap, 0, 0));
13464       add_loc_descr (&op1, new_loc_descr (DW_OP_over, 0, 0));
13465       if (GET_CODE (rtl) == UMIN || GET_CODE (rtl) == UMAX)
13466         {
13467           if (GET_MODE_SIZE (GET_MODE (XEXP (rtl, 0))) < DWARF2_ADDR_SIZE)
13468             {
13469               HOST_WIDE_INT mask = GET_MODE_MASK (GET_MODE (XEXP (rtl, 0)));
13470               add_loc_descr (&op0, int_loc_descriptor (mask));
13471               add_loc_descr (&op0, new_loc_descr (DW_OP_and, 0, 0));
13472               add_loc_descr (&op1, int_loc_descriptor (mask));
13473               add_loc_descr (&op1, new_loc_descr (DW_OP_and, 0, 0));
13474             }
13475           else
13476             {
13477               HOST_WIDE_INT bias = 1;
13478               bias <<= (DWARF2_ADDR_SIZE * BITS_PER_UNIT - 1);
13479               add_loc_descr (&op0, new_loc_descr (DW_OP_plus_uconst, bias, 0));
13480               add_loc_descr (&op1, new_loc_descr (DW_OP_plus_uconst, bias, 0));
13481             }
13482         }
13483       else if (GET_MODE_SIZE (GET_MODE (XEXP (rtl, 0))) < DWARF2_ADDR_SIZE)
13484         {
13485           int shift = DWARF2_ADDR_SIZE
13486                       - GET_MODE_SIZE (GET_MODE (XEXP (rtl, 0)));
13487           shift *= BITS_PER_UNIT;
13488           add_loc_descr (&op0, int_loc_descriptor (shift));
13489           add_loc_descr (&op0, new_loc_descr (DW_OP_shl, 0, 0));
13490           add_loc_descr (&op1, int_loc_descriptor (shift));
13491           add_loc_descr (&op1, new_loc_descr (DW_OP_shl, 0, 0));
13492         }
13493
13494       if (GET_CODE (rtl) == SMIN || GET_CODE (rtl) == UMIN)
13495         op = DW_OP_lt;
13496       else
13497         op = DW_OP_gt;
13498       mem_loc_result = op0;
13499       add_loc_descr (&mem_loc_result, op1);
13500       add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0));
13501       {
13502         dw_loc_descr_ref bra_node, drop_node;
13503
13504         bra_node = new_loc_descr (DW_OP_bra, 0, 0);
13505         add_loc_descr (&mem_loc_result, bra_node);
13506         add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_swap, 0, 0));
13507         drop_node = new_loc_descr (DW_OP_drop, 0, 0);
13508         add_loc_descr (&mem_loc_result, drop_node);
13509         bra_node->dw_loc_oprnd1.val_class = dw_val_class_loc;
13510         bra_node->dw_loc_oprnd1.v.val_loc = drop_node;
13511       }
13512       break;
13513
13514     case ZERO_EXTRACT:
13515     case SIGN_EXTRACT:
13516       if (CONST_INT_P (XEXP (rtl, 1))
13517           && CONST_INT_P (XEXP (rtl, 2))
13518           && ((unsigned) INTVAL (XEXP (rtl, 1))
13519               + (unsigned) INTVAL (XEXP (rtl, 2))
13520               <= GET_MODE_BITSIZE (GET_MODE (rtl)))
13521           && GET_MODE_BITSIZE (GET_MODE (rtl)) <= DWARF2_ADDR_SIZE
13522           && GET_MODE_BITSIZE (GET_MODE (XEXP (rtl, 0))) <= DWARF2_ADDR_SIZE)
13523         {
13524           int shift, size;
13525           op0 = mem_loc_descriptor (XEXP (rtl, 0), mode,
13526                                     VAR_INIT_STATUS_INITIALIZED);
13527           if (op0 == 0)
13528             break;
13529           if (GET_CODE (rtl) == SIGN_EXTRACT)
13530             op = DW_OP_shra;
13531           else
13532             op = DW_OP_shr;
13533           mem_loc_result = op0;
13534           size = INTVAL (XEXP (rtl, 1));
13535           shift = INTVAL (XEXP (rtl, 2));
13536           if (BITS_BIG_ENDIAN)
13537             shift = GET_MODE_BITSIZE (GET_MODE (XEXP (rtl, 0)))
13538                     - shift - size;
13539           if (shift + size != (int) DWARF2_ADDR_SIZE)
13540             {
13541               add_loc_descr (&mem_loc_result,
13542                              int_loc_descriptor (DWARF2_ADDR_SIZE
13543                                                  - shift - size));
13544               add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_shl, 0, 0));
13545             }
13546           if (size != (int) DWARF2_ADDR_SIZE)
13547             {
13548               add_loc_descr (&mem_loc_result,
13549                              int_loc_descriptor (DWARF2_ADDR_SIZE - size));
13550               add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0));
13551             }
13552         }
13553       break;
13554
13555     case COMPARE:
13556     case IF_THEN_ELSE:
13557     case ROTATE:
13558     case ROTATERT:
13559     case TRUNCATE:
13560       /* In theory, we could implement the above.  */
13561       /* DWARF cannot represent the unsigned compare operations
13562          natively.  */
13563     case SS_MULT:
13564     case US_MULT:
13565     case SS_DIV:
13566     case US_DIV:
13567     case SS_PLUS:
13568     case US_PLUS:
13569     case SS_MINUS:
13570     case US_MINUS:
13571     case SS_NEG:
13572     case US_NEG:
13573     case SS_ABS:
13574     case SS_ASHIFT:
13575     case US_ASHIFT:
13576     case SS_TRUNCATE:
13577     case US_TRUNCATE:
13578     case UDIV:
13579     case UNORDERED:
13580     case ORDERED:
13581     case UNEQ:
13582     case UNGE:
13583     case UNGT:
13584     case UNLE:
13585     case UNLT:
13586     case LTGT:
13587     case FLOAT_EXTEND:
13588     case FLOAT_TRUNCATE:
13589     case FLOAT:
13590     case UNSIGNED_FLOAT:
13591     case FIX:
13592     case UNSIGNED_FIX:
13593     case FRACT_CONVERT:
13594     case UNSIGNED_FRACT_CONVERT:
13595     case SAT_FRACT:
13596     case UNSIGNED_SAT_FRACT:
13597     case SQRT:
13598     case BSWAP:
13599     case FFS:
13600     case CLZ:
13601     case CTZ:
13602     case POPCOUNT:
13603     case PARITY:
13604     case ASM_OPERANDS:
13605     case VEC_MERGE:
13606     case VEC_SELECT:
13607     case VEC_CONCAT:
13608     case VEC_DUPLICATE:
13609     case UNSPEC:
13610     case HIGH:
13611       /* If delegitimize_address couldn't do anything with the UNSPEC, we
13612          can't express it in the debug info.  This can happen e.g. with some
13613          TLS UNSPECs.  */
13614       break;
13615
13616     case CONST_STRING:
13617       resolve_one_addr (&rtl, NULL);
13618       goto symref;
13619
13620     default:
13621 #ifdef ENABLE_CHECKING
13622       print_rtl (stderr, rtl);
13623       gcc_unreachable ();
13624 #else
13625       break;
13626 #endif
13627     }
13628
13629   if (mem_loc_result && initialized == VAR_INIT_STATUS_UNINITIALIZED)
13630     add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
13631
13632   return mem_loc_result;
13633 }
13634
13635 /* Return a descriptor that describes the concatenation of two locations.
13636    This is typically a complex variable.  */
13637
13638 static dw_loc_descr_ref
13639 concat_loc_descriptor (rtx x0, rtx x1, enum var_init_status initialized)
13640 {
13641   dw_loc_descr_ref cc_loc_result = NULL;
13642   dw_loc_descr_ref x0_ref
13643     = loc_descriptor (x0, VOIDmode, VAR_INIT_STATUS_INITIALIZED);
13644   dw_loc_descr_ref x1_ref
13645     = loc_descriptor (x1, VOIDmode, VAR_INIT_STATUS_INITIALIZED);
13646
13647   if (x0_ref == 0 || x1_ref == 0)
13648     return 0;
13649
13650   cc_loc_result = x0_ref;
13651   add_loc_descr_op_piece (&cc_loc_result, GET_MODE_SIZE (GET_MODE (x0)));
13652
13653   add_loc_descr (&cc_loc_result, x1_ref);
13654   add_loc_descr_op_piece (&cc_loc_result, GET_MODE_SIZE (GET_MODE (x1)));
13655
13656   if (initialized == VAR_INIT_STATUS_UNINITIALIZED)
13657     add_loc_descr (&cc_loc_result, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
13658
13659   return cc_loc_result;
13660 }
13661
13662 /* Return a descriptor that describes the concatenation of N
13663    locations.  */
13664
13665 static dw_loc_descr_ref
13666 concatn_loc_descriptor (rtx concatn, enum var_init_status initialized)
13667 {
13668   unsigned int i;
13669   dw_loc_descr_ref cc_loc_result = NULL;
13670   unsigned int n = XVECLEN (concatn, 0);
13671
13672   for (i = 0; i < n; ++i)
13673     {
13674       dw_loc_descr_ref ref;
13675       rtx x = XVECEXP (concatn, 0, i);
13676
13677       ref = loc_descriptor (x, VOIDmode, VAR_INIT_STATUS_INITIALIZED);
13678       if (ref == NULL)
13679         return NULL;
13680
13681       add_loc_descr (&cc_loc_result, ref);
13682       add_loc_descr_op_piece (&cc_loc_result, GET_MODE_SIZE (GET_MODE (x)));
13683     }
13684
13685   if (cc_loc_result && initialized == VAR_INIT_STATUS_UNINITIALIZED)
13686     add_loc_descr (&cc_loc_result, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
13687
13688   return cc_loc_result;
13689 }
13690
13691 /* Output a proper Dwarf location descriptor for a variable or parameter
13692    which is either allocated in a register or in a memory location.  For a
13693    register, we just generate an OP_REG and the register number.  For a
13694    memory location we provide a Dwarf postfix expression describing how to
13695    generate the (dynamic) address of the object onto the address stack.
13696
13697    MODE is mode of the decl if this loc_descriptor is going to be used in
13698    .debug_loc section where DW_OP_stack_value and DW_OP_implicit_value are
13699    allowed, VOIDmode otherwise.
13700
13701    If we don't know how to describe it, return 0.  */
13702
13703 static dw_loc_descr_ref
13704 loc_descriptor (rtx rtl, enum machine_mode mode,
13705                 enum var_init_status initialized)
13706 {
13707   dw_loc_descr_ref loc_result = NULL;
13708
13709   switch (GET_CODE (rtl))
13710     {
13711     case SUBREG:
13712       /* The case of a subreg may arise when we have a local (register)
13713          variable or a formal (register) parameter which doesn't quite fill
13714          up an entire register.  For now, just assume that it is
13715          legitimate to make the Dwarf info refer to the whole register which
13716          contains the given subreg.  */
13717       loc_result = loc_descriptor (SUBREG_REG (rtl), mode, initialized);
13718       break;
13719
13720     case REG:
13721       loc_result = reg_loc_descriptor (rtl, initialized);
13722       break;
13723
13724     case SIGN_EXTEND:
13725     case ZERO_EXTEND:
13726       loc_result = loc_descriptor (XEXP (rtl, 0), mode, initialized);
13727       break;
13728
13729     case MEM:
13730       loc_result = mem_loc_descriptor (XEXP (rtl, 0), GET_MODE (rtl),
13731                                        initialized);
13732       if (loc_result == NULL)
13733         loc_result = tls_mem_loc_descriptor (rtl);
13734       if (loc_result == NULL)
13735         {
13736           rtx new_rtl = avoid_constant_pool_reference (rtl);
13737           if (new_rtl != rtl)
13738             loc_result = loc_descriptor (new_rtl, mode, initialized);
13739         }
13740       break;
13741
13742     case CONCAT:
13743       loc_result = concat_loc_descriptor (XEXP (rtl, 0), XEXP (rtl, 1),
13744                                           initialized);
13745       break;
13746
13747     case CONCATN:
13748       loc_result = concatn_loc_descriptor (rtl, initialized);
13749       break;
13750
13751     case VAR_LOCATION:
13752       /* Single part.  */
13753       if (GET_CODE (PAT_VAR_LOCATION_LOC (rtl)) != PARALLEL)
13754         {
13755           rtx loc = PAT_VAR_LOCATION_LOC (rtl);
13756           if (GET_CODE (loc) == EXPR_LIST)
13757             loc = XEXP (loc, 0);
13758           loc_result = loc_descriptor (loc, mode, initialized);
13759           break;
13760         }
13761
13762       rtl = XEXP (rtl, 1);
13763       /* FALLTHRU */
13764
13765     case PARALLEL:
13766       {
13767         rtvec par_elems = XVEC (rtl, 0);
13768         int num_elem = GET_NUM_ELEM (par_elems);
13769         enum machine_mode mode;
13770         int i;
13771
13772         /* Create the first one, so we have something to add to.  */
13773         loc_result = loc_descriptor (XEXP (RTVEC_ELT (par_elems, 0), 0),
13774                                      VOIDmode, initialized);
13775         if (loc_result == NULL)
13776           return NULL;
13777         mode = GET_MODE (XEXP (RTVEC_ELT (par_elems, 0), 0));
13778         add_loc_descr_op_piece (&loc_result, GET_MODE_SIZE (mode));
13779         for (i = 1; i < num_elem; i++)
13780           {
13781             dw_loc_descr_ref temp;
13782
13783             temp = loc_descriptor (XEXP (RTVEC_ELT (par_elems, i), 0),
13784                                    VOIDmode, initialized);
13785             if (temp == NULL)
13786               return NULL;
13787             add_loc_descr (&loc_result, temp);
13788             mode = GET_MODE (XEXP (RTVEC_ELT (par_elems, i), 0));
13789             add_loc_descr_op_piece (&loc_result, GET_MODE_SIZE (mode));
13790           }
13791       }
13792       break;
13793
13794     case CONST_INT:
13795       if (mode != VOIDmode && mode != BLKmode)
13796         loc_result = address_of_int_loc_descriptor (GET_MODE_SIZE (mode),
13797                                                     INTVAL (rtl));
13798       break;
13799
13800     case CONST_DOUBLE:
13801       if (mode == VOIDmode)
13802         mode = GET_MODE (rtl);
13803
13804       if (mode != VOIDmode && (dwarf_version >= 4 || !dwarf_strict))
13805         {
13806           gcc_assert (mode == GET_MODE (rtl) || VOIDmode == GET_MODE (rtl));
13807
13808           /* Note that a CONST_DOUBLE rtx could represent either an integer
13809              or a floating-point constant.  A CONST_DOUBLE is used whenever
13810              the constant requires more than one word in order to be
13811              adequately represented.  We output CONST_DOUBLEs as blocks.  */
13812           loc_result = new_loc_descr (DW_OP_implicit_value,
13813                                       GET_MODE_SIZE (mode), 0);
13814           if (SCALAR_FLOAT_MODE_P (mode))
13815             {
13816               unsigned int length = GET_MODE_SIZE (mode);
13817               unsigned char *array = GGC_NEWVEC (unsigned char, length);
13818
13819               insert_float (rtl, array);
13820               loc_result->dw_loc_oprnd2.val_class = dw_val_class_vec;
13821               loc_result->dw_loc_oprnd2.v.val_vec.length = length / 4;
13822               loc_result->dw_loc_oprnd2.v.val_vec.elt_size = 4;
13823               loc_result->dw_loc_oprnd2.v.val_vec.array = array;
13824             }
13825           else
13826             {
13827               loc_result->dw_loc_oprnd2.val_class = dw_val_class_const_double;
13828               loc_result->dw_loc_oprnd2.v.val_double.high
13829                 = CONST_DOUBLE_HIGH (rtl);
13830               loc_result->dw_loc_oprnd2.v.val_double.low
13831                 = CONST_DOUBLE_LOW (rtl);
13832             }
13833         }
13834       break;
13835
13836     case CONST_VECTOR:
13837       if (mode == VOIDmode)
13838         mode = GET_MODE (rtl);
13839
13840       if (mode != VOIDmode && (dwarf_version >= 4 || !dwarf_strict))
13841         {
13842           unsigned int elt_size = GET_MODE_UNIT_SIZE (GET_MODE (rtl));
13843           unsigned int length = CONST_VECTOR_NUNITS (rtl);
13844           unsigned char *array = GGC_NEWVEC (unsigned char, length * elt_size);
13845           unsigned int i;
13846           unsigned char *p;
13847
13848           gcc_assert (mode == GET_MODE (rtl) || VOIDmode == GET_MODE (rtl));
13849           switch (GET_MODE_CLASS (mode))
13850             {
13851             case MODE_VECTOR_INT:
13852               for (i = 0, p = array; i < length; i++, p += elt_size)
13853                 {
13854                   rtx elt = CONST_VECTOR_ELT (rtl, i);
13855                   HOST_WIDE_INT lo, hi;
13856
13857                   switch (GET_CODE (elt))
13858                     {
13859                     case CONST_INT:
13860                       lo = INTVAL (elt);
13861                       hi = -(lo < 0);
13862                       break;
13863
13864                     case CONST_DOUBLE:
13865                       lo = CONST_DOUBLE_LOW (elt);
13866                       hi = CONST_DOUBLE_HIGH (elt);
13867                       break;
13868
13869                     default:
13870                       gcc_unreachable ();
13871                     }
13872
13873                   if (elt_size <= sizeof (HOST_WIDE_INT))
13874                     insert_int (lo, elt_size, p);
13875                   else
13876                     {
13877                       unsigned char *p0 = p;
13878                       unsigned char *p1 = p + sizeof (HOST_WIDE_INT);
13879
13880                       gcc_assert (elt_size == 2 * sizeof (HOST_WIDE_INT));
13881                       if (WORDS_BIG_ENDIAN)
13882                         {
13883                           p0 = p1;
13884                           p1 = p;
13885                         }
13886                       insert_int (lo, sizeof (HOST_WIDE_INT), p0);
13887                       insert_int (hi, sizeof (HOST_WIDE_INT), p1);
13888                     }
13889                 }
13890               break;
13891
13892             case MODE_VECTOR_FLOAT:
13893               for (i = 0, p = array; i < length; i++, p += elt_size)
13894                 {
13895                   rtx elt = CONST_VECTOR_ELT (rtl, i);
13896                   insert_float (elt, p);
13897                 }
13898               break;
13899
13900             default:
13901               gcc_unreachable ();
13902             }
13903
13904           loc_result = new_loc_descr (DW_OP_implicit_value,
13905                                       length * elt_size, 0);
13906           loc_result->dw_loc_oprnd2.val_class = dw_val_class_vec;
13907           loc_result->dw_loc_oprnd2.v.val_vec.length = length;
13908           loc_result->dw_loc_oprnd2.v.val_vec.elt_size = elt_size;
13909           loc_result->dw_loc_oprnd2.v.val_vec.array = array;
13910         }
13911       break;
13912
13913     case CONST:
13914       if (mode == VOIDmode
13915           || GET_CODE (XEXP (rtl, 0)) == CONST_INT
13916           || GET_CODE (XEXP (rtl, 0)) == CONST_DOUBLE
13917           || GET_CODE (XEXP (rtl, 0)) == CONST_VECTOR)
13918         {
13919           loc_result = loc_descriptor (XEXP (rtl, 0), mode, initialized);
13920           break;
13921         }
13922       /* FALLTHROUGH */
13923     case SYMBOL_REF:
13924       if (!const_ok_for_output (rtl))
13925         break;
13926     case LABEL_REF:
13927       if (mode != VOIDmode && GET_MODE_SIZE (mode) == DWARF2_ADDR_SIZE
13928           && (dwarf_version >= 4 || !dwarf_strict))
13929         {
13930           loc_result = new_loc_descr (DW_OP_addr, 0, 0);
13931           loc_result->dw_loc_oprnd1.val_class = dw_val_class_addr;
13932           loc_result->dw_loc_oprnd1.v.val_addr = rtl;
13933           add_loc_descr (&loc_result, new_loc_descr (DW_OP_stack_value, 0, 0));
13934           VEC_safe_push (rtx, gc, used_rtx_array, rtl);
13935         }
13936       break;
13937
13938     default:
13939       if (GET_MODE_CLASS (mode) == MODE_INT && GET_MODE (rtl) == mode
13940           && GET_MODE_SIZE (GET_MODE (rtl)) <= DWARF2_ADDR_SIZE
13941           && (dwarf_version >= 4 || !dwarf_strict))
13942         {
13943           /* Value expression.  */
13944           loc_result = mem_loc_descriptor (rtl, VOIDmode, initialized);
13945           if (loc_result)
13946             add_loc_descr (&loc_result,
13947                            new_loc_descr (DW_OP_stack_value, 0, 0));
13948         }
13949       break;
13950     }
13951
13952   return loc_result;
13953 }
13954
13955 /* We need to figure out what section we should use as the base for the
13956    address ranges where a given location is valid.
13957    1. If this particular DECL has a section associated with it, use that.
13958    2. If this function has a section associated with it, use that.
13959    3. Otherwise, use the text section.
13960    XXX: If you split a variable across multiple sections, we won't notice.  */
13961
13962 static const char *
13963 secname_for_decl (const_tree decl)
13964 {
13965   const char *secname;
13966
13967   if (VAR_OR_FUNCTION_DECL_P (decl) && DECL_SECTION_NAME (decl))
13968     {
13969       tree sectree = DECL_SECTION_NAME (decl);
13970       secname = TREE_STRING_POINTER (sectree);
13971     }
13972   else if (current_function_decl && DECL_SECTION_NAME (current_function_decl))
13973     {
13974       tree sectree = DECL_SECTION_NAME (current_function_decl);
13975       secname = TREE_STRING_POINTER (sectree);
13976     }
13977   else if (cfun && in_cold_section_p)
13978     secname = crtl->subsections.cold_section_label;
13979   else
13980     secname = text_section_label;
13981
13982   return secname;
13983 }
13984
13985 /* Return true when DECL_BY_REFERENCE is defined and set for DECL.  */
13986
13987 static bool
13988 decl_by_reference_p (tree decl)
13989 {
13990   return ((TREE_CODE (decl) == PARM_DECL || TREE_CODE (decl) == RESULT_DECL
13991            || TREE_CODE (decl) == VAR_DECL)
13992           && DECL_BY_REFERENCE (decl));
13993 }
13994
13995 /* Helper function for dw_loc_list.  Compute proper Dwarf location descriptor
13996    for VARLOC.  */
13997
13998 static dw_loc_descr_ref
13999 dw_loc_list_1 (tree loc, rtx varloc, int want_address,
14000                enum var_init_status initialized)
14001 {
14002   int have_address = 0;
14003   dw_loc_descr_ref descr;
14004   enum machine_mode mode;
14005
14006   if (want_address != 2)
14007     {
14008       gcc_assert (GET_CODE (varloc) == VAR_LOCATION);
14009       /* Single part.  */
14010       if (GET_CODE (PAT_VAR_LOCATION_LOC (varloc)) != PARALLEL)
14011         {
14012           varloc = PAT_VAR_LOCATION_LOC (varloc);
14013           if (GET_CODE (varloc) == EXPR_LIST)
14014             varloc = XEXP (varloc, 0);
14015           mode = GET_MODE (varloc);
14016           if (MEM_P (varloc))
14017             {
14018               rtx addr = XEXP (varloc, 0);
14019               descr = mem_loc_descriptor (addr, mode, initialized);
14020               if (descr)
14021                 have_address = 1;
14022               else
14023                 {
14024                   rtx x = avoid_constant_pool_reference (varloc);
14025                   if (x != varloc)
14026                     descr = mem_loc_descriptor (x, mode, initialized);
14027                 }
14028             }
14029           else
14030             descr = mem_loc_descriptor (varloc, mode, initialized);
14031         }
14032       else
14033         return 0;
14034     }
14035   else
14036     {
14037       descr = loc_descriptor (varloc, DECL_MODE (loc), initialized);
14038       have_address = 1;
14039     }
14040
14041   if (!descr)
14042     return 0;
14043
14044   if (want_address == 2 && !have_address
14045       && (dwarf_version >= 4 || !dwarf_strict))
14046     {
14047       if (int_size_in_bytes (TREE_TYPE (loc)) > DWARF2_ADDR_SIZE)
14048         {
14049           expansion_failed (loc, NULL_RTX,
14050                             "DWARF address size mismatch");
14051           return 0;
14052         }
14053       add_loc_descr (&descr, new_loc_descr (DW_OP_stack_value, 0, 0));
14054       have_address = 1;
14055     }
14056   /* Show if we can't fill the request for an address.  */
14057   if (want_address && !have_address)
14058     {
14059       expansion_failed (loc, NULL_RTX,
14060                         "Want address and only have value");
14061       return 0;
14062     }
14063
14064   /* If we've got an address and don't want one, dereference.  */
14065   if (!want_address && have_address)
14066     {
14067       HOST_WIDE_INT size = int_size_in_bytes (TREE_TYPE (loc));
14068       enum dwarf_location_atom op;
14069
14070       if (size > DWARF2_ADDR_SIZE || size == -1)
14071         {
14072           expansion_failed (loc, NULL_RTX,
14073                             "DWARF address size mismatch");
14074           return 0;
14075         }
14076       else if (size == DWARF2_ADDR_SIZE)
14077         op = DW_OP_deref;
14078       else
14079         op = DW_OP_deref_size;
14080
14081       add_loc_descr (&descr, new_loc_descr (op, size, 0));
14082     }
14083
14084   return descr;
14085 }
14086
14087 /* Return the dwarf representation of the location list LOC_LIST of
14088    DECL.  WANT_ADDRESS has the same meaning as in loc_list_from_tree
14089    function.  */
14090
14091 static dw_loc_list_ref
14092 dw_loc_list (var_loc_list *loc_list, tree decl, int want_address)
14093 {
14094   const char *endname, *secname;
14095   rtx varloc;
14096   enum var_init_status initialized;
14097   struct var_loc_node *node;
14098   dw_loc_descr_ref descr;
14099   char label_id[MAX_ARTIFICIAL_LABEL_BYTES];
14100   dw_loc_list_ref list = NULL;
14101   dw_loc_list_ref *listp = &list;
14102
14103   /* Now that we know what section we are using for a base,
14104      actually construct the list of locations.
14105      The first location information is what is passed to the
14106      function that creates the location list, and the remaining
14107      locations just get added on to that list.
14108      Note that we only know the start address for a location
14109      (IE location changes), so to build the range, we use
14110      the range [current location start, next location start].
14111      This means we have to special case the last node, and generate
14112      a range of [last location start, end of function label].  */
14113
14114   secname = secname_for_decl (decl);
14115
14116   for (node = loc_list->first; node->next; node = node->next)
14117     if (NOTE_VAR_LOCATION_LOC (node->var_loc_note) != NULL_RTX)
14118       {
14119         /* The variable has a location between NODE->LABEL and
14120            NODE->NEXT->LABEL.  */
14121         initialized = NOTE_VAR_LOCATION_STATUS (node->var_loc_note);
14122         varloc = NOTE_VAR_LOCATION (node->var_loc_note);
14123         descr = dw_loc_list_1 (decl, varloc, want_address, initialized);
14124         if (descr)
14125           {
14126             *listp = new_loc_list (descr, node->label, node->next->label,
14127                                    secname);
14128             listp = &(*listp)->dw_loc_next;
14129           }
14130       }
14131
14132   /* If the variable has a location at the last label
14133      it keeps its location until the end of function.  */
14134   if (NOTE_VAR_LOCATION_LOC (node->var_loc_note) != NULL_RTX)
14135     {
14136       initialized = NOTE_VAR_LOCATION_STATUS (node->var_loc_note);
14137       varloc = NOTE_VAR_LOCATION (node->var_loc_note);
14138       descr = dw_loc_list_1 (decl, varloc, want_address, initialized);
14139       if (descr)
14140         {
14141           if (!current_function_decl)
14142             endname = text_end_label;
14143           else
14144             {
14145               ASM_GENERATE_INTERNAL_LABEL (label_id, FUNC_END_LABEL,
14146                                            current_function_funcdef_no);
14147               endname = ggc_strdup (label_id);
14148             }
14149
14150           *listp = new_loc_list (descr, node->label, endname, secname);
14151           listp = &(*listp)->dw_loc_next;
14152         }
14153     }
14154
14155   /* Try to avoid the overhead of a location list emitting a location
14156      expression instead, but only if we didn't have more than one
14157      location entry in the first place.  If some entries were not
14158      representable, we don't want to pretend a single entry that was
14159      applies to the entire scope in which the variable is
14160      available.  */
14161   if (list && loc_list->first->next)
14162     gen_llsym (list);
14163
14164   return list;
14165 }
14166
14167 /* Return if the loc_list has only single element and thus can be represented
14168    as location description.   */
14169
14170 static bool
14171 single_element_loc_list_p (dw_loc_list_ref list)
14172 {
14173   gcc_assert (!list->dw_loc_next || list->ll_symbol);
14174   return !list->ll_symbol;
14175 }
14176
14177 /* To each location in list LIST add loc descr REF.  */
14178
14179 static void
14180 add_loc_descr_to_each (dw_loc_list_ref list, dw_loc_descr_ref ref)
14181 {
14182   dw_loc_descr_ref copy;
14183   add_loc_descr (&list->expr, ref);
14184   list = list->dw_loc_next;
14185   while (list)
14186     {
14187       copy = GGC_CNEW (dw_loc_descr_node);
14188       memcpy (copy, ref, sizeof (dw_loc_descr_node));
14189       add_loc_descr (&list->expr, copy);
14190       while (copy->dw_loc_next)
14191         {
14192           dw_loc_descr_ref new_copy = GGC_CNEW (dw_loc_descr_node);
14193           memcpy (new_copy, copy->dw_loc_next, sizeof (dw_loc_descr_node));
14194           copy->dw_loc_next = new_copy;
14195           copy = new_copy;
14196         }
14197       list = list->dw_loc_next;
14198     }
14199 }
14200
14201 /* Given two lists RET and LIST
14202    produce location list that is result of adding expression in LIST
14203    to expression in RET on each possition in program.
14204    Might be destructive on both RET and LIST.
14205
14206    TODO: We handle only simple cases of RET or LIST having at most one
14207    element. General case would inolve sorting the lists in program order
14208    and merging them that will need some additional work.
14209    Adding that will improve quality of debug info especially for SRA-ed
14210    structures.  */
14211
14212 static void
14213 add_loc_list (dw_loc_list_ref *ret, dw_loc_list_ref list)
14214 {
14215   if (!list)
14216     return;
14217   if (!*ret)
14218     {
14219       *ret = list;
14220       return;
14221     }
14222   if (!list->dw_loc_next)
14223     {
14224       add_loc_descr_to_each (*ret, list->expr);
14225       return;
14226     }
14227   if (!(*ret)->dw_loc_next)
14228     {
14229       add_loc_descr_to_each (list, (*ret)->expr);
14230       *ret = list;
14231       return;
14232     }
14233   expansion_failed (NULL_TREE, NULL_RTX,
14234                     "Don't know how to merge two non-trivial"
14235                     " location lists.\n");
14236   *ret = NULL;
14237   return;
14238 }
14239
14240 /* LOC is constant expression.  Try a luck, look it up in constant
14241    pool and return its loc_descr of its address.  */
14242
14243 static dw_loc_descr_ref
14244 cst_pool_loc_descr (tree loc)
14245 {
14246   /* Get an RTL for this, if something has been emitted.  */
14247   rtx rtl = lookup_constant_def (loc);
14248   enum machine_mode mode;
14249
14250   if (!rtl || !MEM_P (rtl))
14251     {
14252       gcc_assert (!rtl);
14253       return 0;
14254     }
14255   gcc_assert (GET_CODE (XEXP (rtl, 0)) == SYMBOL_REF);
14256
14257   /* TODO: We might get more coverage if we was actually delaying expansion
14258      of all expressions till end of compilation when constant pools are fully
14259      populated.  */
14260   if (!TREE_ASM_WRITTEN (SYMBOL_REF_DECL (XEXP (rtl, 0))))
14261     {
14262       expansion_failed (loc, NULL_RTX,
14263                         "CST value in contant pool but not marked.");
14264       return 0;
14265     }
14266   mode = GET_MODE (rtl);
14267   rtl = XEXP (rtl, 0);
14268   return mem_loc_descriptor (rtl, mode, VAR_INIT_STATUS_INITIALIZED);
14269 }
14270
14271 /* Return dw_loc_list representing address of addr_expr LOC
14272    by looking for innder INDIRECT_REF expression and turing it
14273    into simple arithmetics.  */
14274
14275 static dw_loc_list_ref
14276 loc_list_for_address_of_addr_expr_of_indirect_ref (tree loc, bool toplev)
14277 {
14278   tree obj, offset;
14279   HOST_WIDE_INT bitsize, bitpos, bytepos;
14280   enum machine_mode mode;
14281   int volatilep;
14282   int unsignedp = TYPE_UNSIGNED (TREE_TYPE (loc));
14283   dw_loc_list_ref list_ret = NULL, list_ret1 = NULL;
14284
14285   obj = get_inner_reference (TREE_OPERAND (loc, 0),
14286                              &bitsize, &bitpos, &offset, &mode,
14287                              &unsignedp, &volatilep, false);
14288   STRIP_NOPS (obj);
14289   if (bitpos % BITS_PER_UNIT)
14290     {
14291       expansion_failed (loc, NULL_RTX, "bitfield access");
14292       return 0;
14293     }
14294   if (!INDIRECT_REF_P (obj))
14295     {
14296       expansion_failed (obj,
14297                         NULL_RTX, "no indirect ref in inner refrence");
14298       return 0;
14299     }
14300   if (!offset && !bitpos)
14301     list_ret = loc_list_from_tree (TREE_OPERAND (obj, 0), toplev ? 2 : 1);
14302   else if (toplev
14303            && int_size_in_bytes (TREE_TYPE (loc)) <= DWARF2_ADDR_SIZE
14304            && (dwarf_version >= 4 || !dwarf_strict))
14305     {
14306       list_ret = loc_list_from_tree (TREE_OPERAND (obj, 0), 0);
14307       if (!list_ret)
14308         return 0;
14309       if (offset)
14310         {
14311           /* Variable offset.  */
14312           list_ret1 = loc_list_from_tree (offset, 0);
14313           if (list_ret1 == 0)
14314             return 0;
14315           add_loc_list (&list_ret, list_ret1);
14316           if (!list_ret)
14317             return 0;
14318           add_loc_descr_to_each (list_ret,
14319                                  new_loc_descr (DW_OP_plus, 0, 0));
14320         }
14321       bytepos = bitpos / BITS_PER_UNIT;
14322       if (bytepos > 0)
14323         add_loc_descr_to_each (list_ret,
14324                                new_loc_descr (DW_OP_plus_uconst,
14325                                               bytepos, 0));
14326       else if (bytepos < 0)
14327         loc_list_plus_const (list_ret, bytepos);
14328       add_loc_descr_to_each (list_ret,
14329                              new_loc_descr (DW_OP_stack_value, 0, 0));
14330     }
14331   return list_ret;
14332 }
14333
14334
14335 /* Generate Dwarf location list representing LOC.
14336    If WANT_ADDRESS is false, expression computing LOC will be computed
14337    If WANT_ADDRESS is 1, expression computing address of LOC will be returned
14338    if WANT_ADDRESS is 2, expression computing address useable in location
14339      will be returned (i.e. DW_OP_reg can be used
14340      to refer to register values).  */
14341
14342 static dw_loc_list_ref
14343 loc_list_from_tree (tree loc, int want_address)
14344 {
14345   dw_loc_descr_ref ret = NULL, ret1 = NULL;
14346   dw_loc_list_ref list_ret = NULL, list_ret1 = NULL;
14347   int have_address = 0;
14348   enum dwarf_location_atom op;
14349
14350   /* ??? Most of the time we do not take proper care for sign/zero
14351      extending the values properly.  Hopefully this won't be a real
14352      problem...  */
14353
14354   switch (TREE_CODE (loc))
14355     {
14356     case ERROR_MARK:
14357       expansion_failed (loc, NULL_RTX, "ERROR_MARK");
14358       return 0;
14359
14360     case PLACEHOLDER_EXPR:
14361       /* This case involves extracting fields from an object to determine the
14362          position of other fields.  We don't try to encode this here.  The
14363          only user of this is Ada, which encodes the needed information using
14364          the names of types.  */
14365       expansion_failed (loc, NULL_RTX, "PLACEHOLDER_EXPR");
14366       return 0;
14367
14368     case CALL_EXPR:
14369       expansion_failed (loc, NULL_RTX, "CALL_EXPR");
14370       /* There are no opcodes for these operations.  */
14371       return 0;
14372
14373     case PREINCREMENT_EXPR:
14374     case PREDECREMENT_EXPR:
14375     case POSTINCREMENT_EXPR:
14376     case POSTDECREMENT_EXPR:
14377       expansion_failed (loc, NULL_RTX, "PRE/POST INDCREMENT/DECREMENT");
14378       /* There are no opcodes for these operations.  */
14379       return 0;
14380
14381     case ADDR_EXPR:
14382       /* If we already want an address, see if there is INDIRECT_REF inside
14383          e.g. for &this->field.  */
14384       if (want_address)
14385         {
14386           list_ret = loc_list_for_address_of_addr_expr_of_indirect_ref
14387                        (loc, want_address == 2);
14388           if (list_ret)
14389             have_address = 1;
14390           else if (decl_address_ip_invariant_p (TREE_OPERAND (loc, 0))
14391                    && (ret = cst_pool_loc_descr (loc)))
14392             have_address = 1;
14393         }
14394         /* Otherwise, process the argument and look for the address.  */
14395       if (!list_ret && !ret)
14396         list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 1);
14397       else
14398         {
14399           if (want_address)
14400             expansion_failed (loc, NULL_RTX, "need address of ADDR_EXPR");
14401           return NULL;
14402         }
14403       break;
14404
14405     case VAR_DECL:
14406       if (DECL_THREAD_LOCAL_P (loc))
14407         {
14408           rtx rtl;
14409           enum dwarf_location_atom first_op;
14410           enum dwarf_location_atom second_op;
14411           bool dtprel = false;
14412
14413           if (targetm.have_tls)
14414             {
14415               /* If this is not defined, we have no way to emit the
14416                  data.  */
14417               if (!targetm.asm_out.output_dwarf_dtprel)
14418                 return 0;
14419
14420                /* The way DW_OP_GNU_push_tls_address is specified, we
14421                   can only look up addresses of objects in the current
14422                   module.  */
14423               if (DECL_EXTERNAL (loc) && !targetm.binds_local_p (loc))
14424                 return 0;
14425               first_op = DW_OP_addr;
14426               dtprel = true;
14427               second_op = DW_OP_GNU_push_tls_address;
14428             }
14429           else
14430             {
14431               if (!targetm.emutls.debug_form_tls_address
14432                   || !(dwarf_version >= 3 || !dwarf_strict))
14433                 return 0;
14434               loc = emutls_decl (loc);
14435               first_op = DW_OP_addr;
14436               second_op = DW_OP_form_tls_address;
14437             }
14438
14439           rtl = rtl_for_decl_location (loc);
14440           if (rtl == NULL_RTX)
14441             return 0;
14442
14443           if (!MEM_P (rtl))
14444             return 0;
14445           rtl = XEXP (rtl, 0);
14446           if (! CONSTANT_P (rtl))
14447             return 0;
14448
14449           ret = new_loc_descr (first_op, 0, 0);
14450           ret->dw_loc_oprnd1.val_class = dw_val_class_addr;
14451           ret->dw_loc_oprnd1.v.val_addr = rtl;
14452           ret->dtprel = dtprel;
14453
14454           ret1 = new_loc_descr (second_op, 0, 0);
14455           add_loc_descr (&ret, ret1);
14456
14457           have_address = 1;
14458           break;
14459         }
14460       /* FALLTHRU */
14461
14462     case PARM_DECL:
14463       if (DECL_HAS_VALUE_EXPR_P (loc))
14464         return loc_list_from_tree (DECL_VALUE_EXPR (loc),
14465                                    want_address);
14466       /* FALLTHRU */
14467
14468     case RESULT_DECL:
14469     case FUNCTION_DECL:
14470       {
14471         rtx rtl;
14472         var_loc_list *loc_list = lookup_decl_loc (loc);
14473
14474         if (loc_list && loc_list->first)
14475           {
14476             list_ret = dw_loc_list (loc_list, loc, want_address);
14477             have_address = want_address != 0;
14478             break;
14479           }
14480         rtl = rtl_for_decl_location (loc);
14481         if (rtl == NULL_RTX)
14482           {
14483             expansion_failed (loc, NULL_RTX, "DECL has no RTL");
14484             return 0;
14485           }
14486         else if (CONST_INT_P (rtl))
14487           {
14488             HOST_WIDE_INT val = INTVAL (rtl);
14489             if (TYPE_UNSIGNED (TREE_TYPE (loc)))
14490               val &= GET_MODE_MASK (DECL_MODE (loc));
14491             ret = int_loc_descriptor (val);
14492           }
14493         else if (GET_CODE (rtl) == CONST_STRING)
14494           {
14495             expansion_failed (loc, NULL_RTX, "CONST_STRING");
14496             return 0;
14497           }
14498         else if (CONSTANT_P (rtl) && const_ok_for_output (rtl))
14499           {
14500             ret = new_loc_descr (DW_OP_addr, 0, 0);
14501             ret->dw_loc_oprnd1.val_class = dw_val_class_addr;
14502             ret->dw_loc_oprnd1.v.val_addr = rtl;
14503           }
14504         else
14505           {
14506             enum machine_mode mode;
14507
14508             /* Certain constructs can only be represented at top-level.  */
14509             if (want_address == 2)
14510               {
14511                 ret = loc_descriptor (rtl, VOIDmode,
14512                                       VAR_INIT_STATUS_INITIALIZED);
14513                 have_address = 1;
14514               }
14515             else
14516               {
14517                 mode = GET_MODE (rtl);
14518                 if (MEM_P (rtl))
14519                   {
14520                     rtl = XEXP (rtl, 0);
14521                     have_address = 1;
14522                   }
14523                 ret = mem_loc_descriptor (rtl, mode, VAR_INIT_STATUS_INITIALIZED);
14524               }
14525             if (!ret)
14526               expansion_failed (loc, rtl,
14527                                 "failed to produce loc descriptor for rtl");
14528           }
14529       }
14530       break;
14531
14532     case INDIRECT_REF:
14533     case ALIGN_INDIRECT_REF:
14534     case MISALIGNED_INDIRECT_REF:
14535       list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 0);
14536       have_address = 1;
14537       break;
14538
14539     case COMPOUND_EXPR:
14540       return loc_list_from_tree (TREE_OPERAND (loc, 1), want_address);
14541
14542     CASE_CONVERT:
14543     case VIEW_CONVERT_EXPR:
14544     case SAVE_EXPR:
14545     case MODIFY_EXPR:
14546       return loc_list_from_tree (TREE_OPERAND (loc, 0), want_address);
14547
14548     case COMPONENT_REF:
14549     case BIT_FIELD_REF:
14550     case ARRAY_REF:
14551     case ARRAY_RANGE_REF:
14552     case REALPART_EXPR:
14553     case IMAGPART_EXPR:
14554       {
14555         tree obj, offset;
14556         HOST_WIDE_INT bitsize, bitpos, bytepos;
14557         enum machine_mode mode;
14558         int volatilep;
14559         int unsignedp = TYPE_UNSIGNED (TREE_TYPE (loc));
14560
14561         obj = get_inner_reference (loc, &bitsize, &bitpos, &offset, &mode,
14562                                    &unsignedp, &volatilep, false);
14563
14564         gcc_assert (obj != loc);
14565
14566         list_ret = loc_list_from_tree (obj,
14567                                        want_address == 2
14568                                        && !bitpos && !offset ? 2 : 1);
14569         /* TODO: We can extract value of the small expression via shifting even
14570            for nonzero bitpos.  */
14571         if (list_ret == 0)
14572           return 0;
14573         if (bitpos % BITS_PER_UNIT != 0 || bitsize % BITS_PER_UNIT != 0)
14574           {
14575             expansion_failed (loc, NULL_RTX,
14576                               "bitfield access");
14577             return 0;
14578           }
14579
14580         if (offset != NULL_TREE)
14581           {
14582             /* Variable offset.  */
14583             list_ret1 = loc_list_from_tree (offset, 0);
14584             if (list_ret1 == 0)
14585               return 0;
14586             add_loc_list (&list_ret, list_ret1);
14587             if (!list_ret)
14588               return 0;
14589             add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_plus, 0, 0));
14590           }
14591
14592         bytepos = bitpos / BITS_PER_UNIT;
14593         if (bytepos > 0)
14594           add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_plus_uconst, bytepos, 0));
14595         else if (bytepos < 0)
14596           loc_list_plus_const (list_ret, bytepos);
14597
14598         have_address = 1;
14599         break;
14600       }
14601
14602     case INTEGER_CST:
14603       if ((want_address || !host_integerp (loc, 0))
14604           && (ret = cst_pool_loc_descr (loc)))
14605         have_address = 1;
14606       else if (want_address == 2
14607                && host_integerp (loc, 0)
14608                && (ret = address_of_int_loc_descriptor
14609                            (int_size_in_bytes (TREE_TYPE (loc)),
14610                             tree_low_cst (loc, 0))))
14611         have_address = 1;
14612       else if (host_integerp (loc, 0))
14613         ret = int_loc_descriptor (tree_low_cst (loc, 0));
14614       else
14615         {
14616           expansion_failed (loc, NULL_RTX,
14617                             "Integer operand is not host integer");
14618           return 0;
14619         }
14620       break;
14621
14622     case CONSTRUCTOR:
14623     case REAL_CST:
14624     case STRING_CST:
14625     case COMPLEX_CST:
14626       if ((ret = cst_pool_loc_descr (loc)))
14627         have_address = 1;
14628       else
14629       /* We can construct small constants here using int_loc_descriptor.  */
14630         expansion_failed (loc, NULL_RTX,
14631                           "constructor or constant not in constant pool");
14632       break;
14633
14634     case TRUTH_AND_EXPR:
14635     case TRUTH_ANDIF_EXPR:
14636     case BIT_AND_EXPR:
14637       op = DW_OP_and;
14638       goto do_binop;
14639
14640     case TRUTH_XOR_EXPR:
14641     case BIT_XOR_EXPR:
14642       op = DW_OP_xor;
14643       goto do_binop;
14644
14645     case TRUTH_OR_EXPR:
14646     case TRUTH_ORIF_EXPR:
14647     case BIT_IOR_EXPR:
14648       op = DW_OP_or;
14649       goto do_binop;
14650
14651     case FLOOR_DIV_EXPR:
14652     case CEIL_DIV_EXPR:
14653     case ROUND_DIV_EXPR:
14654     case TRUNC_DIV_EXPR:
14655       if (TYPE_UNSIGNED (TREE_TYPE (loc)))
14656         return 0;
14657       op = DW_OP_div;
14658       goto do_binop;
14659
14660     case MINUS_EXPR:
14661       op = DW_OP_minus;
14662       goto do_binop;
14663
14664     case FLOOR_MOD_EXPR:
14665     case CEIL_MOD_EXPR:
14666     case ROUND_MOD_EXPR:
14667     case TRUNC_MOD_EXPR:
14668       if (TYPE_UNSIGNED (TREE_TYPE (loc)))
14669         {
14670           op = DW_OP_mod;
14671           goto do_binop;
14672         }
14673       list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 0);
14674       list_ret1 = loc_list_from_tree (TREE_OPERAND (loc, 1), 0);
14675       if (list_ret == 0 || list_ret1 == 0)
14676         return 0;
14677
14678       add_loc_list (&list_ret, list_ret1);
14679       if (list_ret == 0)
14680         return 0;
14681       add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_over, 0, 0));
14682       add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_over, 0, 0));
14683       add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_div, 0, 0));
14684       add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_mul, 0, 0));
14685       add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_minus, 0, 0));
14686       break;
14687
14688     case MULT_EXPR:
14689       op = DW_OP_mul;
14690       goto do_binop;
14691
14692     case LSHIFT_EXPR:
14693       op = DW_OP_shl;
14694       goto do_binop;
14695
14696     case RSHIFT_EXPR:
14697       op = (TYPE_UNSIGNED (TREE_TYPE (loc)) ? DW_OP_shr : DW_OP_shra);
14698       goto do_binop;
14699
14700     case POINTER_PLUS_EXPR:
14701     case PLUS_EXPR:
14702       if (TREE_CODE (TREE_OPERAND (loc, 1)) == INTEGER_CST
14703           && host_integerp (TREE_OPERAND (loc, 1), 0))
14704         {
14705           list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 0);
14706           if (list_ret == 0)
14707             return 0;
14708
14709           loc_list_plus_const (list_ret, tree_low_cst (TREE_OPERAND (loc, 1), 0));
14710           break;
14711         }
14712
14713       op = DW_OP_plus;
14714       goto do_binop;
14715
14716     case LE_EXPR:
14717       if (TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (loc, 0))))
14718         return 0;
14719
14720       op = DW_OP_le;
14721       goto do_binop;
14722
14723     case GE_EXPR:
14724       if (TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (loc, 0))))
14725         return 0;
14726
14727       op = DW_OP_ge;
14728       goto do_binop;
14729
14730     case LT_EXPR:
14731       if (TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (loc, 0))))
14732         return 0;
14733
14734       op = DW_OP_lt;
14735       goto do_binop;
14736
14737     case GT_EXPR:
14738       if (TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (loc, 0))))
14739         return 0;
14740
14741       op = DW_OP_gt;
14742       goto do_binop;
14743
14744     case EQ_EXPR:
14745       op = DW_OP_eq;
14746       goto do_binop;
14747
14748     case NE_EXPR:
14749       op = DW_OP_ne;
14750       goto do_binop;
14751
14752     do_binop:
14753       list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 0);
14754       list_ret1 = loc_list_from_tree (TREE_OPERAND (loc, 1), 0);
14755       if (list_ret == 0 || list_ret1 == 0)
14756         return 0;
14757
14758       add_loc_list (&list_ret, list_ret1);
14759       if (list_ret == 0)
14760         return 0;
14761       add_loc_descr_to_each (list_ret, new_loc_descr (op, 0, 0));
14762       break;
14763
14764     case TRUTH_NOT_EXPR:
14765     case BIT_NOT_EXPR:
14766       op = DW_OP_not;
14767       goto do_unop;
14768
14769     case ABS_EXPR:
14770       op = DW_OP_abs;
14771       goto do_unop;
14772
14773     case NEGATE_EXPR:
14774       op = DW_OP_neg;
14775       goto do_unop;
14776
14777     do_unop:
14778       list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 0);
14779       if (list_ret == 0)
14780         return 0;
14781
14782       add_loc_descr_to_each (list_ret, new_loc_descr (op, 0, 0));
14783       break;
14784
14785     case MIN_EXPR:
14786     case MAX_EXPR:
14787       {
14788         const enum tree_code code =
14789           TREE_CODE (loc) == MIN_EXPR ? GT_EXPR : LT_EXPR;
14790
14791         loc = build3 (COND_EXPR, TREE_TYPE (loc),
14792                       build2 (code, integer_type_node,
14793                               TREE_OPERAND (loc, 0), TREE_OPERAND (loc, 1)),
14794                       TREE_OPERAND (loc, 1), TREE_OPERAND (loc, 0));
14795       }
14796
14797       /* ... fall through ...  */
14798
14799     case COND_EXPR:
14800       {
14801         dw_loc_descr_ref lhs
14802           = loc_descriptor_from_tree (TREE_OPERAND (loc, 1), 0);
14803         dw_loc_list_ref rhs
14804           = loc_list_from_tree (TREE_OPERAND (loc, 2), 0);
14805         dw_loc_descr_ref bra_node, jump_node, tmp;
14806
14807         list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 0);
14808         if (list_ret == 0 || lhs == 0 || rhs == 0)
14809           return 0;
14810
14811         bra_node = new_loc_descr (DW_OP_bra, 0, 0);
14812         add_loc_descr_to_each (list_ret, bra_node);
14813
14814         add_loc_list (&list_ret, rhs);
14815         jump_node = new_loc_descr (DW_OP_skip, 0, 0);
14816         add_loc_descr_to_each (list_ret, jump_node);
14817
14818         add_loc_descr_to_each (list_ret, lhs);
14819         bra_node->dw_loc_oprnd1.val_class = dw_val_class_loc;
14820         bra_node->dw_loc_oprnd1.v.val_loc = lhs;
14821
14822         /* ??? Need a node to point the skip at.  Use a nop.  */
14823         tmp = new_loc_descr (DW_OP_nop, 0, 0);
14824         add_loc_descr_to_each (list_ret, tmp);
14825         jump_node->dw_loc_oprnd1.val_class = dw_val_class_loc;
14826         jump_node->dw_loc_oprnd1.v.val_loc = tmp;
14827       }
14828       break;
14829
14830     case FIX_TRUNC_EXPR:
14831       return 0;
14832
14833     default:
14834       /* Leave front-end specific codes as simply unknown.  This comes
14835          up, for instance, with the C STMT_EXPR.  */
14836       if ((unsigned int) TREE_CODE (loc)
14837           >= (unsigned int) LAST_AND_UNUSED_TREE_CODE)
14838         {
14839           expansion_failed (loc, NULL_RTX,
14840                             "language specific tree node");
14841           return 0;
14842         }
14843
14844 #ifdef ENABLE_CHECKING
14845       /* Otherwise this is a generic code; we should just lists all of
14846          these explicitly.  We forgot one.  */
14847       gcc_unreachable ();
14848 #else
14849       /* In a release build, we want to degrade gracefully: better to
14850          generate incomplete debugging information than to crash.  */
14851       return NULL;
14852 #endif
14853     }
14854
14855   if (!ret && !list_ret)
14856     return 0;
14857
14858   if (want_address == 2 && !have_address
14859       && (dwarf_version >= 4 || !dwarf_strict))
14860     {
14861       if (int_size_in_bytes (TREE_TYPE (loc)) > DWARF2_ADDR_SIZE)
14862         {
14863           expansion_failed (loc, NULL_RTX,
14864                             "DWARF address size mismatch");
14865           return 0;
14866         }
14867       if (ret)
14868         add_loc_descr (&ret, new_loc_descr (DW_OP_stack_value, 0, 0));
14869       else
14870         add_loc_descr_to_each (list_ret,
14871                                new_loc_descr (DW_OP_stack_value, 0, 0));
14872       have_address = 1;
14873     }
14874   /* Show if we can't fill the request for an address.  */
14875   if (want_address && !have_address)
14876     {
14877       expansion_failed (loc, NULL_RTX,
14878                         "Want address and only have value");
14879       return 0;
14880     }
14881
14882   gcc_assert (!ret || !list_ret);
14883
14884   /* If we've got an address and don't want one, dereference.  */
14885   if (!want_address && have_address)
14886     {
14887       HOST_WIDE_INT size = int_size_in_bytes (TREE_TYPE (loc));
14888
14889       if (size > DWARF2_ADDR_SIZE || size == -1)
14890         {
14891           expansion_failed (loc, NULL_RTX,
14892                             "DWARF address size mismatch");
14893           return 0;
14894         }
14895       else if (size == DWARF2_ADDR_SIZE)
14896         op = DW_OP_deref;
14897       else
14898         op = DW_OP_deref_size;
14899
14900       if (ret)
14901         add_loc_descr (&ret, new_loc_descr (op, size, 0));
14902       else
14903         add_loc_descr_to_each (list_ret, new_loc_descr (op, size, 0));
14904     }
14905   if (ret)
14906     list_ret = new_loc_list (ret, NULL, NULL, NULL);
14907
14908   return list_ret;
14909 }
14910
14911 /* Same as above but return only single location expression.  */
14912 static dw_loc_descr_ref
14913 loc_descriptor_from_tree (tree loc, int want_address)
14914 {
14915   dw_loc_list_ref ret = loc_list_from_tree (loc, want_address);
14916   if (!ret)
14917     return NULL;
14918   if (ret->dw_loc_next)
14919     {
14920       expansion_failed (loc, NULL_RTX,
14921                         "Location list where only loc descriptor needed");
14922       return NULL;
14923     }
14924   return ret->expr;
14925 }
14926
14927 /* Given a value, round it up to the lowest multiple of `boundary'
14928    which is not less than the value itself.  */
14929
14930 static inline HOST_WIDE_INT
14931 ceiling (HOST_WIDE_INT value, unsigned int boundary)
14932 {
14933   return (((value + boundary - 1) / boundary) * boundary);
14934 }
14935
14936 /* Given a pointer to what is assumed to be a FIELD_DECL node, return a
14937    pointer to the declared type for the relevant field variable, or return
14938    `integer_type_node' if the given node turns out to be an
14939    ERROR_MARK node.  */
14940
14941 static inline tree
14942 field_type (const_tree decl)
14943 {
14944   tree type;
14945
14946   if (TREE_CODE (decl) == ERROR_MARK)
14947     return integer_type_node;
14948
14949   type = DECL_BIT_FIELD_TYPE (decl);
14950   if (type == NULL_TREE)
14951     type = TREE_TYPE (decl);
14952
14953   return type;
14954 }
14955
14956 /* Given a pointer to a tree node, return the alignment in bits for
14957    it, or else return BITS_PER_WORD if the node actually turns out to
14958    be an ERROR_MARK node.  */
14959
14960 static inline unsigned
14961 simple_type_align_in_bits (const_tree type)
14962 {
14963   return (TREE_CODE (type) != ERROR_MARK) ? TYPE_ALIGN (type) : BITS_PER_WORD;
14964 }
14965
14966 static inline unsigned
14967 simple_decl_align_in_bits (const_tree decl)
14968 {
14969   return (TREE_CODE (decl) != ERROR_MARK) ? DECL_ALIGN (decl) : BITS_PER_WORD;
14970 }
14971
14972 /* Return the result of rounding T up to ALIGN.  */
14973
14974 static inline HOST_WIDE_INT
14975 round_up_to_align (HOST_WIDE_INT t, unsigned int align)
14976 {
14977   /* We must be careful if T is negative because HOST_WIDE_INT can be
14978      either "above" or "below" unsigned int as per the C promotion
14979      rules, depending on the host, thus making the signedness of the
14980      direct multiplication and division unpredictable.  */
14981   unsigned HOST_WIDE_INT u = (unsigned HOST_WIDE_INT) t;
14982
14983   u += align - 1;
14984   u /= align;
14985   u *= align;
14986
14987   return (HOST_WIDE_INT) u;
14988 }
14989
14990 /* Given a pointer to a FIELD_DECL, compute and return the byte offset of the
14991    lowest addressed byte of the "containing object" for the given FIELD_DECL,
14992    or return 0 if we are unable to determine what that offset is, either
14993    because the argument turns out to be a pointer to an ERROR_MARK node, or
14994    because the offset is actually variable.  (We can't handle the latter case
14995    just yet).  */
14996
14997 static HOST_WIDE_INT
14998 field_byte_offset (const_tree decl)
14999 {
15000   HOST_WIDE_INT object_offset_in_bits;
15001   HOST_WIDE_INT bitpos_int;
15002
15003   if (TREE_CODE (decl) == ERROR_MARK)
15004     return 0;
15005
15006   gcc_assert (TREE_CODE (decl) == FIELD_DECL);
15007
15008   /* We cannot yet cope with fields whose positions are variable, so
15009      for now, when we see such things, we simply return 0.  Someday, we may
15010      be able to handle such cases, but it will be damn difficult.  */
15011   if (! host_integerp (bit_position (decl), 0))
15012     return 0;
15013
15014   bitpos_int = int_bit_position (decl);
15015
15016 #ifdef PCC_BITFIELD_TYPE_MATTERS
15017   if (PCC_BITFIELD_TYPE_MATTERS)
15018     {
15019       tree type;
15020       tree field_size_tree;
15021       HOST_WIDE_INT deepest_bitpos;
15022       unsigned HOST_WIDE_INT field_size_in_bits;
15023       unsigned int type_align_in_bits;
15024       unsigned int decl_align_in_bits;
15025       unsigned HOST_WIDE_INT type_size_in_bits;
15026
15027       type = field_type (decl);
15028       type_size_in_bits = simple_type_size_in_bits (type);
15029       type_align_in_bits = simple_type_align_in_bits (type);
15030
15031       field_size_tree = DECL_SIZE (decl);
15032
15033       /* The size could be unspecified if there was an error, or for
15034          a flexible array member.  */
15035       if (!field_size_tree)
15036         field_size_tree = bitsize_zero_node;
15037
15038       /* If the size of the field is not constant, use the type size.  */
15039       if (host_integerp (field_size_tree, 1))
15040         field_size_in_bits = tree_low_cst (field_size_tree, 1);
15041       else
15042         field_size_in_bits = type_size_in_bits;
15043
15044       decl_align_in_bits = simple_decl_align_in_bits (decl);
15045
15046       /* The GCC front-end doesn't make any attempt to keep track of the
15047          starting bit offset (relative to the start of the containing
15048          structure type) of the hypothetical "containing object" for a
15049          bit-field.  Thus, when computing the byte offset value for the
15050          start of the "containing object" of a bit-field, we must deduce
15051          this information on our own. This can be rather tricky to do in
15052          some cases.  For example, handling the following structure type
15053          definition when compiling for an i386/i486 target (which only
15054          aligns long long's to 32-bit boundaries) can be very tricky:
15055
15056          struct S { int field1; long long field2:31; };
15057
15058          Fortunately, there is a simple rule-of-thumb which can be used
15059          in such cases.  When compiling for an i386/i486, GCC will
15060          allocate 8 bytes for the structure shown above.  It decides to
15061          do this based upon one simple rule for bit-field allocation.
15062          GCC allocates each "containing object" for each bit-field at
15063          the first (i.e. lowest addressed) legitimate alignment boundary
15064          (based upon the required minimum alignment for the declared
15065          type of the field) which it can possibly use, subject to the
15066          condition that there is still enough available space remaining
15067          in the containing object (when allocated at the selected point)
15068          to fully accommodate all of the bits of the bit-field itself.
15069
15070          This simple rule makes it obvious why GCC allocates 8 bytes for
15071          each object of the structure type shown above.  When looking
15072          for a place to allocate the "containing object" for `field2',
15073          the compiler simply tries to allocate a 64-bit "containing
15074          object" at each successive 32-bit boundary (starting at zero)
15075          until it finds a place to allocate that 64- bit field such that
15076          at least 31 contiguous (and previously unallocated) bits remain
15077          within that selected 64 bit field.  (As it turns out, for the
15078          example above, the compiler finds it is OK to allocate the
15079          "containing object" 64-bit field at bit-offset zero within the
15080          structure type.)
15081
15082          Here we attempt to work backwards from the limited set of facts
15083          we're given, and we try to deduce from those facts, where GCC
15084          must have believed that the containing object started (within
15085          the structure type). The value we deduce is then used (by the
15086          callers of this routine) to generate DW_AT_location and
15087          DW_AT_bit_offset attributes for fields (both bit-fields and, in
15088          the case of DW_AT_location, regular fields as well).  */
15089
15090       /* Figure out the bit-distance from the start of the structure to
15091          the "deepest" bit of the bit-field.  */
15092       deepest_bitpos = bitpos_int + field_size_in_bits;
15093
15094       /* This is the tricky part.  Use some fancy footwork to deduce
15095          where the lowest addressed bit of the containing object must
15096          be.  */
15097       object_offset_in_bits = deepest_bitpos - type_size_in_bits;
15098
15099       /* Round up to type_align by default.  This works best for
15100          bitfields.  */
15101       object_offset_in_bits
15102         = round_up_to_align (object_offset_in_bits, type_align_in_bits);
15103
15104       if (object_offset_in_bits > bitpos_int)
15105         {
15106           object_offset_in_bits = deepest_bitpos - type_size_in_bits;
15107
15108           /* Round up to decl_align instead.  */
15109           object_offset_in_bits
15110             = round_up_to_align (object_offset_in_bits, decl_align_in_bits);
15111         }
15112     }
15113   else
15114 #endif
15115     object_offset_in_bits = bitpos_int;
15116
15117   return object_offset_in_bits / BITS_PER_UNIT;
15118 }
15119 \f
15120 /* The following routines define various Dwarf attributes and any data
15121    associated with them.  */
15122
15123 /* Add a location description attribute value to a DIE.
15124
15125    This emits location attributes suitable for whole variables and
15126    whole parameters.  Note that the location attributes for struct fields are
15127    generated by the routine `data_member_location_attribute' below.  */
15128
15129 static inline void
15130 add_AT_location_description (dw_die_ref die, enum dwarf_attribute attr_kind,
15131                              dw_loc_list_ref descr)
15132 {
15133   if (descr == 0)
15134     return;
15135   if (single_element_loc_list_p (descr))
15136     add_AT_loc (die, attr_kind, descr->expr);
15137   else
15138     add_AT_loc_list (die, attr_kind, descr);
15139 }
15140
15141 /* Attach the specialized form of location attribute used for data members of
15142    struct and union types.  In the special case of a FIELD_DECL node which
15143    represents a bit-field, the "offset" part of this special location
15144    descriptor must indicate the distance in bytes from the lowest-addressed
15145    byte of the containing struct or union type to the lowest-addressed byte of
15146    the "containing object" for the bit-field.  (See the `field_byte_offset'
15147    function above).
15148
15149    For any given bit-field, the "containing object" is a hypothetical object
15150    (of some integral or enum type) within which the given bit-field lives.  The
15151    type of this hypothetical "containing object" is always the same as the
15152    declared type of the individual bit-field itself (for GCC anyway... the
15153    DWARF spec doesn't actually mandate this).  Note that it is the size (in
15154    bytes) of the hypothetical "containing object" which will be given in the
15155    DW_AT_byte_size attribute for this bit-field.  (See the
15156    `byte_size_attribute' function below.)  It is also used when calculating the
15157    value of the DW_AT_bit_offset attribute.  (See the `bit_offset_attribute'
15158    function below.)  */
15159
15160 static void
15161 add_data_member_location_attribute (dw_die_ref die, tree decl)
15162 {
15163   HOST_WIDE_INT offset;
15164   dw_loc_descr_ref loc_descr = 0;
15165
15166   if (TREE_CODE (decl) == TREE_BINFO)
15167     {
15168       /* We're working on the TAG_inheritance for a base class.  */
15169       if (BINFO_VIRTUAL_P (decl) && is_cxx ())
15170         {
15171           /* For C++ virtual bases we can't just use BINFO_OFFSET, as they
15172              aren't at a fixed offset from all (sub)objects of the same
15173              type.  We need to extract the appropriate offset from our
15174              vtable.  The following dwarf expression means
15175
15176                BaseAddr = ObAddr + *((*ObAddr) - Offset)
15177
15178              This is specific to the V3 ABI, of course.  */
15179
15180           dw_loc_descr_ref tmp;
15181
15182           /* Make a copy of the object address.  */
15183           tmp = new_loc_descr (DW_OP_dup, 0, 0);
15184           add_loc_descr (&loc_descr, tmp);
15185
15186           /* Extract the vtable address.  */
15187           tmp = new_loc_descr (DW_OP_deref, 0, 0);
15188           add_loc_descr (&loc_descr, tmp);
15189
15190           /* Calculate the address of the offset.  */
15191           offset = tree_low_cst (BINFO_VPTR_FIELD (decl), 0);
15192           gcc_assert (offset < 0);
15193
15194           tmp = int_loc_descriptor (-offset);
15195           add_loc_descr (&loc_descr, tmp);
15196           tmp = new_loc_descr (DW_OP_minus, 0, 0);
15197           add_loc_descr (&loc_descr, tmp);
15198
15199           /* Extract the offset.  */
15200           tmp = new_loc_descr (DW_OP_deref, 0, 0);
15201           add_loc_descr (&loc_descr, tmp);
15202
15203           /* Add it to the object address.  */
15204           tmp = new_loc_descr (DW_OP_plus, 0, 0);
15205           add_loc_descr (&loc_descr, tmp);
15206         }
15207       else
15208         offset = tree_low_cst (BINFO_OFFSET (decl), 0);
15209     }
15210   else
15211     offset = field_byte_offset (decl);
15212
15213   if (! loc_descr)
15214     {
15215       if (dwarf_version > 2)
15216         {
15217           /* Don't need to output a location expression, just the constant. */
15218           add_AT_int (die, DW_AT_data_member_location, offset);
15219           return;
15220         }
15221       else
15222         {
15223           enum dwarf_location_atom op;
15224
15225           /* The DWARF2 standard says that we should assume that the structure
15226              address is already on the stack, so we can specify a structure
15227              field address by using DW_OP_plus_uconst.  */
15228
15229 #ifdef MIPS_DEBUGGING_INFO
15230           /* ??? The SGI dwarf reader does not handle the DW_OP_plus_uconst
15231              operator correctly.  It works only if we leave the offset on the
15232              stack.  */
15233           op = DW_OP_constu;
15234 #else
15235           op = DW_OP_plus_uconst;
15236 #endif
15237
15238           loc_descr = new_loc_descr (op, offset, 0);
15239         }
15240     }
15241
15242   add_AT_loc (die, DW_AT_data_member_location, loc_descr);
15243 }
15244
15245 /* Writes integer values to dw_vec_const array.  */
15246
15247 static void
15248 insert_int (HOST_WIDE_INT val, unsigned int size, unsigned char *dest)
15249 {
15250   while (size != 0)
15251     {
15252       *dest++ = val & 0xff;
15253       val >>= 8;
15254       --size;
15255     }
15256 }
15257
15258 /* Reads integers from dw_vec_const array.  Inverse of insert_int.  */
15259
15260 static HOST_WIDE_INT
15261 extract_int (const unsigned char *src, unsigned int size)
15262 {
15263   HOST_WIDE_INT val = 0;
15264
15265   src += size;
15266   while (size != 0)
15267     {
15268       val <<= 8;
15269       val |= *--src & 0xff;
15270       --size;
15271     }
15272   return val;
15273 }
15274
15275 /* Writes floating point values to dw_vec_const array.  */
15276
15277 static void
15278 insert_float (const_rtx rtl, unsigned char *array)
15279 {
15280   REAL_VALUE_TYPE rv;
15281   long val[4];
15282   int i;
15283
15284   REAL_VALUE_FROM_CONST_DOUBLE (rv, rtl);
15285   real_to_target (val, &rv, GET_MODE (rtl));
15286
15287   /* real_to_target puts 32-bit pieces in each long.  Pack them.  */
15288   for (i = 0; i < GET_MODE_SIZE (GET_MODE (rtl)) / 4; i++)
15289     {
15290       insert_int (val[i], 4, array);
15291       array += 4;
15292     }
15293 }
15294
15295 /* Attach a DW_AT_const_value attribute for a variable or a parameter which
15296    does not have a "location" either in memory or in a register.  These
15297    things can arise in GNU C when a constant is passed as an actual parameter
15298    to an inlined function.  They can also arise in C++ where declared
15299    constants do not necessarily get memory "homes".  */
15300
15301 static bool
15302 add_const_value_attribute (dw_die_ref die, rtx rtl)
15303 {
15304   switch (GET_CODE (rtl))
15305     {
15306     case CONST_INT:
15307       {
15308         HOST_WIDE_INT val = INTVAL (rtl);
15309
15310         if (val < 0)
15311           add_AT_int (die, DW_AT_const_value, val);
15312         else
15313           add_AT_unsigned (die, DW_AT_const_value, (unsigned HOST_WIDE_INT) val);
15314       }
15315       return true;
15316
15317     case CONST_DOUBLE:
15318       /* Note that a CONST_DOUBLE rtx could represent either an integer or a
15319          floating-point constant.  A CONST_DOUBLE is used whenever the
15320          constant requires more than one word in order to be adequately
15321          represented.  */
15322       {
15323         enum machine_mode mode = GET_MODE (rtl);
15324
15325         if (SCALAR_FLOAT_MODE_P (mode))
15326           {
15327             unsigned int length = GET_MODE_SIZE (mode);
15328             unsigned char *array = GGC_NEWVEC (unsigned char, length);
15329
15330             insert_float (rtl, array);
15331             add_AT_vec (die, DW_AT_const_value, length / 4, 4, array);
15332           }
15333         else
15334           add_AT_double (die, DW_AT_const_value,
15335                          CONST_DOUBLE_HIGH (rtl), CONST_DOUBLE_LOW (rtl));
15336       }
15337       return true;
15338
15339     case CONST_VECTOR:
15340       {
15341         enum machine_mode mode = GET_MODE (rtl);
15342         unsigned int elt_size = GET_MODE_UNIT_SIZE (mode);
15343         unsigned int length = CONST_VECTOR_NUNITS (rtl);
15344         unsigned char *array = GGC_NEWVEC (unsigned char, length * elt_size);
15345         unsigned int i;
15346         unsigned char *p;
15347
15348         switch (GET_MODE_CLASS (mode))
15349           {
15350           case MODE_VECTOR_INT:
15351             for (i = 0, p = array; i < length; i++, p += elt_size)
15352               {
15353                 rtx elt = CONST_VECTOR_ELT (rtl, i);
15354                 HOST_WIDE_INT lo, hi;
15355
15356                 switch (GET_CODE (elt))
15357                   {
15358                   case CONST_INT:
15359                     lo = INTVAL (elt);
15360                     hi = -(lo < 0);
15361                     break;
15362
15363                   case CONST_DOUBLE:
15364                     lo = CONST_DOUBLE_LOW (elt);
15365                     hi = CONST_DOUBLE_HIGH (elt);
15366                     break;
15367
15368                   default:
15369                     gcc_unreachable ();
15370                   }
15371
15372                 if (elt_size <= sizeof (HOST_WIDE_INT))
15373                   insert_int (lo, elt_size, p);
15374                 else
15375                   {
15376                     unsigned char *p0 = p;
15377                     unsigned char *p1 = p + sizeof (HOST_WIDE_INT);
15378
15379                     gcc_assert (elt_size == 2 * sizeof (HOST_WIDE_INT));
15380                     if (WORDS_BIG_ENDIAN)
15381                       {
15382                         p0 = p1;
15383                         p1 = p;
15384                       }
15385                     insert_int (lo, sizeof (HOST_WIDE_INT), p0);
15386                     insert_int (hi, sizeof (HOST_WIDE_INT), p1);
15387                   }
15388               }
15389             break;
15390
15391           case MODE_VECTOR_FLOAT:
15392             for (i = 0, p = array; i < length; i++, p += elt_size)
15393               {
15394                 rtx elt = CONST_VECTOR_ELT (rtl, i);
15395                 insert_float (elt, p);
15396               }
15397             break;
15398
15399           default:
15400             gcc_unreachable ();
15401           }
15402
15403         add_AT_vec (die, DW_AT_const_value, length, elt_size, array);
15404       }
15405       return true;
15406
15407     case CONST_STRING:
15408       if (dwarf_version >= 4 || !dwarf_strict)
15409         {
15410           dw_loc_descr_ref loc_result;
15411           resolve_one_addr (&rtl, NULL);
15412         rtl_addr:
15413           loc_result = new_loc_descr (DW_OP_addr, 0, 0);
15414           loc_result->dw_loc_oprnd1.val_class = dw_val_class_addr;
15415           loc_result->dw_loc_oprnd1.v.val_addr = rtl;
15416           add_loc_descr (&loc_result, new_loc_descr (DW_OP_stack_value, 0, 0));
15417           add_AT_loc (die, DW_AT_location, loc_result);
15418           VEC_safe_push (rtx, gc, used_rtx_array, rtl);
15419           return true;
15420         }
15421       return false;
15422
15423     case CONST:
15424       if (CONSTANT_P (XEXP (rtl, 0)))
15425         return add_const_value_attribute (die, XEXP (rtl, 0));
15426       /* FALLTHROUGH */
15427     case SYMBOL_REF:
15428       if (!const_ok_for_output (rtl))
15429         return false;
15430     case LABEL_REF:
15431       if (dwarf_version >= 4 || !dwarf_strict)
15432         goto rtl_addr;
15433       return false;
15434
15435     case PLUS:
15436       /* In cases where an inlined instance of an inline function is passed
15437          the address of an `auto' variable (which is local to the caller) we
15438          can get a situation where the DECL_RTL of the artificial local
15439          variable (for the inlining) which acts as a stand-in for the
15440          corresponding formal parameter (of the inline function) will look
15441          like (plus:SI (reg:SI FRAME_PTR) (const_int ...)).  This is not
15442          exactly a compile-time constant expression, but it isn't the address
15443          of the (artificial) local variable either.  Rather, it represents the
15444          *value* which the artificial local variable always has during its
15445          lifetime.  We currently have no way to represent such quasi-constant
15446          values in Dwarf, so for now we just punt and generate nothing.  */
15447       return false;
15448
15449     case HIGH:
15450     case CONST_FIXED:
15451       return false;
15452
15453     case MEM:
15454       if (GET_CODE (XEXP (rtl, 0)) == CONST_STRING
15455           && MEM_READONLY_P (rtl)
15456           && GET_MODE (rtl) == BLKmode)
15457         {
15458           add_AT_string (die, DW_AT_const_value, XSTR (XEXP (rtl, 0), 0));
15459           return true;
15460         }
15461       return false;
15462
15463     default:
15464       /* No other kinds of rtx should be possible here.  */
15465       gcc_unreachable ();
15466     }
15467   return false;
15468 }
15469
15470 /* Determine whether the evaluation of EXPR references any variables
15471    or functions which aren't otherwise used (and therefore may not be
15472    output).  */
15473 static tree
15474 reference_to_unused (tree * tp, int * walk_subtrees,
15475                      void * data ATTRIBUTE_UNUSED)
15476 {
15477   if (! EXPR_P (*tp) && ! CONSTANT_CLASS_P (*tp))
15478     *walk_subtrees = 0;
15479
15480   if (DECL_P (*tp) && ! TREE_PUBLIC (*tp) && ! TREE_USED (*tp)
15481       && ! TREE_ASM_WRITTEN (*tp))
15482     return *tp;
15483   /* ???  The C++ FE emits debug information for using decls, so
15484      putting gcc_unreachable here falls over.  See PR31899.  For now
15485      be conservative.  */
15486   else if (!cgraph_global_info_ready
15487            && (TREE_CODE (*tp) == VAR_DECL || TREE_CODE (*tp) == FUNCTION_DECL))
15488     return *tp;
15489   else if (TREE_CODE (*tp) == VAR_DECL)
15490     {
15491       struct varpool_node *node = varpool_node (*tp);
15492       if (!node->needed)
15493         return *tp;
15494     }
15495   else if (TREE_CODE (*tp) == FUNCTION_DECL
15496            && (!DECL_EXTERNAL (*tp) || DECL_DECLARED_INLINE_P (*tp)))
15497     {
15498       /* The call graph machinery must have finished analyzing,
15499          optimizing and gimplifying the CU by now.
15500          So if *TP has no call graph node associated
15501          to it, it means *TP will not be emitted.  */
15502       if (!cgraph_get_node (*tp))
15503         return *tp;
15504     }
15505   else if (TREE_CODE (*tp) == STRING_CST && !TREE_ASM_WRITTEN (*tp))
15506     return *tp;
15507
15508   return NULL_TREE;
15509 }
15510
15511 /* Generate an RTL constant from a decl initializer INIT with decl type TYPE,
15512    for use in a later add_const_value_attribute call.  */
15513
15514 static rtx
15515 rtl_for_decl_init (tree init, tree type)
15516 {
15517   rtx rtl = NULL_RTX;
15518
15519   /* If a variable is initialized with a string constant without embedded
15520      zeros, build CONST_STRING.  */
15521   if (TREE_CODE (init) == STRING_CST && TREE_CODE (type) == ARRAY_TYPE)
15522     {
15523       tree enttype = TREE_TYPE (type);
15524       tree domain = TYPE_DOMAIN (type);
15525       enum machine_mode mode = TYPE_MODE (enttype);
15526
15527       if (GET_MODE_CLASS (mode) == MODE_INT && GET_MODE_SIZE (mode) == 1
15528           && domain
15529           && integer_zerop (TYPE_MIN_VALUE (domain))
15530           && compare_tree_int (TYPE_MAX_VALUE (domain),
15531                                TREE_STRING_LENGTH (init) - 1) == 0
15532           && ((size_t) TREE_STRING_LENGTH (init)
15533               == strlen (TREE_STRING_POINTER (init)) + 1))
15534         {
15535           rtl = gen_rtx_CONST_STRING (VOIDmode,
15536                                       ggc_strdup (TREE_STRING_POINTER (init)));
15537           rtl = gen_rtx_MEM (BLKmode, rtl);
15538           MEM_READONLY_P (rtl) = 1;
15539         }
15540     }
15541   /* Other aggregates, and complex values, could be represented using
15542      CONCAT: FIXME!  */
15543   else if (AGGREGATE_TYPE_P (type) || TREE_CODE (type) == COMPLEX_TYPE)
15544     ;
15545   /* Vectors only work if their mode is supported by the target.
15546      FIXME: generic vectors ought to work too.  */
15547   else if (TREE_CODE (type) == VECTOR_TYPE && TYPE_MODE (type) == BLKmode)
15548     ;
15549   /* If the initializer is something that we know will expand into an
15550      immediate RTL constant, expand it now.  We must be careful not to
15551      reference variables which won't be output.  */
15552   else if (initializer_constant_valid_p (init, type)
15553            && ! walk_tree (&init, reference_to_unused, NULL, NULL))
15554     {
15555       /* Convert vector CONSTRUCTOR initializers to VECTOR_CST if
15556          possible.  */
15557       if (TREE_CODE (type) == VECTOR_TYPE)
15558         switch (TREE_CODE (init))
15559           {
15560           case VECTOR_CST:
15561             break;
15562           case CONSTRUCTOR:
15563             if (TREE_CONSTANT (init))
15564               {
15565                 VEC(constructor_elt,gc) *elts = CONSTRUCTOR_ELTS (init);
15566                 bool constant_p = true;
15567                 tree value;
15568                 unsigned HOST_WIDE_INT ix;
15569
15570                 /* Even when ctor is constant, it might contain non-*_CST
15571                    elements (e.g. { 1.0/0.0 - 1.0/0.0, 0.0 }) and those don't
15572                    belong into VECTOR_CST nodes.  */
15573                 FOR_EACH_CONSTRUCTOR_VALUE (elts, ix, value)
15574                   if (!CONSTANT_CLASS_P (value))
15575                     {
15576                       constant_p = false;
15577                       break;
15578                     }
15579
15580                 if (constant_p)
15581                   {
15582                     init = build_vector_from_ctor (type, elts);
15583                     break;
15584                   }
15585               }
15586             /* FALLTHRU */
15587
15588           default:
15589             return NULL;
15590           }
15591
15592       rtl = expand_expr (init, NULL_RTX, VOIDmode, EXPAND_INITIALIZER);
15593
15594       /* If expand_expr returns a MEM, it wasn't immediate.  */
15595       gcc_assert (!rtl || !MEM_P (rtl));
15596     }
15597
15598   return rtl;
15599 }
15600
15601 /* Generate RTL for the variable DECL to represent its location.  */
15602
15603 static rtx
15604 rtl_for_decl_location (tree decl)
15605 {
15606   rtx rtl;
15607
15608   /* Here we have to decide where we are going to say the parameter "lives"
15609      (as far as the debugger is concerned).  We only have a couple of
15610      choices.  GCC provides us with DECL_RTL and with DECL_INCOMING_RTL.
15611
15612      DECL_RTL normally indicates where the parameter lives during most of the
15613      activation of the function.  If optimization is enabled however, this
15614      could be either NULL or else a pseudo-reg.  Both of those cases indicate
15615      that the parameter doesn't really live anywhere (as far as the code
15616      generation parts of GCC are concerned) during most of the function's
15617      activation.  That will happen (for example) if the parameter is never
15618      referenced within the function.
15619
15620      We could just generate a location descriptor here for all non-NULL
15621      non-pseudo values of DECL_RTL and ignore all of the rest, but we can be
15622      a little nicer than that if we also consider DECL_INCOMING_RTL in cases
15623      where DECL_RTL is NULL or is a pseudo-reg.
15624
15625      Note however that we can only get away with using DECL_INCOMING_RTL as
15626      a backup substitute for DECL_RTL in certain limited cases.  In cases
15627      where DECL_ARG_TYPE (decl) indicates the same type as TREE_TYPE (decl),
15628      we can be sure that the parameter was passed using the same type as it is
15629      declared to have within the function, and that its DECL_INCOMING_RTL
15630      points us to a place where a value of that type is passed.
15631
15632      In cases where DECL_ARG_TYPE (decl) and TREE_TYPE (decl) are different,
15633      we cannot (in general) use DECL_INCOMING_RTL as a substitute for DECL_RTL
15634      because in these cases DECL_INCOMING_RTL points us to a value of some
15635      type which is *different* from the type of the parameter itself.  Thus,
15636      if we tried to use DECL_INCOMING_RTL to generate a location attribute in
15637      such cases, the debugger would end up (for example) trying to fetch a
15638      `float' from a place which actually contains the first part of a
15639      `double'.  That would lead to really incorrect and confusing
15640      output at debug-time.
15641
15642      So, in general, we *do not* use DECL_INCOMING_RTL as a backup for DECL_RTL
15643      in cases where DECL_ARG_TYPE (decl) != TREE_TYPE (decl).  There
15644      are a couple of exceptions however.  On little-endian machines we can
15645      get away with using DECL_INCOMING_RTL even when DECL_ARG_TYPE (decl) is
15646      not the same as TREE_TYPE (decl), but only when DECL_ARG_TYPE (decl) is
15647      an integral type that is smaller than TREE_TYPE (decl). These cases arise
15648      when (on a little-endian machine) a non-prototyped function has a
15649      parameter declared to be of type `short' or `char'.  In such cases,
15650      TREE_TYPE (decl) will be `short' or `char', DECL_ARG_TYPE (decl) will
15651      be `int', and DECL_INCOMING_RTL will point to the lowest-order byte of the
15652      passed `int' value.  If the debugger then uses that address to fetch
15653      a `short' or a `char' (on a little-endian machine) the result will be
15654      the correct data, so we allow for such exceptional cases below.
15655
15656      Note that our goal here is to describe the place where the given formal
15657      parameter lives during most of the function's activation (i.e. between the
15658      end of the prologue and the start of the epilogue).  We'll do that as best
15659      as we can. Note however that if the given formal parameter is modified
15660      sometime during the execution of the function, then a stack backtrace (at
15661      debug-time) will show the function as having been called with the *new*
15662      value rather than the value which was originally passed in.  This happens
15663      rarely enough that it is not a major problem, but it *is* a problem, and
15664      I'd like to fix it.
15665
15666      A future version of dwarf2out.c may generate two additional attributes for
15667      any given DW_TAG_formal_parameter DIE which will describe the "passed
15668      type" and the "passed location" for the given formal parameter in addition
15669      to the attributes we now generate to indicate the "declared type" and the
15670      "active location" for each parameter.  This additional set of attributes
15671      could be used by debuggers for stack backtraces. Separately, note that
15672      sometimes DECL_RTL can be NULL and DECL_INCOMING_RTL can be NULL also.
15673      This happens (for example) for inlined-instances of inline function formal
15674      parameters which are never referenced.  This really shouldn't be
15675      happening.  All PARM_DECL nodes should get valid non-NULL
15676      DECL_INCOMING_RTL values.  FIXME.  */
15677
15678   /* Use DECL_RTL as the "location" unless we find something better.  */
15679   rtl = DECL_RTL_IF_SET (decl);
15680
15681   /* When generating abstract instances, ignore everything except
15682      constants, symbols living in memory, and symbols living in
15683      fixed registers.  */
15684   if (! reload_completed)
15685     {
15686       if (rtl
15687           && (CONSTANT_P (rtl)
15688               || (MEM_P (rtl)
15689                   && CONSTANT_P (XEXP (rtl, 0)))
15690               || (REG_P (rtl)
15691                   && TREE_CODE (decl) == VAR_DECL
15692                   && TREE_STATIC (decl))))
15693         {
15694           rtl = targetm.delegitimize_address (rtl);
15695           return rtl;
15696         }
15697       rtl = NULL_RTX;
15698     }
15699   else if (TREE_CODE (decl) == PARM_DECL)
15700     {
15701       if (rtl == NULL_RTX || is_pseudo_reg (rtl))
15702         {
15703           tree declared_type = TREE_TYPE (decl);
15704           tree passed_type = DECL_ARG_TYPE (decl);
15705           enum machine_mode dmode = TYPE_MODE (declared_type);
15706           enum machine_mode pmode = TYPE_MODE (passed_type);
15707
15708           /* This decl represents a formal parameter which was optimized out.
15709              Note that DECL_INCOMING_RTL may be NULL in here, but we handle
15710              all cases where (rtl == NULL_RTX) just below.  */
15711           if (dmode == pmode)
15712             rtl = DECL_INCOMING_RTL (decl);
15713           else if (SCALAR_INT_MODE_P (dmode)
15714                    && GET_MODE_SIZE (dmode) <= GET_MODE_SIZE (pmode)
15715                    && DECL_INCOMING_RTL (decl))
15716             {
15717               rtx inc = DECL_INCOMING_RTL (decl);
15718               if (REG_P (inc))
15719                 rtl = inc;
15720               else if (MEM_P (inc))
15721                 {
15722                   if (BYTES_BIG_ENDIAN)
15723                     rtl = adjust_address_nv (inc, dmode,
15724                                              GET_MODE_SIZE (pmode)
15725                                              - GET_MODE_SIZE (dmode));
15726                   else
15727                     rtl = inc;
15728                 }
15729             }
15730         }
15731
15732       /* If the parm was passed in registers, but lives on the stack, then
15733          make a big endian correction if the mode of the type of the
15734          parameter is not the same as the mode of the rtl.  */
15735       /* ??? This is the same series of checks that are made in dbxout.c before
15736          we reach the big endian correction code there.  It isn't clear if all
15737          of these checks are necessary here, but keeping them all is the safe
15738          thing to do.  */
15739       else if (MEM_P (rtl)
15740                && XEXP (rtl, 0) != const0_rtx
15741                && ! CONSTANT_P (XEXP (rtl, 0))
15742                /* Not passed in memory.  */
15743                && !MEM_P (DECL_INCOMING_RTL (decl))
15744                /* Not passed by invisible reference.  */
15745                && (!REG_P (XEXP (rtl, 0))
15746                    || REGNO (XEXP (rtl, 0)) == HARD_FRAME_POINTER_REGNUM
15747                    || REGNO (XEXP (rtl, 0)) == STACK_POINTER_REGNUM
15748 #if ARG_POINTER_REGNUM != HARD_FRAME_POINTER_REGNUM
15749                    || REGNO (XEXP (rtl, 0)) == ARG_POINTER_REGNUM
15750 #endif
15751                      )
15752                /* Big endian correction check.  */
15753                && BYTES_BIG_ENDIAN
15754                && TYPE_MODE (TREE_TYPE (decl)) != GET_MODE (rtl)
15755                && (GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (decl)))
15756                    < UNITS_PER_WORD))
15757         {
15758           int offset = (UNITS_PER_WORD
15759                         - GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (decl))));
15760
15761           rtl = gen_rtx_MEM (TYPE_MODE (TREE_TYPE (decl)),
15762                              plus_constant (XEXP (rtl, 0), offset));
15763         }
15764     }
15765   else if (TREE_CODE (decl) == VAR_DECL
15766            && rtl
15767            && MEM_P (rtl)
15768            && GET_MODE (rtl) != TYPE_MODE (TREE_TYPE (decl))
15769            && BYTES_BIG_ENDIAN)
15770     {
15771       int rsize = GET_MODE_SIZE (GET_MODE (rtl));
15772       int dsize = GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (decl)));
15773
15774       /* If a variable is declared "register" yet is smaller than
15775          a register, then if we store the variable to memory, it
15776          looks like we're storing a register-sized value, when in
15777          fact we are not.  We need to adjust the offset of the
15778          storage location to reflect the actual value's bytes,
15779          else gdb will not be able to display it.  */
15780       if (rsize > dsize)
15781         rtl = gen_rtx_MEM (TYPE_MODE (TREE_TYPE (decl)),
15782                            plus_constant (XEXP (rtl, 0), rsize-dsize));
15783     }
15784
15785   /* A variable with no DECL_RTL but a DECL_INITIAL is a compile-time constant,
15786      and will have been substituted directly into all expressions that use it.
15787      C does not have such a concept, but C++ and other languages do.  */
15788   if (!rtl && TREE_CODE (decl) == VAR_DECL && DECL_INITIAL (decl))
15789     rtl = rtl_for_decl_init (DECL_INITIAL (decl), TREE_TYPE (decl));
15790
15791   if (rtl)
15792     rtl = targetm.delegitimize_address (rtl);
15793
15794   /* If we don't look past the constant pool, we risk emitting a
15795      reference to a constant pool entry that isn't referenced from
15796      code, and thus is not emitted.  */
15797   if (rtl)
15798     rtl = avoid_constant_pool_reference (rtl);
15799
15800   /* Try harder to get a rtl.  If this symbol ends up not being emitted
15801      in the current CU, resolve_addr will remove the expression referencing
15802      it.  */
15803   if (rtl == NULL_RTX
15804       && TREE_CODE (decl) == VAR_DECL
15805       && !DECL_EXTERNAL (decl)
15806       && TREE_STATIC (decl)
15807       && DECL_NAME (decl)
15808       && !DECL_HARD_REGISTER (decl)
15809       && DECL_MODE (decl) != VOIDmode)
15810     {
15811       rtl = make_decl_rtl_for_debug (decl);
15812       if (!MEM_P (rtl)
15813           || GET_CODE (XEXP (rtl, 0)) != SYMBOL_REF
15814           || SYMBOL_REF_DECL (XEXP (rtl, 0)) != decl)
15815         rtl = NULL_RTX;
15816     }
15817
15818   return rtl;
15819 }
15820
15821 /* Check whether decl is a Fortran COMMON symbol.  If not, NULL_TREE is
15822    returned.  If so, the decl for the COMMON block is returned, and the
15823    value is the offset into the common block for the symbol.  */
15824
15825 static tree
15826 fortran_common (tree decl, HOST_WIDE_INT *value)
15827 {
15828   tree val_expr, cvar;
15829   enum machine_mode mode;
15830   HOST_WIDE_INT bitsize, bitpos;
15831   tree offset;
15832   int volatilep = 0, unsignedp = 0;
15833
15834   /* If the decl isn't a VAR_DECL, or if it isn't static, or if
15835      it does not have a value (the offset into the common area), or if it
15836      is thread local (as opposed to global) then it isn't common, and shouldn't
15837      be handled as such.  */
15838   if (TREE_CODE (decl) != VAR_DECL
15839       || !TREE_STATIC (decl)
15840       || !DECL_HAS_VALUE_EXPR_P (decl)
15841       || !is_fortran ())
15842     return NULL_TREE;
15843
15844   val_expr = DECL_VALUE_EXPR (decl);
15845   if (TREE_CODE (val_expr) != COMPONENT_REF)
15846     return NULL_TREE;
15847
15848   cvar = get_inner_reference (val_expr, &bitsize, &bitpos, &offset,
15849                               &mode, &unsignedp, &volatilep, true);
15850
15851   if (cvar == NULL_TREE
15852       || TREE_CODE (cvar) != VAR_DECL
15853       || DECL_ARTIFICIAL (cvar)
15854       || !TREE_PUBLIC (cvar))
15855     return NULL_TREE;
15856
15857   *value = 0;
15858   if (offset != NULL)
15859     {
15860       if (!host_integerp (offset, 0))
15861         return NULL_TREE;
15862       *value = tree_low_cst (offset, 0);
15863     }
15864   if (bitpos != 0)
15865     *value += bitpos / BITS_PER_UNIT;
15866
15867   return cvar;
15868 }
15869
15870 /* Generate *either* a DW_AT_location attribute or else a DW_AT_const_value
15871    data attribute for a variable or a parameter.  We generate the
15872    DW_AT_const_value attribute only in those cases where the given variable
15873    or parameter does not have a true "location" either in memory or in a
15874    register.  This can happen (for example) when a constant is passed as an
15875    actual argument in a call to an inline function.  (It's possible that
15876    these things can crop up in other ways also.)  Note that one type of
15877    constant value which can be passed into an inlined function is a constant
15878    pointer.  This can happen for example if an actual argument in an inlined
15879    function call evaluates to a compile-time constant address.  */
15880
15881 static bool
15882 add_location_or_const_value_attribute (dw_die_ref die, tree decl,
15883                                        enum dwarf_attribute attr)
15884 {
15885   rtx rtl;
15886   dw_loc_list_ref list;
15887   var_loc_list *loc_list;
15888
15889   if (TREE_CODE (decl) == ERROR_MARK)
15890     return false;
15891
15892   gcc_assert (TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == PARM_DECL
15893               || TREE_CODE (decl) == RESULT_DECL);
15894
15895   /* Try to get some constant RTL for this decl, and use that as the value of
15896      the location.  */
15897
15898   rtl = rtl_for_decl_location (decl);
15899   if (rtl && (CONSTANT_P (rtl) || GET_CODE (rtl) == CONST_STRING)
15900       && add_const_value_attribute (die, rtl))
15901     return true;
15902
15903   /* See if we have single element location list that is equivalent to
15904      a constant value.  That way we are better to use add_const_value_attribute
15905      rather than expanding constant value equivalent.  */
15906   loc_list = lookup_decl_loc (decl);
15907   if (loc_list
15908       && loc_list->first
15909       && loc_list->first == loc_list->last
15910       && NOTE_VAR_LOCATION (loc_list->first->var_loc_note)
15911       && NOTE_VAR_LOCATION_LOC (loc_list->first->var_loc_note))
15912     {
15913       struct var_loc_node *node;
15914
15915       node = loc_list->first;
15916       rtl = NOTE_VAR_LOCATION_LOC (node->var_loc_note);
15917       if (GET_CODE (rtl) == EXPR_LIST)
15918         rtl = XEXP (rtl, 0);
15919       if ((CONSTANT_P (rtl) || GET_CODE (rtl) == CONST_STRING)
15920           && add_const_value_attribute (die, rtl))
15921          return true;
15922     }
15923   list = loc_list_from_tree (decl, decl_by_reference_p (decl) ? 0 : 2);
15924   if (list)
15925     {
15926       add_AT_location_description (die, attr, list);
15927       return true;
15928     }
15929   /* None of that worked, so it must not really have a location;
15930      try adding a constant value attribute from the DECL_INITIAL.  */
15931   return tree_add_const_value_attribute_for_decl (die, decl);
15932 }
15933
15934 /* Add VARIABLE and DIE into deferred locations list.  */
15935
15936 static void
15937 defer_location (tree variable, dw_die_ref die)
15938 {
15939   deferred_locations entry;
15940   entry.variable = variable;
15941   entry.die = die;
15942   VEC_safe_push (deferred_locations, gc, deferred_locations_list, &entry);
15943 }
15944
15945 /* Helper function for tree_add_const_value_attribute.  Natively encode
15946    initializer INIT into an array.  Return true if successful.  */
15947
15948 static bool
15949 native_encode_initializer (tree init, unsigned char *array, int size)
15950 {
15951   tree type;
15952
15953   if (init == NULL_TREE)
15954     return false;
15955
15956   STRIP_NOPS (init);
15957   switch (TREE_CODE (init))
15958     {
15959     case STRING_CST:
15960       type = TREE_TYPE (init);
15961       if (TREE_CODE (type) == ARRAY_TYPE)
15962         {
15963           tree enttype = TREE_TYPE (type);
15964           enum machine_mode mode = TYPE_MODE (enttype);
15965
15966           if (GET_MODE_CLASS (mode) != MODE_INT || GET_MODE_SIZE (mode) != 1)
15967             return false;
15968           if (int_size_in_bytes (type) != size)
15969             return false;
15970           if (size > TREE_STRING_LENGTH (init))
15971             {
15972               memcpy (array, TREE_STRING_POINTER (init),
15973                       TREE_STRING_LENGTH (init));
15974               memset (array + TREE_STRING_LENGTH (init),
15975                       '\0', size - TREE_STRING_LENGTH (init));
15976             }
15977           else
15978             memcpy (array, TREE_STRING_POINTER (init), size);
15979           return true;
15980         }
15981       return false;
15982     case CONSTRUCTOR:
15983       type = TREE_TYPE (init);
15984       if (int_size_in_bytes (type) != size)
15985         return false;
15986       if (TREE_CODE (type) == ARRAY_TYPE)
15987         {
15988           HOST_WIDE_INT min_index;
15989           unsigned HOST_WIDE_INT cnt;
15990           int curpos = 0, fieldsize;
15991           constructor_elt *ce;
15992
15993           if (TYPE_DOMAIN (type) == NULL_TREE
15994               || !host_integerp (TYPE_MIN_VALUE (TYPE_DOMAIN (type)), 0))
15995             return false;
15996
15997           fieldsize = int_size_in_bytes (TREE_TYPE (type));
15998           if (fieldsize <= 0)
15999             return false;
16000
16001           min_index = tree_low_cst (TYPE_MIN_VALUE (TYPE_DOMAIN (type)), 0);
16002           memset (array, '\0', size);
16003           for (cnt = 0;
16004                VEC_iterate (constructor_elt, CONSTRUCTOR_ELTS (init), cnt, ce);
16005                cnt++)
16006             {
16007               tree val = ce->value;
16008               tree index = ce->index;
16009               int pos = curpos;
16010               if (index && TREE_CODE (index) == RANGE_EXPR)
16011                 pos = (tree_low_cst (TREE_OPERAND (index, 0), 0) - min_index)
16012                       * fieldsize;
16013               else if (index)
16014                 pos = (tree_low_cst (index, 0) - min_index) * fieldsize;
16015
16016               if (val)
16017                 {
16018                   STRIP_NOPS (val);
16019                   if (!native_encode_initializer (val, array + pos, fieldsize))
16020                     return false;
16021                 }
16022               curpos = pos + fieldsize;
16023               if (index && TREE_CODE (index) == RANGE_EXPR)
16024                 {
16025                   int count = tree_low_cst (TREE_OPERAND (index, 1), 0)
16026                               - tree_low_cst (TREE_OPERAND (index, 0), 0);
16027                   while (count > 0)
16028                     {
16029                       if (val)
16030                         memcpy (array + curpos, array + pos, fieldsize);
16031                       curpos += fieldsize;
16032                     }
16033                 }
16034               gcc_assert (curpos <= size);
16035             }
16036           return true;
16037         }
16038       else if (TREE_CODE (type) == RECORD_TYPE
16039                || TREE_CODE (type) == UNION_TYPE)
16040         {
16041           tree field = NULL_TREE;
16042           unsigned HOST_WIDE_INT cnt;
16043           constructor_elt *ce;
16044
16045           if (int_size_in_bytes (type) != size)
16046             return false;
16047
16048           if (TREE_CODE (type) == RECORD_TYPE)
16049             field = TYPE_FIELDS (type);
16050
16051           for (cnt = 0;
16052                VEC_iterate (constructor_elt, CONSTRUCTOR_ELTS (init), cnt, ce);
16053                cnt++, field = field ? TREE_CHAIN (field) : 0)
16054             {
16055               tree val = ce->value;
16056               int pos, fieldsize;
16057
16058               if (ce->index != 0)
16059                 field = ce->index;
16060
16061               if (val)
16062                 STRIP_NOPS (val);
16063
16064               if (field == NULL_TREE || DECL_BIT_FIELD (field))
16065                 return false;
16066
16067               if (TREE_CODE (TREE_TYPE (field)) == ARRAY_TYPE
16068                   && TYPE_DOMAIN (TREE_TYPE (field))
16069                   && ! TYPE_MAX_VALUE (TYPE_DOMAIN (TREE_TYPE (field))))
16070                 return false;
16071               else if (DECL_SIZE_UNIT (field) == NULL_TREE
16072                        || !host_integerp (DECL_SIZE_UNIT (field), 0))
16073                 return false;
16074               fieldsize = tree_low_cst (DECL_SIZE_UNIT (field), 0);
16075               pos = int_byte_position (field);
16076               gcc_assert (pos + fieldsize <= size);
16077               if (val
16078                   && !native_encode_initializer (val, array + pos, fieldsize))
16079                 return false;
16080             }
16081           return true;
16082         }
16083       return false;
16084     case VIEW_CONVERT_EXPR:
16085     case NON_LVALUE_EXPR:
16086       return native_encode_initializer (TREE_OPERAND (init, 0), array, size);
16087     default:
16088       return native_encode_expr (init, array, size) == size;
16089     }
16090 }
16091
16092 /* Attach a DW_AT_const_value attribute to DIE. The value of the
16093    attribute is the const value T.  */
16094
16095 static bool
16096 tree_add_const_value_attribute (dw_die_ref die, tree t)
16097 {
16098   tree init;
16099   tree type = TREE_TYPE (t);
16100   rtx rtl;
16101
16102   if (!t || !TREE_TYPE (t) || TREE_TYPE (t) == error_mark_node)
16103     return false;
16104
16105   init = t;
16106   gcc_assert (!DECL_P (init));
16107
16108   rtl = rtl_for_decl_init (init, type);
16109   if (rtl)
16110     return add_const_value_attribute (die, rtl);
16111   /* If the host and target are sane, try harder.  */
16112   else if (CHAR_BIT == 8 && BITS_PER_UNIT == 8
16113            && initializer_constant_valid_p (init, type))
16114     {
16115       HOST_WIDE_INT size = int_size_in_bytes (TREE_TYPE (init));
16116       if (size > 0 && (int) size == size)
16117         {
16118           unsigned char *array = GGC_CNEWVEC (unsigned char, size);
16119
16120           if (native_encode_initializer (init, array, size))
16121             {
16122               add_AT_vec (die, DW_AT_const_value, size, 1, array);
16123               return true;
16124             }
16125         }
16126     }
16127   return false;
16128 }
16129
16130 /* Attach a DW_AT_const_value attribute to VAR_DIE. The value of the
16131    attribute is the const value of T, where T is an integral constant
16132    variable with static storage duration
16133    (so it can't be a PARM_DECL or a RESULT_DECL).  */
16134
16135 static bool
16136 tree_add_const_value_attribute_for_decl (dw_die_ref var_die, tree decl)
16137 {
16138
16139   if (!decl
16140       || (TREE_CODE (decl) != VAR_DECL
16141           && TREE_CODE (decl) != CONST_DECL))
16142     return false;
16143
16144     if (TREE_READONLY (decl)
16145         && ! TREE_THIS_VOLATILE (decl)
16146         && DECL_INITIAL (decl))
16147       /* OK */;
16148     else
16149       return false;
16150
16151   /* Don't add DW_AT_const_value if abstract origin already has one.  */
16152   if (get_AT (var_die, DW_AT_const_value))
16153     return false;
16154
16155   return tree_add_const_value_attribute (var_die, DECL_INITIAL (decl));
16156 }
16157
16158 /* Convert the CFI instructions for the current function into a
16159    location list.  This is used for DW_AT_frame_base when we targeting
16160    a dwarf2 consumer that does not support the dwarf3
16161    DW_OP_call_frame_cfa.  OFFSET is a constant to be added to all CFA
16162    expressions.  */
16163
16164 static dw_loc_list_ref
16165 convert_cfa_to_fb_loc_list (HOST_WIDE_INT offset)
16166 {
16167   dw_fde_ref fde;
16168   dw_loc_list_ref list, *list_tail;
16169   dw_cfi_ref cfi;
16170   dw_cfa_location last_cfa, next_cfa;
16171   const char *start_label, *last_label, *section;
16172   dw_cfa_location remember;
16173
16174   fde = current_fde ();
16175   gcc_assert (fde != NULL);
16176
16177   section = secname_for_decl (current_function_decl);
16178   list_tail = &list;
16179   list = NULL;
16180
16181   memset (&next_cfa, 0, sizeof (next_cfa));
16182   next_cfa.reg = INVALID_REGNUM;
16183   remember = next_cfa;
16184
16185   start_label = fde->dw_fde_begin;
16186
16187   /* ??? Bald assumption that the CIE opcode list does not contain
16188      advance opcodes.  */
16189   for (cfi = cie_cfi_head; cfi; cfi = cfi->dw_cfi_next)
16190     lookup_cfa_1 (cfi, &next_cfa, &remember);
16191
16192   last_cfa = next_cfa;
16193   last_label = start_label;
16194
16195   for (cfi = fde->dw_fde_cfi; cfi; cfi = cfi->dw_cfi_next)
16196     switch (cfi->dw_cfi_opc)
16197       {
16198       case DW_CFA_set_loc:
16199       case DW_CFA_advance_loc1:
16200       case DW_CFA_advance_loc2:
16201       case DW_CFA_advance_loc4:
16202         if (!cfa_equal_p (&last_cfa, &next_cfa))
16203           {
16204             *list_tail = new_loc_list (build_cfa_loc (&last_cfa, offset),
16205                                        start_label, last_label, section);
16206
16207             list_tail = &(*list_tail)->dw_loc_next;
16208             last_cfa = next_cfa;
16209             start_label = last_label;
16210           }
16211         last_label = cfi->dw_cfi_oprnd1.dw_cfi_addr;
16212         break;
16213
16214       case DW_CFA_advance_loc:
16215         /* The encoding is complex enough that we should never emit this.  */
16216         gcc_unreachable ();
16217
16218       default:
16219         lookup_cfa_1 (cfi, &next_cfa, &remember);
16220         break;
16221       }
16222
16223   if (!cfa_equal_p (&last_cfa, &next_cfa))
16224     {
16225       *list_tail = new_loc_list (build_cfa_loc (&last_cfa, offset),
16226                                  start_label, last_label, section);
16227       list_tail = &(*list_tail)->dw_loc_next;
16228       start_label = last_label;
16229     }
16230
16231   *list_tail = new_loc_list (build_cfa_loc (&next_cfa, offset),
16232                              start_label, fde->dw_fde_end, section);
16233
16234   if (list && list->dw_loc_next)
16235     gen_llsym (list);
16236
16237   return list;
16238 }
16239
16240 /* Compute a displacement from the "steady-state frame pointer" to the
16241    frame base (often the same as the CFA), and store it in
16242    frame_pointer_fb_offset.  OFFSET is added to the displacement
16243    before the latter is negated.  */
16244
16245 static void
16246 compute_frame_pointer_to_fb_displacement (HOST_WIDE_INT offset)
16247 {
16248   rtx reg, elim;
16249
16250 #ifdef FRAME_POINTER_CFA_OFFSET
16251   reg = frame_pointer_rtx;
16252   offset += FRAME_POINTER_CFA_OFFSET (current_function_decl);
16253 #else
16254   reg = arg_pointer_rtx;
16255   offset += ARG_POINTER_CFA_OFFSET (current_function_decl);
16256 #endif
16257
16258   elim = eliminate_regs (reg, VOIDmode, NULL_RTX);
16259   if (GET_CODE (elim) == PLUS)
16260     {
16261       offset += INTVAL (XEXP (elim, 1));
16262       elim = XEXP (elim, 0);
16263     }
16264
16265   gcc_assert ((SUPPORTS_STACK_ALIGNMENT
16266                && (elim == hard_frame_pointer_rtx
16267                    || elim == stack_pointer_rtx))
16268               || elim == (frame_pointer_needed
16269                           ? hard_frame_pointer_rtx
16270                           : stack_pointer_rtx));
16271
16272   frame_pointer_fb_offset = -offset;
16273 }
16274
16275 /* Generate a DW_AT_name attribute given some string value to be included as
16276    the value of the attribute.  */
16277
16278 static void
16279 add_name_attribute (dw_die_ref die, const char *name_string)
16280 {
16281   if (name_string != NULL && *name_string != 0)
16282     {
16283       if (demangle_name_func)
16284         name_string = (*demangle_name_func) (name_string);
16285
16286       add_AT_string (die, DW_AT_name, name_string);
16287     }
16288 }
16289
16290 /* Generate a DW_AT_comp_dir attribute for DIE.  */
16291
16292 static void
16293 add_comp_dir_attribute (dw_die_ref die)
16294 {
16295   const char *wd = get_src_pwd ();
16296   char *wd1;
16297
16298   if (wd == NULL)
16299     return;
16300
16301   if (DWARF2_DIR_SHOULD_END_WITH_SEPARATOR)
16302     {
16303       int wdlen;
16304
16305       wdlen = strlen (wd);
16306       wd1 = GGC_NEWVEC (char, wdlen + 2);
16307       strcpy (wd1, wd);
16308       wd1 [wdlen] = DIR_SEPARATOR;
16309       wd1 [wdlen + 1] = 0;
16310       wd = wd1;
16311     }
16312
16313     add_AT_string (die, DW_AT_comp_dir, remap_debug_filename (wd));
16314 }
16315
16316 /* Return the default for DW_AT_lower_bound, or -1 if there is not any
16317    default.  */
16318
16319 static int
16320 lower_bound_default (void)
16321 {
16322   switch (get_AT_unsigned (comp_unit_die, DW_AT_language))
16323     {
16324     case DW_LANG_C:
16325     case DW_LANG_C89:
16326     case DW_LANG_C99:
16327     case DW_LANG_C_plus_plus:
16328     case DW_LANG_ObjC:
16329     case DW_LANG_ObjC_plus_plus:
16330     case DW_LANG_Java:
16331       return 0;
16332     case DW_LANG_Fortran77:
16333     case DW_LANG_Fortran90:
16334     case DW_LANG_Fortran95:
16335       return 1;
16336     case DW_LANG_UPC:
16337     case DW_LANG_D:
16338       return dwarf_version >= 4 ? 0 : -1;
16339     case DW_LANG_Ada95:
16340     case DW_LANG_Ada83:
16341     case DW_LANG_Cobol74:
16342     case DW_LANG_Cobol85:
16343     case DW_LANG_Pascal83:
16344     case DW_LANG_Modula2:
16345     case DW_LANG_PLI:
16346       return dwarf_version >= 4 ? 1 : -1;
16347     default:
16348       return -1;
16349     }
16350 }
16351
16352 /* Given a tree node describing an array bound (either lower or upper) output
16353    a representation for that bound.  */
16354
16355 static void
16356 add_bound_info (dw_die_ref subrange_die, enum dwarf_attribute bound_attr, tree bound)
16357 {
16358   switch (TREE_CODE (bound))
16359     {
16360     case ERROR_MARK:
16361       return;
16362
16363     /* All fixed-bounds are represented by INTEGER_CST nodes.  */
16364     case INTEGER_CST:
16365       {
16366         unsigned int prec = simple_type_size_in_bits (TREE_TYPE (bound));
16367         int dflt;
16368
16369         /* Use the default if possible.  */
16370         if (bound_attr == DW_AT_lower_bound
16371             && host_integerp (bound, 0)
16372             && (dflt = lower_bound_default ()) != -1
16373             && tree_low_cst (bound, 0) == dflt)
16374           ;
16375
16376         /* Otherwise represent the bound as an unsigned value with the
16377            precision of its type.  The precision and signedness of the
16378            type will be necessary to re-interpret it unambiguously.  */
16379         else if (prec < HOST_BITS_PER_WIDE_INT)
16380           {
16381             unsigned HOST_WIDE_INT mask
16382               = ((unsigned HOST_WIDE_INT) 1 << prec) - 1;
16383             add_AT_unsigned (subrange_die, bound_attr,
16384                              TREE_INT_CST_LOW (bound) & mask);
16385           }
16386         else if (prec == HOST_BITS_PER_WIDE_INT
16387                  || TREE_INT_CST_HIGH (bound) == 0)
16388           add_AT_unsigned (subrange_die, bound_attr,
16389                            TREE_INT_CST_LOW (bound));
16390         else
16391           add_AT_double (subrange_die, bound_attr, TREE_INT_CST_HIGH (bound),
16392                          TREE_INT_CST_LOW (bound));
16393       }
16394       break;
16395
16396     CASE_CONVERT:
16397     case VIEW_CONVERT_EXPR:
16398       add_bound_info (subrange_die, bound_attr, TREE_OPERAND (bound, 0));
16399       break;
16400
16401     case SAVE_EXPR:
16402       break;
16403
16404     case VAR_DECL:
16405     case PARM_DECL:
16406     case RESULT_DECL:
16407       {
16408         dw_die_ref decl_die = lookup_decl_die (bound);
16409
16410         /* ??? Can this happen, or should the variable have been bound
16411            first?  Probably it can, since I imagine that we try to create
16412            the types of parameters in the order in which they exist in
16413            the list, and won't have created a forward reference to a
16414            later parameter.  */
16415         if (decl_die != NULL)
16416           {
16417             add_AT_die_ref (subrange_die, bound_attr, decl_die);
16418             break;
16419           }
16420       }
16421       /* FALLTHRU */
16422
16423     default:
16424       {
16425         /* Otherwise try to create a stack operation procedure to
16426            evaluate the value of the array bound.  */
16427
16428         dw_die_ref ctx, decl_die;
16429         dw_loc_list_ref list;
16430
16431         list = loc_list_from_tree (bound, 2);
16432         if (list == NULL || single_element_loc_list_p (list))
16433           {
16434             /* If DW_AT_*bound is not a reference nor constant, it is
16435                a DWARF expression rather than location description.
16436                For that loc_list_from_tree (bound, 0) is needed.
16437                If that fails to give a single element list,
16438                fall back to outputting this as a reference anyway.  */
16439             dw_loc_list_ref list2 = loc_list_from_tree (bound, 0);
16440             if (list2 && single_element_loc_list_p (list2))
16441               {
16442                 add_AT_loc (subrange_die, bound_attr, list2->expr);
16443                 break;
16444               }
16445           }
16446         if (list == NULL)
16447           break;
16448
16449         if (current_function_decl == 0)
16450           ctx = comp_unit_die;
16451         else
16452           ctx = lookup_decl_die (current_function_decl);
16453
16454         decl_die = new_die (DW_TAG_variable, ctx, bound);
16455         add_AT_flag (decl_die, DW_AT_artificial, 1);
16456         add_type_attribute (decl_die, TREE_TYPE (bound), 1, 0, ctx);
16457         add_AT_location_description (decl_die, DW_AT_location, list);
16458         add_AT_die_ref (subrange_die, bound_attr, decl_die);
16459         break;
16460       }
16461     }
16462 }
16463
16464 /* Add subscript info to TYPE_DIE, describing an array TYPE, collapsing
16465    possibly nested array subscripts in a flat sequence if COLLAPSE_P is true.
16466    Note that the block of subscript information for an array type also
16467    includes information about the element type of the given array type.  */
16468
16469 static void
16470 add_subscript_info (dw_die_ref type_die, tree type, bool collapse_p)
16471 {
16472   unsigned dimension_number;
16473   tree lower, upper;
16474   dw_die_ref subrange_die;
16475
16476   for (dimension_number = 0;
16477        TREE_CODE (type) == ARRAY_TYPE && (dimension_number == 0 || collapse_p);
16478        type = TREE_TYPE (type), dimension_number++)
16479     {
16480       tree domain = TYPE_DOMAIN (type);
16481
16482       if (TYPE_STRING_FLAG (type) && is_fortran () && dimension_number > 0)
16483         break;
16484
16485       /* Arrays come in three flavors: Unspecified bounds, fixed bounds,
16486          and (in GNU C only) variable bounds.  Handle all three forms
16487          here.  */
16488       subrange_die = new_die (DW_TAG_subrange_type, type_die, NULL);
16489       if (domain)
16490         {
16491           /* We have an array type with specified bounds.  */
16492           lower = TYPE_MIN_VALUE (domain);
16493           upper = TYPE_MAX_VALUE (domain);
16494
16495           /* Define the index type.  */
16496           if (TREE_TYPE (domain))
16497             {
16498               /* ??? This is probably an Ada unnamed subrange type.  Ignore the
16499                  TREE_TYPE field.  We can't emit debug info for this
16500                  because it is an unnamed integral type.  */
16501               if (TREE_CODE (domain) == INTEGER_TYPE
16502                   && TYPE_NAME (domain) == NULL_TREE
16503                   && TREE_CODE (TREE_TYPE (domain)) == INTEGER_TYPE
16504                   && TYPE_NAME (TREE_TYPE (domain)) == NULL_TREE)
16505                 ;
16506               else
16507                 add_type_attribute (subrange_die, TREE_TYPE (domain), 0, 0,
16508                                     type_die);
16509             }
16510
16511           /* ??? If upper is NULL, the array has unspecified length,
16512              but it does have a lower bound.  This happens with Fortran
16513                dimension arr(N:*)
16514              Since the debugger is definitely going to need to know N
16515              to produce useful results, go ahead and output the lower
16516              bound solo, and hope the debugger can cope.  */
16517
16518           add_bound_info (subrange_die, DW_AT_lower_bound, lower);
16519           if (upper)
16520             add_bound_info (subrange_die, DW_AT_upper_bound, upper);
16521         }
16522
16523       /* Otherwise we have an array type with an unspecified length.  The
16524          DWARF-2 spec does not say how to handle this; let's just leave out the
16525          bounds.  */
16526     }
16527 }
16528
16529 static void
16530 add_byte_size_attribute (dw_die_ref die, tree tree_node)
16531 {
16532   unsigned size;
16533
16534   switch (TREE_CODE (tree_node))
16535     {
16536     case ERROR_MARK:
16537       size = 0;
16538       break;
16539     case ENUMERAL_TYPE:
16540     case RECORD_TYPE:
16541     case UNION_TYPE:
16542     case QUAL_UNION_TYPE:
16543       size = int_size_in_bytes (tree_node);
16544       break;
16545     case FIELD_DECL:
16546       /* For a data member of a struct or union, the DW_AT_byte_size is
16547          generally given as the number of bytes normally allocated for an
16548          object of the *declared* type of the member itself.  This is true
16549          even for bit-fields.  */
16550       size = simple_type_size_in_bits (field_type (tree_node)) / BITS_PER_UNIT;
16551       break;
16552     default:
16553       gcc_unreachable ();
16554     }
16555
16556   /* Note that `size' might be -1 when we get to this point.  If it is, that
16557      indicates that the byte size of the entity in question is variable.  We
16558      have no good way of expressing this fact in Dwarf at the present time,
16559      so just let the -1 pass on through.  */
16560   add_AT_unsigned (die, DW_AT_byte_size, size);
16561 }
16562
16563 /* For a FIELD_DECL node which represents a bit-field, output an attribute
16564    which specifies the distance in bits from the highest order bit of the
16565    "containing object" for the bit-field to the highest order bit of the
16566    bit-field itself.
16567
16568    For any given bit-field, the "containing object" is a hypothetical object
16569    (of some integral or enum type) within which the given bit-field lives.  The
16570    type of this hypothetical "containing object" is always the same as the
16571    declared type of the individual bit-field itself.  The determination of the
16572    exact location of the "containing object" for a bit-field is rather
16573    complicated.  It's handled by the `field_byte_offset' function (above).
16574
16575    Note that it is the size (in bytes) of the hypothetical "containing object"
16576    which will be given in the DW_AT_byte_size attribute for this bit-field.
16577    (See `byte_size_attribute' above).  */
16578
16579 static inline void
16580 add_bit_offset_attribute (dw_die_ref die, tree decl)
16581 {
16582   HOST_WIDE_INT object_offset_in_bytes = field_byte_offset (decl);
16583   tree type = DECL_BIT_FIELD_TYPE (decl);
16584   HOST_WIDE_INT bitpos_int;
16585   HOST_WIDE_INT highest_order_object_bit_offset;
16586   HOST_WIDE_INT highest_order_field_bit_offset;
16587   HOST_WIDE_INT unsigned bit_offset;
16588
16589   /* Must be a field and a bit field.  */
16590   gcc_assert (type && TREE_CODE (decl) == FIELD_DECL);
16591
16592   /* We can't yet handle bit-fields whose offsets are variable, so if we
16593      encounter such things, just return without generating any attribute
16594      whatsoever.  Likewise for variable or too large size.  */
16595   if (! host_integerp (bit_position (decl), 0)
16596       || ! host_integerp (DECL_SIZE (decl), 1))
16597     return;
16598
16599   bitpos_int = int_bit_position (decl);
16600
16601   /* Note that the bit offset is always the distance (in bits) from the
16602      highest-order bit of the "containing object" to the highest-order bit of
16603      the bit-field itself.  Since the "high-order end" of any object or field
16604      is different on big-endian and little-endian machines, the computation
16605      below must take account of these differences.  */
16606   highest_order_object_bit_offset = object_offset_in_bytes * BITS_PER_UNIT;
16607   highest_order_field_bit_offset = bitpos_int;
16608
16609   if (! BYTES_BIG_ENDIAN)
16610     {
16611       highest_order_field_bit_offset += tree_low_cst (DECL_SIZE (decl), 0);
16612       highest_order_object_bit_offset += simple_type_size_in_bits (type);
16613     }
16614
16615   bit_offset
16616     = (! BYTES_BIG_ENDIAN
16617        ? highest_order_object_bit_offset - highest_order_field_bit_offset
16618        : highest_order_field_bit_offset - highest_order_object_bit_offset);
16619
16620   add_AT_unsigned (die, DW_AT_bit_offset, bit_offset);
16621 }
16622
16623 /* For a FIELD_DECL node which represents a bit field, output an attribute
16624    which specifies the length in bits of the given field.  */
16625
16626 static inline void
16627 add_bit_size_attribute (dw_die_ref die, tree decl)
16628 {
16629   /* Must be a field and a bit field.  */
16630   gcc_assert (TREE_CODE (decl) == FIELD_DECL
16631               && DECL_BIT_FIELD_TYPE (decl));
16632
16633   if (host_integerp (DECL_SIZE (decl), 1))
16634     add_AT_unsigned (die, DW_AT_bit_size, tree_low_cst (DECL_SIZE (decl), 1));
16635 }
16636
16637 /* If the compiled language is ANSI C, then add a 'prototyped'
16638    attribute, if arg types are given for the parameters of a function.  */
16639
16640 static inline void
16641 add_prototyped_attribute (dw_die_ref die, tree func_type)
16642 {
16643   if (get_AT_unsigned (comp_unit_die, DW_AT_language) == DW_LANG_C89
16644       && TYPE_ARG_TYPES (func_type) != NULL)
16645     add_AT_flag (die, DW_AT_prototyped, 1);
16646 }
16647
16648 /* Add an 'abstract_origin' attribute below a given DIE.  The DIE is found
16649    by looking in either the type declaration or object declaration
16650    equate table.  */
16651
16652 static inline dw_die_ref
16653 add_abstract_origin_attribute (dw_die_ref die, tree origin)
16654 {
16655   dw_die_ref origin_die = NULL;
16656
16657   if (TREE_CODE (origin) != FUNCTION_DECL)
16658     {
16659       /* We may have gotten separated from the block for the inlined
16660          function, if we're in an exception handler or some such; make
16661          sure that the abstract function has been written out.
16662
16663          Doing this for nested functions is wrong, however; functions are
16664          distinct units, and our context might not even be inline.  */
16665       tree fn = origin;
16666
16667       if (TYPE_P (fn))
16668         fn = TYPE_STUB_DECL (fn);
16669
16670       fn = decl_function_context (fn);
16671       if (fn)
16672         dwarf2out_abstract_function (fn);
16673     }
16674
16675   if (DECL_P (origin))
16676     origin_die = lookup_decl_die (origin);
16677   else if (TYPE_P (origin))
16678     origin_die = lookup_type_die (origin);
16679
16680   /* XXX: Functions that are never lowered don't always have correct block
16681      trees (in the case of java, they simply have no block tree, in some other
16682      languages).  For these functions, there is nothing we can really do to
16683      output correct debug info for inlined functions in all cases.  Rather
16684      than die, we'll just produce deficient debug info now, in that we will
16685      have variables without a proper abstract origin.  In the future, when all
16686      functions are lowered, we should re-add a gcc_assert (origin_die)
16687      here.  */
16688
16689   if (origin_die)
16690     add_AT_die_ref (die, DW_AT_abstract_origin, origin_die);
16691   return origin_die;
16692 }
16693
16694 /* We do not currently support the pure_virtual attribute.  */
16695
16696 static inline void
16697 add_pure_or_virtual_attribute (dw_die_ref die, tree func_decl)
16698 {
16699   if (DECL_VINDEX (func_decl))
16700     {
16701       add_AT_unsigned (die, DW_AT_virtuality, DW_VIRTUALITY_virtual);
16702
16703       if (host_integerp (DECL_VINDEX (func_decl), 0))
16704         add_AT_loc (die, DW_AT_vtable_elem_location,
16705                     new_loc_descr (DW_OP_constu,
16706                                    tree_low_cst (DECL_VINDEX (func_decl), 0),
16707                                    0));
16708
16709       /* GNU extension: Record what type this method came from originally.  */
16710       if (debug_info_level > DINFO_LEVEL_TERSE
16711           && DECL_CONTEXT (func_decl))
16712         add_AT_die_ref (die, DW_AT_containing_type,
16713                         lookup_type_die (DECL_CONTEXT (func_decl)));
16714     }
16715 }
16716 \f
16717 /* Add source coordinate attributes for the given decl.  */
16718
16719 static void
16720 add_src_coords_attributes (dw_die_ref die, tree decl)
16721 {
16722   expanded_location s = expand_location (DECL_SOURCE_LOCATION (decl));
16723
16724   add_AT_file (die, DW_AT_decl_file, lookup_filename (s.file));
16725   add_AT_unsigned (die, DW_AT_decl_line, s.line);
16726 }
16727
16728 /* Add a DW_AT_name attribute and source coordinate attribute for the
16729    given decl, but only if it actually has a name.  */
16730
16731 static void
16732 add_name_and_src_coords_attributes (dw_die_ref die, tree decl)
16733 {
16734   tree decl_name;
16735
16736   decl_name = DECL_NAME (decl);
16737   if (decl_name != NULL && IDENTIFIER_POINTER (decl_name) != NULL)
16738     {
16739       const char *name = dwarf2_name (decl, 0);
16740       if (name)
16741         add_name_attribute (die, name);
16742       if (! DECL_ARTIFICIAL (decl))
16743         add_src_coords_attributes (die, decl);
16744
16745       if ((TREE_CODE (decl) == FUNCTION_DECL || TREE_CODE (decl) == VAR_DECL)
16746           && TREE_PUBLIC (decl)
16747           && !DECL_ABSTRACT (decl)
16748           && !(TREE_CODE (decl) == VAR_DECL && DECL_REGISTER (decl))
16749           && !is_fortran ())
16750         {
16751           /* Defer until we have an assembler name set.  */
16752           if (!DECL_ASSEMBLER_NAME_SET_P (decl))
16753             {
16754               limbo_die_node *asm_name;
16755
16756               asm_name = GGC_CNEW (limbo_die_node);
16757               asm_name->die = die;
16758               asm_name->created_for = decl;
16759               asm_name->next = deferred_asm_name;
16760               deferred_asm_name = asm_name;
16761             }
16762           else if (DECL_ASSEMBLER_NAME (decl) != DECL_NAME (decl))
16763             add_AT_string (die, DW_AT_MIPS_linkage_name,
16764                            IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl)));
16765         }
16766     }
16767
16768 #ifdef VMS_DEBUGGING_INFO
16769   /* Get the function's name, as described by its RTL.  This may be different
16770      from the DECL_NAME name used in the source file.  */
16771   if (TREE_CODE (decl) == FUNCTION_DECL && TREE_ASM_WRITTEN (decl))
16772     {
16773       add_AT_addr (die, DW_AT_VMS_rtnbeg_pd_address,
16774                    XEXP (DECL_RTL (decl), 0));
16775       VEC_safe_push (rtx, gc, used_rtx_array, XEXP (DECL_RTL (decl), 0));
16776     }
16777 #endif
16778 }
16779
16780 /* Push a new declaration scope.  */
16781
16782 static void
16783 push_decl_scope (tree scope)
16784 {
16785   VEC_safe_push (tree, gc, decl_scope_table, scope);
16786 }
16787
16788 /* Pop a declaration scope.  */
16789
16790 static inline void
16791 pop_decl_scope (void)
16792 {
16793   VEC_pop (tree, decl_scope_table);
16794 }
16795
16796 /* Return the DIE for the scope that immediately contains this type.
16797    Non-named types get global scope.  Named types nested in other
16798    types get their containing scope if it's open, or global scope
16799    otherwise.  All other types (i.e. function-local named types) get
16800    the current active scope.  */
16801
16802 static dw_die_ref
16803 scope_die_for (tree t, dw_die_ref context_die)
16804 {
16805   dw_die_ref scope_die = NULL;
16806   tree containing_scope;
16807   int i;
16808
16809   /* Non-types always go in the current scope.  */
16810   gcc_assert (TYPE_P (t));
16811
16812   containing_scope = TYPE_CONTEXT (t);
16813
16814   /* Use the containing namespace if it was passed in (for a declaration).  */
16815   if (containing_scope && TREE_CODE (containing_scope) == NAMESPACE_DECL)
16816     {
16817       if (context_die == lookup_decl_die (containing_scope))
16818         /* OK */;
16819       else
16820         containing_scope = NULL_TREE;
16821     }
16822
16823   /* Ignore function type "scopes" from the C frontend.  They mean that
16824      a tagged type is local to a parmlist of a function declarator, but
16825      that isn't useful to DWARF.  */
16826   if (containing_scope && TREE_CODE (containing_scope) == FUNCTION_TYPE)
16827     containing_scope = NULL_TREE;
16828
16829   if (containing_scope == NULL_TREE)
16830     scope_die = comp_unit_die;
16831   else if (TYPE_P (containing_scope))
16832     {
16833       /* For types, we can just look up the appropriate DIE.  But
16834          first we check to see if we're in the middle of emitting it
16835          so we know where the new DIE should go.  */
16836       for (i = VEC_length (tree, decl_scope_table) - 1; i >= 0; --i)
16837         if (VEC_index (tree, decl_scope_table, i) == containing_scope)
16838           break;
16839
16840       if (i < 0)
16841         {
16842           gcc_assert (debug_info_level <= DINFO_LEVEL_TERSE
16843                       || TREE_ASM_WRITTEN (containing_scope));
16844
16845           /* If none of the current dies are suitable, we get file scope.  */
16846           scope_die = comp_unit_die;
16847         }
16848       else
16849         scope_die = lookup_type_die (containing_scope);
16850     }
16851   else
16852     scope_die = context_die;
16853
16854   return scope_die;
16855 }
16856
16857 /* Returns nonzero if CONTEXT_DIE is internal to a function.  */
16858
16859 static inline int
16860 local_scope_p (dw_die_ref context_die)
16861 {
16862   for (; context_die; context_die = context_die->die_parent)
16863     if (context_die->die_tag == DW_TAG_inlined_subroutine
16864         || context_die->die_tag == DW_TAG_subprogram)
16865       return 1;
16866
16867   return 0;
16868 }
16869
16870 /* Returns nonzero if CONTEXT_DIE is a class.  */
16871
16872 static inline int
16873 class_scope_p (dw_die_ref context_die)
16874 {
16875   return (context_die
16876           && (context_die->die_tag == DW_TAG_structure_type
16877               || context_die->die_tag == DW_TAG_class_type
16878               || context_die->die_tag == DW_TAG_interface_type
16879               || context_die->die_tag == DW_TAG_union_type));
16880 }
16881
16882 /* Returns nonzero if CONTEXT_DIE is a class or namespace, for deciding
16883    whether or not to treat a DIE in this context as a declaration.  */
16884
16885 static inline int
16886 class_or_namespace_scope_p (dw_die_ref context_die)
16887 {
16888   return (class_scope_p (context_die)
16889           || (context_die && context_die->die_tag == DW_TAG_namespace));
16890 }
16891
16892 /* Many forms of DIEs require a "type description" attribute.  This
16893    routine locates the proper "type descriptor" die for the type given
16894    by 'type', and adds a DW_AT_type attribute below the given die.  */
16895
16896 static void
16897 add_type_attribute (dw_die_ref object_die, tree type, int decl_const,
16898                     int decl_volatile, dw_die_ref context_die)
16899 {
16900   enum tree_code code  = TREE_CODE (type);
16901   dw_die_ref type_die  = NULL;
16902
16903   /* ??? If this type is an unnamed subrange type of an integral, floating-point
16904      or fixed-point type, use the inner type.  This is because we have no
16905      support for unnamed types in base_type_die.  This can happen if this is
16906      an Ada subrange type.  Correct solution is emit a subrange type die.  */
16907   if ((code == INTEGER_TYPE || code == REAL_TYPE || code == FIXED_POINT_TYPE)
16908       && TREE_TYPE (type) != 0 && TYPE_NAME (type) == 0)
16909     type = TREE_TYPE (type), code = TREE_CODE (type);
16910
16911   if (code == ERROR_MARK
16912       /* Handle a special case.  For functions whose return type is void, we
16913          generate *no* type attribute.  (Note that no object may have type
16914          `void', so this only applies to function return types).  */
16915       || code == VOID_TYPE)
16916     return;
16917
16918   type_die = modified_type_die (type,
16919                                 decl_const || TYPE_READONLY (type),
16920                                 decl_volatile || TYPE_VOLATILE (type),
16921                                 context_die);
16922
16923   if (type_die != NULL)
16924     add_AT_die_ref (object_die, DW_AT_type, type_die);
16925 }
16926
16927 /* Given an object die, add the calling convention attribute for the
16928    function call type.  */
16929 static void
16930 add_calling_convention_attribute (dw_die_ref subr_die, tree decl)
16931 {
16932   enum dwarf_calling_convention value = DW_CC_normal;
16933
16934   value = ((enum dwarf_calling_convention)
16935            targetm.dwarf_calling_convention (TREE_TYPE (decl)));
16936
16937   /* DWARF doesn't provide a way to identify a program's source-level
16938      entry point.  DW_AT_calling_convention attributes are only meant
16939      to describe functions' calling conventions.  However, lacking a
16940      better way to signal the Fortran main program, we use this for the
16941      time being, following existing custom.  */
16942   if (is_fortran ()
16943       && !strcmp (IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl)), "MAIN__"))
16944     value = DW_CC_program;
16945
16946   /* Only add the attribute if the backend requests it, and
16947      is not DW_CC_normal.  */
16948   if (value && (value != DW_CC_normal))
16949     add_AT_unsigned (subr_die, DW_AT_calling_convention, value);
16950 }
16951
16952 /* Given a tree pointer to a struct, class, union, or enum type node, return
16953    a pointer to the (string) tag name for the given type, or zero if the type
16954    was declared without a tag.  */
16955
16956 static const char *
16957 type_tag (const_tree type)
16958 {
16959   const char *name = 0;
16960
16961   if (TYPE_NAME (type) != 0)
16962     {
16963       tree t = 0;
16964
16965       /* Find the IDENTIFIER_NODE for the type name.  */
16966       if (TREE_CODE (TYPE_NAME (type)) == IDENTIFIER_NODE)
16967         t = TYPE_NAME (type);
16968
16969       /* The g++ front end makes the TYPE_NAME of *each* tagged type point to
16970          a TYPE_DECL node, regardless of whether or not a `typedef' was
16971          involved.  */
16972       else if (TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
16973                && ! DECL_IGNORED_P (TYPE_NAME (type)))
16974         {
16975           /* We want to be extra verbose.  Don't call dwarf_name if
16976              DECL_NAME isn't set.  The default hook for decl_printable_name
16977              doesn't like that, and in this context it's correct to return
16978              0, instead of "<anonymous>" or the like.  */
16979           if (DECL_NAME (TYPE_NAME (type)))
16980             name = lang_hooks.dwarf_name (TYPE_NAME (type), 2);
16981         }
16982
16983       /* Now get the name as a string, or invent one.  */
16984       if (!name && t != 0)
16985         name = IDENTIFIER_POINTER (t);
16986     }
16987
16988   return (name == 0 || *name == '\0') ? 0 : name;
16989 }
16990
16991 /* Return the type associated with a data member, make a special check
16992    for bit field types.  */
16993
16994 static inline tree
16995 member_declared_type (const_tree member)
16996 {
16997   return (DECL_BIT_FIELD_TYPE (member)
16998           ? DECL_BIT_FIELD_TYPE (member) : TREE_TYPE (member));
16999 }
17000
17001 /* Get the decl's label, as described by its RTL. This may be different
17002    from the DECL_NAME name used in the source file.  */
17003
17004 #if 0
17005 static const char *
17006 decl_start_label (tree decl)
17007 {
17008   rtx x;
17009   const char *fnname;
17010
17011   x = DECL_RTL (decl);
17012   gcc_assert (MEM_P (x));
17013
17014   x = XEXP (x, 0);
17015   gcc_assert (GET_CODE (x) == SYMBOL_REF);
17016
17017   fnname = XSTR (x, 0);
17018   return fnname;
17019 }
17020 #endif
17021 \f
17022 /* These routines generate the internal representation of the DIE's for
17023    the compilation unit.  Debugging information is collected by walking
17024    the declaration trees passed in from dwarf2out_decl().  */
17025
17026 static void
17027 gen_array_type_die (tree type, dw_die_ref context_die)
17028 {
17029   dw_die_ref scope_die = scope_die_for (type, context_die);
17030   dw_die_ref array_die;
17031
17032   /* GNU compilers represent multidimensional array types as sequences of one
17033      dimensional array types whose element types are themselves array types.
17034      We sometimes squish that down to a single array_type DIE with multiple
17035      subscripts in the Dwarf debugging info.  The draft Dwarf specification
17036      say that we are allowed to do this kind of compression in C, because
17037      there is no difference between an array of arrays and a multidimensional
17038      array.  We don't do this for Ada to remain as close as possible to the
17039      actual representation, which is especially important against the language
17040      flexibilty wrt arrays of variable size.  */
17041
17042   bool collapse_nested_arrays = !is_ada ();
17043   tree element_type;
17044
17045   /* Emit DW_TAG_string_type for Fortran character types (with kind 1 only, as
17046      DW_TAG_string_type doesn't have DW_AT_type attribute).  */
17047   if (TYPE_STRING_FLAG (type)
17048       && TREE_CODE (type) == ARRAY_TYPE
17049       && is_fortran ()
17050       && TYPE_MODE (TREE_TYPE (type)) == TYPE_MODE (char_type_node))
17051     {
17052       HOST_WIDE_INT size;
17053
17054       array_die = new_die (DW_TAG_string_type, scope_die, type);
17055       add_name_attribute (array_die, type_tag (type));
17056       equate_type_number_to_die (type, array_die);
17057       size = int_size_in_bytes (type);
17058       if (size >= 0)
17059         add_AT_unsigned (array_die, DW_AT_byte_size, size);
17060       else if (TYPE_DOMAIN (type) != NULL_TREE
17061                && TYPE_MAX_VALUE (TYPE_DOMAIN (type)) != NULL_TREE
17062                && DECL_P (TYPE_MAX_VALUE (TYPE_DOMAIN (type))))
17063         {
17064           tree szdecl = TYPE_MAX_VALUE (TYPE_DOMAIN (type));
17065           dw_loc_list_ref loc = loc_list_from_tree (szdecl, 2);
17066
17067           size = int_size_in_bytes (TREE_TYPE (szdecl));
17068           if (loc && size > 0)
17069             {
17070               add_AT_location_description (array_die, DW_AT_string_length, loc);
17071               if (size != DWARF2_ADDR_SIZE)
17072                 add_AT_unsigned (array_die, DW_AT_byte_size, size);
17073             }
17074         }
17075       return;
17076     }
17077
17078   /* ??? The SGI dwarf reader fails for array of array of enum types
17079      (e.g. const enum machine_mode insn_operand_mode[2][10]) unless the inner
17080      array type comes before the outer array type.  We thus call gen_type_die
17081      before we new_die and must prevent nested array types collapsing for this
17082      target.  */
17083
17084 #ifdef MIPS_DEBUGGING_INFO
17085   gen_type_die (TREE_TYPE (type), context_die);
17086   collapse_nested_arrays = false;
17087 #endif
17088
17089   array_die = new_die (DW_TAG_array_type, scope_die, type);
17090   add_name_attribute (array_die, type_tag (type));
17091   equate_type_number_to_die (type, array_die);
17092
17093   if (TREE_CODE (type) == VECTOR_TYPE)
17094     {
17095       /* The frontend feeds us a representation for the vector as a struct
17096          containing an array.  Pull out the array type.  */
17097       type = TREE_TYPE (TYPE_FIELDS (TYPE_DEBUG_REPRESENTATION_TYPE (type)));
17098       add_AT_flag (array_die, DW_AT_GNU_vector, 1);
17099     }
17100
17101   /* For Fortran multidimensional arrays use DW_ORD_col_major ordering.  */
17102   if (is_fortran ()
17103       && TREE_CODE (type) == ARRAY_TYPE
17104       && TREE_CODE (TREE_TYPE (type)) == ARRAY_TYPE
17105       && !TYPE_STRING_FLAG (TREE_TYPE (type)))
17106     add_AT_unsigned (array_die, DW_AT_ordering, DW_ORD_col_major);
17107
17108 #if 0
17109   /* We default the array ordering.  SDB will probably do
17110      the right things even if DW_AT_ordering is not present.  It's not even
17111      an issue until we start to get into multidimensional arrays anyway.  If
17112      SDB is ever caught doing the Wrong Thing for multi-dimensional arrays,
17113      then we'll have to put the DW_AT_ordering attribute back in.  (But if
17114      and when we find out that we need to put these in, we will only do so
17115      for multidimensional arrays.  */
17116   add_AT_unsigned (array_die, DW_AT_ordering, DW_ORD_row_major);
17117 #endif
17118
17119 #ifdef MIPS_DEBUGGING_INFO
17120   /* The SGI compilers handle arrays of unknown bound by setting
17121      AT_declaration and not emitting any subrange DIEs.  */
17122   if (! TYPE_DOMAIN (type))
17123     add_AT_flag (array_die, DW_AT_declaration, 1);
17124   else
17125 #endif
17126     add_subscript_info (array_die, type, collapse_nested_arrays);
17127
17128   /* Add representation of the type of the elements of this array type and
17129      emit the corresponding DIE if we haven't done it already.  */
17130   element_type = TREE_TYPE (type);
17131   if (collapse_nested_arrays)
17132     while (TREE_CODE (element_type) == ARRAY_TYPE)
17133       {
17134         if (TYPE_STRING_FLAG (element_type) && is_fortran ())
17135           break;
17136         element_type = TREE_TYPE (element_type);
17137       }
17138
17139 #ifndef MIPS_DEBUGGING_INFO
17140   gen_type_die (element_type, context_die);
17141 #endif
17142
17143   add_type_attribute (array_die, element_type, 0, 0, context_die);
17144
17145   if (get_AT (array_die, DW_AT_name))
17146     add_pubtype (type, array_die);
17147 }
17148
17149 static dw_loc_descr_ref
17150 descr_info_loc (tree val, tree base_decl)
17151 {
17152   HOST_WIDE_INT size;
17153   dw_loc_descr_ref loc, loc2;
17154   enum dwarf_location_atom op;
17155
17156   if (val == base_decl)
17157     return new_loc_descr (DW_OP_push_object_address, 0, 0);
17158
17159   switch (TREE_CODE (val))
17160     {
17161     CASE_CONVERT:
17162       return descr_info_loc (TREE_OPERAND (val, 0), base_decl);
17163     case VAR_DECL:
17164       return loc_descriptor_from_tree (val, 0);
17165     case INTEGER_CST:
17166       if (host_integerp (val, 0))
17167         return int_loc_descriptor (tree_low_cst (val, 0));
17168       break;
17169     case INDIRECT_REF:
17170       size = int_size_in_bytes (TREE_TYPE (val));
17171       if (size < 0)
17172         break;
17173       loc = descr_info_loc (TREE_OPERAND (val, 0), base_decl);
17174       if (!loc)
17175         break;
17176       if (size == DWARF2_ADDR_SIZE)
17177         add_loc_descr (&loc, new_loc_descr (DW_OP_deref, 0, 0));
17178       else
17179         add_loc_descr (&loc, new_loc_descr (DW_OP_deref_size, size, 0));
17180       return loc;
17181     case POINTER_PLUS_EXPR:
17182     case PLUS_EXPR:
17183       if (host_integerp (TREE_OPERAND (val, 1), 1)
17184           && (unsigned HOST_WIDE_INT) tree_low_cst (TREE_OPERAND (val, 1), 1)
17185              < 16384)
17186         {
17187           loc = descr_info_loc (TREE_OPERAND (val, 0), base_decl);
17188           if (!loc)
17189             break;
17190           loc_descr_plus_const (&loc, tree_low_cst (TREE_OPERAND (val, 1), 0));
17191         }
17192       else
17193         {
17194           op = DW_OP_plus;
17195         do_binop:
17196           loc = descr_info_loc (TREE_OPERAND (val, 0), base_decl);
17197           if (!loc)
17198             break;
17199           loc2 = descr_info_loc (TREE_OPERAND (val, 1), base_decl);
17200           if (!loc2)
17201             break;
17202           add_loc_descr (&loc, loc2);
17203           add_loc_descr (&loc2, new_loc_descr (op, 0, 0));
17204         }
17205       return loc;
17206     case MINUS_EXPR:
17207       op = DW_OP_minus;
17208       goto do_binop;
17209     case MULT_EXPR:
17210       op = DW_OP_mul;
17211       goto do_binop;
17212     case EQ_EXPR:
17213       op = DW_OP_eq;
17214       goto do_binop;
17215     case NE_EXPR:
17216       op = DW_OP_ne;
17217       goto do_binop;
17218     default:
17219       break;
17220     }
17221   return NULL;
17222 }
17223
17224 static void
17225 add_descr_info_field (dw_die_ref die, enum dwarf_attribute attr,
17226                       tree val, tree base_decl)
17227 {
17228   dw_loc_descr_ref loc;
17229
17230   if (host_integerp (val, 0))
17231     {
17232       add_AT_unsigned (die, attr, tree_low_cst (val, 0));
17233       return;
17234     }
17235
17236   loc = descr_info_loc (val, base_decl);
17237   if (!loc)
17238     return;
17239
17240   add_AT_loc (die, attr, loc);
17241 }
17242
17243 /* This routine generates DIE for array with hidden descriptor, details
17244    are filled into *info by a langhook.  */
17245
17246 static void
17247 gen_descr_array_type_die (tree type, struct array_descr_info *info,
17248                           dw_die_ref context_die)
17249 {
17250   dw_die_ref scope_die = scope_die_for (type, context_die);
17251   dw_die_ref array_die;
17252   int dim;
17253
17254   array_die = new_die (DW_TAG_array_type, scope_die, type);
17255   add_name_attribute (array_die, type_tag (type));
17256   equate_type_number_to_die (type, array_die);
17257
17258   /* For Fortran multidimensional arrays use DW_ORD_col_major ordering.  */
17259   if (is_fortran ()
17260       && info->ndimensions >= 2)
17261     add_AT_unsigned (array_die, DW_AT_ordering, DW_ORD_col_major);
17262
17263   if (info->data_location)
17264     add_descr_info_field (array_die, DW_AT_data_location, info->data_location,
17265                           info->base_decl);
17266   if (info->associated)
17267     add_descr_info_field (array_die, DW_AT_associated, info->associated,
17268                           info->base_decl);
17269   if (info->allocated)
17270     add_descr_info_field (array_die, DW_AT_allocated, info->allocated,
17271                           info->base_decl);
17272
17273   for (dim = 0; dim < info->ndimensions; dim++)
17274     {
17275       dw_die_ref subrange_die
17276         = new_die (DW_TAG_subrange_type, array_die, NULL);
17277
17278       if (info->dimen[dim].lower_bound)
17279         {
17280           /* If it is the default value, omit it.  */
17281           int dflt;
17282
17283           if (host_integerp (info->dimen[dim].lower_bound, 0)
17284               && (dflt = lower_bound_default ()) != -1
17285               && tree_low_cst (info->dimen[dim].lower_bound, 0) == dflt)
17286             ;
17287           else
17288             add_descr_info_field (subrange_die, DW_AT_lower_bound,
17289                                   info->dimen[dim].lower_bound,
17290                                   info->base_decl);
17291         }
17292       if (info->dimen[dim].upper_bound)
17293         add_descr_info_field (subrange_die, DW_AT_upper_bound,
17294                               info->dimen[dim].upper_bound,
17295                               info->base_decl);
17296       if (info->dimen[dim].stride)
17297         add_descr_info_field (subrange_die, DW_AT_byte_stride,
17298                               info->dimen[dim].stride,
17299                               info->base_decl);
17300     }
17301
17302   gen_type_die (info->element_type, context_die);
17303   add_type_attribute (array_die, info->element_type, 0, 0, context_die);
17304
17305   if (get_AT (array_die, DW_AT_name))
17306     add_pubtype (type, array_die);
17307 }
17308
17309 #if 0
17310 static void
17311 gen_entry_point_die (tree decl, dw_die_ref context_die)
17312 {
17313   tree origin = decl_ultimate_origin (decl);
17314   dw_die_ref decl_die = new_die (DW_TAG_entry_point, context_die, decl);
17315
17316   if (origin != NULL)
17317     add_abstract_origin_attribute (decl_die, origin);
17318   else
17319     {
17320       add_name_and_src_coords_attributes (decl_die, decl);
17321       add_type_attribute (decl_die, TREE_TYPE (TREE_TYPE (decl)),
17322                           0, 0, context_die);
17323     }
17324
17325   if (DECL_ABSTRACT (decl))
17326     equate_decl_number_to_die (decl, decl_die);
17327   else
17328     add_AT_lbl_id (decl_die, DW_AT_low_pc, decl_start_label (decl));
17329 }
17330 #endif
17331
17332 /* Walk through the list of incomplete types again, trying once more to
17333    emit full debugging info for them.  */
17334
17335 static void
17336 retry_incomplete_types (void)
17337 {
17338   int i;
17339
17340   for (i = VEC_length (tree, incomplete_types) - 1; i >= 0; i--)
17341     if (should_emit_struct_debug (VEC_index (tree, incomplete_types, i),
17342                                   DINFO_USAGE_DIR_USE))
17343       gen_type_die (VEC_index (tree, incomplete_types, i), comp_unit_die);
17344 }
17345
17346 /* Determine what tag to use for a record type.  */
17347
17348 static enum dwarf_tag
17349 record_type_tag (tree type)
17350 {
17351   if (! lang_hooks.types.classify_record)
17352     return DW_TAG_structure_type;
17353
17354   switch (lang_hooks.types.classify_record (type))
17355     {
17356     case RECORD_IS_STRUCT:
17357       return DW_TAG_structure_type;
17358
17359     case RECORD_IS_CLASS:
17360       return DW_TAG_class_type;
17361
17362     case RECORD_IS_INTERFACE:
17363       if (dwarf_version >= 3 || !dwarf_strict)
17364         return DW_TAG_interface_type;
17365       return DW_TAG_structure_type;
17366
17367     default:
17368       gcc_unreachable ();
17369     }
17370 }
17371
17372 /* Generate a DIE to represent an enumeration type.  Note that these DIEs
17373    include all of the information about the enumeration values also. Each
17374    enumerated type name/value is listed as a child of the enumerated type
17375    DIE.  */
17376
17377 static dw_die_ref
17378 gen_enumeration_type_die (tree type, dw_die_ref context_die)
17379 {
17380   dw_die_ref type_die = lookup_type_die (type);
17381
17382   if (type_die == NULL)
17383     {
17384       type_die = new_die (DW_TAG_enumeration_type,
17385                           scope_die_for (type, context_die), type);
17386       equate_type_number_to_die (type, type_die);
17387       add_name_attribute (type_die, type_tag (type));
17388       if ((dwarf_version >= 4 || !dwarf_strict)
17389           && ENUM_IS_SCOPED (type))
17390         add_AT_flag (type_die, DW_AT_enum_class, 1);
17391     }
17392   else if (! TYPE_SIZE (type))
17393     return type_die;
17394   else
17395     remove_AT (type_die, DW_AT_declaration);
17396
17397   /* Handle a GNU C/C++ extension, i.e. incomplete enum types.  If the
17398      given enum type is incomplete, do not generate the DW_AT_byte_size
17399      attribute or the DW_AT_element_list attribute.  */
17400   if (TYPE_SIZE (type))
17401     {
17402       tree link;
17403
17404       TREE_ASM_WRITTEN (type) = 1;
17405       add_byte_size_attribute (type_die, type);
17406       if (TYPE_STUB_DECL (type) != NULL_TREE)
17407         add_src_coords_attributes (type_die, TYPE_STUB_DECL (type));
17408
17409       /* If the first reference to this type was as the return type of an
17410          inline function, then it may not have a parent.  Fix this now.  */
17411       if (type_die->die_parent == NULL)
17412         add_child_die (scope_die_for (type, context_die), type_die);
17413
17414       for (link = TYPE_VALUES (type);
17415            link != NULL; link = TREE_CHAIN (link))
17416         {
17417           dw_die_ref enum_die = new_die (DW_TAG_enumerator, type_die, link);
17418           tree value = TREE_VALUE (link);
17419
17420           add_name_attribute (enum_die,
17421                               IDENTIFIER_POINTER (TREE_PURPOSE (link)));
17422
17423           if (TREE_CODE (value) == CONST_DECL)
17424             value = DECL_INITIAL (value);
17425
17426           if (host_integerp (value, TYPE_UNSIGNED (TREE_TYPE (value))))
17427             /* DWARF2 does not provide a way of indicating whether or
17428                not enumeration constants are signed or unsigned.  GDB
17429                always assumes the values are signed, so we output all
17430                values as if they were signed.  That means that
17431                enumeration constants with very large unsigned values
17432                will appear to have negative values in the debugger.  */
17433             add_AT_int (enum_die, DW_AT_const_value,
17434                         tree_low_cst (value, tree_int_cst_sgn (value) > 0));
17435         }
17436     }
17437   else
17438     add_AT_flag (type_die, DW_AT_declaration, 1);
17439
17440   if (get_AT (type_die, DW_AT_name))
17441     add_pubtype (type, type_die);
17442
17443   return type_die;
17444 }
17445
17446 /* Generate a DIE to represent either a real live formal parameter decl or to
17447    represent just the type of some formal parameter position in some function
17448    type.
17449
17450    Note that this routine is a bit unusual because its argument may be a
17451    ..._DECL node (i.e. either a PARM_DECL or perhaps a VAR_DECL which
17452    represents an inlining of some PARM_DECL) or else some sort of a ..._TYPE
17453    node.  If it's the former then this function is being called to output a
17454    DIE to represent a formal parameter object (or some inlining thereof).  If
17455    it's the latter, then this function is only being called to output a
17456    DW_TAG_formal_parameter DIE to stand as a placeholder for some formal
17457    argument type of some subprogram type.
17458    If EMIT_NAME_P is true, name and source coordinate attributes
17459    are emitted.  */
17460
17461 static dw_die_ref
17462 gen_formal_parameter_die (tree node, tree origin, bool emit_name_p,
17463                           dw_die_ref context_die)
17464 {
17465   tree node_or_origin = node ? node : origin;
17466   tree ultimate_origin;
17467   dw_die_ref parm_die
17468     = new_die (DW_TAG_formal_parameter, context_die, node);
17469
17470   switch (TREE_CODE_CLASS (TREE_CODE (node_or_origin)))
17471     {
17472     case tcc_declaration:
17473       ultimate_origin = decl_ultimate_origin (node_or_origin);
17474       if (node || ultimate_origin)
17475         origin = ultimate_origin;
17476       if (origin != NULL)
17477         add_abstract_origin_attribute (parm_die, origin);
17478       else
17479         {
17480           tree type = TREE_TYPE (node);
17481           if (emit_name_p)
17482             add_name_and_src_coords_attributes (parm_die, node);
17483           if (decl_by_reference_p (node))
17484             add_type_attribute (parm_die, TREE_TYPE (type), 0, 0,
17485                                 context_die);
17486           else
17487             add_type_attribute (parm_die, type,
17488                                 TREE_READONLY (node),
17489                                 TREE_THIS_VOLATILE (node),
17490                                 context_die);
17491           if (DECL_ARTIFICIAL (node))
17492             add_AT_flag (parm_die, DW_AT_artificial, 1);
17493         }
17494
17495       if (node && node != origin)
17496         equate_decl_number_to_die (node, parm_die);
17497       if (! DECL_ABSTRACT (node_or_origin))
17498         add_location_or_const_value_attribute (parm_die, node_or_origin,
17499                                                DW_AT_location);
17500
17501       break;
17502
17503     case tcc_type:
17504       /* We were called with some kind of a ..._TYPE node.  */
17505       add_type_attribute (parm_die, node_or_origin, 0, 0, context_die);
17506       break;
17507
17508     default:
17509       gcc_unreachable ();
17510     }
17511
17512   return parm_die;
17513 }
17514
17515 /* Generate and return a DW_TAG_GNU_formal_parameter_pack. Also generate
17516    children DW_TAG_formal_parameter DIEs representing the arguments of the
17517    parameter pack.
17518
17519    PARM_PACK must be a function parameter pack.
17520    PACK_ARG is the first argument of the parameter pack. Its TREE_CHAIN
17521    must point to the subsequent arguments of the function PACK_ARG belongs to.
17522    SUBR_DIE is the DIE of the function PACK_ARG belongs to.
17523    If NEXT_ARG is non NULL, *NEXT_ARG is set to the function argument
17524    following the last one for which a DIE was generated.  */
17525
17526 static dw_die_ref
17527 gen_formal_parameter_pack_die  (tree parm_pack,
17528                                 tree pack_arg,
17529                                 dw_die_ref subr_die,
17530                                 tree *next_arg)
17531 {
17532   tree arg;
17533   dw_die_ref parm_pack_die;
17534
17535   gcc_assert (parm_pack
17536               && lang_hooks.function_parameter_pack_p (parm_pack)
17537               && subr_die);
17538
17539   parm_pack_die = new_die (DW_TAG_GNU_formal_parameter_pack, subr_die, parm_pack);
17540   add_src_coords_attributes (parm_pack_die, parm_pack);
17541
17542   for (arg = pack_arg; arg; arg = TREE_CHAIN (arg))
17543     {
17544       if (! lang_hooks.decls.function_parm_expanded_from_pack_p (arg,
17545                                                                  parm_pack))
17546         break;
17547       gen_formal_parameter_die (arg, NULL,
17548                                 false /* Don't emit name attribute.  */,
17549                                 parm_pack_die);
17550     }
17551   if (next_arg)
17552     *next_arg = arg;
17553   return parm_pack_die;
17554 }
17555
17556 /* Generate a special type of DIE used as a stand-in for a trailing ellipsis
17557    at the end of an (ANSI prototyped) formal parameters list.  */
17558
17559 static void
17560 gen_unspecified_parameters_die (tree decl_or_type, dw_die_ref context_die)
17561 {
17562   new_die (DW_TAG_unspecified_parameters, context_die, decl_or_type);
17563 }
17564
17565 /* Generate a list of nameless DW_TAG_formal_parameter DIEs (and perhaps a
17566    DW_TAG_unspecified_parameters DIE) to represent the types of the formal
17567    parameters as specified in some function type specification (except for
17568    those which appear as part of a function *definition*).  */
17569
17570 static void
17571 gen_formal_types_die (tree function_or_method_type, dw_die_ref context_die)
17572 {
17573   tree link;
17574   tree formal_type = NULL;
17575   tree first_parm_type;
17576   tree arg;
17577
17578   if (TREE_CODE (function_or_method_type) == FUNCTION_DECL)
17579     {
17580       arg = DECL_ARGUMENTS (function_or_method_type);
17581       function_or_method_type = TREE_TYPE (function_or_method_type);
17582     }
17583   else
17584     arg = NULL_TREE;
17585
17586   first_parm_type = TYPE_ARG_TYPES (function_or_method_type);
17587
17588   /* Make our first pass over the list of formal parameter types and output a
17589      DW_TAG_formal_parameter DIE for each one.  */
17590   for (link = first_parm_type; link; )
17591     {
17592       dw_die_ref parm_die;
17593
17594       formal_type = TREE_VALUE (link);
17595       if (formal_type == void_type_node)
17596         break;
17597
17598       /* Output a (nameless) DIE to represent the formal parameter itself.  */
17599       parm_die = gen_formal_parameter_die (formal_type, NULL,
17600                                            true /* Emit name attribute.  */,
17601                                            context_die);
17602       if ((TREE_CODE (function_or_method_type) == METHOD_TYPE
17603            && link == first_parm_type)
17604           || (arg && DECL_ARTIFICIAL (arg)))
17605         add_AT_flag (parm_die, DW_AT_artificial, 1);
17606
17607       link = TREE_CHAIN (link);
17608       if (arg)
17609         arg = TREE_CHAIN (arg);
17610     }
17611
17612   /* If this function type has an ellipsis, add a
17613      DW_TAG_unspecified_parameters DIE to the end of the parameter list.  */
17614   if (formal_type != void_type_node)
17615     gen_unspecified_parameters_die (function_or_method_type, context_die);
17616
17617   /* Make our second (and final) pass over the list of formal parameter types
17618      and output DIEs to represent those types (as necessary).  */
17619   for (link = TYPE_ARG_TYPES (function_or_method_type);
17620        link && TREE_VALUE (link);
17621        link = TREE_CHAIN (link))
17622     gen_type_die (TREE_VALUE (link), context_die);
17623 }
17624
17625 /* We want to generate the DIE for TYPE so that we can generate the
17626    die for MEMBER, which has been defined; we will need to refer back
17627    to the member declaration nested within TYPE.  If we're trying to
17628    generate minimal debug info for TYPE, processing TYPE won't do the
17629    trick; we need to attach the member declaration by hand.  */
17630
17631 static void
17632 gen_type_die_for_member (tree type, tree member, dw_die_ref context_die)
17633 {
17634   gen_type_die (type, context_die);
17635
17636   /* If we're trying to avoid duplicate debug info, we may not have
17637      emitted the member decl for this function.  Emit it now.  */
17638   if (TYPE_STUB_DECL (type)
17639       && TYPE_DECL_SUPPRESS_DEBUG (TYPE_STUB_DECL (type))
17640       && ! lookup_decl_die (member))
17641     {
17642       dw_die_ref type_die;
17643       gcc_assert (!decl_ultimate_origin (member));
17644
17645       push_decl_scope (type);
17646       type_die = lookup_type_die (type);
17647       if (TREE_CODE (member) == FUNCTION_DECL)
17648         gen_subprogram_die (member, type_die);
17649       else if (TREE_CODE (member) == FIELD_DECL)
17650         {
17651           /* Ignore the nameless fields that are used to skip bits but handle
17652              C++ anonymous unions and structs.  */
17653           if (DECL_NAME (member) != NULL_TREE
17654               || TREE_CODE (TREE_TYPE (member)) == UNION_TYPE
17655               || TREE_CODE (TREE_TYPE (member)) == RECORD_TYPE)
17656             {
17657               gen_type_die (member_declared_type (member), type_die);
17658               gen_field_die (member, type_die);
17659             }
17660         }
17661       else
17662         gen_variable_die (member, NULL_TREE, type_die);
17663
17664       pop_decl_scope ();
17665     }
17666 }
17667
17668 /* Generate the DWARF2 info for the "abstract" instance of a function which we
17669    may later generate inlined and/or out-of-line instances of.  */
17670
17671 static void
17672 dwarf2out_abstract_function (tree decl)
17673 {
17674   dw_die_ref old_die;
17675   tree save_fn;
17676   tree context;
17677   int was_abstract;
17678   htab_t old_decl_loc_table;
17679
17680   /* Make sure we have the actual abstract inline, not a clone.  */
17681   decl = DECL_ORIGIN (decl);
17682
17683   old_die = lookup_decl_die (decl);
17684   if (old_die && get_AT (old_die, DW_AT_inline))
17685     /* We've already generated the abstract instance.  */
17686     return;
17687
17688   /* We can be called while recursively when seeing block defining inlined subroutine
17689      DIE.  Be sure to not clobber the outer location table nor use it or we would
17690      get locations in abstract instantces.  */
17691   old_decl_loc_table = decl_loc_table;
17692   decl_loc_table = NULL;
17693
17694   /* Be sure we've emitted the in-class declaration DIE (if any) first, so
17695      we don't get confused by DECL_ABSTRACT.  */
17696   if (debug_info_level > DINFO_LEVEL_TERSE)
17697     {
17698       context = decl_class_context (decl);
17699       if (context)
17700         gen_type_die_for_member
17701           (context, decl, decl_function_context (decl) ? NULL : comp_unit_die);
17702     }
17703
17704   /* Pretend we've just finished compiling this function.  */
17705   save_fn = current_function_decl;
17706   current_function_decl = decl;
17707   push_cfun (DECL_STRUCT_FUNCTION (decl));
17708
17709   was_abstract = DECL_ABSTRACT (decl);
17710   set_decl_abstract_flags (decl, 1);
17711   dwarf2out_decl (decl);
17712   if (! was_abstract)
17713     set_decl_abstract_flags (decl, 0);
17714
17715   current_function_decl = save_fn;
17716   decl_loc_table = old_decl_loc_table;
17717   pop_cfun ();
17718 }
17719
17720 /* Helper function of premark_used_types() which gets called through
17721    htab_traverse.
17722
17723    Marks the DIE of a given type in *SLOT as perennial, so it never gets
17724    marked as unused by prune_unused_types.  */
17725
17726 static int
17727 premark_used_types_helper (void **slot, void *data ATTRIBUTE_UNUSED)
17728 {
17729   tree type;
17730   dw_die_ref die;
17731
17732   type = (tree) *slot;
17733   die = lookup_type_die (type);
17734   if (die != NULL)
17735     die->die_perennial_p = 1;
17736   return 1;
17737 }
17738
17739 /* Helper function of premark_types_used_by_global_vars which gets called
17740    through htab_traverse.
17741
17742    Marks the DIE of a given type in *SLOT as perennial, so it never gets
17743    marked as unused by prune_unused_types. The DIE of the type is marked
17744    only if the global variable using the type will actually be emitted.  */
17745
17746 static int
17747 premark_types_used_by_global_vars_helper (void **slot,
17748                                           void *data ATTRIBUTE_UNUSED)
17749 {
17750   struct types_used_by_vars_entry *entry;
17751   dw_die_ref die;
17752
17753   entry = (struct types_used_by_vars_entry *) *slot;
17754   gcc_assert (entry->type != NULL
17755               && entry->var_decl != NULL);
17756   die = lookup_type_die (entry->type);
17757   if (die)
17758     {
17759       /* Ask cgraph if the global variable really is to be emitted.
17760          If yes, then we'll keep the DIE of ENTRY->TYPE.  */
17761       struct varpool_node *node = varpool_node (entry->var_decl);
17762       if (node->needed)
17763         {
17764           die->die_perennial_p = 1;
17765           /* Keep the parent DIEs as well.  */
17766           while ((die = die->die_parent) && die->die_perennial_p == 0)
17767             die->die_perennial_p = 1;
17768         }
17769     }
17770   return 1;
17771 }
17772
17773 /* Mark all members of used_types_hash as perennial.  */
17774
17775 static void
17776 premark_used_types (void)
17777 {
17778   if (cfun && cfun->used_types_hash)
17779     htab_traverse (cfun->used_types_hash, premark_used_types_helper, NULL);
17780 }
17781
17782 /* Mark all members of types_used_by_vars_entry as perennial.  */
17783
17784 static void
17785 premark_types_used_by_global_vars (void)
17786 {
17787   if (types_used_by_vars_hash)
17788     htab_traverse (types_used_by_vars_hash,
17789                    premark_types_used_by_global_vars_helper, NULL);
17790 }
17791
17792 /* Generate a DIE to represent a declared function (either file-scope or
17793    block-local).  */
17794
17795 static void
17796 gen_subprogram_die (tree decl, dw_die_ref context_die)
17797 {
17798   char label_id[MAX_ARTIFICIAL_LABEL_BYTES];
17799   tree origin = decl_ultimate_origin (decl);
17800   dw_die_ref subr_die;
17801   tree fn_arg_types;
17802   tree outer_scope;
17803   dw_die_ref old_die = lookup_decl_die (decl);
17804   int declaration = (current_function_decl != decl
17805                      || class_or_namespace_scope_p (context_die));
17806
17807   premark_used_types ();
17808
17809   /* It is possible to have both DECL_ABSTRACT and DECLARATION be true if we
17810      started to generate the abstract instance of an inline, decided to output
17811      its containing class, and proceeded to emit the declaration of the inline
17812      from the member list for the class.  If so, DECLARATION takes priority;
17813      we'll get back to the abstract instance when done with the class.  */
17814
17815   /* The class-scope declaration DIE must be the primary DIE.  */
17816   if (origin && declaration && class_or_namespace_scope_p (context_die))
17817     {
17818       origin = NULL;
17819       gcc_assert (!old_die);
17820     }
17821
17822   /* Now that the C++ front end lazily declares artificial member fns, we
17823      might need to retrofit the declaration into its class.  */
17824   if (!declaration && !origin && !old_die
17825       && DECL_CONTEXT (decl) && TYPE_P (DECL_CONTEXT (decl))
17826       && !class_or_namespace_scope_p (context_die)
17827       && debug_info_level > DINFO_LEVEL_TERSE)
17828     old_die = force_decl_die (decl);
17829
17830   if (origin != NULL)
17831     {
17832       gcc_assert (!declaration || local_scope_p (context_die));
17833
17834       /* Fixup die_parent for the abstract instance of a nested
17835          inline function.  */
17836       if (old_die && old_die->die_parent == NULL)
17837         add_child_die (context_die, old_die);
17838
17839       subr_die = new_die (DW_TAG_subprogram, context_die, decl);
17840       add_abstract_origin_attribute (subr_die, origin);
17841     }
17842   else if (old_die)
17843     {
17844       expanded_location s = expand_location (DECL_SOURCE_LOCATION (decl));
17845       struct dwarf_file_data * file_index = lookup_filename (s.file);
17846
17847       if (!get_AT_flag (old_die, DW_AT_declaration)
17848           /* We can have a normal definition following an inline one in the
17849              case of redefinition of GNU C extern inlines.
17850              It seems reasonable to use AT_specification in this case.  */
17851           && !get_AT (old_die, DW_AT_inline))
17852         {
17853           /* Detect and ignore this case, where we are trying to output
17854              something we have already output.  */
17855           return;
17856         }
17857
17858       /* If the definition comes from the same place as the declaration,
17859          maybe use the old DIE.  We always want the DIE for this function
17860          that has the *_pc attributes to be under comp_unit_die so the
17861          debugger can find it.  We also need to do this for abstract
17862          instances of inlines, since the spec requires the out-of-line copy
17863          to have the same parent.  For local class methods, this doesn't
17864          apply; we just use the old DIE.  */
17865       if ((old_die->die_parent == comp_unit_die || context_die == NULL)
17866           && (DECL_ARTIFICIAL (decl)
17867               || (get_AT_file (old_die, DW_AT_decl_file) == file_index
17868                   && (get_AT_unsigned (old_die, DW_AT_decl_line)
17869                       == (unsigned) s.line))))
17870         {
17871           subr_die = old_die;
17872
17873           /* Clear out the declaration attribute and the formal parameters.
17874              Do not remove all children, because it is possible that this
17875              declaration die was forced using force_decl_die(). In such
17876              cases die that forced declaration die (e.g. TAG_imported_module)
17877              is one of the children that we do not want to remove.  */
17878           remove_AT (subr_die, DW_AT_declaration);
17879           remove_child_TAG (subr_die, DW_TAG_formal_parameter);
17880         }
17881       else
17882         {
17883           subr_die = new_die (DW_TAG_subprogram, context_die, decl);
17884           add_AT_specification (subr_die, old_die);
17885           if (get_AT_file (old_die, DW_AT_decl_file) != file_index)
17886             add_AT_file (subr_die, DW_AT_decl_file, file_index);
17887           if (get_AT_unsigned (old_die, DW_AT_decl_line) != (unsigned) s.line)
17888             add_AT_unsigned (subr_die, DW_AT_decl_line, s.line);
17889         }
17890     }
17891   else
17892     {
17893       subr_die = new_die (DW_TAG_subprogram, context_die, decl);
17894
17895       if (TREE_PUBLIC (decl))
17896         add_AT_flag (subr_die, DW_AT_external, 1);
17897
17898       add_name_and_src_coords_attributes (subr_die, decl);
17899       if (debug_info_level > DINFO_LEVEL_TERSE)
17900         {
17901           add_prototyped_attribute (subr_die, TREE_TYPE (decl));
17902           add_type_attribute (subr_die, TREE_TYPE (TREE_TYPE (decl)),
17903                               0, 0, context_die);
17904         }
17905
17906       add_pure_or_virtual_attribute (subr_die, decl);
17907       if (DECL_ARTIFICIAL (decl))
17908         add_AT_flag (subr_die, DW_AT_artificial, 1);
17909
17910       if (TREE_PROTECTED (decl))
17911         add_AT_unsigned (subr_die, DW_AT_accessibility, DW_ACCESS_protected);
17912       else if (TREE_PRIVATE (decl))
17913         add_AT_unsigned (subr_die, DW_AT_accessibility, DW_ACCESS_private);
17914     }
17915
17916   if (declaration)
17917     {
17918       if (!old_die || !get_AT (old_die, DW_AT_inline))
17919         {
17920           add_AT_flag (subr_die, DW_AT_declaration, 1);
17921
17922           /* If this is an explicit function declaration then generate
17923              a DW_AT_explicit attribute.  */
17924           if (lang_hooks.decls.function_decl_explicit_p (decl)
17925               && (dwarf_version >= 3 || !dwarf_strict))
17926             add_AT_flag (subr_die, DW_AT_explicit, 1);
17927
17928           /* The first time we see a member function, it is in the context of
17929              the class to which it belongs.  We make sure of this by emitting
17930              the class first.  The next time is the definition, which is
17931              handled above.  The two may come from the same source text.
17932
17933              Note that force_decl_die() forces function declaration die. It is
17934              later reused to represent definition.  */
17935           equate_decl_number_to_die (decl, subr_die);
17936         }
17937     }
17938   else if (DECL_ABSTRACT (decl))
17939     {
17940       if (DECL_DECLARED_INLINE_P (decl))
17941         {
17942           if (cgraph_function_possibly_inlined_p (decl))
17943             add_AT_unsigned (subr_die, DW_AT_inline, DW_INL_declared_inlined);
17944           else
17945             add_AT_unsigned (subr_die, DW_AT_inline, DW_INL_declared_not_inlined);
17946         }
17947       else
17948         {
17949           if (cgraph_function_possibly_inlined_p (decl))
17950             add_AT_unsigned (subr_die, DW_AT_inline, DW_INL_inlined);
17951           else
17952             add_AT_unsigned (subr_die, DW_AT_inline, DW_INL_not_inlined);
17953         }
17954
17955       if (DECL_DECLARED_INLINE_P (decl)
17956           && lookup_attribute ("artificial", DECL_ATTRIBUTES (decl)))
17957         add_AT_flag (subr_die, DW_AT_artificial, 1);
17958
17959       equate_decl_number_to_die (decl, subr_die);
17960     }
17961   else if (!DECL_EXTERNAL (decl))
17962     {
17963       HOST_WIDE_INT cfa_fb_offset;
17964
17965       if (!old_die || !get_AT (old_die, DW_AT_inline))
17966         equate_decl_number_to_die (decl, subr_die);
17967
17968       if (!flag_reorder_blocks_and_partition)
17969         {
17970           ASM_GENERATE_INTERNAL_LABEL (label_id, FUNC_BEGIN_LABEL,
17971                                        current_function_funcdef_no);
17972           add_AT_lbl_id (subr_die, DW_AT_low_pc, label_id);
17973           ASM_GENERATE_INTERNAL_LABEL (label_id, FUNC_END_LABEL,
17974                                        current_function_funcdef_no);
17975           add_AT_lbl_id (subr_die, DW_AT_high_pc, label_id);
17976
17977           add_pubname (decl, subr_die);
17978           add_arange (decl, subr_die);
17979         }
17980       else
17981         {  /* Do nothing for now; maybe need to duplicate die, one for
17982               hot section and one for cold section, then use the hot/cold
17983               section begin/end labels to generate the aranges...  */
17984           /*
17985             add_AT_lbl_id (subr_die, DW_AT_low_pc, hot_section_label);
17986             add_AT_lbl_id (subr_die, DW_AT_high_pc, hot_section_end_label);
17987             add_AT_lbl_id (subr_die, DW_AT_lo_user, unlikely_section_label);
17988             add_AT_lbl_id (subr_die, DW_AT_hi_user, cold_section_end_label);
17989
17990             add_pubname (decl, subr_die);
17991             add_arange (decl, subr_die);
17992             add_arange (decl, subr_die);
17993            */
17994         }
17995
17996 #ifdef MIPS_DEBUGGING_INFO
17997       /* Add a reference to the FDE for this routine.  */
17998       add_AT_fde_ref (subr_die, DW_AT_MIPS_fde, current_funcdef_fde);
17999 #endif
18000
18001       cfa_fb_offset = CFA_FRAME_BASE_OFFSET (decl);
18002
18003       /* We define the "frame base" as the function's CFA.  This is more
18004          convenient for several reasons: (1) It's stable across the prologue
18005          and epilogue, which makes it better than just a frame pointer,
18006          (2) With dwarf3, there exists a one-byte encoding that allows us
18007          to reference the .debug_frame data by proxy, but failing that,
18008          (3) We can at least reuse the code inspection and interpretation
18009          code that determines the CFA position at various points in the
18010          function.  */
18011       if (dwarf_version >= 3)
18012         {
18013           dw_loc_descr_ref op = new_loc_descr (DW_OP_call_frame_cfa, 0, 0);
18014           add_AT_loc (subr_die, DW_AT_frame_base, op);
18015         }
18016       else
18017         {
18018           dw_loc_list_ref list = convert_cfa_to_fb_loc_list (cfa_fb_offset);
18019           if (list->dw_loc_next)
18020             add_AT_loc_list (subr_die, DW_AT_frame_base, list);
18021           else
18022             add_AT_loc (subr_die, DW_AT_frame_base, list->expr);
18023         }
18024
18025       /* Compute a displacement from the "steady-state frame pointer" to
18026          the CFA.  The former is what all stack slots and argument slots
18027          will reference in the rtl; the later is what we've told the
18028          debugger about.  We'll need to adjust all frame_base references
18029          by this displacement.  */
18030       compute_frame_pointer_to_fb_displacement (cfa_fb_offset);
18031
18032       if (cfun->static_chain_decl)
18033         add_AT_location_description (subr_die, DW_AT_static_link,
18034                  loc_list_from_tree (cfun->static_chain_decl, 2));
18035     }
18036
18037   /* Generate child dies for template paramaters.  */
18038   if (debug_info_level > DINFO_LEVEL_TERSE)
18039     gen_generic_params_dies (decl);
18040
18041   /* Now output descriptions of the arguments for this function. This gets
18042      (unnecessarily?) complex because of the fact that the DECL_ARGUMENT list
18043      for a FUNCTION_DECL doesn't indicate cases where there was a trailing
18044      `...' at the end of the formal parameter list.  In order to find out if
18045      there was a trailing ellipsis or not, we must instead look at the type
18046      associated with the FUNCTION_DECL.  This will be a node of type
18047      FUNCTION_TYPE. If the chain of type nodes hanging off of this
18048      FUNCTION_TYPE node ends with a void_type_node then there should *not* be
18049      an ellipsis at the end.  */
18050
18051   /* In the case where we are describing a mere function declaration, all we
18052      need to do here (and all we *can* do here) is to describe the *types* of
18053      its formal parameters.  */
18054   if (debug_info_level <= DINFO_LEVEL_TERSE)
18055     ;
18056   else if (declaration)
18057     gen_formal_types_die (decl, subr_die);
18058   else
18059     {
18060       /* Generate DIEs to represent all known formal parameters.  */
18061       tree parm = DECL_ARGUMENTS (decl);
18062       tree generic_decl = lang_hooks.decls.get_generic_function_decl (decl);
18063       tree generic_decl_parm = generic_decl
18064                                 ? DECL_ARGUMENTS (generic_decl)
18065                                 : NULL;
18066
18067       /* Now we want to walk the list of parameters of the function and
18068          emit their relevant DIEs.
18069
18070          We consider the case of DECL being an instance of a generic function
18071          as well as it being a normal function.
18072
18073          If DECL is an instance of a generic function we walk the
18074          parameters of the generic function declaration _and_ the parameters of
18075          DECL itself. This is useful because we want to emit specific DIEs for
18076          function parameter packs and those are declared as part of the
18077          generic function declaration. In that particular case,
18078          the parameter pack yields a DW_TAG_GNU_formal_parameter_pack DIE.
18079          That DIE has children DIEs representing the set of arguments
18080          of the pack. Note that the set of pack arguments can be empty.
18081          In that case, the DW_TAG_GNU_formal_parameter_pack DIE will not have any
18082          children DIE.
18083
18084          Otherwise, we just consider the parameters of DECL.  */
18085       while (generic_decl_parm || parm)
18086         {
18087           if (generic_decl_parm
18088               && lang_hooks.function_parameter_pack_p (generic_decl_parm))
18089             gen_formal_parameter_pack_die (generic_decl_parm,
18090                                            parm, subr_die,
18091                                            &parm);
18092           else if (parm)
18093             {
18094               gen_decl_die (parm, NULL, subr_die);
18095               parm = TREE_CHAIN (parm);
18096             }
18097
18098           if (generic_decl_parm)
18099             generic_decl_parm = TREE_CHAIN (generic_decl_parm);
18100         }
18101
18102       /* Decide whether we need an unspecified_parameters DIE at the end.
18103          There are 2 more cases to do this for: 1) the ansi ... declaration -
18104          this is detectable when the end of the arg list is not a
18105          void_type_node 2) an unprototyped function declaration (not a
18106          definition).  This just means that we have no info about the
18107          parameters at all.  */
18108       fn_arg_types = TYPE_ARG_TYPES (TREE_TYPE (decl));
18109       if (fn_arg_types != NULL)
18110         {
18111           /* This is the prototyped case, check for....  */
18112           if (TREE_VALUE (tree_last (fn_arg_types)) != void_type_node)
18113             gen_unspecified_parameters_die (decl, subr_die);
18114         }
18115       else if (DECL_INITIAL (decl) == NULL_TREE)
18116         gen_unspecified_parameters_die (decl, subr_die);
18117     }
18118
18119   /* Output Dwarf info for all of the stuff within the body of the function
18120      (if it has one - it may be just a declaration).  */
18121   outer_scope = DECL_INITIAL (decl);
18122
18123   /* OUTER_SCOPE is a pointer to the outermost BLOCK node created to represent
18124      a function.  This BLOCK actually represents the outermost binding contour
18125      for the function, i.e. the contour in which the function's formal
18126      parameters and labels get declared. Curiously, it appears that the front
18127      end doesn't actually put the PARM_DECL nodes for the current function onto
18128      the BLOCK_VARS list for this outer scope, but are strung off of the
18129      DECL_ARGUMENTS list for the function instead.
18130
18131      The BLOCK_VARS list for the `outer_scope' does provide us with a list of
18132      the LABEL_DECL nodes for the function however, and we output DWARF info
18133      for those in decls_for_scope.  Just within the `outer_scope' there will be
18134      a BLOCK node representing the function's outermost pair of curly braces,
18135      and any blocks used for the base and member initializers of a C++
18136      constructor function.  */
18137   if (! declaration && TREE_CODE (outer_scope) != ERROR_MARK)
18138     {
18139       /* Emit a DW_TAG_variable DIE for a named return value.  */
18140       if (DECL_NAME (DECL_RESULT (decl)))
18141         gen_decl_die (DECL_RESULT (decl), NULL, subr_die);
18142
18143       current_function_has_inlines = 0;
18144       decls_for_scope (outer_scope, subr_die, 0);
18145
18146 #if 0 && defined (MIPS_DEBUGGING_INFO)
18147       if (current_function_has_inlines)
18148         {
18149           add_AT_flag (subr_die, DW_AT_MIPS_has_inlines, 1);
18150           if (! comp_unit_has_inlines)
18151             {
18152               add_AT_flag (comp_unit_die, DW_AT_MIPS_has_inlines, 1);
18153               comp_unit_has_inlines = 1;
18154             }
18155         }
18156 #endif
18157     }
18158   /* Add the calling convention attribute if requested.  */
18159   add_calling_convention_attribute (subr_die, decl);
18160
18161 }
18162
18163 /* Returns a hash value for X (which really is a die_struct).  */
18164
18165 static hashval_t
18166 common_block_die_table_hash (const void *x)
18167 {
18168   const_dw_die_ref d = (const_dw_die_ref) x;
18169   return (hashval_t) d->decl_id ^ htab_hash_pointer (d->die_parent);
18170 }
18171
18172 /* Return nonzero if decl_id and die_parent of die_struct X is the same
18173    as decl_id and die_parent of die_struct Y.  */
18174
18175 static int
18176 common_block_die_table_eq (const void *x, const void *y)
18177 {
18178   const_dw_die_ref d = (const_dw_die_ref) x;
18179   const_dw_die_ref e = (const_dw_die_ref) y;
18180   return d->decl_id == e->decl_id && d->die_parent == e->die_parent;
18181 }
18182
18183 /* Generate a DIE to represent a declared data object.
18184    Either DECL or ORIGIN must be non-null.  */
18185
18186 static void
18187 gen_variable_die (tree decl, tree origin, dw_die_ref context_die)
18188 {
18189   HOST_WIDE_INT off;
18190   tree com_decl;
18191   tree decl_or_origin = decl ? decl : origin;
18192   tree ultimate_origin;
18193   dw_die_ref var_die;
18194   dw_die_ref old_die = decl ? lookup_decl_die (decl) : NULL;
18195   dw_die_ref origin_die;
18196   int declaration = (DECL_EXTERNAL (decl_or_origin)
18197                      || class_or_namespace_scope_p (context_die));
18198
18199   ultimate_origin = decl_ultimate_origin (decl_or_origin);
18200   if (decl || ultimate_origin)
18201     origin = ultimate_origin;
18202   com_decl = fortran_common (decl_or_origin, &off);
18203
18204   /* Symbol in common gets emitted as a child of the common block, in the form
18205      of a data member.  */
18206   if (com_decl)
18207     {
18208       dw_die_ref com_die;
18209       dw_loc_list_ref loc;
18210       die_node com_die_arg;
18211
18212       var_die = lookup_decl_die (decl_or_origin);
18213       if (var_die)
18214         {
18215           if (get_AT (var_die, DW_AT_location) == NULL)
18216             {
18217               loc = loc_list_from_tree (com_decl, off ? 1 : 2);
18218               if (loc)
18219                 {
18220                   if (off)
18221                     {
18222                       /* Optimize the common case.  */
18223                       if (single_element_loc_list_p (loc)
18224                           && loc->expr->dw_loc_opc == DW_OP_addr
18225                           && loc->expr->dw_loc_next == NULL
18226                           && GET_CODE (loc->expr->dw_loc_oprnd1.v.val_addr)
18227                              == SYMBOL_REF)
18228                         loc->expr->dw_loc_oprnd1.v.val_addr
18229                           = plus_constant (loc->expr->dw_loc_oprnd1.v.val_addr, off);
18230                         else
18231                           loc_list_plus_const (loc, off);
18232                     }
18233                   add_AT_location_description (var_die, DW_AT_location, loc);
18234                   remove_AT (var_die, DW_AT_declaration);
18235                 }
18236             }
18237           return;
18238         }
18239
18240       if (common_block_die_table == NULL)
18241         common_block_die_table
18242           = htab_create_ggc (10, common_block_die_table_hash,
18243                              common_block_die_table_eq, NULL);
18244
18245       com_die_arg.decl_id = DECL_UID (com_decl);
18246       com_die_arg.die_parent = context_die;
18247       com_die = (dw_die_ref) htab_find (common_block_die_table, &com_die_arg);
18248       loc = loc_list_from_tree (com_decl, 2);
18249       if (com_die == NULL)
18250         {
18251           const char *cnam
18252             = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (com_decl));
18253           void **slot;
18254
18255           com_die = new_die (DW_TAG_common_block, context_die, decl);
18256           add_name_and_src_coords_attributes (com_die, com_decl);
18257           if (loc)
18258             {
18259               add_AT_location_description (com_die, DW_AT_location, loc);
18260               /* Avoid sharing the same loc descriptor between
18261                  DW_TAG_common_block and DW_TAG_variable.  */
18262               loc = loc_list_from_tree (com_decl, 2);
18263             }
18264           else if (DECL_EXTERNAL (decl))
18265             add_AT_flag (com_die, DW_AT_declaration, 1);
18266           add_pubname_string (cnam, com_die); /* ??? needed? */
18267           com_die->decl_id = DECL_UID (com_decl);
18268           slot = htab_find_slot (common_block_die_table, com_die, INSERT);
18269           *slot = (void *) com_die;
18270         }
18271       else if (get_AT (com_die, DW_AT_location) == NULL && loc)
18272         {
18273           add_AT_location_description (com_die, DW_AT_location, loc);
18274           loc = loc_list_from_tree (com_decl, 2);
18275           remove_AT (com_die, DW_AT_declaration);
18276         }
18277       var_die = new_die (DW_TAG_variable, com_die, decl);
18278       add_name_and_src_coords_attributes (var_die, decl);
18279       add_type_attribute (var_die, TREE_TYPE (decl), TREE_READONLY (decl),
18280                           TREE_THIS_VOLATILE (decl), context_die);
18281       add_AT_flag (var_die, DW_AT_external, 1);
18282       if (loc)
18283         {
18284           if (off)
18285             {
18286               /* Optimize the common case.  */
18287               if (single_element_loc_list_p (loc)
18288                   && loc->expr->dw_loc_opc == DW_OP_addr
18289                   && loc->expr->dw_loc_next == NULL
18290                   && GET_CODE (loc->expr->dw_loc_oprnd1.v.val_addr) == SYMBOL_REF)
18291                 loc->expr->dw_loc_oprnd1.v.val_addr
18292                   = plus_constant (loc->expr->dw_loc_oprnd1.v.val_addr, off);
18293               else
18294                 loc_list_plus_const (loc, off);
18295             }
18296           add_AT_location_description (var_die, DW_AT_location, loc);
18297         }
18298       else if (DECL_EXTERNAL (decl))
18299         add_AT_flag (var_die, DW_AT_declaration, 1);
18300       equate_decl_number_to_die (decl, var_die);
18301       return;
18302     }
18303
18304   /* If the compiler emitted a definition for the DECL declaration
18305      and if we already emitted a DIE for it, don't emit a second
18306      DIE for it again. Allow re-declarations of DECLs that are
18307      inside functions, though.  */
18308   if (old_die && declaration && !local_scope_p (context_die))
18309     return;
18310
18311   /* For static data members, the declaration in the class is supposed
18312      to have DW_TAG_member tag; the specification should still be
18313      DW_TAG_variable referencing the DW_TAG_member DIE.  */
18314   if (declaration && class_scope_p (context_die))
18315     var_die = new_die (DW_TAG_member, context_die, decl);
18316   else
18317     var_die = new_die (DW_TAG_variable, context_die, decl);
18318
18319   origin_die = NULL;
18320   if (origin != NULL)
18321     origin_die = add_abstract_origin_attribute (var_die, origin);
18322
18323   /* Loop unrolling can create multiple blocks that refer to the same
18324      static variable, so we must test for the DW_AT_declaration flag.
18325
18326      ??? Loop unrolling/reorder_blocks should perhaps be rewritten to
18327      copy decls and set the DECL_ABSTRACT flag on them instead of
18328      sharing them.
18329
18330      ??? Duplicated blocks have been rewritten to use .debug_ranges.
18331
18332      ??? The declare_in_namespace support causes us to get two DIEs for one
18333      variable, both of which are declarations.  We want to avoid considering
18334      one to be a specification, so we must test that this DIE is not a
18335      declaration.  */
18336   else if (old_die && TREE_STATIC (decl) && ! declaration
18337            && get_AT_flag (old_die, DW_AT_declaration) == 1)
18338     {
18339       /* This is a definition of a C++ class level static.  */
18340       add_AT_specification (var_die, old_die);
18341       if (DECL_NAME (decl))
18342         {
18343           expanded_location s = expand_location (DECL_SOURCE_LOCATION (decl));
18344           struct dwarf_file_data * file_index = lookup_filename (s.file);
18345
18346           if (get_AT_file (old_die, DW_AT_decl_file) != file_index)
18347             add_AT_file (var_die, DW_AT_decl_file, file_index);
18348
18349           if (get_AT_unsigned (old_die, DW_AT_decl_line) != (unsigned) s.line)
18350             add_AT_unsigned (var_die, DW_AT_decl_line, s.line);
18351         }
18352     }
18353   else
18354     {
18355       tree type = TREE_TYPE (decl);
18356
18357       add_name_and_src_coords_attributes (var_die, decl);
18358       if (decl_by_reference_p (decl))
18359         add_type_attribute (var_die, TREE_TYPE (type), 0, 0, context_die);
18360       else
18361         add_type_attribute (var_die, type, TREE_READONLY (decl),
18362                             TREE_THIS_VOLATILE (decl), context_die);
18363
18364       if (TREE_PUBLIC (decl))
18365         add_AT_flag (var_die, DW_AT_external, 1);
18366
18367       if (DECL_ARTIFICIAL (decl))
18368         add_AT_flag (var_die, DW_AT_artificial, 1);
18369
18370       if (TREE_PROTECTED (decl))
18371         add_AT_unsigned (var_die, DW_AT_accessibility, DW_ACCESS_protected);
18372       else if (TREE_PRIVATE (decl))
18373         add_AT_unsigned (var_die, DW_AT_accessibility, DW_ACCESS_private);
18374     }
18375
18376   if (declaration)
18377     add_AT_flag (var_die, DW_AT_declaration, 1);
18378
18379   if (decl && (DECL_ABSTRACT (decl) || declaration))
18380     equate_decl_number_to_die (decl, var_die);
18381
18382   if (! declaration
18383       && (! DECL_ABSTRACT (decl_or_origin)
18384           /* Local static vars are shared between all clones/inlines,
18385              so emit DW_AT_location on the abstract DIE if DECL_RTL is
18386              already set.  */
18387           || (TREE_CODE (decl_or_origin) == VAR_DECL
18388               && TREE_STATIC (decl_or_origin)
18389               && DECL_RTL_SET_P (decl_or_origin)))
18390       /* When abstract origin already has DW_AT_location attribute, no need
18391          to add it again.  */
18392       && (origin_die == NULL || get_AT (origin_die, DW_AT_location) == NULL))
18393     {
18394       if (TREE_CODE (decl_or_origin) == VAR_DECL && TREE_STATIC (decl_or_origin)
18395           && !TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (decl_or_origin)))
18396         defer_location (decl_or_origin, var_die);
18397       else
18398         add_location_or_const_value_attribute (var_die,
18399                                                decl_or_origin,
18400                                                DW_AT_location);
18401       add_pubname (decl_or_origin, var_die);
18402     }
18403   else
18404     tree_add_const_value_attribute_for_decl (var_die, decl_or_origin);
18405 }
18406
18407 /* Generate a DIE to represent a named constant.  */
18408
18409 static void
18410 gen_const_die (tree decl, dw_die_ref context_die)
18411 {
18412   dw_die_ref const_die;
18413   tree type = TREE_TYPE (decl);
18414
18415   const_die = new_die (DW_TAG_constant, context_die, decl);
18416   add_name_and_src_coords_attributes (const_die, decl);
18417   add_type_attribute (const_die, type, 1, 0, context_die);
18418   if (TREE_PUBLIC (decl))
18419     add_AT_flag (const_die, DW_AT_external, 1);
18420   if (DECL_ARTIFICIAL (decl))
18421     add_AT_flag (const_die, DW_AT_artificial, 1);
18422   tree_add_const_value_attribute_for_decl (const_die, decl);
18423 }
18424
18425 /* Generate a DIE to represent a label identifier.  */
18426
18427 static void
18428 gen_label_die (tree decl, dw_die_ref context_die)
18429 {
18430   tree origin = decl_ultimate_origin (decl);
18431   dw_die_ref lbl_die = new_die (DW_TAG_label, context_die, decl);
18432   rtx insn;
18433   char label[MAX_ARTIFICIAL_LABEL_BYTES];
18434
18435   if (origin != NULL)
18436     add_abstract_origin_attribute (lbl_die, origin);
18437   else
18438     add_name_and_src_coords_attributes (lbl_die, decl);
18439
18440   if (DECL_ABSTRACT (decl))
18441     equate_decl_number_to_die (decl, lbl_die);
18442   else
18443     {
18444       insn = DECL_RTL_IF_SET (decl);
18445
18446       /* Deleted labels are programmer specified labels which have been
18447          eliminated because of various optimizations.  We still emit them
18448          here so that it is possible to put breakpoints on them.  */
18449       if (insn
18450           && (LABEL_P (insn)
18451               || ((NOTE_P (insn)
18452                    && NOTE_KIND (insn) == NOTE_INSN_DELETED_LABEL))))
18453         {
18454           /* When optimization is enabled (via -O) some parts of the compiler
18455              (e.g. jump.c and cse.c) may try to delete CODE_LABEL insns which
18456              represent source-level labels which were explicitly declared by
18457              the user.  This really shouldn't be happening though, so catch
18458              it if it ever does happen.  */
18459           gcc_assert (!INSN_DELETED_P (insn));
18460
18461           ASM_GENERATE_INTERNAL_LABEL (label, "L", CODE_LABEL_NUMBER (insn));
18462           add_AT_lbl_id (lbl_die, DW_AT_low_pc, label);
18463         }
18464     }
18465 }
18466
18467 /* A helper function for gen_inlined_subroutine_die.  Add source coordinate
18468    attributes to the DIE for a block STMT, to describe where the inlined
18469    function was called from.  This is similar to add_src_coords_attributes.  */
18470
18471 static inline void
18472 add_call_src_coords_attributes (tree stmt, dw_die_ref die)
18473 {
18474   expanded_location s = expand_location (BLOCK_SOURCE_LOCATION (stmt));
18475
18476   if (dwarf_version >= 3 || !dwarf_strict)
18477     {
18478       add_AT_file (die, DW_AT_call_file, lookup_filename (s.file));
18479       add_AT_unsigned (die, DW_AT_call_line, s.line);
18480     }
18481 }
18482
18483
18484 /* A helper function for gen_lexical_block_die and gen_inlined_subroutine_die.
18485    Add low_pc and high_pc attributes to the DIE for a block STMT.  */
18486
18487 static inline void
18488 add_high_low_attributes (tree stmt, dw_die_ref die)
18489 {
18490   char label[MAX_ARTIFICIAL_LABEL_BYTES];
18491
18492   if (BLOCK_FRAGMENT_CHAIN (stmt)
18493       && (dwarf_version >= 3 || !dwarf_strict))
18494     {
18495       tree chain;
18496
18497       if (inlined_function_outer_scope_p (stmt))
18498         {
18499           ASM_GENERATE_INTERNAL_LABEL (label, BLOCK_BEGIN_LABEL,
18500                                        BLOCK_NUMBER (stmt));
18501           add_AT_lbl_id (die, DW_AT_entry_pc, label);
18502         }
18503
18504       add_AT_range_list (die, DW_AT_ranges, add_ranges (stmt));
18505
18506       chain = BLOCK_FRAGMENT_CHAIN (stmt);
18507       do
18508         {
18509           add_ranges (chain);
18510           chain = BLOCK_FRAGMENT_CHAIN (chain);
18511         }
18512       while (chain);
18513       add_ranges (NULL);
18514     }
18515   else
18516     {
18517       ASM_GENERATE_INTERNAL_LABEL (label, BLOCK_BEGIN_LABEL,
18518                                    BLOCK_NUMBER (stmt));
18519       add_AT_lbl_id (die, DW_AT_low_pc, label);
18520       ASM_GENERATE_INTERNAL_LABEL (label, BLOCK_END_LABEL,
18521                                    BLOCK_NUMBER (stmt));
18522       add_AT_lbl_id (die, DW_AT_high_pc, label);
18523     }
18524 }
18525
18526 /* Generate a DIE for a lexical block.  */
18527
18528 static void
18529 gen_lexical_block_die (tree stmt, dw_die_ref context_die, int depth)
18530 {
18531   dw_die_ref stmt_die = new_die (DW_TAG_lexical_block, context_die, stmt);
18532
18533   if (! BLOCK_ABSTRACT (stmt) && TREE_ASM_WRITTEN (stmt))
18534     add_high_low_attributes (stmt, stmt_die);
18535
18536   decls_for_scope (stmt, stmt_die, depth);
18537 }
18538
18539 /* Generate a DIE for an inlined subprogram.  */
18540
18541 static void
18542 gen_inlined_subroutine_die (tree stmt, dw_die_ref context_die, int depth)
18543 {
18544   tree decl;
18545
18546   /* The instance of function that is effectively being inlined shall not
18547      be abstract.  */
18548   gcc_assert (! BLOCK_ABSTRACT (stmt));
18549
18550   decl = block_ultimate_origin (stmt);
18551
18552   /* Emit info for the abstract instance first, if we haven't yet.  We
18553      must emit this even if the block is abstract, otherwise when we
18554      emit the block below (or elsewhere), we may end up trying to emit
18555      a die whose origin die hasn't been emitted, and crashing.  */
18556   dwarf2out_abstract_function (decl);
18557
18558   if (! BLOCK_ABSTRACT (stmt))
18559     {
18560       dw_die_ref subr_die
18561         = new_die (DW_TAG_inlined_subroutine, context_die, stmt);
18562
18563       add_abstract_origin_attribute (subr_die, decl);
18564       if (TREE_ASM_WRITTEN (stmt))
18565         add_high_low_attributes (stmt, subr_die);
18566       add_call_src_coords_attributes (stmt, subr_die);
18567
18568       decls_for_scope (stmt, subr_die, depth);
18569       current_function_has_inlines = 1;
18570     }
18571 }
18572
18573 /* Generate a DIE for a field in a record, or structure.  */
18574
18575 static void
18576 gen_field_die (tree decl, dw_die_ref context_die)
18577 {
18578   dw_die_ref decl_die;
18579
18580   if (TREE_TYPE (decl) == error_mark_node)
18581     return;
18582
18583   decl_die = new_die (DW_TAG_member, context_die, decl);
18584   add_name_and_src_coords_attributes (decl_die, decl);
18585   add_type_attribute (decl_die, member_declared_type (decl),
18586                       TREE_READONLY (decl), TREE_THIS_VOLATILE (decl),
18587                       context_die);
18588
18589   if (DECL_BIT_FIELD_TYPE (decl))
18590     {
18591       add_byte_size_attribute (decl_die, decl);
18592       add_bit_size_attribute (decl_die, decl);
18593       add_bit_offset_attribute (decl_die, decl);
18594     }
18595
18596   if (TREE_CODE (DECL_FIELD_CONTEXT (decl)) != UNION_TYPE)
18597     add_data_member_location_attribute (decl_die, decl);
18598
18599   if (DECL_ARTIFICIAL (decl))
18600     add_AT_flag (decl_die, DW_AT_artificial, 1);
18601
18602   if (TREE_PROTECTED (decl))
18603     add_AT_unsigned (decl_die, DW_AT_accessibility, DW_ACCESS_protected);
18604   else if (TREE_PRIVATE (decl))
18605     add_AT_unsigned (decl_die, DW_AT_accessibility, DW_ACCESS_private);
18606
18607   /* Equate decl number to die, so that we can look up this decl later on.  */
18608   equate_decl_number_to_die (decl, decl_die);
18609 }
18610
18611 #if 0
18612 /* Don't generate either pointer_type DIEs or reference_type DIEs here.
18613    Use modified_type_die instead.
18614    We keep this code here just in case these types of DIEs may be needed to
18615    represent certain things in other languages (e.g. Pascal) someday.  */
18616
18617 static void
18618 gen_pointer_type_die (tree type, dw_die_ref context_die)
18619 {
18620   dw_die_ref ptr_die
18621     = new_die (DW_TAG_pointer_type, scope_die_for (type, context_die), type);
18622
18623   equate_type_number_to_die (type, ptr_die);
18624   add_type_attribute (ptr_die, TREE_TYPE (type), 0, 0, context_die);
18625   add_AT_unsigned (mod_type_die, DW_AT_byte_size, PTR_SIZE);
18626 }
18627
18628 /* Don't generate either pointer_type DIEs or reference_type DIEs here.
18629    Use modified_type_die instead.
18630    We keep this code here just in case these types of DIEs may be needed to
18631    represent certain things in other languages (e.g. Pascal) someday.  */
18632
18633 static void
18634 gen_reference_type_die (tree type, dw_die_ref context_die)
18635 {
18636   dw_die_ref ref_die
18637     = new_die (DW_TAG_reference_type, scope_die_for (type, context_die), type);
18638
18639   equate_type_number_to_die (type, ref_die);
18640   add_type_attribute (ref_die, TREE_TYPE (type), 0, 0, context_die);
18641   add_AT_unsigned (mod_type_die, DW_AT_byte_size, PTR_SIZE);
18642 }
18643 #endif
18644
18645 /* Generate a DIE for a pointer to a member type.  */
18646
18647 static void
18648 gen_ptr_to_mbr_type_die (tree type, dw_die_ref context_die)
18649 {
18650   dw_die_ref ptr_die
18651     = new_die (DW_TAG_ptr_to_member_type,
18652                scope_die_for (type, context_die), type);
18653
18654   equate_type_number_to_die (type, ptr_die);
18655   add_AT_die_ref (ptr_die, DW_AT_containing_type,
18656                   lookup_type_die (TYPE_OFFSET_BASETYPE (type)));
18657   add_type_attribute (ptr_die, TREE_TYPE (type), 0, 0, context_die);
18658 }
18659
18660 /* Generate the DIE for the compilation unit.  */
18661
18662 static dw_die_ref
18663 gen_compile_unit_die (const char *filename)
18664 {
18665   dw_die_ref die;
18666   char producer[250];
18667   const char *language_string = lang_hooks.name;
18668   int language;
18669
18670   die = new_die (DW_TAG_compile_unit, NULL, NULL);
18671
18672   if (filename)
18673     {
18674       add_name_attribute (die, filename);
18675       /* Don't add cwd for <built-in>.  */
18676       if (!IS_ABSOLUTE_PATH (filename) && filename[0] != '<')
18677         add_comp_dir_attribute (die);
18678     }
18679
18680   sprintf (producer, "%s %s", language_string, version_string);
18681
18682 #ifdef MIPS_DEBUGGING_INFO
18683   /* The MIPS/SGI compilers place the 'cc' command line options in the producer
18684      string.  The SGI debugger looks for -g, -g1, -g2, or -g3; if they do
18685      not appear in the producer string, the debugger reaches the conclusion
18686      that the object file is stripped and has no debugging information.
18687      To get the MIPS/SGI debugger to believe that there is debugging
18688      information in the object file, we add a -g to the producer string.  */
18689   if (debug_info_level > DINFO_LEVEL_TERSE)
18690     strcat (producer, " -g");
18691 #endif
18692
18693   add_AT_string (die, DW_AT_producer, producer);
18694
18695   language = DW_LANG_C89;
18696   if (strcmp (language_string, "GNU C++") == 0)
18697     language = DW_LANG_C_plus_plus;
18698   else if (strcmp (language_string, "GNU F77") == 0)
18699     language = DW_LANG_Fortran77;
18700   else if (strcmp (language_string, "GNU Pascal") == 0)
18701     language = DW_LANG_Pascal83;
18702   else if (dwarf_version >= 3 || !dwarf_strict)
18703     {
18704       if (strcmp (language_string, "GNU Ada") == 0)
18705         language = DW_LANG_Ada95;
18706       else if (strcmp (language_string, "GNU Fortran") == 0)
18707         language = DW_LANG_Fortran95;
18708       else if (strcmp (language_string, "GNU Java") == 0)
18709         language = DW_LANG_Java;
18710       else if (strcmp (language_string, "GNU Objective-C") == 0)
18711         language = DW_LANG_ObjC;
18712       else if (strcmp (language_string, "GNU Objective-C++") == 0)
18713         language = DW_LANG_ObjC_plus_plus;
18714     }
18715
18716   add_AT_unsigned (die, DW_AT_language, language);
18717   return die;
18718 }
18719
18720 /* Generate the DIE for a base class.  */
18721
18722 static void
18723 gen_inheritance_die (tree binfo, tree access, dw_die_ref context_die)
18724 {
18725   dw_die_ref die = new_die (DW_TAG_inheritance, context_die, binfo);
18726
18727   add_type_attribute (die, BINFO_TYPE (binfo), 0, 0, context_die);
18728   add_data_member_location_attribute (die, binfo);
18729
18730   if (BINFO_VIRTUAL_P (binfo))
18731     add_AT_unsigned (die, DW_AT_virtuality, DW_VIRTUALITY_virtual);
18732
18733   if (access == access_public_node)
18734     add_AT_unsigned (die, DW_AT_accessibility, DW_ACCESS_public);
18735   else if (access == access_protected_node)
18736     add_AT_unsigned (die, DW_AT_accessibility, DW_ACCESS_protected);
18737 }
18738
18739 /* Generate a DIE for a class member.  */
18740
18741 static void
18742 gen_member_die (tree type, dw_die_ref context_die)
18743 {
18744   tree member;
18745   tree binfo = TYPE_BINFO (type);
18746   dw_die_ref child;
18747
18748   /* If this is not an incomplete type, output descriptions of each of its
18749      members. Note that as we output the DIEs necessary to represent the
18750      members of this record or union type, we will also be trying to output
18751      DIEs to represent the *types* of those members. However the `type'
18752      function (above) will specifically avoid generating type DIEs for member
18753      types *within* the list of member DIEs for this (containing) type except
18754      for those types (of members) which are explicitly marked as also being
18755      members of this (containing) type themselves.  The g++ front- end can
18756      force any given type to be treated as a member of some other (containing)
18757      type by setting the TYPE_CONTEXT of the given (member) type to point to
18758      the TREE node representing the appropriate (containing) type.  */
18759
18760   /* First output info about the base classes.  */
18761   if (binfo)
18762     {
18763       VEC(tree,gc) *accesses = BINFO_BASE_ACCESSES (binfo);
18764       int i;
18765       tree base;
18766
18767       for (i = 0; BINFO_BASE_ITERATE (binfo, i, base); i++)
18768         gen_inheritance_die (base,
18769                              (accesses ? VEC_index (tree, accesses, i)
18770                               : access_public_node), context_die);
18771     }
18772
18773   /* Now output info about the data members and type members.  */
18774   for (member = TYPE_FIELDS (type); member; member = TREE_CHAIN (member))
18775     {
18776       /* If we thought we were generating minimal debug info for TYPE
18777          and then changed our minds, some of the member declarations
18778          may have already been defined.  Don't define them again, but
18779          do put them in the right order.  */
18780
18781       child = lookup_decl_die (member);
18782       if (child)
18783         splice_child_die (context_die, child);
18784       else
18785         gen_decl_die (member, NULL, context_die);
18786     }
18787
18788   /* Now output info about the function members (if any).  */
18789   for (member = TYPE_METHODS (type); member; member = TREE_CHAIN (member))
18790     {
18791       /* Don't include clones in the member list.  */
18792       if (DECL_ABSTRACT_ORIGIN (member))
18793         continue;
18794
18795       child = lookup_decl_die (member);
18796       if (child)
18797         splice_child_die (context_die, child);
18798       else
18799         gen_decl_die (member, NULL, context_die);
18800     }
18801 }
18802
18803 /* Generate a DIE for a structure or union type.  If TYPE_DECL_SUPPRESS_DEBUG
18804    is set, we pretend that the type was never defined, so we only get the
18805    member DIEs needed by later specification DIEs.  */
18806
18807 static void
18808 gen_struct_or_union_type_die (tree type, dw_die_ref context_die,
18809                                 enum debug_info_usage usage)
18810 {
18811   dw_die_ref type_die = lookup_type_die (type);
18812   dw_die_ref scope_die = 0;
18813   int nested = 0;
18814   int complete = (TYPE_SIZE (type)
18815                   && (! TYPE_STUB_DECL (type)
18816                       || ! TYPE_DECL_SUPPRESS_DEBUG (TYPE_STUB_DECL (type))));
18817   int ns_decl = (context_die && context_die->die_tag == DW_TAG_namespace);
18818   complete = complete && should_emit_struct_debug (type, usage);
18819
18820   if (type_die && ! complete)
18821     return;
18822
18823   if (TYPE_CONTEXT (type) != NULL_TREE
18824       && (AGGREGATE_TYPE_P (TYPE_CONTEXT (type))
18825           || TREE_CODE (TYPE_CONTEXT (type)) == NAMESPACE_DECL))
18826     nested = 1;
18827
18828   scope_die = scope_die_for (type, context_die);
18829
18830   if (! type_die || (nested && scope_die == comp_unit_die))
18831     /* First occurrence of type or toplevel definition of nested class.  */
18832     {
18833       dw_die_ref old_die = type_die;
18834
18835       type_die = new_die (TREE_CODE (type) == RECORD_TYPE
18836                           ? record_type_tag (type) : DW_TAG_union_type,
18837                           scope_die, type);
18838       equate_type_number_to_die (type, type_die);
18839       if (old_die)
18840         add_AT_specification (type_die, old_die);
18841       else
18842         add_name_attribute (type_die, type_tag (type));
18843     }
18844   else
18845     remove_AT (type_die, DW_AT_declaration);
18846
18847   /* Generate child dies for template paramaters.  */
18848   if (debug_info_level > DINFO_LEVEL_TERSE
18849       && COMPLETE_TYPE_P (type))
18850     gen_generic_params_dies (type);
18851
18852   /* If this type has been completed, then give it a byte_size attribute and
18853      then give a list of members.  */
18854   if (complete && !ns_decl)
18855     {
18856       /* Prevent infinite recursion in cases where the type of some member of
18857          this type is expressed in terms of this type itself.  */
18858       TREE_ASM_WRITTEN (type) = 1;
18859       add_byte_size_attribute (type_die, type);
18860       if (TYPE_STUB_DECL (type) != NULL_TREE)
18861         add_src_coords_attributes (type_die, TYPE_STUB_DECL (type));
18862
18863       /* If the first reference to this type was as the return type of an
18864          inline function, then it may not have a parent.  Fix this now.  */
18865       if (type_die->die_parent == NULL)
18866         add_child_die (scope_die, type_die);
18867
18868       push_decl_scope (type);
18869       gen_member_die (type, type_die);
18870       pop_decl_scope ();
18871
18872       /* GNU extension: Record what type our vtable lives in.  */
18873       if (TYPE_VFIELD (type))
18874         {
18875           tree vtype = DECL_FCONTEXT (TYPE_VFIELD (type));
18876
18877           gen_type_die (vtype, context_die);
18878           add_AT_die_ref (type_die, DW_AT_containing_type,
18879                           lookup_type_die (vtype));
18880         }
18881     }
18882   else
18883     {
18884       add_AT_flag (type_die, DW_AT_declaration, 1);
18885
18886       /* We don't need to do this for function-local types.  */
18887       if (TYPE_STUB_DECL (type)
18888           && ! decl_function_context (TYPE_STUB_DECL (type)))
18889         VEC_safe_push (tree, gc, incomplete_types, type);
18890     }
18891
18892   if (get_AT (type_die, DW_AT_name))
18893     add_pubtype (type, type_die);
18894 }
18895
18896 /* Generate a DIE for a subroutine _type_.  */
18897
18898 static void
18899 gen_subroutine_type_die (tree type, dw_die_ref context_die)
18900 {
18901   tree return_type = TREE_TYPE (type);
18902   dw_die_ref subr_die
18903     = new_die (DW_TAG_subroutine_type,
18904                scope_die_for (type, context_die), type);
18905
18906   equate_type_number_to_die (type, subr_die);
18907   add_prototyped_attribute (subr_die, type);
18908   add_type_attribute (subr_die, return_type, 0, 0, context_die);
18909   gen_formal_types_die (type, subr_die);
18910
18911   if (get_AT (subr_die, DW_AT_name))
18912     add_pubtype (type, subr_die);
18913 }
18914
18915 /* Generate a DIE for a type definition.  */
18916
18917 static void
18918 gen_typedef_die (tree decl, dw_die_ref context_die)
18919 {
18920   dw_die_ref type_die;
18921   tree origin;
18922
18923   if (TREE_ASM_WRITTEN (decl))
18924     return;
18925
18926   TREE_ASM_WRITTEN (decl) = 1;
18927   type_die = new_die (DW_TAG_typedef, context_die, decl);
18928   origin = decl_ultimate_origin (decl);
18929   if (origin != NULL)
18930     add_abstract_origin_attribute (type_die, origin);
18931   else
18932     {
18933       tree type;
18934
18935       add_name_and_src_coords_attributes (type_die, decl);
18936       if (DECL_ORIGINAL_TYPE (decl))
18937         {
18938           type = DECL_ORIGINAL_TYPE (decl);
18939
18940           gcc_assert (type != TREE_TYPE (decl));
18941           equate_type_number_to_die (TREE_TYPE (decl), type_die);
18942         }
18943       else
18944         type = TREE_TYPE (decl);
18945
18946       add_type_attribute (type_die, type, TREE_READONLY (decl),
18947                           TREE_THIS_VOLATILE (decl), context_die);
18948     }
18949
18950   if (DECL_ABSTRACT (decl))
18951     equate_decl_number_to_die (decl, type_die);
18952
18953   if (get_AT (type_die, DW_AT_name))
18954     add_pubtype (decl, type_die);
18955 }
18956
18957 /* Generate a type description DIE.  */
18958
18959 static void
18960 gen_type_die_with_usage (tree type, dw_die_ref context_die,
18961                                 enum debug_info_usage usage)
18962 {
18963   int need_pop;
18964   struct array_descr_info info;
18965
18966   if (type == NULL_TREE || type == error_mark_node)
18967     return;
18968
18969   /* If TYPE is a typedef type variant, let's generate debug info
18970      for the parent typedef which TYPE is a type of.  */
18971   if (TYPE_NAME (type) && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
18972       && DECL_ORIGINAL_TYPE (TYPE_NAME (type)))
18973     {
18974       if (TREE_ASM_WRITTEN (type))
18975         return;
18976
18977       /* Prevent broken recursion; we can't hand off to the same type.  */
18978       gcc_assert (DECL_ORIGINAL_TYPE (TYPE_NAME (type)) != type);
18979
18980       /* Use the DIE of the containing namespace as the parent DIE of
18981          the type description DIE we want to generate.  */
18982       if (DECL_CONTEXT (TYPE_NAME (type))
18983           && TREE_CODE (DECL_CONTEXT (TYPE_NAME (type))) == NAMESPACE_DECL)
18984         context_die = get_context_die (DECL_CONTEXT (TYPE_NAME (type)));
18985
18986       TREE_ASM_WRITTEN (type) = 1;
18987       gen_decl_die (TYPE_NAME (type), NULL, context_die);
18988       return;
18989     }
18990
18991   /* If this is an array type with hidden descriptor, handle it first.  */
18992   if (!TREE_ASM_WRITTEN (type)
18993       && lang_hooks.types.get_array_descr_info
18994       && lang_hooks.types.get_array_descr_info (type, &info)
18995       && (dwarf_version >= 3 || !dwarf_strict))
18996     {
18997       gen_descr_array_type_die (type, &info, context_die);
18998       TREE_ASM_WRITTEN (type) = 1;
18999       return;
19000     }
19001
19002   /* We are going to output a DIE to represent the unqualified version
19003      of this type (i.e. without any const or volatile qualifiers) so
19004      get the main variant (i.e. the unqualified version) of this type
19005      now.  (Vectors are special because the debugging info is in the
19006      cloned type itself).  */
19007   if (TREE_CODE (type) != VECTOR_TYPE)
19008     type = type_main_variant (type);
19009
19010   if (TREE_ASM_WRITTEN (type))
19011     return;
19012
19013   switch (TREE_CODE (type))
19014     {
19015     case ERROR_MARK:
19016       break;
19017
19018     case POINTER_TYPE:
19019     case REFERENCE_TYPE:
19020       /* We must set TREE_ASM_WRITTEN in case this is a recursive type.  This
19021          ensures that the gen_type_die recursion will terminate even if the
19022          type is recursive.  Recursive types are possible in Ada.  */
19023       /* ??? We could perhaps do this for all types before the switch
19024          statement.  */
19025       TREE_ASM_WRITTEN (type) = 1;
19026
19027       /* For these types, all that is required is that we output a DIE (or a
19028          set of DIEs) to represent the "basis" type.  */
19029       gen_type_die_with_usage (TREE_TYPE (type), context_die,
19030                                 DINFO_USAGE_IND_USE);
19031       break;
19032
19033     case OFFSET_TYPE:
19034       /* This code is used for C++ pointer-to-data-member types.
19035          Output a description of the relevant class type.  */
19036       gen_type_die_with_usage (TYPE_OFFSET_BASETYPE (type), context_die,
19037                                         DINFO_USAGE_IND_USE);
19038
19039       /* Output a description of the type of the object pointed to.  */
19040       gen_type_die_with_usage (TREE_TYPE (type), context_die,
19041                                         DINFO_USAGE_IND_USE);
19042
19043       /* Now output a DIE to represent this pointer-to-data-member type
19044          itself.  */
19045       gen_ptr_to_mbr_type_die (type, context_die);
19046       break;
19047
19048     case FUNCTION_TYPE:
19049       /* Force out return type (in case it wasn't forced out already).  */
19050       gen_type_die_with_usage (TREE_TYPE (type), context_die,
19051                                         DINFO_USAGE_DIR_USE);
19052       gen_subroutine_type_die (type, context_die);
19053       break;
19054
19055     case METHOD_TYPE:
19056       /* Force out return type (in case it wasn't forced out already).  */
19057       gen_type_die_with_usage (TREE_TYPE (type), context_die,
19058                                         DINFO_USAGE_DIR_USE);
19059       gen_subroutine_type_die (type, context_die);
19060       break;
19061
19062     case ARRAY_TYPE:
19063       gen_array_type_die (type, context_die);
19064       break;
19065
19066     case VECTOR_TYPE:
19067       gen_array_type_die (type, context_die);
19068       break;
19069
19070     case ENUMERAL_TYPE:
19071     case RECORD_TYPE:
19072     case UNION_TYPE:
19073     case QUAL_UNION_TYPE:
19074       /* If this is a nested type whose containing class hasn't been written
19075          out yet, writing it out will cover this one, too.  This does not apply
19076          to instantiations of member class templates; they need to be added to
19077          the containing class as they are generated.  FIXME: This hurts the
19078          idea of combining type decls from multiple TUs, since we can't predict
19079          what set of template instantiations we'll get.  */
19080       if (TYPE_CONTEXT (type)
19081           && AGGREGATE_TYPE_P (TYPE_CONTEXT (type))
19082           && ! TREE_ASM_WRITTEN (TYPE_CONTEXT (type)))
19083         {
19084           gen_type_die_with_usage (TYPE_CONTEXT (type), context_die, usage);
19085
19086           if (TREE_ASM_WRITTEN (type))
19087             return;
19088
19089           /* If that failed, attach ourselves to the stub.  */
19090           push_decl_scope (TYPE_CONTEXT (type));
19091           context_die = lookup_type_die (TYPE_CONTEXT (type));
19092           need_pop = 1;
19093         }
19094       else if (TYPE_CONTEXT (type) != NULL_TREE
19095                && (TREE_CODE (TYPE_CONTEXT (type)) == FUNCTION_DECL))
19096         {
19097           /* If this type is local to a function that hasn't been written
19098              out yet, use a NULL context for now; it will be fixed up in
19099              decls_for_scope.  */
19100           context_die = lookup_decl_die (TYPE_CONTEXT (type));
19101           need_pop = 0;
19102         }
19103       else
19104         {
19105           context_die = declare_in_namespace (type, context_die);
19106           need_pop = 0;
19107         }
19108
19109       if (TREE_CODE (type) == ENUMERAL_TYPE)
19110         {
19111           /* This might have been written out by the call to
19112              declare_in_namespace.  */
19113           if (!TREE_ASM_WRITTEN (type))
19114             gen_enumeration_type_die (type, context_die);
19115         }
19116       else
19117         gen_struct_or_union_type_die (type, context_die, usage);
19118
19119       if (need_pop)
19120         pop_decl_scope ();
19121
19122       /* Don't set TREE_ASM_WRITTEN on an incomplete struct; we want to fix
19123          it up if it is ever completed.  gen_*_type_die will set it for us
19124          when appropriate.  */
19125       return;
19126
19127     case VOID_TYPE:
19128     case INTEGER_TYPE:
19129     case REAL_TYPE:
19130     case FIXED_POINT_TYPE:
19131     case COMPLEX_TYPE:
19132     case BOOLEAN_TYPE:
19133       /* No DIEs needed for fundamental types.  */
19134       break;
19135
19136     case LANG_TYPE:
19137       /* No Dwarf representation currently defined.  */
19138       break;
19139
19140     default:
19141       gcc_unreachable ();
19142     }
19143
19144   TREE_ASM_WRITTEN (type) = 1;
19145 }
19146
19147 static void
19148 gen_type_die (tree type, dw_die_ref context_die)
19149 {
19150   gen_type_die_with_usage (type, context_die, DINFO_USAGE_DIR_USE);
19151 }
19152
19153 /* Generate a DW_TAG_lexical_block DIE followed by DIEs to represent all of the
19154    things which are local to the given block.  */
19155
19156 static void
19157 gen_block_die (tree stmt, dw_die_ref context_die, int depth)
19158 {
19159   int must_output_die = 0;
19160   bool inlined_func;
19161
19162   /* Ignore blocks that are NULL.  */
19163   if (stmt == NULL_TREE)
19164     return;
19165
19166   inlined_func = inlined_function_outer_scope_p (stmt);
19167
19168   /* If the block is one fragment of a non-contiguous block, do not
19169      process the variables, since they will have been done by the
19170      origin block.  Do process subblocks.  */
19171   if (BLOCK_FRAGMENT_ORIGIN (stmt))
19172     {
19173       tree sub;
19174
19175       for (sub = BLOCK_SUBBLOCKS (stmt); sub; sub = BLOCK_CHAIN (sub))
19176         gen_block_die (sub, context_die, depth + 1);
19177
19178       return;
19179     }
19180
19181   /* Determine if we need to output any Dwarf DIEs at all to represent this
19182      block.  */
19183   if (inlined_func)
19184     /* The outer scopes for inlinings *must* always be represented.  We
19185        generate DW_TAG_inlined_subroutine DIEs for them.  (See below.) */
19186     must_output_die = 1;
19187   else
19188     {
19189       /* Determine if this block directly contains any "significant"
19190          local declarations which we will need to output DIEs for.  */
19191       if (debug_info_level > DINFO_LEVEL_TERSE)
19192         /* We are not in terse mode so *any* local declaration counts
19193            as being a "significant" one.  */
19194         must_output_die = ((BLOCK_VARS (stmt) != NULL
19195                             || BLOCK_NUM_NONLOCALIZED_VARS (stmt))
19196                            && (TREE_USED (stmt)
19197                                || TREE_ASM_WRITTEN (stmt)
19198                                || BLOCK_ABSTRACT (stmt)));
19199       else if ((TREE_USED (stmt)
19200                 || TREE_ASM_WRITTEN (stmt)
19201                 || BLOCK_ABSTRACT (stmt))
19202                && !dwarf2out_ignore_block (stmt))
19203         must_output_die = 1;
19204     }
19205
19206   /* It would be a waste of space to generate a Dwarf DW_TAG_lexical_block
19207      DIE for any block which contains no significant local declarations at
19208      all.  Rather, in such cases we just call `decls_for_scope' so that any
19209      needed Dwarf info for any sub-blocks will get properly generated. Note
19210      that in terse mode, our definition of what constitutes a "significant"
19211      local declaration gets restricted to include only inlined function
19212      instances and local (nested) function definitions.  */
19213   if (must_output_die)
19214     {
19215       if (inlined_func)
19216         {
19217           /* If STMT block is abstract, that means we have been called
19218              indirectly from dwarf2out_abstract_function.
19219              That function rightfully marks the descendent blocks (of
19220              the abstract function it is dealing with) as being abstract,
19221              precisely to prevent us from emitting any
19222              DW_TAG_inlined_subroutine DIE as a descendent
19223              of an abstract function instance. So in that case, we should
19224              not call gen_inlined_subroutine_die.
19225
19226              Later though, when cgraph asks dwarf2out to emit info
19227              for the concrete instance of the function decl into which
19228              the concrete instance of STMT got inlined, the later will lead
19229              to the generation of a DW_TAG_inlined_subroutine DIE.  */
19230           if (! BLOCK_ABSTRACT (stmt))
19231             gen_inlined_subroutine_die (stmt, context_die, depth);
19232         }
19233       else
19234         gen_lexical_block_die (stmt, context_die, depth);
19235     }
19236   else
19237     decls_for_scope (stmt, context_die, depth);
19238 }
19239
19240 /* Process variable DECL (or variable with origin ORIGIN) within
19241    block STMT and add it to CONTEXT_DIE.  */
19242 static void
19243 process_scope_var (tree stmt, tree decl, tree origin, dw_die_ref context_die)
19244 {
19245   dw_die_ref die;
19246   tree decl_or_origin = decl ? decl : origin;
19247
19248   if (TREE_CODE (decl_or_origin) == FUNCTION_DECL)
19249     die = lookup_decl_die (decl_or_origin);
19250   else if (TREE_CODE (decl_or_origin) == TYPE_DECL
19251            && TYPE_DECL_IS_STUB (decl_or_origin))
19252     die = lookup_type_die (TREE_TYPE (decl_or_origin));
19253   else
19254     die = NULL;
19255
19256   if (die != NULL && die->die_parent == NULL)
19257     add_child_die (context_die, die);
19258   else if (TREE_CODE (decl_or_origin) == IMPORTED_DECL)
19259     dwarf2out_imported_module_or_decl_1 (decl_or_origin, DECL_NAME (decl_or_origin),
19260                                          stmt, context_die);
19261   else
19262     gen_decl_die (decl, origin, context_die);
19263 }
19264
19265 /* Generate all of the decls declared within a given scope and (recursively)
19266    all of its sub-blocks.  */
19267
19268 static void
19269 decls_for_scope (tree stmt, dw_die_ref context_die, int depth)
19270 {
19271   tree decl;
19272   unsigned int i;
19273   tree subblocks;
19274
19275   /* Ignore NULL blocks.  */
19276   if (stmt == NULL_TREE)
19277     return;
19278
19279   /* Output the DIEs to represent all of the data objects and typedefs
19280      declared directly within this block but not within any nested
19281      sub-blocks.  Also, nested function and tag DIEs have been
19282      generated with a parent of NULL; fix that up now.  */
19283   for (decl = BLOCK_VARS (stmt); decl != NULL; decl = TREE_CHAIN (decl))
19284     process_scope_var (stmt, decl, NULL_TREE, context_die);
19285   for (i = 0; i < BLOCK_NUM_NONLOCALIZED_VARS (stmt); i++)
19286     process_scope_var (stmt, NULL, BLOCK_NONLOCALIZED_VAR (stmt, i),
19287                        context_die);
19288
19289   /* If we're at -g1, we're not interested in subblocks.  */
19290   if (debug_info_level <= DINFO_LEVEL_TERSE)
19291     return;
19292
19293   /* Output the DIEs to represent all sub-blocks (and the items declared
19294      therein) of this block.  */
19295   for (subblocks = BLOCK_SUBBLOCKS (stmt);
19296        subblocks != NULL;
19297        subblocks = BLOCK_CHAIN (subblocks))
19298     gen_block_die (subblocks, context_die, depth + 1);
19299 }
19300
19301 /* Is this a typedef we can avoid emitting?  */
19302
19303 static inline int
19304 is_redundant_typedef (const_tree decl)
19305 {
19306   if (TYPE_DECL_IS_STUB (decl))
19307     return 1;
19308
19309   if (DECL_ARTIFICIAL (decl)
19310       && DECL_CONTEXT (decl)
19311       && is_tagged_type (DECL_CONTEXT (decl))
19312       && TREE_CODE (TYPE_NAME (DECL_CONTEXT (decl))) == TYPE_DECL
19313       && DECL_NAME (decl) == DECL_NAME (TYPE_NAME (DECL_CONTEXT (decl))))
19314     /* Also ignore the artificial member typedef for the class name.  */
19315     return 1;
19316
19317   return 0;
19318 }
19319
19320 /* Returns the DIE for a context.  */
19321
19322 static inline dw_die_ref
19323 get_context_die (tree context)
19324 {
19325   if (context)
19326     {
19327       /* Find die that represents this context.  */
19328       if (TYPE_P (context))
19329         return force_type_die (TYPE_MAIN_VARIANT (context));
19330       else
19331         return force_decl_die (context);
19332     }
19333   return comp_unit_die;
19334 }
19335
19336 /* Returns the DIE for decl.  A DIE will always be returned.  */
19337
19338 static dw_die_ref
19339 force_decl_die (tree decl)
19340 {
19341   dw_die_ref decl_die;
19342   unsigned saved_external_flag;
19343   tree save_fn = NULL_TREE;
19344   decl_die = lookup_decl_die (decl);
19345   if (!decl_die)
19346     {
19347       dw_die_ref context_die = get_context_die (DECL_CONTEXT (decl));
19348
19349       decl_die = lookup_decl_die (decl);
19350       if (decl_die)
19351         return decl_die;
19352
19353       switch (TREE_CODE (decl))
19354         {
19355         case FUNCTION_DECL:
19356           /* Clear current_function_decl, so that gen_subprogram_die thinks
19357              that this is a declaration. At this point, we just want to force
19358              declaration die.  */
19359           save_fn = current_function_decl;
19360           current_function_decl = NULL_TREE;
19361           gen_subprogram_die (decl, context_die);
19362           current_function_decl = save_fn;
19363           break;
19364
19365         case VAR_DECL:
19366           /* Set external flag to force declaration die. Restore it after
19367            gen_decl_die() call.  */
19368           saved_external_flag = DECL_EXTERNAL (decl);
19369           DECL_EXTERNAL (decl) = 1;
19370           gen_decl_die (decl, NULL, context_die);
19371           DECL_EXTERNAL (decl) = saved_external_flag;
19372           break;
19373
19374         case NAMESPACE_DECL:
19375           if (dwarf_version >= 3 || !dwarf_strict)
19376             dwarf2out_decl (decl);
19377           else
19378             /* DWARF2 has neither DW_TAG_module, nor DW_TAG_namespace.  */
19379             decl_die = comp_unit_die;
19380           break;
19381
19382         default:
19383           gcc_unreachable ();
19384         }
19385
19386       /* We should be able to find the DIE now.  */
19387       if (!decl_die)
19388         decl_die = lookup_decl_die (decl);
19389       gcc_assert (decl_die);
19390     }
19391
19392   return decl_die;
19393 }
19394
19395 /* Returns the DIE for TYPE, that must not be a base type.  A DIE is
19396    always returned.  */
19397
19398 static dw_die_ref
19399 force_type_die (tree type)
19400 {
19401   dw_die_ref type_die;
19402
19403   type_die = lookup_type_die (type);
19404   if (!type_die)
19405     {
19406       dw_die_ref context_die = get_context_die (TYPE_CONTEXT (type));
19407
19408       type_die = modified_type_die (type, TYPE_READONLY (type),
19409                                     TYPE_VOLATILE (type), context_die);
19410       gcc_assert (type_die);
19411     }
19412   return type_die;
19413 }
19414
19415 /* Force out any required namespaces to be able to output DECL,
19416    and return the new context_die for it, if it's changed.  */
19417
19418 static dw_die_ref
19419 setup_namespace_context (tree thing, dw_die_ref context_die)
19420 {
19421   tree context = (DECL_P (thing)
19422                   ? DECL_CONTEXT (thing) : TYPE_CONTEXT (thing));
19423   if (context && TREE_CODE (context) == NAMESPACE_DECL)
19424     /* Force out the namespace.  */
19425     context_die = force_decl_die (context);
19426
19427   return context_die;
19428 }
19429
19430 /* Emit a declaration DIE for THING (which is either a DECL or a tagged
19431    type) within its namespace, if appropriate.
19432
19433    For compatibility with older debuggers, namespace DIEs only contain
19434    declarations; all definitions are emitted at CU scope.  */
19435
19436 static dw_die_ref
19437 declare_in_namespace (tree thing, dw_die_ref context_die)
19438 {
19439   dw_die_ref ns_context;
19440
19441   if (debug_info_level <= DINFO_LEVEL_TERSE)
19442     return context_die;
19443
19444   /* If this decl is from an inlined function, then don't try to emit it in its
19445      namespace, as we will get confused.  It would have already been emitted
19446      when the abstract instance of the inline function was emitted anyways.  */
19447   if (DECL_P (thing) && DECL_ABSTRACT_ORIGIN (thing))
19448     return context_die;
19449
19450   ns_context = setup_namespace_context (thing, context_die);
19451
19452   if (ns_context != context_die)
19453     {
19454       if (is_fortran ())
19455         return ns_context;
19456       if (DECL_P (thing))
19457         gen_decl_die (thing, NULL, ns_context);
19458       else
19459         gen_type_die (thing, ns_context);
19460     }
19461   return context_die;
19462 }
19463
19464 /* Generate a DIE for a namespace or namespace alias.  */
19465
19466 static void
19467 gen_namespace_die (tree decl, dw_die_ref context_die)
19468 {
19469   dw_die_ref namespace_die;
19470
19471   /* Namespace aliases have a DECL_ABSTRACT_ORIGIN of the namespace
19472      they are an alias of.  */
19473   if (DECL_ABSTRACT_ORIGIN (decl) == NULL)
19474     {
19475       /* Output a real namespace or module.  */
19476       context_die = setup_namespace_context (decl, comp_unit_die);
19477       namespace_die = new_die (is_fortran ()
19478                                ? DW_TAG_module : DW_TAG_namespace,
19479                                context_die, decl);
19480       /* For Fortran modules defined in different CU don't add src coords.  */
19481       if (namespace_die->die_tag == DW_TAG_module && DECL_EXTERNAL (decl))
19482         {
19483           const char *name = dwarf2_name (decl, 0);
19484           if (name)
19485             add_name_attribute (namespace_die, name);
19486         }
19487       else
19488         add_name_and_src_coords_attributes (namespace_die, decl);
19489       if (DECL_EXTERNAL (decl))
19490         add_AT_flag (namespace_die, DW_AT_declaration, 1);
19491       equate_decl_number_to_die (decl, namespace_die);
19492     }
19493   else
19494     {
19495       /* Output a namespace alias.  */
19496
19497       /* Force out the namespace we are an alias of, if necessary.  */
19498       dw_die_ref origin_die
19499         = force_decl_die (DECL_ABSTRACT_ORIGIN (decl));
19500
19501       if (DECL_CONTEXT (decl) == NULL_TREE
19502           || TREE_CODE (DECL_CONTEXT (decl)) == NAMESPACE_DECL)
19503         context_die = setup_namespace_context (decl, comp_unit_die);
19504       /* Now create the namespace alias DIE.  */
19505       namespace_die = new_die (DW_TAG_imported_declaration, context_die, decl);
19506       add_name_and_src_coords_attributes (namespace_die, decl);
19507       add_AT_die_ref (namespace_die, DW_AT_import, origin_die);
19508       equate_decl_number_to_die (decl, namespace_die);
19509     }
19510 }
19511
19512 /* Generate Dwarf debug information for a decl described by DECL.  */
19513
19514 static void
19515 gen_decl_die (tree decl, tree origin, dw_die_ref context_die)
19516 {
19517   tree decl_or_origin = decl ? decl : origin;
19518   tree class_origin = NULL, ultimate_origin;
19519
19520   if (DECL_P (decl_or_origin) && DECL_IGNORED_P (decl_or_origin))
19521     return;
19522
19523   switch (TREE_CODE (decl_or_origin))
19524     {
19525     case ERROR_MARK:
19526       break;
19527
19528     case CONST_DECL:
19529       if (!is_fortran ())
19530         {
19531           /* The individual enumerators of an enum type get output when we output
19532              the Dwarf representation of the relevant enum type itself.  */
19533           break;
19534         }
19535
19536       /* Emit its type.  */
19537       gen_type_die (TREE_TYPE (decl), context_die);
19538
19539       /* And its containing namespace.  */
19540       context_die = declare_in_namespace (decl, context_die);
19541
19542       gen_const_die (decl, context_die);
19543       break;
19544
19545     case FUNCTION_DECL:
19546       /* Don't output any DIEs to represent mere function declarations,
19547          unless they are class members or explicit block externs.  */
19548       if (DECL_INITIAL (decl_or_origin) == NULL_TREE
19549           && DECL_CONTEXT (decl_or_origin) == NULL_TREE
19550           && (current_function_decl == NULL_TREE
19551               || DECL_ARTIFICIAL (decl_or_origin)))
19552         break;
19553
19554 #if 0
19555       /* FIXME */
19556       /* This doesn't work because the C frontend sets DECL_ABSTRACT_ORIGIN
19557          on local redeclarations of global functions.  That seems broken.  */
19558       if (current_function_decl != decl)
19559         /* This is only a declaration.  */;
19560 #endif
19561
19562       /* If we're emitting a clone, emit info for the abstract instance.  */
19563       if (origin || DECL_ORIGIN (decl) != decl)
19564         dwarf2out_abstract_function (origin
19565                                      ? DECL_ORIGIN (origin)
19566                                      : DECL_ABSTRACT_ORIGIN (decl));
19567
19568       /* If we're emitting an out-of-line copy of an inline function,
19569          emit info for the abstract instance and set up to refer to it.  */
19570       else if (cgraph_function_possibly_inlined_p (decl)
19571                && ! DECL_ABSTRACT (decl)
19572                && ! class_or_namespace_scope_p (context_die)
19573                /* dwarf2out_abstract_function won't emit a die if this is just
19574                   a declaration.  We must avoid setting DECL_ABSTRACT_ORIGIN in
19575                   that case, because that works only if we have a die.  */
19576                && DECL_INITIAL (decl) != NULL_TREE)
19577         {
19578           dwarf2out_abstract_function (decl);
19579           set_decl_origin_self (decl);
19580         }
19581
19582       /* Otherwise we're emitting the primary DIE for this decl.  */
19583       else if (debug_info_level > DINFO_LEVEL_TERSE)
19584         {
19585           /* Before we describe the FUNCTION_DECL itself, make sure that we
19586              have described its return type.  */
19587           gen_type_die (TREE_TYPE (TREE_TYPE (decl)), context_die);
19588
19589           /* And its virtual context.  */
19590           if (DECL_VINDEX (decl) != NULL_TREE)
19591             gen_type_die (DECL_CONTEXT (decl), context_die);
19592
19593           /* And its containing type.  */
19594           if (!origin)
19595             origin = decl_class_context (decl);
19596           if (origin != NULL_TREE)
19597             gen_type_die_for_member (origin, decl, context_die);
19598
19599           /* And its containing namespace.  */
19600           context_die = declare_in_namespace (decl, context_die);
19601         }
19602
19603       /* Now output a DIE to represent the function itself.  */
19604       if (decl)
19605         gen_subprogram_die (decl, context_die);
19606       break;
19607
19608     case TYPE_DECL:
19609       /* If we are in terse mode, don't generate any DIEs to represent any
19610          actual typedefs.  */
19611       if (debug_info_level <= DINFO_LEVEL_TERSE)
19612         break;
19613
19614       /* In the special case of a TYPE_DECL node representing the declaration
19615          of some type tag, if the given TYPE_DECL is marked as having been
19616          instantiated from some other (original) TYPE_DECL node (e.g. one which
19617          was generated within the original definition of an inline function) we
19618          used to generate a special (abbreviated) DW_TAG_structure_type,
19619          DW_TAG_union_type, or DW_TAG_enumeration_type DIE here.  But nothing
19620          should be actually referencing those DIEs, as variable DIEs with that
19621          type would be emitted already in the abstract origin, so it was always
19622          removed during unused type prunning.  Don't add anything in this
19623          case.  */
19624       if (TYPE_DECL_IS_STUB (decl) && decl_ultimate_origin (decl) != NULL_TREE)
19625         break;
19626
19627       if (is_redundant_typedef (decl))
19628         gen_type_die (TREE_TYPE (decl), context_die);
19629       else
19630         /* Output a DIE to represent the typedef itself.  */
19631         gen_typedef_die (decl, context_die);
19632       break;
19633
19634     case LABEL_DECL:
19635       if (debug_info_level >= DINFO_LEVEL_NORMAL)
19636         gen_label_die (decl, context_die);
19637       break;
19638
19639     case VAR_DECL:
19640     case RESULT_DECL:
19641       /* If we are in terse mode, don't generate any DIEs to represent any
19642          variable declarations or definitions.  */
19643       if (debug_info_level <= DINFO_LEVEL_TERSE)
19644         break;
19645
19646       /* Output any DIEs that are needed to specify the type of this data
19647          object.  */
19648       if (decl_by_reference_p (decl_or_origin))
19649         gen_type_die (TREE_TYPE (TREE_TYPE (decl_or_origin)), context_die);
19650       else
19651         gen_type_die (TREE_TYPE (decl_or_origin), context_die);
19652
19653       /* And its containing type.  */
19654       class_origin = decl_class_context (decl_or_origin);
19655       if (class_origin != NULL_TREE)
19656         gen_type_die_for_member (class_origin, decl_or_origin, context_die);
19657
19658       /* And its containing namespace.  */
19659       context_die = declare_in_namespace (decl_or_origin, context_die);
19660
19661       /* Now output the DIE to represent the data object itself.  This gets
19662          complicated because of the possibility that the VAR_DECL really
19663          represents an inlined instance of a formal parameter for an inline
19664          function.  */
19665       ultimate_origin = decl_ultimate_origin (decl_or_origin);
19666       if (ultimate_origin != NULL_TREE
19667           && TREE_CODE (ultimate_origin) == PARM_DECL)
19668         gen_formal_parameter_die (decl, origin,
19669                                   true /* Emit name attribute.  */,
19670                                   context_die);
19671       else
19672         gen_variable_die (decl, origin, context_die);
19673       break;
19674
19675     case FIELD_DECL:
19676       /* Ignore the nameless fields that are used to skip bits but handle C++
19677          anonymous unions and structs.  */
19678       if (DECL_NAME (decl) != NULL_TREE
19679           || TREE_CODE (TREE_TYPE (decl)) == UNION_TYPE
19680           || TREE_CODE (TREE_TYPE (decl)) == RECORD_TYPE)
19681         {
19682           gen_type_die (member_declared_type (decl), context_die);
19683           gen_field_die (decl, context_die);
19684         }
19685       break;
19686
19687     case PARM_DECL:
19688       if (DECL_BY_REFERENCE (decl_or_origin))
19689         gen_type_die (TREE_TYPE (TREE_TYPE (decl_or_origin)), context_die);
19690       else
19691         gen_type_die (TREE_TYPE (decl_or_origin), context_die);
19692       gen_formal_parameter_die (decl, origin,
19693                                 true /* Emit name attribute.  */,
19694                                 context_die);
19695       break;
19696
19697     case NAMESPACE_DECL:
19698     case IMPORTED_DECL:
19699       if (dwarf_version >= 3 || !dwarf_strict)
19700         gen_namespace_die (decl, context_die);
19701       break;
19702
19703     default:
19704       /* Probably some frontend-internal decl.  Assume we don't care.  */
19705       gcc_assert ((int)TREE_CODE (decl) > NUM_TREE_CODES);
19706       break;
19707     }
19708 }
19709 \f
19710 /* Output debug information for global decl DECL.  Called from toplev.c after
19711    compilation proper has finished.  */
19712
19713 static void
19714 dwarf2out_global_decl (tree decl)
19715 {
19716   /* Output DWARF2 information for file-scope tentative data object
19717      declarations, file-scope (extern) function declarations (which
19718      had no corresponding body) and file-scope tagged type declarations
19719      and definitions which have not yet been forced out.  */
19720   if (TREE_CODE (decl) != FUNCTION_DECL || !DECL_INITIAL (decl))
19721     dwarf2out_decl (decl);
19722 }
19723
19724 /* Output debug information for type decl DECL.  Called from toplev.c
19725    and from language front ends (to record built-in types).  */
19726 static void
19727 dwarf2out_type_decl (tree decl, int local)
19728 {
19729   if (!local)
19730     dwarf2out_decl (decl);
19731 }
19732
19733 /* Output debug information for imported module or decl DECL.
19734    NAME is non-NULL name in the lexical block if the decl has been renamed.
19735    LEXICAL_BLOCK is the lexical block (which TREE_CODE is a BLOCK)
19736    that DECL belongs to.
19737    LEXICAL_BLOCK_DIE is the DIE of LEXICAL_BLOCK.  */
19738 static void
19739 dwarf2out_imported_module_or_decl_1 (tree decl,
19740                                      tree name,
19741                                      tree lexical_block,
19742                                      dw_die_ref lexical_block_die)
19743 {
19744   expanded_location xloc;
19745   dw_die_ref imported_die = NULL;
19746   dw_die_ref at_import_die;
19747
19748   if (TREE_CODE (decl) == IMPORTED_DECL)
19749     {
19750       xloc = expand_location (DECL_SOURCE_LOCATION (decl));
19751       decl = IMPORTED_DECL_ASSOCIATED_DECL (decl);
19752       gcc_assert (decl);
19753     }
19754   else
19755     xloc = expand_location (input_location);
19756
19757   if (TREE_CODE (decl) == TYPE_DECL || TREE_CODE (decl) == CONST_DECL)
19758     {
19759       if (is_base_type (TREE_TYPE (decl)))
19760         at_import_die = base_type_die (TREE_TYPE (decl));
19761       else
19762         at_import_die = force_type_die (TREE_TYPE (decl));
19763       /* For namespace N { typedef void T; } using N::T; base_type_die
19764          returns NULL, but DW_TAG_imported_declaration requires
19765          the DW_AT_import tag.  Force creation of DW_TAG_typedef.  */
19766       if (!at_import_die)
19767         {
19768           gcc_assert (TREE_CODE (decl) == TYPE_DECL);
19769           gen_typedef_die (decl, get_context_die (DECL_CONTEXT (decl)));
19770           at_import_die = lookup_type_die (TREE_TYPE (decl));
19771           gcc_assert (at_import_die);
19772         }
19773     }
19774   else
19775     {
19776       at_import_die = lookup_decl_die (decl);
19777       if (!at_import_die)
19778         {
19779           /* If we're trying to avoid duplicate debug info, we may not have
19780              emitted the member decl for this field.  Emit it now.  */
19781           if (TREE_CODE (decl) == FIELD_DECL)
19782             {
19783               tree type = DECL_CONTEXT (decl);
19784
19785               if (TYPE_CONTEXT (type)
19786                   && TYPE_P (TYPE_CONTEXT (type))
19787                   && !should_emit_struct_debug (TYPE_CONTEXT (type),
19788                                                 DINFO_USAGE_DIR_USE))
19789                 return;
19790               gen_type_die_for_member (type, decl,
19791                                        get_context_die (TYPE_CONTEXT (type)));
19792             }
19793           at_import_die = force_decl_die (decl);
19794         }
19795     }
19796
19797   if (TREE_CODE (decl) == NAMESPACE_DECL)
19798     {
19799       if (dwarf_version >= 3 || !dwarf_strict)
19800         imported_die = new_die (DW_TAG_imported_module,
19801                                 lexical_block_die,
19802                                 lexical_block);
19803       else
19804         return;
19805     }
19806   else
19807     imported_die = new_die (DW_TAG_imported_declaration,
19808                             lexical_block_die,
19809                             lexical_block);
19810
19811   add_AT_file (imported_die, DW_AT_decl_file, lookup_filename (xloc.file));
19812   add_AT_unsigned (imported_die, DW_AT_decl_line, xloc.line);
19813   if (name)
19814     add_AT_string (imported_die, DW_AT_name,
19815                    IDENTIFIER_POINTER (name));
19816   add_AT_die_ref (imported_die, DW_AT_import, at_import_die);
19817 }
19818
19819 /* Output debug information for imported module or decl DECL.
19820    NAME is non-NULL name in context if the decl has been renamed.
19821    CHILD is true if decl is one of the renamed decls as part of
19822    importing whole module.  */
19823
19824 static void
19825 dwarf2out_imported_module_or_decl (tree decl, tree name, tree context,
19826                                    bool child)
19827 {
19828   /* dw_die_ref at_import_die;  */
19829   dw_die_ref scope_die;
19830
19831   if (debug_info_level <= DINFO_LEVEL_TERSE)
19832     return;
19833
19834   gcc_assert (decl);
19835
19836   /* To emit DW_TAG_imported_module or DW_TAG_imported_decl, we need two DIEs.
19837      We need decl DIE for reference and scope die. First, get DIE for the decl
19838      itself.  */
19839
19840   /* Get the scope die for decl context. Use comp_unit_die for global module
19841      or decl. If die is not found for non globals, force new die.  */
19842   if (context
19843       && TYPE_P (context)
19844       && !should_emit_struct_debug (context, DINFO_USAGE_DIR_USE))
19845     return;
19846
19847   if (!(dwarf_version >= 3 || !dwarf_strict))
19848     return;
19849
19850   scope_die = get_context_die (context);
19851
19852   if (child)
19853     {
19854       gcc_assert (scope_die->die_child);
19855       gcc_assert (scope_die->die_child->die_tag == DW_TAG_imported_module);
19856       gcc_assert (TREE_CODE (decl) != NAMESPACE_DECL);
19857       scope_die = scope_die->die_child;
19858     }
19859
19860   /* OK, now we have DIEs for decl as well as scope. Emit imported die.  */
19861   dwarf2out_imported_module_or_decl_1 (decl, name, context, scope_die);
19862
19863 }
19864
19865 /* Write the debugging output for DECL.  */
19866
19867 void
19868 dwarf2out_decl (tree decl)
19869 {
19870   dw_die_ref context_die = comp_unit_die;
19871
19872   switch (TREE_CODE (decl))
19873     {
19874     case ERROR_MARK:
19875       return;
19876
19877     case FUNCTION_DECL:
19878       /* What we would really like to do here is to filter out all mere
19879          file-scope declarations of file-scope functions which are never
19880          referenced later within this translation unit (and keep all of ones
19881          that *are* referenced later on) but we aren't clairvoyant, so we have
19882          no idea which functions will be referenced in the future (i.e. later
19883          on within the current translation unit). So here we just ignore all
19884          file-scope function declarations which are not also definitions.  If
19885          and when the debugger needs to know something about these functions,
19886          it will have to hunt around and find the DWARF information associated
19887          with the definition of the function.
19888
19889          We can't just check DECL_EXTERNAL to find out which FUNCTION_DECL
19890          nodes represent definitions and which ones represent mere
19891          declarations.  We have to check DECL_INITIAL instead. That's because
19892          the C front-end supports some weird semantics for "extern inline"
19893          function definitions.  These can get inlined within the current
19894          translation unit (and thus, we need to generate Dwarf info for their
19895          abstract instances so that the Dwarf info for the concrete inlined
19896          instances can have something to refer to) but the compiler never
19897          generates any out-of-lines instances of such things (despite the fact
19898          that they *are* definitions).
19899
19900          The important point is that the C front-end marks these "extern
19901          inline" functions as DECL_EXTERNAL, but we need to generate DWARF for
19902          them anyway. Note that the C++ front-end also plays some similar games
19903          for inline function definitions appearing within include files which
19904          also contain `#pragma interface' pragmas.  */
19905       if (DECL_INITIAL (decl) == NULL_TREE)
19906         return;
19907
19908       /* If we're a nested function, initially use a parent of NULL; if we're
19909          a plain function, this will be fixed up in decls_for_scope.  If
19910          we're a method, it will be ignored, since we already have a DIE.  */
19911       if (decl_function_context (decl)
19912           /* But if we're in terse mode, we don't care about scope.  */
19913           && debug_info_level > DINFO_LEVEL_TERSE)
19914         context_die = NULL;
19915       break;
19916
19917     case VAR_DECL:
19918       /* Ignore this VAR_DECL if it refers to a file-scope extern data object
19919          declaration and if the declaration was never even referenced from
19920          within this entire compilation unit.  We suppress these DIEs in
19921          order to save space in the .debug section (by eliminating entries
19922          which are probably useless).  Note that we must not suppress
19923          block-local extern declarations (whether used or not) because that
19924          would screw-up the debugger's name lookup mechanism and cause it to
19925          miss things which really ought to be in scope at a given point.  */
19926       if (DECL_EXTERNAL (decl) && !TREE_USED (decl))
19927         return;
19928
19929       /* For local statics lookup proper context die.  */
19930       if (TREE_STATIC (decl) && decl_function_context (decl))
19931         context_die = lookup_decl_die (DECL_CONTEXT (decl));
19932
19933       /* If we are in terse mode, don't generate any DIEs to represent any
19934          variable declarations or definitions.  */
19935       if (debug_info_level <= DINFO_LEVEL_TERSE)
19936         return;
19937       break;
19938
19939     case CONST_DECL:
19940       if (debug_info_level <= DINFO_LEVEL_TERSE)
19941         return;
19942       if (!is_fortran ())
19943         return;
19944       if (TREE_STATIC (decl) && decl_function_context (decl))
19945         context_die = lookup_decl_die (DECL_CONTEXT (decl));
19946       break;
19947
19948     case NAMESPACE_DECL:
19949     case IMPORTED_DECL:
19950       if (debug_info_level <= DINFO_LEVEL_TERSE)
19951         return;
19952       if (lookup_decl_die (decl) != NULL)
19953         return;
19954       break;
19955
19956     case TYPE_DECL:
19957       /* Don't emit stubs for types unless they are needed by other DIEs.  */
19958       if (TYPE_DECL_SUPPRESS_DEBUG (decl))
19959         return;
19960
19961       /* Don't bother trying to generate any DIEs to represent any of the
19962          normal built-in types for the language we are compiling.  */
19963       if (DECL_IS_BUILTIN (decl))
19964         {
19965           /* OK, we need to generate one for `bool' so GDB knows what type
19966              comparisons have.  */
19967           if (is_cxx ()
19968               && TREE_CODE (TREE_TYPE (decl)) == BOOLEAN_TYPE
19969               && ! DECL_IGNORED_P (decl))
19970             modified_type_die (TREE_TYPE (decl), 0, 0, NULL);
19971
19972           return;
19973         }
19974
19975       /* If we are in terse mode, don't generate any DIEs for types.  */
19976       if (debug_info_level <= DINFO_LEVEL_TERSE)
19977         return;
19978
19979       /* If we're a function-scope tag, initially use a parent of NULL;
19980          this will be fixed up in decls_for_scope.  */
19981       if (decl_function_context (decl))
19982         context_die = NULL;
19983
19984       break;
19985
19986     default:
19987       return;
19988     }
19989
19990   gen_decl_die (decl, NULL, context_die);
19991 }
19992
19993 /* Write the debugging output for DECL.  */
19994
19995 static void
19996 dwarf2out_function_decl (tree decl)
19997 {
19998   dwarf2out_decl (decl);
19999
20000   htab_empty (decl_loc_table);
20001 }
20002
20003 /* Output a marker (i.e. a label) for the beginning of the generated code for
20004    a lexical block.  */
20005
20006 static void
20007 dwarf2out_begin_block (unsigned int line ATTRIBUTE_UNUSED,
20008                        unsigned int blocknum)
20009 {
20010   switch_to_section (current_function_section ());
20011   ASM_OUTPUT_DEBUG_LABEL (asm_out_file, BLOCK_BEGIN_LABEL, blocknum);
20012 }
20013
20014 /* Output a marker (i.e. a label) for the end of the generated code for a
20015    lexical block.  */
20016
20017 static void
20018 dwarf2out_end_block (unsigned int line ATTRIBUTE_UNUSED, unsigned int blocknum)
20019 {
20020   switch_to_section (current_function_section ());
20021   ASM_OUTPUT_DEBUG_LABEL (asm_out_file, BLOCK_END_LABEL, blocknum);
20022 }
20023
20024 /* Returns nonzero if it is appropriate not to emit any debugging
20025    information for BLOCK, because it doesn't contain any instructions.
20026
20027    Don't allow this for blocks with nested functions or local classes
20028    as we would end up with orphans, and in the presence of scheduling
20029    we may end up calling them anyway.  */
20030
20031 static bool
20032 dwarf2out_ignore_block (const_tree block)
20033 {
20034   tree decl;
20035   unsigned int i;
20036
20037   for (decl = BLOCK_VARS (block); decl; decl = TREE_CHAIN (decl))
20038     if (TREE_CODE (decl) == FUNCTION_DECL
20039         || (TREE_CODE (decl) == TYPE_DECL && TYPE_DECL_IS_STUB (decl)))
20040       return 0;
20041   for (i = 0; i < BLOCK_NUM_NONLOCALIZED_VARS (block); i++)
20042     {
20043       decl = BLOCK_NONLOCALIZED_VAR (block, i);
20044       if (TREE_CODE (decl) == FUNCTION_DECL
20045           || (TREE_CODE (decl) == TYPE_DECL && TYPE_DECL_IS_STUB (decl)))
20046       return 0;
20047     }
20048
20049   return 1;
20050 }
20051
20052 /* Hash table routines for file_hash.  */
20053
20054 static int
20055 file_table_eq (const void *p1_p, const void *p2_p)
20056 {
20057   const struct dwarf_file_data *const p1 =
20058     (const struct dwarf_file_data *) p1_p;
20059   const char *const p2 = (const char *) p2_p;
20060   return strcmp (p1->filename, p2) == 0;
20061 }
20062
20063 static hashval_t
20064 file_table_hash (const void *p_p)
20065 {
20066   const struct dwarf_file_data *const p = (const struct dwarf_file_data *) p_p;
20067   return htab_hash_string (p->filename);
20068 }
20069
20070 /* Lookup FILE_NAME (in the list of filenames that we know about here in
20071    dwarf2out.c) and return its "index".  The index of each (known) filename is
20072    just a unique number which is associated with only that one filename.  We
20073    need such numbers for the sake of generating labels (in the .debug_sfnames
20074    section) and references to those files numbers (in the .debug_srcinfo
20075    and.debug_macinfo sections).  If the filename given as an argument is not
20076    found in our current list, add it to the list and assign it the next
20077    available unique index number.  In order to speed up searches, we remember
20078    the index of the filename was looked up last.  This handles the majority of
20079    all searches.  */
20080
20081 static struct dwarf_file_data *
20082 lookup_filename (const char *file_name)
20083 {
20084   void ** slot;
20085   struct dwarf_file_data * created;
20086
20087   /* Check to see if the file name that was searched on the previous
20088      call matches this file name.  If so, return the index.  */
20089   if (file_table_last_lookup
20090       && (file_name == file_table_last_lookup->filename
20091           || strcmp (file_table_last_lookup->filename, file_name) == 0))
20092     return file_table_last_lookup;
20093
20094   /* Didn't match the previous lookup, search the table.  */
20095   slot = htab_find_slot_with_hash (file_table, file_name,
20096                                    htab_hash_string (file_name), INSERT);
20097   if (*slot)
20098     return (struct dwarf_file_data *) *slot;
20099
20100   created = GGC_NEW (struct dwarf_file_data);
20101   created->filename = file_name;
20102   created->emitted_number = 0;
20103   *slot = created;
20104   return created;
20105 }
20106
20107 /* If the assembler will construct the file table, then translate the compiler
20108    internal file table number into the assembler file table number, and emit
20109    a .file directive if we haven't already emitted one yet.  The file table
20110    numbers are different because we prune debug info for unused variables and
20111    types, which may include filenames.  */
20112
20113 static int
20114 maybe_emit_file (struct dwarf_file_data * fd)
20115 {
20116   if (! fd->emitted_number)
20117     {
20118       if (last_emitted_file)
20119         fd->emitted_number = last_emitted_file->emitted_number + 1;
20120       else
20121         fd->emitted_number = 1;
20122       last_emitted_file = fd;
20123
20124       if (DWARF2_ASM_LINE_DEBUG_INFO)
20125         {
20126           fprintf (asm_out_file, "\t.file %u ", fd->emitted_number);
20127           output_quoted_string (asm_out_file,
20128                                 remap_debug_filename (fd->filename));
20129           fputc ('\n', asm_out_file);
20130         }
20131     }
20132
20133   return fd->emitted_number;
20134 }
20135
20136 /* Schedule generation of a DW_AT_const_value attribute to DIE.
20137    That generation should happen after function debug info has been
20138    generated. The value of the attribute is the constant value of ARG.  */
20139
20140 static void
20141 append_entry_to_tmpl_value_parm_die_table (dw_die_ref die, tree arg)
20142 {
20143   die_arg_entry entry;
20144
20145   if (!die || !arg)
20146     return;
20147
20148   if (!tmpl_value_parm_die_table)
20149     tmpl_value_parm_die_table
20150       = VEC_alloc (die_arg_entry, gc, 32);
20151
20152   entry.die = die;
20153   entry.arg = arg;
20154   VEC_safe_push (die_arg_entry, gc,
20155                  tmpl_value_parm_die_table,
20156                  &entry);
20157 }
20158
20159 /* Add a DW_AT_const_value attribute to DIEs that were scheduled
20160    by append_entry_to_tmpl_value_parm_die_table. This function must
20161    be called after function DIEs have been generated.  */
20162
20163 static void
20164 gen_remaining_tmpl_value_param_die_attribute (void)
20165 {
20166   if (tmpl_value_parm_die_table)
20167     {
20168       unsigned i;
20169       die_arg_entry *e;
20170
20171       for (i = 0;
20172            VEC_iterate (die_arg_entry, tmpl_value_parm_die_table, i, e);
20173            i++)
20174         tree_add_const_value_attribute (e->die, e->arg);
20175     }
20176 }
20177
20178
20179 /* Replace DW_AT_name for the decl with name.  */
20180
20181 static void
20182 dwarf2out_set_name (tree decl, tree name)
20183 {
20184   dw_die_ref die;
20185   dw_attr_ref attr;
20186   const char *dname;
20187
20188   die = TYPE_SYMTAB_DIE (decl);
20189   if (!die)
20190     return;
20191
20192   dname = dwarf2_name (name, 0);
20193   if (!dname)
20194     return;
20195
20196   attr = get_AT (die, DW_AT_name);
20197   if (attr)
20198     {
20199       struct indirect_string_node *node;
20200
20201       node = find_AT_string (dname);
20202       /* replace the string.  */
20203       attr->dw_attr_val.v.val_str = node;
20204     }
20205
20206   else
20207     add_name_attribute (die, dname);
20208 }
20209
20210 /* Called by the final INSN scan whenever we see a direct function call.
20211    Make an entry into the direct call table, recording the point of call
20212    and a reference to the target function's debug entry.  */
20213
20214 static void
20215 dwarf2out_direct_call (tree targ)
20216 {
20217   dcall_entry e;
20218   tree origin = decl_ultimate_origin (targ);
20219
20220   /* If this is a clone, use the abstract origin as the target.  */
20221   if (origin)
20222     targ = origin;
20223
20224   e.poc_label_num = poc_label_num++;
20225   e.poc_decl = current_function_decl;
20226   e.targ_die = force_decl_die (targ);
20227   VEC_safe_push (dcall_entry, gc, dcall_table, &e);
20228
20229   /* Drop a label at the return point to mark the point of call.  */
20230   ASM_OUTPUT_DEBUG_LABEL (asm_out_file, "LPOC", e.poc_label_num);
20231 }
20232
20233 /* Returns a hash value for X (which really is a struct vcall_insn).  */
20234
20235 static hashval_t
20236 vcall_insn_table_hash (const void *x)
20237 {
20238   return (hashval_t) ((const struct vcall_insn *) x)->insn_uid;
20239 }
20240
20241 /* Return nonzero if insn_uid of struct vcall_insn *X is the same as
20242    insnd_uid of *Y.  */
20243
20244 static int
20245 vcall_insn_table_eq (const void *x, const void *y)
20246 {
20247   return (((const struct vcall_insn *) x)->insn_uid
20248           == ((const struct vcall_insn *) y)->insn_uid);
20249 }
20250
20251 /* Associate VTABLE_SLOT with INSN_UID in the VCALL_INSN_TABLE.  */
20252
20253 static void
20254 store_vcall_insn (unsigned int vtable_slot, int insn_uid)
20255 {
20256   struct vcall_insn *item = GGC_NEW (struct vcall_insn);
20257   struct vcall_insn **slot;
20258
20259   gcc_assert (item);
20260   item->insn_uid = insn_uid;
20261   item->vtable_slot = vtable_slot;
20262   slot = (struct vcall_insn **)
20263       htab_find_slot_with_hash (vcall_insn_table, &item,
20264                                 (hashval_t) insn_uid, INSERT);
20265   *slot = item;
20266 }
20267
20268 /* Return the VTABLE_SLOT associated with INSN_UID.  */
20269
20270 static unsigned int
20271 lookup_vcall_insn (unsigned int insn_uid)
20272 {
20273   struct vcall_insn item;
20274   struct vcall_insn *p;
20275
20276   item.insn_uid = insn_uid;
20277   item.vtable_slot = 0;
20278   p = (struct vcall_insn *) htab_find_with_hash (vcall_insn_table,
20279                                                  (void *) &item,
20280                                                  (hashval_t) insn_uid);
20281   if (p == NULL)
20282     return (unsigned int) -1;
20283   return p->vtable_slot;
20284 }
20285
20286
20287 /* Called when lowering indirect calls to RTL.  We make a note of INSN_UID
20288    and the OBJ_TYPE_REF_TOKEN from ADDR.  For C++ virtual calls, the token
20289    is the vtable slot index that we will need to put in the virtual call
20290    table later.  */
20291
20292 static void
20293 dwarf2out_virtual_call_token (tree addr, int insn_uid)
20294 {
20295   if (is_cxx() && TREE_CODE (addr) == OBJ_TYPE_REF)
20296     {
20297       tree token = OBJ_TYPE_REF_TOKEN (addr);
20298       if (TREE_CODE (token) == INTEGER_CST)
20299         store_vcall_insn (TREE_INT_CST_LOW (token), insn_uid);
20300     }
20301 }
20302
20303 /* Called when scheduling RTL, when a CALL_INSN is split.  Copies the
20304    OBJ_TYPE_REF_TOKEN previously associated with OLD_INSN and associates it
20305    with NEW_INSN.  */
20306
20307 static void
20308 dwarf2out_copy_call_info (rtx old_insn, rtx new_insn)
20309 {
20310   unsigned int vtable_slot = lookup_vcall_insn (INSN_UID (old_insn));
20311
20312   if (vtable_slot != (unsigned int) -1)
20313     store_vcall_insn (vtable_slot, INSN_UID (new_insn));
20314 }
20315
20316 /* Called by the final INSN scan whenever we see a virtual function call.
20317    Make an entry into the virtual call table, recording the point of call
20318    and the slot index of the vtable entry used to call the virtual member
20319    function.  The slot index was associated with the INSN_UID during the
20320    lowering to RTL.  */
20321
20322 static void
20323 dwarf2out_virtual_call (int insn_uid)
20324 {
20325   unsigned int vtable_slot = lookup_vcall_insn (insn_uid);
20326   vcall_entry e;
20327
20328   if (vtable_slot == (unsigned int) -1)
20329     return;
20330
20331   e.poc_label_num = poc_label_num++;
20332   e.vtable_slot = vtable_slot;
20333   VEC_safe_push (vcall_entry, gc, vcall_table, &e);
20334
20335   /* Drop a label at the return point to mark the point of call.  */
20336   ASM_OUTPUT_DEBUG_LABEL (asm_out_file, "LPOC", e.poc_label_num);
20337 }
20338
20339 /* Called by the final INSN scan whenever we see a var location.  We
20340    use it to drop labels in the right places, and throw the location in
20341    our lookup table.  */
20342
20343 static void
20344 dwarf2out_var_location (rtx loc_note)
20345 {
20346   char loclabel[MAX_ARTIFICIAL_LABEL_BYTES + 2];
20347   struct var_loc_node *newloc;
20348   rtx next_real;
20349   static const char *last_label;
20350   static const char *last_postcall_label;
20351   static bool last_in_cold_section_p;
20352   tree decl;
20353
20354   if (!DECL_P (NOTE_VAR_LOCATION_DECL (loc_note)))
20355     return;
20356
20357   next_real = next_real_insn (loc_note);
20358   /* If there are no instructions which would be affected by this note,
20359      don't do anything.  */
20360   if (next_real == NULL_RTX)
20361     return;
20362
20363   decl = NOTE_VAR_LOCATION_DECL (loc_note);
20364   newloc = add_var_loc_to_decl (decl, loc_note);
20365   if (newloc == NULL)
20366     return;
20367
20368   /* If there were no real insns between note we processed last time
20369      and this note, use the label we emitted last time.  */
20370   if (last_var_location_insn == NULL_RTX
20371       || last_var_location_insn != next_real
20372       || last_in_cold_section_p != in_cold_section_p)
20373     {
20374       ASM_GENERATE_INTERNAL_LABEL (loclabel, "LVL", loclabel_num);
20375       ASM_OUTPUT_DEBUG_LABEL (asm_out_file, "LVL", loclabel_num);
20376       loclabel_num++;
20377       last_label = ggc_strdup (loclabel);
20378       last_postcall_label = NULL;
20379     }
20380   newloc->var_loc_note = loc_note;
20381   newloc->next = NULL;
20382
20383   if (!NOTE_DURING_CALL_P (loc_note))
20384     newloc->label = last_label;
20385   else
20386     {
20387       if (!last_postcall_label)
20388         {
20389           sprintf (loclabel, "%s-1", last_label);
20390           last_postcall_label = ggc_strdup (loclabel);
20391         }
20392       newloc->label = last_postcall_label;
20393     }
20394
20395   last_var_location_insn = next_real;
20396   last_in_cold_section_p = in_cold_section_p;
20397 }
20398
20399 /* We need to reset the locations at the beginning of each
20400    function. We can't do this in the end_function hook, because the
20401    declarations that use the locations won't have been output when
20402    that hook is called.  Also compute have_multiple_function_sections here.  */
20403
20404 static void
20405 dwarf2out_begin_function (tree fun)
20406 {
20407   if (function_section (fun) != text_section)
20408     have_multiple_function_sections = true;
20409
20410   dwarf2out_note_section_used ();
20411 }
20412
20413 /* Output a label to mark the beginning of a source code line entry
20414    and record information relating to this source line, in
20415    'line_info_table' for later output of the .debug_line section.  */
20416
20417 static void
20418 dwarf2out_source_line (unsigned int line, const char *filename,
20419                        int discriminator, bool is_stmt)
20420 {
20421   static bool last_is_stmt = true;
20422
20423   if (debug_info_level >= DINFO_LEVEL_NORMAL
20424       && line != 0)
20425     {
20426       int file_num = maybe_emit_file (lookup_filename (filename));
20427
20428       switch_to_section (current_function_section ());
20429
20430       /* If requested, emit something human-readable.  */
20431       if (flag_debug_asm)
20432         fprintf (asm_out_file, "\t%s %s:%d\n", ASM_COMMENT_START,
20433                  filename, line);
20434
20435       if (DWARF2_ASM_LINE_DEBUG_INFO)
20436         {
20437           /* Emit the .loc directive understood by GNU as.  */
20438           fprintf (asm_out_file, "\t.loc %d %d 0", file_num, line);
20439           if (is_stmt != last_is_stmt)
20440             {
20441               fprintf (asm_out_file, " is_stmt %d", is_stmt ? 1 : 0);
20442               last_is_stmt = is_stmt;
20443             }
20444           if (SUPPORTS_DISCRIMINATOR && discriminator != 0)
20445             fprintf (asm_out_file, " discriminator %d", discriminator);
20446           fputc ('\n', asm_out_file);
20447
20448           /* Indicate that line number info exists.  */
20449           line_info_table_in_use++;
20450         }
20451       else if (function_section (current_function_decl) != text_section)
20452         {
20453           dw_separate_line_info_ref line_info;
20454           targetm.asm_out.internal_label (asm_out_file,
20455                                           SEPARATE_LINE_CODE_LABEL,
20456                                           separate_line_info_table_in_use);
20457
20458           /* Expand the line info table if necessary.  */
20459           if (separate_line_info_table_in_use
20460               == separate_line_info_table_allocated)
20461             {
20462               separate_line_info_table_allocated += LINE_INFO_TABLE_INCREMENT;
20463               separate_line_info_table
20464                 = GGC_RESIZEVEC (dw_separate_line_info_entry,
20465                                  separate_line_info_table,
20466                                  separate_line_info_table_allocated);
20467               memset (separate_line_info_table
20468                        + separate_line_info_table_in_use,
20469                       0,
20470                       (LINE_INFO_TABLE_INCREMENT
20471                        * sizeof (dw_separate_line_info_entry)));
20472             }
20473
20474           /* Add the new entry at the end of the line_info_table.  */
20475           line_info
20476             = &separate_line_info_table[separate_line_info_table_in_use++];
20477           line_info->dw_file_num = file_num;
20478           line_info->dw_line_num = line;
20479           line_info->function = current_function_funcdef_no;
20480         }
20481       else
20482         {
20483           dw_line_info_ref line_info;
20484
20485           targetm.asm_out.internal_label (asm_out_file, LINE_CODE_LABEL,
20486                                      line_info_table_in_use);
20487
20488           /* Expand the line info table if necessary.  */
20489           if (line_info_table_in_use == line_info_table_allocated)
20490             {
20491               line_info_table_allocated += LINE_INFO_TABLE_INCREMENT;
20492               line_info_table
20493                 = GGC_RESIZEVEC (dw_line_info_entry, line_info_table,
20494                                  line_info_table_allocated);
20495               memset (line_info_table + line_info_table_in_use, 0,
20496                       LINE_INFO_TABLE_INCREMENT * sizeof (dw_line_info_entry));
20497             }
20498
20499           /* Add the new entry at the end of the line_info_table.  */
20500           line_info = &line_info_table[line_info_table_in_use++];
20501           line_info->dw_file_num = file_num;
20502           line_info->dw_line_num = line;
20503         }
20504     }
20505 }
20506
20507 /* Record the beginning of a new source file.  */
20508
20509 static void
20510 dwarf2out_start_source_file (unsigned int lineno, const char *filename)
20511 {
20512   if (flag_eliminate_dwarf2_dups && dwarf_version < 4)
20513     {
20514       /* Record the beginning of the file for break_out_includes.  */
20515       dw_die_ref bincl_die;
20516
20517       bincl_die = new_die (DW_TAG_GNU_BINCL, comp_unit_die, NULL);
20518       add_AT_string (bincl_die, DW_AT_name, remap_debug_filename (filename));
20519     }
20520
20521   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
20522     {
20523       int file_num = maybe_emit_file (lookup_filename (filename));
20524
20525       switch_to_section (debug_macinfo_section);
20526       dw2_asm_output_data (1, DW_MACINFO_start_file, "Start new file");
20527       dw2_asm_output_data_uleb128 (lineno, "Included from line number %d",
20528                                    lineno);
20529
20530       dw2_asm_output_data_uleb128 (file_num, "file %s", filename);
20531     }
20532 }
20533
20534 /* Record the end of a source file.  */
20535
20536 static void
20537 dwarf2out_end_source_file (unsigned int lineno ATTRIBUTE_UNUSED)
20538 {
20539   if (flag_eliminate_dwarf2_dups && dwarf_version < 4)
20540     /* Record the end of the file for break_out_includes.  */
20541     new_die (DW_TAG_GNU_EINCL, comp_unit_die, NULL);
20542
20543   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
20544     {
20545       switch_to_section (debug_macinfo_section);
20546       dw2_asm_output_data (1, DW_MACINFO_end_file, "End file");
20547     }
20548 }
20549
20550 /* Called from debug_define in toplev.c.  The `buffer' parameter contains
20551    the tail part of the directive line, i.e. the part which is past the
20552    initial whitespace, #, whitespace, directive-name, whitespace part.  */
20553
20554 static void
20555 dwarf2out_define (unsigned int lineno ATTRIBUTE_UNUSED,
20556                   const char *buffer ATTRIBUTE_UNUSED)
20557 {
20558   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
20559     {
20560       switch_to_section (debug_macinfo_section);
20561       dw2_asm_output_data (1, DW_MACINFO_define, "Define macro");
20562       dw2_asm_output_data_uleb128 (lineno, "At line number %d", lineno);
20563       dw2_asm_output_nstring (buffer, -1, "The macro");
20564     }
20565 }
20566
20567 /* Called from debug_undef in toplev.c.  The `buffer' parameter contains
20568    the tail part of the directive line, i.e. the part which is past the
20569    initial whitespace, #, whitespace, directive-name, whitespace part.  */
20570
20571 static void
20572 dwarf2out_undef (unsigned int lineno ATTRIBUTE_UNUSED,
20573                  const char *buffer ATTRIBUTE_UNUSED)
20574 {
20575   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
20576     {
20577       switch_to_section (debug_macinfo_section);
20578       dw2_asm_output_data (1, DW_MACINFO_undef, "Undefine macro");
20579       dw2_asm_output_data_uleb128 (lineno, "At line number %d", lineno);
20580       dw2_asm_output_nstring (buffer, -1, "The macro");
20581     }
20582 }
20583
20584 /* Set up for Dwarf output at the start of compilation.  */
20585
20586 static void
20587 dwarf2out_init (const char *filename ATTRIBUTE_UNUSED)
20588 {
20589   /* Allocate the file_table.  */
20590   file_table = htab_create_ggc (50, file_table_hash,
20591                                 file_table_eq, NULL);
20592
20593   /* Allocate the decl_die_table.  */
20594   decl_die_table = htab_create_ggc (10, decl_die_table_hash,
20595                                     decl_die_table_eq, NULL);
20596
20597   /* Allocate the decl_loc_table.  */
20598   decl_loc_table = htab_create_ggc (10, decl_loc_table_hash,
20599                                     decl_loc_table_eq, NULL);
20600
20601   /* Allocate the initial hunk of the decl_scope_table.  */
20602   decl_scope_table = VEC_alloc (tree, gc, 256);
20603
20604   /* Allocate the initial hunk of the abbrev_die_table.  */
20605   abbrev_die_table = GGC_CNEWVEC (dw_die_ref, ABBREV_DIE_TABLE_INCREMENT);
20606   abbrev_die_table_allocated = ABBREV_DIE_TABLE_INCREMENT;
20607   /* Zero-th entry is allocated, but unused.  */
20608   abbrev_die_table_in_use = 1;
20609
20610   /* Allocate the initial hunk of the line_info_table.  */
20611   line_info_table = GGC_CNEWVEC (dw_line_info_entry, LINE_INFO_TABLE_INCREMENT);
20612   line_info_table_allocated = LINE_INFO_TABLE_INCREMENT;
20613
20614   /* Zero-th entry is allocated, but unused.  */
20615   line_info_table_in_use = 1;
20616
20617   /* Allocate the pubtypes and pubnames vectors.  */
20618   pubname_table = VEC_alloc (pubname_entry, gc, 32);
20619   pubtype_table = VEC_alloc (pubname_entry, gc, 32);
20620
20621   /* Allocate the table that maps insn UIDs to vtable slot indexes.  */
20622   vcall_insn_table = htab_create_ggc (10, vcall_insn_table_hash,
20623                                       vcall_insn_table_eq, NULL);
20624
20625   /* Generate the initial DIE for the .debug section.  Note that the (string)
20626      value given in the DW_AT_name attribute of the DW_TAG_compile_unit DIE
20627      will (typically) be a relative pathname and that this pathname should be
20628      taken as being relative to the directory from which the compiler was
20629      invoked when the given (base) source file was compiled.  We will fill
20630      in this value in dwarf2out_finish.  */
20631   comp_unit_die = gen_compile_unit_die (NULL);
20632
20633   incomplete_types = VEC_alloc (tree, gc, 64);
20634
20635   used_rtx_array = VEC_alloc (rtx, gc, 32);
20636
20637   debug_info_section = get_section (DEBUG_INFO_SECTION,
20638                                     SECTION_DEBUG, NULL);
20639   debug_abbrev_section = get_section (DEBUG_ABBREV_SECTION,
20640                                       SECTION_DEBUG, NULL);
20641   debug_aranges_section = get_section (DEBUG_ARANGES_SECTION,
20642                                        SECTION_DEBUG, NULL);
20643   debug_macinfo_section = get_section (DEBUG_MACINFO_SECTION,
20644                                        SECTION_DEBUG, NULL);
20645   debug_line_section = get_section (DEBUG_LINE_SECTION,
20646                                     SECTION_DEBUG, NULL);
20647   debug_loc_section = get_section (DEBUG_LOC_SECTION,
20648                                    SECTION_DEBUG, NULL);
20649   debug_pubnames_section = get_section (DEBUG_PUBNAMES_SECTION,
20650                                         SECTION_DEBUG, NULL);
20651   debug_pubtypes_section = get_section (DEBUG_PUBTYPES_SECTION,
20652                                         SECTION_DEBUG, NULL);
20653   debug_dcall_section = get_section (DEBUG_DCALL_SECTION,
20654                                      SECTION_DEBUG, NULL);
20655   debug_vcall_section = get_section (DEBUG_VCALL_SECTION,
20656                                      SECTION_DEBUG, NULL);
20657   debug_str_section = get_section (DEBUG_STR_SECTION,
20658                                    DEBUG_STR_SECTION_FLAGS, NULL);
20659   debug_ranges_section = get_section (DEBUG_RANGES_SECTION,
20660                                       SECTION_DEBUG, NULL);
20661   debug_frame_section = get_section (DEBUG_FRAME_SECTION,
20662                                      SECTION_DEBUG, NULL);
20663
20664   ASM_GENERATE_INTERNAL_LABEL (text_end_label, TEXT_END_LABEL, 0);
20665   ASM_GENERATE_INTERNAL_LABEL (abbrev_section_label,
20666                                DEBUG_ABBREV_SECTION_LABEL, 0);
20667   ASM_GENERATE_INTERNAL_LABEL (text_section_label, TEXT_SECTION_LABEL, 0);
20668   ASM_GENERATE_INTERNAL_LABEL (cold_text_section_label,
20669                                COLD_TEXT_SECTION_LABEL, 0);
20670   ASM_GENERATE_INTERNAL_LABEL (cold_end_label, COLD_END_LABEL, 0);
20671
20672   ASM_GENERATE_INTERNAL_LABEL (debug_info_section_label,
20673                                DEBUG_INFO_SECTION_LABEL, 0);
20674   ASM_GENERATE_INTERNAL_LABEL (debug_line_section_label,
20675                                DEBUG_LINE_SECTION_LABEL, 0);
20676   ASM_GENERATE_INTERNAL_LABEL (ranges_section_label,
20677                                DEBUG_RANGES_SECTION_LABEL, 0);
20678   switch_to_section (debug_abbrev_section);
20679   ASM_OUTPUT_LABEL (asm_out_file, abbrev_section_label);
20680   switch_to_section (debug_info_section);
20681   ASM_OUTPUT_LABEL (asm_out_file, debug_info_section_label);
20682   switch_to_section (debug_line_section);
20683   ASM_OUTPUT_LABEL (asm_out_file, debug_line_section_label);
20684
20685   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
20686     {
20687       switch_to_section (debug_macinfo_section);
20688       ASM_GENERATE_INTERNAL_LABEL (macinfo_section_label,
20689                                    DEBUG_MACINFO_SECTION_LABEL, 0);
20690       ASM_OUTPUT_LABEL (asm_out_file, macinfo_section_label);
20691     }
20692
20693   switch_to_section (text_section);
20694   ASM_OUTPUT_LABEL (asm_out_file, text_section_label);
20695   if (flag_reorder_blocks_and_partition)
20696     {
20697       cold_text_section = unlikely_text_section ();
20698       switch_to_section (cold_text_section);
20699       ASM_OUTPUT_LABEL (asm_out_file, cold_text_section_label);
20700     }
20701
20702 }
20703
20704 /* Called before cgraph_optimize starts outputtting functions, variables
20705    and toplevel asms into assembly.  */
20706
20707 static void
20708 dwarf2out_assembly_start (void)
20709 {
20710   if (HAVE_GAS_CFI_SECTIONS_DIRECTIVE && dwarf2out_do_cfi_asm ())
20711     {
20712 #ifndef TARGET_UNWIND_INFO
20713       if (USING_SJLJ_EXCEPTIONS || (!flag_unwind_tables && !flag_exceptions))
20714 #endif
20715         fprintf (asm_out_file, "\t.cfi_sections\t.debug_frame\n");
20716     }
20717 }
20718
20719 /* A helper function for dwarf2out_finish called through
20720    htab_traverse.  Emit one queued .debug_str string.  */
20721
20722 static int
20723 output_indirect_string (void **h, void *v ATTRIBUTE_UNUSED)
20724 {
20725   struct indirect_string_node *node = (struct indirect_string_node *) *h;
20726
20727   if (node->label && node->refcount)
20728     {
20729       switch_to_section (debug_str_section);
20730       ASM_OUTPUT_LABEL (asm_out_file, node->label);
20731       assemble_string (node->str, strlen (node->str) + 1);
20732     }
20733
20734   return 1;
20735 }
20736
20737 #if ENABLE_ASSERT_CHECKING
20738 /* Verify that all marks are clear.  */
20739
20740 static void
20741 verify_marks_clear (dw_die_ref die)
20742 {
20743   dw_die_ref c;
20744
20745   gcc_assert (! die->die_mark);
20746   FOR_EACH_CHILD (die, c, verify_marks_clear (c));
20747 }
20748 #endif /* ENABLE_ASSERT_CHECKING */
20749
20750 /* Clear the marks for a die and its children.
20751    Be cool if the mark isn't set.  */
20752
20753 static void
20754 prune_unmark_dies (dw_die_ref die)
20755 {
20756   dw_die_ref c;
20757
20758   if (die->die_mark)
20759     die->die_mark = 0;
20760   FOR_EACH_CHILD (die, c, prune_unmark_dies (c));
20761 }
20762
20763 /* Given DIE that we're marking as used, find any other dies
20764    it references as attributes and mark them as used.  */
20765
20766 static void
20767 prune_unused_types_walk_attribs (dw_die_ref die)
20768 {
20769   dw_attr_ref a;
20770   unsigned ix;
20771
20772   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
20773     {
20774       if (a->dw_attr_val.val_class == dw_val_class_die_ref)
20775         {
20776           /* A reference to another DIE.
20777              Make sure that it will get emitted.
20778              If it was broken out into a comdat group, don't follow it.  */
20779           if (dwarf_version < 4
20780               || a->dw_attr == DW_AT_specification
20781               || a->dw_attr_val.v.val_die_ref.die->die_id.die_type_node == NULL)
20782             prune_unused_types_mark (a->dw_attr_val.v.val_die_ref.die, 1);
20783         }
20784       /* Set the string's refcount to 0 so that prune_unused_types_mark
20785          accounts properly for it.  */
20786       if (AT_class (a) == dw_val_class_str)
20787         a->dw_attr_val.v.val_str->refcount = 0;
20788     }
20789 }
20790
20791
20792 /* Mark DIE as being used.  If DOKIDS is true, then walk down
20793    to DIE's children.  */
20794
20795 static void
20796 prune_unused_types_mark (dw_die_ref die, int dokids)
20797 {
20798   dw_die_ref c;
20799
20800   if (die->die_mark == 0)
20801     {
20802       /* We haven't done this node yet.  Mark it as used.  */
20803       die->die_mark = 1;
20804
20805       /* We also have to mark its parents as used.
20806          (But we don't want to mark our parents' kids due to this.)  */
20807       if (die->die_parent)
20808         prune_unused_types_mark (die->die_parent, 0);
20809
20810       /* Mark any referenced nodes.  */
20811       prune_unused_types_walk_attribs (die);
20812
20813       /* If this node is a specification,
20814          also mark the definition, if it exists.  */
20815       if (get_AT_flag (die, DW_AT_declaration) && die->die_definition)
20816         prune_unused_types_mark (die->die_definition, 1);
20817     }
20818
20819   if (dokids && die->die_mark != 2)
20820     {
20821       /* We need to walk the children, but haven't done so yet.
20822          Remember that we've walked the kids.  */
20823       die->die_mark = 2;
20824
20825       /* If this is an array type, we need to make sure our
20826          kids get marked, even if they're types.  If we're
20827          breaking out types into comdat sections, do this
20828          for all type definitions.  */
20829       if (die->die_tag == DW_TAG_array_type
20830           || (dwarf_version >= 4
20831               && is_type_die (die) && ! is_declaration_die (die)))
20832         FOR_EACH_CHILD (die, c, prune_unused_types_mark (c, 1));
20833       else
20834         FOR_EACH_CHILD (die, c, prune_unused_types_walk (c));
20835     }
20836 }
20837
20838 /* For local classes, look if any static member functions were emitted
20839    and if so, mark them.  */
20840
20841 static void
20842 prune_unused_types_walk_local_classes (dw_die_ref die)
20843 {
20844   dw_die_ref c;
20845
20846   if (die->die_mark == 2)
20847     return;
20848
20849   switch (die->die_tag)
20850     {
20851     case DW_TAG_structure_type:
20852     case DW_TAG_union_type:
20853     case DW_TAG_class_type:
20854       break;
20855
20856     case DW_TAG_subprogram:
20857       if (!get_AT_flag (die, DW_AT_declaration)
20858           || die->die_definition != NULL)
20859         prune_unused_types_mark (die, 1);
20860       return;
20861
20862     default:
20863       return;
20864     }
20865
20866   /* Mark children.  */
20867   FOR_EACH_CHILD (die, c, prune_unused_types_walk_local_classes (c));
20868 }
20869
20870 /* Walk the tree DIE and mark types that we actually use.  */
20871
20872 static void
20873 prune_unused_types_walk (dw_die_ref die)
20874 {
20875   dw_die_ref c;
20876
20877   /* Don't do anything if this node is already marked and
20878      children have been marked as well.  */
20879   if (die->die_mark == 2)
20880     return;
20881
20882   switch (die->die_tag)
20883     {
20884     case DW_TAG_structure_type:
20885     case DW_TAG_union_type:
20886     case DW_TAG_class_type:
20887       if (die->die_perennial_p)
20888         break;
20889
20890       for (c = die->die_parent; c; c = c->die_parent)
20891         if (c->die_tag == DW_TAG_subprogram)
20892           break;
20893
20894       /* Finding used static member functions inside of classes
20895          is needed just for local classes, because for other classes
20896          static member function DIEs with DW_AT_specification
20897          are emitted outside of the DW_TAG_*_type.  If we ever change
20898          it, we'd need to call this even for non-local classes.  */
20899       if (c)
20900         prune_unused_types_walk_local_classes (die);
20901
20902       /* It's a type node --- don't mark it.  */
20903       return;
20904
20905     case DW_TAG_const_type:
20906     case DW_TAG_packed_type:
20907     case DW_TAG_pointer_type:
20908     case DW_TAG_reference_type:
20909     case DW_TAG_volatile_type:
20910     case DW_TAG_typedef:
20911     case DW_TAG_array_type:
20912     case DW_TAG_interface_type:
20913     case DW_TAG_friend:
20914     case DW_TAG_variant_part:
20915     case DW_TAG_enumeration_type:
20916     case DW_TAG_subroutine_type:
20917     case DW_TAG_string_type:
20918     case DW_TAG_set_type:
20919     case DW_TAG_subrange_type:
20920     case DW_TAG_ptr_to_member_type:
20921     case DW_TAG_file_type:
20922       if (die->die_perennial_p)
20923         break;
20924
20925       /* It's a type node --- don't mark it.  */
20926       return;
20927
20928     default:
20929       /* Mark everything else.  */
20930       break;
20931   }
20932
20933   if (die->die_mark == 0)
20934     {
20935       die->die_mark = 1;
20936
20937       /* Now, mark any dies referenced from here.  */
20938       prune_unused_types_walk_attribs (die);
20939     }
20940
20941   die->die_mark = 2;
20942
20943   /* Mark children.  */
20944   FOR_EACH_CHILD (die, c, prune_unused_types_walk (c));
20945 }
20946
20947 /* Increment the string counts on strings referred to from DIE's
20948    attributes.  */
20949
20950 static void
20951 prune_unused_types_update_strings (dw_die_ref die)
20952 {
20953   dw_attr_ref a;
20954   unsigned ix;
20955
20956   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
20957     if (AT_class (a) == dw_val_class_str)
20958       {
20959         struct indirect_string_node *s = a->dw_attr_val.v.val_str;
20960         s->refcount++;
20961         /* Avoid unnecessarily putting strings that are used less than
20962            twice in the hash table.  */
20963         if (s->refcount
20964             == ((DEBUG_STR_SECTION_FLAGS & SECTION_MERGE) ? 1 : 2))
20965           {
20966             void ** slot;
20967             slot = htab_find_slot_with_hash (debug_str_hash, s->str,
20968                                              htab_hash_string (s->str),
20969                                              INSERT);
20970             gcc_assert (*slot == NULL);
20971             *slot = s;
20972           }
20973       }
20974 }
20975
20976 /* Remove from the tree DIE any dies that aren't marked.  */
20977
20978 static void
20979 prune_unused_types_prune (dw_die_ref die)
20980 {
20981   dw_die_ref c;
20982
20983   gcc_assert (die->die_mark);
20984   prune_unused_types_update_strings (die);
20985
20986   if (! die->die_child)
20987     return;
20988
20989   c = die->die_child;
20990   do {
20991     dw_die_ref prev = c;
20992     for (c = c->die_sib; ! c->die_mark; c = c->die_sib)
20993       if (c == die->die_child)
20994         {
20995           /* No marked children between 'prev' and the end of the list.  */
20996           if (prev == c)
20997             /* No marked children at all.  */
20998             die->die_child = NULL;
20999           else
21000             {
21001               prev->die_sib = c->die_sib;
21002               die->die_child = prev;
21003             }
21004           return;
21005         }
21006
21007     if (c != prev->die_sib)
21008       prev->die_sib = c;
21009     prune_unused_types_prune (c);
21010   } while (c != die->die_child);
21011 }
21012
21013 /* A helper function for dwarf2out_finish called through
21014    htab_traverse.  Clear .debug_str strings that we haven't already
21015    decided to emit.  */
21016
21017 static int
21018 prune_indirect_string (void **h, void *v ATTRIBUTE_UNUSED)
21019 {
21020   struct indirect_string_node *node = (struct indirect_string_node *) *h;
21021
21022   if (!node->label || !node->refcount)
21023     htab_clear_slot (debug_str_hash, h);
21024
21025   return 1;
21026 }
21027
21028 /* Remove dies representing declarations that we never use.  */
21029
21030 static void
21031 prune_unused_types (void)
21032 {
21033   unsigned int i;
21034   limbo_die_node *node;
21035   comdat_type_node *ctnode;
21036   pubname_ref pub;
21037   dcall_entry *dcall;
21038
21039 #if ENABLE_ASSERT_CHECKING
21040   /* All the marks should already be clear.  */
21041   verify_marks_clear (comp_unit_die);
21042   for (node = limbo_die_list; node; node = node->next)
21043     verify_marks_clear (node->die);
21044   for (ctnode = comdat_type_list; ctnode; ctnode = ctnode->next)
21045     verify_marks_clear (ctnode->root_die);
21046 #endif /* ENABLE_ASSERT_CHECKING */
21047
21048   /* Mark types that are used in global variables.  */
21049   premark_types_used_by_global_vars ();
21050
21051   /* Set the mark on nodes that are actually used.  */
21052   prune_unused_types_walk (comp_unit_die);
21053   for (node = limbo_die_list; node; node = node->next)
21054     prune_unused_types_walk (node->die);
21055   for (ctnode = comdat_type_list; ctnode; ctnode = ctnode->next)
21056     {
21057       prune_unused_types_walk (ctnode->root_die);
21058       prune_unused_types_mark (ctnode->type_die, 1);
21059     }
21060
21061   /* Also set the mark on nodes referenced from the
21062      pubname_table or arange_table.  */
21063   for (i = 0; VEC_iterate (pubname_entry, pubname_table, i, pub); i++)
21064     prune_unused_types_mark (pub->die, 1);
21065   for (i = 0; i < arange_table_in_use; i++)
21066     prune_unused_types_mark (arange_table[i], 1);
21067
21068   /* Mark nodes referenced from the direct call table.  */
21069   for (i = 0; VEC_iterate (dcall_entry, dcall_table, i, dcall); i++)
21070     prune_unused_types_mark (dcall->targ_die, 1);
21071
21072   /* Get rid of nodes that aren't marked; and update the string counts.  */
21073   if (debug_str_hash && debug_str_hash_forced)
21074     htab_traverse (debug_str_hash, prune_indirect_string, NULL);
21075   else if (debug_str_hash)
21076     htab_empty (debug_str_hash);
21077   prune_unused_types_prune (comp_unit_die);
21078   for (node = limbo_die_list; node; node = node->next)
21079     prune_unused_types_prune (node->die);
21080   for (ctnode = comdat_type_list; ctnode; ctnode = ctnode->next)
21081     prune_unused_types_prune (ctnode->root_die);
21082
21083   /* Leave the marks clear.  */
21084   prune_unmark_dies (comp_unit_die);
21085   for (node = limbo_die_list; node; node = node->next)
21086     prune_unmark_dies (node->die);
21087   for (ctnode = comdat_type_list; ctnode; ctnode = ctnode->next)
21088     prune_unmark_dies (ctnode->root_die);
21089 }
21090
21091 /* Set the parameter to true if there are any relative pathnames in
21092    the file table.  */
21093 static int
21094 file_table_relative_p (void ** slot, void *param)
21095 {
21096   bool *p = (bool *) param;
21097   struct dwarf_file_data *d = (struct dwarf_file_data *) *slot;
21098   if (!IS_ABSOLUTE_PATH (d->filename))
21099     {
21100       *p = true;
21101       return 0;
21102     }
21103   return 1;
21104 }
21105
21106 /* Routines to manipulate hash table of comdat type units.  */
21107
21108 static hashval_t
21109 htab_ct_hash (const void *of)
21110 {
21111   hashval_t h;
21112   const comdat_type_node *const type_node = (const comdat_type_node *) of;
21113
21114   memcpy (&h, type_node->signature, sizeof (h));
21115   return h;
21116 }
21117
21118 static int
21119 htab_ct_eq (const void *of1, const void *of2)
21120 {
21121   const comdat_type_node *const type_node_1 = (const comdat_type_node *) of1;
21122   const comdat_type_node *const type_node_2 = (const comdat_type_node *) of2;
21123
21124   return (! memcmp (type_node_1->signature, type_node_2->signature,
21125                     DWARF_TYPE_SIGNATURE_SIZE));
21126 }
21127
21128 /* Move a DW_AT_MIPS_linkage_name attribute just added to dw_die_ref
21129    to the location it would have been added, should we know its
21130    DECL_ASSEMBLER_NAME when we added other attributes.  This will
21131    probably improve compactness of debug info, removing equivalent
21132    abbrevs, and hide any differences caused by deferring the
21133    computation of the assembler name, triggered by e.g. PCH.  */
21134
21135 static inline void
21136 move_linkage_attr (dw_die_ref die)
21137 {
21138   unsigned ix = VEC_length (dw_attr_node, die->die_attr);
21139   dw_attr_node linkage = *VEC_index (dw_attr_node, die->die_attr, ix - 1);
21140
21141   gcc_assert (linkage.dw_attr == DW_AT_MIPS_linkage_name);
21142
21143   while (--ix > 0)
21144     {
21145       dw_attr_node *prev = VEC_index (dw_attr_node, die->die_attr, ix - 1);
21146
21147       if (prev->dw_attr == DW_AT_decl_line || prev->dw_attr == DW_AT_name)
21148         break;
21149     }
21150
21151   if (ix != VEC_length (dw_attr_node, die->die_attr) - 1)
21152     {
21153       VEC_pop (dw_attr_node, die->die_attr);
21154       VEC_quick_insert (dw_attr_node, die->die_attr, ix, &linkage);
21155     }
21156 }
21157
21158 /* Helper function for resolve_addr, attempt to resolve
21159    one CONST_STRING, return non-zero if not successful.  Similarly verify that
21160    SYMBOL_REFs refer to variables emitted in the current CU.  */
21161
21162 static int
21163 resolve_one_addr (rtx *addr, void *data ATTRIBUTE_UNUSED)
21164 {
21165   rtx rtl = *addr;
21166
21167   if (GET_CODE (rtl) == CONST_STRING)
21168     {
21169       size_t len = strlen (XSTR (rtl, 0)) + 1;
21170       tree t = build_string (len, XSTR (rtl, 0));
21171       tree tlen = build_int_cst (NULL_TREE, len - 1);
21172       TREE_TYPE (t)
21173         = build_array_type (char_type_node, build_index_type (tlen));
21174       rtl = lookup_constant_def (t);
21175       if (!rtl || !MEM_P (rtl))
21176         return 1;
21177       rtl = XEXP (rtl, 0);
21178       VEC_safe_push (rtx, gc, used_rtx_array, rtl);
21179       *addr = rtl;
21180       return 0;
21181     }
21182
21183   if (GET_CODE (rtl) == SYMBOL_REF
21184       && SYMBOL_REF_DECL (rtl)
21185       && TREE_CODE (SYMBOL_REF_DECL (rtl)) == VAR_DECL
21186       && !TREE_ASM_WRITTEN (SYMBOL_REF_DECL (rtl)))
21187     return 1;
21188
21189   if (GET_CODE (rtl) == CONST
21190       && for_each_rtx (&XEXP (rtl, 0), resolve_one_addr, NULL))
21191     return 1;
21192
21193   return 0;
21194 }
21195
21196 /* Helper function for resolve_addr, handle one location
21197    expression, return false if at least one CONST_STRING or SYMBOL_REF in
21198    the location list couldn't be resolved.  */
21199
21200 static bool
21201 resolve_addr_in_expr (dw_loc_descr_ref loc)
21202 {
21203   for (; loc; loc = loc->dw_loc_next)
21204     if ((loc->dw_loc_opc == DW_OP_addr
21205          && resolve_one_addr (&loc->dw_loc_oprnd1.v.val_addr, NULL))
21206         || (loc->dw_loc_opc == DW_OP_implicit_value
21207             && loc->dw_loc_oprnd2.val_class == dw_val_class_addr
21208             && resolve_one_addr (&loc->dw_loc_oprnd2.v.val_addr, NULL)))
21209       return false;
21210   return true;
21211 }
21212
21213 /* Resolve DW_OP_addr and DW_AT_const_value CONST_STRING arguments to
21214    an address in .rodata section if the string literal is emitted there,
21215    or remove the containing location list or replace DW_AT_const_value
21216    with DW_AT_location and empty location expression, if it isn't found
21217    in .rodata.  Similarly for SYMBOL_REFs, keep only those that refer
21218    to something that has been emitted in the current CU.  */
21219
21220 static void
21221 resolve_addr (dw_die_ref die)
21222 {
21223   dw_die_ref c;
21224   dw_attr_ref a;
21225   dw_loc_list_ref *curr;
21226   unsigned ix;
21227
21228   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
21229     switch (AT_class (a))
21230       {
21231       case dw_val_class_loc_list:
21232         curr = AT_loc_list_ptr (a);
21233         while (*curr)
21234           {
21235             if (!resolve_addr_in_expr ((*curr)->expr))
21236               {
21237                 dw_loc_list_ref next = (*curr)->dw_loc_next;
21238                 if (next && (*curr)->ll_symbol)
21239                   {
21240                     gcc_assert (!next->ll_symbol);
21241                     next->ll_symbol = (*curr)->ll_symbol;
21242                   }
21243                 *curr = next;
21244               }
21245             else
21246               curr = &(*curr)->dw_loc_next;
21247           }
21248         if (!AT_loc_list (a))
21249           {
21250             remove_AT (die, a->dw_attr);
21251             ix--;
21252           }
21253         break;
21254       case dw_val_class_loc:
21255         if (!resolve_addr_in_expr (AT_loc (a)))
21256           {
21257             remove_AT (die, a->dw_attr);
21258             ix--;
21259           }
21260         break;
21261       case dw_val_class_addr:
21262         if (a->dw_attr == DW_AT_const_value
21263             && resolve_one_addr (&a->dw_attr_val.v.val_addr, NULL))
21264           {
21265             remove_AT (die, a->dw_attr);
21266             ix--;
21267           }
21268         break;
21269       default:
21270         break;
21271       }
21272
21273   FOR_EACH_CHILD (die, c, resolve_addr (c));
21274 }
21275
21276 /* Output stuff that dwarf requires at the end of every file,
21277    and generate the DWARF-2 debugging info.  */
21278
21279 static void
21280 dwarf2out_finish (const char *filename)
21281 {
21282   limbo_die_node *node, *next_node;
21283   comdat_type_node *ctnode;
21284   htab_t comdat_type_table;
21285   dw_die_ref die = 0;
21286   unsigned int i;
21287
21288   gen_remaining_tmpl_value_param_die_attribute ();
21289
21290   /* Add the name for the main input file now.  We delayed this from
21291      dwarf2out_init to avoid complications with PCH.  */
21292   add_name_attribute (comp_unit_die, remap_debug_filename (filename));
21293   if (!IS_ABSOLUTE_PATH (filename))
21294     add_comp_dir_attribute (comp_unit_die);
21295   else if (get_AT (comp_unit_die, DW_AT_comp_dir) == NULL)
21296     {
21297       bool p = false;
21298       htab_traverse (file_table, file_table_relative_p, &p);
21299       if (p)
21300         add_comp_dir_attribute (comp_unit_die);
21301     }
21302
21303   for (i = 0; i < VEC_length (deferred_locations, deferred_locations_list); i++)
21304     {
21305       add_location_or_const_value_attribute (
21306         VEC_index (deferred_locations, deferred_locations_list, i)->die,
21307         VEC_index (deferred_locations, deferred_locations_list, i)->variable,
21308         DW_AT_location);
21309     }
21310
21311   /* Traverse the limbo die list, and add parent/child links.  The only
21312      dies without parents that should be here are concrete instances of
21313      inline functions, and the comp_unit_die.  We can ignore the comp_unit_die.
21314      For concrete instances, we can get the parent die from the abstract
21315      instance.  */
21316   for (node = limbo_die_list; node; node = next_node)
21317     {
21318       next_node = node->next;
21319       die = node->die;
21320
21321       if (die->die_parent == NULL)
21322         {
21323           dw_die_ref origin = get_AT_ref (die, DW_AT_abstract_origin);
21324
21325           if (origin)
21326             add_child_die (origin->die_parent, die);
21327           else if (die == comp_unit_die)
21328             ;
21329           else if (errorcount > 0 || sorrycount > 0)
21330             /* It's OK to be confused by errors in the input.  */
21331             add_child_die (comp_unit_die, die);
21332           else
21333             {
21334               /* In certain situations, the lexical block containing a
21335                  nested function can be optimized away, which results
21336                  in the nested function die being orphaned.  Likewise
21337                  with the return type of that nested function.  Force
21338                  this to be a child of the containing function.
21339
21340                  It may happen that even the containing function got fully
21341                  inlined and optimized out.  In that case we are lost and
21342                  assign the empty child.  This should not be big issue as
21343                  the function is likely unreachable too.  */
21344               tree context = NULL_TREE;
21345
21346               gcc_assert (node->created_for);
21347
21348               if (DECL_P (node->created_for))
21349                 context = DECL_CONTEXT (node->created_for);
21350               else if (TYPE_P (node->created_for))
21351                 context = TYPE_CONTEXT (node->created_for);
21352
21353               gcc_assert (context
21354                           && (TREE_CODE (context) == FUNCTION_DECL
21355                               || TREE_CODE (context) == NAMESPACE_DECL));
21356
21357               origin = lookup_decl_die (context);
21358               if (origin)
21359                 add_child_die (origin, die);
21360               else
21361                 add_child_die (comp_unit_die, die);
21362             }
21363         }
21364     }
21365
21366   limbo_die_list = NULL;
21367
21368   resolve_addr (comp_unit_die);
21369
21370   for (node = deferred_asm_name; node; node = node->next)
21371     {
21372       tree decl = node->created_for;
21373       if (DECL_ASSEMBLER_NAME (decl) != DECL_NAME (decl))
21374         {
21375           add_AT_string (node->die, DW_AT_MIPS_linkage_name,
21376                          IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl)));
21377           move_linkage_attr (node->die);
21378         }
21379     }
21380
21381   deferred_asm_name = NULL;
21382
21383   /* Walk through the list of incomplete types again, trying once more to
21384      emit full debugging info for them.  */
21385   retry_incomplete_types ();
21386
21387   if (flag_eliminate_unused_debug_types)
21388     prune_unused_types ();
21389
21390   /* Generate separate CUs for each of the include files we've seen.
21391      They will go into limbo_die_list.  */
21392   if (flag_eliminate_dwarf2_dups && dwarf_version < 4)
21393     break_out_includes (comp_unit_die);
21394
21395   /* Generate separate COMDAT sections for type DIEs. */
21396   if (dwarf_version >= 4)
21397     {
21398       break_out_comdat_types (comp_unit_die);
21399
21400       /* Each new type_unit DIE was added to the limbo die list when created.
21401          Since these have all been added to comdat_type_list, clear the
21402          limbo die list.  */
21403       limbo_die_list = NULL;
21404
21405       /* For each new comdat type unit, copy declarations for incomplete
21406          types to make the new unit self-contained (i.e., no direct
21407          references to the main compile unit).  */
21408       for (ctnode = comdat_type_list; ctnode != NULL; ctnode = ctnode->next)
21409         copy_decls_for_unworthy_types (ctnode->root_die);
21410       copy_decls_for_unworthy_types (comp_unit_die);
21411
21412       /* In the process of copying declarations from one unit to another,
21413          we may have left some declarations behind that are no longer
21414          referenced.  Prune them.  */
21415       prune_unused_types ();
21416     }
21417
21418   /* Traverse the DIE's and add add sibling attributes to those DIE's
21419      that have children.  */
21420   add_sibling_attributes (comp_unit_die);
21421   for (node = limbo_die_list; node; node = node->next)
21422     add_sibling_attributes (node->die);
21423   for (ctnode = comdat_type_list; ctnode != NULL; ctnode = ctnode->next)
21424     add_sibling_attributes (ctnode->root_die);
21425
21426   /* Output a terminator label for the .text section.  */
21427   switch_to_section (text_section);
21428   targetm.asm_out.internal_label (asm_out_file, TEXT_END_LABEL, 0);
21429   if (flag_reorder_blocks_and_partition)
21430     {
21431       switch_to_section (unlikely_text_section ());
21432       targetm.asm_out.internal_label (asm_out_file, COLD_END_LABEL, 0);
21433     }
21434
21435   /* We can only use the low/high_pc attributes if all of the code was
21436      in .text.  */
21437   if (!have_multiple_function_sections
21438       || !(dwarf_version >= 3 || !dwarf_strict))
21439     {
21440       add_AT_lbl_id (comp_unit_die, DW_AT_low_pc, text_section_label);
21441       add_AT_lbl_id (comp_unit_die, DW_AT_high_pc, text_end_label);
21442     }
21443
21444   else
21445     {
21446       unsigned fde_idx = 0;
21447       bool range_list_added = false;
21448
21449       /* We need to give .debug_loc and .debug_ranges an appropriate
21450          "base address".  Use zero so that these addresses become
21451          absolute.  Historically, we've emitted the unexpected
21452          DW_AT_entry_pc instead of DW_AT_low_pc for this purpose.
21453          Emit both to give time for other tools to adapt.  */
21454       add_AT_addr (comp_unit_die, DW_AT_low_pc, const0_rtx);
21455       add_AT_addr (comp_unit_die, DW_AT_entry_pc, const0_rtx);
21456
21457       if (text_section_used)
21458         add_ranges_by_labels (comp_unit_die, text_section_label,
21459                               text_end_label, &range_list_added);
21460       if (flag_reorder_blocks_and_partition && cold_text_section_used)
21461         add_ranges_by_labels (comp_unit_die, cold_text_section_label,
21462                               cold_end_label, &range_list_added);
21463
21464       for (fde_idx = 0; fde_idx < fde_table_in_use; fde_idx++)
21465         {
21466           dw_fde_ref fde = &fde_table[fde_idx];
21467
21468           if (fde->dw_fde_switched_sections)
21469             {
21470               if (!fde->in_std_section)
21471                 add_ranges_by_labels (comp_unit_die,
21472                                       fde->dw_fde_hot_section_label,
21473                                       fde->dw_fde_hot_section_end_label,
21474                                       &range_list_added);
21475               if (!fde->cold_in_std_section)
21476                 add_ranges_by_labels (comp_unit_die,
21477                                       fde->dw_fde_unlikely_section_label,
21478                                       fde->dw_fde_unlikely_section_end_label,
21479                                       &range_list_added);
21480             }
21481           else if (!fde->in_std_section)
21482             add_ranges_by_labels (comp_unit_die, fde->dw_fde_begin,
21483                                   fde->dw_fde_end, &range_list_added);
21484         }
21485
21486       if (range_list_added)
21487         add_ranges (NULL);
21488     }
21489
21490   /* Output location list section if necessary.  */
21491   if (have_location_lists)
21492     {
21493       /* Output the location lists info.  */
21494       switch_to_section (debug_loc_section);
21495       ASM_GENERATE_INTERNAL_LABEL (loc_section_label,
21496                                    DEBUG_LOC_SECTION_LABEL, 0);
21497       ASM_OUTPUT_LABEL (asm_out_file, loc_section_label);
21498       output_location_lists (die);
21499     }
21500
21501   if (debug_info_level >= DINFO_LEVEL_NORMAL)
21502     add_AT_lineptr (comp_unit_die, DW_AT_stmt_list,
21503                     debug_line_section_label);
21504
21505   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
21506     add_AT_macptr (comp_unit_die, DW_AT_macro_info, macinfo_section_label);
21507
21508   /* Output all of the compilation units.  We put the main one last so that
21509      the offsets are available to output_pubnames.  */
21510   for (node = limbo_die_list; node; node = node->next)
21511     output_comp_unit (node->die, 0);
21512
21513   comdat_type_table = htab_create (100, htab_ct_hash, htab_ct_eq, NULL);
21514   for (ctnode = comdat_type_list; ctnode != NULL; ctnode = ctnode->next)
21515     {
21516       void **slot = htab_find_slot (comdat_type_table, ctnode, INSERT);
21517
21518       /* Don't output duplicate types.  */
21519       if (*slot != HTAB_EMPTY_ENTRY)
21520         continue;
21521
21522       /* Add a pointer to the line table for the main compilation unit
21523          so that the debugger can make sense of DW_AT_decl_file
21524          attributes.  */
21525       if (debug_info_level >= DINFO_LEVEL_NORMAL)
21526         add_AT_lineptr (ctnode->root_die, DW_AT_stmt_list,
21527                         debug_line_section_label);
21528
21529       output_comdat_type_unit (ctnode);
21530       *slot = ctnode;
21531     }
21532   htab_delete (comdat_type_table);
21533
21534   /* Output the main compilation unit if non-empty or if .debug_macinfo
21535      has been emitted.  */
21536   output_comp_unit (comp_unit_die, debug_info_level >= DINFO_LEVEL_VERBOSE);
21537
21538   /* Output the abbreviation table.  */
21539   switch_to_section (debug_abbrev_section);
21540   output_abbrev_section ();
21541
21542   /* Output public names table if necessary.  */
21543   if (!VEC_empty (pubname_entry, pubname_table))
21544     {
21545       switch_to_section (debug_pubnames_section);
21546       output_pubnames (pubname_table);
21547     }
21548
21549   /* Output public types table if necessary.  */
21550   /* ??? Only defined by DWARF3, but emitted by Darwin for DWARF2.
21551      It shouldn't hurt to emit it always, since pure DWARF2 consumers
21552      simply won't look for the section.  */
21553   if (!VEC_empty (pubname_entry, pubtype_table))
21554     {
21555       switch_to_section (debug_pubtypes_section);
21556       output_pubnames (pubtype_table);
21557     }
21558
21559   /* Output direct and virtual call tables if necessary.  */
21560   if (!VEC_empty (dcall_entry, dcall_table))
21561     {
21562       switch_to_section (debug_dcall_section);
21563       output_dcall_table ();
21564     }
21565   if (!VEC_empty (vcall_entry, vcall_table))
21566     {
21567       switch_to_section (debug_vcall_section);
21568       output_vcall_table ();
21569     }
21570
21571   /* Output the address range information.  We only put functions in the arange
21572      table, so don't write it out if we don't have any.  */
21573   if (fde_table_in_use)
21574     {
21575       switch_to_section (debug_aranges_section);
21576       output_aranges ();
21577     }
21578
21579   /* Output ranges section if necessary.  */
21580   if (ranges_table_in_use)
21581     {
21582       switch_to_section (debug_ranges_section);
21583       ASM_OUTPUT_LABEL (asm_out_file, ranges_section_label);
21584       output_ranges ();
21585     }
21586
21587   /* Output the source line correspondence table.  We must do this
21588      even if there is no line information.  Otherwise, on an empty
21589      translation unit, we will generate a present, but empty,
21590      .debug_info section.  IRIX 6.5 `nm' will then complain when
21591      examining the file.  This is done late so that any filenames
21592      used by the debug_info section are marked as 'used'.  */
21593   if (! DWARF2_ASM_LINE_DEBUG_INFO)
21594     {
21595       switch_to_section (debug_line_section);
21596       output_line_info ();
21597     }
21598
21599   /* Have to end the macro section.  */
21600   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
21601     {
21602       switch_to_section (debug_macinfo_section);
21603       dw2_asm_output_data (1, 0, "End compilation unit");
21604     }
21605
21606   /* If we emitted any DW_FORM_strp form attribute, output the string
21607      table too.  */
21608   if (debug_str_hash)
21609     htab_traverse (debug_str_hash, output_indirect_string, NULL);
21610 }
21611 #else
21612
21613 /* This should never be used, but its address is needed for comparisons.  */
21614 const struct gcc_debug_hooks dwarf2_debug_hooks =
21615 {
21616   0,            /* init */
21617   0,            /* finish */
21618   0,            /* assembly_start */
21619   0,            /* define */
21620   0,            /* undef */
21621   0,            /* start_source_file */
21622   0,            /* end_source_file */
21623   0,            /* begin_block */
21624   0,            /* end_block */
21625   0,            /* ignore_block */
21626   0,            /* source_line */
21627   0,            /* begin_prologue */
21628   0,            /* end_prologue */
21629   0,            /* end_epilogue */
21630   0,            /* begin_function */
21631   0,            /* end_function */
21632   0,            /* function_decl */
21633   0,            /* global_decl */
21634   0,            /* type_decl */
21635   0,            /* imported_module_or_decl */
21636   0,            /* deferred_inline_function */
21637   0,            /* outlining_inline_function */
21638   0,            /* label */
21639   0,            /* handle_pch */
21640   0,            /* var_location */
21641   0,            /* switch_text_section */
21642   0,            /* direct_call */
21643   0,            /* virtual_call_token */
21644   0,            /* copy_call_info */
21645   0,            /* virtual_call */
21646   0,            /* set_name */
21647   0             /* start_end_main_source_file */
21648 };
21649
21650 #endif /* DWARF2_DEBUGGING_INFO */
21651
21652 #include "gt-dwarf2out.h"