OSDN Git Service

2009-07-23 Paul Thomas <pault@gcc.gnu.org>
[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 "rtl.h"
68 #include "hard-reg-set.h"
69 #include "regs.h"
70 #include "insn-config.h"
71 #include "reload.h"
72 #include "function.h"
73 #include "output.h"
74 #include "expr.h"
75 #include "libfuncs.h"
76 #include "except.h"
77 #include "dwarf2.h"
78 #include "dwarf2out.h"
79 #include "dwarf2asm.h"
80 #include "toplev.h"
81 #include "ggc.h"
82 #include "md5.h"
83 #include "tm_p.h"
84 #include "diagnostic.h"
85 #include "tree-pretty-print.h"
86 #include "debug.h"
87 #include "target.h"
88 #include "langhooks.h"
89 #include "hashtab.h"
90 #include "cgraph.h"
91 #include "input.h"
92 #include "gimple.h"
93 #include "tree-pass.h"
94 #include "tree-flow.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_vms_end_prologue;
303   const char *dw_fde_vms_begin_epilogue;
304   const char *dw_fde_hot_section_label;
305   const char *dw_fde_hot_section_end_label;
306   const char *dw_fde_unlikely_section_label;
307   const char *dw_fde_unlikely_section_end_label;
308   dw_cfi_ref dw_fde_cfi;
309   dw_cfi_ref dw_fde_switch_cfi; /* Last CFI before switching sections.  */
310   HOST_WIDE_INT stack_realignment;
311   unsigned funcdef_number;
312   /* Dynamic realign argument pointer register.  */
313   unsigned int drap_reg;
314   /* Virtual dynamic realign argument pointer register.  */
315   unsigned int vdrap_reg;
316   /* These 3 flags are copied from rtl_data in function.h.  */
317   unsigned all_throwers_are_sibcalls : 1;
318   unsigned uses_eh_lsda : 1;
319   unsigned nothrow : 1;
320   /* Whether we did stack realign in this call frame.  */
321   unsigned stack_realign : 1;
322   /* Whether dynamic realign argument pointer register has been saved.  */
323   unsigned drap_reg_saved: 1;
324   /* True iff dw_fde_begin label is in text_section or cold_text_section.  */
325   unsigned in_std_section : 1;
326   /* True iff dw_fde_unlikely_section_label is in text_section or
327      cold_text_section.  */
328   unsigned cold_in_std_section : 1;
329   /* True iff switched sections.  */
330   unsigned dw_fde_switched_sections : 1;
331   /* True iff switching from cold to hot section.  */
332   unsigned dw_fde_switched_cold_to_hot : 1;
333 }
334 dw_fde_node;
335
336 /* Maximum size (in bytes) of an artificially generated label.  */
337 #define MAX_ARTIFICIAL_LABEL_BYTES      30
338
339 /* The size of addresses as they appear in the Dwarf 2 data.
340    Some architectures use word addresses to refer to code locations,
341    but Dwarf 2 info always uses byte addresses.  On such machines,
342    Dwarf 2 addresses need to be larger than the architecture's
343    pointers.  */
344 #ifndef DWARF2_ADDR_SIZE
345 #define DWARF2_ADDR_SIZE (POINTER_SIZE / BITS_PER_UNIT)
346 #endif
347
348 /* The size in bytes of a DWARF field indicating an offset or length
349    relative to a debug info section, specified to be 4 bytes in the
350    DWARF-2 specification.  The SGI/MIPS ABI defines it to be the same
351    as PTR_SIZE.  */
352
353 #ifndef DWARF_OFFSET_SIZE
354 #define DWARF_OFFSET_SIZE 4
355 #endif
356
357 /* The size in bytes of a DWARF 4 type signature.  */
358
359 #ifndef DWARF_TYPE_SIGNATURE_SIZE
360 #define DWARF_TYPE_SIGNATURE_SIZE 8
361 #endif
362
363 /* According to the (draft) DWARF 3 specification, the initial length
364    should either be 4 or 12 bytes.  When it's 12 bytes, the first 4
365    bytes are 0xffffffff, followed by the length stored in the next 8
366    bytes.
367
368    However, the SGI/MIPS ABI uses an initial length which is equal to
369    DWARF_OFFSET_SIZE.  It is defined (elsewhere) accordingly.  */
370
371 #ifndef DWARF_INITIAL_LENGTH_SIZE
372 #define DWARF_INITIAL_LENGTH_SIZE (DWARF_OFFSET_SIZE == 4 ? 4 : 12)
373 #endif
374
375 /* Round SIZE up to the nearest BOUNDARY.  */
376 #define DWARF_ROUND(SIZE,BOUNDARY) \
377   ((((SIZE) + (BOUNDARY) - 1) / (BOUNDARY)) * (BOUNDARY))
378
379 /* Offsets recorded in opcodes are a multiple of this alignment factor.  */
380 #ifndef DWARF_CIE_DATA_ALIGNMENT
381 #ifdef STACK_GROWS_DOWNWARD
382 #define DWARF_CIE_DATA_ALIGNMENT (-((int) UNITS_PER_WORD))
383 #else
384 #define DWARF_CIE_DATA_ALIGNMENT ((int) UNITS_PER_WORD)
385 #endif
386 #endif
387
388 /* CIE identifier.  */
389 #if HOST_BITS_PER_WIDE_INT >= 64
390 #define DWARF_CIE_ID \
391   (unsigned HOST_WIDE_INT) (DWARF_OFFSET_SIZE == 4 ? DW_CIE_ID : DW64_CIE_ID)
392 #else
393 #define DWARF_CIE_ID DW_CIE_ID
394 #endif
395
396 /* A pointer to the base of a table that contains frame description
397    information for each routine.  */
398 static GTY((length ("fde_table_allocated"))) dw_fde_ref fde_table;
399
400 /* Number of elements currently allocated for fde_table.  */
401 static GTY(()) unsigned fde_table_allocated;
402
403 /* Number of elements in fde_table currently in use.  */
404 static GTY(()) unsigned fde_table_in_use;
405
406 /* Size (in elements) of increments by which we may expand the
407    fde_table.  */
408 #define FDE_TABLE_INCREMENT 256
409
410 /* Get the current fde_table entry we should use.  */
411
412 static inline dw_fde_ref
413 current_fde (void)
414 {
415   return fde_table_in_use ? &fde_table[fde_table_in_use - 1] : NULL;
416 }
417
418 /* A list of call frame insns for the CIE.  */
419 static GTY(()) dw_cfi_ref cie_cfi_head;
420
421 #if defined (DWARF2_DEBUGGING_INFO) || defined (DWARF2_UNWIND_INFO)
422 /* Some DWARF extensions (e.g., MIPS/SGI) implement a subprogram
423    attribute that accelerates the lookup of the FDE associated
424    with the subprogram.  This variable holds the table index of the FDE
425    associated with the current function (body) definition.  */
426 static unsigned current_funcdef_fde;
427 #endif
428
429 struct GTY(()) indirect_string_node {
430   const char *str;
431   unsigned int refcount;
432   enum dwarf_form form;
433   char *label;
434 };
435
436 static GTY ((param_is (struct indirect_string_node))) htab_t debug_str_hash;
437
438 /* True if the compilation unit has location entries that reference
439    debug strings.  */
440 static GTY(()) bool debug_str_hash_forced = false;
441
442 static GTY(()) int dw2_string_counter;
443 static GTY(()) unsigned long dwarf2out_cfi_label_num;
444
445 /* True if the compilation unit places functions in more than one section.  */
446 static GTY(()) bool have_multiple_function_sections = false;
447
448 /* Whether the default text and cold text sections have been used at all.  */
449
450 static GTY(()) bool text_section_used = false;
451 static GTY(()) bool cold_text_section_used = false;
452
453 /* The default cold text section.  */
454 static GTY(()) section *cold_text_section;
455
456 #if defined (DWARF2_DEBUGGING_INFO) || defined (DWARF2_UNWIND_INFO)
457
458 /* Forward declarations for functions defined in this file.  */
459
460 static char *stripattributes (const char *);
461 static const char *dwarf_cfi_name (unsigned);
462 static dw_cfi_ref new_cfi (void);
463 static void add_cfi (dw_cfi_ref *, dw_cfi_ref);
464 static void add_fde_cfi (const char *, dw_cfi_ref);
465 static void lookup_cfa_1 (dw_cfi_ref, dw_cfa_location *, dw_cfa_location *);
466 static void lookup_cfa (dw_cfa_location *);
467 static void reg_save (const char *, unsigned, unsigned, HOST_WIDE_INT);
468 #ifdef DWARF2_UNWIND_INFO
469 static void initial_return_save (rtx);
470 #endif
471 static HOST_WIDE_INT stack_adjust_offset (const_rtx, HOST_WIDE_INT,
472                                           HOST_WIDE_INT);
473 static void output_cfi (dw_cfi_ref, dw_fde_ref, int);
474 static void output_cfi_directive (dw_cfi_ref);
475 static void output_call_frame_info (int);
476 static void dwarf2out_note_section_used (void);
477 static void flush_queued_reg_saves (void);
478 static bool clobbers_queued_reg_save (const_rtx);
479 static void dwarf2out_frame_debug_expr (rtx, const char *);
480
481 /* Support for complex CFA locations.  */
482 static void output_cfa_loc (dw_cfi_ref);
483 static void output_cfa_loc_raw (dw_cfi_ref);
484 static void get_cfa_from_loc_descr (dw_cfa_location *,
485                                     struct dw_loc_descr_struct *);
486 static struct dw_loc_descr_struct *build_cfa_loc
487   (dw_cfa_location *, HOST_WIDE_INT);
488 static struct dw_loc_descr_struct *build_cfa_aligned_loc
489   (HOST_WIDE_INT, HOST_WIDE_INT);
490 static void def_cfa_1 (const char *, dw_cfa_location *);
491
492 /* How to start an assembler comment.  */
493 #ifndef ASM_COMMENT_START
494 #define ASM_COMMENT_START ";#"
495 #endif
496
497 /* Data and reference forms for relocatable data.  */
498 #define DW_FORM_data (DWARF_OFFSET_SIZE == 8 ? DW_FORM_data8 : DW_FORM_data4)
499 #define DW_FORM_ref (DWARF_OFFSET_SIZE == 8 ? DW_FORM_ref8 : DW_FORM_ref4)
500
501 #ifndef DEBUG_FRAME_SECTION
502 #define DEBUG_FRAME_SECTION     ".debug_frame"
503 #endif
504
505 #ifndef FUNC_BEGIN_LABEL
506 #define FUNC_BEGIN_LABEL        "LFB"
507 #endif
508
509 #ifndef FUNC_END_LABEL
510 #define FUNC_END_LABEL          "LFE"
511 #endif
512
513 #ifndef PROLOGUE_END_LABEL
514 #define PROLOGUE_END_LABEL      "LPE"
515 #endif
516
517 #ifndef EPILOGUE_BEGIN_LABEL
518 #define EPILOGUE_BEGIN_LABEL    "LEB"
519 #endif
520
521 #ifndef FRAME_BEGIN_LABEL
522 #define FRAME_BEGIN_LABEL       "Lframe"
523 #endif
524 #define CIE_AFTER_SIZE_LABEL    "LSCIE"
525 #define CIE_END_LABEL           "LECIE"
526 #define FDE_LABEL               "LSFDE"
527 #define FDE_AFTER_SIZE_LABEL    "LASFDE"
528 #define FDE_END_LABEL           "LEFDE"
529 #define LINE_NUMBER_BEGIN_LABEL "LSLT"
530 #define LINE_NUMBER_END_LABEL   "LELT"
531 #define LN_PROLOG_AS_LABEL      "LASLTP"
532 #define LN_PROLOG_END_LABEL     "LELTP"
533 #define DIE_LABEL_PREFIX        "DW"
534
535 /* The DWARF 2 CFA column which tracks the return address.  Normally this
536    is the column for PC, or the first column after all of the hard
537    registers.  */
538 #ifndef DWARF_FRAME_RETURN_COLUMN
539 #ifdef PC_REGNUM
540 #define DWARF_FRAME_RETURN_COLUMN       DWARF_FRAME_REGNUM (PC_REGNUM)
541 #else
542 #define DWARF_FRAME_RETURN_COLUMN       DWARF_FRAME_REGISTERS
543 #endif
544 #endif
545
546 /* The mapping from gcc register number to DWARF 2 CFA column number.  By
547    default, we just provide columns for all registers.  */
548 #ifndef DWARF_FRAME_REGNUM
549 #define DWARF_FRAME_REGNUM(REG) DBX_REGISTER_NUMBER (REG)
550 #endif
551 \f
552 /* Hook used by __throw.  */
553
554 rtx
555 expand_builtin_dwarf_sp_column (void)
556 {
557   unsigned int dwarf_regnum = DWARF_FRAME_REGNUM (STACK_POINTER_REGNUM);
558   return GEN_INT (DWARF2_FRAME_REG_OUT (dwarf_regnum, 1));
559 }
560
561 /* Return a pointer to a copy of the section string name S with all
562    attributes stripped off, and an asterisk prepended (for assemble_name).  */
563
564 static inline char *
565 stripattributes (const char *s)
566 {
567   char *stripped = XNEWVEC (char, strlen (s) + 2);
568   char *p = stripped;
569
570   *p++ = '*';
571
572   while (*s && *s != ',')
573     *p++ = *s++;
574
575   *p = '\0';
576   return stripped;
577 }
578
579 /* MEM is a memory reference for the register size table, each element of
580    which has mode MODE.  Initialize column C as a return address column.  */
581
582 static void
583 init_return_column_size (enum machine_mode mode, rtx mem, unsigned int c)
584 {
585   HOST_WIDE_INT offset = c * GET_MODE_SIZE (mode);
586   HOST_WIDE_INT size = GET_MODE_SIZE (Pmode);
587   emit_move_insn (adjust_address (mem, mode, offset), GEN_INT (size));
588 }
589
590 /* Divide OFF by DWARF_CIE_DATA_ALIGNMENT, asserting no remainder.  */
591
592 static inline HOST_WIDE_INT
593 div_data_align (HOST_WIDE_INT off)
594 {
595   HOST_WIDE_INT r = off / DWARF_CIE_DATA_ALIGNMENT;
596   gcc_assert (r * DWARF_CIE_DATA_ALIGNMENT == off);
597   return r;
598 }
599
600 /* Return true if we need a signed version of a given opcode
601    (e.g. DW_CFA_offset_extended_sf vs DW_CFA_offset_extended).  */
602
603 static inline bool
604 need_data_align_sf_opcode (HOST_WIDE_INT off)
605 {
606   return DWARF_CIE_DATA_ALIGNMENT < 0 ? off > 0 : off < 0;
607 }
608
609 /* Generate code to initialize the register size table.  */
610
611 void
612 expand_builtin_init_dwarf_reg_sizes (tree address)
613 {
614   unsigned int i;
615   enum machine_mode mode = TYPE_MODE (char_type_node);
616   rtx addr = expand_normal (address);
617   rtx mem = gen_rtx_MEM (BLKmode, addr);
618   bool wrote_return_column = false;
619
620   for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
621     {
622       int rnum = DWARF2_FRAME_REG_OUT (DWARF_FRAME_REGNUM (i), 1);
623
624       if (rnum < DWARF_FRAME_REGISTERS)
625         {
626           HOST_WIDE_INT offset = rnum * GET_MODE_SIZE (mode);
627           enum machine_mode save_mode = reg_raw_mode[i];
628           HOST_WIDE_INT size;
629
630           if (HARD_REGNO_CALL_PART_CLOBBERED (i, save_mode))
631             save_mode = choose_hard_reg_mode (i, 1, true);
632           if (DWARF_FRAME_REGNUM (i) == DWARF_FRAME_RETURN_COLUMN)
633             {
634               if (save_mode == VOIDmode)
635                 continue;
636               wrote_return_column = true;
637             }
638           size = GET_MODE_SIZE (save_mode);
639           if (offset < 0)
640             continue;
641
642           emit_move_insn (adjust_address (mem, mode, offset),
643                           gen_int_mode (size, mode));
644         }
645     }
646
647   if (!wrote_return_column)
648     init_return_column_size (mode, mem, DWARF_FRAME_RETURN_COLUMN);
649
650 #ifdef DWARF_ALT_FRAME_RETURN_COLUMN
651   init_return_column_size (mode, mem, DWARF_ALT_FRAME_RETURN_COLUMN);
652 #endif
653
654   targetm.init_dwarf_reg_sizes_extra (address);
655 }
656
657 /* Convert a DWARF call frame info. operation to its string name */
658
659 static const char *
660 dwarf_cfi_name (unsigned int cfi_opc)
661 {
662   switch (cfi_opc)
663     {
664     case DW_CFA_advance_loc:
665       return "DW_CFA_advance_loc";
666     case DW_CFA_offset:
667       return "DW_CFA_offset";
668     case DW_CFA_restore:
669       return "DW_CFA_restore";
670     case DW_CFA_nop:
671       return "DW_CFA_nop";
672     case DW_CFA_set_loc:
673       return "DW_CFA_set_loc";
674     case DW_CFA_advance_loc1:
675       return "DW_CFA_advance_loc1";
676     case DW_CFA_advance_loc2:
677       return "DW_CFA_advance_loc2";
678     case DW_CFA_advance_loc4:
679       return "DW_CFA_advance_loc4";
680     case DW_CFA_offset_extended:
681       return "DW_CFA_offset_extended";
682     case DW_CFA_restore_extended:
683       return "DW_CFA_restore_extended";
684     case DW_CFA_undefined:
685       return "DW_CFA_undefined";
686     case DW_CFA_same_value:
687       return "DW_CFA_same_value";
688     case DW_CFA_register:
689       return "DW_CFA_register";
690     case DW_CFA_remember_state:
691       return "DW_CFA_remember_state";
692     case DW_CFA_restore_state:
693       return "DW_CFA_restore_state";
694     case DW_CFA_def_cfa:
695       return "DW_CFA_def_cfa";
696     case DW_CFA_def_cfa_register:
697       return "DW_CFA_def_cfa_register";
698     case DW_CFA_def_cfa_offset:
699       return "DW_CFA_def_cfa_offset";
700
701     /* DWARF 3 */
702     case DW_CFA_def_cfa_expression:
703       return "DW_CFA_def_cfa_expression";
704     case DW_CFA_expression:
705       return "DW_CFA_expression";
706     case DW_CFA_offset_extended_sf:
707       return "DW_CFA_offset_extended_sf";
708     case DW_CFA_def_cfa_sf:
709       return "DW_CFA_def_cfa_sf";
710     case DW_CFA_def_cfa_offset_sf:
711       return "DW_CFA_def_cfa_offset_sf";
712
713     /* SGI/MIPS specific */
714     case DW_CFA_MIPS_advance_loc8:
715       return "DW_CFA_MIPS_advance_loc8";
716
717     /* GNU extensions */
718     case DW_CFA_GNU_window_save:
719       return "DW_CFA_GNU_window_save";
720     case DW_CFA_GNU_args_size:
721       return "DW_CFA_GNU_args_size";
722     case DW_CFA_GNU_negative_offset_extended:
723       return "DW_CFA_GNU_negative_offset_extended";
724
725     default:
726       return "DW_CFA_<unknown>";
727     }
728 }
729
730 /* Return a pointer to a newly allocated Call Frame Instruction.  */
731
732 static inline dw_cfi_ref
733 new_cfi (void)
734 {
735   dw_cfi_ref cfi = ggc_alloc_dw_cfi_node ();
736
737   cfi->dw_cfi_next = NULL;
738   cfi->dw_cfi_oprnd1.dw_cfi_reg_num = 0;
739   cfi->dw_cfi_oprnd2.dw_cfi_reg_num = 0;
740
741   return cfi;
742 }
743
744 /* Add a Call Frame Instruction to list of instructions.  */
745
746 static inline void
747 add_cfi (dw_cfi_ref *list_head, dw_cfi_ref cfi)
748 {
749   dw_cfi_ref *p;
750   dw_fde_ref fde = current_fde ();
751
752   /* When DRAP is used, CFA is defined with an expression.  Redefine
753      CFA may lead to a different CFA value.   */
754   /* ??? Of course, this heuristic fails when we're annotating epilogues,
755      because of course we'll always want to redefine the CFA back to the
756      stack pointer on the way out.  Where should we move this check?  */
757   if (0 && fde && fde->drap_reg != INVALID_REGNUM)
758     switch (cfi->dw_cfi_opc)
759       {
760         case DW_CFA_def_cfa_register:
761         case DW_CFA_def_cfa_offset:
762         case DW_CFA_def_cfa_offset_sf:
763         case DW_CFA_def_cfa:
764         case DW_CFA_def_cfa_sf:
765           gcc_unreachable ();
766
767         default:
768           break;
769       }
770
771   /* Find the end of the chain.  */
772   for (p = list_head; (*p) != NULL; p = &(*p)->dw_cfi_next)
773     ;
774
775   *p = cfi;
776 }
777
778 /* Generate a new label for the CFI info to refer to.  FORCE is true
779    if a label needs to be output even when using .cfi_* directives.  */
780
781 char *
782 dwarf2out_cfi_label (bool force)
783 {
784   static char label[20];
785
786   if (!force && dwarf2out_do_cfi_asm ())
787     {
788       /* In this case, we will be emitting the asm directive instead of
789          the label, so just return a placeholder to keep the rest of the
790          interfaces happy.  */
791       strcpy (label, "<do not output>");
792     }
793   else
794     {
795       ASM_GENERATE_INTERNAL_LABEL (label, "LCFI", dwarf2out_cfi_label_num++);
796       ASM_OUTPUT_LABEL (asm_out_file, label);
797     }
798
799   return label;
800 }
801
802 /* True if remember_state should be emitted before following CFI directive.  */
803 static bool emit_cfa_remember;
804
805 /* Add CFI to the current fde at the PC value indicated by LABEL if specified,
806    or to the CIE if LABEL is NULL.  */
807
808 static void
809 add_fde_cfi (const char *label, dw_cfi_ref cfi)
810 {
811   dw_cfi_ref *list_head;
812
813   if (emit_cfa_remember)
814     {
815       dw_cfi_ref cfi_remember;
816
817       /* Emit the state save.  */
818       emit_cfa_remember = false;
819       cfi_remember = new_cfi ();
820       cfi_remember->dw_cfi_opc = DW_CFA_remember_state;
821       add_fde_cfi (label, cfi_remember);
822     }
823
824   list_head = &cie_cfi_head;
825
826   if (dwarf2out_do_cfi_asm ())
827     {
828       if (label)
829         {
830           dw_fde_ref fde = current_fde ();
831
832           gcc_assert (fde != NULL);
833
834           /* We still have to add the cfi to the list so that lookup_cfa
835              works later on.  When -g2 and above we even need to force
836              emitting of CFI labels and add to list a DW_CFA_set_loc for
837              convert_cfa_to_fb_loc_list purposes.  If we're generating
838              DWARF3 output we use DW_OP_call_frame_cfa and so don't use
839              convert_cfa_to_fb_loc_list.  */
840           if (dwarf_version == 2
841               && debug_info_level > DINFO_LEVEL_TERSE
842               && (write_symbols == DWARF2_DEBUG
843                   || write_symbols == VMS_AND_DWARF2_DEBUG))
844             {
845               switch (cfi->dw_cfi_opc)
846                 {
847                 case DW_CFA_def_cfa_offset:
848                 case DW_CFA_def_cfa_offset_sf:
849                 case DW_CFA_def_cfa_register:
850                 case DW_CFA_def_cfa:
851                 case DW_CFA_def_cfa_sf:
852                 case DW_CFA_def_cfa_expression:
853                 case DW_CFA_restore_state:
854                   if (*label == 0 || strcmp (label, "<do not output>") == 0)
855                     label = dwarf2out_cfi_label (true);
856
857                   if (fde->dw_fde_current_label == NULL
858                       || strcmp (label, fde->dw_fde_current_label) != 0)
859                     {
860                       dw_cfi_ref xcfi;
861
862                       label = xstrdup (label);
863
864                       /* Set the location counter to the new label.  */
865                       xcfi = new_cfi ();
866                       /* It doesn't metter whether DW_CFA_set_loc
867                          or DW_CFA_advance_loc4 is added here, those aren't
868                          emitted into assembly, only looked up by
869                          convert_cfa_to_fb_loc_list.  */
870                       xcfi->dw_cfi_opc = DW_CFA_set_loc;
871                       xcfi->dw_cfi_oprnd1.dw_cfi_addr = label;
872                       add_cfi (&fde->dw_fde_cfi, xcfi);
873                       fde->dw_fde_current_label = label;
874                     }
875                   break;
876                 default:
877                   break;
878                 }
879             }
880
881           output_cfi_directive (cfi);
882
883           list_head = &fde->dw_fde_cfi;
884         }
885       /* ??? If this is a CFI for the CIE, we don't emit.  This
886          assumes that the standard CIE contents that the assembler
887          uses matches the standard CIE contents that the compiler
888          uses.  This is probably a bad assumption.  I'm not quite
889          sure how to address this for now.  */
890     }
891   else if (label)
892     {
893       dw_fde_ref fde = current_fde ();
894
895       gcc_assert (fde != NULL);
896
897       if (*label == 0)
898         label = dwarf2out_cfi_label (false);
899
900       if (fde->dw_fde_current_label == NULL
901           || strcmp (label, fde->dw_fde_current_label) != 0)
902         {
903           dw_cfi_ref xcfi;
904
905           label = xstrdup (label);
906
907           /* Set the location counter to the new label.  */
908           xcfi = new_cfi ();
909           /* If we have a current label, advance from there, otherwise
910              set the location directly using set_loc.  */
911           xcfi->dw_cfi_opc = fde->dw_fde_current_label
912                              ? DW_CFA_advance_loc4
913                              : DW_CFA_set_loc;
914           xcfi->dw_cfi_oprnd1.dw_cfi_addr = label;
915           add_cfi (&fde->dw_fde_cfi, xcfi);
916
917           fde->dw_fde_current_label = label;
918         }
919
920       list_head = &fde->dw_fde_cfi;
921     }
922
923   add_cfi (list_head, cfi);
924 }
925
926 /* Subroutine of lookup_cfa.  */
927
928 static void
929 lookup_cfa_1 (dw_cfi_ref cfi, dw_cfa_location *loc, dw_cfa_location *remember)
930 {
931   switch (cfi->dw_cfi_opc)
932     {
933     case DW_CFA_def_cfa_offset:
934     case DW_CFA_def_cfa_offset_sf:
935       loc->offset = cfi->dw_cfi_oprnd1.dw_cfi_offset;
936       break;
937     case DW_CFA_def_cfa_register:
938       loc->reg = cfi->dw_cfi_oprnd1.dw_cfi_reg_num;
939       break;
940     case DW_CFA_def_cfa:
941     case DW_CFA_def_cfa_sf:
942       loc->reg = cfi->dw_cfi_oprnd1.dw_cfi_reg_num;
943       loc->offset = cfi->dw_cfi_oprnd2.dw_cfi_offset;
944       break;
945     case DW_CFA_def_cfa_expression:
946       get_cfa_from_loc_descr (loc, cfi->dw_cfi_oprnd1.dw_cfi_loc);
947       break;
948
949     case DW_CFA_remember_state:
950       gcc_assert (!remember->in_use);
951       *remember = *loc;
952       remember->in_use = 1;
953       break;
954     case DW_CFA_restore_state:
955       gcc_assert (remember->in_use);
956       *loc = *remember;
957       remember->in_use = 0;
958       break;
959
960     default:
961       break;
962     }
963 }
964
965 /* Find the previous value for the CFA.  */
966
967 static void
968 lookup_cfa (dw_cfa_location *loc)
969 {
970   dw_cfi_ref cfi;
971   dw_fde_ref fde;
972   dw_cfa_location remember;
973
974   memset (loc, 0, sizeof (*loc));
975   loc->reg = INVALID_REGNUM;
976   remember = *loc;
977
978   for (cfi = cie_cfi_head; cfi; cfi = cfi->dw_cfi_next)
979     lookup_cfa_1 (cfi, loc, &remember);
980
981   fde = current_fde ();
982   if (fde)
983     for (cfi = fde->dw_fde_cfi; cfi; cfi = cfi->dw_cfi_next)
984       lookup_cfa_1 (cfi, loc, &remember);
985 }
986
987 /* The current rule for calculating the DWARF2 canonical frame address.  */
988 static dw_cfa_location cfa;
989
990 /* The register used for saving registers to the stack, and its offset
991    from the CFA.  */
992 static dw_cfa_location cfa_store;
993
994 /* The current save location around an epilogue.  */
995 static dw_cfa_location cfa_remember;
996
997 /* The running total of the size of arguments pushed onto the stack.  */
998 static HOST_WIDE_INT args_size;
999
1000 /* The last args_size we actually output.  */
1001 static HOST_WIDE_INT old_args_size;
1002
1003 /* Entry point to update the canonical frame address (CFA).
1004    LABEL is passed to add_fde_cfi.  The value of CFA is now to be
1005    calculated from REG+OFFSET.  */
1006
1007 void
1008 dwarf2out_def_cfa (const char *label, unsigned int reg, HOST_WIDE_INT offset)
1009 {
1010   dw_cfa_location loc;
1011   loc.indirect = 0;
1012   loc.base_offset = 0;
1013   loc.reg = reg;
1014   loc.offset = offset;
1015   def_cfa_1 (label, &loc);
1016 }
1017
1018 /* Determine if two dw_cfa_location structures define the same data.  */
1019
1020 static bool
1021 cfa_equal_p (const dw_cfa_location *loc1, const dw_cfa_location *loc2)
1022 {
1023   return (loc1->reg == loc2->reg
1024           && loc1->offset == loc2->offset
1025           && loc1->indirect == loc2->indirect
1026           && (loc1->indirect == 0
1027               || loc1->base_offset == loc2->base_offset));
1028 }
1029
1030 /* This routine does the actual work.  The CFA is now calculated from
1031    the dw_cfa_location structure.  */
1032
1033 static void
1034 def_cfa_1 (const char *label, dw_cfa_location *loc_p)
1035 {
1036   dw_cfi_ref cfi;
1037   dw_cfa_location old_cfa, loc;
1038
1039   cfa = *loc_p;
1040   loc = *loc_p;
1041
1042   if (cfa_store.reg == loc.reg && loc.indirect == 0)
1043     cfa_store.offset = loc.offset;
1044
1045   loc.reg = DWARF_FRAME_REGNUM (loc.reg);
1046   lookup_cfa (&old_cfa);
1047
1048   /* If nothing changed, no need to issue any call frame instructions.  */
1049   if (cfa_equal_p (&loc, &old_cfa))
1050     return;
1051
1052   cfi = new_cfi ();
1053
1054   if (loc.reg == old_cfa.reg && !loc.indirect && !old_cfa.indirect)
1055     {
1056       /* Construct a "DW_CFA_def_cfa_offset <offset>" instruction, indicating
1057          the CFA register did not change but the offset did.  The data
1058          factoring for DW_CFA_def_cfa_offset_sf happens in output_cfi, or
1059          in the assembler via the .cfi_def_cfa_offset directive.  */
1060       if (loc.offset < 0)
1061         cfi->dw_cfi_opc = DW_CFA_def_cfa_offset_sf;
1062       else
1063         cfi->dw_cfi_opc = DW_CFA_def_cfa_offset;
1064       cfi->dw_cfi_oprnd1.dw_cfi_offset = loc.offset;
1065     }
1066
1067 #ifndef MIPS_DEBUGGING_INFO  /* SGI dbx thinks this means no offset.  */
1068   else if (loc.offset == old_cfa.offset
1069            && old_cfa.reg != INVALID_REGNUM
1070            && !loc.indirect
1071            && !old_cfa.indirect)
1072     {
1073       /* Construct a "DW_CFA_def_cfa_register <register>" instruction,
1074          indicating the CFA register has changed to <register> but the
1075          offset has not changed.  */
1076       cfi->dw_cfi_opc = DW_CFA_def_cfa_register;
1077       cfi->dw_cfi_oprnd1.dw_cfi_reg_num = loc.reg;
1078     }
1079 #endif
1080
1081   else if (loc.indirect == 0)
1082     {
1083       /* Construct a "DW_CFA_def_cfa <register> <offset>" instruction,
1084          indicating the CFA register has changed to <register> with
1085          the specified offset.  The data factoring for DW_CFA_def_cfa_sf
1086          happens in output_cfi, or in the assembler via the .cfi_def_cfa
1087          directive.  */
1088       if (loc.offset < 0)
1089         cfi->dw_cfi_opc = DW_CFA_def_cfa_sf;
1090       else
1091         cfi->dw_cfi_opc = DW_CFA_def_cfa;
1092       cfi->dw_cfi_oprnd1.dw_cfi_reg_num = loc.reg;
1093       cfi->dw_cfi_oprnd2.dw_cfi_offset = loc.offset;
1094     }
1095   else
1096     {
1097       /* Construct a DW_CFA_def_cfa_expression instruction to
1098          calculate the CFA using a full location expression since no
1099          register-offset pair is available.  */
1100       struct dw_loc_descr_struct *loc_list;
1101
1102       cfi->dw_cfi_opc = DW_CFA_def_cfa_expression;
1103       loc_list = build_cfa_loc (&loc, 0);
1104       cfi->dw_cfi_oprnd1.dw_cfi_loc = loc_list;
1105     }
1106
1107   add_fde_cfi (label, cfi);
1108 }
1109
1110 /* Add the CFI for saving a register.  REG is the CFA column number.
1111    LABEL is passed to add_fde_cfi.
1112    If SREG is -1, the register is saved at OFFSET from the CFA;
1113    otherwise it is saved in SREG.  */
1114
1115 static void
1116 reg_save (const char *label, unsigned int reg, unsigned int sreg, HOST_WIDE_INT offset)
1117 {
1118   dw_cfi_ref cfi = new_cfi ();
1119   dw_fde_ref fde = current_fde ();
1120
1121   cfi->dw_cfi_oprnd1.dw_cfi_reg_num = reg;
1122
1123   /* When stack is aligned, store REG using DW_CFA_expression with
1124      FP.  */
1125   if (fde
1126       && fde->stack_realign
1127       && sreg == INVALID_REGNUM)
1128     {
1129       cfi->dw_cfi_opc = DW_CFA_expression;
1130       cfi->dw_cfi_oprnd1.dw_cfi_reg_num = reg;
1131       cfi->dw_cfi_oprnd2.dw_cfi_loc
1132         = build_cfa_aligned_loc (offset, fde->stack_realignment);
1133     }
1134   else if (sreg == INVALID_REGNUM)
1135     {
1136       if (need_data_align_sf_opcode (offset))
1137         cfi->dw_cfi_opc = DW_CFA_offset_extended_sf;
1138       else if (reg & ~0x3f)
1139         cfi->dw_cfi_opc = DW_CFA_offset_extended;
1140       else
1141         cfi->dw_cfi_opc = DW_CFA_offset;
1142       cfi->dw_cfi_oprnd2.dw_cfi_offset = offset;
1143     }
1144   else if (sreg == reg)
1145     cfi->dw_cfi_opc = DW_CFA_same_value;
1146   else
1147     {
1148       cfi->dw_cfi_opc = DW_CFA_register;
1149       cfi->dw_cfi_oprnd2.dw_cfi_reg_num = sreg;
1150     }
1151
1152   add_fde_cfi (label, cfi);
1153 }
1154
1155 /* Add the CFI for saving a register window.  LABEL is passed to reg_save.
1156    This CFI tells the unwinder that it needs to restore the window registers
1157    from the previous frame's window save area.
1158
1159    ??? Perhaps we should note in the CIE where windows are saved (instead of
1160    assuming 0(cfa)) and what registers are in the window.  */
1161
1162 void
1163 dwarf2out_window_save (const char *label)
1164 {
1165   dw_cfi_ref cfi = new_cfi ();
1166
1167   cfi->dw_cfi_opc = DW_CFA_GNU_window_save;
1168   add_fde_cfi (label, cfi);
1169 }
1170
1171 /* Entry point for saving a register to the stack.  REG is the GCC register
1172    number.  LABEL and OFFSET are passed to reg_save.  */
1173
1174 void
1175 dwarf2out_reg_save (const char *label, unsigned int reg, HOST_WIDE_INT offset)
1176 {
1177   reg_save (label, DWARF_FRAME_REGNUM (reg), INVALID_REGNUM, offset);
1178 }
1179
1180 /* Entry point for saving the return address in the stack.
1181    LABEL and OFFSET are passed to reg_save.  */
1182
1183 void
1184 dwarf2out_return_save (const char *label, HOST_WIDE_INT offset)
1185 {
1186   reg_save (label, DWARF_FRAME_RETURN_COLUMN, INVALID_REGNUM, offset);
1187 }
1188
1189 /* Entry point for saving the return address in a register.
1190    LABEL and SREG are passed to reg_save.  */
1191
1192 void
1193 dwarf2out_return_reg (const char *label, unsigned int sreg)
1194 {
1195   reg_save (label, DWARF_FRAME_RETURN_COLUMN, DWARF_FRAME_REGNUM (sreg), 0);
1196 }
1197
1198 #ifdef DWARF2_UNWIND_INFO
1199 /* Record the initial position of the return address.  RTL is
1200    INCOMING_RETURN_ADDR_RTX.  */
1201
1202 static void
1203 initial_return_save (rtx rtl)
1204 {
1205   unsigned int reg = INVALID_REGNUM;
1206   HOST_WIDE_INT offset = 0;
1207
1208   switch (GET_CODE (rtl))
1209     {
1210     case REG:
1211       /* RA is in a register.  */
1212       reg = DWARF_FRAME_REGNUM (REGNO (rtl));
1213       break;
1214
1215     case MEM:
1216       /* RA is on the stack.  */
1217       rtl = XEXP (rtl, 0);
1218       switch (GET_CODE (rtl))
1219         {
1220         case REG:
1221           gcc_assert (REGNO (rtl) == STACK_POINTER_REGNUM);
1222           offset = 0;
1223           break;
1224
1225         case PLUS:
1226           gcc_assert (REGNO (XEXP (rtl, 0)) == STACK_POINTER_REGNUM);
1227           offset = INTVAL (XEXP (rtl, 1));
1228           break;
1229
1230         case MINUS:
1231           gcc_assert (REGNO (XEXP (rtl, 0)) == STACK_POINTER_REGNUM);
1232           offset = -INTVAL (XEXP (rtl, 1));
1233           break;
1234
1235         default:
1236           gcc_unreachable ();
1237         }
1238
1239       break;
1240
1241     case PLUS:
1242       /* The return address is at some offset from any value we can
1243          actually load.  For instance, on the SPARC it is in %i7+8. Just
1244          ignore the offset for now; it doesn't matter for unwinding frames.  */
1245       gcc_assert (CONST_INT_P (XEXP (rtl, 1)));
1246       initial_return_save (XEXP (rtl, 0));
1247       return;
1248
1249     default:
1250       gcc_unreachable ();
1251     }
1252
1253   if (reg != DWARF_FRAME_RETURN_COLUMN)
1254     reg_save (NULL, DWARF_FRAME_RETURN_COLUMN, reg, offset - cfa.offset);
1255 }
1256 #endif
1257
1258 /* Given a SET, calculate the amount of stack adjustment it
1259    contains.  */
1260
1261 static HOST_WIDE_INT
1262 stack_adjust_offset (const_rtx pattern, HOST_WIDE_INT cur_args_size,
1263                      HOST_WIDE_INT cur_offset)
1264 {
1265   const_rtx src = SET_SRC (pattern);
1266   const_rtx dest = SET_DEST (pattern);
1267   HOST_WIDE_INT offset = 0;
1268   enum rtx_code code;
1269
1270   if (dest == stack_pointer_rtx)
1271     {
1272       code = GET_CODE (src);
1273
1274       /* Assume (set (reg sp) (reg whatever)) sets args_size
1275          level to 0.  */
1276       if (code == REG && src != stack_pointer_rtx)
1277         {
1278           offset = -cur_args_size;
1279 #ifndef STACK_GROWS_DOWNWARD
1280           offset = -offset;
1281 #endif
1282           return offset - cur_offset;
1283         }
1284
1285       if (! (code == PLUS || code == MINUS)
1286           || XEXP (src, 0) != stack_pointer_rtx
1287           || !CONST_INT_P (XEXP (src, 1)))
1288         return 0;
1289
1290       /* (set (reg sp) (plus (reg sp) (const_int))) */
1291       offset = INTVAL (XEXP (src, 1));
1292       if (code == PLUS)
1293         offset = -offset;
1294       return offset;
1295     }
1296
1297   if (MEM_P (src) && !MEM_P (dest))
1298     dest = src;
1299   if (MEM_P (dest))
1300     {
1301       /* (set (mem (pre_dec (reg sp))) (foo)) */
1302       src = XEXP (dest, 0);
1303       code = GET_CODE (src);
1304
1305       switch (code)
1306         {
1307         case PRE_MODIFY:
1308         case POST_MODIFY:
1309           if (XEXP (src, 0) == stack_pointer_rtx)
1310             {
1311               rtx val = XEXP (XEXP (src, 1), 1);
1312               /* We handle only adjustments by constant amount.  */
1313               gcc_assert (GET_CODE (XEXP (src, 1)) == PLUS
1314                           && CONST_INT_P (val));
1315               offset = -INTVAL (val);
1316               break;
1317             }
1318           return 0;
1319
1320         case PRE_DEC:
1321         case POST_DEC:
1322           if (XEXP (src, 0) == stack_pointer_rtx)
1323             {
1324               offset = GET_MODE_SIZE (GET_MODE (dest));
1325               break;
1326             }
1327           return 0;
1328
1329         case PRE_INC:
1330         case POST_INC:
1331           if (XEXP (src, 0) == stack_pointer_rtx)
1332             {
1333               offset = -GET_MODE_SIZE (GET_MODE (dest));
1334               break;
1335             }
1336           return 0;
1337
1338         default:
1339           return 0;
1340         }
1341     }
1342   else
1343     return 0;
1344
1345   return offset;
1346 }
1347
1348 /* Precomputed args_size for CODE_LABELs and BARRIERs preceeding them,
1349    indexed by INSN_UID.  */
1350
1351 static HOST_WIDE_INT *barrier_args_size;
1352
1353 /* Helper function for compute_barrier_args_size.  Handle one insn.  */
1354
1355 static HOST_WIDE_INT
1356 compute_barrier_args_size_1 (rtx insn, HOST_WIDE_INT cur_args_size,
1357                              VEC (rtx, heap) **next)
1358 {
1359   HOST_WIDE_INT offset = 0;
1360   int i;
1361
1362   if (! RTX_FRAME_RELATED_P (insn))
1363     {
1364       if (prologue_epilogue_contains (insn))
1365         /* Nothing */;
1366       else if (GET_CODE (PATTERN (insn)) == SET)
1367         offset = stack_adjust_offset (PATTERN (insn), cur_args_size, 0);
1368       else if (GET_CODE (PATTERN (insn)) == PARALLEL
1369                || GET_CODE (PATTERN (insn)) == SEQUENCE)
1370         {
1371           /* There may be stack adjustments inside compound insns.  Search
1372              for them.  */
1373           for (i = XVECLEN (PATTERN (insn), 0) - 1; i >= 0; i--)
1374             if (GET_CODE (XVECEXP (PATTERN (insn), 0, i)) == SET)
1375               offset += stack_adjust_offset (XVECEXP (PATTERN (insn), 0, i),
1376                                              cur_args_size, offset);
1377         }
1378     }
1379   else
1380     {
1381       rtx expr = find_reg_note (insn, REG_FRAME_RELATED_EXPR, NULL_RTX);
1382
1383       if (expr)
1384         {
1385           expr = XEXP (expr, 0);
1386           if (GET_CODE (expr) == PARALLEL
1387               || GET_CODE (expr) == SEQUENCE)
1388             for (i = 1; i < XVECLEN (expr, 0); i++)
1389               {
1390                 rtx elem = XVECEXP (expr, 0, i);
1391
1392                 if (GET_CODE (elem) == SET && !RTX_FRAME_RELATED_P (elem))
1393                   offset += stack_adjust_offset (elem, cur_args_size, offset);
1394               }
1395         }
1396     }
1397
1398 #ifndef STACK_GROWS_DOWNWARD
1399   offset = -offset;
1400 #endif
1401
1402   cur_args_size += offset;
1403   if (cur_args_size < 0)
1404     cur_args_size = 0;
1405
1406   if (JUMP_P (insn))
1407     {
1408       rtx dest = JUMP_LABEL (insn);
1409
1410       if (dest)
1411         {
1412           if (barrier_args_size [INSN_UID (dest)] < 0)
1413             {
1414               barrier_args_size [INSN_UID (dest)] = cur_args_size;
1415               VEC_safe_push (rtx, heap, *next, dest);
1416             }
1417         }
1418     }
1419
1420   return cur_args_size;
1421 }
1422
1423 /* Walk the whole function and compute args_size on BARRIERs.  */
1424
1425 static void
1426 compute_barrier_args_size (void)
1427 {
1428   int max_uid = get_max_uid (), i;
1429   rtx insn;
1430   VEC (rtx, heap) *worklist, *next, *tmp;
1431
1432   barrier_args_size = XNEWVEC (HOST_WIDE_INT, max_uid);
1433   for (i = 0; i < max_uid; i++)
1434     barrier_args_size[i] = -1;
1435
1436   worklist = VEC_alloc (rtx, heap, 20);
1437   next = VEC_alloc (rtx, heap, 20);
1438   insn = get_insns ();
1439   barrier_args_size[INSN_UID (insn)] = 0;
1440   VEC_quick_push (rtx, worklist, insn);
1441   for (;;)
1442     {
1443       while (!VEC_empty (rtx, worklist))
1444         {
1445           rtx prev, body, first_insn;
1446           HOST_WIDE_INT cur_args_size;
1447
1448           first_insn = insn = VEC_pop (rtx, worklist);
1449           cur_args_size = barrier_args_size[INSN_UID (insn)];
1450           prev = prev_nonnote_insn (insn);
1451           if (prev && BARRIER_P (prev))
1452             barrier_args_size[INSN_UID (prev)] = cur_args_size;
1453
1454           for (; insn; insn = NEXT_INSN (insn))
1455             {
1456               if (INSN_DELETED_P (insn) || NOTE_P (insn))
1457                 continue;
1458               if (BARRIER_P (insn))
1459                 break;
1460
1461               if (LABEL_P (insn))
1462                 {
1463                   if (insn == first_insn)
1464                     continue;
1465                   else if (barrier_args_size[INSN_UID (insn)] < 0)
1466                     {
1467                       barrier_args_size[INSN_UID (insn)] = cur_args_size;
1468                       continue;
1469                     }
1470                   else
1471                     {
1472                       /* The insns starting with this label have been
1473                          already scanned or are in the worklist.  */
1474                       break;
1475                     }
1476                 }
1477
1478               body = PATTERN (insn);
1479               if (GET_CODE (body) == SEQUENCE)
1480                 {
1481                   HOST_WIDE_INT dest_args_size = cur_args_size;
1482                   for (i = 1; i < XVECLEN (body, 0); i++)
1483                     if (INSN_ANNULLED_BRANCH_P (XVECEXP (body, 0, 0))
1484                         && INSN_FROM_TARGET_P (XVECEXP (body, 0, i)))
1485                       dest_args_size
1486                         = compute_barrier_args_size_1 (XVECEXP (body, 0, i),
1487                                                        dest_args_size, &next);
1488                     else
1489                       cur_args_size
1490                         = compute_barrier_args_size_1 (XVECEXP (body, 0, i),
1491                                                        cur_args_size, &next);
1492
1493                   if (INSN_ANNULLED_BRANCH_P (XVECEXP (body, 0, 0)))
1494                     compute_barrier_args_size_1 (XVECEXP (body, 0, 0),
1495                                                  dest_args_size, &next);
1496                   else
1497                     cur_args_size
1498                       = compute_barrier_args_size_1 (XVECEXP (body, 0, 0),
1499                                                      cur_args_size, &next);
1500                 }
1501               else
1502                 cur_args_size
1503                   = compute_barrier_args_size_1 (insn, cur_args_size, &next);
1504             }
1505         }
1506
1507       if (VEC_empty (rtx, next))
1508         break;
1509
1510       /* Swap WORKLIST with NEXT and truncate NEXT for next iteration.  */
1511       tmp = next;
1512       next = worklist;
1513       worklist = tmp;
1514       VEC_truncate (rtx, next, 0);
1515     }
1516
1517   VEC_free (rtx, heap, worklist);
1518   VEC_free (rtx, heap, next);
1519 }
1520
1521 /* Add a CFI to update the running total of the size of arguments
1522    pushed onto the stack.  */
1523
1524 static void
1525 dwarf2out_args_size (const char *label, HOST_WIDE_INT size)
1526 {
1527   dw_cfi_ref cfi;
1528
1529   if (size == old_args_size)
1530     return;
1531
1532   old_args_size = size;
1533
1534   cfi = new_cfi ();
1535   cfi->dw_cfi_opc = DW_CFA_GNU_args_size;
1536   cfi->dw_cfi_oprnd1.dw_cfi_offset = size;
1537   add_fde_cfi (label, cfi);
1538 }
1539
1540 /* Record a stack adjustment of OFFSET bytes.  */
1541
1542 static void
1543 dwarf2out_stack_adjust (HOST_WIDE_INT offset, const char *label)
1544 {
1545   if (cfa.reg == STACK_POINTER_REGNUM)
1546     cfa.offset += offset;
1547
1548   if (cfa_store.reg == STACK_POINTER_REGNUM)
1549     cfa_store.offset += offset;
1550
1551   if (ACCUMULATE_OUTGOING_ARGS)
1552     return;
1553
1554 #ifndef STACK_GROWS_DOWNWARD
1555   offset = -offset;
1556 #endif
1557
1558   args_size += offset;
1559   if (args_size < 0)
1560     args_size = 0;
1561
1562   def_cfa_1 (label, &cfa);
1563   if (flag_asynchronous_unwind_tables)
1564     dwarf2out_args_size (label, args_size);
1565 }
1566
1567 /* Check INSN to see if it looks like a push or a stack adjustment, and
1568    make a note of it if it does.  EH uses this information to find out
1569    how much extra space it needs to pop off the stack.  */
1570
1571 static void
1572 dwarf2out_notice_stack_adjust (rtx insn, bool after_p)
1573 {
1574   HOST_WIDE_INT offset;
1575   const char *label;
1576   int i;
1577
1578   /* Don't handle epilogues at all.  Certainly it would be wrong to do so
1579      with this function.  Proper support would require all frame-related
1580      insns to be marked, and to be able to handle saving state around
1581      epilogues textually in the middle of the function.  */
1582   if (prologue_epilogue_contains (insn))
1583     return;
1584
1585   /* If INSN is an instruction from target of an annulled branch, the
1586      effects are for the target only and so current argument size
1587      shouldn't change at all.  */
1588   if (final_sequence
1589       && INSN_ANNULLED_BRANCH_P (XVECEXP (final_sequence, 0, 0))
1590       && INSN_FROM_TARGET_P (insn))
1591     return;
1592
1593   /* If only calls can throw, and we have a frame pointer,
1594      save up adjustments until we see the CALL_INSN.  */
1595   if (!flag_asynchronous_unwind_tables && cfa.reg != STACK_POINTER_REGNUM)
1596     {
1597       if (CALL_P (insn) && !after_p)
1598         {
1599           /* Extract the size of the args from the CALL rtx itself.  */
1600           insn = PATTERN (insn);
1601           if (GET_CODE (insn) == PARALLEL)
1602             insn = XVECEXP (insn, 0, 0);
1603           if (GET_CODE (insn) == SET)
1604             insn = SET_SRC (insn);
1605           gcc_assert (GET_CODE (insn) == CALL);
1606           dwarf2out_args_size ("", INTVAL (XEXP (insn, 1)));
1607         }
1608       return;
1609     }
1610
1611   if (CALL_P (insn) && !after_p)
1612     {
1613       if (!flag_asynchronous_unwind_tables)
1614         dwarf2out_args_size ("", args_size);
1615       return;
1616     }
1617   else if (BARRIER_P (insn))
1618     {
1619       /* Don't call compute_barrier_args_size () if the only
1620          BARRIER is at the end of function.  */
1621       if (barrier_args_size == NULL && next_nonnote_insn (insn))
1622         compute_barrier_args_size ();
1623       if (barrier_args_size == NULL)
1624         offset = 0;
1625       else
1626         {
1627           offset = barrier_args_size[INSN_UID (insn)];
1628           if (offset < 0)
1629             offset = 0;
1630         }
1631
1632       offset -= args_size;
1633 #ifndef STACK_GROWS_DOWNWARD
1634       offset = -offset;
1635 #endif
1636     }
1637   else if (GET_CODE (PATTERN (insn)) == SET)
1638     offset = stack_adjust_offset (PATTERN (insn), args_size, 0);
1639   else if (GET_CODE (PATTERN (insn)) == PARALLEL
1640            || GET_CODE (PATTERN (insn)) == SEQUENCE)
1641     {
1642       /* There may be stack adjustments inside compound insns.  Search
1643          for them.  */
1644       for (offset = 0, i = XVECLEN (PATTERN (insn), 0) - 1; i >= 0; i--)
1645         if (GET_CODE (XVECEXP (PATTERN (insn), 0, i)) == SET)
1646           offset += stack_adjust_offset (XVECEXP (PATTERN (insn), 0, i),
1647                                          args_size, offset);
1648     }
1649   else
1650     return;
1651
1652   if (offset == 0)
1653     return;
1654
1655   label = dwarf2out_cfi_label (false);
1656   dwarf2out_stack_adjust (offset, label);
1657 }
1658
1659 #endif
1660
1661 /* We delay emitting a register save until either (a) we reach the end
1662    of the prologue or (b) the register is clobbered.  This clusters
1663    register saves so that there are fewer pc advances.  */
1664
1665 struct GTY(()) queued_reg_save {
1666   struct queued_reg_save *next;
1667   rtx reg;
1668   HOST_WIDE_INT cfa_offset;
1669   rtx saved_reg;
1670 };
1671
1672 static GTY(()) struct queued_reg_save *queued_reg_saves;
1673
1674 /* The caller's ORIG_REG is saved in SAVED_IN_REG.  */
1675 struct GTY(()) reg_saved_in_data {
1676   rtx orig_reg;
1677   rtx saved_in_reg;
1678 };
1679
1680 /* A list of registers saved in other registers.
1681    The list intentionally has a small maximum capacity of 4; if your
1682    port needs more than that, you might consider implementing a
1683    more efficient data structure.  */
1684 static GTY(()) struct reg_saved_in_data regs_saved_in_regs[4];
1685 static GTY(()) size_t num_regs_saved_in_regs;
1686
1687 #if defined (DWARF2_DEBUGGING_INFO) || defined (DWARF2_UNWIND_INFO)
1688 static const char *last_reg_save_label;
1689
1690 /* Add an entry to QUEUED_REG_SAVES saying that REG is now saved at
1691    SREG, or if SREG is NULL then it is saved at OFFSET to the CFA.  */
1692
1693 static void
1694 queue_reg_save (const char *label, rtx reg, rtx sreg, HOST_WIDE_INT offset)
1695 {
1696   struct queued_reg_save *q;
1697
1698   /* Duplicates waste space, but it's also necessary to remove them
1699      for correctness, since the queue gets output in reverse
1700      order.  */
1701   for (q = queued_reg_saves; q != NULL; q = q->next)
1702     if (REGNO (q->reg) == REGNO (reg))
1703       break;
1704
1705   if (q == NULL)
1706     {
1707       q = ggc_alloc_queued_reg_save ();
1708       q->next = queued_reg_saves;
1709       queued_reg_saves = q;
1710     }
1711
1712   q->reg = reg;
1713   q->cfa_offset = offset;
1714   q->saved_reg = sreg;
1715
1716   last_reg_save_label = label;
1717 }
1718
1719 /* Output all the entries in QUEUED_REG_SAVES.  */
1720
1721 static void
1722 flush_queued_reg_saves (void)
1723 {
1724   struct queued_reg_save *q;
1725
1726   for (q = queued_reg_saves; q; q = q->next)
1727     {
1728       size_t i;
1729       unsigned int reg, sreg;
1730
1731       for (i = 0; i < num_regs_saved_in_regs; i++)
1732         if (REGNO (regs_saved_in_regs[i].orig_reg) == REGNO (q->reg))
1733           break;
1734       if (q->saved_reg && i == num_regs_saved_in_regs)
1735         {
1736           gcc_assert (i != ARRAY_SIZE (regs_saved_in_regs));
1737           num_regs_saved_in_regs++;
1738         }
1739       if (i != num_regs_saved_in_regs)
1740         {
1741           regs_saved_in_regs[i].orig_reg = q->reg;
1742           regs_saved_in_regs[i].saved_in_reg = q->saved_reg;
1743         }
1744
1745       reg = DWARF_FRAME_REGNUM (REGNO (q->reg));
1746       if (q->saved_reg)
1747         sreg = DWARF_FRAME_REGNUM (REGNO (q->saved_reg));
1748       else
1749         sreg = INVALID_REGNUM;
1750       reg_save (last_reg_save_label, reg, sreg, q->cfa_offset);
1751     }
1752
1753   queued_reg_saves = NULL;
1754   last_reg_save_label = NULL;
1755 }
1756
1757 /* Does INSN clobber any register which QUEUED_REG_SAVES lists a saved
1758    location for?  Or, does it clobber a register which we've previously
1759    said that some other register is saved in, and for which we now
1760    have a new location for?  */
1761
1762 static bool
1763 clobbers_queued_reg_save (const_rtx insn)
1764 {
1765   struct queued_reg_save *q;
1766
1767   for (q = queued_reg_saves; q; q = q->next)
1768     {
1769       size_t i;
1770       if (modified_in_p (q->reg, insn))
1771         return true;
1772       for (i = 0; i < num_regs_saved_in_regs; i++)
1773         if (REGNO (q->reg) == REGNO (regs_saved_in_regs[i].orig_reg)
1774             && modified_in_p (regs_saved_in_regs[i].saved_in_reg, insn))
1775           return true;
1776     }
1777
1778   return false;
1779 }
1780
1781 /* Entry point for saving the first register into the second.  */
1782
1783 void
1784 dwarf2out_reg_save_reg (const char *label, rtx reg, rtx sreg)
1785 {
1786   size_t i;
1787   unsigned int regno, sregno;
1788
1789   for (i = 0; i < num_regs_saved_in_regs; i++)
1790     if (REGNO (regs_saved_in_regs[i].orig_reg) == REGNO (reg))
1791       break;
1792   if (i == num_regs_saved_in_regs)
1793     {
1794       gcc_assert (i != ARRAY_SIZE (regs_saved_in_regs));
1795       num_regs_saved_in_regs++;
1796     }
1797   regs_saved_in_regs[i].orig_reg = reg;
1798   regs_saved_in_regs[i].saved_in_reg = sreg;
1799
1800   regno = DWARF_FRAME_REGNUM (REGNO (reg));
1801   sregno = DWARF_FRAME_REGNUM (REGNO (sreg));
1802   reg_save (label, regno, sregno, 0);
1803 }
1804
1805 /* What register, if any, is currently saved in REG?  */
1806
1807 static rtx
1808 reg_saved_in (rtx reg)
1809 {
1810   unsigned int regn = REGNO (reg);
1811   size_t i;
1812   struct queued_reg_save *q;
1813
1814   for (q = queued_reg_saves; q; q = q->next)
1815     if (q->saved_reg && regn == REGNO (q->saved_reg))
1816       return q->reg;
1817
1818   for (i = 0; i < num_regs_saved_in_regs; i++)
1819     if (regs_saved_in_regs[i].saved_in_reg
1820         && regn == REGNO (regs_saved_in_regs[i].saved_in_reg))
1821       return regs_saved_in_regs[i].orig_reg;
1822
1823   return NULL_RTX;
1824 }
1825
1826
1827 /* A temporary register holding an integral value used in adjusting SP
1828    or setting up the store_reg.  The "offset" field holds the integer
1829    value, not an offset.  */
1830 static dw_cfa_location cfa_temp;
1831
1832 /* A subroutine of dwarf2out_frame_debug, process a REG_DEF_CFA note.  */
1833
1834 static void
1835 dwarf2out_frame_debug_def_cfa (rtx pat, const char *label)
1836 {
1837   memset (&cfa, 0, sizeof (cfa));
1838
1839   switch (GET_CODE (pat))
1840     {
1841     case PLUS:
1842       cfa.reg = REGNO (XEXP (pat, 0));
1843       cfa.offset = INTVAL (XEXP (pat, 1));
1844       break;
1845
1846     case REG:
1847       cfa.reg = REGNO (pat);
1848       break;
1849
1850     default:
1851       /* Recurse and define an expression.  */
1852       gcc_unreachable ();
1853     }
1854
1855   def_cfa_1 (label, &cfa);
1856 }
1857
1858 /* A subroutine of dwarf2out_frame_debug, process a REG_ADJUST_CFA note.  */
1859
1860 static void
1861 dwarf2out_frame_debug_adjust_cfa (rtx pat, const char *label)
1862 {
1863   rtx src, dest;
1864
1865   gcc_assert (GET_CODE (pat) == SET);
1866   dest = XEXP (pat, 0);
1867   src = XEXP (pat, 1);
1868
1869   switch (GET_CODE (src))
1870     {
1871     case PLUS:
1872       gcc_assert (REGNO (XEXP (src, 0)) == cfa.reg);
1873       cfa.offset -= INTVAL (XEXP (src, 1));
1874       break;
1875
1876     case REG:
1877         break;
1878
1879     default:
1880         gcc_unreachable ();
1881     }
1882
1883   cfa.reg = REGNO (dest);
1884   gcc_assert (cfa.indirect == 0);
1885
1886   def_cfa_1 (label, &cfa);
1887 }
1888
1889 /* A subroutine of dwarf2out_frame_debug, process a REG_CFA_OFFSET note.  */
1890
1891 static void
1892 dwarf2out_frame_debug_cfa_offset (rtx set, const char *label)
1893 {
1894   HOST_WIDE_INT offset;
1895   rtx src, addr, span;
1896
1897   src = XEXP (set, 1);
1898   addr = XEXP (set, 0);
1899   gcc_assert (MEM_P (addr));
1900   addr = XEXP (addr, 0);
1901
1902   /* As documented, only consider extremely simple addresses.  */
1903   switch (GET_CODE (addr))
1904     {
1905     case REG:
1906       gcc_assert (REGNO (addr) == cfa.reg);
1907       offset = -cfa.offset;
1908       break;
1909     case PLUS:
1910       gcc_assert (REGNO (XEXP (addr, 0)) == cfa.reg);
1911       offset = INTVAL (XEXP (addr, 1)) - cfa.offset;
1912       break;
1913     default:
1914       gcc_unreachable ();
1915     }
1916
1917   span = targetm.dwarf_register_span (src);
1918
1919   /* ??? We'd like to use queue_reg_save, but we need to come up with
1920      a different flushing heuristic for epilogues.  */
1921   if (!span)
1922     reg_save (label, DWARF_FRAME_REGNUM (REGNO (src)), INVALID_REGNUM, offset);
1923   else
1924     {
1925       /* We have a PARALLEL describing where the contents of SRC live.
1926          Queue register saves for each piece of the PARALLEL.  */
1927       int par_index;
1928       int limit;
1929       HOST_WIDE_INT span_offset = offset;
1930
1931       gcc_assert (GET_CODE (span) == PARALLEL);
1932
1933       limit = XVECLEN (span, 0);
1934       for (par_index = 0; par_index < limit; par_index++)
1935         {
1936           rtx elem = XVECEXP (span, 0, par_index);
1937
1938           reg_save (label, DWARF_FRAME_REGNUM (REGNO (elem)),
1939                     INVALID_REGNUM, span_offset);
1940           span_offset += GET_MODE_SIZE (GET_MODE (elem));
1941         }
1942     }
1943 }
1944
1945 /* A subroutine of dwarf2out_frame_debug, process a REG_CFA_REGISTER note.  */
1946
1947 static void
1948 dwarf2out_frame_debug_cfa_register (rtx set, const char *label)
1949 {
1950   rtx src, dest;
1951   unsigned sregno, dregno;
1952
1953   src = XEXP (set, 1);
1954   dest = XEXP (set, 0);
1955
1956   if (src == pc_rtx)
1957     sregno = DWARF_FRAME_RETURN_COLUMN;
1958   else
1959     sregno = DWARF_FRAME_REGNUM (REGNO (src));
1960
1961   dregno = DWARF_FRAME_REGNUM (REGNO (dest));
1962
1963   /* ??? We'd like to use queue_reg_save, but we need to come up with
1964      a different flushing heuristic for epilogues.  */
1965   reg_save (label, sregno, dregno, 0);
1966 }
1967
1968 /* A subroutine of dwarf2out_frame_debug, process a REG_CFA_RESTORE note.  */
1969
1970 static void
1971 dwarf2out_frame_debug_cfa_restore (rtx reg, const char *label)
1972 {
1973   dw_cfi_ref cfi = new_cfi ();
1974   unsigned int regno = DWARF_FRAME_REGNUM (REGNO (reg));
1975
1976   cfi->dw_cfi_opc = (regno & ~0x3f ? DW_CFA_restore_extended : DW_CFA_restore);
1977   cfi->dw_cfi_oprnd1.dw_cfi_reg_num = regno;
1978
1979   add_fde_cfi (label, cfi);
1980 }
1981
1982 /* Record call frame debugging information for an expression EXPR,
1983    which either sets SP or FP (adjusting how we calculate the frame
1984    address) or saves a register to the stack or another register.
1985    LABEL indicates the address of EXPR.
1986
1987    This function encodes a state machine mapping rtxes to actions on
1988    cfa, cfa_store, and cfa_temp.reg.  We describe these rules so
1989    users need not read the source code.
1990
1991   The High-Level Picture
1992
1993   Changes in the register we use to calculate the CFA: Currently we
1994   assume that if you copy the CFA register into another register, we
1995   should take the other one as the new CFA register; this seems to
1996   work pretty well.  If it's wrong for some target, it's simple
1997   enough not to set RTX_FRAME_RELATED_P on the insn in question.
1998
1999   Changes in the register we use for saving registers to the stack:
2000   This is usually SP, but not always.  Again, we deduce that if you
2001   copy SP into another register (and SP is not the CFA register),
2002   then the new register is the one we will be using for register
2003   saves.  This also seems to work.
2004
2005   Register saves: There's not much guesswork about this one; if
2006   RTX_FRAME_RELATED_P is set on an insn which modifies memory, it's a
2007   register save, and the register used to calculate the destination
2008   had better be the one we think we're using for this purpose.
2009   It's also assumed that a copy from a call-saved register to another
2010   register is saving that register if RTX_FRAME_RELATED_P is set on
2011   that instruction.  If the copy is from a call-saved register to
2012   the *same* register, that means that the register is now the same
2013   value as in the caller.
2014
2015   Except: If the register being saved is the CFA register, and the
2016   offset is nonzero, we are saving the CFA, so we assume we have to
2017   use DW_CFA_def_cfa_expression.  If the offset is 0, we assume that
2018   the intent is to save the value of SP from the previous frame.
2019
2020   In addition, if a register has previously been saved to a different
2021   register,
2022
2023   Invariants / Summaries of Rules
2024
2025   cfa          current rule for calculating the CFA.  It usually
2026                consists of a register and an offset.
2027   cfa_store    register used by prologue code to save things to the stack
2028                cfa_store.offset is the offset from the value of
2029                cfa_store.reg to the actual CFA
2030   cfa_temp     register holding an integral value.  cfa_temp.offset
2031                stores the value, which will be used to adjust the
2032                stack pointer.  cfa_temp is also used like cfa_store,
2033                to track stores to the stack via fp or a temp reg.
2034
2035   Rules  1- 4: Setting a register's value to cfa.reg or an expression
2036                with cfa.reg as the first operand changes the cfa.reg and its
2037                cfa.offset.  Rule 1 and 4 also set cfa_temp.reg and
2038                cfa_temp.offset.
2039
2040   Rules  6- 9: Set a non-cfa.reg register value to a constant or an
2041                expression yielding a constant.  This sets cfa_temp.reg
2042                and cfa_temp.offset.
2043
2044   Rule 5:      Create a new register cfa_store used to save items to the
2045                stack.
2046
2047   Rules 10-14: Save a register to the stack.  Define offset as the
2048                difference of the original location and cfa_store's
2049                location (or cfa_temp's location if cfa_temp is used).
2050
2051   Rules 16-20: If AND operation happens on sp in prologue, we assume
2052                stack is realigned.  We will use a group of DW_OP_XXX
2053                expressions to represent the location of the stored
2054                register instead of CFA+offset.
2055
2056   The Rules
2057
2058   "{a,b}" indicates a choice of a xor b.
2059   "<reg>:cfa.reg" indicates that <reg> must equal cfa.reg.
2060
2061   Rule 1:
2062   (set <reg1> <reg2>:cfa.reg)
2063   effects: cfa.reg = <reg1>
2064            cfa.offset unchanged
2065            cfa_temp.reg = <reg1>
2066            cfa_temp.offset = cfa.offset
2067
2068   Rule 2:
2069   (set sp ({minus,plus,losum} {sp,fp}:cfa.reg
2070                               {<const_int>,<reg>:cfa_temp.reg}))
2071   effects: cfa.reg = sp if fp used
2072            cfa.offset += {+/- <const_int>, cfa_temp.offset} if cfa.reg==sp
2073            cfa_store.offset += {+/- <const_int>, cfa_temp.offset}
2074              if cfa_store.reg==sp
2075
2076   Rule 3:
2077   (set fp ({minus,plus,losum} <reg>:cfa.reg <const_int>))
2078   effects: cfa.reg = fp
2079            cfa_offset += +/- <const_int>
2080
2081   Rule 4:
2082   (set <reg1> ({plus,losum} <reg2>:cfa.reg <const_int>))
2083   constraints: <reg1> != fp
2084                <reg1> != sp
2085   effects: cfa.reg = <reg1>
2086            cfa_temp.reg = <reg1>
2087            cfa_temp.offset = cfa.offset
2088
2089   Rule 5:
2090   (set <reg1> (plus <reg2>:cfa_temp.reg sp:cfa.reg))
2091   constraints: <reg1> != fp
2092                <reg1> != sp
2093   effects: cfa_store.reg = <reg1>
2094            cfa_store.offset = cfa.offset - cfa_temp.offset
2095
2096   Rule 6:
2097   (set <reg> <const_int>)
2098   effects: cfa_temp.reg = <reg>
2099            cfa_temp.offset = <const_int>
2100
2101   Rule 7:
2102   (set <reg1>:cfa_temp.reg (ior <reg2>:cfa_temp.reg <const_int>))
2103   effects: cfa_temp.reg = <reg1>
2104            cfa_temp.offset |= <const_int>
2105
2106   Rule 8:
2107   (set <reg> (high <exp>))
2108   effects: none
2109
2110   Rule 9:
2111   (set <reg> (lo_sum <exp> <const_int>))
2112   effects: cfa_temp.reg = <reg>
2113            cfa_temp.offset = <const_int>
2114
2115   Rule 10:
2116   (set (mem (pre_modify sp:cfa_store (???? <reg1> <const_int>))) <reg2>)
2117   effects: cfa_store.offset -= <const_int>
2118            cfa.offset = cfa_store.offset if cfa.reg == sp
2119            cfa.reg = sp
2120            cfa.base_offset = -cfa_store.offset
2121
2122   Rule 11:
2123   (set (mem ({pre_inc,pre_dec} sp:cfa_store.reg)) <reg>)
2124   effects: cfa_store.offset += -/+ mode_size(mem)
2125            cfa.offset = cfa_store.offset if cfa.reg == sp
2126            cfa.reg = sp
2127            cfa.base_offset = -cfa_store.offset
2128
2129   Rule 12:
2130   (set (mem ({minus,plus,losum} <reg1>:{cfa_store,cfa_temp} <const_int>))
2131
2132        <reg2>)
2133   effects: cfa.reg = <reg1>
2134            cfa.base_offset = -/+ <const_int> - {cfa_store,cfa_temp}.offset
2135
2136   Rule 13:
2137   (set (mem <reg1>:{cfa_store,cfa_temp}) <reg2>)
2138   effects: cfa.reg = <reg1>
2139            cfa.base_offset = -{cfa_store,cfa_temp}.offset
2140
2141   Rule 14:
2142   (set (mem (postinc <reg1>:cfa_temp <const_int>)) <reg2>)
2143   effects: cfa.reg = <reg1>
2144            cfa.base_offset = -cfa_temp.offset
2145            cfa_temp.offset -= mode_size(mem)
2146
2147   Rule 15:
2148   (set <reg> {unspec, unspec_volatile})
2149   effects: target-dependent
2150
2151   Rule 16:
2152   (set sp (and: sp <const_int>))
2153   constraints: cfa_store.reg == sp
2154   effects: current_fde.stack_realign = 1
2155            cfa_store.offset = 0
2156            fde->drap_reg = cfa.reg if cfa.reg != sp and cfa.reg != fp
2157
2158   Rule 17:
2159   (set (mem ({pre_inc, pre_dec} sp)) (mem (plus (cfa.reg) (const_int))))
2160   effects: cfa_store.offset += -/+ mode_size(mem)
2161
2162   Rule 18:
2163   (set (mem ({pre_inc, pre_dec} sp)) fp)
2164   constraints: fde->stack_realign == 1
2165   effects: cfa_store.offset = 0
2166            cfa.reg != HARD_FRAME_POINTER_REGNUM
2167
2168   Rule 19:
2169   (set (mem ({pre_inc, pre_dec} sp)) cfa.reg)
2170   constraints: fde->stack_realign == 1
2171                && cfa.offset == 0
2172                && cfa.indirect == 0
2173                && cfa.reg != HARD_FRAME_POINTER_REGNUM
2174   effects: Use DW_CFA_def_cfa_expression to define cfa
2175            cfa.reg == fde->drap_reg  */
2176
2177 static void
2178 dwarf2out_frame_debug_expr (rtx expr, const char *label)
2179 {
2180   rtx src, dest, span;
2181   HOST_WIDE_INT offset;
2182   dw_fde_ref fde;
2183
2184   /* If RTX_FRAME_RELATED_P is set on a PARALLEL, process each member of
2185      the PARALLEL independently. The first element is always processed if
2186      it is a SET. This is for backward compatibility.   Other elements
2187      are processed only if they are SETs and the RTX_FRAME_RELATED_P
2188      flag is set in them.  */
2189   if (GET_CODE (expr) == PARALLEL || GET_CODE (expr) == SEQUENCE)
2190     {
2191       int par_index;
2192       int limit = XVECLEN (expr, 0);
2193       rtx elem;
2194
2195       /* PARALLELs have strict read-modify-write semantics, so we
2196          ought to evaluate every rvalue before changing any lvalue.
2197          It's cumbersome to do that in general, but there's an
2198          easy approximation that is enough for all current users:
2199          handle register saves before register assignments.  */
2200       if (GET_CODE (expr) == PARALLEL)
2201         for (par_index = 0; par_index < limit; par_index++)
2202           {
2203             elem = XVECEXP (expr, 0, par_index);
2204             if (GET_CODE (elem) == SET
2205                 && MEM_P (SET_DEST (elem))
2206                 && (RTX_FRAME_RELATED_P (elem) || par_index == 0))
2207               dwarf2out_frame_debug_expr (elem, label);
2208           }
2209
2210       for (par_index = 0; par_index < limit; par_index++)
2211         {
2212           elem = XVECEXP (expr, 0, par_index);
2213           if (GET_CODE (elem) == SET
2214               && (!MEM_P (SET_DEST (elem)) || GET_CODE (expr) == SEQUENCE)
2215               && (RTX_FRAME_RELATED_P (elem) || par_index == 0))
2216             dwarf2out_frame_debug_expr (elem, label);
2217           else if (GET_CODE (elem) == SET
2218                    && par_index != 0
2219                    && !RTX_FRAME_RELATED_P (elem))
2220             {
2221               /* Stack adjustment combining might combine some post-prologue
2222                  stack adjustment into a prologue stack adjustment.  */
2223               HOST_WIDE_INT offset = stack_adjust_offset (elem, args_size, 0);
2224
2225               if (offset != 0)
2226                 dwarf2out_stack_adjust (offset, label);
2227             }
2228         }
2229       return;
2230     }
2231
2232   gcc_assert (GET_CODE (expr) == SET);
2233
2234   src = SET_SRC (expr);
2235   dest = SET_DEST (expr);
2236
2237   if (REG_P (src))
2238     {
2239       rtx rsi = reg_saved_in (src);
2240       if (rsi)
2241         src = rsi;
2242     }
2243
2244   fde = current_fde ();
2245
2246   switch (GET_CODE (dest))
2247     {
2248     case REG:
2249       switch (GET_CODE (src))
2250         {
2251           /* Setting FP from SP.  */
2252         case REG:
2253           if (cfa.reg == (unsigned) REGNO (src))
2254             {
2255               /* Rule 1 */
2256               /* Update the CFA rule wrt SP or FP.  Make sure src is
2257                  relative to the current CFA register.
2258
2259                  We used to require that dest be either SP or FP, but the
2260                  ARM copies SP to a temporary register, and from there to
2261                  FP.  So we just rely on the backends to only set
2262                  RTX_FRAME_RELATED_P on appropriate insns.  */
2263               cfa.reg = REGNO (dest);
2264               cfa_temp.reg = cfa.reg;
2265               cfa_temp.offset = cfa.offset;
2266             }
2267           else
2268             {
2269               /* Saving a register in a register.  */
2270               gcc_assert (!fixed_regs [REGNO (dest)]
2271                           /* For the SPARC and its register window.  */
2272                           || (DWARF_FRAME_REGNUM (REGNO (src))
2273                               == DWARF_FRAME_RETURN_COLUMN));
2274
2275               /* After stack is aligned, we can only save SP in FP
2276                  if drap register is used.  In this case, we have
2277                  to restore stack pointer with the CFA value and we
2278                  don't generate this DWARF information.  */
2279               if (fde
2280                   && fde->stack_realign
2281                   && REGNO (src) == STACK_POINTER_REGNUM)
2282                 gcc_assert (REGNO (dest) == HARD_FRAME_POINTER_REGNUM
2283                             && fde->drap_reg != INVALID_REGNUM
2284                             && cfa.reg != REGNO (src));
2285               else
2286                 queue_reg_save (label, src, dest, 0);
2287             }
2288           break;
2289
2290         case PLUS:
2291         case MINUS:
2292         case LO_SUM:
2293           if (dest == stack_pointer_rtx)
2294             {
2295               /* Rule 2 */
2296               /* Adjusting SP.  */
2297               switch (GET_CODE (XEXP (src, 1)))
2298                 {
2299                 case CONST_INT:
2300                   offset = INTVAL (XEXP (src, 1));
2301                   break;
2302                 case REG:
2303                   gcc_assert ((unsigned) REGNO (XEXP (src, 1))
2304                               == cfa_temp.reg);
2305                   offset = cfa_temp.offset;
2306                   break;
2307                 default:
2308                   gcc_unreachable ();
2309                 }
2310
2311               if (XEXP (src, 0) == hard_frame_pointer_rtx)
2312                 {
2313                   /* Restoring SP from FP in the epilogue.  */
2314                   gcc_assert (cfa.reg == (unsigned) HARD_FRAME_POINTER_REGNUM);
2315                   cfa.reg = STACK_POINTER_REGNUM;
2316                 }
2317               else if (GET_CODE (src) == LO_SUM)
2318                 /* Assume we've set the source reg of the LO_SUM from sp.  */
2319                 ;
2320               else
2321                 gcc_assert (XEXP (src, 0) == stack_pointer_rtx);
2322
2323               if (GET_CODE (src) != MINUS)
2324                 offset = -offset;
2325               if (cfa.reg == STACK_POINTER_REGNUM)
2326                 cfa.offset += offset;
2327               if (cfa_store.reg == STACK_POINTER_REGNUM)
2328                 cfa_store.offset += offset;
2329             }
2330           else if (dest == hard_frame_pointer_rtx)
2331             {
2332               /* Rule 3 */
2333               /* Either setting the FP from an offset of the SP,
2334                  or adjusting the FP */
2335               gcc_assert (frame_pointer_needed);
2336
2337               gcc_assert (REG_P (XEXP (src, 0))
2338                           && (unsigned) REGNO (XEXP (src, 0)) == cfa.reg
2339                           && CONST_INT_P (XEXP (src, 1)));
2340               offset = INTVAL (XEXP (src, 1));
2341               if (GET_CODE (src) != MINUS)
2342                 offset = -offset;
2343               cfa.offset += offset;
2344               cfa.reg = HARD_FRAME_POINTER_REGNUM;
2345             }
2346           else
2347             {
2348               gcc_assert (GET_CODE (src) != MINUS);
2349
2350               /* Rule 4 */
2351               if (REG_P (XEXP (src, 0))
2352                   && REGNO (XEXP (src, 0)) == cfa.reg
2353                   && CONST_INT_P (XEXP (src, 1)))
2354                 {
2355                   /* Setting a temporary CFA register that will be copied
2356                      into the FP later on.  */
2357                   offset = - INTVAL (XEXP (src, 1));
2358                   cfa.offset += offset;
2359                   cfa.reg = REGNO (dest);
2360                   /* Or used to save regs to the stack.  */
2361                   cfa_temp.reg = cfa.reg;
2362                   cfa_temp.offset = cfa.offset;
2363                 }
2364
2365               /* Rule 5 */
2366               else if (REG_P (XEXP (src, 0))
2367                        && REGNO (XEXP (src, 0)) == cfa_temp.reg
2368                        && XEXP (src, 1) == stack_pointer_rtx)
2369                 {
2370                   /* Setting a scratch register that we will use instead
2371                      of SP for saving registers to the stack.  */
2372                   gcc_assert (cfa.reg == STACK_POINTER_REGNUM);
2373                   cfa_store.reg = REGNO (dest);
2374                   cfa_store.offset = cfa.offset - cfa_temp.offset;
2375                 }
2376
2377               /* Rule 9 */
2378               else if (GET_CODE (src) == LO_SUM
2379                        && CONST_INT_P (XEXP (src, 1)))
2380                 {
2381                   cfa_temp.reg = REGNO (dest);
2382                   cfa_temp.offset = INTVAL (XEXP (src, 1));
2383                 }
2384               else
2385                 gcc_unreachable ();
2386             }
2387           break;
2388
2389           /* Rule 6 */
2390         case CONST_INT:
2391           cfa_temp.reg = REGNO (dest);
2392           cfa_temp.offset = INTVAL (src);
2393           break;
2394
2395           /* Rule 7 */
2396         case IOR:
2397           gcc_assert (REG_P (XEXP (src, 0))
2398                       && (unsigned) REGNO (XEXP (src, 0)) == cfa_temp.reg
2399                       && CONST_INT_P (XEXP (src, 1)));
2400
2401           if ((unsigned) REGNO (dest) != cfa_temp.reg)
2402             cfa_temp.reg = REGNO (dest);
2403           cfa_temp.offset |= INTVAL (XEXP (src, 1));
2404           break;
2405
2406           /* Skip over HIGH, assuming it will be followed by a LO_SUM,
2407              which will fill in all of the bits.  */
2408           /* Rule 8 */
2409         case HIGH:
2410           break;
2411
2412           /* Rule 15 */
2413         case UNSPEC:
2414         case UNSPEC_VOLATILE:
2415           gcc_assert (targetm.dwarf_handle_frame_unspec);
2416           targetm.dwarf_handle_frame_unspec (label, expr, XINT (src, 1));
2417           return;
2418
2419           /* Rule 16 */
2420         case AND:
2421           /* If this AND operation happens on stack pointer in prologue,
2422              we assume the stack is realigned and we extract the
2423              alignment.  */
2424           if (fde && XEXP (src, 0) == stack_pointer_rtx)
2425             {
2426               gcc_assert (cfa_store.reg == REGNO (XEXP (src, 0)));
2427               fde->stack_realign = 1;
2428               fde->stack_realignment = INTVAL (XEXP (src, 1));
2429               cfa_store.offset = 0;
2430
2431               if (cfa.reg != STACK_POINTER_REGNUM
2432                   && cfa.reg != HARD_FRAME_POINTER_REGNUM)
2433                 fde->drap_reg = cfa.reg;
2434             }
2435           return;
2436
2437         default:
2438           gcc_unreachable ();
2439         }
2440
2441       def_cfa_1 (label, &cfa);
2442       break;
2443
2444     case MEM:
2445
2446       /* Saving a register to the stack.  Make sure dest is relative to the
2447          CFA register.  */
2448       switch (GET_CODE (XEXP (dest, 0)))
2449         {
2450           /* Rule 10 */
2451           /* With a push.  */
2452         case PRE_MODIFY:
2453           /* We can't handle variable size modifications.  */
2454           gcc_assert (GET_CODE (XEXP (XEXP (XEXP (dest, 0), 1), 1))
2455                       == CONST_INT);
2456           offset = -INTVAL (XEXP (XEXP (XEXP (dest, 0), 1), 1));
2457
2458           gcc_assert (REGNO (XEXP (XEXP (dest, 0), 0)) == STACK_POINTER_REGNUM
2459                       && cfa_store.reg == STACK_POINTER_REGNUM);
2460
2461           cfa_store.offset += offset;
2462           if (cfa.reg == STACK_POINTER_REGNUM)
2463             cfa.offset = cfa_store.offset;
2464
2465           offset = -cfa_store.offset;
2466           break;
2467
2468           /* Rule 11 */
2469         case PRE_INC:
2470         case PRE_DEC:
2471           offset = GET_MODE_SIZE (GET_MODE (dest));
2472           if (GET_CODE (XEXP (dest, 0)) == PRE_INC)
2473             offset = -offset;
2474
2475           gcc_assert ((REGNO (XEXP (XEXP (dest, 0), 0))
2476                        == STACK_POINTER_REGNUM)
2477                       && cfa_store.reg == STACK_POINTER_REGNUM);
2478
2479           cfa_store.offset += offset;
2480
2481           /* Rule 18: If stack is aligned, we will use FP as a
2482              reference to represent the address of the stored
2483              regiser.  */
2484           if (fde
2485               && fde->stack_realign
2486               && src == hard_frame_pointer_rtx)
2487             {
2488               gcc_assert (cfa.reg != HARD_FRAME_POINTER_REGNUM);
2489               cfa_store.offset = 0;
2490             }
2491
2492           if (cfa.reg == STACK_POINTER_REGNUM)
2493             cfa.offset = cfa_store.offset;
2494
2495           offset = -cfa_store.offset;
2496           break;
2497
2498           /* Rule 12 */
2499           /* With an offset.  */
2500         case PLUS:
2501         case MINUS:
2502         case LO_SUM:
2503           {
2504             int regno;
2505
2506             gcc_assert (CONST_INT_P (XEXP (XEXP (dest, 0), 1))
2507                         && REG_P (XEXP (XEXP (dest, 0), 0)));
2508             offset = INTVAL (XEXP (XEXP (dest, 0), 1));
2509             if (GET_CODE (XEXP (dest, 0)) == MINUS)
2510               offset = -offset;
2511
2512             regno = REGNO (XEXP (XEXP (dest, 0), 0));
2513
2514             if (cfa_store.reg == (unsigned) regno)
2515               offset -= cfa_store.offset;
2516             else
2517               {
2518                 gcc_assert (cfa_temp.reg == (unsigned) regno);
2519                 offset -= cfa_temp.offset;
2520               }
2521           }
2522           break;
2523
2524           /* Rule 13 */
2525           /* Without an offset.  */
2526         case REG:
2527           {
2528             int regno = REGNO (XEXP (dest, 0));
2529
2530             if (cfa_store.reg == (unsigned) regno)
2531               offset = -cfa_store.offset;
2532             else
2533               {
2534                 gcc_assert (cfa_temp.reg == (unsigned) regno);
2535                 offset = -cfa_temp.offset;
2536               }
2537           }
2538           break;
2539
2540           /* Rule 14 */
2541         case POST_INC:
2542           gcc_assert (cfa_temp.reg
2543                       == (unsigned) REGNO (XEXP (XEXP (dest, 0), 0)));
2544           offset = -cfa_temp.offset;
2545           cfa_temp.offset -= GET_MODE_SIZE (GET_MODE (dest));
2546           break;
2547
2548         default:
2549           gcc_unreachable ();
2550         }
2551
2552         /* Rule 17 */
2553         /* If the source operand of this MEM operation is not a
2554            register, basically the source is return address.  Here
2555            we only care how much stack grew and we don't save it.  */
2556       if (!REG_P (src))
2557         break;
2558
2559       if (REGNO (src) != STACK_POINTER_REGNUM
2560           && REGNO (src) != HARD_FRAME_POINTER_REGNUM
2561           && (unsigned) REGNO (src) == cfa.reg)
2562         {
2563           /* We're storing the current CFA reg into the stack.  */
2564
2565           if (cfa.offset == 0)
2566             {
2567               /* Rule 19 */
2568               /* If stack is aligned, putting CFA reg into stack means
2569                  we can no longer use reg + offset to represent CFA.
2570                  Here we use DW_CFA_def_cfa_expression instead.  The
2571                  result of this expression equals to the original CFA
2572                  value.  */
2573               if (fde
2574                   && fde->stack_realign
2575                   && cfa.indirect == 0
2576                   && cfa.reg != HARD_FRAME_POINTER_REGNUM)
2577                 {
2578                   dw_cfa_location cfa_exp;
2579
2580                   gcc_assert (fde->drap_reg == cfa.reg);
2581
2582                   cfa_exp.indirect = 1;
2583                   cfa_exp.reg = HARD_FRAME_POINTER_REGNUM;
2584                   cfa_exp.base_offset = offset;
2585                   cfa_exp.offset = 0;
2586
2587                   fde->drap_reg_saved = 1;
2588
2589                   def_cfa_1 (label, &cfa_exp);
2590                   break;
2591                 }
2592
2593               /* If the source register is exactly the CFA, assume
2594                  we're saving SP like any other register; this happens
2595                  on the ARM.  */
2596               def_cfa_1 (label, &cfa);
2597               queue_reg_save (label, stack_pointer_rtx, NULL_RTX, offset);
2598               break;
2599             }
2600           else
2601             {
2602               /* Otherwise, we'll need to look in the stack to
2603                  calculate the CFA.  */
2604               rtx x = XEXP (dest, 0);
2605
2606               if (!REG_P (x))
2607                 x = XEXP (x, 0);
2608               gcc_assert (REG_P (x));
2609
2610               cfa.reg = REGNO (x);
2611               cfa.base_offset = offset;
2612               cfa.indirect = 1;
2613               def_cfa_1 (label, &cfa);
2614               break;
2615             }
2616         }
2617
2618       def_cfa_1 (label, &cfa);
2619       {
2620         span = targetm.dwarf_register_span (src);
2621
2622         if (!span)
2623           queue_reg_save (label, src, NULL_RTX, offset);
2624         else
2625           {
2626             /* We have a PARALLEL describing where the contents of SRC
2627                live.  Queue register saves for each piece of the
2628                PARALLEL.  */
2629             int par_index;
2630             int limit;
2631             HOST_WIDE_INT span_offset = offset;
2632
2633             gcc_assert (GET_CODE (span) == PARALLEL);
2634
2635             limit = XVECLEN (span, 0);
2636             for (par_index = 0; par_index < limit; par_index++)
2637               {
2638                 rtx elem = XVECEXP (span, 0, par_index);
2639
2640                 queue_reg_save (label, elem, NULL_RTX, span_offset);
2641                 span_offset += GET_MODE_SIZE (GET_MODE (elem));
2642               }
2643           }
2644       }
2645       break;
2646
2647     default:
2648       gcc_unreachable ();
2649     }
2650 }
2651
2652 /* Record call frame debugging information for INSN, which either
2653    sets SP or FP (adjusting how we calculate the frame address) or saves a
2654    register to the stack.  If INSN is NULL_RTX, initialize our state.
2655
2656    If AFTER_P is false, we're being called before the insn is emitted,
2657    otherwise after.  Call instructions get invoked twice.  */
2658
2659 void
2660 dwarf2out_frame_debug (rtx insn, bool after_p)
2661 {
2662   const char *label;
2663   rtx note, n;
2664   bool handled_one = false;
2665
2666   if (insn == NULL_RTX)
2667     {
2668       size_t i;
2669
2670       /* Flush any queued register saves.  */
2671       flush_queued_reg_saves ();
2672
2673       /* Set up state for generating call frame debug info.  */
2674       lookup_cfa (&cfa);
2675       gcc_assert (cfa.reg
2676                   == (unsigned long)DWARF_FRAME_REGNUM (STACK_POINTER_REGNUM));
2677
2678       cfa.reg = STACK_POINTER_REGNUM;
2679       cfa_store = cfa;
2680       cfa_temp.reg = -1;
2681       cfa_temp.offset = 0;
2682
2683       for (i = 0; i < num_regs_saved_in_regs; i++)
2684         {
2685           regs_saved_in_regs[i].orig_reg = NULL_RTX;
2686           regs_saved_in_regs[i].saved_in_reg = NULL_RTX;
2687         }
2688       num_regs_saved_in_regs = 0;
2689
2690       if (barrier_args_size)
2691         {
2692           XDELETEVEC (barrier_args_size);
2693           barrier_args_size = NULL;
2694         }
2695       return;
2696     }
2697
2698   if (!NONJUMP_INSN_P (insn) || clobbers_queued_reg_save (insn))
2699     flush_queued_reg_saves ();
2700
2701   if (!RTX_FRAME_RELATED_P (insn))
2702     {
2703       /* ??? This should be done unconditionally since stack adjustments
2704          matter if the stack pointer is not the CFA register anymore but
2705          is still used to save registers.  */
2706       if (!ACCUMULATE_OUTGOING_ARGS)
2707         dwarf2out_notice_stack_adjust (insn, after_p);
2708       return;
2709     }
2710
2711   label = dwarf2out_cfi_label (false);
2712
2713   for (note = REG_NOTES (insn); note; note = XEXP (note, 1))
2714     switch (REG_NOTE_KIND (note))
2715       {
2716       case REG_FRAME_RELATED_EXPR:
2717         insn = XEXP (note, 0);
2718         goto found;
2719
2720       case REG_CFA_DEF_CFA:
2721         dwarf2out_frame_debug_def_cfa (XEXP (note, 0), label);
2722         handled_one = true;
2723         break;
2724
2725       case REG_CFA_ADJUST_CFA:
2726         n = XEXP (note, 0);
2727         if (n == NULL)
2728           {
2729             n = PATTERN (insn);
2730             if (GET_CODE (n) == PARALLEL)
2731               n = XVECEXP (n, 0, 0);
2732           }
2733         dwarf2out_frame_debug_adjust_cfa (n, label);
2734         handled_one = true;
2735         break;
2736
2737       case REG_CFA_OFFSET:
2738         n = XEXP (note, 0);
2739         if (n == NULL)
2740           n = single_set (insn);
2741         dwarf2out_frame_debug_cfa_offset (n, label);
2742         handled_one = true;
2743         break;
2744
2745       case REG_CFA_REGISTER:
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           }
2753         dwarf2out_frame_debug_cfa_register (n, label);
2754         handled_one = true;
2755         break;
2756
2757       case REG_CFA_RESTORE:
2758         n = XEXP (note, 0);
2759         if (n == NULL)
2760           {
2761             n = PATTERN (insn);
2762             if (GET_CODE (n) == PARALLEL)
2763               n = XVECEXP (n, 0, 0);
2764             n = XEXP (n, 0);
2765           }
2766         dwarf2out_frame_debug_cfa_restore (n, label);
2767         handled_one = true;
2768         break;
2769
2770       case REG_CFA_SET_VDRAP:
2771         n = XEXP (note, 0);
2772         if (REG_P (n))
2773           {
2774             dw_fde_ref fde = current_fde ();
2775             if (fde)
2776               {
2777                 gcc_assert (fde->vdrap_reg == INVALID_REGNUM);
2778                 if (REG_P (n))
2779                   fde->vdrap_reg = REGNO (n);
2780               }
2781           }
2782         handled_one = true;
2783         break;
2784
2785       default:
2786         break;
2787       }
2788   if (handled_one)
2789     return;
2790
2791   insn = PATTERN (insn);
2792  found:
2793   dwarf2out_frame_debug_expr (insn, label);
2794
2795   /* Check again.  A parallel can save and update the same register.
2796      We could probably check just once, here, but this is safer than
2797      removing the check above.  */
2798   if (clobbers_queued_reg_save (insn))
2799     flush_queued_reg_saves ();
2800 }
2801
2802 /* Determine if we need to save and restore CFI information around this
2803    epilogue.  If SIBCALL is true, then this is a sibcall epilogue.  If
2804    we do need to save/restore, then emit the save now, and insert a
2805    NOTE_INSN_CFA_RESTORE_STATE at the appropriate place in the stream.  */
2806
2807 void
2808 dwarf2out_cfi_begin_epilogue (rtx insn)
2809 {
2810   bool saw_frp = false;
2811   rtx i;
2812
2813   /* Scan forward to the return insn, noticing if there are possible
2814      frame related insns.  */
2815   for (i = NEXT_INSN (insn); i ; i = NEXT_INSN (i))
2816     {
2817       if (!INSN_P (i))
2818         continue;
2819
2820       /* Look for both regular and sibcalls to end the block.  */
2821       if (returnjump_p (i))
2822         break;
2823       if (CALL_P (i) && SIBLING_CALL_P (i))
2824         break;
2825
2826       if (GET_CODE (PATTERN (i)) == SEQUENCE)
2827         {
2828           int idx;
2829           rtx seq = PATTERN (i);
2830
2831           if (returnjump_p (XVECEXP (seq, 0, 0)))
2832             break;
2833           if (CALL_P (XVECEXP (seq, 0, 0))
2834               && SIBLING_CALL_P (XVECEXP (seq, 0, 0)))
2835             break;
2836
2837           for (idx = 0; idx < XVECLEN (seq, 0); idx++)
2838             if (RTX_FRAME_RELATED_P (XVECEXP (seq, 0, idx)))
2839               saw_frp = true;
2840         }
2841
2842       if (RTX_FRAME_RELATED_P (i))
2843         saw_frp = true;
2844     }
2845
2846   /* If the port doesn't emit epilogue unwind info, we don't need a
2847      save/restore pair.  */
2848   if (!saw_frp)
2849     return;
2850
2851   /* Otherwise, search forward to see if the return insn was the last
2852      basic block of the function.  If so, we don't need save/restore.  */
2853   gcc_assert (i != NULL);
2854   i = next_real_insn (i);
2855   if (i == NULL)
2856     return;
2857
2858   /* Insert the restore before that next real insn in the stream, and before
2859      a potential NOTE_INSN_EPILOGUE_BEG -- we do need these notes to be
2860      properly nested.  This should be after any label or alignment.  This
2861      will be pushed into the CFI stream by the function below.  */
2862   while (1)
2863     {
2864       rtx p = PREV_INSN (i);
2865       if (!NOTE_P (p))
2866         break;
2867       if (NOTE_KIND (p) == NOTE_INSN_BASIC_BLOCK)
2868         break;
2869       i = p;
2870     }
2871   emit_note_before (NOTE_INSN_CFA_RESTORE_STATE, i);
2872
2873   emit_cfa_remember = true;
2874
2875   /* And emulate the state save.  */
2876   gcc_assert (!cfa_remember.in_use);
2877   cfa_remember = cfa;
2878   cfa_remember.in_use = 1;
2879 }
2880
2881 /* A "subroutine" of dwarf2out_cfi_begin_epilogue.  Emit the restore
2882    required.  */
2883
2884 void
2885 dwarf2out_frame_debug_restore_state (void)
2886 {
2887   dw_cfi_ref cfi = new_cfi ();
2888   const char *label = dwarf2out_cfi_label (false);
2889
2890   cfi->dw_cfi_opc = DW_CFA_restore_state;
2891   add_fde_cfi (label, cfi);
2892
2893   gcc_assert (cfa_remember.in_use);
2894   cfa = cfa_remember;
2895   cfa_remember.in_use = 0;
2896 }
2897
2898 #endif
2899
2900 /* Describe for the GTY machinery what parts of dw_cfi_oprnd1 are used.  */
2901 static enum dw_cfi_oprnd_type dw_cfi_oprnd1_desc
2902  (enum dwarf_call_frame_info cfi);
2903
2904 static enum dw_cfi_oprnd_type
2905 dw_cfi_oprnd1_desc (enum dwarf_call_frame_info cfi)
2906 {
2907   switch (cfi)
2908     {
2909     case DW_CFA_nop:
2910     case DW_CFA_GNU_window_save:
2911     case DW_CFA_remember_state:
2912     case DW_CFA_restore_state:
2913       return dw_cfi_oprnd_unused;
2914
2915     case DW_CFA_set_loc:
2916     case DW_CFA_advance_loc1:
2917     case DW_CFA_advance_loc2:
2918     case DW_CFA_advance_loc4:
2919     case DW_CFA_MIPS_advance_loc8:
2920       return dw_cfi_oprnd_addr;
2921
2922     case DW_CFA_offset:
2923     case DW_CFA_offset_extended:
2924     case DW_CFA_def_cfa:
2925     case DW_CFA_offset_extended_sf:
2926     case DW_CFA_def_cfa_sf:
2927     case DW_CFA_restore:
2928     case DW_CFA_restore_extended:
2929     case DW_CFA_undefined:
2930     case DW_CFA_same_value:
2931     case DW_CFA_def_cfa_register:
2932     case DW_CFA_register:
2933     case DW_CFA_expression:
2934       return dw_cfi_oprnd_reg_num;
2935
2936     case DW_CFA_def_cfa_offset:
2937     case DW_CFA_GNU_args_size:
2938     case DW_CFA_def_cfa_offset_sf:
2939       return dw_cfi_oprnd_offset;
2940
2941     case DW_CFA_def_cfa_expression:
2942       return dw_cfi_oprnd_loc;
2943
2944     default:
2945       gcc_unreachable ();
2946     }
2947 }
2948
2949 /* Describe for the GTY machinery what parts of dw_cfi_oprnd2 are used.  */
2950 static enum dw_cfi_oprnd_type dw_cfi_oprnd2_desc
2951  (enum dwarf_call_frame_info cfi);
2952
2953 static enum dw_cfi_oprnd_type
2954 dw_cfi_oprnd2_desc (enum dwarf_call_frame_info cfi)
2955 {
2956   switch (cfi)
2957     {
2958     case DW_CFA_def_cfa:
2959     case DW_CFA_def_cfa_sf:
2960     case DW_CFA_offset:
2961     case DW_CFA_offset_extended_sf:
2962     case DW_CFA_offset_extended:
2963       return dw_cfi_oprnd_offset;
2964
2965     case DW_CFA_register:
2966       return dw_cfi_oprnd_reg_num;
2967
2968     case DW_CFA_expression:
2969       return dw_cfi_oprnd_loc;
2970
2971     default:
2972       return dw_cfi_oprnd_unused;
2973     }
2974 }
2975
2976 #if defined (DWARF2_DEBUGGING_INFO) || defined (DWARF2_UNWIND_INFO)
2977
2978 /* Switch [BACK] to eh_frame_section.  If we don't have an eh_frame_section,
2979    switch to the data section instead, and write out a synthetic start label
2980    for collect2 the first time around.  */
2981
2982 static void
2983 switch_to_eh_frame_section (bool back)
2984 {
2985   tree label;
2986
2987 #ifdef EH_FRAME_SECTION_NAME
2988   if (eh_frame_section == 0)
2989     {
2990       int flags;
2991
2992       if (EH_TABLES_CAN_BE_READ_ONLY)
2993         {
2994           int fde_encoding;
2995           int per_encoding;
2996           int lsda_encoding;
2997
2998           fde_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/1,
2999                                                        /*global=*/0);
3000           per_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/2,
3001                                                        /*global=*/1);
3002           lsda_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/0,
3003                                                         /*global=*/0);
3004           flags = ((! flag_pic
3005                     || ((fde_encoding & 0x70) != DW_EH_PE_absptr
3006                         && (fde_encoding & 0x70) != DW_EH_PE_aligned
3007                         && (per_encoding & 0x70) != DW_EH_PE_absptr
3008                         && (per_encoding & 0x70) != DW_EH_PE_aligned
3009                         && (lsda_encoding & 0x70) != DW_EH_PE_absptr
3010                         && (lsda_encoding & 0x70) != DW_EH_PE_aligned))
3011                    ? 0 : SECTION_WRITE);
3012         }
3013       else
3014         flags = SECTION_WRITE;
3015       eh_frame_section = get_section (EH_FRAME_SECTION_NAME, flags, NULL);
3016     }
3017 #endif
3018
3019   if (eh_frame_section)
3020     switch_to_section (eh_frame_section);
3021   else
3022     {
3023       /* We have no special eh_frame section.  Put the information in
3024          the data section and emit special labels to guide collect2.  */
3025       switch_to_section (data_section);
3026
3027       if (!back)
3028         {
3029           label = get_file_function_name ("F");
3030           ASM_OUTPUT_ALIGN (asm_out_file, floor_log2 (PTR_SIZE));
3031           targetm.asm_out.globalize_label (asm_out_file,
3032                                            IDENTIFIER_POINTER (label));
3033           ASM_OUTPUT_LABEL (asm_out_file, IDENTIFIER_POINTER (label));
3034         }
3035     }
3036 }
3037
3038 /* Switch [BACK] to the eh or debug frame table section, depending on
3039    FOR_EH.  */
3040
3041 static void
3042 switch_to_frame_table_section (int for_eh, bool back)
3043 {
3044   if (for_eh)
3045     switch_to_eh_frame_section (back);
3046   else
3047     {
3048       if (!debug_frame_section)
3049         debug_frame_section = get_section (DEBUG_FRAME_SECTION,
3050                                            SECTION_DEBUG, NULL);
3051       switch_to_section (debug_frame_section);
3052     }
3053 }
3054
3055 /* Output a Call Frame Information opcode and its operand(s).  */
3056
3057 static void
3058 output_cfi (dw_cfi_ref cfi, dw_fde_ref fde, int for_eh)
3059 {
3060   unsigned long r;
3061   HOST_WIDE_INT off;
3062
3063   if (cfi->dw_cfi_opc == DW_CFA_advance_loc)
3064     dw2_asm_output_data (1, (cfi->dw_cfi_opc
3065                              | (cfi->dw_cfi_oprnd1.dw_cfi_offset & 0x3f)),
3066                          "DW_CFA_advance_loc " HOST_WIDE_INT_PRINT_HEX,
3067                          ((unsigned HOST_WIDE_INT)
3068                           cfi->dw_cfi_oprnd1.dw_cfi_offset));
3069   else if (cfi->dw_cfi_opc == DW_CFA_offset)
3070     {
3071       r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, for_eh);
3072       dw2_asm_output_data (1, (cfi->dw_cfi_opc | (r & 0x3f)),
3073                            "DW_CFA_offset, column %#lx", r);
3074       off = div_data_align (cfi->dw_cfi_oprnd2.dw_cfi_offset);
3075       dw2_asm_output_data_uleb128 (off, NULL);
3076     }
3077   else if (cfi->dw_cfi_opc == DW_CFA_restore)
3078     {
3079       r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, for_eh);
3080       dw2_asm_output_data (1, (cfi->dw_cfi_opc | (r & 0x3f)),
3081                            "DW_CFA_restore, column %#lx", r);
3082     }
3083   else
3084     {
3085       dw2_asm_output_data (1, cfi->dw_cfi_opc,
3086                            "%s", dwarf_cfi_name (cfi->dw_cfi_opc));
3087
3088       switch (cfi->dw_cfi_opc)
3089         {
3090         case DW_CFA_set_loc:
3091           if (for_eh)
3092             dw2_asm_output_encoded_addr_rtx (
3093                 ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/1, /*global=*/0),
3094                 gen_rtx_SYMBOL_REF (Pmode, cfi->dw_cfi_oprnd1.dw_cfi_addr),
3095                 false, NULL);
3096           else
3097             dw2_asm_output_addr (DWARF2_ADDR_SIZE,
3098                                  cfi->dw_cfi_oprnd1.dw_cfi_addr, NULL);
3099           fde->dw_fde_current_label = cfi->dw_cfi_oprnd1.dw_cfi_addr;
3100           break;
3101
3102         case DW_CFA_advance_loc1:
3103           dw2_asm_output_delta (1, cfi->dw_cfi_oprnd1.dw_cfi_addr,
3104                                 fde->dw_fde_current_label, NULL);
3105           fde->dw_fde_current_label = cfi->dw_cfi_oprnd1.dw_cfi_addr;
3106           break;
3107
3108         case DW_CFA_advance_loc2:
3109           dw2_asm_output_delta (2, cfi->dw_cfi_oprnd1.dw_cfi_addr,
3110                                 fde->dw_fde_current_label, NULL);
3111           fde->dw_fde_current_label = cfi->dw_cfi_oprnd1.dw_cfi_addr;
3112           break;
3113
3114         case DW_CFA_advance_loc4:
3115           dw2_asm_output_delta (4, cfi->dw_cfi_oprnd1.dw_cfi_addr,
3116                                 fde->dw_fde_current_label, NULL);
3117           fde->dw_fde_current_label = cfi->dw_cfi_oprnd1.dw_cfi_addr;
3118           break;
3119
3120         case DW_CFA_MIPS_advance_loc8:
3121           dw2_asm_output_delta (8, cfi->dw_cfi_oprnd1.dw_cfi_addr,
3122                                 fde->dw_fde_current_label, NULL);
3123           fde->dw_fde_current_label = cfi->dw_cfi_oprnd1.dw_cfi_addr;
3124           break;
3125
3126         case DW_CFA_offset_extended:
3127           r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, for_eh);
3128           dw2_asm_output_data_uleb128 (r, NULL);
3129           off = div_data_align (cfi->dw_cfi_oprnd2.dw_cfi_offset);
3130           dw2_asm_output_data_uleb128 (off, NULL);
3131           break;
3132
3133         case DW_CFA_def_cfa:
3134           r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, for_eh);
3135           dw2_asm_output_data_uleb128 (r, NULL);
3136           dw2_asm_output_data_uleb128 (cfi->dw_cfi_oprnd2.dw_cfi_offset, NULL);
3137           break;
3138
3139         case DW_CFA_offset_extended_sf:
3140           r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, for_eh);
3141           dw2_asm_output_data_uleb128 (r, NULL);
3142           off = div_data_align (cfi->dw_cfi_oprnd2.dw_cfi_offset);
3143           dw2_asm_output_data_sleb128 (off, NULL);
3144           break;
3145
3146         case DW_CFA_def_cfa_sf:
3147           r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, for_eh);
3148           dw2_asm_output_data_uleb128 (r, NULL);
3149           off = div_data_align (cfi->dw_cfi_oprnd2.dw_cfi_offset);
3150           dw2_asm_output_data_sleb128 (off, NULL);
3151           break;
3152
3153         case DW_CFA_restore_extended:
3154         case DW_CFA_undefined:
3155         case DW_CFA_same_value:
3156         case DW_CFA_def_cfa_register:
3157           r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, for_eh);
3158           dw2_asm_output_data_uleb128 (r, NULL);
3159           break;
3160
3161         case DW_CFA_register:
3162           r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, for_eh);
3163           dw2_asm_output_data_uleb128 (r, NULL);
3164           r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd2.dw_cfi_reg_num, for_eh);
3165           dw2_asm_output_data_uleb128 (r, NULL);
3166           break;
3167
3168         case DW_CFA_def_cfa_offset:
3169         case DW_CFA_GNU_args_size:
3170           dw2_asm_output_data_uleb128 (cfi->dw_cfi_oprnd1.dw_cfi_offset, NULL);
3171           break;
3172
3173         case DW_CFA_def_cfa_offset_sf:
3174           off = div_data_align (cfi->dw_cfi_oprnd1.dw_cfi_offset);
3175           dw2_asm_output_data_sleb128 (off, NULL);
3176           break;
3177
3178         case DW_CFA_GNU_window_save:
3179           break;
3180
3181         case DW_CFA_def_cfa_expression:
3182         case DW_CFA_expression:
3183           output_cfa_loc (cfi);
3184           break;
3185
3186         case DW_CFA_GNU_negative_offset_extended:
3187           /* Obsoleted by DW_CFA_offset_extended_sf.  */
3188           gcc_unreachable ();
3189
3190         default:
3191           break;
3192         }
3193     }
3194 }
3195
3196 /* Similar, but do it via assembler directives instead.  */
3197
3198 static void
3199 output_cfi_directive (dw_cfi_ref cfi)
3200 {
3201   unsigned long r, r2;
3202
3203   switch (cfi->dw_cfi_opc)
3204     {
3205     case DW_CFA_advance_loc:
3206     case DW_CFA_advance_loc1:
3207     case DW_CFA_advance_loc2:
3208     case DW_CFA_advance_loc4:
3209     case DW_CFA_MIPS_advance_loc8:
3210     case DW_CFA_set_loc:
3211       /* Should only be created by add_fde_cfi in a code path not
3212          followed when emitting via directives.  The assembler is
3213          going to take care of this for us.  */
3214       gcc_unreachable ();
3215
3216     case DW_CFA_offset:
3217     case DW_CFA_offset_extended:
3218     case DW_CFA_offset_extended_sf:
3219       r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, 1);
3220       fprintf (asm_out_file, "\t.cfi_offset %lu, "HOST_WIDE_INT_PRINT_DEC"\n",
3221                r, cfi->dw_cfi_oprnd2.dw_cfi_offset);
3222       break;
3223
3224     case DW_CFA_restore:
3225     case DW_CFA_restore_extended:
3226       r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, 1);
3227       fprintf (asm_out_file, "\t.cfi_restore %lu\n", r);
3228       break;
3229
3230     case DW_CFA_undefined:
3231       r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, 1);
3232       fprintf (asm_out_file, "\t.cfi_undefined %lu\n", r);
3233       break;
3234
3235     case DW_CFA_same_value:
3236       r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, 1);
3237       fprintf (asm_out_file, "\t.cfi_same_value %lu\n", r);
3238       break;
3239
3240     case DW_CFA_def_cfa:
3241     case DW_CFA_def_cfa_sf:
3242       r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, 1);
3243       fprintf (asm_out_file, "\t.cfi_def_cfa %lu, "HOST_WIDE_INT_PRINT_DEC"\n",
3244                r, cfi->dw_cfi_oprnd2.dw_cfi_offset);
3245       break;
3246
3247     case DW_CFA_def_cfa_register:
3248       r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, 1);
3249       fprintf (asm_out_file, "\t.cfi_def_cfa_register %lu\n", r);
3250       break;
3251
3252     case DW_CFA_register:
3253       r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, 1);
3254       r2 = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd2.dw_cfi_reg_num, 1);
3255       fprintf (asm_out_file, "\t.cfi_register %lu, %lu\n", r, r2);
3256       break;
3257
3258     case DW_CFA_def_cfa_offset:
3259     case DW_CFA_def_cfa_offset_sf:
3260       fprintf (asm_out_file, "\t.cfi_def_cfa_offset "
3261                HOST_WIDE_INT_PRINT_DEC"\n",
3262                cfi->dw_cfi_oprnd1.dw_cfi_offset);
3263       break;
3264
3265     case DW_CFA_remember_state:
3266       fprintf (asm_out_file, "\t.cfi_remember_state\n");
3267       break;
3268     case DW_CFA_restore_state:
3269       fprintf (asm_out_file, "\t.cfi_restore_state\n");
3270       break;
3271
3272     case DW_CFA_GNU_args_size:
3273       fprintf (asm_out_file, "\t.cfi_escape %#x,", DW_CFA_GNU_args_size);
3274       dw2_asm_output_data_uleb128_raw (cfi->dw_cfi_oprnd1.dw_cfi_offset);
3275       if (flag_debug_asm)
3276         fprintf (asm_out_file, "\t%s args_size "HOST_WIDE_INT_PRINT_DEC,
3277                  ASM_COMMENT_START, cfi->dw_cfi_oprnd1.dw_cfi_offset);
3278       fputc ('\n', asm_out_file);
3279       break;
3280
3281     case DW_CFA_GNU_window_save:
3282       fprintf (asm_out_file, "\t.cfi_window_save\n");
3283       break;
3284
3285     case DW_CFA_def_cfa_expression:
3286     case DW_CFA_expression:
3287       fprintf (asm_out_file, "\t.cfi_escape %#x,", cfi->dw_cfi_opc);
3288       output_cfa_loc_raw (cfi);
3289       fputc ('\n', asm_out_file);
3290       break;
3291
3292     default:
3293       gcc_unreachable ();
3294     }
3295 }
3296
3297 DEF_VEC_P (dw_cfi_ref);
3298 DEF_VEC_ALLOC_P (dw_cfi_ref, heap);
3299
3300 /* Output CFIs to bring current FDE to the same state as after executing
3301    CFIs in CFI chain.  DO_CFI_ASM is true if .cfi_* directives shall
3302    be emitted, false otherwise.  If it is false, FDE and FOR_EH are the
3303    other arguments to pass to output_cfi.  */
3304
3305 static void
3306 output_cfis (dw_cfi_ref cfi, bool do_cfi_asm, dw_fde_ref fde, bool for_eh)
3307 {
3308   struct dw_cfi_struct cfi_buf;
3309   dw_cfi_ref cfi2;
3310   dw_cfi_ref cfi_args_size = NULL, cfi_cfa = NULL, cfi_cfa_offset = NULL;
3311   VEC (dw_cfi_ref, heap) *regs = VEC_alloc (dw_cfi_ref, heap, 32);
3312   unsigned int len, idx;
3313
3314   for (;; cfi = cfi->dw_cfi_next)
3315     switch (cfi ? cfi->dw_cfi_opc : DW_CFA_nop)
3316       {
3317       case DW_CFA_advance_loc:
3318       case DW_CFA_advance_loc1:
3319       case DW_CFA_advance_loc2:
3320       case DW_CFA_advance_loc4:
3321       case DW_CFA_MIPS_advance_loc8:
3322       case DW_CFA_set_loc:
3323         /* All advances should be ignored.  */
3324         break;
3325       case DW_CFA_remember_state:
3326         {
3327           dw_cfi_ref args_size = cfi_args_size;
3328
3329           /* Skip everything between .cfi_remember_state and
3330              .cfi_restore_state.  */
3331           for (cfi2 = cfi->dw_cfi_next; cfi2; cfi2 = cfi2->dw_cfi_next)
3332             if (cfi2->dw_cfi_opc == DW_CFA_restore_state)
3333               break;
3334             else if (cfi2->dw_cfi_opc == DW_CFA_GNU_args_size)
3335               args_size = cfi2;
3336             else
3337               gcc_assert (cfi2->dw_cfi_opc != DW_CFA_remember_state);
3338
3339           if (cfi2 == NULL)
3340             goto flush_all;
3341           else
3342             {
3343               cfi = cfi2;
3344               cfi_args_size = args_size;
3345             }
3346           break;
3347         }
3348       case DW_CFA_GNU_args_size:
3349         cfi_args_size = cfi;
3350         break;
3351       case DW_CFA_GNU_window_save:
3352         goto flush_all;
3353       case DW_CFA_offset:
3354       case DW_CFA_offset_extended:
3355       case DW_CFA_offset_extended_sf:
3356       case DW_CFA_restore:
3357       case DW_CFA_restore_extended:
3358       case DW_CFA_undefined:
3359       case DW_CFA_same_value:
3360       case DW_CFA_register:
3361       case DW_CFA_val_offset:
3362       case DW_CFA_val_offset_sf:
3363       case DW_CFA_expression:
3364       case DW_CFA_val_expression:
3365       case DW_CFA_GNU_negative_offset_extended:
3366         if (VEC_length (dw_cfi_ref, regs) <= cfi->dw_cfi_oprnd1.dw_cfi_reg_num)
3367           VEC_safe_grow_cleared (dw_cfi_ref, heap, regs,
3368                                  cfi->dw_cfi_oprnd1.dw_cfi_reg_num + 1);
3369         VEC_replace (dw_cfi_ref, regs, cfi->dw_cfi_oprnd1.dw_cfi_reg_num, cfi);
3370         break;
3371       case DW_CFA_def_cfa:
3372       case DW_CFA_def_cfa_sf:
3373       case DW_CFA_def_cfa_expression:
3374         cfi_cfa = cfi;
3375         cfi_cfa_offset = cfi;
3376         break;
3377       case DW_CFA_def_cfa_register:
3378         cfi_cfa = cfi;
3379         break;
3380       case DW_CFA_def_cfa_offset:
3381       case DW_CFA_def_cfa_offset_sf:
3382         cfi_cfa_offset = cfi;
3383         break;
3384       case DW_CFA_nop:
3385         gcc_assert (cfi == NULL);
3386       flush_all:
3387         len = VEC_length (dw_cfi_ref, regs);
3388         for (idx = 0; idx < len; idx++)
3389           {
3390             cfi2 = VEC_replace (dw_cfi_ref, regs, idx, NULL);
3391             if (cfi2 != NULL
3392                 && cfi2->dw_cfi_opc != DW_CFA_restore
3393                 && cfi2->dw_cfi_opc != DW_CFA_restore_extended)
3394               {
3395                 if (do_cfi_asm)
3396                   output_cfi_directive (cfi2);
3397                 else
3398                   output_cfi (cfi2, fde, for_eh);
3399               }
3400           }
3401         if (cfi_cfa && cfi_cfa_offset && cfi_cfa_offset != cfi_cfa)
3402           {
3403             gcc_assert (cfi_cfa->dw_cfi_opc != DW_CFA_def_cfa_expression);
3404             cfi_buf = *cfi_cfa;
3405             switch (cfi_cfa_offset->dw_cfi_opc)
3406               {
3407               case DW_CFA_def_cfa_offset:
3408                 cfi_buf.dw_cfi_opc = DW_CFA_def_cfa;
3409                 cfi_buf.dw_cfi_oprnd2 = cfi_cfa_offset->dw_cfi_oprnd1;
3410                 break;
3411               case DW_CFA_def_cfa_offset_sf:
3412                 cfi_buf.dw_cfi_opc = DW_CFA_def_cfa_sf;
3413                 cfi_buf.dw_cfi_oprnd2 = cfi_cfa_offset->dw_cfi_oprnd1;
3414                 break;
3415               case DW_CFA_def_cfa:
3416               case DW_CFA_def_cfa_sf:
3417                 cfi_buf.dw_cfi_opc = cfi_cfa_offset->dw_cfi_opc;
3418                 cfi_buf.dw_cfi_oprnd2 = cfi_cfa_offset->dw_cfi_oprnd2;
3419                 break;
3420               default:
3421                 gcc_unreachable ();
3422               }
3423             cfi_cfa = &cfi_buf;
3424           }
3425         else if (cfi_cfa_offset)
3426           cfi_cfa = cfi_cfa_offset;
3427         if (cfi_cfa)
3428           {
3429             if (do_cfi_asm)
3430               output_cfi_directive (cfi_cfa);
3431             else
3432               output_cfi (cfi_cfa, fde, for_eh);
3433           }
3434         cfi_cfa = NULL;
3435         cfi_cfa_offset = NULL;
3436         if (cfi_args_size
3437             && cfi_args_size->dw_cfi_oprnd1.dw_cfi_offset)
3438           {
3439             if (do_cfi_asm)
3440               output_cfi_directive (cfi_args_size);
3441             else
3442               output_cfi (cfi_args_size, fde, for_eh);
3443           }
3444         cfi_args_size = NULL;
3445         if (cfi == NULL)
3446           {
3447             VEC_free (dw_cfi_ref, heap, regs);
3448             return;
3449           }
3450         else if (do_cfi_asm)
3451           output_cfi_directive (cfi);
3452         else
3453           output_cfi (cfi, fde, for_eh);
3454         break;
3455       default:
3456         gcc_unreachable ();
3457     }
3458 }
3459
3460 /* Output one FDE.  */
3461
3462 static void
3463 output_fde (dw_fde_ref fde, bool for_eh, bool second,
3464             char *section_start_label, int fde_encoding, char *augmentation,
3465             bool any_lsda_needed, int lsda_encoding)
3466 {
3467   const char *begin, *end;
3468   static unsigned int j;
3469   char l1[20], l2[20];
3470   dw_cfi_ref cfi;
3471
3472   targetm.asm_out.emit_unwind_label (asm_out_file, fde->decl, for_eh,
3473                                      /* empty */ 0);
3474   targetm.asm_out.internal_label (asm_out_file, FDE_LABEL,
3475                                   for_eh + j);
3476   ASM_GENERATE_INTERNAL_LABEL (l1, FDE_AFTER_SIZE_LABEL, for_eh + j);
3477   ASM_GENERATE_INTERNAL_LABEL (l2, FDE_END_LABEL, for_eh + j);
3478   if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4 && !for_eh)
3479     dw2_asm_output_data (4, 0xffffffff, "Initial length escape value"
3480                          " indicating 64-bit DWARF extension");
3481   dw2_asm_output_delta (for_eh ? 4 : DWARF_OFFSET_SIZE, l2, l1,
3482                         "FDE Length");
3483   ASM_OUTPUT_LABEL (asm_out_file, l1);
3484
3485   if (for_eh)
3486     dw2_asm_output_delta (4, l1, section_start_label, "FDE CIE offset");
3487   else
3488     dw2_asm_output_offset (DWARF_OFFSET_SIZE, section_start_label,
3489                            debug_frame_section, "FDE CIE offset");
3490
3491   if (!fde->dw_fde_switched_sections)
3492     {
3493       begin = fde->dw_fde_begin;
3494       end = fde->dw_fde_end;
3495     }
3496   else
3497     {
3498       /* For the first section, prefer dw_fde_begin over
3499          dw_fde_{hot,cold}_section_label, as the latter
3500          might be separated from the real start of the
3501          function by alignment padding.  */
3502       if (!second)
3503         begin = fde->dw_fde_begin;
3504       else if (fde->dw_fde_switched_cold_to_hot)
3505         begin = fde->dw_fde_hot_section_label;
3506       else
3507         begin = fde->dw_fde_unlikely_section_label;
3508       if (second ^ fde->dw_fde_switched_cold_to_hot)
3509         end = fde->dw_fde_unlikely_section_end_label;
3510       else
3511         end = fde->dw_fde_hot_section_end_label;
3512     }
3513
3514   if (for_eh)
3515     {
3516       rtx sym_ref = gen_rtx_SYMBOL_REF (Pmode, begin);
3517       SYMBOL_REF_FLAGS (sym_ref) |= SYMBOL_FLAG_LOCAL;
3518       dw2_asm_output_encoded_addr_rtx (fde_encoding, sym_ref, false,
3519                                        "FDE initial location");
3520       dw2_asm_output_delta (size_of_encoded_value (fde_encoding),
3521                             end, begin, "FDE address range");
3522     }
3523   else
3524     {
3525       dw2_asm_output_addr (DWARF2_ADDR_SIZE, begin, "FDE initial location");
3526       dw2_asm_output_delta (DWARF2_ADDR_SIZE, end, begin, "FDE address range");
3527     }
3528
3529   if (augmentation[0])
3530     {
3531       if (any_lsda_needed)
3532         {
3533           int size = size_of_encoded_value (lsda_encoding);
3534
3535           if (lsda_encoding == DW_EH_PE_aligned)
3536             {
3537               int offset = (  4         /* Length */
3538                             + 4         /* CIE offset */
3539                             + 2 * size_of_encoded_value (fde_encoding)
3540                             + 1         /* Augmentation size */ );
3541               int pad = -offset & (PTR_SIZE - 1);
3542
3543               size += pad;
3544               gcc_assert (size_of_uleb128 (size) == 1);
3545             }
3546
3547           dw2_asm_output_data_uleb128 (size, "Augmentation size");
3548
3549           if (fde->uses_eh_lsda)
3550             {
3551               ASM_GENERATE_INTERNAL_LABEL (l1, second ? "LLSDAC" : "LLSDA",
3552                                            fde->funcdef_number);
3553               dw2_asm_output_encoded_addr_rtx (lsda_encoding,
3554                                                gen_rtx_SYMBOL_REF (Pmode, l1),
3555                                                false,
3556                                                "Language Specific Data Area");
3557             }
3558           else
3559             {
3560               if (lsda_encoding == DW_EH_PE_aligned)
3561                 ASM_OUTPUT_ALIGN (asm_out_file, floor_log2 (PTR_SIZE));
3562               dw2_asm_output_data (size_of_encoded_value (lsda_encoding), 0,
3563                                    "Language Specific Data Area (none)");
3564             }
3565         }
3566       else
3567         dw2_asm_output_data_uleb128 (0, "Augmentation size");
3568     }
3569
3570   /* Loop through the Call Frame Instructions associated with
3571      this FDE.  */
3572   fde->dw_fde_current_label = begin;
3573   if (!fde->dw_fde_switched_sections)
3574     for (cfi = fde->dw_fde_cfi; cfi != NULL; cfi = cfi->dw_cfi_next)
3575       output_cfi (cfi, fde, for_eh);
3576   else if (!second)
3577     {
3578       if (fde->dw_fde_switch_cfi)
3579         for (cfi = fde->dw_fde_cfi; cfi != NULL; cfi = cfi->dw_cfi_next)
3580           {
3581             output_cfi (cfi, fde, for_eh);
3582             if (cfi == fde->dw_fde_switch_cfi)
3583               break;
3584           }
3585     }
3586   else
3587     {
3588       dw_cfi_ref cfi_next = fde->dw_fde_cfi;
3589
3590       if (fde->dw_fde_switch_cfi)
3591         {
3592           cfi_next = fde->dw_fde_switch_cfi->dw_cfi_next;
3593           fde->dw_fde_switch_cfi->dw_cfi_next = NULL;
3594           output_cfis (fde->dw_fde_cfi, false, fde, for_eh);
3595           fde->dw_fde_switch_cfi->dw_cfi_next = cfi_next;
3596         }
3597       for (cfi = cfi_next; cfi != NULL; cfi = cfi->dw_cfi_next)
3598         output_cfi (cfi, fde, for_eh);
3599     }
3600
3601   /* If we are to emit a ref/link from function bodies to their frame tables,
3602      do it now.  This is typically performed to make sure that tables
3603      associated with functions are dragged with them and not discarded in
3604      garbage collecting links. We need to do this on a per function basis to
3605      cope with -ffunction-sections.  */
3606
3607 #ifdef ASM_OUTPUT_DWARF_TABLE_REF
3608   /* Switch to the function section, emit the ref to the tables, and
3609      switch *back* into the table section.  */
3610   switch_to_section (function_section (fde->decl));
3611   ASM_OUTPUT_DWARF_TABLE_REF (section_start_label);
3612   switch_to_frame_table_section (for_eh, true);
3613 #endif
3614
3615   /* Pad the FDE out to an address sized boundary.  */
3616   ASM_OUTPUT_ALIGN (asm_out_file,
3617                     floor_log2 ((for_eh ? PTR_SIZE : DWARF2_ADDR_SIZE)));
3618   ASM_OUTPUT_LABEL (asm_out_file, l2);
3619
3620   j += 2;
3621 }
3622
3623 /* Return true if frame description entry FDE is needed for EH.  */
3624
3625 static bool
3626 fde_needed_for_eh_p (dw_fde_ref fde)
3627 {
3628   if (flag_asynchronous_unwind_tables)
3629     return true;
3630
3631   if (TARGET_USES_WEAK_UNWIND_INFO && DECL_WEAK (fde->decl))
3632     return true;
3633
3634   if (fde->uses_eh_lsda)
3635     return true;
3636
3637   /* If exceptions are enabled, we have collected nothrow info.  */
3638   if (flag_exceptions && (fde->all_throwers_are_sibcalls || fde->nothrow))
3639     return false;
3640
3641   return true;
3642 }
3643
3644 /* Output the call frame information used to record information
3645    that relates to calculating the frame pointer, and records the
3646    location of saved registers.  */
3647
3648 static void
3649 output_call_frame_info (int for_eh)
3650 {
3651   unsigned int i;
3652   dw_fde_ref fde;
3653   dw_cfi_ref cfi;
3654   char l1[20], l2[20], section_start_label[20];
3655   bool any_lsda_needed = false;
3656   char augmentation[6];
3657   int augmentation_size;
3658   int fde_encoding = DW_EH_PE_absptr;
3659   int per_encoding = DW_EH_PE_absptr;
3660   int lsda_encoding = DW_EH_PE_absptr;
3661   int return_reg;
3662   rtx personality = NULL;
3663   int dw_cie_version;
3664
3665   /* Don't emit a CIE if there won't be any FDEs.  */
3666   if (fde_table_in_use == 0)
3667     return;
3668
3669   /* Nothing to do if the assembler's doing it all.  */
3670   if (dwarf2out_do_cfi_asm ())
3671     return;
3672
3673   /* If we don't have any functions we'll want to unwind out of, don't emit
3674      any EH unwind information.  If we make FDEs linkonce, we may have to
3675      emit an empty label for an FDE that wouldn't otherwise be emitted.  We
3676      want to avoid having an FDE kept around when the function it refers to
3677      is discarded.  Example where this matters: a primary function template
3678      in C++ requires EH information, an explicit specialization doesn't.  */
3679   if (for_eh)
3680     {
3681       bool any_eh_needed = false;
3682
3683       for (i = 0; i < fde_table_in_use; i++)
3684         if (fde_table[i].uses_eh_lsda)
3685           any_eh_needed = any_lsda_needed = true;
3686         else if (fde_needed_for_eh_p (&fde_table[i]))
3687           any_eh_needed = true;
3688         else if (TARGET_USES_WEAK_UNWIND_INFO)
3689           targetm.asm_out.emit_unwind_label (asm_out_file, fde_table[i].decl,
3690                                              1, 1);
3691
3692       if (!any_eh_needed)
3693         return;
3694     }
3695
3696   /* We're going to be generating comments, so turn on app.  */
3697   if (flag_debug_asm)
3698     app_enable ();
3699
3700   /* Switch to the proper frame section, first time.  */
3701   switch_to_frame_table_section (for_eh, false);
3702
3703   ASM_GENERATE_INTERNAL_LABEL (section_start_label, FRAME_BEGIN_LABEL, for_eh);
3704   ASM_OUTPUT_LABEL (asm_out_file, section_start_label);
3705
3706   /* Output the CIE.  */
3707   ASM_GENERATE_INTERNAL_LABEL (l1, CIE_AFTER_SIZE_LABEL, for_eh);
3708   ASM_GENERATE_INTERNAL_LABEL (l2, CIE_END_LABEL, for_eh);
3709   if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4 && !for_eh)
3710     dw2_asm_output_data (4, 0xffffffff,
3711       "Initial length escape value indicating 64-bit DWARF extension");
3712   dw2_asm_output_delta (for_eh ? 4 : DWARF_OFFSET_SIZE, l2, l1,
3713                         "Length of Common Information Entry");
3714   ASM_OUTPUT_LABEL (asm_out_file, l1);
3715
3716   /* Now that the CIE pointer is PC-relative for EH,
3717      use 0 to identify the CIE.  */
3718   dw2_asm_output_data ((for_eh ? 4 : DWARF_OFFSET_SIZE),
3719                        (for_eh ? 0 : DWARF_CIE_ID),
3720                        "CIE Identifier Tag");
3721
3722   /* Use the CIE version 3 for DWARF3; allow DWARF2 to continue to
3723      use CIE version 1, unless that would produce incorrect results
3724      due to overflowing the return register column.  */
3725   return_reg = DWARF2_FRAME_REG_OUT (DWARF_FRAME_RETURN_COLUMN, for_eh);
3726   dw_cie_version = 1;
3727   if (return_reg >= 256 || dwarf_version > 2)
3728     dw_cie_version = 3;
3729   dw2_asm_output_data (1, dw_cie_version, "CIE Version");
3730
3731   augmentation[0] = 0;
3732   augmentation_size = 0;
3733
3734   personality = current_unit_personality;
3735   if (for_eh)
3736     {
3737       char *p;
3738
3739       /* Augmentation:
3740          z      Indicates that a uleb128 is present to size the
3741                 augmentation section.
3742          L      Indicates the encoding (and thus presence) of
3743                 an LSDA pointer in the FDE augmentation.
3744          R      Indicates a non-default pointer encoding for
3745                 FDE code pointers.
3746          P      Indicates the presence of an encoding + language
3747                 personality routine in the CIE augmentation.  */
3748
3749       fde_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/1, /*global=*/0);
3750       per_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/2, /*global=*/1);
3751       lsda_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/0, /*global=*/0);
3752
3753       p = augmentation + 1;
3754       if (personality)
3755         {
3756           *p++ = 'P';
3757           augmentation_size += 1 + size_of_encoded_value (per_encoding);
3758           assemble_external_libcall (personality);
3759         }
3760       if (any_lsda_needed)
3761         {
3762           *p++ = 'L';
3763           augmentation_size += 1;
3764         }
3765       if (fde_encoding != DW_EH_PE_absptr)
3766         {
3767           *p++ = 'R';
3768           augmentation_size += 1;
3769         }
3770       if (p > augmentation + 1)
3771         {
3772           augmentation[0] = 'z';
3773           *p = '\0';
3774         }
3775
3776       /* Ug.  Some platforms can't do unaligned dynamic relocations at all.  */
3777       if (personality && per_encoding == DW_EH_PE_aligned)
3778         {
3779           int offset = (  4             /* Length */
3780                         + 4             /* CIE Id */
3781                         + 1             /* CIE version */
3782                         + strlen (augmentation) + 1     /* Augmentation */
3783                         + size_of_uleb128 (1)           /* Code alignment */
3784                         + size_of_sleb128 (DWARF_CIE_DATA_ALIGNMENT)
3785                         + 1             /* RA column */
3786                         + 1             /* Augmentation size */
3787                         + 1             /* Personality encoding */ );
3788           int pad = -offset & (PTR_SIZE - 1);
3789
3790           augmentation_size += pad;
3791
3792           /* Augmentations should be small, so there's scarce need to
3793              iterate for a solution.  Die if we exceed one uleb128 byte.  */
3794           gcc_assert (size_of_uleb128 (augmentation_size) == 1);
3795         }
3796     }
3797
3798   dw2_asm_output_nstring (augmentation, -1, "CIE Augmentation");
3799   if (dw_cie_version >= 4)
3800     {
3801       dw2_asm_output_data (1, DWARF2_ADDR_SIZE, "CIE Address Size");
3802       dw2_asm_output_data (1, 0, "CIE Segment Size");
3803     }
3804   dw2_asm_output_data_uleb128 (1, "CIE Code Alignment Factor");
3805   dw2_asm_output_data_sleb128 (DWARF_CIE_DATA_ALIGNMENT,
3806                                "CIE Data Alignment Factor");
3807
3808   if (dw_cie_version == 1)
3809     dw2_asm_output_data (1, return_reg, "CIE RA Column");
3810   else
3811     dw2_asm_output_data_uleb128 (return_reg, "CIE RA Column");
3812
3813   if (augmentation[0])
3814     {
3815       dw2_asm_output_data_uleb128 (augmentation_size, "Augmentation size");
3816       if (personality)
3817         {
3818           dw2_asm_output_data (1, per_encoding, "Personality (%s)",
3819                                eh_data_format_name (per_encoding));
3820           dw2_asm_output_encoded_addr_rtx (per_encoding,
3821                                            personality,
3822                                            true, NULL);
3823         }
3824
3825       if (any_lsda_needed)
3826         dw2_asm_output_data (1, lsda_encoding, "LSDA Encoding (%s)",
3827                              eh_data_format_name (lsda_encoding));
3828
3829       if (fde_encoding != DW_EH_PE_absptr)
3830         dw2_asm_output_data (1, fde_encoding, "FDE Encoding (%s)",
3831                              eh_data_format_name (fde_encoding));
3832     }
3833
3834   for (cfi = cie_cfi_head; cfi != NULL; cfi = cfi->dw_cfi_next)
3835     output_cfi (cfi, NULL, for_eh);
3836
3837   /* Pad the CIE out to an address sized boundary.  */
3838   ASM_OUTPUT_ALIGN (asm_out_file,
3839                     floor_log2 (for_eh ? PTR_SIZE : DWARF2_ADDR_SIZE));
3840   ASM_OUTPUT_LABEL (asm_out_file, l2);
3841
3842   /* Loop through all of the FDE's.  */
3843   for (i = 0; i < fde_table_in_use; i++)
3844     {
3845       unsigned int k;
3846       fde = &fde_table[i];
3847
3848       /* Don't emit EH unwind info for leaf functions that don't need it.  */
3849       if (for_eh && !fde_needed_for_eh_p (fde))
3850         continue;
3851
3852       for (k = 0; k < (fde->dw_fde_switched_sections ? 2 : 1); k++)
3853         output_fde (fde, for_eh, k, section_start_label, fde_encoding,
3854                     augmentation, any_lsda_needed, lsda_encoding);
3855     }
3856
3857   if (for_eh && targetm.terminate_dw2_eh_frame_info)
3858     dw2_asm_output_data (4, 0, "End of Table");
3859 #ifdef MIPS_DEBUGGING_INFO
3860   /* Work around Irix 6 assembler bug whereby labels at the end of a section
3861      get a value of 0.  Putting .align 0 after the label fixes it.  */
3862   ASM_OUTPUT_ALIGN (asm_out_file, 0);
3863 #endif
3864
3865   /* Turn off app to make assembly quicker.  */
3866   if (flag_debug_asm)
3867     app_disable ();
3868 }
3869
3870 /* Emit .cfi_startproc and .cfi_personality/.cfi_lsda if needed.  */
3871
3872 static void
3873 dwarf2out_do_cfi_startproc (bool second)
3874 {
3875   int enc;
3876   rtx ref;
3877   rtx personality = get_personality_function (current_function_decl);
3878
3879   fprintf (asm_out_file, "\t.cfi_startproc\n");
3880
3881   if (personality)
3882     {
3883       enc = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/2, /*global=*/1);
3884       ref = personality;
3885
3886       /* ??? The GAS support isn't entirely consistent.  We have to
3887          handle indirect support ourselves, but PC-relative is done
3888          in the assembler.  Further, the assembler can't handle any
3889          of the weirder relocation types.  */
3890       if (enc & DW_EH_PE_indirect)
3891         ref = dw2_force_const_mem (ref, true);
3892
3893       fprintf (asm_out_file, "\t.cfi_personality %#x,", enc);
3894       output_addr_const (asm_out_file, ref);
3895       fputc ('\n', asm_out_file);
3896     }
3897
3898   if (crtl->uses_eh_lsda)
3899     {
3900       char lab[20];
3901
3902       enc = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/0, /*global=*/0);
3903       ASM_GENERATE_INTERNAL_LABEL (lab, second ? "LLSDAC" : "LLSDA",
3904                                    current_function_funcdef_no);
3905       ref = gen_rtx_SYMBOL_REF (Pmode, lab);
3906       SYMBOL_REF_FLAGS (ref) = SYMBOL_FLAG_LOCAL;
3907
3908       if (enc & DW_EH_PE_indirect)
3909         ref = dw2_force_const_mem (ref, true);
3910
3911       fprintf (asm_out_file, "\t.cfi_lsda %#x,", enc);
3912       output_addr_const (asm_out_file, ref);
3913       fputc ('\n', asm_out_file);
3914     }
3915 }
3916
3917 /* Output a marker (i.e. a label) for the beginning of a function, before
3918    the prologue.  */
3919
3920 void
3921 dwarf2out_begin_prologue (unsigned int line ATTRIBUTE_UNUSED,
3922                           const char *file ATTRIBUTE_UNUSED)
3923 {
3924   char label[MAX_ARTIFICIAL_LABEL_BYTES];
3925   char * dup_label;
3926   dw_fde_ref fde;
3927   section *fnsec;
3928
3929   current_function_func_begin_label = NULL;
3930
3931 #ifdef TARGET_UNWIND_INFO
3932   /* ??? current_function_func_begin_label is also used by except.c
3933      for call-site information.  We must emit this label if it might
3934      be used.  */
3935   if ((! flag_exceptions || USING_SJLJ_EXCEPTIONS)
3936       && ! dwarf2out_do_frame ())
3937     return;
3938 #else
3939   if (! dwarf2out_do_frame ())
3940     return;
3941 #endif
3942
3943   fnsec = function_section (current_function_decl);
3944   switch_to_section (fnsec);
3945   ASM_GENERATE_INTERNAL_LABEL (label, FUNC_BEGIN_LABEL,
3946                                current_function_funcdef_no);
3947   ASM_OUTPUT_DEBUG_LABEL (asm_out_file, FUNC_BEGIN_LABEL,
3948                           current_function_funcdef_no);
3949   dup_label = xstrdup (label);
3950   current_function_func_begin_label = dup_label;
3951
3952 #ifdef TARGET_UNWIND_INFO
3953   /* We can elide the fde allocation if we're not emitting debug info.  */
3954   if (! dwarf2out_do_frame ())
3955     return;
3956 #endif
3957
3958   /* Expand the fde table if necessary.  */
3959   if (fde_table_in_use == fde_table_allocated)
3960     {
3961       fde_table_allocated += FDE_TABLE_INCREMENT;
3962       fde_table = GGC_RESIZEVEC (dw_fde_node, fde_table, fde_table_allocated);
3963       memset (fde_table + fde_table_in_use, 0,
3964               FDE_TABLE_INCREMENT * sizeof (dw_fde_node));
3965     }
3966
3967   /* Record the FDE associated with this function.  */
3968   current_funcdef_fde = fde_table_in_use;
3969
3970   /* Add the new FDE at the end of the fde_table.  */
3971   fde = &fde_table[fde_table_in_use++];
3972   fde->decl = current_function_decl;
3973   fde->dw_fde_begin = dup_label;
3974   fde->dw_fde_current_label = dup_label;
3975   fde->dw_fde_hot_section_label = NULL;
3976   fde->dw_fde_hot_section_end_label = NULL;
3977   fde->dw_fde_unlikely_section_label = NULL;
3978   fde->dw_fde_unlikely_section_end_label = NULL;
3979   fde->dw_fde_switched_sections = 0;
3980   fde->dw_fde_switched_cold_to_hot = 0;
3981   fde->dw_fde_end = NULL;
3982   fde->dw_fde_vms_end_prologue = NULL;
3983   fde->dw_fde_vms_begin_epilogue = NULL;
3984   fde->dw_fde_cfi = NULL;
3985   fde->dw_fde_switch_cfi = NULL;
3986   fde->funcdef_number = current_function_funcdef_no;
3987   fde->all_throwers_are_sibcalls = crtl->all_throwers_are_sibcalls;
3988   fde->uses_eh_lsda = crtl->uses_eh_lsda;
3989   fde->nothrow = crtl->nothrow;
3990   fde->drap_reg = INVALID_REGNUM;
3991   fde->vdrap_reg = INVALID_REGNUM;
3992   if (flag_reorder_blocks_and_partition)
3993     {
3994       section *unlikelysec;
3995       if (first_function_block_is_cold)
3996         fde->in_std_section = 1;
3997       else
3998         fde->in_std_section
3999           = (fnsec == text_section
4000              || (cold_text_section && fnsec == cold_text_section));
4001       unlikelysec = unlikely_text_section ();
4002       fde->cold_in_std_section
4003         = (unlikelysec == text_section
4004            || (cold_text_section && unlikelysec == cold_text_section));
4005     }
4006   else
4007     {
4008       fde->in_std_section
4009         = (fnsec == text_section
4010            || (cold_text_section && fnsec == cold_text_section));
4011       fde->cold_in_std_section = 0;
4012     }
4013
4014   args_size = old_args_size = 0;
4015
4016   /* We only want to output line number information for the genuine dwarf2
4017      prologue case, not the eh frame case.  */
4018 #ifdef DWARF2_DEBUGGING_INFO
4019   if (file)
4020     dwarf2out_source_line (line, file, 0, true);
4021 #endif
4022
4023   if (dwarf2out_do_cfi_asm ())
4024     dwarf2out_do_cfi_startproc (false);
4025   else
4026     {
4027       rtx personality = get_personality_function (current_function_decl);
4028       if (!current_unit_personality)
4029         current_unit_personality = personality;
4030
4031       /* We cannot keep a current personality per function as without CFI
4032          asm, at the point where we emit the CFI data, there is no current
4033          function anymore.  */
4034       if (personality && current_unit_personality != personality)
4035         sorry ("multiple EH personalities are supported only with assemblers "
4036                "supporting .cfi_personality directive");
4037     }
4038 }
4039
4040 /* Output a marker (i.e. a label) for the end of the generated code
4041    for a function prologue.  This gets called *after* the prologue code has
4042    been generated.  */
4043
4044 void
4045 dwarf2out_vms_end_prologue (unsigned int line ATTRIBUTE_UNUSED,
4046                         const char *file ATTRIBUTE_UNUSED)
4047 {
4048   dw_fde_ref fde;
4049   char label[MAX_ARTIFICIAL_LABEL_BYTES];
4050
4051   /* Output a label to mark the endpoint of the code generated for this
4052      function.  */
4053   ASM_GENERATE_INTERNAL_LABEL (label, PROLOGUE_END_LABEL,
4054                                current_function_funcdef_no);
4055   ASM_OUTPUT_DEBUG_LABEL (asm_out_file, PROLOGUE_END_LABEL,
4056                           current_function_funcdef_no);
4057   fde = &fde_table[fde_table_in_use - 1];
4058   fde->dw_fde_vms_end_prologue = xstrdup (label);
4059 }
4060
4061 /* Output a marker (i.e. a label) for the beginning of the generated code
4062    for a function epilogue.  This gets called *before* the prologue code has
4063    been generated.  */
4064
4065 void
4066 dwarf2out_vms_begin_epilogue (unsigned int line ATTRIBUTE_UNUSED,
4067                           const char *file ATTRIBUTE_UNUSED)
4068 {
4069   dw_fde_ref fde;
4070   char label[MAX_ARTIFICIAL_LABEL_BYTES];
4071
4072   fde = &fde_table[fde_table_in_use - 1];
4073   if (fde->dw_fde_vms_begin_epilogue)
4074     return;
4075
4076   /* Output a label to mark the endpoint of the code generated for this
4077      function.  */
4078   ASM_GENERATE_INTERNAL_LABEL (label, EPILOGUE_BEGIN_LABEL,
4079                                current_function_funcdef_no);
4080   ASM_OUTPUT_DEBUG_LABEL (asm_out_file, EPILOGUE_BEGIN_LABEL,
4081                           current_function_funcdef_no);
4082   fde->dw_fde_vms_begin_epilogue = xstrdup (label);
4083 }
4084
4085 /* Output a marker (i.e. a label) for the absolute end of the generated code
4086    for a function definition.  This gets called *after* the epilogue code has
4087    been generated.  */
4088
4089 void
4090 dwarf2out_end_epilogue (unsigned int line ATTRIBUTE_UNUSED,
4091                         const char *file ATTRIBUTE_UNUSED)
4092 {
4093   dw_fde_ref fde;
4094   char label[MAX_ARTIFICIAL_LABEL_BYTES];
4095
4096 #ifdef DWARF2_DEBUGGING_INFO
4097   last_var_location_insn = NULL_RTX;
4098 #endif
4099
4100   if (dwarf2out_do_cfi_asm ())
4101     fprintf (asm_out_file, "\t.cfi_endproc\n");
4102
4103   /* Output a label to mark the endpoint of the code generated for this
4104      function.  */
4105   ASM_GENERATE_INTERNAL_LABEL (label, FUNC_END_LABEL,
4106                                current_function_funcdef_no);
4107   ASM_OUTPUT_LABEL (asm_out_file, label);
4108   fde = current_fde ();
4109   gcc_assert (fde != NULL);
4110   fde->dw_fde_end = xstrdup (label);
4111 }
4112
4113 void
4114 dwarf2out_frame_init (void)
4115 {
4116   /* Allocate the initial hunk of the fde_table.  */
4117   fde_table = ggc_alloc_cleared_vec_dw_fde_node (FDE_TABLE_INCREMENT);
4118   fde_table_allocated = FDE_TABLE_INCREMENT;
4119   fde_table_in_use = 0;
4120
4121   /* Generate the CFA instructions common to all FDE's.  Do it now for the
4122      sake of lookup_cfa.  */
4123
4124   /* On entry, the Canonical Frame Address is at SP.  */
4125   dwarf2out_def_cfa (NULL, STACK_POINTER_REGNUM, INCOMING_FRAME_SP_OFFSET);
4126
4127 #ifdef DWARF2_UNWIND_INFO
4128   if (DWARF2_UNWIND_INFO || DWARF2_FRAME_INFO)
4129     initial_return_save (INCOMING_RETURN_ADDR_RTX);
4130 #endif
4131 }
4132
4133 void
4134 dwarf2out_frame_finish (void)
4135 {
4136   /* Output call frame information.  */
4137   if (DWARF2_FRAME_INFO)
4138     output_call_frame_info (0);
4139
4140 #ifndef TARGET_UNWIND_INFO
4141   /* Output another copy for the unwinder.  */
4142   if (! USING_SJLJ_EXCEPTIONS && (flag_unwind_tables || flag_exceptions))
4143     output_call_frame_info (1);
4144 #endif
4145 }
4146
4147 /* Note that the current function section is being used for code.  */
4148
4149 static void
4150 dwarf2out_note_section_used (void)
4151 {
4152   section *sec = current_function_section ();
4153   if (sec == text_section)
4154     text_section_used = true;
4155   else if (sec == cold_text_section)
4156     cold_text_section_used = true;
4157 }
4158
4159 void
4160 dwarf2out_switch_text_section (void)
4161 {
4162   dw_fde_ref fde = current_fde ();
4163
4164   gcc_assert (cfun && fde && !fde->dw_fde_switched_sections);
4165
4166   fde->dw_fde_switched_sections = 1;
4167   fde->dw_fde_switched_cold_to_hot = !in_cold_section_p;
4168
4169   fde->dw_fde_hot_section_label = crtl->subsections.hot_section_label;
4170   fde->dw_fde_hot_section_end_label = crtl->subsections.hot_section_end_label;
4171   fde->dw_fde_unlikely_section_label = crtl->subsections.cold_section_label;
4172   fde->dw_fde_unlikely_section_end_label = crtl->subsections.cold_section_end_label;
4173   have_multiple_function_sections = true;
4174
4175   /* Reset the current label on switching text sections, so that we
4176      don't attempt to advance_loc4 between labels in different sections.  */
4177   fde->dw_fde_current_label = NULL;
4178
4179   /* There is no need to mark used sections when not debugging.  */
4180   if (cold_text_section != NULL)
4181     dwarf2out_note_section_used ();
4182
4183   if (dwarf2out_do_cfi_asm ())
4184     fprintf (asm_out_file, "\t.cfi_endproc\n");
4185
4186   /* Now do the real section switch.  */
4187   switch_to_section (current_function_section ());
4188
4189   if (dwarf2out_do_cfi_asm ())
4190     {
4191       dwarf2out_do_cfi_startproc (true);
4192       /* As this is a different FDE, insert all current CFI instructions
4193          again.  */
4194       output_cfis (fde->dw_fde_cfi, true, fde, true);
4195     }
4196   else
4197     {
4198       dw_cfi_ref cfi = fde->dw_fde_cfi;
4199
4200       cfi = fde->dw_fde_cfi;
4201       if (cfi)
4202         while (cfi->dw_cfi_next != NULL)
4203           cfi = cfi->dw_cfi_next;
4204       fde->dw_fde_switch_cfi = cfi;
4205     }
4206 }
4207 #endif
4208 \f
4209 /* And now, the subset of the debugging information support code necessary
4210    for emitting location expressions.  */
4211
4212 /* Data about a single source file.  */
4213 struct GTY(()) dwarf_file_data {
4214   const char * filename;
4215   int emitted_number;
4216 };
4217
4218 typedef struct dw_val_struct *dw_val_ref;
4219 typedef struct die_struct *dw_die_ref;
4220 typedef const struct die_struct *const_dw_die_ref;
4221 typedef struct dw_loc_descr_struct *dw_loc_descr_ref;
4222 typedef struct dw_loc_list_struct *dw_loc_list_ref;
4223
4224 typedef struct GTY(()) deferred_locations_struct
4225 {
4226   tree variable;
4227   dw_die_ref die;
4228 } deferred_locations;
4229
4230 DEF_VEC_O(deferred_locations);
4231 DEF_VEC_ALLOC_O(deferred_locations,gc);
4232
4233 static GTY(()) VEC(deferred_locations, gc) *deferred_locations_list;
4234
4235 DEF_VEC_P(dw_die_ref);
4236 DEF_VEC_ALLOC_P(dw_die_ref,heap);
4237
4238 /* Each DIE may have a series of attribute/value pairs.  Values
4239    can take on several forms.  The forms that are used in this
4240    implementation are listed below.  */
4241
4242 enum dw_val_class
4243 {
4244   dw_val_class_addr,
4245   dw_val_class_offset,
4246   dw_val_class_loc,
4247   dw_val_class_loc_list,
4248   dw_val_class_range_list,
4249   dw_val_class_const,
4250   dw_val_class_unsigned_const,
4251   dw_val_class_const_double,
4252   dw_val_class_vec,
4253   dw_val_class_flag,
4254   dw_val_class_die_ref,
4255   dw_val_class_fde_ref,
4256   dw_val_class_lbl_id,
4257   dw_val_class_lineptr,
4258   dw_val_class_str,
4259   dw_val_class_macptr,
4260   dw_val_class_file,
4261   dw_val_class_data8,
4262   dw_val_class_vms_delta
4263 };
4264
4265 /* Describe a floating point constant value, or a vector constant value.  */
4266
4267 typedef struct GTY(()) dw_vec_struct {
4268   unsigned char * GTY((length ("%h.length"))) array;
4269   unsigned length;
4270   unsigned elt_size;
4271 }
4272 dw_vec_const;
4273
4274 /* The dw_val_node describes an attribute's value, as it is
4275    represented internally.  */
4276
4277 typedef struct GTY(()) dw_val_struct {
4278   enum dw_val_class val_class;
4279   union dw_val_struct_union
4280     {
4281       rtx GTY ((tag ("dw_val_class_addr"))) val_addr;
4282       unsigned HOST_WIDE_INT GTY ((tag ("dw_val_class_offset"))) val_offset;
4283       dw_loc_list_ref GTY ((tag ("dw_val_class_loc_list"))) val_loc_list;
4284       dw_loc_descr_ref GTY ((tag ("dw_val_class_loc"))) val_loc;
4285       HOST_WIDE_INT GTY ((default)) val_int;
4286       unsigned HOST_WIDE_INT GTY ((tag ("dw_val_class_unsigned_const"))) val_unsigned;
4287       double_int GTY ((tag ("dw_val_class_const_double"))) val_double;
4288       dw_vec_const GTY ((tag ("dw_val_class_vec"))) val_vec;
4289       struct dw_val_die_union
4290         {
4291           dw_die_ref die;
4292           int external;
4293         } GTY ((tag ("dw_val_class_die_ref"))) val_die_ref;
4294       unsigned GTY ((tag ("dw_val_class_fde_ref"))) val_fde_index;
4295       struct indirect_string_node * GTY ((tag ("dw_val_class_str"))) val_str;
4296       char * GTY ((tag ("dw_val_class_lbl_id"))) val_lbl_id;
4297       unsigned char GTY ((tag ("dw_val_class_flag"))) val_flag;
4298       struct dwarf_file_data * GTY ((tag ("dw_val_class_file"))) val_file;
4299       unsigned char GTY ((tag ("dw_val_class_data8"))) val_data8[8];
4300       struct dw_val_vms_delta_union
4301         {
4302           char * lbl1;
4303           char * lbl2;
4304         } GTY ((tag ("dw_val_class_vms_delta"))) val_vms_delta;
4305     }
4306   GTY ((desc ("%1.val_class"))) v;
4307 }
4308 dw_val_node;
4309
4310 /* Locations in memory are described using a sequence of stack machine
4311    operations.  */
4312
4313 typedef struct GTY(()) dw_loc_descr_struct {
4314   dw_loc_descr_ref dw_loc_next;
4315   ENUM_BITFIELD (dwarf_location_atom) dw_loc_opc : 8;
4316   /* Used to distinguish DW_OP_addr with a direct symbol relocation
4317      from DW_OP_addr with a dtp-relative symbol relocation.  */
4318   unsigned int dtprel : 1;
4319   int dw_loc_addr;
4320   dw_val_node dw_loc_oprnd1;
4321   dw_val_node dw_loc_oprnd2;
4322 }
4323 dw_loc_descr_node;
4324
4325 /* Location lists are ranges + location descriptions for that range,
4326    so you can track variables that are in different places over
4327    their entire life.  */
4328 typedef struct GTY(()) dw_loc_list_struct {
4329   dw_loc_list_ref dw_loc_next;
4330   const char *begin; /* Label for begin address of range */
4331   const char *end;  /* Label for end address of range */
4332   char *ll_symbol; /* Label for beginning of location list.
4333                       Only on head of list */
4334   const char *section; /* Section this loclist is relative to */
4335   dw_loc_descr_ref expr;
4336 } dw_loc_list_node;
4337
4338 #if defined (DWARF2_DEBUGGING_INFO) || defined (DWARF2_UNWIND_INFO)
4339
4340 static dw_loc_descr_ref int_loc_descriptor (HOST_WIDE_INT);
4341
4342 /* Convert a DWARF stack opcode into its string name.  */
4343
4344 static const char *
4345 dwarf_stack_op_name (unsigned int op)
4346 {
4347   switch (op)
4348     {
4349     case DW_OP_addr:
4350       return "DW_OP_addr";
4351     case DW_OP_deref:
4352       return "DW_OP_deref";
4353     case DW_OP_const1u:
4354       return "DW_OP_const1u";
4355     case DW_OP_const1s:
4356       return "DW_OP_const1s";
4357     case DW_OP_const2u:
4358       return "DW_OP_const2u";
4359     case DW_OP_const2s:
4360       return "DW_OP_const2s";
4361     case DW_OP_const4u:
4362       return "DW_OP_const4u";
4363     case DW_OP_const4s:
4364       return "DW_OP_const4s";
4365     case DW_OP_const8u:
4366       return "DW_OP_const8u";
4367     case DW_OP_const8s:
4368       return "DW_OP_const8s";
4369     case DW_OP_constu:
4370       return "DW_OP_constu";
4371     case DW_OP_consts:
4372       return "DW_OP_consts";
4373     case DW_OP_dup:
4374       return "DW_OP_dup";
4375     case DW_OP_drop:
4376       return "DW_OP_drop";
4377     case DW_OP_over:
4378       return "DW_OP_over";
4379     case DW_OP_pick:
4380       return "DW_OP_pick";
4381     case DW_OP_swap:
4382       return "DW_OP_swap";
4383     case DW_OP_rot:
4384       return "DW_OP_rot";
4385     case DW_OP_xderef:
4386       return "DW_OP_xderef";
4387     case DW_OP_abs:
4388       return "DW_OP_abs";
4389     case DW_OP_and:
4390       return "DW_OP_and";
4391     case DW_OP_div:
4392       return "DW_OP_div";
4393     case DW_OP_minus:
4394       return "DW_OP_minus";
4395     case DW_OP_mod:
4396       return "DW_OP_mod";
4397     case DW_OP_mul:
4398       return "DW_OP_mul";
4399     case DW_OP_neg:
4400       return "DW_OP_neg";
4401     case DW_OP_not:
4402       return "DW_OP_not";
4403     case DW_OP_or:
4404       return "DW_OP_or";
4405     case DW_OP_plus:
4406       return "DW_OP_plus";
4407     case DW_OP_plus_uconst:
4408       return "DW_OP_plus_uconst";
4409     case DW_OP_shl:
4410       return "DW_OP_shl";
4411     case DW_OP_shr:
4412       return "DW_OP_shr";
4413     case DW_OP_shra:
4414       return "DW_OP_shra";
4415     case DW_OP_xor:
4416       return "DW_OP_xor";
4417     case DW_OP_bra:
4418       return "DW_OP_bra";
4419     case DW_OP_eq:
4420       return "DW_OP_eq";
4421     case DW_OP_ge:
4422       return "DW_OP_ge";
4423     case DW_OP_gt:
4424       return "DW_OP_gt";
4425     case DW_OP_le:
4426       return "DW_OP_le";
4427     case DW_OP_lt:
4428       return "DW_OP_lt";
4429     case DW_OP_ne:
4430       return "DW_OP_ne";
4431     case DW_OP_skip:
4432       return "DW_OP_skip";
4433     case DW_OP_lit0:
4434       return "DW_OP_lit0";
4435     case DW_OP_lit1:
4436       return "DW_OP_lit1";
4437     case DW_OP_lit2:
4438       return "DW_OP_lit2";
4439     case DW_OP_lit3:
4440       return "DW_OP_lit3";
4441     case DW_OP_lit4:
4442       return "DW_OP_lit4";
4443     case DW_OP_lit5:
4444       return "DW_OP_lit5";
4445     case DW_OP_lit6:
4446       return "DW_OP_lit6";
4447     case DW_OP_lit7:
4448       return "DW_OP_lit7";
4449     case DW_OP_lit8:
4450       return "DW_OP_lit8";
4451     case DW_OP_lit9:
4452       return "DW_OP_lit9";
4453     case DW_OP_lit10:
4454       return "DW_OP_lit10";
4455     case DW_OP_lit11:
4456       return "DW_OP_lit11";
4457     case DW_OP_lit12:
4458       return "DW_OP_lit12";
4459     case DW_OP_lit13:
4460       return "DW_OP_lit13";
4461     case DW_OP_lit14:
4462       return "DW_OP_lit14";
4463     case DW_OP_lit15:
4464       return "DW_OP_lit15";
4465     case DW_OP_lit16:
4466       return "DW_OP_lit16";
4467     case DW_OP_lit17:
4468       return "DW_OP_lit17";
4469     case DW_OP_lit18:
4470       return "DW_OP_lit18";
4471     case DW_OP_lit19:
4472       return "DW_OP_lit19";
4473     case DW_OP_lit20:
4474       return "DW_OP_lit20";
4475     case DW_OP_lit21:
4476       return "DW_OP_lit21";
4477     case DW_OP_lit22:
4478       return "DW_OP_lit22";
4479     case DW_OP_lit23:
4480       return "DW_OP_lit23";
4481     case DW_OP_lit24:
4482       return "DW_OP_lit24";
4483     case DW_OP_lit25:
4484       return "DW_OP_lit25";
4485     case DW_OP_lit26:
4486       return "DW_OP_lit26";
4487     case DW_OP_lit27:
4488       return "DW_OP_lit27";
4489     case DW_OP_lit28:
4490       return "DW_OP_lit28";
4491     case DW_OP_lit29:
4492       return "DW_OP_lit29";
4493     case DW_OP_lit30:
4494       return "DW_OP_lit30";
4495     case DW_OP_lit31:
4496       return "DW_OP_lit31";
4497     case DW_OP_reg0:
4498       return "DW_OP_reg0";
4499     case DW_OP_reg1:
4500       return "DW_OP_reg1";
4501     case DW_OP_reg2:
4502       return "DW_OP_reg2";
4503     case DW_OP_reg3:
4504       return "DW_OP_reg3";
4505     case DW_OP_reg4:
4506       return "DW_OP_reg4";
4507     case DW_OP_reg5:
4508       return "DW_OP_reg5";
4509     case DW_OP_reg6:
4510       return "DW_OP_reg6";
4511     case DW_OP_reg7:
4512       return "DW_OP_reg7";
4513     case DW_OP_reg8:
4514       return "DW_OP_reg8";
4515     case DW_OP_reg9:
4516       return "DW_OP_reg9";
4517     case DW_OP_reg10:
4518       return "DW_OP_reg10";
4519     case DW_OP_reg11:
4520       return "DW_OP_reg11";
4521     case DW_OP_reg12:
4522       return "DW_OP_reg12";
4523     case DW_OP_reg13:
4524       return "DW_OP_reg13";
4525     case DW_OP_reg14:
4526       return "DW_OP_reg14";
4527     case DW_OP_reg15:
4528       return "DW_OP_reg15";
4529     case DW_OP_reg16:
4530       return "DW_OP_reg16";
4531     case DW_OP_reg17:
4532       return "DW_OP_reg17";
4533     case DW_OP_reg18:
4534       return "DW_OP_reg18";
4535     case DW_OP_reg19:
4536       return "DW_OP_reg19";
4537     case DW_OP_reg20:
4538       return "DW_OP_reg20";
4539     case DW_OP_reg21:
4540       return "DW_OP_reg21";
4541     case DW_OP_reg22:
4542       return "DW_OP_reg22";
4543     case DW_OP_reg23:
4544       return "DW_OP_reg23";
4545     case DW_OP_reg24:
4546       return "DW_OP_reg24";
4547     case DW_OP_reg25:
4548       return "DW_OP_reg25";
4549     case DW_OP_reg26:
4550       return "DW_OP_reg26";
4551     case DW_OP_reg27:
4552       return "DW_OP_reg27";
4553     case DW_OP_reg28:
4554       return "DW_OP_reg28";
4555     case DW_OP_reg29:
4556       return "DW_OP_reg29";
4557     case DW_OP_reg30:
4558       return "DW_OP_reg30";
4559     case DW_OP_reg31:
4560       return "DW_OP_reg31";
4561     case DW_OP_breg0:
4562       return "DW_OP_breg0";
4563     case DW_OP_breg1:
4564       return "DW_OP_breg1";
4565     case DW_OP_breg2:
4566       return "DW_OP_breg2";
4567     case DW_OP_breg3:
4568       return "DW_OP_breg3";
4569     case DW_OP_breg4:
4570       return "DW_OP_breg4";
4571     case DW_OP_breg5:
4572       return "DW_OP_breg5";
4573     case DW_OP_breg6:
4574       return "DW_OP_breg6";
4575     case DW_OP_breg7:
4576       return "DW_OP_breg7";
4577     case DW_OP_breg8:
4578       return "DW_OP_breg8";
4579     case DW_OP_breg9:
4580       return "DW_OP_breg9";
4581     case DW_OP_breg10:
4582       return "DW_OP_breg10";
4583     case DW_OP_breg11:
4584       return "DW_OP_breg11";
4585     case DW_OP_breg12:
4586       return "DW_OP_breg12";
4587     case DW_OP_breg13:
4588       return "DW_OP_breg13";
4589     case DW_OP_breg14:
4590       return "DW_OP_breg14";
4591     case DW_OP_breg15:
4592       return "DW_OP_breg15";
4593     case DW_OP_breg16:
4594       return "DW_OP_breg16";
4595     case DW_OP_breg17:
4596       return "DW_OP_breg17";
4597     case DW_OP_breg18:
4598       return "DW_OP_breg18";
4599     case DW_OP_breg19:
4600       return "DW_OP_breg19";
4601     case DW_OP_breg20:
4602       return "DW_OP_breg20";
4603     case DW_OP_breg21:
4604       return "DW_OP_breg21";
4605     case DW_OP_breg22:
4606       return "DW_OP_breg22";
4607     case DW_OP_breg23:
4608       return "DW_OP_breg23";
4609     case DW_OP_breg24:
4610       return "DW_OP_breg24";
4611     case DW_OP_breg25:
4612       return "DW_OP_breg25";
4613     case DW_OP_breg26:
4614       return "DW_OP_breg26";
4615     case DW_OP_breg27:
4616       return "DW_OP_breg27";
4617     case DW_OP_breg28:
4618       return "DW_OP_breg28";
4619     case DW_OP_breg29:
4620       return "DW_OP_breg29";
4621     case DW_OP_breg30:
4622       return "DW_OP_breg30";
4623     case DW_OP_breg31:
4624       return "DW_OP_breg31";
4625     case DW_OP_regx:
4626       return "DW_OP_regx";
4627     case DW_OP_fbreg:
4628       return "DW_OP_fbreg";
4629     case DW_OP_bregx:
4630       return "DW_OP_bregx";
4631     case DW_OP_piece:
4632       return "DW_OP_piece";
4633     case DW_OP_deref_size:
4634       return "DW_OP_deref_size";
4635     case DW_OP_xderef_size:
4636       return "DW_OP_xderef_size";
4637     case DW_OP_nop:
4638       return "DW_OP_nop";
4639
4640     case DW_OP_push_object_address:
4641       return "DW_OP_push_object_address";
4642     case DW_OP_call2:
4643       return "DW_OP_call2";
4644     case DW_OP_call4:
4645       return "DW_OP_call4";
4646     case DW_OP_call_ref:
4647       return "DW_OP_call_ref";
4648     case DW_OP_implicit_value:
4649       return "DW_OP_implicit_value";
4650     case DW_OP_stack_value:
4651       return "DW_OP_stack_value";
4652     case DW_OP_form_tls_address:
4653       return "DW_OP_form_tls_address";
4654     case DW_OP_call_frame_cfa:
4655       return "DW_OP_call_frame_cfa";
4656     case DW_OP_bit_piece:
4657       return "DW_OP_bit_piece";
4658
4659     case DW_OP_GNU_push_tls_address:
4660       return "DW_OP_GNU_push_tls_address";
4661     case DW_OP_GNU_uninit:
4662       return "DW_OP_GNU_uninit";
4663     case DW_OP_GNU_encoded_addr:
4664       return "DW_OP_GNU_encoded_addr";
4665
4666     default:
4667       return "OP_<unknown>";
4668     }
4669 }
4670
4671 /* Return a pointer to a newly allocated location description.  Location
4672    descriptions are simple expression terms that can be strung
4673    together to form more complicated location (address) descriptions.  */
4674
4675 static inline dw_loc_descr_ref
4676 new_loc_descr (enum dwarf_location_atom op, unsigned HOST_WIDE_INT oprnd1,
4677                unsigned HOST_WIDE_INT oprnd2)
4678 {
4679   dw_loc_descr_ref descr = ggc_alloc_cleared_dw_loc_descr_node ();
4680
4681   descr->dw_loc_opc = op;
4682   descr->dw_loc_oprnd1.val_class = dw_val_class_unsigned_const;
4683   descr->dw_loc_oprnd1.v.val_unsigned = oprnd1;
4684   descr->dw_loc_oprnd2.val_class = dw_val_class_unsigned_const;
4685   descr->dw_loc_oprnd2.v.val_unsigned = oprnd2;
4686
4687   return descr;
4688 }
4689
4690 /* Return a pointer to a newly allocated location description for
4691    REG and OFFSET.  */
4692
4693 static inline dw_loc_descr_ref
4694 new_reg_loc_descr (unsigned int reg,  unsigned HOST_WIDE_INT offset)
4695 {
4696   if (reg <= 31)
4697     return new_loc_descr ((enum dwarf_location_atom) (DW_OP_breg0 + reg),
4698                           offset, 0);
4699   else
4700     return new_loc_descr (DW_OP_bregx, reg, offset);
4701 }
4702
4703 /* Add a location description term to a location description expression.  */
4704
4705 static inline void
4706 add_loc_descr (dw_loc_descr_ref *list_head, dw_loc_descr_ref descr)
4707 {
4708   dw_loc_descr_ref *d;
4709
4710   /* Find the end of the chain.  */
4711   for (d = list_head; (*d) != NULL; d = &(*d)->dw_loc_next)
4712     ;
4713
4714   *d = descr;
4715 }
4716
4717 /* Add a constant OFFSET to a location expression.  */
4718
4719 static void
4720 loc_descr_plus_const (dw_loc_descr_ref *list_head, HOST_WIDE_INT offset)
4721 {
4722   dw_loc_descr_ref loc;
4723   HOST_WIDE_INT *p;
4724
4725   gcc_assert (*list_head != NULL);
4726
4727   if (!offset)
4728     return;
4729
4730   /* Find the end of the chain.  */
4731   for (loc = *list_head; loc->dw_loc_next != NULL; loc = loc->dw_loc_next)
4732     ;
4733
4734   p = NULL;
4735   if (loc->dw_loc_opc == DW_OP_fbreg
4736       || (loc->dw_loc_opc >= DW_OP_breg0 && loc->dw_loc_opc <= DW_OP_breg31))
4737     p = &loc->dw_loc_oprnd1.v.val_int;
4738   else if (loc->dw_loc_opc == DW_OP_bregx)
4739     p = &loc->dw_loc_oprnd2.v.val_int;
4740
4741   /* If the last operation is fbreg, breg{0..31,x}, optimize by adjusting its
4742      offset.  Don't optimize if an signed integer overflow would happen.  */
4743   if (p != NULL
4744       && ((offset > 0 && *p <= INTTYPE_MAXIMUM (HOST_WIDE_INT) - offset)
4745           || (offset < 0 && *p >= INTTYPE_MINIMUM (HOST_WIDE_INT) - offset)))
4746     *p += offset;
4747
4748   else if (offset > 0)
4749     loc->dw_loc_next = new_loc_descr (DW_OP_plus_uconst, offset, 0);
4750
4751   else
4752     {
4753       loc->dw_loc_next = int_loc_descriptor (-offset);
4754       add_loc_descr (&loc->dw_loc_next, new_loc_descr (DW_OP_minus, 0, 0));
4755     }
4756 }
4757
4758 #ifdef DWARF2_DEBUGGING_INFO
4759 /* Add a constant OFFSET to a location list.  */
4760
4761 static void
4762 loc_list_plus_const (dw_loc_list_ref list_head, HOST_WIDE_INT offset)
4763 {
4764   dw_loc_list_ref d;
4765   for (d = list_head; d != NULL; d = d->dw_loc_next)
4766     loc_descr_plus_const (&d->expr, offset);
4767 }
4768 #endif
4769
4770 /* Return the size of a location descriptor.  */
4771
4772 static unsigned long
4773 size_of_loc_descr (dw_loc_descr_ref loc)
4774 {
4775   unsigned long size = 1;
4776
4777   switch (loc->dw_loc_opc)
4778     {
4779     case DW_OP_addr:
4780       size += DWARF2_ADDR_SIZE;
4781       break;
4782     case DW_OP_const1u:
4783     case DW_OP_const1s:
4784       size += 1;
4785       break;
4786     case DW_OP_const2u:
4787     case DW_OP_const2s:
4788       size += 2;
4789       break;
4790     case DW_OP_const4u:
4791     case DW_OP_const4s:
4792       size += 4;
4793       break;
4794     case DW_OP_const8u:
4795     case DW_OP_const8s:
4796       size += 8;
4797       break;
4798     case DW_OP_constu:
4799       size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
4800       break;
4801     case DW_OP_consts:
4802       size += size_of_sleb128 (loc->dw_loc_oprnd1.v.val_int);
4803       break;
4804     case DW_OP_pick:
4805       size += 1;
4806       break;
4807     case DW_OP_plus_uconst:
4808       size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
4809       break;
4810     case DW_OP_skip:
4811     case DW_OP_bra:
4812       size += 2;
4813       break;
4814     case DW_OP_breg0:
4815     case DW_OP_breg1:
4816     case DW_OP_breg2:
4817     case DW_OP_breg3:
4818     case DW_OP_breg4:
4819     case DW_OP_breg5:
4820     case DW_OP_breg6:
4821     case DW_OP_breg7:
4822     case DW_OP_breg8:
4823     case DW_OP_breg9:
4824     case DW_OP_breg10:
4825     case DW_OP_breg11:
4826     case DW_OP_breg12:
4827     case DW_OP_breg13:
4828     case DW_OP_breg14:
4829     case DW_OP_breg15:
4830     case DW_OP_breg16:
4831     case DW_OP_breg17:
4832     case DW_OP_breg18:
4833     case DW_OP_breg19:
4834     case DW_OP_breg20:
4835     case DW_OP_breg21:
4836     case DW_OP_breg22:
4837     case DW_OP_breg23:
4838     case DW_OP_breg24:
4839     case DW_OP_breg25:
4840     case DW_OP_breg26:
4841     case DW_OP_breg27:
4842     case DW_OP_breg28:
4843     case DW_OP_breg29:
4844     case DW_OP_breg30:
4845     case DW_OP_breg31:
4846       size += size_of_sleb128 (loc->dw_loc_oprnd1.v.val_int);
4847       break;
4848     case DW_OP_regx:
4849       size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
4850       break;
4851     case DW_OP_fbreg:
4852       size += size_of_sleb128 (loc->dw_loc_oprnd1.v.val_int);
4853       break;
4854     case DW_OP_bregx:
4855       size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
4856       size += size_of_sleb128 (loc->dw_loc_oprnd2.v.val_int);
4857       break;
4858     case DW_OP_piece:
4859       size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
4860       break;
4861     case DW_OP_bit_piece:
4862       size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
4863       size += size_of_uleb128 (loc->dw_loc_oprnd2.v.val_unsigned);
4864       break;
4865     case DW_OP_deref_size:
4866     case DW_OP_xderef_size:
4867       size += 1;
4868       break;
4869     case DW_OP_call2:
4870       size += 2;
4871       break;
4872     case DW_OP_call4:
4873       size += 4;
4874       break;
4875     case DW_OP_call_ref:
4876       size += DWARF2_ADDR_SIZE;
4877       break;
4878     case DW_OP_implicit_value:
4879       size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned)
4880               + loc->dw_loc_oprnd1.v.val_unsigned;
4881       break;
4882     default:
4883       break;
4884     }
4885
4886   return size;
4887 }
4888
4889 /* Return the size of a series of location descriptors.  */
4890
4891 static unsigned long
4892 size_of_locs (dw_loc_descr_ref loc)
4893 {
4894   dw_loc_descr_ref l;
4895   unsigned long size;
4896
4897   /* If there are no skip or bra opcodes, don't fill in the dw_loc_addr
4898      field, to avoid writing to a PCH file.  */
4899   for (size = 0, l = loc; l != NULL; l = l->dw_loc_next)
4900     {
4901       if (l->dw_loc_opc == DW_OP_skip || l->dw_loc_opc == DW_OP_bra)
4902         break;
4903       size += size_of_loc_descr (l);
4904     }
4905   if (! l)
4906     return size;
4907
4908   for (size = 0, l = loc; l != NULL; l = l->dw_loc_next)
4909     {
4910       l->dw_loc_addr = size;
4911       size += size_of_loc_descr (l);
4912     }
4913
4914   return size;
4915 }
4916
4917 #ifdef DWARF2_DEBUGGING_INFO
4918 static HOST_WIDE_INT extract_int (const unsigned char *, unsigned);
4919 #endif
4920
4921 /* Output location description stack opcode's operands (if any).  */
4922
4923 static void
4924 output_loc_operands (dw_loc_descr_ref loc)
4925 {
4926   dw_val_ref val1 = &loc->dw_loc_oprnd1;
4927   dw_val_ref val2 = &loc->dw_loc_oprnd2;
4928
4929   switch (loc->dw_loc_opc)
4930     {
4931 #ifdef DWARF2_DEBUGGING_INFO
4932     case DW_OP_const2u:
4933     case DW_OP_const2s:
4934       dw2_asm_output_data (2, val1->v.val_int, NULL);
4935       break;
4936     case DW_OP_const4u:
4937       if (loc->dtprel)
4938         {
4939           gcc_assert (targetm.asm_out.output_dwarf_dtprel);
4940           targetm.asm_out.output_dwarf_dtprel (asm_out_file, 4,
4941                                                val1->v.val_addr);
4942           fputc ('\n', asm_out_file);
4943           break;
4944         }
4945       /* FALLTHRU */
4946     case DW_OP_const4s:
4947       dw2_asm_output_data (4, val1->v.val_int, NULL);
4948       break;
4949     case DW_OP_const8u:
4950       if (loc->dtprel)
4951         {
4952           gcc_assert (targetm.asm_out.output_dwarf_dtprel);
4953           targetm.asm_out.output_dwarf_dtprel (asm_out_file, 8,
4954                                                val1->v.val_addr);
4955           fputc ('\n', asm_out_file);
4956           break;
4957         }
4958       /* FALLTHRU */
4959     case DW_OP_const8s:
4960       gcc_assert (HOST_BITS_PER_WIDE_INT >= 64);
4961       dw2_asm_output_data (8, val1->v.val_int, NULL);
4962       break;
4963     case DW_OP_skip:
4964     case DW_OP_bra:
4965       {
4966         int offset;
4967
4968         gcc_assert (val1->val_class == dw_val_class_loc);
4969         offset = val1->v.val_loc->dw_loc_addr - (loc->dw_loc_addr + 3);
4970
4971         dw2_asm_output_data (2, offset, NULL);
4972       }
4973       break;
4974     case DW_OP_implicit_value:
4975       dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
4976       switch (val2->val_class)
4977         {
4978         case dw_val_class_const:
4979           dw2_asm_output_data (val1->v.val_unsigned, val2->v.val_int, NULL);
4980           break;
4981         case dw_val_class_vec:
4982           {
4983             unsigned int elt_size = val2->v.val_vec.elt_size;
4984             unsigned int len = val2->v.val_vec.length;
4985             unsigned int i;
4986             unsigned char *p;
4987
4988             if (elt_size > sizeof (HOST_WIDE_INT))
4989               {
4990                 elt_size /= 2;
4991                 len *= 2;
4992               }
4993             for (i = 0, p = val2->v.val_vec.array;
4994                  i < len;
4995                  i++, p += elt_size)
4996               dw2_asm_output_data (elt_size, extract_int (p, elt_size),
4997                                    "fp or vector constant word %u", i);
4998           }
4999           break;
5000         case dw_val_class_const_double:
5001           {
5002             unsigned HOST_WIDE_INT first, second;
5003
5004             if (WORDS_BIG_ENDIAN)
5005               {
5006                 first = val2->v.val_double.high;
5007                 second = val2->v.val_double.low;
5008               }
5009             else
5010               {
5011                 first = val2->v.val_double.low;
5012                 second = val2->v.val_double.high;
5013               }
5014             dw2_asm_output_data (HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR,
5015                                  first, NULL);
5016             dw2_asm_output_data (HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR,
5017                                  second, NULL);
5018           }
5019           break;
5020         case dw_val_class_addr:
5021           gcc_assert (val1->v.val_unsigned == DWARF2_ADDR_SIZE);
5022           dw2_asm_output_addr_rtx (DWARF2_ADDR_SIZE, val2->v.val_addr, NULL);
5023           break;
5024         default:
5025           gcc_unreachable ();
5026         }
5027       break;
5028 #else
5029     case DW_OP_const2u:
5030     case DW_OP_const2s:
5031     case DW_OP_const4u:
5032     case DW_OP_const4s:
5033     case DW_OP_const8u:
5034     case DW_OP_const8s:
5035     case DW_OP_skip:
5036     case DW_OP_bra:
5037     case DW_OP_implicit_value:
5038       /* We currently don't make any attempt to make sure these are
5039          aligned properly like we do for the main unwind info, so
5040          don't support emitting things larger than a byte if we're
5041          only doing unwinding.  */
5042       gcc_unreachable ();
5043 #endif
5044     case DW_OP_const1u:
5045     case DW_OP_const1s:
5046       dw2_asm_output_data (1, val1->v.val_int, NULL);
5047       break;
5048     case DW_OP_constu:
5049       dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
5050       break;
5051     case DW_OP_consts:
5052       dw2_asm_output_data_sleb128 (val1->v.val_int, NULL);
5053       break;
5054     case DW_OP_pick:
5055       dw2_asm_output_data (1, val1->v.val_int, NULL);
5056       break;
5057     case DW_OP_plus_uconst:
5058       dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
5059       break;
5060     case DW_OP_breg0:
5061     case DW_OP_breg1:
5062     case DW_OP_breg2:
5063     case DW_OP_breg3:
5064     case DW_OP_breg4:
5065     case DW_OP_breg5:
5066     case DW_OP_breg6:
5067     case DW_OP_breg7:
5068     case DW_OP_breg8:
5069     case DW_OP_breg9:
5070     case DW_OP_breg10:
5071     case DW_OP_breg11:
5072     case DW_OP_breg12:
5073     case DW_OP_breg13:
5074     case DW_OP_breg14:
5075     case DW_OP_breg15:
5076     case DW_OP_breg16:
5077     case DW_OP_breg17:
5078     case DW_OP_breg18:
5079     case DW_OP_breg19:
5080     case DW_OP_breg20:
5081     case DW_OP_breg21:
5082     case DW_OP_breg22:
5083     case DW_OP_breg23:
5084     case DW_OP_breg24:
5085     case DW_OP_breg25:
5086     case DW_OP_breg26:
5087     case DW_OP_breg27:
5088     case DW_OP_breg28:
5089     case DW_OP_breg29:
5090     case DW_OP_breg30:
5091     case DW_OP_breg31:
5092       dw2_asm_output_data_sleb128 (val1->v.val_int, NULL);
5093       break;
5094     case DW_OP_regx:
5095       dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
5096       break;
5097     case DW_OP_fbreg:
5098       dw2_asm_output_data_sleb128 (val1->v.val_int, NULL);
5099       break;
5100     case DW_OP_bregx:
5101       dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
5102       dw2_asm_output_data_sleb128 (val2->v.val_int, NULL);
5103       break;
5104     case DW_OP_piece:
5105       dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
5106       break;
5107     case DW_OP_bit_piece:
5108       dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
5109       dw2_asm_output_data_uleb128 (val2->v.val_unsigned, NULL);
5110       break;
5111     case DW_OP_deref_size:
5112     case DW_OP_xderef_size:
5113       dw2_asm_output_data (1, val1->v.val_int, NULL);
5114       break;
5115
5116     case DW_OP_addr:
5117       if (loc->dtprel)
5118         {
5119           if (targetm.asm_out.output_dwarf_dtprel)
5120             {
5121               targetm.asm_out.output_dwarf_dtprel (asm_out_file,
5122                                                    DWARF2_ADDR_SIZE,
5123                                                    val1->v.val_addr);
5124               fputc ('\n', asm_out_file);
5125             }
5126           else
5127             gcc_unreachable ();
5128         }
5129       else
5130         {
5131 #ifdef DWARF2_DEBUGGING_INFO
5132           dw2_asm_output_addr_rtx (DWARF2_ADDR_SIZE, val1->v.val_addr, NULL);
5133 #else
5134           gcc_unreachable ();
5135 #endif
5136         }
5137       break;
5138
5139     default:
5140       /* Other codes have no operands.  */
5141       break;
5142     }
5143 }
5144
5145 /* Output a sequence of location operations.  */
5146
5147 static void
5148 output_loc_sequence (dw_loc_descr_ref loc)
5149 {
5150   for (; loc != NULL; loc = loc->dw_loc_next)
5151     {
5152       /* Output the opcode.  */
5153       dw2_asm_output_data (1, loc->dw_loc_opc,
5154                            "%s", dwarf_stack_op_name (loc->dw_loc_opc));
5155
5156       /* Output the operand(s) (if any).  */
5157       output_loc_operands (loc);
5158     }
5159 }
5160
5161 /* Output location description stack opcode's operands (if any).
5162    The output is single bytes on a line, suitable for .cfi_escape.  */
5163
5164 static void
5165 output_loc_operands_raw (dw_loc_descr_ref loc)
5166 {
5167   dw_val_ref val1 = &loc->dw_loc_oprnd1;
5168   dw_val_ref val2 = &loc->dw_loc_oprnd2;
5169
5170   switch (loc->dw_loc_opc)
5171     {
5172     case DW_OP_addr:
5173     case DW_OP_implicit_value:
5174       /* We cannot output addresses in .cfi_escape, only bytes.  */
5175       gcc_unreachable ();
5176
5177     case DW_OP_const1u:
5178     case DW_OP_const1s:
5179     case DW_OP_pick:
5180     case DW_OP_deref_size:
5181     case DW_OP_xderef_size:
5182       fputc (',', asm_out_file);
5183       dw2_asm_output_data_raw (1, val1->v.val_int);
5184       break;
5185
5186     case DW_OP_const2u:
5187     case DW_OP_const2s:
5188       fputc (',', asm_out_file);
5189       dw2_asm_output_data_raw (2, val1->v.val_int);
5190       break;
5191
5192     case DW_OP_const4u:
5193     case DW_OP_const4s:
5194       fputc (',', asm_out_file);
5195       dw2_asm_output_data_raw (4, val1->v.val_int);
5196       break;
5197
5198     case DW_OP_const8u:
5199     case DW_OP_const8s:
5200       gcc_assert (HOST_BITS_PER_WIDE_INT >= 64);
5201       fputc (',', asm_out_file);
5202       dw2_asm_output_data_raw (8, val1->v.val_int);
5203       break;
5204
5205     case DW_OP_skip:
5206     case DW_OP_bra:
5207       {
5208         int offset;
5209
5210         gcc_assert (val1->val_class == dw_val_class_loc);
5211         offset = val1->v.val_loc->dw_loc_addr - (loc->dw_loc_addr + 3);
5212
5213         fputc (',', asm_out_file);
5214         dw2_asm_output_data_raw (2, offset);
5215       }
5216       break;
5217
5218     case DW_OP_constu:
5219     case DW_OP_plus_uconst:
5220     case DW_OP_regx:
5221     case DW_OP_piece:
5222       fputc (',', asm_out_file);
5223       dw2_asm_output_data_uleb128_raw (val1->v.val_unsigned);
5224       break;
5225
5226     case DW_OP_bit_piece:
5227       fputc (',', asm_out_file);
5228       dw2_asm_output_data_uleb128_raw (val1->v.val_unsigned);
5229       dw2_asm_output_data_uleb128_raw (val2->v.val_unsigned);
5230       break;
5231
5232     case DW_OP_consts:
5233     case DW_OP_breg0:
5234     case DW_OP_breg1:
5235     case DW_OP_breg2:
5236     case DW_OP_breg3:
5237     case DW_OP_breg4:
5238     case DW_OP_breg5:
5239     case DW_OP_breg6:
5240     case DW_OP_breg7:
5241     case DW_OP_breg8:
5242     case DW_OP_breg9:
5243     case DW_OP_breg10:
5244     case DW_OP_breg11:
5245     case DW_OP_breg12:
5246     case DW_OP_breg13:
5247     case DW_OP_breg14:
5248     case DW_OP_breg15:
5249     case DW_OP_breg16:
5250     case DW_OP_breg17:
5251     case DW_OP_breg18:
5252     case DW_OP_breg19:
5253     case DW_OP_breg20:
5254     case DW_OP_breg21:
5255     case DW_OP_breg22:
5256     case DW_OP_breg23:
5257     case DW_OP_breg24:
5258     case DW_OP_breg25:
5259     case DW_OP_breg26:
5260     case DW_OP_breg27:
5261     case DW_OP_breg28:
5262     case DW_OP_breg29:
5263     case DW_OP_breg30:
5264     case DW_OP_breg31:
5265     case DW_OP_fbreg:
5266       fputc (',', asm_out_file);
5267       dw2_asm_output_data_sleb128_raw (val1->v.val_int);
5268       break;
5269
5270     case DW_OP_bregx:
5271       fputc (',', asm_out_file);
5272       dw2_asm_output_data_uleb128_raw (val1->v.val_unsigned);
5273       fputc (',', asm_out_file);
5274       dw2_asm_output_data_sleb128_raw (val2->v.val_int);
5275       break;
5276
5277     default:
5278       /* Other codes have no operands.  */
5279       break;
5280     }
5281 }
5282
5283 static void
5284 output_loc_sequence_raw (dw_loc_descr_ref loc)
5285 {
5286   while (1)
5287     {
5288       /* Output the opcode.  */
5289       fprintf (asm_out_file, "%#x", loc->dw_loc_opc);
5290       output_loc_operands_raw (loc);
5291
5292       if (!loc->dw_loc_next)
5293         break;
5294       loc = loc->dw_loc_next;
5295
5296       fputc (',', asm_out_file);
5297     }
5298 }
5299
5300 /* This routine will generate the correct assembly data for a location
5301    description based on a cfi entry with a complex address.  */
5302
5303 static void
5304 output_cfa_loc (dw_cfi_ref cfi)
5305 {
5306   dw_loc_descr_ref loc;
5307   unsigned long size;
5308
5309   if (cfi->dw_cfi_opc == DW_CFA_expression)
5310     {
5311       dw2_asm_output_data (1, cfi->dw_cfi_oprnd1.dw_cfi_reg_num, NULL);
5312       loc = cfi->dw_cfi_oprnd2.dw_cfi_loc;
5313     }
5314   else
5315     loc = cfi->dw_cfi_oprnd1.dw_cfi_loc;
5316
5317   /* Output the size of the block.  */
5318   size = size_of_locs (loc);
5319   dw2_asm_output_data_uleb128 (size, NULL);
5320
5321   /* Now output the operations themselves.  */
5322   output_loc_sequence (loc);
5323 }
5324
5325 /* Similar, but used for .cfi_escape.  */
5326
5327 static void
5328 output_cfa_loc_raw (dw_cfi_ref cfi)
5329 {
5330   dw_loc_descr_ref loc;
5331   unsigned long size;
5332
5333   if (cfi->dw_cfi_opc == DW_CFA_expression)
5334     {
5335       fprintf (asm_out_file, "%#x,", cfi->dw_cfi_oprnd1.dw_cfi_reg_num);
5336       loc = cfi->dw_cfi_oprnd2.dw_cfi_loc;
5337     }
5338   else
5339     loc = cfi->dw_cfi_oprnd1.dw_cfi_loc;
5340
5341   /* Output the size of the block.  */
5342   size = size_of_locs (loc);
5343   dw2_asm_output_data_uleb128_raw (size);
5344   fputc (',', asm_out_file);
5345
5346   /* Now output the operations themselves.  */
5347   output_loc_sequence_raw (loc);
5348 }
5349
5350 /* This function builds a dwarf location descriptor sequence from a
5351    dw_cfa_location, adding the given OFFSET to the result of the
5352    expression.  */
5353
5354 static struct dw_loc_descr_struct *
5355 build_cfa_loc (dw_cfa_location *cfa, HOST_WIDE_INT offset)
5356 {
5357   struct dw_loc_descr_struct *head, *tmp;
5358
5359   offset += cfa->offset;
5360
5361   if (cfa->indirect)
5362     {
5363       head = new_reg_loc_descr (cfa->reg, cfa->base_offset);
5364       head->dw_loc_oprnd1.val_class = dw_val_class_const;
5365       tmp = new_loc_descr (DW_OP_deref, 0, 0);
5366       add_loc_descr (&head, tmp);
5367       if (offset != 0)
5368         {
5369           tmp = new_loc_descr (DW_OP_plus_uconst, offset, 0);
5370           add_loc_descr (&head, tmp);
5371         }
5372     }
5373   else
5374     head = new_reg_loc_descr (cfa->reg, offset);
5375
5376   return head;
5377 }
5378
5379 /* This function builds a dwarf location descriptor sequence for
5380    the address at OFFSET from the CFA when stack is aligned to
5381    ALIGNMENT byte.  */
5382
5383 static struct dw_loc_descr_struct *
5384 build_cfa_aligned_loc (HOST_WIDE_INT offset, HOST_WIDE_INT alignment)
5385 {
5386   struct dw_loc_descr_struct *head;
5387   unsigned int dwarf_fp
5388     = DWARF_FRAME_REGNUM (HARD_FRAME_POINTER_REGNUM);
5389
5390  /* When CFA is defined as FP+OFFSET, emulate stack alignment.  */
5391   if (cfa.reg == HARD_FRAME_POINTER_REGNUM && cfa.indirect == 0)
5392     {
5393       head = new_reg_loc_descr (dwarf_fp, 0);
5394       add_loc_descr (&head, int_loc_descriptor (alignment));
5395       add_loc_descr (&head, new_loc_descr (DW_OP_and, 0, 0));
5396       loc_descr_plus_const (&head, offset);
5397     }
5398   else
5399     head = new_reg_loc_descr (dwarf_fp, offset);
5400   return head;
5401 }
5402
5403 /* This function fills in aa dw_cfa_location structure from a dwarf location
5404    descriptor sequence.  */
5405
5406 static void
5407 get_cfa_from_loc_descr (dw_cfa_location *cfa, struct dw_loc_descr_struct *loc)
5408 {
5409   struct dw_loc_descr_struct *ptr;
5410   cfa->offset = 0;
5411   cfa->base_offset = 0;
5412   cfa->indirect = 0;
5413   cfa->reg = -1;
5414
5415   for (ptr = loc; ptr != NULL; ptr = ptr->dw_loc_next)
5416     {
5417       enum dwarf_location_atom op = ptr->dw_loc_opc;
5418
5419       switch (op)
5420         {
5421         case DW_OP_reg0:
5422         case DW_OP_reg1:
5423         case DW_OP_reg2:
5424         case DW_OP_reg3:
5425         case DW_OP_reg4:
5426         case DW_OP_reg5:
5427         case DW_OP_reg6:
5428         case DW_OP_reg7:
5429         case DW_OP_reg8:
5430         case DW_OP_reg9:
5431         case DW_OP_reg10:
5432         case DW_OP_reg11:
5433         case DW_OP_reg12:
5434         case DW_OP_reg13:
5435         case DW_OP_reg14:
5436         case DW_OP_reg15:
5437         case DW_OP_reg16:
5438         case DW_OP_reg17:
5439         case DW_OP_reg18:
5440         case DW_OP_reg19:
5441         case DW_OP_reg20:
5442         case DW_OP_reg21:
5443         case DW_OP_reg22:
5444         case DW_OP_reg23:
5445         case DW_OP_reg24:
5446         case DW_OP_reg25:
5447         case DW_OP_reg26:
5448         case DW_OP_reg27:
5449         case DW_OP_reg28:
5450         case DW_OP_reg29:
5451         case DW_OP_reg30:
5452         case DW_OP_reg31:
5453           cfa->reg = op - DW_OP_reg0;
5454           break;
5455         case DW_OP_regx:
5456           cfa->reg = ptr->dw_loc_oprnd1.v.val_int;
5457           break;
5458         case DW_OP_breg0:
5459         case DW_OP_breg1:
5460         case DW_OP_breg2:
5461         case DW_OP_breg3:
5462         case DW_OP_breg4:
5463         case DW_OP_breg5:
5464         case DW_OP_breg6:
5465         case DW_OP_breg7:
5466         case DW_OP_breg8:
5467         case DW_OP_breg9:
5468         case DW_OP_breg10:
5469         case DW_OP_breg11:
5470         case DW_OP_breg12:
5471         case DW_OP_breg13:
5472         case DW_OP_breg14:
5473         case DW_OP_breg15:
5474         case DW_OP_breg16:
5475         case DW_OP_breg17:
5476         case DW_OP_breg18:
5477         case DW_OP_breg19:
5478         case DW_OP_breg20:
5479         case DW_OP_breg21:
5480         case DW_OP_breg22:
5481         case DW_OP_breg23:
5482         case DW_OP_breg24:
5483         case DW_OP_breg25:
5484         case DW_OP_breg26:
5485         case DW_OP_breg27:
5486         case DW_OP_breg28:
5487         case DW_OP_breg29:
5488         case DW_OP_breg30:
5489         case DW_OP_breg31:
5490           cfa->reg = op - DW_OP_breg0;
5491           cfa->base_offset = ptr->dw_loc_oprnd1.v.val_int;
5492           break;
5493         case DW_OP_bregx:
5494           cfa->reg = ptr->dw_loc_oprnd1.v.val_int;
5495           cfa->base_offset = ptr->dw_loc_oprnd2.v.val_int;
5496           break;
5497         case DW_OP_deref:
5498           cfa->indirect = 1;
5499           break;
5500         case DW_OP_plus_uconst:
5501           cfa->offset = ptr->dw_loc_oprnd1.v.val_unsigned;
5502           break;
5503         default:
5504           internal_error ("DW_LOC_OP %s not implemented",
5505                           dwarf_stack_op_name (ptr->dw_loc_opc));
5506         }
5507     }
5508 }
5509 #endif /* .debug_frame support */
5510 \f
5511 /* And now, the support for symbolic debugging information.  */
5512 #ifdef DWARF2_DEBUGGING_INFO
5513
5514 /* .debug_str support.  */
5515 static int output_indirect_string (void **, void *);
5516
5517 static void dwarf2out_init (const char *);
5518 static void dwarf2out_finish (const char *);
5519 static void dwarf2out_assembly_start (void);
5520 static void dwarf2out_define (unsigned int, const char *);
5521 static void dwarf2out_undef (unsigned int, const char *);
5522 static void dwarf2out_start_source_file (unsigned, const char *);
5523 static void dwarf2out_end_source_file (unsigned);
5524 static void dwarf2out_function_decl (tree);
5525 static void dwarf2out_begin_block (unsigned, unsigned);
5526 static void dwarf2out_end_block (unsigned, unsigned);
5527 static bool dwarf2out_ignore_block (const_tree);
5528 static void dwarf2out_global_decl (tree);
5529 static void dwarf2out_type_decl (tree, int);
5530 static void dwarf2out_imported_module_or_decl (tree, tree, tree, bool);
5531 static void dwarf2out_imported_module_or_decl_1 (tree, tree, tree,
5532                                                  dw_die_ref);
5533 static void dwarf2out_abstract_function (tree);
5534 static void dwarf2out_var_location (rtx);
5535 static void dwarf2out_direct_call (tree);
5536 static void dwarf2out_virtual_call_token (tree, int);
5537 static void dwarf2out_copy_call_info (rtx, rtx);
5538 static void dwarf2out_virtual_call (int);
5539 static void dwarf2out_begin_function (tree);
5540 static void dwarf2out_set_name (tree, tree);
5541
5542 /* The debug hooks structure.  */
5543
5544 const struct gcc_debug_hooks dwarf2_debug_hooks =
5545 {
5546   dwarf2out_init,
5547   dwarf2out_finish,
5548   dwarf2out_assembly_start,
5549   dwarf2out_define,
5550   dwarf2out_undef,
5551   dwarf2out_start_source_file,
5552   dwarf2out_end_source_file,
5553   dwarf2out_begin_block,
5554   dwarf2out_end_block,
5555   dwarf2out_ignore_block,
5556   dwarf2out_source_line,
5557   dwarf2out_begin_prologue,
5558 #if VMS_DEBUGGING_INFO
5559   dwarf2out_vms_end_prologue,
5560   dwarf2out_vms_begin_epilogue,
5561 #else
5562   debug_nothing_int_charstar,
5563   debug_nothing_int_charstar,
5564 #endif
5565   dwarf2out_end_epilogue,
5566   dwarf2out_begin_function,
5567   debug_nothing_int,            /* end_function */
5568   dwarf2out_function_decl,      /* function_decl */
5569   dwarf2out_global_decl,
5570   dwarf2out_type_decl,          /* type_decl */
5571   dwarf2out_imported_module_or_decl,
5572   debug_nothing_tree,           /* deferred_inline_function */
5573   /* The DWARF 2 backend tries to reduce debugging bloat by not
5574      emitting the abstract description of inline functions until
5575      something tries to reference them.  */
5576   dwarf2out_abstract_function,  /* outlining_inline_function */
5577   debug_nothing_rtx,            /* label */
5578   debug_nothing_int,            /* handle_pch */
5579   dwarf2out_var_location,
5580   dwarf2out_switch_text_section,
5581   dwarf2out_direct_call,
5582   dwarf2out_virtual_call_token,
5583   dwarf2out_copy_call_info,
5584   dwarf2out_virtual_call,
5585   dwarf2out_set_name,
5586   1                             /* start_end_main_source_file */
5587 };
5588 #endif
5589 \f
5590 /* NOTE: In the comments in this file, many references are made to
5591    "Debugging Information Entries".  This term is abbreviated as `DIE'
5592    throughout the remainder of this file.  */
5593
5594 /* An internal representation of the DWARF output is built, and then
5595    walked to generate the DWARF debugging info.  The walk of the internal
5596    representation is done after the entire program has been compiled.
5597    The types below are used to describe the internal representation.  */
5598
5599 /* Various DIE's use offsets relative to the beginning of the
5600    .debug_info section to refer to each other.  */
5601
5602 typedef long int dw_offset;
5603
5604 /* Define typedefs here to avoid circular dependencies.  */
5605
5606 typedef struct dw_attr_struct *dw_attr_ref;
5607 typedef struct dw_line_info_struct *dw_line_info_ref;
5608 typedef struct dw_separate_line_info_struct *dw_separate_line_info_ref;
5609 typedef struct pubname_struct *pubname_ref;
5610 typedef struct dw_ranges_struct *dw_ranges_ref;
5611 typedef struct dw_ranges_by_label_struct *dw_ranges_by_label_ref;
5612 typedef struct comdat_type_struct *comdat_type_node_ref;
5613
5614 /* Each entry in the line_info_table maintains the file and
5615    line number associated with the label generated for that
5616    entry.  The label gives the PC value associated with
5617    the line number entry.  */
5618
5619 typedef struct GTY(()) dw_line_info_struct {
5620   unsigned long dw_file_num;
5621   unsigned long dw_line_num;
5622 }
5623 dw_line_info_entry;
5624
5625 /* Line information for functions in separate sections; each one gets its
5626    own sequence.  */
5627 typedef struct GTY(()) dw_separate_line_info_struct {
5628   unsigned long dw_file_num;
5629   unsigned long dw_line_num;
5630   unsigned long function;
5631 }
5632 dw_separate_line_info_entry;
5633
5634 /* Each DIE attribute has a field specifying the attribute kind,
5635    a link to the next attribute in the chain, and an attribute value.
5636    Attributes are typically linked below the DIE they modify.  */
5637
5638 typedef struct GTY(()) dw_attr_struct {
5639   enum dwarf_attribute dw_attr;
5640   dw_val_node dw_attr_val;
5641 }
5642 dw_attr_node;
5643
5644 DEF_VEC_O(dw_attr_node);
5645 DEF_VEC_ALLOC_O(dw_attr_node,gc);
5646
5647 /* The Debugging Information Entry (DIE) structure.  DIEs form a tree.
5648    The children of each node form a circular list linked by
5649    die_sib.  die_child points to the node *before* the "first" child node.  */
5650
5651 typedef struct GTY((chain_circular ("%h.die_sib"))) die_struct {
5652   enum dwarf_tag die_tag;
5653   union die_symbol_or_type_node
5654     {
5655       char * GTY ((tag ("0"))) die_symbol;
5656       comdat_type_node_ref GTY ((tag ("1"))) die_type_node;
5657     }
5658   GTY ((desc ("dwarf_version >= 4"))) die_id;
5659   VEC(dw_attr_node,gc) * die_attr;
5660   dw_die_ref die_parent;
5661   dw_die_ref die_child;
5662   dw_die_ref die_sib;
5663   dw_die_ref die_definition; /* ref from a specification to its definition */
5664   dw_offset die_offset;
5665   unsigned long die_abbrev;
5666   int die_mark;
5667   /* Die is used and must not be pruned as unused.  */
5668   int die_perennial_p;
5669   unsigned int decl_id;
5670 }
5671 die_node;
5672
5673 /* Evaluate 'expr' while 'c' is set to each child of DIE in order.  */
5674 #define FOR_EACH_CHILD(die, c, expr) do {       \
5675   c = die->die_child;                           \
5676   if (c) do {                                   \
5677     c = c->die_sib;                             \
5678     expr;                                       \
5679   } while (c != die->die_child);                \
5680 } while (0)
5681
5682 /* The pubname structure */
5683
5684 typedef struct GTY(()) pubname_struct {
5685   dw_die_ref die;
5686   const char *name;
5687 }
5688 pubname_entry;
5689
5690 DEF_VEC_O(pubname_entry);
5691 DEF_VEC_ALLOC_O(pubname_entry, gc);
5692
5693 struct GTY(()) dw_ranges_struct {
5694   /* If this is positive, it's a block number, otherwise it's a
5695      bitwise-negated index into dw_ranges_by_label.  */
5696   int num;
5697 };
5698
5699 struct GTY(()) dw_ranges_by_label_struct {
5700   const char *begin;
5701   const char *end;
5702 };
5703
5704 /* The comdat type node structure.  */
5705 typedef struct GTY(()) comdat_type_struct
5706 {
5707   dw_die_ref root_die;
5708   dw_die_ref type_die;
5709   char signature[DWARF_TYPE_SIGNATURE_SIZE];
5710   struct comdat_type_struct *next;
5711 }
5712 comdat_type_node;
5713
5714 /* The limbo die list structure.  */
5715 typedef struct GTY(()) limbo_die_struct {
5716   dw_die_ref die;
5717   tree created_for;
5718   struct limbo_die_struct *next;
5719 }
5720 limbo_die_node;
5721
5722 typedef struct GTY(()) skeleton_chain_struct
5723 {
5724   dw_die_ref old_die;
5725   dw_die_ref new_die;
5726   struct skeleton_chain_struct *parent;
5727 }
5728 skeleton_chain_node;
5729
5730 /* How to start an assembler comment.  */
5731 #ifndef ASM_COMMENT_START
5732 #define ASM_COMMENT_START ";#"
5733 #endif
5734
5735 /* Define a macro which returns nonzero for a TYPE_DECL which was
5736    implicitly generated for a tagged type.
5737
5738    Note that unlike the gcc front end (which generates a NULL named
5739    TYPE_DECL node for each complete tagged type, each array type, and
5740    each function type node created) the g++ front end generates a
5741    _named_ TYPE_DECL node for each tagged type node created.
5742    These TYPE_DECLs have DECL_ARTIFICIAL set, so we know not to
5743    generate a DW_TAG_typedef DIE for them.  */
5744
5745 #define TYPE_DECL_IS_STUB(decl)                         \
5746   (DECL_NAME (decl) == NULL_TREE                        \
5747    || (DECL_ARTIFICIAL (decl)                           \
5748        && is_tagged_type (TREE_TYPE (decl))             \
5749        && ((decl == TYPE_STUB_DECL (TREE_TYPE (decl)))  \
5750            /* This is necessary for stub decls that     \
5751               appear in nested inline functions.  */    \
5752            || (DECL_ABSTRACT_ORIGIN (decl) != NULL_TREE \
5753                && (decl_ultimate_origin (decl)          \
5754                    == TYPE_STUB_DECL (TREE_TYPE (decl)))))))
5755
5756 /* Information concerning the compilation unit's programming
5757    language, and compiler version.  */
5758
5759 /* Fixed size portion of the DWARF compilation unit header.  */
5760 #define DWARF_COMPILE_UNIT_HEADER_SIZE \
5761   (DWARF_INITIAL_LENGTH_SIZE + DWARF_OFFSET_SIZE + 3)
5762
5763 /* Fixed size portion of the DWARF comdat type unit header.  */
5764 #define DWARF_COMDAT_TYPE_UNIT_HEADER_SIZE \
5765   (DWARF_COMPILE_UNIT_HEADER_SIZE + DWARF_TYPE_SIGNATURE_SIZE \
5766    + DWARF_OFFSET_SIZE)
5767
5768 /* Fixed size portion of public names info.  */
5769 #define DWARF_PUBNAMES_HEADER_SIZE (2 * DWARF_OFFSET_SIZE + 2)
5770
5771 /* Fixed size portion of the address range info.  */
5772 #define DWARF_ARANGES_HEADER_SIZE                                       \
5773   (DWARF_ROUND (DWARF_INITIAL_LENGTH_SIZE + DWARF_OFFSET_SIZE + 4,      \
5774                 DWARF2_ADDR_SIZE * 2)                                   \
5775    - DWARF_INITIAL_LENGTH_SIZE)
5776
5777 /* Size of padding portion in the address range info.  It must be
5778    aligned to twice the pointer size.  */
5779 #define DWARF_ARANGES_PAD_SIZE \
5780   (DWARF_ROUND (DWARF_INITIAL_LENGTH_SIZE + DWARF_OFFSET_SIZE + 4, \
5781                 DWARF2_ADDR_SIZE * 2)                              \
5782    - (DWARF_INITIAL_LENGTH_SIZE + DWARF_OFFSET_SIZE + 4))
5783
5784 /* Use assembler line directives if available.  */
5785 #ifndef DWARF2_ASM_LINE_DEBUG_INFO
5786 #ifdef HAVE_AS_DWARF2_DEBUG_LINE
5787 #define DWARF2_ASM_LINE_DEBUG_INFO 1
5788 #else
5789 #define DWARF2_ASM_LINE_DEBUG_INFO 0
5790 #endif
5791 #endif
5792
5793 /* Minimum line offset in a special line info. opcode.
5794    This value was chosen to give a reasonable range of values.  */
5795 #define DWARF_LINE_BASE  -10
5796
5797 /* First special line opcode - leave room for the standard opcodes.  */
5798 #define DWARF_LINE_OPCODE_BASE  10
5799
5800 /* Range of line offsets in a special line info. opcode.  */
5801 #define DWARF_LINE_RANGE  (254-DWARF_LINE_OPCODE_BASE+1)
5802
5803 /* Flag that indicates the initial value of the is_stmt_start flag.
5804    In the present implementation, we do not mark any lines as
5805    the beginning of a source statement, because that information
5806    is not made available by the GCC front-end.  */
5807 #define DWARF_LINE_DEFAULT_IS_STMT_START 1
5808
5809 /* Maximum number of operations per instruction bundle.  */
5810 #ifndef DWARF_LINE_DEFAULT_MAX_OPS_PER_INSN
5811 #define DWARF_LINE_DEFAULT_MAX_OPS_PER_INSN 1
5812 #endif
5813
5814 #ifdef DWARF2_DEBUGGING_INFO
5815 /* This location is used by calc_die_sizes() to keep track
5816    the offset of each DIE within the .debug_info section.  */
5817 static unsigned long next_die_offset;
5818 #endif
5819
5820 /* Record the root of the DIE's built for the current compilation unit.  */
5821 static GTY(()) dw_die_ref comp_unit_die;
5822
5823 /* A list of type DIEs that have been separated into comdat sections.  */
5824 static GTY(()) comdat_type_node *comdat_type_list;
5825
5826 /* A list of DIEs with a NULL parent waiting to be relocated.  */
5827 static GTY(()) limbo_die_node *limbo_die_list;
5828
5829 /* A list of DIEs for which we may have to generate
5830    DW_AT_{,MIPS_}linkage_name once their DECL_ASSEMBLER_NAMEs are set.  */
5831 static GTY(()) limbo_die_node *deferred_asm_name;
5832
5833 /* Filenames referenced by this compilation unit.  */
5834 static GTY((param_is (struct dwarf_file_data))) htab_t file_table;
5835
5836 /* A hash table of references to DIE's that describe declarations.
5837    The key is a DECL_UID() which is a unique number identifying each decl.  */
5838 static GTY ((param_is (struct die_struct))) htab_t decl_die_table;
5839
5840 /* A hash table of references to DIE's that describe COMMON blocks.
5841    The key is DECL_UID() ^ die_parent.  */
5842 static GTY ((param_is (struct die_struct))) htab_t common_block_die_table;
5843
5844 typedef struct GTY(()) die_arg_entry_struct {
5845     dw_die_ref die;
5846     tree arg;
5847 } die_arg_entry;
5848
5849 DEF_VEC_O(die_arg_entry);
5850 DEF_VEC_ALLOC_O(die_arg_entry,gc);
5851
5852 /* Node of the variable location list.  */
5853 struct GTY ((chain_next ("%h.next"))) var_loc_node {
5854   /* Either NOTE_INSN_VAR_LOCATION, or, for SRA optimized variables,
5855      EXPR_LIST chain.  For small bitsizes, bitsize is encoded
5856      in mode of the EXPR_LIST node and first EXPR_LIST operand
5857      is either NOTE_INSN_VAR_LOCATION for a piece with a known
5858      location or NULL for padding.  For larger bitsizes,
5859      mode is 0 and first operand is a CONCAT with bitsize
5860      as first CONCAT operand and NOTE_INSN_VAR_LOCATION resp.
5861      NULL as second operand.  */
5862   rtx GTY (()) loc;
5863   const char * GTY (()) label;
5864   struct var_loc_node * GTY (()) next;
5865 };
5866
5867 /* Variable location list.  */
5868 struct GTY (()) var_loc_list_def {
5869   struct var_loc_node * GTY (()) first;
5870
5871   /* Pointer to the last but one or last element of the
5872      chained list.  If the list is empty, both first and
5873      last are NULL, if the list contains just one node
5874      or the last node certainly is not redundant, it points
5875      to the last node, otherwise points to the last but one.
5876      Do not mark it for GC because it is marked through the chain.  */
5877   struct var_loc_node * GTY ((skip ("%h"))) last;
5878
5879   /* DECL_UID of the variable decl.  */
5880   unsigned int decl_id;
5881 };
5882 typedef struct var_loc_list_def var_loc_list;
5883
5884
5885 /* Table of decl location linked lists.  */
5886 static GTY ((param_is (var_loc_list))) htab_t decl_loc_table;
5887
5888 /* A pointer to the base of a list of references to DIE's that
5889    are uniquely identified by their tag, presence/absence of
5890    children DIE's, and list of attribute/value pairs.  */
5891 static GTY((length ("abbrev_die_table_allocated")))
5892   dw_die_ref *abbrev_die_table;
5893
5894 /* Number of elements currently allocated for abbrev_die_table.  */
5895 static GTY(()) unsigned abbrev_die_table_allocated;
5896
5897 /* Number of elements in type_die_table currently in use.  */
5898 static GTY(()) unsigned abbrev_die_table_in_use;
5899
5900 /* Size (in elements) of increments by which we may expand the
5901    abbrev_die_table.  */
5902 #define ABBREV_DIE_TABLE_INCREMENT 256
5903
5904 /* A pointer to the base of a table that contains line information
5905    for each source code line in .text in the compilation unit.  */
5906 static GTY((length ("line_info_table_allocated")))
5907      dw_line_info_ref line_info_table;
5908
5909 /* Number of elements currently allocated for line_info_table.  */
5910 static GTY(()) unsigned line_info_table_allocated;
5911
5912 /* Number of elements in line_info_table currently in use.  */
5913 static GTY(()) unsigned line_info_table_in_use;
5914
5915 /* A pointer to the base of a table that contains line information
5916    for each source code line outside of .text in the compilation unit.  */
5917 static GTY ((length ("separate_line_info_table_allocated")))
5918      dw_separate_line_info_ref separate_line_info_table;
5919
5920 /* Number of elements currently allocated for separate_line_info_table.  */
5921 static GTY(()) unsigned separate_line_info_table_allocated;
5922
5923 /* Number of elements in separate_line_info_table currently in use.  */
5924 static GTY(()) unsigned separate_line_info_table_in_use;
5925
5926 /* Size (in elements) of increments by which we may expand the
5927    line_info_table.  */
5928 #define LINE_INFO_TABLE_INCREMENT 1024
5929
5930 /* A pointer to the base of a table that contains a list of publicly
5931    accessible names.  */
5932 static GTY (()) VEC (pubname_entry, gc) *  pubname_table;
5933
5934 /* A pointer to the base of a table that contains a list of publicly
5935    accessible types.  */
5936 static GTY (()) VEC (pubname_entry, gc) * pubtype_table;
5937
5938 /* Array of dies for which we should generate .debug_arange info.  */
5939 static GTY((length ("arange_table_allocated"))) dw_die_ref *arange_table;
5940
5941 /* Number of elements currently allocated for arange_table.  */
5942 static GTY(()) unsigned arange_table_allocated;
5943
5944 /* Number of elements in arange_table currently in use.  */
5945 static GTY(()) unsigned arange_table_in_use;
5946
5947 /* Size (in elements) of increments by which we may expand the
5948    arange_table.  */
5949 #define ARANGE_TABLE_INCREMENT 64
5950
5951 /* Array of dies for which we should generate .debug_ranges info.  */
5952 static GTY ((length ("ranges_table_allocated"))) dw_ranges_ref ranges_table;
5953
5954 /* Number of elements currently allocated for ranges_table.  */
5955 static GTY(()) unsigned ranges_table_allocated;
5956
5957 /* Number of elements in ranges_table currently in use.  */
5958 static GTY(()) unsigned ranges_table_in_use;
5959
5960 /* Array of pairs of labels referenced in ranges_table.  */
5961 static GTY ((length ("ranges_by_label_allocated")))
5962      dw_ranges_by_label_ref ranges_by_label;
5963
5964 /* Number of elements currently allocated for ranges_by_label.  */
5965 static GTY(()) unsigned ranges_by_label_allocated;
5966
5967 /* Number of elements in ranges_by_label currently in use.  */
5968 static GTY(()) unsigned ranges_by_label_in_use;
5969
5970 /* Size (in elements) of increments by which we may expand the
5971    ranges_table.  */
5972 #define RANGES_TABLE_INCREMENT 64
5973
5974 /* Whether we have location lists that need outputting */
5975 static GTY(()) bool have_location_lists;
5976
5977 /* Unique label counter.  */
5978 static GTY(()) unsigned int loclabel_num;
5979
5980 /* Unique label counter for point-of-call tables.  */
5981 static GTY(()) unsigned int poc_label_num;
5982
5983 /* The direct call table structure.  */
5984
5985 typedef struct GTY(()) dcall_struct {
5986   unsigned int poc_label_num;
5987   tree poc_decl;
5988   dw_die_ref targ_die;
5989 }
5990 dcall_entry;
5991
5992 DEF_VEC_O(dcall_entry);
5993 DEF_VEC_ALLOC_O(dcall_entry, gc);
5994
5995 /* The virtual call table structure.  */
5996
5997 typedef struct GTY(()) vcall_struct {
5998   unsigned int poc_label_num;
5999   unsigned int vtable_slot;
6000 }
6001 vcall_entry;
6002
6003 DEF_VEC_O(vcall_entry);
6004 DEF_VEC_ALLOC_O(vcall_entry, gc);
6005
6006 /* Pointers to the direct and virtual call tables.  */
6007 static GTY (()) VEC (dcall_entry, gc) * dcall_table = NULL;
6008 static GTY (()) VEC (vcall_entry, gc) * vcall_table = NULL;
6009
6010 /* A hash table to map INSN_UIDs to vtable slot indexes.  */
6011
6012 struct GTY (()) vcall_insn {
6013   int insn_uid;
6014   unsigned int vtable_slot;
6015 };
6016
6017 static GTY ((param_is (struct vcall_insn))) htab_t vcall_insn_table;
6018
6019 #ifdef DWARF2_DEBUGGING_INFO
6020 /* Record whether the function being analyzed contains inlined functions.  */
6021 static int current_function_has_inlines;
6022 #endif
6023 #if 0 && defined (MIPS_DEBUGGING_INFO)
6024 static int comp_unit_has_inlines;
6025 #endif
6026
6027 /* The last file entry emitted by maybe_emit_file().  */
6028 static GTY(()) struct dwarf_file_data * last_emitted_file;
6029
6030 /* Number of internal labels generated by gen_internal_sym().  */
6031 static GTY(()) int label_num;
6032
6033 /* Cached result of previous call to lookup_filename.  */
6034 static GTY(()) struct dwarf_file_data * file_table_last_lookup;
6035
6036 static GTY(()) VEC(die_arg_entry,gc) *tmpl_value_parm_die_table;
6037
6038 #ifdef DWARF2_DEBUGGING_INFO
6039
6040 /* Offset from the "steady-state frame pointer" to the frame base,
6041    within the current function.  */
6042 static HOST_WIDE_INT frame_pointer_fb_offset;
6043
6044 /* Forward declarations for functions defined in this file.  */
6045
6046 static int is_pseudo_reg (const_rtx);
6047 static tree type_main_variant (tree);
6048 static int is_tagged_type (const_tree);
6049 static const char *dwarf_tag_name (unsigned);
6050 static const char *dwarf_attr_name (unsigned);
6051 static const char *dwarf_form_name (unsigned);
6052 static tree decl_ultimate_origin (const_tree);
6053 static tree decl_class_context (tree);
6054 static void add_dwarf_attr (dw_die_ref, dw_attr_ref);
6055 static inline enum dw_val_class AT_class (dw_attr_ref);
6056 static void add_AT_flag (dw_die_ref, enum dwarf_attribute, unsigned);
6057 static inline unsigned AT_flag (dw_attr_ref);
6058 static void add_AT_int (dw_die_ref, enum dwarf_attribute, HOST_WIDE_INT);
6059 static inline HOST_WIDE_INT AT_int (dw_attr_ref);
6060 static void add_AT_unsigned (dw_die_ref, enum dwarf_attribute, unsigned HOST_WIDE_INT);
6061 static inline unsigned HOST_WIDE_INT AT_unsigned (dw_attr_ref);
6062 static void add_AT_double (dw_die_ref, enum dwarf_attribute,
6063                            HOST_WIDE_INT, unsigned HOST_WIDE_INT);
6064 static inline void add_AT_vec (dw_die_ref, enum dwarf_attribute, unsigned int,
6065                                unsigned int, unsigned char *);
6066 static void add_AT_data8 (dw_die_ref, enum dwarf_attribute, unsigned char *);
6067 static hashval_t debug_str_do_hash (const void *);
6068 static int debug_str_eq (const void *, const void *);
6069 static void add_AT_string (dw_die_ref, enum dwarf_attribute, const char *);
6070 static inline const char *AT_string (dw_attr_ref);
6071 static enum dwarf_form AT_string_form (dw_attr_ref);
6072 static void add_AT_die_ref (dw_die_ref, enum dwarf_attribute, dw_die_ref);
6073 static void add_AT_specification (dw_die_ref, dw_die_ref);
6074 static inline dw_die_ref AT_ref (dw_attr_ref);
6075 static inline int AT_ref_external (dw_attr_ref);
6076 static inline void set_AT_ref_external (dw_attr_ref, int);
6077 static void add_AT_fde_ref (dw_die_ref, enum dwarf_attribute, unsigned);
6078 static void add_AT_loc (dw_die_ref, enum dwarf_attribute, dw_loc_descr_ref);
6079 static inline dw_loc_descr_ref AT_loc (dw_attr_ref);
6080 static void add_AT_loc_list (dw_die_ref, enum dwarf_attribute,
6081                              dw_loc_list_ref);
6082 static inline dw_loc_list_ref AT_loc_list (dw_attr_ref);
6083 static void add_AT_addr (dw_die_ref, enum dwarf_attribute, rtx);
6084 static inline rtx AT_addr (dw_attr_ref);
6085 static void add_AT_lbl_id (dw_die_ref, enum dwarf_attribute, const char *);
6086 static void add_AT_lineptr (dw_die_ref, enum dwarf_attribute, const char *);
6087 static void add_AT_macptr (dw_die_ref, enum dwarf_attribute, const char *);
6088 static void add_AT_offset (dw_die_ref, enum dwarf_attribute,
6089                            unsigned HOST_WIDE_INT);
6090 static void add_AT_range_list (dw_die_ref, enum dwarf_attribute,
6091                                unsigned long);
6092 static inline const char *AT_lbl (dw_attr_ref);
6093 static dw_attr_ref get_AT (dw_die_ref, enum dwarf_attribute);
6094 static const char *get_AT_low_pc (dw_die_ref);
6095 static const char *get_AT_hi_pc (dw_die_ref);
6096 static const char *get_AT_string (dw_die_ref, enum dwarf_attribute);
6097 static int get_AT_flag (dw_die_ref, enum dwarf_attribute);
6098 static unsigned get_AT_unsigned (dw_die_ref, enum dwarf_attribute);
6099 static inline dw_die_ref get_AT_ref (dw_die_ref, enum dwarf_attribute);
6100 static bool is_cxx (void);
6101 static bool is_fortran (void);
6102 static bool is_ada (void);
6103 static void remove_AT (dw_die_ref, enum dwarf_attribute);
6104 static void remove_child_TAG (dw_die_ref, enum dwarf_tag);
6105 static void add_child_die (dw_die_ref, dw_die_ref);
6106 static dw_die_ref new_die (enum dwarf_tag, dw_die_ref, tree);
6107 static dw_die_ref lookup_type_die (tree);
6108 static void equate_type_number_to_die (tree, dw_die_ref);
6109 static hashval_t decl_die_table_hash (const void *);
6110 static int decl_die_table_eq (const void *, const void *);
6111 static dw_die_ref lookup_decl_die (tree);
6112 static hashval_t common_block_die_table_hash (const void *);
6113 static int common_block_die_table_eq (const void *, const void *);
6114 static hashval_t decl_loc_table_hash (const void *);
6115 static int decl_loc_table_eq (const void *, const void *);
6116 static var_loc_list *lookup_decl_loc (const_tree);
6117 static void equate_decl_number_to_die (tree, dw_die_ref);
6118 static struct var_loc_node *add_var_loc_to_decl (tree, rtx, const char *);
6119 static void print_spaces (FILE *);
6120 static void print_die (dw_die_ref, FILE *);
6121 static void print_dwarf_line_table (FILE *);
6122 static dw_die_ref push_new_compile_unit (dw_die_ref, dw_die_ref);
6123 static dw_die_ref pop_compile_unit (dw_die_ref);
6124 static void loc_checksum (dw_loc_descr_ref, struct md5_ctx *);
6125 static void attr_checksum (dw_attr_ref, struct md5_ctx *, int *);
6126 static void die_checksum (dw_die_ref, struct md5_ctx *, int *);
6127 static void checksum_sleb128 (HOST_WIDE_INT, struct md5_ctx *);
6128 static void checksum_uleb128 (unsigned HOST_WIDE_INT, struct md5_ctx *);
6129 static void loc_checksum_ordered (dw_loc_descr_ref, struct md5_ctx *);
6130 static void attr_checksum_ordered (enum dwarf_tag, dw_attr_ref,
6131                                    struct md5_ctx *, int *);
6132 struct checksum_attributes;
6133 static void collect_checksum_attributes (struct checksum_attributes *, dw_die_ref);
6134 static void die_checksum_ordered (dw_die_ref, struct md5_ctx *, int *);
6135 static void checksum_die_context (dw_die_ref, struct md5_ctx *);
6136 static void generate_type_signature (dw_die_ref, comdat_type_node *);
6137 static int same_loc_p (dw_loc_descr_ref, dw_loc_descr_ref, int *);
6138 static int same_dw_val_p (const dw_val_node *, const dw_val_node *, int *);
6139 static int same_attr_p (dw_attr_ref, dw_attr_ref, int *);
6140 static int same_die_p (dw_die_ref, dw_die_ref, int *);
6141 static int same_die_p_wrap (dw_die_ref, dw_die_ref);
6142 static void compute_section_prefix (dw_die_ref);
6143 static int is_type_die (dw_die_ref);
6144 static int is_comdat_die (dw_die_ref);
6145 static int is_symbol_die (dw_die_ref);
6146 static void assign_symbol_names (dw_die_ref);
6147 static void break_out_includes (dw_die_ref);
6148 static int is_declaration_die (dw_die_ref);
6149 static int should_move_die_to_comdat (dw_die_ref);
6150 static dw_die_ref clone_as_declaration (dw_die_ref);
6151 static dw_die_ref clone_die (dw_die_ref);
6152 static dw_die_ref clone_tree (dw_die_ref);
6153 static void copy_declaration_context (dw_die_ref, dw_die_ref);
6154 static void generate_skeleton_ancestor_tree (skeleton_chain_node *);
6155 static void generate_skeleton_bottom_up (skeleton_chain_node *);
6156 static dw_die_ref generate_skeleton (dw_die_ref);
6157 static dw_die_ref remove_child_or_replace_with_skeleton (dw_die_ref,
6158                                                          dw_die_ref);
6159 static void break_out_comdat_types (dw_die_ref);
6160 static dw_die_ref copy_ancestor_tree (dw_die_ref, dw_die_ref, htab_t);
6161 static void copy_decls_walk (dw_die_ref, dw_die_ref, htab_t);
6162 static void copy_decls_for_unworthy_types (dw_die_ref);
6163
6164 static hashval_t htab_cu_hash (const void *);
6165 static int htab_cu_eq (const void *, const void *);
6166 static void htab_cu_del (void *);
6167 static int check_duplicate_cu (dw_die_ref, htab_t, unsigned *);
6168 static void record_comdat_symbol_number (dw_die_ref, htab_t, unsigned);
6169 static void add_sibling_attributes (dw_die_ref);
6170 static void build_abbrev_table (dw_die_ref);
6171 static void output_location_lists (dw_die_ref);
6172 static int constant_size (unsigned HOST_WIDE_INT);
6173 static unsigned long size_of_die (dw_die_ref);
6174 static void calc_die_sizes (dw_die_ref);
6175 static void mark_dies (dw_die_ref);
6176 static void unmark_dies (dw_die_ref);
6177 static void unmark_all_dies (dw_die_ref);
6178 static unsigned long size_of_pubnames (VEC (pubname_entry,gc) *);
6179 static unsigned long size_of_aranges (void);
6180 static enum dwarf_form value_format (dw_attr_ref);
6181 static void output_value_format (dw_attr_ref);
6182 static void output_abbrev_section (void);
6183 static void output_die_symbol (dw_die_ref);
6184 static void output_die (dw_die_ref);
6185 static void output_compilation_unit_header (void);
6186 static void output_comp_unit (dw_die_ref, int);
6187 static void output_comdat_type_unit (comdat_type_node *);
6188 static const char *dwarf2_name (tree, int);
6189 static void add_pubname (tree, dw_die_ref);
6190 static void add_pubname_string (const char *, dw_die_ref);
6191 static void add_pubtype (tree, dw_die_ref);
6192 static void output_pubnames (VEC (pubname_entry,gc) *);
6193 static void add_arange (tree, dw_die_ref);
6194 static void output_aranges (void);
6195 static unsigned int add_ranges_num (int);
6196 static unsigned int add_ranges (const_tree);
6197 static void add_ranges_by_labels (dw_die_ref, const char *, const char *,
6198                                   bool *);
6199 static void output_ranges (void);
6200 static void output_line_info (void);
6201 static void output_file_names (void);
6202 static dw_die_ref base_type_die (tree);
6203 static int is_base_type (tree);
6204 static dw_die_ref subrange_type_die (tree, tree, tree, dw_die_ref);
6205 static dw_die_ref modified_type_die (tree, int, int, dw_die_ref);
6206 static dw_die_ref generic_parameter_die (tree, tree, bool, dw_die_ref);
6207 static dw_die_ref template_parameter_pack_die (tree, tree, dw_die_ref);
6208 static int type_is_enum (const_tree);
6209 static unsigned int dbx_reg_number (const_rtx);
6210 static void add_loc_descr_op_piece (dw_loc_descr_ref *, int);
6211 static dw_loc_descr_ref reg_loc_descriptor (rtx, enum var_init_status);
6212 static dw_loc_descr_ref one_reg_loc_descriptor (unsigned int,
6213                                                 enum var_init_status);
6214 static dw_loc_descr_ref multiple_reg_loc_descriptor (rtx, rtx,
6215                                                      enum var_init_status);
6216 static dw_loc_descr_ref based_loc_descr (rtx, HOST_WIDE_INT,
6217                                          enum var_init_status);
6218 static int is_based_loc (const_rtx);
6219 static int resolve_one_addr (rtx *, void *);
6220 static dw_loc_descr_ref mem_loc_descriptor (rtx, enum machine_mode mode,
6221                                             enum var_init_status);
6222 static dw_loc_descr_ref concat_loc_descriptor (rtx, rtx,
6223                                                enum var_init_status);
6224 static dw_loc_descr_ref loc_descriptor (rtx, enum machine_mode mode,
6225                                         enum var_init_status);
6226 static dw_loc_list_ref loc_list_from_tree (tree, int);
6227 static dw_loc_descr_ref loc_descriptor_from_tree (tree, int);
6228 static HOST_WIDE_INT ceiling (HOST_WIDE_INT, unsigned int);
6229 static tree field_type (const_tree);
6230 static unsigned int simple_type_align_in_bits (const_tree);
6231 static unsigned int simple_decl_align_in_bits (const_tree);
6232 static unsigned HOST_WIDE_INT simple_type_size_in_bits (const_tree);
6233 static HOST_WIDE_INT field_byte_offset (const_tree);
6234 static void add_AT_location_description (dw_die_ref, enum dwarf_attribute,
6235                                          dw_loc_list_ref);
6236 static void add_data_member_location_attribute (dw_die_ref, tree);
6237 static bool add_const_value_attribute (dw_die_ref, rtx);
6238 static void insert_int (HOST_WIDE_INT, unsigned, unsigned char *);
6239 static void insert_double (double_int, unsigned char *);
6240 static void insert_float (const_rtx, unsigned char *);
6241 static rtx rtl_for_decl_location (tree);
6242 static bool add_location_or_const_value_attribute (dw_die_ref, tree,
6243                                                    enum dwarf_attribute);
6244 static bool tree_add_const_value_attribute (dw_die_ref, tree);
6245 static bool tree_add_const_value_attribute_for_decl (dw_die_ref, tree);
6246 static void add_name_attribute (dw_die_ref, const char *);
6247 static void add_comp_dir_attribute (dw_die_ref);
6248 static void add_bound_info (dw_die_ref, enum dwarf_attribute, tree);
6249 static void add_subscript_info (dw_die_ref, tree, bool);
6250 static void add_byte_size_attribute (dw_die_ref, tree);
6251 static void add_bit_offset_attribute (dw_die_ref, tree);
6252 static void add_bit_size_attribute (dw_die_ref, tree);
6253 static void add_prototyped_attribute (dw_die_ref, tree);
6254 static dw_die_ref add_abstract_origin_attribute (dw_die_ref, tree);
6255 static void add_pure_or_virtual_attribute (dw_die_ref, tree);
6256 static void add_src_coords_attributes (dw_die_ref, tree);
6257 static void add_name_and_src_coords_attributes (dw_die_ref, tree);
6258 static void push_decl_scope (tree);
6259 static void pop_decl_scope (void);
6260 static dw_die_ref scope_die_for (tree, dw_die_ref);
6261 static inline int local_scope_p (dw_die_ref);
6262 static inline int class_scope_p (dw_die_ref);
6263 static inline int class_or_namespace_scope_p (dw_die_ref);
6264 static void add_type_attribute (dw_die_ref, tree, int, int, dw_die_ref);
6265 static void add_calling_convention_attribute (dw_die_ref, tree);
6266 static const char *type_tag (const_tree);
6267 static tree member_declared_type (const_tree);
6268 #if 0
6269 static const char *decl_start_label (tree);
6270 #endif
6271 static void gen_array_type_die (tree, dw_die_ref);
6272 static void gen_descr_array_type_die (tree, struct array_descr_info *, dw_die_ref);
6273 #if 0
6274 static void gen_entry_point_die (tree, dw_die_ref);
6275 #endif
6276 static dw_die_ref gen_enumeration_type_die (tree, dw_die_ref);
6277 static dw_die_ref gen_formal_parameter_die (tree, tree, bool, dw_die_ref);
6278 static dw_die_ref gen_formal_parameter_pack_die  (tree, tree, dw_die_ref, tree*);
6279 static void gen_unspecified_parameters_die (tree, dw_die_ref);
6280 static void gen_formal_types_die (tree, dw_die_ref);
6281 static void gen_subprogram_die (tree, dw_die_ref);
6282 static void gen_variable_die (tree, tree, dw_die_ref);
6283 static void gen_const_die (tree, dw_die_ref);
6284 static void gen_label_die (tree, dw_die_ref);
6285 static void gen_lexical_block_die (tree, dw_die_ref, int);
6286 static void gen_inlined_subroutine_die (tree, dw_die_ref, int);
6287 static void gen_field_die (tree, dw_die_ref);
6288 static void gen_ptr_to_mbr_type_die (tree, dw_die_ref);
6289 static dw_die_ref gen_compile_unit_die (const char *);
6290 static void gen_inheritance_die (tree, tree, dw_die_ref);
6291 static void gen_member_die (tree, dw_die_ref);
6292 static void gen_struct_or_union_type_die (tree, dw_die_ref,
6293                                                 enum debug_info_usage);
6294 static void gen_subroutine_type_die (tree, dw_die_ref);
6295 static void gen_typedef_die (tree, dw_die_ref);
6296 static void gen_type_die (tree, dw_die_ref);
6297 static void gen_block_die (tree, dw_die_ref, int);
6298 static void decls_for_scope (tree, dw_die_ref, int);
6299 static int is_redundant_typedef (const_tree);
6300 static bool is_naming_typedef_decl (const_tree);
6301 static inline dw_die_ref get_context_die (tree);
6302 static void gen_namespace_die (tree, dw_die_ref);
6303 static void gen_decl_die (tree, tree, dw_die_ref);
6304 static dw_die_ref force_decl_die (tree);
6305 static dw_die_ref force_type_die (tree);
6306 static dw_die_ref setup_namespace_context (tree, dw_die_ref);
6307 static dw_die_ref declare_in_namespace (tree, dw_die_ref);
6308 static struct dwarf_file_data * lookup_filename (const char *);
6309 static void retry_incomplete_types (void);
6310 static void gen_type_die_for_member (tree, tree, dw_die_ref);
6311 static void gen_generic_params_dies (tree);
6312 static void gen_tagged_type_die (tree, dw_die_ref, enum debug_info_usage);
6313 static void gen_type_die_with_usage (tree, dw_die_ref, enum debug_info_usage);
6314 static void splice_child_die (dw_die_ref, dw_die_ref);
6315 static int file_info_cmp (const void *, const void *);
6316 static dw_loc_list_ref new_loc_list (dw_loc_descr_ref, const char *,
6317                                      const char *, const char *);
6318 static void output_loc_list (dw_loc_list_ref);
6319 static char *gen_internal_sym (const char *);
6320
6321 static void prune_unmark_dies (dw_die_ref);
6322 static void prune_unused_types_mark (dw_die_ref, int);
6323 static void prune_unused_types_walk (dw_die_ref);
6324 static void prune_unused_types_walk_attribs (dw_die_ref);
6325 static void prune_unused_types_prune (dw_die_ref);
6326 static void prune_unused_types (void);
6327 static int maybe_emit_file (struct dwarf_file_data *fd);
6328 static inline const char *AT_vms_delta1 (dw_attr_ref);
6329 static inline const char *AT_vms_delta2 (dw_attr_ref);
6330 static inline void add_AT_vms_delta (dw_die_ref, enum dwarf_attribute,
6331                                      const char *, const char *);
6332 static void append_entry_to_tmpl_value_parm_die_table (dw_die_ref, tree);
6333 static void gen_remaining_tmpl_value_param_die_attribute (void);
6334
6335 /* Section names used to hold DWARF debugging information.  */
6336 #ifndef DEBUG_INFO_SECTION
6337 #define DEBUG_INFO_SECTION      ".debug_info"
6338 #endif
6339 #ifndef DEBUG_ABBREV_SECTION
6340 #define DEBUG_ABBREV_SECTION    ".debug_abbrev"
6341 #endif
6342 #ifndef DEBUG_ARANGES_SECTION
6343 #define DEBUG_ARANGES_SECTION   ".debug_aranges"
6344 #endif
6345 #ifndef DEBUG_MACINFO_SECTION
6346 #define DEBUG_MACINFO_SECTION   ".debug_macinfo"
6347 #endif
6348 #ifndef DEBUG_LINE_SECTION
6349 #define DEBUG_LINE_SECTION      ".debug_line"
6350 #endif
6351 #ifndef DEBUG_LOC_SECTION
6352 #define DEBUG_LOC_SECTION       ".debug_loc"
6353 #endif
6354 #ifndef DEBUG_PUBNAMES_SECTION
6355 #define DEBUG_PUBNAMES_SECTION  ".debug_pubnames"
6356 #endif
6357 #ifndef DEBUG_PUBTYPES_SECTION
6358 #define DEBUG_PUBTYPES_SECTION  ".debug_pubtypes"
6359 #endif
6360 #ifndef DEBUG_DCALL_SECTION
6361 #define DEBUG_DCALL_SECTION     ".debug_dcall"
6362 #endif
6363 #ifndef DEBUG_VCALL_SECTION
6364 #define DEBUG_VCALL_SECTION     ".debug_vcall"
6365 #endif
6366 #ifndef DEBUG_STR_SECTION
6367 #define DEBUG_STR_SECTION       ".debug_str"
6368 #endif
6369 #ifndef DEBUG_RANGES_SECTION
6370 #define DEBUG_RANGES_SECTION    ".debug_ranges"
6371 #endif
6372
6373 /* Standard ELF section names for compiled code and data.  */
6374 #ifndef TEXT_SECTION_NAME
6375 #define TEXT_SECTION_NAME       ".text"
6376 #endif
6377
6378 /* Section flags for .debug_str section.  */
6379 #define DEBUG_STR_SECTION_FLAGS \
6380   (HAVE_GAS_SHF_MERGE && flag_merge_debug_strings               \
6381    ? SECTION_DEBUG | SECTION_MERGE | SECTION_STRINGS | 1        \
6382    : SECTION_DEBUG)
6383
6384 /* Labels we insert at beginning sections we can reference instead of
6385    the section names themselves.  */
6386
6387 #ifndef TEXT_SECTION_LABEL
6388 #define TEXT_SECTION_LABEL              "Ltext"
6389 #endif
6390 #ifndef COLD_TEXT_SECTION_LABEL
6391 #define COLD_TEXT_SECTION_LABEL         "Ltext_cold"
6392 #endif
6393 #ifndef DEBUG_LINE_SECTION_LABEL
6394 #define DEBUG_LINE_SECTION_LABEL        "Ldebug_line"
6395 #endif
6396 #ifndef DEBUG_INFO_SECTION_LABEL
6397 #define DEBUG_INFO_SECTION_LABEL        "Ldebug_info"
6398 #endif
6399 #ifndef DEBUG_ABBREV_SECTION_LABEL
6400 #define DEBUG_ABBREV_SECTION_LABEL      "Ldebug_abbrev"
6401 #endif
6402 #ifndef DEBUG_LOC_SECTION_LABEL
6403 #define DEBUG_LOC_SECTION_LABEL         "Ldebug_loc"
6404 #endif
6405 #ifndef DEBUG_RANGES_SECTION_LABEL
6406 #define DEBUG_RANGES_SECTION_LABEL      "Ldebug_ranges"
6407 #endif
6408 #ifndef DEBUG_MACINFO_SECTION_LABEL
6409 #define DEBUG_MACINFO_SECTION_LABEL     "Ldebug_macinfo"
6410 #endif
6411
6412
6413 /* Definitions of defaults for formats and names of various special
6414    (artificial) labels which may be generated within this file (when the -g
6415    options is used and DWARF2_DEBUGGING_INFO is in effect.
6416    If necessary, these may be overridden from within the tm.h file, but
6417    typically, overriding these defaults is unnecessary.  */
6418
6419 static char text_end_label[MAX_ARTIFICIAL_LABEL_BYTES];
6420 static char text_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
6421 static char cold_text_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
6422 static char cold_end_label[MAX_ARTIFICIAL_LABEL_BYTES];
6423 static char abbrev_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
6424 static char debug_info_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
6425 static char debug_line_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
6426 static char macinfo_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
6427 static char loc_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
6428 static char ranges_section_label[2 * MAX_ARTIFICIAL_LABEL_BYTES];
6429
6430 #ifndef TEXT_END_LABEL
6431 #define TEXT_END_LABEL          "Letext"
6432 #endif
6433 #ifndef COLD_END_LABEL
6434 #define COLD_END_LABEL          "Letext_cold"
6435 #endif
6436 #ifndef BLOCK_BEGIN_LABEL
6437 #define BLOCK_BEGIN_LABEL       "LBB"
6438 #endif
6439 #ifndef BLOCK_END_LABEL
6440 #define BLOCK_END_LABEL         "LBE"
6441 #endif
6442 #ifndef LINE_CODE_LABEL
6443 #define LINE_CODE_LABEL         "LM"
6444 #endif
6445 #ifndef SEPARATE_LINE_CODE_LABEL
6446 #define SEPARATE_LINE_CODE_LABEL        "LSM"
6447 #endif
6448
6449 \f
6450 /* We allow a language front-end to designate a function that is to be
6451    called to "demangle" any name before it is put into a DIE.  */
6452
6453 static const char *(*demangle_name_func) (const char *);
6454
6455 void
6456 dwarf2out_set_demangle_name_func (const char *(*func) (const char *))
6457 {
6458   demangle_name_func = func;
6459 }
6460
6461 /* Test if rtl node points to a pseudo register.  */
6462
6463 static inline int
6464 is_pseudo_reg (const_rtx rtl)
6465 {
6466   return ((REG_P (rtl) && REGNO (rtl) >= FIRST_PSEUDO_REGISTER)
6467           || (GET_CODE (rtl) == SUBREG
6468               && REGNO (SUBREG_REG (rtl)) >= FIRST_PSEUDO_REGISTER));
6469 }
6470
6471 /* Return a reference to a type, with its const and volatile qualifiers
6472    removed.  */
6473
6474 static inline tree
6475 type_main_variant (tree type)
6476 {
6477   type = TYPE_MAIN_VARIANT (type);
6478
6479   /* ??? There really should be only one main variant among any group of
6480      variants of a given type (and all of the MAIN_VARIANT values for all
6481      members of the group should point to that one type) but sometimes the C
6482      front-end messes this up for array types, so we work around that bug
6483      here.  */
6484   if (TREE_CODE (type) == ARRAY_TYPE)
6485     while (type != TYPE_MAIN_VARIANT (type))
6486       type = TYPE_MAIN_VARIANT (type);
6487
6488   return type;
6489 }
6490
6491 /* Return nonzero if the given type node represents a tagged type.  */
6492
6493 static inline int
6494 is_tagged_type (const_tree type)
6495 {
6496   enum tree_code code = TREE_CODE (type);
6497
6498   return (code == RECORD_TYPE || code == UNION_TYPE
6499           || code == QUAL_UNION_TYPE || code == ENUMERAL_TYPE);
6500 }
6501
6502 /* Convert a DIE tag into its string name.  */
6503
6504 static const char *
6505 dwarf_tag_name (unsigned int tag)
6506 {
6507   switch (tag)
6508     {
6509     case DW_TAG_padding:
6510       return "DW_TAG_padding";
6511     case DW_TAG_array_type:
6512       return "DW_TAG_array_type";
6513     case DW_TAG_class_type:
6514       return "DW_TAG_class_type";
6515     case DW_TAG_entry_point:
6516       return "DW_TAG_entry_point";
6517     case DW_TAG_enumeration_type:
6518       return "DW_TAG_enumeration_type";
6519     case DW_TAG_formal_parameter:
6520       return "DW_TAG_formal_parameter";
6521     case DW_TAG_imported_declaration:
6522       return "DW_TAG_imported_declaration";
6523     case DW_TAG_label:
6524       return "DW_TAG_label";
6525     case DW_TAG_lexical_block:
6526       return "DW_TAG_lexical_block";
6527     case DW_TAG_member:
6528       return "DW_TAG_member";
6529     case DW_TAG_pointer_type:
6530       return "DW_TAG_pointer_type";
6531     case DW_TAG_reference_type:
6532       return "DW_TAG_reference_type";
6533     case DW_TAG_compile_unit:
6534       return "DW_TAG_compile_unit";
6535     case DW_TAG_string_type:
6536       return "DW_TAG_string_type";
6537     case DW_TAG_structure_type:
6538       return "DW_TAG_structure_type";
6539     case DW_TAG_subroutine_type:
6540       return "DW_TAG_subroutine_type";
6541     case DW_TAG_typedef:
6542       return "DW_TAG_typedef";
6543     case DW_TAG_union_type:
6544       return "DW_TAG_union_type";
6545     case DW_TAG_unspecified_parameters:
6546       return "DW_TAG_unspecified_parameters";
6547     case DW_TAG_variant:
6548       return "DW_TAG_variant";
6549     case DW_TAG_common_block:
6550       return "DW_TAG_common_block";
6551     case DW_TAG_common_inclusion:
6552       return "DW_TAG_common_inclusion";
6553     case DW_TAG_inheritance:
6554       return "DW_TAG_inheritance";
6555     case DW_TAG_inlined_subroutine:
6556       return "DW_TAG_inlined_subroutine";
6557     case DW_TAG_module:
6558       return "DW_TAG_module";
6559     case DW_TAG_ptr_to_member_type:
6560       return "DW_TAG_ptr_to_member_type";
6561     case DW_TAG_set_type:
6562       return "DW_TAG_set_type";
6563     case DW_TAG_subrange_type:
6564       return "DW_TAG_subrange_type";
6565     case DW_TAG_with_stmt:
6566       return "DW_TAG_with_stmt";
6567     case DW_TAG_access_declaration:
6568       return "DW_TAG_access_declaration";
6569     case DW_TAG_base_type:
6570       return "DW_TAG_base_type";
6571     case DW_TAG_catch_block:
6572       return "DW_TAG_catch_block";
6573     case DW_TAG_const_type:
6574       return "DW_TAG_const_type";
6575     case DW_TAG_constant:
6576       return "DW_TAG_constant";
6577     case DW_TAG_enumerator:
6578       return "DW_TAG_enumerator";
6579     case DW_TAG_file_type:
6580       return "DW_TAG_file_type";
6581     case DW_TAG_friend:
6582       return "DW_TAG_friend";
6583     case DW_TAG_namelist:
6584       return "DW_TAG_namelist";
6585     case DW_TAG_namelist_item:
6586       return "DW_TAG_namelist_item";
6587     case DW_TAG_packed_type:
6588       return "DW_TAG_packed_type";
6589     case DW_TAG_subprogram:
6590       return "DW_TAG_subprogram";
6591     case DW_TAG_template_type_param:
6592       return "DW_TAG_template_type_param";
6593     case DW_TAG_template_value_param:
6594       return "DW_TAG_template_value_param";
6595     case DW_TAG_thrown_type:
6596       return "DW_TAG_thrown_type";
6597     case DW_TAG_try_block:
6598       return "DW_TAG_try_block";
6599     case DW_TAG_variant_part:
6600       return "DW_TAG_variant_part";
6601     case DW_TAG_variable:
6602       return "DW_TAG_variable";
6603     case DW_TAG_volatile_type:
6604       return "DW_TAG_volatile_type";
6605     case DW_TAG_dwarf_procedure:
6606       return "DW_TAG_dwarf_procedure";
6607     case DW_TAG_restrict_type:
6608       return "DW_TAG_restrict_type";
6609     case DW_TAG_interface_type:
6610       return "DW_TAG_interface_type";
6611     case DW_TAG_namespace:
6612       return "DW_TAG_namespace";
6613     case DW_TAG_imported_module:
6614       return "DW_TAG_imported_module";
6615     case DW_TAG_unspecified_type:
6616       return "DW_TAG_unspecified_type";
6617     case DW_TAG_partial_unit:
6618       return "DW_TAG_partial_unit";
6619     case DW_TAG_imported_unit:
6620       return "DW_TAG_imported_unit";
6621     case DW_TAG_condition:
6622       return "DW_TAG_condition";
6623     case DW_TAG_shared_type:
6624       return "DW_TAG_shared_type";
6625     case DW_TAG_type_unit:
6626       return "DW_TAG_type_unit";
6627     case DW_TAG_rvalue_reference_type:
6628       return "DW_TAG_rvalue_reference_type";
6629     case DW_TAG_template_alias:
6630       return "DW_TAG_template_alias";
6631     case DW_TAG_GNU_template_parameter_pack:
6632       return "DW_TAG_GNU_template_parameter_pack";
6633     case DW_TAG_GNU_formal_parameter_pack:
6634       return "DW_TAG_GNU_formal_parameter_pack";
6635     case DW_TAG_MIPS_loop:
6636       return "DW_TAG_MIPS_loop";
6637     case DW_TAG_format_label:
6638       return "DW_TAG_format_label";
6639     case DW_TAG_function_template:
6640       return "DW_TAG_function_template";
6641     case DW_TAG_class_template:
6642       return "DW_TAG_class_template";
6643     case DW_TAG_GNU_BINCL:
6644       return "DW_TAG_GNU_BINCL";
6645     case DW_TAG_GNU_EINCL:
6646       return "DW_TAG_GNU_EINCL";
6647     case DW_TAG_GNU_template_template_param:
6648       return "DW_TAG_GNU_template_template_param";
6649     default:
6650       return "DW_TAG_<unknown>";
6651     }
6652 }
6653
6654 /* Convert a DWARF attribute code into its string name.  */
6655
6656 static const char *
6657 dwarf_attr_name (unsigned int attr)
6658 {
6659   switch (attr)
6660     {
6661     case DW_AT_sibling:
6662       return "DW_AT_sibling";
6663     case DW_AT_location:
6664       return "DW_AT_location";
6665     case DW_AT_name:
6666       return "DW_AT_name";
6667     case DW_AT_ordering:
6668       return "DW_AT_ordering";
6669     case DW_AT_subscr_data:
6670       return "DW_AT_subscr_data";
6671     case DW_AT_byte_size:
6672       return "DW_AT_byte_size";
6673     case DW_AT_bit_offset:
6674       return "DW_AT_bit_offset";
6675     case DW_AT_bit_size:
6676       return "DW_AT_bit_size";
6677     case DW_AT_element_list:
6678       return "DW_AT_element_list";
6679     case DW_AT_stmt_list:
6680       return "DW_AT_stmt_list";
6681     case DW_AT_low_pc:
6682       return "DW_AT_low_pc";
6683     case DW_AT_high_pc:
6684       return "DW_AT_high_pc";
6685     case DW_AT_language:
6686       return "DW_AT_language";
6687     case DW_AT_member:
6688       return "DW_AT_member";
6689     case DW_AT_discr:
6690       return "DW_AT_discr";
6691     case DW_AT_discr_value:
6692       return "DW_AT_discr_value";
6693     case DW_AT_visibility:
6694       return "DW_AT_visibility";
6695     case DW_AT_import:
6696       return "DW_AT_import";
6697     case DW_AT_string_length:
6698       return "DW_AT_string_length";
6699     case DW_AT_common_reference:
6700       return "DW_AT_common_reference";
6701     case DW_AT_comp_dir:
6702       return "DW_AT_comp_dir";
6703     case DW_AT_const_value:
6704       return "DW_AT_const_value";
6705     case DW_AT_containing_type:
6706       return "DW_AT_containing_type";
6707     case DW_AT_default_value:
6708       return "DW_AT_default_value";
6709     case DW_AT_inline:
6710       return "DW_AT_inline";
6711     case DW_AT_is_optional:
6712       return "DW_AT_is_optional";
6713     case DW_AT_lower_bound:
6714       return "DW_AT_lower_bound";
6715     case DW_AT_producer:
6716       return "DW_AT_producer";
6717     case DW_AT_prototyped:
6718       return "DW_AT_prototyped";
6719     case DW_AT_return_addr:
6720       return "DW_AT_return_addr";
6721     case DW_AT_start_scope:
6722       return "DW_AT_start_scope";
6723     case DW_AT_bit_stride:
6724       return "DW_AT_bit_stride";
6725     case DW_AT_upper_bound:
6726       return "DW_AT_upper_bound";
6727     case DW_AT_abstract_origin:
6728       return "DW_AT_abstract_origin";
6729     case DW_AT_accessibility:
6730       return "DW_AT_accessibility";
6731     case DW_AT_address_class:
6732       return "DW_AT_address_class";
6733     case DW_AT_artificial:
6734       return "DW_AT_artificial";
6735     case DW_AT_base_types:
6736       return "DW_AT_base_types";
6737     case DW_AT_calling_convention:
6738       return "DW_AT_calling_convention";
6739     case DW_AT_count:
6740       return "DW_AT_count";
6741     case DW_AT_data_member_location:
6742       return "DW_AT_data_member_location";
6743     case DW_AT_decl_column:
6744       return "DW_AT_decl_column";
6745     case DW_AT_decl_file:
6746       return "DW_AT_decl_file";
6747     case DW_AT_decl_line:
6748       return "DW_AT_decl_line";
6749     case DW_AT_declaration:
6750       return "DW_AT_declaration";
6751     case DW_AT_discr_list:
6752       return "DW_AT_discr_list";
6753     case DW_AT_encoding:
6754       return "DW_AT_encoding";
6755     case DW_AT_external:
6756       return "DW_AT_external";
6757     case DW_AT_explicit:
6758       return "DW_AT_explicit";
6759     case DW_AT_frame_base:
6760       return "DW_AT_frame_base";
6761     case DW_AT_friend:
6762       return "DW_AT_friend";
6763     case DW_AT_identifier_case:
6764       return "DW_AT_identifier_case";
6765     case DW_AT_macro_info:
6766       return "DW_AT_macro_info";
6767     case DW_AT_namelist_items:
6768       return "DW_AT_namelist_items";
6769     case DW_AT_priority:
6770       return "DW_AT_priority";
6771     case DW_AT_segment:
6772       return "DW_AT_segment";
6773     case DW_AT_specification:
6774       return "DW_AT_specification";
6775     case DW_AT_static_link:
6776       return "DW_AT_static_link";
6777     case DW_AT_type:
6778       return "DW_AT_type";
6779     case DW_AT_use_location:
6780       return "DW_AT_use_location";
6781     case DW_AT_variable_parameter:
6782       return "DW_AT_variable_parameter";
6783     case DW_AT_virtuality:
6784       return "DW_AT_virtuality";
6785     case DW_AT_vtable_elem_location:
6786       return "DW_AT_vtable_elem_location";
6787
6788     case DW_AT_allocated:
6789       return "DW_AT_allocated";
6790     case DW_AT_associated:
6791       return "DW_AT_associated";
6792     case DW_AT_data_location:
6793       return "DW_AT_data_location";
6794     case DW_AT_byte_stride:
6795       return "DW_AT_byte_stride";
6796     case DW_AT_entry_pc:
6797       return "DW_AT_entry_pc";
6798     case DW_AT_use_UTF8:
6799       return "DW_AT_use_UTF8";
6800     case DW_AT_extension:
6801       return "DW_AT_extension";
6802     case DW_AT_ranges:
6803       return "DW_AT_ranges";
6804     case DW_AT_trampoline:
6805       return "DW_AT_trampoline";
6806     case DW_AT_call_column:
6807       return "DW_AT_call_column";
6808     case DW_AT_call_file:
6809       return "DW_AT_call_file";
6810     case DW_AT_call_line:
6811       return "DW_AT_call_line";
6812
6813     case DW_AT_signature:
6814       return "DW_AT_signature";
6815     case DW_AT_main_subprogram:
6816       return "DW_AT_main_subprogram";
6817     case DW_AT_data_bit_offset:
6818       return "DW_AT_data_bit_offset";
6819     case DW_AT_const_expr:
6820       return "DW_AT_const_expr";
6821     case DW_AT_enum_class:
6822       return "DW_AT_enum_class";
6823     case DW_AT_linkage_name:
6824       return "DW_AT_linkage_name";
6825
6826     case DW_AT_MIPS_fde:
6827       return "DW_AT_MIPS_fde";
6828     case DW_AT_MIPS_loop_begin:
6829       return "DW_AT_MIPS_loop_begin";
6830     case DW_AT_MIPS_tail_loop_begin:
6831       return "DW_AT_MIPS_tail_loop_begin";
6832     case DW_AT_MIPS_epilog_begin:
6833       return "DW_AT_MIPS_epilog_begin";
6834 #if VMS_DEBUGGING_INFO
6835     case DW_AT_HP_prologue:
6836       return "DW_AT_HP_prologue";
6837 #else
6838     case DW_AT_MIPS_loop_unroll_factor:
6839       return "DW_AT_MIPS_loop_unroll_factor";
6840 #endif
6841     case DW_AT_MIPS_software_pipeline_depth:
6842       return "DW_AT_MIPS_software_pipeline_depth";
6843     case DW_AT_MIPS_linkage_name:
6844       return "DW_AT_MIPS_linkage_name";
6845 #if VMS_DEBUGGING_INFO
6846     case DW_AT_HP_epilogue:
6847       return "DW_AT_HP_epilogue";
6848 #else
6849     case DW_AT_MIPS_stride:
6850       return "DW_AT_MIPS_stride";
6851 #endif
6852     case DW_AT_MIPS_abstract_name:
6853       return "DW_AT_MIPS_abstract_name";
6854     case DW_AT_MIPS_clone_origin:
6855       return "DW_AT_MIPS_clone_origin";
6856     case DW_AT_MIPS_has_inlines:
6857       return "DW_AT_MIPS_has_inlines";
6858
6859     case DW_AT_sf_names:
6860       return "DW_AT_sf_names";
6861     case DW_AT_src_info:
6862       return "DW_AT_src_info";
6863     case DW_AT_mac_info:
6864       return "DW_AT_mac_info";
6865     case DW_AT_src_coords:
6866       return "DW_AT_src_coords";
6867     case DW_AT_body_begin:
6868       return "DW_AT_body_begin";
6869     case DW_AT_body_end:
6870       return "DW_AT_body_end";
6871     case DW_AT_GNU_vector:
6872       return "DW_AT_GNU_vector";
6873     case DW_AT_GNU_guarded_by:
6874       return "DW_AT_GNU_guarded_by";
6875     case DW_AT_GNU_pt_guarded_by:
6876       return "DW_AT_GNU_pt_guarded_by";
6877     case DW_AT_GNU_guarded:
6878       return "DW_AT_GNU_guarded";
6879     case DW_AT_GNU_pt_guarded:
6880       return "DW_AT_GNU_pt_guarded";
6881     case DW_AT_GNU_locks_excluded:
6882       return "DW_AT_GNU_locks_excluded";
6883     case DW_AT_GNU_exclusive_locks_required:
6884       return "DW_AT_GNU_exclusive_locks_required";
6885     case DW_AT_GNU_shared_locks_required:
6886       return "DW_AT_GNU_shared_locks_required";
6887     case DW_AT_GNU_odr_signature:
6888       return "DW_AT_GNU_odr_signature";
6889     case DW_AT_GNU_template_name:
6890       return "DW_AT_GNU_template_name";
6891
6892     case DW_AT_VMS_rtnbeg_pd_address:
6893       return "DW_AT_VMS_rtnbeg_pd_address";
6894
6895     default:
6896       return "DW_AT_<unknown>";
6897     }
6898 }
6899
6900 /* Convert a DWARF value form code into its string name.  */
6901
6902 static const char *
6903 dwarf_form_name (unsigned int form)
6904 {
6905   switch (form)
6906     {
6907     case DW_FORM_addr:
6908       return "DW_FORM_addr";
6909     case DW_FORM_block2:
6910       return "DW_FORM_block2";
6911     case DW_FORM_block4:
6912       return "DW_FORM_block4";
6913     case DW_FORM_data2:
6914       return "DW_FORM_data2";
6915     case DW_FORM_data4:
6916       return "DW_FORM_data4";
6917     case DW_FORM_data8:
6918       return "DW_FORM_data8";
6919     case DW_FORM_string:
6920       return "DW_FORM_string";
6921     case DW_FORM_block:
6922       return "DW_FORM_block";
6923     case DW_FORM_block1:
6924       return "DW_FORM_block1";
6925     case DW_FORM_data1:
6926       return "DW_FORM_data1";
6927     case DW_FORM_flag:
6928       return "DW_FORM_flag";
6929     case DW_FORM_sdata:
6930       return "DW_FORM_sdata";
6931     case DW_FORM_strp:
6932       return "DW_FORM_strp";
6933     case DW_FORM_udata:
6934       return "DW_FORM_udata";
6935     case DW_FORM_ref_addr:
6936       return "DW_FORM_ref_addr";
6937     case DW_FORM_ref1:
6938       return "DW_FORM_ref1";
6939     case DW_FORM_ref2:
6940       return "DW_FORM_ref2";
6941     case DW_FORM_ref4:
6942       return "DW_FORM_ref4";
6943     case DW_FORM_ref8:
6944       return "DW_FORM_ref8";
6945     case DW_FORM_ref_udata:
6946       return "DW_FORM_ref_udata";
6947     case DW_FORM_indirect:
6948       return "DW_FORM_indirect";
6949     case DW_FORM_sec_offset:
6950       return "DW_FORM_sec_offset";
6951     case DW_FORM_exprloc:
6952       return "DW_FORM_exprloc";
6953     case DW_FORM_flag_present:
6954       return "DW_FORM_flag_present";
6955     case DW_FORM_ref_sig8:
6956       return "DW_FORM_ref_sig8";
6957     default:
6958       return "DW_FORM_<unknown>";
6959     }
6960 }
6961 \f
6962 /* Determine the "ultimate origin" of a decl.  The decl may be an inlined
6963    instance of an inlined instance of a decl which is local to an inline
6964    function, so we have to trace all of the way back through the origin chain
6965    to find out what sort of node actually served as the original seed for the
6966    given block.  */
6967
6968 static tree
6969 decl_ultimate_origin (const_tree decl)
6970 {
6971   if (!CODE_CONTAINS_STRUCT (TREE_CODE (decl), TS_DECL_COMMON))
6972     return NULL_TREE;
6973
6974   /* output_inline_function sets DECL_ABSTRACT_ORIGIN for all the
6975      nodes in the function to point to themselves; ignore that if
6976      we're trying to output the abstract instance of this function.  */
6977   if (DECL_ABSTRACT (decl) && DECL_ABSTRACT_ORIGIN (decl) == decl)
6978     return NULL_TREE;
6979
6980   /* Since the DECL_ABSTRACT_ORIGIN for a DECL is supposed to be the
6981      most distant ancestor, this should never happen.  */
6982   gcc_assert (!DECL_FROM_INLINE (DECL_ORIGIN (decl)));
6983
6984   return DECL_ABSTRACT_ORIGIN (decl);
6985 }
6986
6987 /* Get the class to which DECL belongs, if any.  In g++, the DECL_CONTEXT
6988    of a virtual function may refer to a base class, so we check the 'this'
6989    parameter.  */
6990
6991 static tree
6992 decl_class_context (tree decl)
6993 {
6994   tree context = NULL_TREE;
6995
6996   if (TREE_CODE (decl) != FUNCTION_DECL || ! DECL_VINDEX (decl))
6997     context = DECL_CONTEXT (decl);
6998   else
6999     context = TYPE_MAIN_VARIANT
7000       (TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (TREE_TYPE (decl)))));
7001
7002   if (context && !TYPE_P (context))
7003     context = NULL_TREE;
7004
7005   return context;
7006 }
7007 \f
7008 /* Add an attribute/value pair to a DIE.  */
7009
7010 static inline void
7011 add_dwarf_attr (dw_die_ref die, dw_attr_ref attr)
7012 {
7013   /* Maybe this should be an assert?  */
7014   if (die == NULL)
7015     return;
7016
7017   if (die->die_attr == NULL)
7018     die->die_attr = VEC_alloc (dw_attr_node, gc, 1);
7019   VEC_safe_push (dw_attr_node, gc, die->die_attr, attr);
7020 }
7021
7022 static inline enum dw_val_class
7023 AT_class (dw_attr_ref a)
7024 {
7025   return a->dw_attr_val.val_class;
7026 }
7027
7028 /* Add a flag value attribute to a DIE.  */
7029
7030 static inline void
7031 add_AT_flag (dw_die_ref die, enum dwarf_attribute attr_kind, unsigned int flag)
7032 {
7033   dw_attr_node attr;
7034
7035   attr.dw_attr = attr_kind;
7036   attr.dw_attr_val.val_class = dw_val_class_flag;
7037   attr.dw_attr_val.v.val_flag = flag;
7038   add_dwarf_attr (die, &attr);
7039 }
7040
7041 static inline unsigned
7042 AT_flag (dw_attr_ref a)
7043 {
7044   gcc_assert (a && AT_class (a) == dw_val_class_flag);
7045   return a->dw_attr_val.v.val_flag;
7046 }
7047
7048 /* Add a signed integer attribute value to a DIE.  */
7049
7050 static inline void
7051 add_AT_int (dw_die_ref die, enum dwarf_attribute attr_kind, HOST_WIDE_INT int_val)
7052 {
7053   dw_attr_node attr;
7054
7055   attr.dw_attr = attr_kind;
7056   attr.dw_attr_val.val_class = dw_val_class_const;
7057   attr.dw_attr_val.v.val_int = int_val;
7058   add_dwarf_attr (die, &attr);
7059 }
7060
7061 static inline HOST_WIDE_INT
7062 AT_int (dw_attr_ref a)
7063 {
7064   gcc_assert (a && AT_class (a) == dw_val_class_const);
7065   return a->dw_attr_val.v.val_int;
7066 }
7067
7068 /* Add an unsigned integer attribute value to a DIE.  */
7069
7070 static inline void
7071 add_AT_unsigned (dw_die_ref die, enum dwarf_attribute attr_kind,
7072                  unsigned HOST_WIDE_INT unsigned_val)
7073 {
7074   dw_attr_node attr;
7075
7076   attr.dw_attr = attr_kind;
7077   attr.dw_attr_val.val_class = dw_val_class_unsigned_const;
7078   attr.dw_attr_val.v.val_unsigned = unsigned_val;
7079   add_dwarf_attr (die, &attr);
7080 }
7081
7082 static inline unsigned HOST_WIDE_INT
7083 AT_unsigned (dw_attr_ref a)
7084 {
7085   gcc_assert (a && AT_class (a) == dw_val_class_unsigned_const);
7086   return a->dw_attr_val.v.val_unsigned;
7087 }
7088
7089 /* Add an unsigned double integer attribute value to a DIE.  */
7090
7091 static inline void
7092 add_AT_double (dw_die_ref die, enum dwarf_attribute attr_kind,
7093                HOST_WIDE_INT high, unsigned HOST_WIDE_INT low)
7094 {
7095   dw_attr_node attr;
7096
7097   attr.dw_attr = attr_kind;
7098   attr.dw_attr_val.val_class = dw_val_class_const_double;
7099   attr.dw_attr_val.v.val_double.high = high;
7100   attr.dw_attr_val.v.val_double.low = low;
7101   add_dwarf_attr (die, &attr);
7102 }
7103
7104 /* Add a floating point attribute value to a DIE and return it.  */
7105
7106 static inline void
7107 add_AT_vec (dw_die_ref die, enum dwarf_attribute attr_kind,
7108             unsigned int length, unsigned int elt_size, unsigned char *array)
7109 {
7110   dw_attr_node attr;
7111
7112   attr.dw_attr = attr_kind;
7113   attr.dw_attr_val.val_class = dw_val_class_vec;
7114   attr.dw_attr_val.v.val_vec.length = length;
7115   attr.dw_attr_val.v.val_vec.elt_size = elt_size;
7116   attr.dw_attr_val.v.val_vec.array = array;
7117   add_dwarf_attr (die, &attr);
7118 }
7119
7120 /* Add an 8-byte data attribute value to a DIE.  */
7121
7122 static inline void
7123 add_AT_data8 (dw_die_ref die, enum dwarf_attribute attr_kind,
7124               unsigned char data8[8])
7125 {
7126   dw_attr_node attr;
7127
7128   attr.dw_attr = attr_kind;
7129   attr.dw_attr_val.val_class = dw_val_class_data8;
7130   memcpy (attr.dw_attr_val.v.val_data8, data8, 8);
7131   add_dwarf_attr (die, &attr);
7132 }
7133
7134 /* Hash and equality functions for debug_str_hash.  */
7135
7136 static hashval_t
7137 debug_str_do_hash (const void *x)
7138 {
7139   return htab_hash_string (((const struct indirect_string_node *)x)->str);
7140 }
7141
7142 static int
7143 debug_str_eq (const void *x1, const void *x2)
7144 {
7145   return strcmp ((((const struct indirect_string_node *)x1)->str),
7146                  (const char *)x2) == 0;
7147 }
7148
7149 /* Add STR to the indirect string hash table.  */
7150
7151 static struct indirect_string_node *
7152 find_AT_string (const char *str)
7153 {
7154   struct indirect_string_node *node;
7155   void **slot;
7156
7157   if (! debug_str_hash)
7158     debug_str_hash = htab_create_ggc (10, debug_str_do_hash,
7159                                       debug_str_eq, NULL);
7160
7161   slot = htab_find_slot_with_hash (debug_str_hash, str,
7162                                    htab_hash_string (str), INSERT);
7163   if (*slot == NULL)
7164     {
7165       node = ggc_alloc_cleared_indirect_string_node ();
7166       node->str = ggc_strdup (str);
7167       *slot = node;
7168     }
7169   else
7170     node = (struct indirect_string_node *) *slot;
7171
7172   node->refcount++;
7173   return node;
7174 }
7175
7176 /* Add a string attribute value to a DIE.  */
7177
7178 static inline void
7179 add_AT_string (dw_die_ref die, enum dwarf_attribute attr_kind, const char *str)
7180 {
7181   dw_attr_node attr;
7182   struct indirect_string_node *node;
7183
7184   node = find_AT_string (str);
7185
7186   attr.dw_attr = attr_kind;
7187   attr.dw_attr_val.val_class = dw_val_class_str;
7188   attr.dw_attr_val.v.val_str = node;
7189   add_dwarf_attr (die, &attr);
7190 }
7191
7192 /* Create a label for an indirect string node, ensuring it is going to
7193    be output, unless its reference count goes down to zero.  */
7194
7195 static inline void
7196 gen_label_for_indirect_string (struct indirect_string_node *node)
7197 {
7198   char label[32];
7199
7200   if (node->label)
7201     return;
7202
7203   ASM_GENERATE_INTERNAL_LABEL (label, "LASF", dw2_string_counter);
7204   ++dw2_string_counter;
7205   node->label = xstrdup (label);
7206 }
7207
7208 /* Create a SYMBOL_REF rtx whose value is the initial address of a
7209    debug string STR.  */
7210
7211 static inline rtx
7212 get_debug_string_label (const char *str)
7213 {
7214   struct indirect_string_node *node = find_AT_string (str);
7215
7216   debug_str_hash_forced = true;
7217
7218   gen_label_for_indirect_string (node);
7219
7220   return gen_rtx_SYMBOL_REF (Pmode, node->label);
7221 }
7222
7223 static inline const char *
7224 AT_string (dw_attr_ref a)
7225 {
7226   gcc_assert (a && AT_class (a) == dw_val_class_str);
7227   return a->dw_attr_val.v.val_str->str;
7228 }
7229
7230 /* Find out whether a string should be output inline in DIE
7231    or out-of-line in .debug_str section.  */
7232
7233 static enum dwarf_form
7234 AT_string_form (dw_attr_ref a)
7235 {
7236   struct indirect_string_node *node;
7237   unsigned int len;
7238
7239   gcc_assert (a && AT_class (a) == dw_val_class_str);
7240
7241   node = a->dw_attr_val.v.val_str;
7242   if (node->form)
7243     return node->form;
7244
7245   len = strlen (node->str) + 1;
7246
7247   /* If the string is shorter or equal to the size of the reference, it is
7248      always better to put it inline.  */
7249   if (len <= DWARF_OFFSET_SIZE || node->refcount == 0)
7250     return node->form = DW_FORM_string;
7251
7252   /* If we cannot expect the linker to merge strings in .debug_str
7253      section, only put it into .debug_str if it is worth even in this
7254      single module.  */
7255   if (DWARF2_INDIRECT_STRING_SUPPORT_MISSING_ON_TARGET
7256       || ((debug_str_section->common.flags & SECTION_MERGE) == 0
7257       && (len - DWARF_OFFSET_SIZE) * node->refcount <= len))
7258     return node->form = DW_FORM_string;
7259
7260   gen_label_for_indirect_string (node);
7261
7262   return node->form = DW_FORM_strp;
7263 }
7264
7265 /* Add a DIE reference attribute value to a DIE.  */
7266
7267 static inline void
7268 add_AT_die_ref (dw_die_ref die, enum dwarf_attribute attr_kind, dw_die_ref targ_die)
7269 {
7270   dw_attr_node attr;
7271
7272   attr.dw_attr = attr_kind;
7273   attr.dw_attr_val.val_class = dw_val_class_die_ref;
7274   attr.dw_attr_val.v.val_die_ref.die = targ_die;
7275   attr.dw_attr_val.v.val_die_ref.external = 0;
7276   add_dwarf_attr (die, &attr);
7277 }
7278
7279 /* Add an AT_specification attribute to a DIE, and also make the back
7280    pointer from the specification to the definition.  */
7281
7282 static inline void
7283 add_AT_specification (dw_die_ref die, dw_die_ref targ_die)
7284 {
7285   add_AT_die_ref (die, DW_AT_specification, targ_die);
7286   gcc_assert (!targ_die->die_definition);
7287   targ_die->die_definition = die;
7288 }
7289
7290 static inline dw_die_ref
7291 AT_ref (dw_attr_ref a)
7292 {
7293   gcc_assert (a && AT_class (a) == dw_val_class_die_ref);
7294   return a->dw_attr_val.v.val_die_ref.die;
7295 }
7296
7297 static inline int
7298 AT_ref_external (dw_attr_ref a)
7299 {
7300   if (a && AT_class (a) == dw_val_class_die_ref)
7301     return a->dw_attr_val.v.val_die_ref.external;
7302
7303   return 0;
7304 }
7305
7306 static inline void
7307 set_AT_ref_external (dw_attr_ref a, int i)
7308 {
7309   gcc_assert (a && AT_class (a) == dw_val_class_die_ref);
7310   a->dw_attr_val.v.val_die_ref.external = i;
7311 }
7312
7313 /* Add an FDE reference attribute value to a DIE.  */
7314
7315 static inline void
7316 add_AT_fde_ref (dw_die_ref die, enum dwarf_attribute attr_kind, unsigned int targ_fde)
7317 {
7318   dw_attr_node attr;
7319
7320   attr.dw_attr = attr_kind;
7321   attr.dw_attr_val.val_class = dw_val_class_fde_ref;
7322   attr.dw_attr_val.v.val_fde_index = targ_fde;
7323   add_dwarf_attr (die, &attr);
7324 }
7325
7326 /* Add a location description attribute value to a DIE.  */
7327
7328 static inline void
7329 add_AT_loc (dw_die_ref die, enum dwarf_attribute attr_kind, dw_loc_descr_ref loc)
7330 {
7331   dw_attr_node attr;
7332
7333   attr.dw_attr = attr_kind;
7334   attr.dw_attr_val.val_class = dw_val_class_loc;
7335   attr.dw_attr_val.v.val_loc = loc;
7336   add_dwarf_attr (die, &attr);
7337 }
7338
7339 static inline dw_loc_descr_ref
7340 AT_loc (dw_attr_ref a)
7341 {
7342   gcc_assert (a && AT_class (a) == dw_val_class_loc);
7343   return a->dw_attr_val.v.val_loc;
7344 }
7345
7346 static inline void
7347 add_AT_loc_list (dw_die_ref die, enum dwarf_attribute attr_kind, dw_loc_list_ref loc_list)
7348 {
7349   dw_attr_node attr;
7350
7351   attr.dw_attr = attr_kind;
7352   attr.dw_attr_val.val_class = dw_val_class_loc_list;
7353   attr.dw_attr_val.v.val_loc_list = loc_list;
7354   add_dwarf_attr (die, &attr);
7355   have_location_lists = true;
7356 }
7357
7358 static inline dw_loc_list_ref
7359 AT_loc_list (dw_attr_ref a)
7360 {
7361   gcc_assert (a && AT_class (a) == dw_val_class_loc_list);
7362   return a->dw_attr_val.v.val_loc_list;
7363 }
7364
7365 static inline dw_loc_list_ref *
7366 AT_loc_list_ptr (dw_attr_ref a)
7367 {
7368   gcc_assert (a && AT_class (a) == dw_val_class_loc_list);
7369   return &a->dw_attr_val.v.val_loc_list;
7370 }
7371
7372 /* Add an address constant attribute value to a DIE.  */
7373
7374 static inline void
7375 add_AT_addr (dw_die_ref die, enum dwarf_attribute attr_kind, rtx addr)
7376 {
7377   dw_attr_node attr;
7378
7379   attr.dw_attr = attr_kind;
7380   attr.dw_attr_val.val_class = dw_val_class_addr;
7381   attr.dw_attr_val.v.val_addr = addr;
7382   add_dwarf_attr (die, &attr);
7383 }
7384
7385 /* Get the RTX from to an address DIE attribute.  */
7386
7387 static inline rtx
7388 AT_addr (dw_attr_ref a)
7389 {
7390   gcc_assert (a && AT_class (a) == dw_val_class_addr);
7391   return a->dw_attr_val.v.val_addr;
7392 }
7393
7394 /* Add a file attribute value to a DIE.  */
7395
7396 static inline void
7397 add_AT_file (dw_die_ref die, enum dwarf_attribute attr_kind,
7398              struct dwarf_file_data *fd)
7399 {
7400   dw_attr_node attr;
7401
7402   attr.dw_attr = attr_kind;
7403   attr.dw_attr_val.val_class = dw_val_class_file;
7404   attr.dw_attr_val.v.val_file = fd;
7405   add_dwarf_attr (die, &attr);
7406 }
7407
7408 /* Get the dwarf_file_data from a file DIE attribute.  */
7409
7410 static inline struct dwarf_file_data *
7411 AT_file (dw_attr_ref a)
7412 {
7413   gcc_assert (a && AT_class (a) == dw_val_class_file);
7414   return a->dw_attr_val.v.val_file;
7415 }
7416
7417 /* Add a vms delta attribute value to a DIE.  */
7418
7419 static inline void
7420 add_AT_vms_delta (dw_die_ref die, enum dwarf_attribute attr_kind,
7421                   const char *lbl1, const char *lbl2)
7422 {
7423   dw_attr_node attr;
7424
7425   attr.dw_attr = attr_kind;
7426   attr.dw_attr_val.val_class = dw_val_class_vms_delta;
7427   attr.dw_attr_val.v.val_vms_delta.lbl1 = xstrdup (lbl1);
7428   attr.dw_attr_val.v.val_vms_delta.lbl2 = xstrdup (lbl2);
7429   add_dwarf_attr (die, &attr);
7430 }
7431
7432 /* Add a label identifier attribute value to a DIE.  */
7433
7434 static inline void
7435 add_AT_lbl_id (dw_die_ref die, enum dwarf_attribute attr_kind, const char *lbl_id)
7436 {
7437   dw_attr_node attr;
7438
7439   attr.dw_attr = attr_kind;
7440   attr.dw_attr_val.val_class = dw_val_class_lbl_id;
7441   attr.dw_attr_val.v.val_lbl_id = xstrdup (lbl_id);
7442   add_dwarf_attr (die, &attr);
7443 }
7444
7445 /* Add a section offset attribute value to a DIE, an offset into the
7446    debug_line section.  */
7447
7448 static inline void
7449 add_AT_lineptr (dw_die_ref die, enum dwarf_attribute attr_kind,
7450                 const char *label)
7451 {
7452   dw_attr_node attr;
7453
7454   attr.dw_attr = attr_kind;
7455   attr.dw_attr_val.val_class = dw_val_class_lineptr;
7456   attr.dw_attr_val.v.val_lbl_id = xstrdup (label);
7457   add_dwarf_attr (die, &attr);
7458 }
7459
7460 /* Add a section offset attribute value to a DIE, an offset into the
7461    debug_macinfo section.  */
7462
7463 static inline void
7464 add_AT_macptr (dw_die_ref die, enum dwarf_attribute attr_kind,
7465                const char *label)
7466 {
7467   dw_attr_node attr;
7468
7469   attr.dw_attr = attr_kind;
7470   attr.dw_attr_val.val_class = dw_val_class_macptr;
7471   attr.dw_attr_val.v.val_lbl_id = xstrdup (label);
7472   add_dwarf_attr (die, &attr);
7473 }
7474
7475 /* Add an offset attribute value to a DIE.  */
7476
7477 static inline void
7478 add_AT_offset (dw_die_ref die, enum dwarf_attribute attr_kind,
7479                unsigned HOST_WIDE_INT offset)
7480 {
7481   dw_attr_node attr;
7482
7483   attr.dw_attr = attr_kind;
7484   attr.dw_attr_val.val_class = dw_val_class_offset;
7485   attr.dw_attr_val.v.val_offset = offset;
7486   add_dwarf_attr (die, &attr);
7487 }
7488
7489 /* Add an range_list attribute value to a DIE.  */
7490
7491 static void
7492 add_AT_range_list (dw_die_ref die, enum dwarf_attribute attr_kind,
7493                    long unsigned int offset)
7494 {
7495   dw_attr_node attr;
7496
7497   attr.dw_attr = attr_kind;
7498   attr.dw_attr_val.val_class = dw_val_class_range_list;
7499   attr.dw_attr_val.v.val_offset = offset;
7500   add_dwarf_attr (die, &attr);
7501 }
7502
7503 /* Return the start label of a delta attribute.  */
7504
7505 static inline const char *
7506 AT_vms_delta1 (dw_attr_ref a)
7507 {
7508   gcc_assert (a && (AT_class (a) == dw_val_class_vms_delta));
7509   return a->dw_attr_val.v.val_vms_delta.lbl1;
7510 }
7511
7512 /* Return the end label of a delta attribute.  */
7513
7514 static inline const char *
7515 AT_vms_delta2 (dw_attr_ref a)
7516 {
7517   gcc_assert (a && (AT_class (a) == dw_val_class_vms_delta));
7518   return a->dw_attr_val.v.val_vms_delta.lbl2;
7519 }
7520
7521 static inline const char *
7522 AT_lbl (dw_attr_ref a)
7523 {
7524   gcc_assert (a && (AT_class (a) == dw_val_class_lbl_id
7525                     || AT_class (a) == dw_val_class_lineptr
7526                     || AT_class (a) == dw_val_class_macptr));
7527   return a->dw_attr_val.v.val_lbl_id;
7528 }
7529
7530 /* Get the attribute of type attr_kind.  */
7531
7532 static dw_attr_ref
7533 get_AT (dw_die_ref die, enum dwarf_attribute attr_kind)
7534 {
7535   dw_attr_ref a;
7536   unsigned ix;
7537   dw_die_ref spec = NULL;
7538
7539   if (! die)
7540     return NULL;
7541
7542   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
7543     if (a->dw_attr == attr_kind)
7544       return a;
7545     else if (a->dw_attr == DW_AT_specification
7546              || a->dw_attr == DW_AT_abstract_origin)
7547       spec = AT_ref (a);
7548
7549   if (spec)
7550     return get_AT (spec, attr_kind);
7551
7552   return NULL;
7553 }
7554
7555 /* Return the "low pc" attribute value, typically associated with a subprogram
7556    DIE.  Return null if the "low pc" attribute is either not present, or if it
7557    cannot be represented as an assembler label identifier.  */
7558
7559 static inline const char *
7560 get_AT_low_pc (dw_die_ref die)
7561 {
7562   dw_attr_ref a = get_AT (die, DW_AT_low_pc);
7563
7564   return a ? AT_lbl (a) : NULL;
7565 }
7566
7567 /* Return the "high pc" attribute value, typically associated with a subprogram
7568    DIE.  Return null if the "high pc" attribute is either not present, or if it
7569    cannot be represented as an assembler label identifier.  */
7570
7571 static inline const char *
7572 get_AT_hi_pc (dw_die_ref die)
7573 {
7574   dw_attr_ref a = get_AT (die, DW_AT_high_pc);
7575
7576   return a ? AT_lbl (a) : NULL;
7577 }
7578
7579 /* Return the value of the string attribute designated by ATTR_KIND, or
7580    NULL if it is not present.  */
7581
7582 static inline const char *
7583 get_AT_string (dw_die_ref die, enum dwarf_attribute attr_kind)
7584 {
7585   dw_attr_ref a = get_AT (die, attr_kind);
7586
7587   return a ? AT_string (a) : NULL;
7588 }
7589
7590 /* Return the value of the flag attribute designated by ATTR_KIND, or -1
7591    if it is not present.  */
7592
7593 static inline int
7594 get_AT_flag (dw_die_ref die, enum dwarf_attribute attr_kind)
7595 {
7596   dw_attr_ref a = get_AT (die, attr_kind);
7597
7598   return a ? AT_flag (a) : 0;
7599 }
7600
7601 /* Return the value of the unsigned attribute designated by ATTR_KIND, or 0
7602    if it is not present.  */
7603
7604 static inline unsigned
7605 get_AT_unsigned (dw_die_ref die, enum dwarf_attribute attr_kind)
7606 {
7607   dw_attr_ref a = get_AT (die, attr_kind);
7608
7609   return a ? AT_unsigned (a) : 0;
7610 }
7611
7612 static inline dw_die_ref
7613 get_AT_ref (dw_die_ref die, enum dwarf_attribute attr_kind)
7614 {
7615   dw_attr_ref a = get_AT (die, attr_kind);
7616
7617   return a ? AT_ref (a) : NULL;
7618 }
7619
7620 static inline struct dwarf_file_data *
7621 get_AT_file (dw_die_ref die, enum dwarf_attribute attr_kind)
7622 {
7623   dw_attr_ref a = get_AT (die, attr_kind);
7624
7625   return a ? AT_file (a) : NULL;
7626 }
7627
7628 /* Return TRUE if the language is C++.  */
7629
7630 static inline bool
7631 is_cxx (void)
7632 {
7633   unsigned int lang = get_AT_unsigned (comp_unit_die, DW_AT_language);
7634
7635   return lang == DW_LANG_C_plus_plus || lang == DW_LANG_ObjC_plus_plus;
7636 }
7637
7638 /* Return TRUE if the language is Fortran.  */
7639
7640 static inline bool
7641 is_fortran (void)
7642 {
7643   unsigned int lang = get_AT_unsigned (comp_unit_die, DW_AT_language);
7644
7645   return (lang == DW_LANG_Fortran77
7646           || lang == DW_LANG_Fortran90
7647           || lang == DW_LANG_Fortran95);
7648 }
7649
7650 /* Return TRUE if the language is Ada.  */
7651
7652 static inline bool
7653 is_ada (void)
7654 {
7655   unsigned int lang = get_AT_unsigned (comp_unit_die, DW_AT_language);
7656
7657   return lang == DW_LANG_Ada95 || lang == DW_LANG_Ada83;
7658 }
7659
7660 /* Remove the specified attribute if present.  */
7661
7662 static void
7663 remove_AT (dw_die_ref die, enum dwarf_attribute attr_kind)
7664 {
7665   dw_attr_ref a;
7666   unsigned ix;
7667
7668   if (! die)
7669     return;
7670
7671   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
7672     if (a->dw_attr == attr_kind)
7673       {
7674         if (AT_class (a) == dw_val_class_str)
7675           if (a->dw_attr_val.v.val_str->refcount)
7676             a->dw_attr_val.v.val_str->refcount--;
7677
7678         /* VEC_ordered_remove should help reduce the number of abbrevs
7679            that are needed.  */
7680         VEC_ordered_remove (dw_attr_node, die->die_attr, ix);
7681         return;
7682       }
7683 }
7684
7685 /* Remove CHILD from its parent.  PREV must have the property that
7686    PREV->DIE_SIB == CHILD.  Does not alter CHILD.  */
7687
7688 static void
7689 remove_child_with_prev (dw_die_ref child, dw_die_ref prev)
7690 {
7691   gcc_assert (child->die_parent == prev->die_parent);
7692   gcc_assert (prev->die_sib == child);
7693   if (prev == child)
7694     {
7695       gcc_assert (child->die_parent->die_child == child);
7696       prev = NULL;
7697     }
7698   else
7699     prev->die_sib = child->die_sib;
7700   if (child->die_parent->die_child == child)
7701     child->die_parent->die_child = prev;
7702 }
7703
7704 /* Replace OLD_CHILD with NEW_CHILD.  PREV must have the property that
7705    PREV->DIE_SIB == OLD_CHILD.  Does not alter OLD_CHILD.  */
7706
7707 static void
7708 replace_child (dw_die_ref old_child, dw_die_ref new_child, dw_die_ref prev)
7709 {
7710   dw_die_ref parent = old_child->die_parent;
7711
7712   gcc_assert (parent == prev->die_parent);
7713   gcc_assert (prev->die_sib == old_child);
7714
7715   new_child->die_parent = parent;
7716   if (prev == old_child)
7717     {
7718       gcc_assert (parent->die_child == old_child);
7719       new_child->die_sib = new_child;
7720     }
7721   else
7722     {
7723       prev->die_sib = new_child;
7724       new_child->die_sib = old_child->die_sib;
7725     }
7726   if (old_child->die_parent->die_child == old_child)
7727     old_child->die_parent->die_child = new_child;
7728 }
7729
7730 /* Move all children from OLD_PARENT to NEW_PARENT.  */
7731
7732 static void
7733 move_all_children (dw_die_ref old_parent, dw_die_ref new_parent)
7734 {
7735   dw_die_ref c;
7736   new_parent->die_child = old_parent->die_child;
7737   old_parent->die_child = NULL;
7738   FOR_EACH_CHILD (new_parent, c, c->die_parent = new_parent);
7739 }
7740
7741 /* Remove child DIE whose die_tag is TAG.  Do nothing if no child
7742    matches TAG.  */
7743
7744 static void
7745 remove_child_TAG (dw_die_ref die, enum dwarf_tag tag)
7746 {
7747   dw_die_ref c;
7748
7749   c = die->die_child;
7750   if (c) do {
7751     dw_die_ref prev = c;
7752     c = c->die_sib;
7753     while (c->die_tag == tag)
7754       {
7755         remove_child_with_prev (c, prev);
7756         /* Might have removed every child.  */
7757         if (c == c->die_sib)
7758           return;
7759         c = c->die_sib;
7760       }
7761   } while (c != die->die_child);
7762 }
7763
7764 /* Add a CHILD_DIE as the last child of DIE.  */
7765
7766 static void
7767 add_child_die (dw_die_ref die, dw_die_ref child_die)
7768 {
7769   /* FIXME this should probably be an assert.  */
7770   if (! die || ! child_die)
7771     return;
7772   gcc_assert (die != child_die);
7773
7774   child_die->die_parent = die;
7775   if (die->die_child)
7776     {
7777       child_die->die_sib = die->die_child->die_sib;
7778       die->die_child->die_sib = child_die;
7779     }
7780   else
7781     child_die->die_sib = child_die;
7782   die->die_child = child_die;
7783 }
7784
7785 /* Move CHILD, which must be a child of PARENT or the DIE for which PARENT
7786    is the specification, to the end of PARENT's list of children.
7787    This is done by removing and re-adding it.  */
7788
7789 static void
7790 splice_child_die (dw_die_ref parent, dw_die_ref child)
7791 {
7792   dw_die_ref p;
7793
7794   /* We want the declaration DIE from inside the class, not the
7795      specification DIE at toplevel.  */
7796   if (child->die_parent != parent)
7797     {
7798       dw_die_ref tmp = get_AT_ref (child, DW_AT_specification);
7799
7800       if (tmp)
7801         child = tmp;
7802     }
7803
7804   gcc_assert (child->die_parent == parent
7805               || (child->die_parent
7806                   == get_AT_ref (parent, DW_AT_specification)));
7807
7808   for (p = child->die_parent->die_child; ; p = p->die_sib)
7809     if (p->die_sib == child)
7810       {
7811         remove_child_with_prev (child, p);
7812         break;
7813       }
7814
7815   add_child_die (parent, child);
7816 }
7817
7818 /* Return a pointer to a newly created DIE node.  */
7819
7820 static inline dw_die_ref
7821 new_die (enum dwarf_tag tag_value, dw_die_ref parent_die, tree t)
7822 {
7823   dw_die_ref die = ggc_alloc_cleared_die_node ();
7824
7825   die->die_tag = tag_value;
7826
7827   if (parent_die != NULL)
7828     add_child_die (parent_die, die);
7829   else
7830     {
7831       limbo_die_node *limbo_node;
7832
7833       limbo_node = ggc_alloc_cleared_limbo_die_node ();
7834       limbo_node->die = die;
7835       limbo_node->created_for = t;
7836       limbo_node->next = limbo_die_list;
7837       limbo_die_list = limbo_node;
7838     }
7839
7840   return die;
7841 }
7842
7843 /* Return the DIE associated with the given type specifier.  */
7844
7845 static inline dw_die_ref
7846 lookup_type_die (tree type)
7847 {
7848   return TYPE_SYMTAB_DIE (type);
7849 }
7850
7851 /* Equate a DIE to a given type specifier.  */
7852
7853 static inline void
7854 equate_type_number_to_die (tree type, dw_die_ref type_die)
7855 {
7856   TYPE_SYMTAB_DIE (type) = type_die;
7857 }
7858
7859 /* Returns a hash value for X (which really is a die_struct).  */
7860
7861 static hashval_t
7862 decl_die_table_hash (const void *x)
7863 {
7864   return (hashval_t) ((const_dw_die_ref) x)->decl_id;
7865 }
7866
7867 /* Return nonzero if decl_id of die_struct X is the same as UID of decl *Y.  */
7868
7869 static int
7870 decl_die_table_eq (const void *x, const void *y)
7871 {
7872   return (((const_dw_die_ref) x)->decl_id == DECL_UID ((const_tree) y));
7873 }
7874
7875 /* Return the DIE associated with a given declaration.  */
7876
7877 static inline dw_die_ref
7878 lookup_decl_die (tree decl)
7879 {
7880   return (dw_die_ref) htab_find_with_hash (decl_die_table, decl, DECL_UID (decl));
7881 }
7882
7883 /* Returns a hash value for X (which really is a var_loc_list).  */
7884
7885 static hashval_t
7886 decl_loc_table_hash (const void *x)
7887 {
7888   return (hashval_t) ((const var_loc_list *) x)->decl_id;
7889 }
7890
7891 /* Return nonzero if decl_id of var_loc_list X is the same as
7892    UID of decl *Y.  */
7893
7894 static int
7895 decl_loc_table_eq (const void *x, const void *y)
7896 {
7897   return (((const var_loc_list *) x)->decl_id == DECL_UID ((const_tree) y));
7898 }
7899
7900 /* Return the var_loc list associated with a given declaration.  */
7901
7902 static inline var_loc_list *
7903 lookup_decl_loc (const_tree decl)
7904 {
7905   if (!decl_loc_table)
7906     return NULL;
7907   return (var_loc_list *)
7908     htab_find_with_hash (decl_loc_table, decl, DECL_UID (decl));
7909 }
7910
7911 /* Equate a DIE to a particular declaration.  */
7912
7913 static void
7914 equate_decl_number_to_die (tree decl, dw_die_ref decl_die)
7915 {
7916   unsigned int decl_id = DECL_UID (decl);
7917   void **slot;
7918
7919   slot = htab_find_slot_with_hash (decl_die_table, decl, decl_id, INSERT);
7920   *slot = decl_die;
7921   decl_die->decl_id = decl_id;
7922 }
7923
7924 /* Return how many bits covers PIECE EXPR_LIST.  */
7925
7926 static int
7927 decl_piece_bitsize (rtx piece)
7928 {
7929   int ret = (int) GET_MODE (piece);
7930   if (ret)
7931     return ret;
7932   gcc_assert (GET_CODE (XEXP (piece, 0)) == CONCAT
7933               && CONST_INT_P (XEXP (XEXP (piece, 0), 0)));
7934   return INTVAL (XEXP (XEXP (piece, 0), 0));
7935 }
7936
7937 /* Return pointer to the location of location note in PIECE EXPR_LIST.  */
7938
7939 static rtx *
7940 decl_piece_varloc_ptr (rtx piece)
7941 {
7942   if ((int) GET_MODE (piece))
7943     return &XEXP (piece, 0);
7944   else
7945     return &XEXP (XEXP (piece, 0), 1);
7946 }
7947
7948 /* Create an EXPR_LIST for location note LOC_NOTE covering BITSIZE bits.
7949    Next is the chain of following piece nodes.  */
7950
7951 static rtx
7952 decl_piece_node (rtx loc_note, HOST_WIDE_INT bitsize, rtx next)
7953 {
7954   if (bitsize <= (int) MAX_MACHINE_MODE)
7955     return alloc_EXPR_LIST (bitsize, loc_note, next);
7956   else
7957     return alloc_EXPR_LIST (0, gen_rtx_CONCAT (VOIDmode,
7958                                                GEN_INT (bitsize),
7959                                                loc_note), next);
7960 }
7961
7962 /* Return rtx that should be stored into loc field for
7963    LOC_NOTE and BITPOS/BITSIZE.  */
7964
7965 static rtx
7966 construct_piece_list (rtx loc_note, HOST_WIDE_INT bitpos,
7967                       HOST_WIDE_INT bitsize)
7968 {
7969   if (bitsize != -1)
7970     {
7971       loc_note = decl_piece_node (loc_note, bitsize, NULL_RTX);
7972       if (bitpos != 0)
7973         loc_note = decl_piece_node (NULL_RTX, bitpos, loc_note);
7974     }
7975   return loc_note;
7976 }
7977
7978 /* This function either modifies location piece list *DEST in
7979    place (if SRC and INNER is NULL), or copies location piece list
7980    *SRC to *DEST while modifying it.  Location BITPOS is modified
7981    to contain LOC_NOTE, any pieces overlapping it are removed resp.
7982    not copied and if needed some padding around it is added.
7983    When modifying in place, DEST should point to EXPR_LIST where
7984    earlier pieces cover PIECE_BITPOS bits, when copying SRC points
7985    to the start of the whole list and INNER points to the EXPR_LIST
7986    where earlier pieces cover PIECE_BITPOS bits.  */
7987
7988 static void
7989 adjust_piece_list (rtx *dest, rtx *src, rtx *inner,
7990                    HOST_WIDE_INT bitpos, HOST_WIDE_INT piece_bitpos,
7991                    HOST_WIDE_INT bitsize, rtx loc_note)
7992 {
7993   int diff;
7994   bool copy = inner != NULL;
7995
7996   if (copy)
7997     {
7998       /* First copy all nodes preceeding the current bitpos.  */
7999       while (src != inner)
8000         {
8001           *dest = decl_piece_node (*decl_piece_varloc_ptr (*src),
8002                                    decl_piece_bitsize (*src), NULL_RTX);
8003           dest = &XEXP (*dest, 1);
8004           src = &XEXP (*src, 1);
8005         }
8006     }
8007   /* Add padding if needed.  */
8008   if (bitpos != piece_bitpos)
8009     {
8010       *dest = decl_piece_node (NULL_RTX, bitpos - piece_bitpos,
8011                                copy ? NULL_RTX : *dest);
8012       dest = &XEXP (*dest, 1);
8013     }
8014   else if (*dest && decl_piece_bitsize (*dest) == bitsize)
8015     {
8016       gcc_assert (!copy);
8017       /* A piece with correct bitpos and bitsize already exist,
8018          just update the location for it and return.  */
8019       *decl_piece_varloc_ptr (*dest) = loc_note;
8020       return;
8021     }
8022   /* Add the piece that changed.  */
8023   *dest = decl_piece_node (loc_note, bitsize, copy ? NULL_RTX : *dest);
8024   dest = &XEXP (*dest, 1);
8025   /* Skip over pieces that overlap it.  */
8026   diff = bitpos - piece_bitpos + bitsize;
8027   if (!copy)
8028     src = dest;
8029   while (diff > 0 && *src)
8030     {
8031       rtx piece = *src;
8032       diff -= decl_piece_bitsize (piece);
8033       if (copy)
8034         src = &XEXP (piece, 1);
8035       else
8036         {
8037           *src = XEXP (piece, 1);
8038           free_EXPR_LIST_node (piece);
8039         }
8040     }
8041   /* Add padding if needed.  */
8042   if (diff < 0 && *src)
8043     {
8044       if (!copy)
8045         dest = src;
8046       *dest = decl_piece_node (NULL_RTX, -diff, copy ? NULL_RTX : *dest);
8047       dest = &XEXP (*dest, 1);
8048     }
8049   if (!copy)
8050     return;
8051   /* Finally copy all nodes following it.  */
8052   while (*src)
8053     {
8054       *dest = decl_piece_node (*decl_piece_varloc_ptr (*src),
8055                                decl_piece_bitsize (*src), NULL_RTX);
8056       dest = &XEXP (*dest, 1);
8057       src = &XEXP (*src, 1);
8058     }
8059 }
8060
8061 /* Add a variable location node to the linked list for DECL.  */
8062
8063 static struct var_loc_node *
8064 add_var_loc_to_decl (tree decl, rtx loc_note, const char *label)
8065 {
8066   unsigned int decl_id;
8067   var_loc_list *temp;
8068   void **slot;
8069   struct var_loc_node *loc = NULL;
8070   HOST_WIDE_INT bitsize = -1, bitpos = -1;
8071
8072   if (DECL_DEBUG_EXPR_IS_FROM (decl))
8073     {
8074       tree realdecl = DECL_DEBUG_EXPR (decl);
8075       if (realdecl && handled_component_p (realdecl))
8076         {
8077           HOST_WIDE_INT maxsize;
8078           tree innerdecl;
8079           innerdecl
8080             = get_ref_base_and_extent (realdecl, &bitpos, &bitsize, &maxsize);
8081           if (!DECL_P (innerdecl)
8082               || DECL_IGNORED_P (innerdecl)
8083               || TREE_STATIC (innerdecl)
8084               || bitsize <= 0
8085               || bitpos + bitsize > 256
8086               || bitsize != maxsize)
8087             return NULL;
8088           decl = innerdecl;
8089         }
8090     }
8091
8092   decl_id = DECL_UID (decl);
8093   slot = htab_find_slot_with_hash (decl_loc_table, decl, decl_id, INSERT);
8094   if (*slot == NULL)
8095     {
8096       temp = ggc_alloc_cleared_var_loc_list ();
8097       temp->decl_id = decl_id;
8098       *slot = temp;
8099     }
8100   else
8101     temp = (var_loc_list *) *slot;
8102
8103   if (temp->last)
8104     {
8105       struct var_loc_node *last = temp->last, *unused = NULL;
8106       rtx *piece_loc = NULL, last_loc_note;
8107       int piece_bitpos = 0;
8108       if (last->next)
8109         {
8110           last = last->next;
8111           gcc_assert (last->next == NULL);
8112         }
8113       if (bitsize != -1 && GET_CODE (last->loc) == EXPR_LIST)
8114         {
8115           piece_loc = &last->loc;
8116           do
8117             {
8118               int cur_bitsize = decl_piece_bitsize (*piece_loc);
8119               if (piece_bitpos + cur_bitsize > bitpos)
8120                 break;
8121               piece_bitpos += cur_bitsize;
8122               piece_loc = &XEXP (*piece_loc, 1);
8123             }
8124           while (*piece_loc);
8125         }
8126       /* TEMP->LAST here is either pointer to the last but one or
8127          last element in the chained list, LAST is pointer to the
8128          last element.  */
8129       if (label && strcmp (last->label, label) == 0)
8130         {
8131           /* For SRA optimized variables if there weren't any real
8132              insns since last note, just modify the last node.  */
8133           if (piece_loc != NULL)
8134             {
8135               adjust_piece_list (piece_loc, NULL, NULL,
8136                                  bitpos, piece_bitpos, bitsize, loc_note);
8137               return NULL;
8138             }
8139           /* If the last note doesn't cover any instructions, remove it.  */
8140           if (temp->last != last)
8141             {
8142               temp->last->next = NULL;
8143               unused = last;
8144               last = temp->last;
8145               gcc_assert (strcmp (last->label, label) != 0);
8146             }
8147           else
8148             {
8149               gcc_assert (temp->first == temp->last);
8150               memset (temp->last, '\0', sizeof (*temp->last));
8151               temp->last->loc = construct_piece_list (loc_note, bitpos, bitsize);
8152               return temp->last;
8153             }
8154         }
8155       if (bitsize == -1 && NOTE_P (last->loc))
8156         last_loc_note = last->loc;
8157       else if (piece_loc != NULL
8158                && *piece_loc != NULL_RTX
8159                && piece_bitpos == bitpos
8160                && decl_piece_bitsize (*piece_loc) == bitsize)
8161         last_loc_note = *decl_piece_varloc_ptr (*piece_loc);
8162       else
8163         last_loc_note = NULL_RTX;
8164       /* If the current location is the same as the end of the list,
8165          and either both or neither of the locations is uninitialized,
8166          we have nothing to do.  */
8167       if (last_loc_note == NULL_RTX
8168           || (!rtx_equal_p (NOTE_VAR_LOCATION_LOC (last_loc_note),
8169                             NOTE_VAR_LOCATION_LOC (loc_note)))
8170           || ((NOTE_VAR_LOCATION_STATUS (last_loc_note)
8171                != NOTE_VAR_LOCATION_STATUS (loc_note))
8172               && ((NOTE_VAR_LOCATION_STATUS (last_loc_note)
8173                    == VAR_INIT_STATUS_UNINITIALIZED)
8174                   || (NOTE_VAR_LOCATION_STATUS (loc_note)
8175                       == VAR_INIT_STATUS_UNINITIALIZED))))
8176         {
8177           /* Add LOC to the end of list and update LAST.  If the last
8178              element of the list has been removed above, reuse its
8179              memory for the new node, otherwise allocate a new one.  */
8180           if (unused)
8181             {
8182               loc = unused;
8183               memset (loc, '\0', sizeof (*loc));
8184             }
8185           else
8186             loc = ggc_alloc_cleared_var_loc_node ();
8187           if (bitsize == -1 || piece_loc == NULL)
8188             loc->loc = construct_piece_list (loc_note, bitpos, bitsize);
8189           else
8190             adjust_piece_list (&loc->loc, &last->loc, piece_loc,
8191                                bitpos, piece_bitpos, bitsize, loc_note);
8192           last->next = loc;
8193           /* Ensure TEMP->LAST will point either to the new last but one
8194              element of the chain, or to the last element in it.  */
8195           if (last != temp->last)
8196             temp->last = last;
8197         }
8198       else if (unused)
8199         ggc_free (unused);
8200     }
8201   else
8202     {
8203       loc = ggc_alloc_cleared_var_loc_node ();
8204       temp->first = loc;
8205       temp->last = loc;
8206       loc->loc = construct_piece_list (loc_note, bitpos, bitsize);
8207     }
8208   return loc;
8209 }
8210 \f
8211 /* Keep track of the number of spaces used to indent the
8212    output of the debugging routines that print the structure of
8213    the DIE internal representation.  */
8214 static int print_indent;
8215
8216 /* Indent the line the number of spaces given by print_indent.  */
8217
8218 static inline void
8219 print_spaces (FILE *outfile)
8220 {
8221   fprintf (outfile, "%*s", print_indent, "");
8222 }
8223
8224 /* Print a type signature in hex.  */
8225
8226 static inline void
8227 print_signature (FILE *outfile, char *sig)
8228 {
8229   int i;
8230
8231   for (i = 0; i < DWARF_TYPE_SIGNATURE_SIZE; i++)
8232     fprintf (outfile, "%02x", sig[i] & 0xff);
8233 }
8234
8235 /* Print the information associated with a given DIE, and its children.
8236    This routine is a debugging aid only.  */
8237
8238 static void
8239 print_die (dw_die_ref die, FILE *outfile)
8240 {
8241   dw_attr_ref a;
8242   dw_die_ref c;
8243   unsigned ix;
8244
8245   print_spaces (outfile);
8246   fprintf (outfile, "DIE %4ld: %s\n",
8247            die->die_offset, dwarf_tag_name (die->die_tag));
8248   print_spaces (outfile);
8249   fprintf (outfile, "  abbrev id: %lu", die->die_abbrev);
8250   fprintf (outfile, " offset: %ld\n", die->die_offset);
8251   if (dwarf_version >= 4 && die->die_id.die_type_node)
8252     {
8253       print_spaces (outfile);
8254       fprintf (outfile, "  signature: ");
8255       print_signature (outfile, die->die_id.die_type_node->signature);
8256       fprintf (outfile, "\n");
8257     }
8258
8259   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
8260     {
8261       print_spaces (outfile);
8262       fprintf (outfile, "  %s: ", dwarf_attr_name (a->dw_attr));
8263
8264       switch (AT_class (a))
8265         {
8266         case dw_val_class_addr:
8267           fprintf (outfile, "address");
8268           break;
8269         case dw_val_class_offset:
8270           fprintf (outfile, "offset");
8271           break;
8272         case dw_val_class_loc:
8273           fprintf (outfile, "location descriptor");
8274           break;
8275         case dw_val_class_loc_list:
8276           fprintf (outfile, "location list -> label:%s",
8277                    AT_loc_list (a)->ll_symbol);
8278           break;
8279         case dw_val_class_range_list:
8280           fprintf (outfile, "range list");
8281           break;
8282         case dw_val_class_const:
8283           fprintf (outfile, HOST_WIDE_INT_PRINT_DEC, AT_int (a));
8284           break;
8285         case dw_val_class_unsigned_const:
8286           fprintf (outfile, HOST_WIDE_INT_PRINT_UNSIGNED, AT_unsigned (a));
8287           break;
8288         case dw_val_class_const_double:
8289           fprintf (outfile, "constant ("HOST_WIDE_INT_PRINT_DEC","\
8290                             HOST_WIDE_INT_PRINT_UNSIGNED")",
8291                    a->dw_attr_val.v.val_double.high,
8292                    a->dw_attr_val.v.val_double.low);
8293           break;
8294         case dw_val_class_vec:
8295           fprintf (outfile, "floating-point or vector constant");
8296           break;
8297         case dw_val_class_flag:
8298           fprintf (outfile, "%u", AT_flag (a));
8299           break;
8300         case dw_val_class_die_ref:
8301           if (AT_ref (a) != NULL)
8302             {
8303               if (dwarf_version >= 4 && AT_ref (a)->die_id.die_type_node)
8304                 {
8305                   fprintf (outfile, "die -> signature: ");
8306                   print_signature (outfile,
8307                                    AT_ref (a)->die_id.die_type_node->signature);
8308                 }
8309               else if (dwarf_version < 4 && AT_ref (a)->die_id.die_symbol)
8310                 fprintf (outfile, "die -> label: %s",
8311                          AT_ref (a)->die_id.die_symbol);
8312               else
8313                 fprintf (outfile, "die -> %ld", AT_ref (a)->die_offset);
8314             }
8315           else
8316             fprintf (outfile, "die -> <null>");
8317           break;
8318         case dw_val_class_vms_delta:
8319           fprintf (outfile, "delta: @slotcount(%s-%s)",
8320                    AT_vms_delta2 (a), AT_vms_delta1 (a));
8321           break;
8322         case dw_val_class_lbl_id:
8323         case dw_val_class_lineptr:
8324         case dw_val_class_macptr:
8325           fprintf (outfile, "label: %s", AT_lbl (a));
8326           break;
8327         case dw_val_class_str:
8328           if (AT_string (a) != NULL)
8329             fprintf (outfile, "\"%s\"", AT_string (a));
8330           else
8331             fprintf (outfile, "<null>");
8332           break;
8333         case dw_val_class_file:
8334           fprintf (outfile, "\"%s\" (%d)", AT_file (a)->filename,
8335                    AT_file (a)->emitted_number);
8336           break;
8337         case dw_val_class_data8:
8338           {
8339             int i;
8340
8341             for (i = 0; i < 8; i++)
8342               fprintf (outfile, "%02x", a->dw_attr_val.v.val_data8[i]);
8343             break;
8344           }
8345         default:
8346           break;
8347         }
8348
8349       fprintf (outfile, "\n");
8350     }
8351
8352   if (die->die_child != NULL)
8353     {
8354       print_indent += 4;
8355       FOR_EACH_CHILD (die, c, print_die (c, outfile));
8356       print_indent -= 4;
8357     }
8358   if (print_indent == 0)
8359     fprintf (outfile, "\n");
8360 }
8361
8362 /* Print the contents of the source code line number correspondence table.
8363    This routine is a debugging aid only.  */
8364
8365 static void
8366 print_dwarf_line_table (FILE *outfile)
8367 {
8368   unsigned i;
8369   dw_line_info_ref line_info;
8370
8371   fprintf (outfile, "\n\nDWARF source line information\n");
8372   for (i = 1; i < line_info_table_in_use; i++)
8373     {
8374       line_info = &line_info_table[i];
8375       fprintf (outfile, "%5d: %4ld %6ld\n", i,
8376                line_info->dw_file_num,
8377                line_info->dw_line_num);
8378     }
8379
8380   fprintf (outfile, "\n\n");
8381 }
8382
8383 /* Print the information collected for a given DIE.  */
8384
8385 DEBUG_FUNCTION void
8386 debug_dwarf_die (dw_die_ref die)
8387 {
8388   print_die (die, stderr);
8389 }
8390
8391 /* Print all DWARF information collected for the compilation unit.
8392    This routine is a debugging aid only.  */
8393
8394 DEBUG_FUNCTION void
8395 debug_dwarf (void)
8396 {
8397   print_indent = 0;
8398   print_die (comp_unit_die, stderr);
8399   if (! DWARF2_ASM_LINE_DEBUG_INFO)
8400     print_dwarf_line_table (stderr);
8401 }
8402 \f
8403 /* Start a new compilation unit DIE for an include file.  OLD_UNIT is the CU
8404    for the enclosing include file, if any.  BINCL_DIE is the DW_TAG_GNU_BINCL
8405    DIE that marks the start of the DIEs for this include file.  */
8406
8407 static dw_die_ref
8408 push_new_compile_unit (dw_die_ref old_unit, dw_die_ref bincl_die)
8409 {
8410   const char *filename = get_AT_string (bincl_die, DW_AT_name);
8411   dw_die_ref new_unit = gen_compile_unit_die (filename);
8412
8413   new_unit->die_sib = old_unit;
8414   return new_unit;
8415 }
8416
8417 /* Close an include-file CU and reopen the enclosing one.  */
8418
8419 static dw_die_ref
8420 pop_compile_unit (dw_die_ref old_unit)
8421 {
8422   dw_die_ref new_unit = old_unit->die_sib;
8423
8424   old_unit->die_sib = NULL;
8425   return new_unit;
8426 }
8427
8428 #define CHECKSUM(FOO) md5_process_bytes (&(FOO), sizeof (FOO), ctx)
8429 #define CHECKSUM_STRING(FOO) md5_process_bytes ((FOO), strlen (FOO), ctx)
8430
8431 /* Calculate the checksum of a location expression.  */
8432
8433 static inline void
8434 loc_checksum (dw_loc_descr_ref loc, struct md5_ctx *ctx)
8435 {
8436   int tem;
8437
8438   tem = (loc->dtprel << 8) | ((unsigned int) loc->dw_loc_opc);
8439   CHECKSUM (tem);
8440   CHECKSUM (loc->dw_loc_oprnd1);
8441   CHECKSUM (loc->dw_loc_oprnd2);
8442 }
8443
8444 /* Calculate the checksum of an attribute.  */
8445
8446 static void
8447 attr_checksum (dw_attr_ref at, struct md5_ctx *ctx, int *mark)
8448 {
8449   dw_loc_descr_ref loc;
8450   rtx r;
8451
8452   CHECKSUM (at->dw_attr);
8453
8454   /* We don't care that this was compiled with a different compiler
8455      snapshot; if the output is the same, that's what matters.  */
8456   if (at->dw_attr == DW_AT_producer)
8457     return;
8458
8459   switch (AT_class (at))
8460     {
8461     case dw_val_class_const:
8462       CHECKSUM (at->dw_attr_val.v.val_int);
8463       break;
8464     case dw_val_class_unsigned_const:
8465       CHECKSUM (at->dw_attr_val.v.val_unsigned);
8466       break;
8467     case dw_val_class_const_double:
8468       CHECKSUM (at->dw_attr_val.v.val_double);
8469       break;
8470     case dw_val_class_vec:
8471       CHECKSUM (at->dw_attr_val.v.val_vec);
8472       break;
8473     case dw_val_class_flag:
8474       CHECKSUM (at->dw_attr_val.v.val_flag);
8475       break;
8476     case dw_val_class_str:
8477       CHECKSUM_STRING (AT_string (at));
8478       break;
8479
8480     case dw_val_class_addr:
8481       r = AT_addr (at);
8482       gcc_assert (GET_CODE (r) == SYMBOL_REF);
8483       CHECKSUM_STRING (XSTR (r, 0));
8484       break;
8485
8486     case dw_val_class_offset:
8487       CHECKSUM (at->dw_attr_val.v.val_offset);
8488       break;
8489
8490     case dw_val_class_loc:
8491       for (loc = AT_loc (at); loc; loc = loc->dw_loc_next)
8492         loc_checksum (loc, ctx);
8493       break;
8494
8495     case dw_val_class_die_ref:
8496       die_checksum (AT_ref (at), ctx, mark);
8497       break;
8498
8499     case dw_val_class_fde_ref:
8500     case dw_val_class_vms_delta:
8501     case dw_val_class_lbl_id:
8502     case dw_val_class_lineptr:
8503     case dw_val_class_macptr:
8504       break;
8505
8506     case dw_val_class_file:
8507       CHECKSUM_STRING (AT_file (at)->filename);
8508       break;
8509
8510     case dw_val_class_data8:
8511       CHECKSUM (at->dw_attr_val.v.val_data8);
8512       break;
8513
8514     default:
8515       break;
8516     }
8517 }
8518
8519 /* Calculate the checksum of a DIE.  */
8520
8521 static void
8522 die_checksum (dw_die_ref die, struct md5_ctx *ctx, int *mark)
8523 {
8524   dw_die_ref c;
8525   dw_attr_ref a;
8526   unsigned ix;
8527
8528   /* To avoid infinite recursion.  */
8529   if (die->die_mark)
8530     {
8531       CHECKSUM (die->die_mark);
8532       return;
8533     }
8534   die->die_mark = ++(*mark);
8535
8536   CHECKSUM (die->die_tag);
8537
8538   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
8539     attr_checksum (a, ctx, mark);
8540
8541   FOR_EACH_CHILD (die, c, die_checksum (c, ctx, mark));
8542 }
8543
8544 #undef CHECKSUM
8545 #undef CHECKSUM_STRING
8546
8547 /* For DWARF-4 types, include the trailing NULL when checksumming strings.  */
8548 #define CHECKSUM(FOO) md5_process_bytes (&(FOO), sizeof (FOO), ctx)
8549 #define CHECKSUM_STRING(FOO) md5_process_bytes ((FOO), strlen (FOO) + 1, ctx)
8550 #define CHECKSUM_SLEB128(FOO) checksum_sleb128 ((FOO), ctx)
8551 #define CHECKSUM_ULEB128(FOO) checksum_uleb128 ((FOO), ctx)
8552 #define CHECKSUM_ATTR(FOO) \
8553   if (FOO) attr_checksum_ordered (die->die_tag, (FOO), ctx, mark)
8554
8555 /* Calculate the checksum of a number in signed LEB128 format.  */
8556
8557 static void
8558 checksum_sleb128 (HOST_WIDE_INT value, struct md5_ctx *ctx)
8559 {
8560   unsigned char byte;
8561   bool more;
8562
8563   while (1)
8564     {
8565       byte = (value & 0x7f);
8566       value >>= 7;
8567       more = !((value == 0 && (byte & 0x40) == 0)
8568                 || (value == -1 && (byte & 0x40) != 0));
8569       if (more)
8570         byte |= 0x80;
8571       CHECKSUM (byte);
8572       if (!more)
8573         break;
8574     }
8575 }
8576
8577 /* Calculate the checksum of a number in unsigned LEB128 format.  */
8578
8579 static void
8580 checksum_uleb128 (unsigned HOST_WIDE_INT value, struct md5_ctx *ctx)
8581 {
8582   while (1)
8583     {
8584       unsigned char byte = (value & 0x7f);
8585       value >>= 7;
8586       if (value != 0)
8587         /* More bytes to follow.  */
8588         byte |= 0x80;
8589       CHECKSUM (byte);
8590       if (value == 0)
8591         break;
8592     }
8593 }
8594
8595 /* Checksum the context of the DIE.  This adds the names of any
8596    surrounding namespaces or structures to the checksum.  */
8597
8598 static void
8599 checksum_die_context (dw_die_ref die, struct md5_ctx *ctx)
8600 {
8601   const char *name;
8602   dw_die_ref spec;
8603   int tag = die->die_tag;
8604
8605   if (tag != DW_TAG_namespace
8606       && tag != DW_TAG_structure_type
8607       && tag != DW_TAG_class_type)
8608     return;
8609
8610   name = get_AT_string (die, DW_AT_name);
8611
8612   spec = get_AT_ref (die, DW_AT_specification);
8613   if (spec != NULL)
8614     die = spec;
8615
8616   if (die->die_parent != NULL)
8617     checksum_die_context (die->die_parent, ctx);
8618
8619   CHECKSUM_ULEB128 ('C');
8620   CHECKSUM_ULEB128 (tag);
8621   if (name != NULL)
8622     CHECKSUM_STRING (name);
8623 }
8624
8625 /* Calculate the checksum of a location expression.  */
8626
8627 static inline void
8628 loc_checksum_ordered (dw_loc_descr_ref loc, struct md5_ctx *ctx)
8629 {
8630   /* Special case for lone DW_OP_plus_uconst: checksum as if the location
8631      were emitted as a DW_FORM_sdata instead of a location expression.  */
8632   if (loc->dw_loc_opc == DW_OP_plus_uconst && loc->dw_loc_next == NULL)
8633     {
8634       CHECKSUM_ULEB128 (DW_FORM_sdata);
8635       CHECKSUM_SLEB128 ((HOST_WIDE_INT) loc->dw_loc_oprnd1.v.val_unsigned);
8636       return;
8637     }
8638
8639   /* Otherwise, just checksum the raw location expression.  */
8640   while (loc != NULL)
8641     {
8642       CHECKSUM_ULEB128 (loc->dw_loc_opc);
8643       CHECKSUM (loc->dw_loc_oprnd1);
8644       CHECKSUM (loc->dw_loc_oprnd2);
8645       loc = loc->dw_loc_next;
8646     }
8647 }
8648
8649 /* Calculate the checksum of an attribute.  */
8650
8651 static void
8652 attr_checksum_ordered (enum dwarf_tag tag, dw_attr_ref at,
8653                        struct md5_ctx *ctx, int *mark)
8654 {
8655   dw_loc_descr_ref loc;
8656   rtx r;
8657
8658   if (AT_class (at) == dw_val_class_die_ref)
8659     {
8660       dw_die_ref target_die = AT_ref (at);
8661
8662       /* For pointer and reference types, we checksum only the (qualified)
8663          name of the target type (if there is a name).  For friend entries,
8664          we checksum only the (qualified) name of the target type or function.
8665          This allows the checksum to remain the same whether the target type
8666          is complete or not.  */
8667       if ((at->dw_attr == DW_AT_type
8668            && (tag == DW_TAG_pointer_type
8669                || tag == DW_TAG_reference_type
8670                || tag == DW_TAG_rvalue_reference_type
8671                || tag == DW_TAG_ptr_to_member_type))
8672           || (at->dw_attr == DW_AT_friend
8673               && tag == DW_TAG_friend))
8674         {
8675           dw_attr_ref name_attr = get_AT (target_die, DW_AT_name);
8676
8677           if (name_attr != NULL)
8678             {
8679               dw_die_ref decl = get_AT_ref (target_die, DW_AT_specification);
8680
8681               if (decl == NULL)
8682                 decl = target_die;
8683               CHECKSUM_ULEB128 ('N');
8684               CHECKSUM_ULEB128 (at->dw_attr);
8685               if (decl->die_parent != NULL)
8686                 checksum_die_context (decl->die_parent, ctx);
8687               CHECKSUM_ULEB128 ('E');
8688               CHECKSUM_STRING (AT_string (name_attr));
8689               return;
8690             }
8691         }
8692
8693       /* For all other references to another DIE, we check to see if the
8694          target DIE has already been visited.  If it has, we emit a
8695          backward reference; if not, we descend recursively.  */
8696       if (target_die->die_mark > 0)
8697         {
8698           CHECKSUM_ULEB128 ('R');
8699           CHECKSUM_ULEB128 (at->dw_attr);
8700           CHECKSUM_ULEB128 (target_die->die_mark);
8701         }
8702       else
8703         {
8704           dw_die_ref decl = get_AT_ref (target_die, DW_AT_specification);
8705
8706           if (decl == NULL)
8707             decl = target_die;
8708           target_die->die_mark = ++(*mark);
8709           CHECKSUM_ULEB128 ('T');
8710           CHECKSUM_ULEB128 (at->dw_attr);
8711           if (decl->die_parent != NULL)
8712             checksum_die_context (decl->die_parent, ctx);
8713           die_checksum_ordered (target_die, ctx, mark);
8714         }
8715       return;
8716     }
8717
8718   CHECKSUM_ULEB128 ('A');
8719   CHECKSUM_ULEB128 (at->dw_attr);
8720
8721   switch (AT_class (at))
8722     {
8723     case dw_val_class_const:
8724       CHECKSUM_ULEB128 (DW_FORM_sdata);
8725       CHECKSUM_SLEB128 (at->dw_attr_val.v.val_int);
8726       break;
8727
8728     case dw_val_class_unsigned_const:
8729       CHECKSUM_ULEB128 (DW_FORM_sdata);
8730       CHECKSUM_SLEB128 ((int) at->dw_attr_val.v.val_unsigned);
8731       break;
8732
8733     case dw_val_class_const_double:
8734       CHECKSUM_ULEB128 (DW_FORM_block);
8735       CHECKSUM_ULEB128 (sizeof (at->dw_attr_val.v.val_double));
8736       CHECKSUM (at->dw_attr_val.v.val_double);
8737       break;
8738
8739     case dw_val_class_vec:
8740       CHECKSUM_ULEB128 (DW_FORM_block);
8741       CHECKSUM_ULEB128 (sizeof (at->dw_attr_val.v.val_vec));
8742       CHECKSUM (at->dw_attr_val.v.val_vec);
8743       break;
8744
8745     case dw_val_class_flag:
8746       CHECKSUM_ULEB128 (DW_FORM_flag);
8747       CHECKSUM_ULEB128 (at->dw_attr_val.v.val_flag ? 1 : 0);
8748       break;
8749
8750     case dw_val_class_str:
8751       CHECKSUM_ULEB128 (DW_FORM_string);
8752       CHECKSUM_STRING (AT_string (at));
8753       break;
8754
8755     case dw_val_class_addr:
8756       r = AT_addr (at);
8757       gcc_assert (GET_CODE (r) == SYMBOL_REF);
8758       CHECKSUM_ULEB128 (DW_FORM_string);
8759       CHECKSUM_STRING (XSTR (r, 0));
8760       break;
8761
8762     case dw_val_class_offset:
8763       CHECKSUM_ULEB128 (DW_FORM_sdata);
8764       CHECKSUM_ULEB128 (at->dw_attr_val.v.val_offset);
8765       break;
8766
8767     case dw_val_class_loc:
8768       for (loc = AT_loc (at); loc; loc = loc->dw_loc_next)
8769         loc_checksum_ordered (loc, ctx);
8770       break;
8771
8772     case dw_val_class_fde_ref:
8773     case dw_val_class_lbl_id:
8774     case dw_val_class_lineptr:
8775     case dw_val_class_macptr:
8776       break;
8777
8778     case dw_val_class_file:
8779       CHECKSUM_ULEB128 (DW_FORM_string);
8780       CHECKSUM_STRING (AT_file (at)->filename);
8781       break;
8782
8783     case dw_val_class_data8:
8784       CHECKSUM (at->dw_attr_val.v.val_data8);
8785       break;
8786
8787     default:
8788       break;
8789     }
8790 }
8791
8792 struct checksum_attributes
8793 {
8794   dw_attr_ref at_name;
8795   dw_attr_ref at_type;
8796   dw_attr_ref at_friend;
8797   dw_attr_ref at_accessibility;
8798   dw_attr_ref at_address_class;
8799   dw_attr_ref at_allocated;
8800   dw_attr_ref at_artificial;
8801   dw_attr_ref at_associated;
8802   dw_attr_ref at_binary_scale;
8803   dw_attr_ref at_bit_offset;
8804   dw_attr_ref at_bit_size;
8805   dw_attr_ref at_bit_stride;
8806   dw_attr_ref at_byte_size;
8807   dw_attr_ref at_byte_stride;
8808   dw_attr_ref at_const_value;
8809   dw_attr_ref at_containing_type;
8810   dw_attr_ref at_count;
8811   dw_attr_ref at_data_location;
8812   dw_attr_ref at_data_member_location;
8813   dw_attr_ref at_decimal_scale;
8814   dw_attr_ref at_decimal_sign;
8815   dw_attr_ref at_default_value;
8816   dw_attr_ref at_digit_count;
8817   dw_attr_ref at_discr;
8818   dw_attr_ref at_discr_list;
8819   dw_attr_ref at_discr_value;
8820   dw_attr_ref at_encoding;
8821   dw_attr_ref at_endianity;
8822   dw_attr_ref at_explicit;
8823   dw_attr_ref at_is_optional;
8824   dw_attr_ref at_location;
8825   dw_attr_ref at_lower_bound;
8826   dw_attr_ref at_mutable;
8827   dw_attr_ref at_ordering;
8828   dw_attr_ref at_picture_string;
8829   dw_attr_ref at_prototyped;
8830   dw_attr_ref at_small;
8831   dw_attr_ref at_segment;
8832   dw_attr_ref at_string_length;
8833   dw_attr_ref at_threads_scaled;
8834   dw_attr_ref at_upper_bound;
8835   dw_attr_ref at_use_location;
8836   dw_attr_ref at_use_UTF8;
8837   dw_attr_ref at_variable_parameter;
8838   dw_attr_ref at_virtuality;
8839   dw_attr_ref at_visibility;
8840   dw_attr_ref at_vtable_elem_location;
8841 };
8842
8843 /* Collect the attributes that we will want to use for the checksum.  */
8844
8845 static void
8846 collect_checksum_attributes (struct checksum_attributes *attrs, dw_die_ref die)
8847 {
8848   dw_attr_ref a;
8849   unsigned ix;
8850
8851   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
8852     {
8853       switch (a->dw_attr)
8854         {
8855         case DW_AT_name:
8856           attrs->at_name = a;
8857           break;
8858         case DW_AT_type:
8859           attrs->at_type = a;
8860           break;
8861         case DW_AT_friend:
8862           attrs->at_friend = a;
8863           break;
8864         case DW_AT_accessibility:
8865           attrs->at_accessibility = a;
8866           break;
8867         case DW_AT_address_class:
8868           attrs->at_address_class = a;
8869           break;
8870         case DW_AT_allocated:
8871           attrs->at_allocated = a;
8872           break;
8873         case DW_AT_artificial:
8874           attrs->at_artificial = a;
8875           break;
8876         case DW_AT_associated:
8877           attrs->at_associated = a;
8878           break;
8879         case DW_AT_binary_scale:
8880           attrs->at_binary_scale = a;
8881           break;
8882         case DW_AT_bit_offset:
8883           attrs->at_bit_offset = a;
8884           break;
8885         case DW_AT_bit_size:
8886           attrs->at_bit_size = a;
8887           break;
8888         case DW_AT_bit_stride:
8889           attrs->at_bit_stride = a;
8890           break;
8891         case DW_AT_byte_size:
8892           attrs->at_byte_size = a;
8893           break;
8894         case DW_AT_byte_stride:
8895           attrs->at_byte_stride = a;
8896           break;
8897         case DW_AT_const_value:
8898           attrs->at_const_value = a;
8899           break;
8900         case DW_AT_containing_type:
8901           attrs->at_containing_type = a;
8902           break;
8903         case DW_AT_count:
8904           attrs->at_count = a;
8905           break;
8906         case DW_AT_data_location:
8907           attrs->at_data_location = a;
8908           break;
8909         case DW_AT_data_member_location:
8910           attrs->at_data_member_location = a;
8911           break;
8912         case DW_AT_decimal_scale:
8913           attrs->at_decimal_scale = a;
8914           break;
8915         case DW_AT_decimal_sign:
8916           attrs->at_decimal_sign = a;
8917           break;
8918         case DW_AT_default_value:
8919           attrs->at_default_value = a;
8920           break;
8921         case DW_AT_digit_count:
8922           attrs->at_digit_count = a;
8923           break;
8924         case DW_AT_discr:
8925           attrs->at_discr = a;
8926           break;
8927         case DW_AT_discr_list:
8928           attrs->at_discr_list = a;
8929           break;
8930         case DW_AT_discr_value:
8931           attrs->at_discr_value = a;
8932           break;
8933         case DW_AT_encoding:
8934           attrs->at_encoding = a;
8935           break;
8936         case DW_AT_endianity:
8937           attrs->at_endianity = a;
8938           break;
8939         case DW_AT_explicit:
8940           attrs->at_explicit = a;
8941           break;
8942         case DW_AT_is_optional:
8943           attrs->at_is_optional = a;
8944           break;
8945         case DW_AT_location:
8946           attrs->at_location = a;
8947           break;
8948         case DW_AT_lower_bound:
8949           attrs->at_lower_bound = a;
8950           break;
8951         case DW_AT_mutable:
8952           attrs->at_mutable = a;
8953           break;
8954         case DW_AT_ordering:
8955           attrs->at_ordering = a;
8956           break;
8957         case DW_AT_picture_string:
8958           attrs->at_picture_string = a;
8959           break;
8960         case DW_AT_prototyped:
8961           attrs->at_prototyped = a;
8962           break;
8963         case DW_AT_small:
8964           attrs->at_small = a;
8965           break;
8966         case DW_AT_segment:
8967           attrs->at_segment = a;
8968           break;
8969         case DW_AT_string_length:
8970           attrs->at_string_length = a;
8971           break;
8972         case DW_AT_threads_scaled:
8973           attrs->at_threads_scaled = a;
8974           break;
8975         case DW_AT_upper_bound:
8976           attrs->at_upper_bound = a;
8977           break;
8978         case DW_AT_use_location:
8979           attrs->at_use_location = a;
8980           break;
8981         case DW_AT_use_UTF8:
8982           attrs->at_use_UTF8 = a;
8983           break;
8984         case DW_AT_variable_parameter:
8985           attrs->at_variable_parameter = a;
8986           break;
8987         case DW_AT_virtuality:
8988           attrs->at_virtuality = a;
8989           break;
8990         case DW_AT_visibility:
8991           attrs->at_visibility = a;
8992           break;
8993         case DW_AT_vtable_elem_location:
8994           attrs->at_vtable_elem_location = a;
8995           break;
8996         default:
8997           break;
8998         }
8999     }
9000 }
9001
9002 /* Calculate the checksum of a DIE, using an ordered subset of attributes.  */
9003
9004 static void
9005 die_checksum_ordered (dw_die_ref die, struct md5_ctx *ctx, int *mark)
9006 {
9007   dw_die_ref c;
9008   dw_die_ref decl;
9009   struct checksum_attributes attrs;
9010
9011   CHECKSUM_ULEB128 ('D');
9012   CHECKSUM_ULEB128 (die->die_tag);
9013
9014   memset (&attrs, 0, sizeof (attrs));
9015
9016   decl = get_AT_ref (die, DW_AT_specification);
9017   if (decl != NULL)
9018     collect_checksum_attributes (&attrs, decl);
9019   collect_checksum_attributes (&attrs, die);
9020
9021   CHECKSUM_ATTR (attrs.at_name);
9022   CHECKSUM_ATTR (attrs.at_accessibility);
9023   CHECKSUM_ATTR (attrs.at_address_class);
9024   CHECKSUM_ATTR (attrs.at_allocated);
9025   CHECKSUM_ATTR (attrs.at_artificial);
9026   CHECKSUM_ATTR (attrs.at_associated);
9027   CHECKSUM_ATTR (attrs.at_binary_scale);
9028   CHECKSUM_ATTR (attrs.at_bit_offset);
9029   CHECKSUM_ATTR (attrs.at_bit_size);
9030   CHECKSUM_ATTR (attrs.at_bit_stride);
9031   CHECKSUM_ATTR (attrs.at_byte_size);
9032   CHECKSUM_ATTR (attrs.at_byte_stride);
9033   CHECKSUM_ATTR (attrs.at_const_value);
9034   CHECKSUM_ATTR (attrs.at_containing_type);
9035   CHECKSUM_ATTR (attrs.at_count);
9036   CHECKSUM_ATTR (attrs.at_data_location);
9037   CHECKSUM_ATTR (attrs.at_data_member_location);
9038   CHECKSUM_ATTR (attrs.at_decimal_scale);
9039   CHECKSUM_ATTR (attrs.at_decimal_sign);
9040   CHECKSUM_ATTR (attrs.at_default_value);
9041   CHECKSUM_ATTR (attrs.at_digit_count);
9042   CHECKSUM_ATTR (attrs.at_discr);
9043   CHECKSUM_ATTR (attrs.at_discr_list);
9044   CHECKSUM_ATTR (attrs.at_discr_value);
9045   CHECKSUM_ATTR (attrs.at_encoding);
9046   CHECKSUM_ATTR (attrs.at_endianity);
9047   CHECKSUM_ATTR (attrs.at_explicit);
9048   CHECKSUM_ATTR (attrs.at_is_optional);
9049   CHECKSUM_ATTR (attrs.at_location);
9050   CHECKSUM_ATTR (attrs.at_lower_bound);
9051   CHECKSUM_ATTR (attrs.at_mutable);
9052   CHECKSUM_ATTR (attrs.at_ordering);
9053   CHECKSUM_ATTR (attrs.at_picture_string);
9054   CHECKSUM_ATTR (attrs.at_prototyped);
9055   CHECKSUM_ATTR (attrs.at_small);
9056   CHECKSUM_ATTR (attrs.at_segment);
9057   CHECKSUM_ATTR (attrs.at_string_length);
9058   CHECKSUM_ATTR (attrs.at_threads_scaled);
9059   CHECKSUM_ATTR (attrs.at_upper_bound);
9060   CHECKSUM_ATTR (attrs.at_use_location);
9061   CHECKSUM_ATTR (attrs.at_use_UTF8);
9062   CHECKSUM_ATTR (attrs.at_variable_parameter);
9063   CHECKSUM_ATTR (attrs.at_virtuality);
9064   CHECKSUM_ATTR (attrs.at_visibility);
9065   CHECKSUM_ATTR (attrs.at_vtable_elem_location);
9066   CHECKSUM_ATTR (attrs.at_type);
9067   CHECKSUM_ATTR (attrs.at_friend);
9068
9069   /* Checksum the child DIEs, except for nested types and member functions.  */
9070   c = die->die_child;
9071   if (c) do {
9072     dw_attr_ref name_attr;
9073
9074     c = c->die_sib;
9075     name_attr = get_AT (c, DW_AT_name);
9076     if ((is_type_die (c) || c->die_tag == DW_TAG_subprogram)
9077         && name_attr != NULL)
9078       {
9079         CHECKSUM_ULEB128 ('S');
9080         CHECKSUM_ULEB128 (c->die_tag);
9081         CHECKSUM_STRING (AT_string (name_attr));
9082       }
9083     else
9084       {
9085         /* Mark this DIE so it gets processed when unmarking.  */
9086         if (c->die_mark == 0)
9087           c->die_mark = -1;
9088         die_checksum_ordered (c, ctx, mark);
9089       }
9090   } while (c != die->die_child);
9091
9092   CHECKSUM_ULEB128 (0);
9093 }
9094
9095 #undef CHECKSUM
9096 #undef CHECKSUM_STRING
9097 #undef CHECKSUM_ATTR
9098 #undef CHECKSUM_LEB128
9099 #undef CHECKSUM_ULEB128
9100
9101 /* Generate the type signature for DIE.  This is computed by generating an
9102    MD5 checksum over the DIE's tag, its relevant attributes, and its
9103    children.  Attributes that are references to other DIEs are processed
9104    by recursion, using the MARK field to prevent infinite recursion.
9105    If the DIE is nested inside a namespace or another type, we also
9106    need to include that context in the signature.  The lower 64 bits
9107    of the resulting MD5 checksum comprise the signature.  */
9108
9109 static void
9110 generate_type_signature (dw_die_ref die, comdat_type_node *type_node)
9111 {
9112   int mark;
9113   const char *name;
9114   unsigned char checksum[16];
9115   struct md5_ctx ctx;
9116   dw_die_ref decl;
9117
9118   name = get_AT_string (die, DW_AT_name);
9119   decl = get_AT_ref (die, DW_AT_specification);
9120
9121   /* First, compute a signature for just the type name (and its surrounding
9122      context, if any.  This is stored in the type unit DIE for link-time
9123      ODR (one-definition rule) checking.  */
9124
9125   if (is_cxx() && name != NULL)
9126     {
9127       md5_init_ctx (&ctx);
9128
9129       /* Checksum the names of surrounding namespaces and structures.  */
9130       if (decl != NULL && decl->die_parent != NULL)
9131         checksum_die_context (decl->die_parent, &ctx);
9132
9133       md5_process_bytes (&die->die_tag, sizeof (die->die_tag), &ctx);
9134       md5_process_bytes (name, strlen (name) + 1, &ctx);
9135       md5_finish_ctx (&ctx, checksum);
9136
9137       add_AT_data8 (type_node->root_die, DW_AT_GNU_odr_signature, &checksum[8]);
9138     }
9139
9140   /* Next, compute the complete type signature.  */
9141
9142   md5_init_ctx (&ctx);
9143   mark = 1;
9144   die->die_mark = mark;
9145
9146   /* Checksum the names of surrounding namespaces and structures.  */
9147   if (decl != NULL && decl->die_parent != NULL)
9148     checksum_die_context (decl->die_parent, &ctx);
9149
9150   /* Checksum the DIE and its children.  */
9151   die_checksum_ordered (die, &ctx, &mark);
9152   unmark_all_dies (die);
9153   md5_finish_ctx (&ctx, checksum);
9154
9155   /* Store the signature in the type node and link the type DIE and the
9156      type node together.  */
9157   memcpy (type_node->signature, &checksum[16 - DWARF_TYPE_SIGNATURE_SIZE],
9158           DWARF_TYPE_SIGNATURE_SIZE);
9159   die->die_id.die_type_node = type_node;
9160   type_node->type_die = die;
9161
9162   /* If the DIE is a specification, link its declaration to the type node
9163      as well.  */
9164   if (decl != NULL)
9165     decl->die_id.die_type_node = type_node;
9166 }
9167
9168 /* Do the location expressions look same?  */
9169 static inline int
9170 same_loc_p (dw_loc_descr_ref loc1, dw_loc_descr_ref loc2, int *mark)
9171 {
9172   return loc1->dw_loc_opc == loc2->dw_loc_opc
9173          && same_dw_val_p (&loc1->dw_loc_oprnd1, &loc2->dw_loc_oprnd1, mark)
9174          && same_dw_val_p (&loc1->dw_loc_oprnd2, &loc2->dw_loc_oprnd2, mark);
9175 }
9176
9177 /* Do the values look the same?  */
9178 static int
9179 same_dw_val_p (const dw_val_node *v1, const dw_val_node *v2, int *mark)
9180 {
9181   dw_loc_descr_ref loc1, loc2;
9182   rtx r1, r2;
9183
9184   if (v1->val_class != v2->val_class)
9185     return 0;
9186
9187   switch (v1->val_class)
9188     {
9189     case dw_val_class_const:
9190       return v1->v.val_int == v2->v.val_int;
9191     case dw_val_class_unsigned_const:
9192       return v1->v.val_unsigned == v2->v.val_unsigned;
9193     case dw_val_class_const_double:
9194       return v1->v.val_double.high == v2->v.val_double.high
9195              && v1->v.val_double.low == v2->v.val_double.low;
9196     case dw_val_class_vec:
9197       if (v1->v.val_vec.length != v2->v.val_vec.length
9198           || v1->v.val_vec.elt_size != v2->v.val_vec.elt_size)
9199         return 0;
9200       if (memcmp (v1->v.val_vec.array, v2->v.val_vec.array,
9201                   v1->v.val_vec.length * v1->v.val_vec.elt_size))
9202         return 0;
9203       return 1;
9204     case dw_val_class_flag:
9205       return v1->v.val_flag == v2->v.val_flag;
9206     case dw_val_class_str:
9207       return !strcmp(v1->v.val_str->str, v2->v.val_str->str);
9208
9209     case dw_val_class_addr:
9210       r1 = v1->v.val_addr;
9211       r2 = v2->v.val_addr;
9212       if (GET_CODE (r1) != GET_CODE (r2))
9213         return 0;
9214       return !rtx_equal_p (r1, r2);
9215
9216     case dw_val_class_offset:
9217       return v1->v.val_offset == v2->v.val_offset;
9218
9219     case dw_val_class_loc:
9220       for (loc1 = v1->v.val_loc, loc2 = v2->v.val_loc;
9221            loc1 && loc2;
9222            loc1 = loc1->dw_loc_next, loc2 = loc2->dw_loc_next)
9223         if (!same_loc_p (loc1, loc2, mark))
9224           return 0;
9225       return !loc1 && !loc2;
9226
9227     case dw_val_class_die_ref:
9228       return same_die_p (v1->v.val_die_ref.die, v2->v.val_die_ref.die, mark);
9229
9230     case dw_val_class_fde_ref:
9231     case dw_val_class_vms_delta:
9232     case dw_val_class_lbl_id:
9233     case dw_val_class_lineptr:
9234     case dw_val_class_macptr:
9235       return 1;
9236
9237     case dw_val_class_file:
9238       return v1->v.val_file == v2->v.val_file;
9239
9240     case dw_val_class_data8:
9241       return !memcmp (v1->v.val_data8, v2->v.val_data8, 8);
9242
9243     default:
9244       return 1;
9245     }
9246 }
9247
9248 /* Do the attributes look the same?  */
9249
9250 static int
9251 same_attr_p (dw_attr_ref at1, dw_attr_ref at2, int *mark)
9252 {
9253   if (at1->dw_attr != at2->dw_attr)
9254     return 0;
9255
9256   /* We don't care that this was compiled with a different compiler
9257      snapshot; if the output is the same, that's what matters. */
9258   if (at1->dw_attr == DW_AT_producer)
9259     return 1;
9260
9261   return same_dw_val_p (&at1->dw_attr_val, &at2->dw_attr_val, mark);
9262 }
9263
9264 /* Do the dies look the same?  */
9265
9266 static int
9267 same_die_p (dw_die_ref die1, dw_die_ref die2, int *mark)
9268 {
9269   dw_die_ref c1, c2;
9270   dw_attr_ref a1;
9271   unsigned ix;
9272
9273   /* To avoid infinite recursion.  */
9274   if (die1->die_mark)
9275     return die1->die_mark == die2->die_mark;
9276   die1->die_mark = die2->die_mark = ++(*mark);
9277
9278   if (die1->die_tag != die2->die_tag)
9279     return 0;
9280
9281   if (VEC_length (dw_attr_node, die1->die_attr)
9282       != VEC_length (dw_attr_node, die2->die_attr))
9283     return 0;
9284
9285   for (ix = 0; VEC_iterate (dw_attr_node, die1->die_attr, ix, a1); ix++)
9286     if (!same_attr_p (a1, VEC_index (dw_attr_node, die2->die_attr, ix), mark))
9287       return 0;
9288
9289   c1 = die1->die_child;
9290   c2 = die2->die_child;
9291   if (! c1)
9292     {
9293       if (c2)
9294         return 0;
9295     }
9296   else
9297     for (;;)
9298       {
9299         if (!same_die_p (c1, c2, mark))
9300           return 0;
9301         c1 = c1->die_sib;
9302         c2 = c2->die_sib;
9303         if (c1 == die1->die_child)
9304           {
9305             if (c2 == die2->die_child)
9306               break;
9307             else
9308               return 0;
9309           }
9310     }
9311
9312   return 1;
9313 }
9314
9315 /* Do the dies look the same?  Wrapper around same_die_p.  */
9316
9317 static int
9318 same_die_p_wrap (dw_die_ref die1, dw_die_ref die2)
9319 {
9320   int mark = 0;
9321   int ret = same_die_p (die1, die2, &mark);
9322
9323   unmark_all_dies (die1);
9324   unmark_all_dies (die2);
9325
9326   return ret;
9327 }
9328
9329 /* The prefix to attach to symbols on DIEs in the current comdat debug
9330    info section.  */
9331 static char *comdat_symbol_id;
9332
9333 /* The index of the current symbol within the current comdat CU.  */
9334 static unsigned int comdat_symbol_number;
9335
9336 /* Calculate the MD5 checksum of the compilation unit DIE UNIT_DIE and its
9337    children, and set comdat_symbol_id accordingly.  */
9338
9339 static void
9340 compute_section_prefix (dw_die_ref unit_die)
9341 {
9342   const char *die_name = get_AT_string (unit_die, DW_AT_name);
9343   const char *base = die_name ? lbasename (die_name) : "anonymous";
9344   char *name = XALLOCAVEC (char, strlen (base) + 64);
9345   char *p;
9346   int i, mark;
9347   unsigned char checksum[16];
9348   struct md5_ctx ctx;
9349
9350   /* Compute the checksum of the DIE, then append part of it as hex digits to
9351      the name filename of the unit.  */
9352
9353   md5_init_ctx (&ctx);
9354   mark = 0;
9355   die_checksum (unit_die, &ctx, &mark);
9356   unmark_all_dies (unit_die);
9357   md5_finish_ctx (&ctx, checksum);
9358
9359   sprintf (name, "%s.", base);
9360   clean_symbol_name (name);
9361
9362   p = name + strlen (name);
9363   for (i = 0; i < 4; i++)
9364     {
9365       sprintf (p, "%.2x", checksum[i]);
9366       p += 2;
9367     }
9368
9369   comdat_symbol_id = unit_die->die_id.die_symbol = xstrdup (name);
9370   comdat_symbol_number = 0;
9371 }
9372
9373 /* Returns nonzero if DIE represents a type, in the sense of TYPE_P.  */
9374
9375 static int
9376 is_type_die (dw_die_ref die)
9377 {
9378   switch (die->die_tag)
9379     {
9380     case DW_TAG_array_type:
9381     case DW_TAG_class_type:
9382     case DW_TAG_interface_type:
9383     case DW_TAG_enumeration_type:
9384     case DW_TAG_pointer_type:
9385     case DW_TAG_reference_type:
9386     case DW_TAG_rvalue_reference_type:
9387     case DW_TAG_string_type:
9388     case DW_TAG_structure_type:
9389     case DW_TAG_subroutine_type:
9390     case DW_TAG_union_type:
9391     case DW_TAG_ptr_to_member_type:
9392     case DW_TAG_set_type:
9393     case DW_TAG_subrange_type:
9394     case DW_TAG_base_type:
9395     case DW_TAG_const_type:
9396     case DW_TAG_file_type:
9397     case DW_TAG_packed_type:
9398     case DW_TAG_volatile_type:
9399     case DW_TAG_typedef:
9400       return 1;
9401     default:
9402       return 0;
9403     }
9404 }
9405
9406 /* Returns 1 iff C is the sort of DIE that should go into a COMDAT CU.
9407    Basically, we want to choose the bits that are likely to be shared between
9408    compilations (types) and leave out the bits that are specific to individual
9409    compilations (functions).  */
9410
9411 static int
9412 is_comdat_die (dw_die_ref c)
9413 {
9414   /* I think we want to leave base types and __vtbl_ptr_type in the main CU, as
9415      we do for stabs.  The advantage is a greater likelihood of sharing between
9416      objects that don't include headers in the same order (and therefore would
9417      put the base types in a different comdat).  jason 8/28/00 */
9418
9419   if (c->die_tag == DW_TAG_base_type)
9420     return 0;
9421
9422   if (c->die_tag == DW_TAG_pointer_type
9423       || c->die_tag == DW_TAG_reference_type
9424       || c->die_tag == DW_TAG_rvalue_reference_type
9425       || c->die_tag == DW_TAG_const_type
9426       || c->die_tag == DW_TAG_volatile_type)
9427     {
9428       dw_die_ref t = get_AT_ref (c, DW_AT_type);
9429
9430       return t ? is_comdat_die (t) : 0;
9431     }
9432
9433   return is_type_die (c);
9434 }
9435
9436 /* Returns 1 iff C is the sort of DIE that might be referred to from another
9437    compilation unit.  */
9438
9439 static int
9440 is_symbol_die (dw_die_ref c)
9441 {
9442   return (is_type_die (c)
9443           || is_declaration_die (c)
9444           || c->die_tag == DW_TAG_namespace
9445           || c->die_tag == DW_TAG_module);
9446 }
9447
9448 static char *
9449 gen_internal_sym (const char *prefix)
9450 {
9451   char buf[256];
9452
9453   ASM_GENERATE_INTERNAL_LABEL (buf, prefix, label_num++);
9454   return xstrdup (buf);
9455 }
9456
9457 /* Assign symbols to all worthy DIEs under DIE.  */
9458
9459 static void
9460 assign_symbol_names (dw_die_ref die)
9461 {
9462   dw_die_ref c;
9463
9464   if (is_symbol_die (die))
9465     {
9466       if (comdat_symbol_id)
9467         {
9468           char *p = XALLOCAVEC (char, strlen (comdat_symbol_id) + 64);
9469
9470           sprintf (p, "%s.%s.%x", DIE_LABEL_PREFIX,
9471                    comdat_symbol_id, comdat_symbol_number++);
9472           die->die_id.die_symbol = xstrdup (p);
9473         }
9474       else
9475         die->die_id.die_symbol = gen_internal_sym ("LDIE");
9476     }
9477
9478   FOR_EACH_CHILD (die, c, assign_symbol_names (c));
9479 }
9480
9481 struct cu_hash_table_entry
9482 {
9483   dw_die_ref cu;
9484   unsigned min_comdat_num, max_comdat_num;
9485   struct cu_hash_table_entry *next;
9486 };
9487
9488 /* Routines to manipulate hash table of CUs.  */
9489 static hashval_t
9490 htab_cu_hash (const void *of)
9491 {
9492   const struct cu_hash_table_entry *const entry =
9493     (const struct cu_hash_table_entry *) of;
9494
9495   return htab_hash_string (entry->cu->die_id.die_symbol);
9496 }
9497
9498 static int
9499 htab_cu_eq (const void *of1, const void *of2)
9500 {
9501   const struct cu_hash_table_entry *const entry1 =
9502     (const struct cu_hash_table_entry *) of1;
9503   const struct die_struct *const entry2 = (const struct die_struct *) of2;
9504
9505   return !strcmp (entry1->cu->die_id.die_symbol, entry2->die_id.die_symbol);
9506 }
9507
9508 static void
9509 htab_cu_del (void *what)
9510 {
9511   struct cu_hash_table_entry *next,
9512     *entry = (struct cu_hash_table_entry *) what;
9513
9514   while (entry)
9515     {
9516       next = entry->next;
9517       free (entry);
9518       entry = next;
9519     }
9520 }
9521
9522 /* Check whether we have already seen this CU and set up SYM_NUM
9523    accordingly.  */
9524 static int
9525 check_duplicate_cu (dw_die_ref cu, htab_t htable, unsigned int *sym_num)
9526 {
9527   struct cu_hash_table_entry dummy;
9528   struct cu_hash_table_entry **slot, *entry, *last = &dummy;
9529
9530   dummy.max_comdat_num = 0;
9531
9532   slot = (struct cu_hash_table_entry **)
9533     htab_find_slot_with_hash (htable, cu, htab_hash_string (cu->die_id.die_symbol),
9534         INSERT);
9535   entry = *slot;
9536
9537   for (; entry; last = entry, entry = entry->next)
9538     {
9539       if (same_die_p_wrap (cu, entry->cu))
9540         break;
9541     }
9542
9543   if (entry)
9544     {
9545       *sym_num = entry->min_comdat_num;
9546       return 1;
9547     }
9548
9549   entry = XCNEW (struct cu_hash_table_entry);
9550   entry->cu = cu;
9551   entry->min_comdat_num = *sym_num = last->max_comdat_num;
9552   entry->next = *slot;
9553   *slot = entry;
9554
9555   return 0;
9556 }
9557
9558 /* Record SYM_NUM to record of CU in HTABLE.  */
9559 static void
9560 record_comdat_symbol_number (dw_die_ref cu, htab_t htable, unsigned int sym_num)
9561 {
9562   struct cu_hash_table_entry **slot, *entry;
9563
9564   slot = (struct cu_hash_table_entry **)
9565     htab_find_slot_with_hash (htable, cu, htab_hash_string (cu->die_id.die_symbol),
9566         NO_INSERT);
9567   entry = *slot;
9568
9569   entry->max_comdat_num = sym_num;
9570 }
9571
9572 /* Traverse the DIE (which is always comp_unit_die), and set up
9573    additional compilation units for each of the include files we see
9574    bracketed by BINCL/EINCL.  */
9575
9576 static void
9577 break_out_includes (dw_die_ref die)
9578 {
9579   dw_die_ref c;
9580   dw_die_ref unit = NULL;
9581   limbo_die_node *node, **pnode;
9582   htab_t cu_hash_table;
9583
9584   c = die->die_child;
9585   if (c) do {
9586     dw_die_ref prev = c;
9587     c = c->die_sib;
9588     while (c->die_tag == DW_TAG_GNU_BINCL || c->die_tag == DW_TAG_GNU_EINCL
9589            || (unit && is_comdat_die (c)))
9590       {
9591         dw_die_ref next = c->die_sib;
9592
9593         /* This DIE is for a secondary CU; remove it from the main one.  */
9594         remove_child_with_prev (c, prev);
9595
9596         if (c->die_tag == DW_TAG_GNU_BINCL)
9597           unit = push_new_compile_unit (unit, c);
9598         else if (c->die_tag == DW_TAG_GNU_EINCL)
9599           unit = pop_compile_unit (unit);
9600         else
9601           add_child_die (unit, c);
9602         c = next;
9603         if (c == die->die_child)
9604           break;
9605       }
9606   } while (c != die->die_child);
9607
9608 #if 0
9609   /* We can only use this in debugging, since the frontend doesn't check
9610      to make sure that we leave every include file we enter.  */
9611   gcc_assert (!unit);
9612 #endif
9613
9614   assign_symbol_names (die);
9615   cu_hash_table = htab_create (10, htab_cu_hash, htab_cu_eq, htab_cu_del);
9616   for (node = limbo_die_list, pnode = &limbo_die_list;
9617        node;
9618        node = node->next)
9619     {
9620       int is_dupl;
9621
9622       compute_section_prefix (node->die);
9623       is_dupl = check_duplicate_cu (node->die, cu_hash_table,
9624                         &comdat_symbol_number);
9625       assign_symbol_names (node->die);
9626       if (is_dupl)
9627         *pnode = node->next;
9628       else
9629         {
9630           pnode = &node->next;
9631           record_comdat_symbol_number (node->die, cu_hash_table,
9632                 comdat_symbol_number);
9633         }
9634     }
9635   htab_delete (cu_hash_table);
9636 }
9637
9638 /* Return non-zero if this DIE is a declaration.  */
9639
9640 static int
9641 is_declaration_die (dw_die_ref die)
9642 {
9643   dw_attr_ref a;
9644   unsigned ix;
9645
9646   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
9647     if (a->dw_attr == DW_AT_declaration)
9648       return 1;
9649
9650   return 0;
9651 }
9652
9653 /* Return non-zero if this DIE is nested inside a subprogram.  */
9654
9655 static int
9656 is_nested_in_subprogram (dw_die_ref die)
9657 {
9658   dw_die_ref decl = get_AT_ref (die, DW_AT_specification);
9659
9660   if (decl == NULL)
9661     decl = die;
9662   return local_scope_p (decl);
9663 }
9664
9665 /* Return non-zero if this is a type DIE that should be moved to a
9666    COMDAT .debug_types section.  */
9667
9668 static int
9669 should_move_die_to_comdat (dw_die_ref die)
9670 {
9671   switch (die->die_tag)
9672     {
9673     case DW_TAG_class_type:
9674     case DW_TAG_structure_type:
9675     case DW_TAG_enumeration_type:
9676     case DW_TAG_union_type:
9677       /* Don't move declarations, inlined instances, or types nested in a
9678          subprogram.  */
9679       if (is_declaration_die (die)
9680           || get_AT (die, DW_AT_abstract_origin)
9681           || is_nested_in_subprogram (die))
9682         return 0;
9683       return 1;
9684     case DW_TAG_array_type:
9685     case DW_TAG_interface_type:
9686     case DW_TAG_pointer_type:
9687     case DW_TAG_reference_type:
9688     case DW_TAG_rvalue_reference_type:
9689     case DW_TAG_string_type:
9690     case DW_TAG_subroutine_type:
9691     case DW_TAG_ptr_to_member_type:
9692     case DW_TAG_set_type:
9693     case DW_TAG_subrange_type:
9694     case DW_TAG_base_type:
9695     case DW_TAG_const_type:
9696     case DW_TAG_file_type:
9697     case DW_TAG_packed_type:
9698     case DW_TAG_volatile_type:
9699     case DW_TAG_typedef:
9700     default:
9701       return 0;
9702     }
9703 }
9704
9705 /* Make a clone of DIE.  */
9706
9707 static dw_die_ref
9708 clone_die (dw_die_ref die)
9709 {
9710   dw_die_ref clone;
9711   dw_attr_ref a;
9712   unsigned ix;
9713
9714   clone = ggc_alloc_cleared_die_node ();
9715   clone->die_tag = die->die_tag;
9716
9717   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
9718     add_dwarf_attr (clone, a);
9719
9720   return clone;
9721 }
9722
9723 /* Make a clone of the tree rooted at DIE.  */
9724
9725 static dw_die_ref
9726 clone_tree (dw_die_ref die)
9727 {
9728   dw_die_ref c;
9729   dw_die_ref clone = clone_die (die);
9730
9731   FOR_EACH_CHILD (die, c, add_child_die (clone, clone_tree(c)));
9732
9733   return clone;
9734 }
9735
9736 /* Make a clone of DIE as a declaration.  */
9737
9738 static dw_die_ref
9739 clone_as_declaration (dw_die_ref die)
9740 {
9741   dw_die_ref clone;
9742   dw_die_ref decl;
9743   dw_attr_ref a;
9744   unsigned ix;
9745
9746   /* If the DIE is already a declaration, just clone it.  */
9747   if (is_declaration_die (die))
9748     return clone_die (die);
9749
9750   /* If the DIE is a specification, just clone its declaration DIE.  */
9751   decl = get_AT_ref (die, DW_AT_specification);
9752   if (decl != NULL)
9753     return clone_die (decl);
9754
9755   clone = ggc_alloc_cleared_die_node ();
9756   clone->die_tag = die->die_tag;
9757
9758   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
9759     {
9760       /* We don't want to copy over all attributes.
9761          For example we don't want DW_AT_byte_size because otherwise we will no
9762          longer have a declaration and GDB will treat it as a definition.  */
9763
9764       switch (a->dw_attr)
9765         {
9766         case DW_AT_artificial:
9767         case DW_AT_containing_type:
9768         case DW_AT_external:
9769         case DW_AT_name:
9770         case DW_AT_type:
9771         case DW_AT_virtuality:
9772         case DW_AT_linkage_name:
9773         case DW_AT_MIPS_linkage_name:
9774           add_dwarf_attr (clone, a);
9775           break;
9776         case DW_AT_byte_size:
9777         default:
9778           break;
9779         }
9780     }
9781
9782   if (die->die_id.die_type_node)
9783     add_AT_die_ref (clone, DW_AT_signature, die);
9784
9785   add_AT_flag (clone, DW_AT_declaration, 1);
9786   return clone;
9787 }
9788
9789 /* Copy the declaration context to the new compile unit DIE.  This includes
9790    any surrounding namespace or type declarations.  If the DIE has an
9791    AT_specification attribute, it also includes attributes and children
9792    attached to the specification.  */
9793
9794 static void
9795 copy_declaration_context (dw_die_ref unit, dw_die_ref die)
9796 {
9797   dw_die_ref decl;
9798   dw_die_ref new_decl;
9799
9800   decl = get_AT_ref (die, DW_AT_specification);
9801   if (decl == NULL)
9802     decl = die;
9803   else
9804     {
9805       unsigned ix;
9806       dw_die_ref c;
9807       dw_attr_ref a;
9808
9809       /* Copy the type node pointer from the new DIE to the original
9810          declaration DIE so we can forward references later.  */
9811       decl->die_id.die_type_node = die->die_id.die_type_node;
9812
9813       remove_AT (die, DW_AT_specification);
9814
9815       for (ix = 0; VEC_iterate (dw_attr_node, decl->die_attr, ix, a); ix++)
9816         {
9817           if (a->dw_attr != DW_AT_name
9818               && a->dw_attr != DW_AT_declaration
9819               && a->dw_attr != DW_AT_external)
9820             add_dwarf_attr (die, a);
9821         }
9822
9823       FOR_EACH_CHILD (decl, c, add_child_die (die, clone_tree(c)));
9824     }
9825
9826   if (decl->die_parent != NULL
9827       && decl->die_parent->die_tag != DW_TAG_compile_unit
9828       && decl->die_parent->die_tag != DW_TAG_type_unit)
9829     {
9830       new_decl = copy_ancestor_tree (unit, decl, NULL);
9831       if (new_decl != NULL)
9832         {
9833           remove_AT (new_decl, DW_AT_signature);
9834           add_AT_specification (die, new_decl);
9835         }
9836     }
9837 }
9838
9839 /* Generate the skeleton ancestor tree for the given NODE, then clone
9840    the DIE and add the clone into the tree.  */
9841
9842 static void
9843 generate_skeleton_ancestor_tree (skeleton_chain_node *node)
9844 {
9845   if (node->new_die != NULL)
9846     return;
9847
9848   node->new_die = clone_as_declaration (node->old_die);
9849
9850   if (node->parent != NULL)
9851     {
9852       generate_skeleton_ancestor_tree (node->parent);
9853       add_child_die (node->parent->new_die, node->new_die);
9854     }
9855 }
9856
9857 /* Generate a skeleton tree of DIEs containing any declarations that are
9858    found in the original tree.  We traverse the tree looking for declaration
9859    DIEs, and construct the skeleton from the bottom up whenever we find one.  */
9860
9861 static void
9862 generate_skeleton_bottom_up (skeleton_chain_node *parent)
9863 {
9864   skeleton_chain_node node;
9865   dw_die_ref c;
9866   dw_die_ref first;
9867   dw_die_ref prev = NULL;
9868   dw_die_ref next = NULL;
9869
9870   node.parent = parent;
9871
9872   first = c = parent->old_die->die_child;
9873   if (c)
9874     next = c->die_sib;
9875   if (c) do {
9876     if (prev == NULL || prev->die_sib == c)
9877       prev = c;
9878     c = next;
9879     next = (c == first ? NULL : c->die_sib);
9880     node.old_die = c;
9881     node.new_die = NULL;
9882     if (is_declaration_die (c))
9883       {
9884         /* Clone the existing DIE, move the original to the skeleton
9885            tree (which is in the main CU), and put the clone, with
9886            all the original's children, where the original came from.  */
9887         dw_die_ref clone = clone_die (c);
9888         move_all_children (c, clone);
9889
9890         replace_child (c, clone, prev);
9891         generate_skeleton_ancestor_tree (parent);
9892         add_child_die (parent->new_die, c);
9893         node.new_die = c;
9894         c = clone;
9895       }
9896     generate_skeleton_bottom_up (&node);
9897   } while (next != NULL);
9898 }
9899
9900 /* Wrapper function for generate_skeleton_bottom_up.  */
9901
9902 static dw_die_ref
9903 generate_skeleton (dw_die_ref die)
9904 {
9905   skeleton_chain_node node;
9906
9907   node.old_die = die;
9908   node.new_die = NULL;
9909   node.parent = NULL;
9910
9911   /* If this type definition is nested inside another type,
9912      always leave at least a declaration in its place.  */
9913   if (die->die_parent != NULL && is_type_die (die->die_parent))
9914     node.new_die = clone_as_declaration (die);
9915
9916   generate_skeleton_bottom_up (&node);
9917   return node.new_die;
9918 }
9919
9920 /* Remove the DIE from its parent, possibly replacing it with a cloned
9921    declaration.  The original DIE will be moved to a new compile unit
9922    so that existing references to it follow it to the new location.  If
9923    any of the original DIE's descendants is a declaration, we need to
9924    replace the original DIE with a skeleton tree and move the
9925    declarations back into the skeleton tree.  */
9926
9927 static dw_die_ref
9928 remove_child_or_replace_with_skeleton (dw_die_ref child, dw_die_ref prev)
9929 {
9930   dw_die_ref skeleton;
9931
9932   skeleton = generate_skeleton (child);
9933   if (skeleton == NULL)
9934     remove_child_with_prev (child, prev);
9935   else
9936     {
9937       skeleton->die_id.die_type_node = child->die_id.die_type_node;
9938       replace_child (child, skeleton, prev);
9939     }
9940
9941   return skeleton;
9942 }
9943
9944 /* Traverse the DIE and set up additional .debug_types sections for each
9945    type worthy of being placed in a COMDAT section.  */
9946
9947 static void
9948 break_out_comdat_types (dw_die_ref die)
9949 {
9950   dw_die_ref c;
9951   dw_die_ref first;
9952   dw_die_ref prev = NULL;
9953   dw_die_ref next = NULL;
9954   dw_die_ref unit = NULL;
9955
9956   first = c = die->die_child;
9957   if (c)
9958     next = c->die_sib;
9959   if (c) do {
9960     if (prev == NULL || prev->die_sib == c)
9961       prev = c;
9962     c = next;
9963     next = (c == first ? NULL : c->die_sib);
9964     if (should_move_die_to_comdat (c))
9965       {
9966         dw_die_ref replacement;
9967         comdat_type_node_ref type_node;
9968
9969         /* Create a new type unit DIE as the root for the new tree, and
9970            add it to the list of comdat types.  */
9971         unit = new_die (DW_TAG_type_unit, NULL, NULL);
9972         add_AT_unsigned (unit, DW_AT_language,
9973                          get_AT_unsigned (comp_unit_die, DW_AT_language));
9974         type_node = ggc_alloc_cleared_comdat_type_node ();
9975         type_node->root_die = unit;
9976         type_node->next = comdat_type_list;
9977         comdat_type_list = type_node;
9978
9979         /* Generate the type signature.  */
9980         generate_type_signature (c, type_node);
9981
9982         /* Copy the declaration context, attributes, and children of the
9983            declaration into the new compile unit DIE.  */
9984         copy_declaration_context (unit, c);
9985
9986         /* Remove this DIE from the main CU.  */
9987         replacement = remove_child_or_replace_with_skeleton (c, prev);
9988
9989         /* Break out nested types into their own type units.  */
9990         break_out_comdat_types (c);
9991
9992         /* Add the DIE to the new compunit.  */
9993         add_child_die (unit, c);
9994
9995         if (replacement != NULL)
9996           c = replacement;
9997       }
9998     else if (c->die_tag == DW_TAG_namespace
9999              || c->die_tag == DW_TAG_class_type
10000              || c->die_tag == DW_TAG_structure_type
10001              || c->die_tag == DW_TAG_union_type)
10002       {
10003         /* Look for nested types that can be broken out.  */
10004         break_out_comdat_types (c);
10005       }
10006   } while (next != NULL);
10007 }
10008
10009 /* Structure to map a DIE in one CU to its copy in a comdat type unit.  */
10010
10011 struct decl_table_entry
10012 {
10013   dw_die_ref orig;
10014   dw_die_ref copy;
10015 };
10016
10017 /* Routines to manipulate hash table of copied declarations.  */
10018
10019 static hashval_t
10020 htab_decl_hash (const void *of)
10021 {
10022   const struct decl_table_entry *const entry =
10023     (const struct decl_table_entry *) of;
10024
10025   return htab_hash_pointer (entry->orig);
10026 }
10027
10028 static int
10029 htab_decl_eq (const void *of1, const void *of2)
10030 {
10031   const struct decl_table_entry *const entry1 =
10032     (const struct decl_table_entry *) of1;
10033   const struct die_struct *const entry2 = (const struct die_struct *) of2;
10034
10035   return entry1->orig == entry2;
10036 }
10037
10038 static void
10039 htab_decl_del (void *what)
10040 {
10041   struct decl_table_entry *entry = (struct decl_table_entry *) what;
10042
10043   free (entry);
10044 }
10045
10046 /* Copy DIE and its ancestors, up to, but not including, the compile unit
10047    or type unit entry, to a new tree.  Adds the new tree to UNIT and returns
10048    a pointer to the copy of DIE.  If DECL_TABLE is provided, it is used
10049    to check if the ancestor has already been copied into UNIT.  */
10050
10051 static dw_die_ref
10052 copy_ancestor_tree (dw_die_ref unit, dw_die_ref die, htab_t decl_table)
10053 {
10054   dw_die_ref parent = die->die_parent;
10055   dw_die_ref new_parent = unit;
10056   dw_die_ref copy;
10057   void **slot = NULL;
10058   struct decl_table_entry *entry = NULL;
10059
10060   if (decl_table)
10061     {
10062       /* Check if the entry has already been copied to UNIT.  */
10063       slot = htab_find_slot_with_hash (decl_table, die,
10064                                        htab_hash_pointer (die), INSERT);
10065       if (*slot != HTAB_EMPTY_ENTRY)
10066         {
10067           entry = (struct decl_table_entry *) *slot;
10068           return entry->copy;
10069         }
10070
10071       /* Record in DECL_TABLE that DIE has been copied to UNIT.  */
10072       entry = XCNEW (struct decl_table_entry);
10073       entry->orig = die;
10074       entry->copy = NULL;
10075       *slot = entry;
10076     }
10077
10078   if (parent != NULL)
10079     {
10080       dw_die_ref spec = get_AT_ref (parent, DW_AT_specification);
10081       if (spec != NULL)
10082         parent = spec;
10083       if (parent->die_tag != DW_TAG_compile_unit
10084           && parent->die_tag != DW_TAG_type_unit)
10085         new_parent = copy_ancestor_tree (unit, parent, decl_table);
10086     }
10087
10088   copy = clone_as_declaration (die);
10089   add_child_die (new_parent, copy);
10090
10091   if (decl_table != NULL)
10092     {
10093       /* Record the pointer to the copy.  */
10094       entry->copy = copy;
10095     }
10096
10097   return copy;
10098 }
10099
10100 /* Walk the DIE and its children, looking for references to incomplete
10101    or trivial types that are unmarked (i.e., that are not in the current
10102    type_unit).  */
10103
10104 static void
10105 copy_decls_walk (dw_die_ref unit, dw_die_ref die, htab_t decl_table)
10106 {
10107   dw_die_ref c;
10108   dw_attr_ref a;
10109   unsigned ix;
10110
10111   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
10112     {
10113       if (AT_class (a) == dw_val_class_die_ref)
10114         {
10115           dw_die_ref targ = AT_ref (a);
10116           comdat_type_node_ref type_node = targ->die_id.die_type_node;
10117           void **slot;
10118           struct decl_table_entry *entry;
10119
10120           if (targ->die_mark != 0 || type_node != NULL)
10121             continue;
10122
10123           slot = htab_find_slot_with_hash (decl_table, targ,
10124                                            htab_hash_pointer (targ), INSERT);
10125
10126           if (*slot != HTAB_EMPTY_ENTRY)
10127             {
10128               /* TARG has already been copied, so we just need to
10129                  modify the reference to point to the copy.  */
10130               entry = (struct decl_table_entry *) *slot;
10131               a->dw_attr_val.v.val_die_ref.die = entry->copy;
10132             }
10133           else
10134             {
10135               dw_die_ref parent = unit;
10136               dw_die_ref copy = clone_tree (targ);
10137
10138               /* Make sure the cloned tree is marked as part of the
10139                  type unit.  */
10140               mark_dies (copy);
10141
10142               /* Record in DECL_TABLE that TARG has been copied.
10143                  Need to do this now, before the recursive call,
10144                  because DECL_TABLE may be expanded and SLOT
10145                  would no longer be a valid pointer.  */
10146               entry = XCNEW (struct decl_table_entry);
10147               entry->orig = targ;
10148               entry->copy = copy;
10149               *slot = entry;
10150
10151               /* If TARG has surrounding context, copy its ancestor tree
10152                  into the new type unit.  */
10153               if (targ->die_parent != NULL
10154                   && targ->die_parent->die_tag != DW_TAG_compile_unit
10155                   && targ->die_parent->die_tag != DW_TAG_type_unit)
10156                 parent = copy_ancestor_tree (unit, targ->die_parent,
10157                                              decl_table);
10158
10159               add_child_die (parent, copy);
10160               a->dw_attr_val.v.val_die_ref.die = copy;
10161
10162               /* Make sure the newly-copied DIE is walked.  If it was
10163                  installed in a previously-added context, it won't
10164                  get visited otherwise.  */
10165               if (parent != unit)
10166                 {
10167                   /* Find the highest point of the newly-added tree,
10168                      mark each node along the way, and walk from there.  */
10169                   parent->die_mark = 1;
10170                   while (parent->die_parent
10171                          && parent->die_parent->die_mark == 0)
10172                     {
10173                       parent = parent->die_parent;
10174                       parent->die_mark = 1;
10175                     }
10176                   copy_decls_walk (unit, parent, decl_table);
10177                 }
10178             }
10179         }
10180     }
10181
10182   FOR_EACH_CHILD (die, c, copy_decls_walk (unit, c, decl_table));
10183 }
10184
10185 /* Copy declarations for "unworthy" types into the new comdat section.
10186    Incomplete types, modified types, and certain other types aren't broken
10187    out into comdat sections of their own, so they don't have a signature,
10188    and we need to copy the declaration into the same section so that we
10189    don't have an external reference.  */
10190
10191 static void
10192 copy_decls_for_unworthy_types (dw_die_ref unit)
10193 {
10194   htab_t decl_table;
10195
10196   mark_dies (unit);
10197   decl_table = htab_create (10, htab_decl_hash, htab_decl_eq, htab_decl_del);
10198   copy_decls_walk (unit, unit, decl_table);
10199   htab_delete (decl_table);
10200   unmark_dies (unit);
10201 }
10202
10203 /* Traverse the DIE and add a sibling attribute if it may have the
10204    effect of speeding up access to siblings.  To save some space,
10205    avoid generating sibling attributes for DIE's without children.  */
10206
10207 static void
10208 add_sibling_attributes (dw_die_ref die)
10209 {
10210   dw_die_ref c;
10211
10212   if (! die->die_child)
10213     return;
10214
10215   if (die->die_parent && die != die->die_parent->die_child)
10216     add_AT_die_ref (die, DW_AT_sibling, die->die_sib);
10217
10218   FOR_EACH_CHILD (die, c, add_sibling_attributes (c));
10219 }
10220
10221 /* Output all location lists for the DIE and its children.  */
10222
10223 static void
10224 output_location_lists (dw_die_ref die)
10225 {
10226   dw_die_ref c;
10227   dw_attr_ref a;
10228   unsigned ix;
10229
10230   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
10231     if (AT_class (a) == dw_val_class_loc_list)
10232       output_loc_list (AT_loc_list (a));
10233
10234   FOR_EACH_CHILD (die, c, output_location_lists (c));
10235 }
10236
10237 /* The format of each DIE (and its attribute value pairs) is encoded in an
10238    abbreviation table.  This routine builds the abbreviation table and assigns
10239    a unique abbreviation id for each abbreviation entry.  The children of each
10240    die are visited recursively.  */
10241
10242 static void
10243 build_abbrev_table (dw_die_ref die)
10244 {
10245   unsigned long abbrev_id;
10246   unsigned int n_alloc;
10247   dw_die_ref c;
10248   dw_attr_ref a;
10249   unsigned ix;
10250
10251   /* Scan the DIE references, and mark as external any that refer to
10252      DIEs from other CUs (i.e. those which are not marked).  */
10253   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
10254     if (AT_class (a) == dw_val_class_die_ref
10255         && AT_ref (a)->die_mark == 0)
10256       {
10257         gcc_assert (dwarf_version >= 4 || AT_ref (a)->die_id.die_symbol);
10258         set_AT_ref_external (a, 1);
10259       }
10260
10261   for (abbrev_id = 1; abbrev_id < abbrev_die_table_in_use; ++abbrev_id)
10262     {
10263       dw_die_ref abbrev = abbrev_die_table[abbrev_id];
10264       dw_attr_ref die_a, abbrev_a;
10265       unsigned ix;
10266       bool ok = true;
10267
10268       if (abbrev->die_tag != die->die_tag)
10269         continue;
10270       if ((abbrev->die_child != NULL) != (die->die_child != NULL))
10271         continue;
10272
10273       if (VEC_length (dw_attr_node, abbrev->die_attr)
10274           != VEC_length (dw_attr_node, die->die_attr))
10275         continue;
10276
10277       for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, die_a); ix++)
10278         {
10279           abbrev_a = VEC_index (dw_attr_node, abbrev->die_attr, ix);
10280           if ((abbrev_a->dw_attr != die_a->dw_attr)
10281               || (value_format (abbrev_a) != value_format (die_a)))
10282             {
10283               ok = false;
10284               break;
10285             }
10286         }
10287       if (ok)
10288         break;
10289     }
10290
10291   if (abbrev_id >= abbrev_die_table_in_use)
10292     {
10293       if (abbrev_die_table_in_use >= abbrev_die_table_allocated)
10294         {
10295           n_alloc = abbrev_die_table_allocated + ABBREV_DIE_TABLE_INCREMENT;
10296           abbrev_die_table = GGC_RESIZEVEC (dw_die_ref, abbrev_die_table,
10297                                             n_alloc);
10298
10299           memset (&abbrev_die_table[abbrev_die_table_allocated], 0,
10300                  (n_alloc - abbrev_die_table_allocated) * sizeof (dw_die_ref));
10301           abbrev_die_table_allocated = n_alloc;
10302         }
10303
10304       ++abbrev_die_table_in_use;
10305       abbrev_die_table[abbrev_id] = die;
10306     }
10307
10308   die->die_abbrev = abbrev_id;
10309   FOR_EACH_CHILD (die, c, build_abbrev_table (c));
10310 }
10311 \f
10312 /* Return the power-of-two number of bytes necessary to represent VALUE.  */
10313
10314 static int
10315 constant_size (unsigned HOST_WIDE_INT value)
10316 {
10317   int log;
10318
10319   if (value == 0)
10320     log = 0;
10321   else
10322     log = floor_log2 (value);
10323
10324   log = log / 8;
10325   log = 1 << (floor_log2 (log) + 1);
10326
10327   return log;
10328 }
10329
10330 /* Return the size of a DIE as it is represented in the
10331    .debug_info section.  */
10332
10333 static unsigned long
10334 size_of_die (dw_die_ref die)
10335 {
10336   unsigned long size = 0;
10337   dw_attr_ref a;
10338   unsigned ix;
10339
10340   size += size_of_uleb128 (die->die_abbrev);
10341   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
10342     {
10343       switch (AT_class (a))
10344         {
10345         case dw_val_class_addr:
10346           size += DWARF2_ADDR_SIZE;
10347           break;
10348         case dw_val_class_offset:
10349           size += DWARF_OFFSET_SIZE;
10350           break;
10351         case dw_val_class_loc:
10352           {
10353             unsigned long lsize = size_of_locs (AT_loc (a));
10354
10355             /* Block length.  */
10356             if (dwarf_version >= 4)
10357               size += size_of_uleb128 (lsize);
10358             else
10359               size += constant_size (lsize);
10360             size += lsize;
10361           }
10362           break;
10363         case dw_val_class_loc_list:
10364           size += DWARF_OFFSET_SIZE;
10365           break;
10366         case dw_val_class_range_list:
10367           size += DWARF_OFFSET_SIZE;
10368           break;
10369         case dw_val_class_const:
10370           size += size_of_sleb128 (AT_int (a));
10371           break;
10372         case dw_val_class_unsigned_const:
10373           size += constant_size (AT_unsigned (a));
10374           break;
10375         case dw_val_class_const_double:
10376           size += 2 * HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR;
10377           if (HOST_BITS_PER_WIDE_INT >= 64)
10378             size++; /* block */
10379           break;
10380         case dw_val_class_vec:
10381           size += constant_size (a->dw_attr_val.v.val_vec.length
10382                                  * a->dw_attr_val.v.val_vec.elt_size)
10383                   + a->dw_attr_val.v.val_vec.length
10384                     * a->dw_attr_val.v.val_vec.elt_size; /* block */
10385           break;
10386         case dw_val_class_flag:
10387           if (dwarf_version >= 4)
10388             /* Currently all add_AT_flag calls pass in 1 as last argument,
10389                so DW_FORM_flag_present can be used.  If that ever changes,
10390                we'll need to use DW_FORM_flag and have some optimization
10391                in build_abbrev_table that will change those to
10392                DW_FORM_flag_present if it is set to 1 in all DIEs using
10393                the same abbrev entry.  */
10394             gcc_assert (a->dw_attr_val.v.val_flag == 1);
10395           else
10396             size += 1;
10397           break;
10398         case dw_val_class_die_ref:
10399           if (AT_ref_external (a))
10400             {
10401               /* In DWARF4, we use DW_FORM_sig8; for earlier versions
10402                  we use DW_FORM_ref_addr.  In DWARF2, DW_FORM_ref_addr
10403                  is sized by target address length, whereas in DWARF3
10404                  it's always sized as an offset.  */
10405               if (dwarf_version >= 4)
10406                 size += DWARF_TYPE_SIGNATURE_SIZE;
10407               else if (dwarf_version == 2)
10408                 size += DWARF2_ADDR_SIZE;
10409               else
10410                 size += DWARF_OFFSET_SIZE;
10411             }
10412           else
10413             size += DWARF_OFFSET_SIZE;
10414           break;
10415         case dw_val_class_fde_ref:
10416           size += DWARF_OFFSET_SIZE;
10417           break;
10418         case dw_val_class_lbl_id:
10419           size += DWARF2_ADDR_SIZE;
10420           break;
10421         case dw_val_class_lineptr:
10422         case dw_val_class_macptr:
10423           size += DWARF_OFFSET_SIZE;
10424           break;
10425         case dw_val_class_str:
10426           if (AT_string_form (a) == DW_FORM_strp)
10427             size += DWARF_OFFSET_SIZE;
10428           else
10429             size += strlen (a->dw_attr_val.v.val_str->str) + 1;
10430           break;
10431         case dw_val_class_file:
10432           size += constant_size (maybe_emit_file (a->dw_attr_val.v.val_file));
10433           break;
10434         case dw_val_class_data8:
10435           size += 8;
10436           break;
10437         case dw_val_class_vms_delta:
10438           size += DWARF_OFFSET_SIZE;
10439           break;
10440         default:
10441           gcc_unreachable ();
10442         }
10443     }
10444
10445   return size;
10446 }
10447
10448 /* Size the debugging information associated with a given DIE.  Visits the
10449    DIE's children recursively.  Updates the global variable next_die_offset, on
10450    each time through.  Uses the current value of next_die_offset to update the
10451    die_offset field in each DIE.  */
10452
10453 static void
10454 calc_die_sizes (dw_die_ref die)
10455 {
10456   dw_die_ref c;
10457
10458   die->die_offset = next_die_offset;
10459   next_die_offset += size_of_die (die);
10460
10461   FOR_EACH_CHILD (die, c, calc_die_sizes (c));
10462
10463   if (die->die_child != NULL)
10464     /* Count the null byte used to terminate sibling lists.  */
10465     next_die_offset += 1;
10466 }
10467
10468 /* Set the marks for a die and its children.  We do this so
10469    that we know whether or not a reference needs to use FORM_ref_addr; only
10470    DIEs in the same CU will be marked.  We used to clear out the offset
10471    and use that as the flag, but ran into ordering problems.  */
10472
10473 static void
10474 mark_dies (dw_die_ref die)
10475 {
10476   dw_die_ref c;
10477
10478   gcc_assert (!die->die_mark);
10479
10480   die->die_mark = 1;
10481   FOR_EACH_CHILD (die, c, mark_dies (c));
10482 }
10483
10484 /* Clear the marks for a die and its children.  */
10485
10486 static void
10487 unmark_dies (dw_die_ref die)
10488 {
10489   dw_die_ref c;
10490
10491   if (dwarf_version < 4)
10492     gcc_assert (die->die_mark);
10493
10494   die->die_mark = 0;
10495   FOR_EACH_CHILD (die, c, unmark_dies (c));
10496 }
10497
10498 /* Clear the marks for a die, its children and referred dies.  */
10499
10500 static void
10501 unmark_all_dies (dw_die_ref die)
10502 {
10503   dw_die_ref c;
10504   dw_attr_ref a;
10505   unsigned ix;
10506
10507   if (!die->die_mark)
10508     return;
10509   die->die_mark = 0;
10510
10511   FOR_EACH_CHILD (die, c, unmark_all_dies (c));
10512
10513   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
10514     if (AT_class (a) == dw_val_class_die_ref)
10515       unmark_all_dies (AT_ref (a));
10516 }
10517
10518 /* Return the size of the .debug_pubnames or .debug_pubtypes table
10519    generated for the compilation unit.  */
10520
10521 static unsigned long
10522 size_of_pubnames (VEC (pubname_entry, gc) * names)
10523 {
10524   unsigned long size;
10525   unsigned i;
10526   pubname_ref p;
10527
10528   size = DWARF_PUBNAMES_HEADER_SIZE;
10529   for (i = 0; VEC_iterate (pubname_entry, names, i, p); i++)
10530     if (names != pubtype_table
10531         || p->die->die_offset != 0
10532         || !flag_eliminate_unused_debug_types)
10533       size += strlen (p->name) + DWARF_OFFSET_SIZE + 1;
10534
10535   size += DWARF_OFFSET_SIZE;
10536   return size;
10537 }
10538
10539 /* Return the size of the information in the .debug_aranges section.  */
10540
10541 static unsigned long
10542 size_of_aranges (void)
10543 {
10544   unsigned long size;
10545
10546   size = DWARF_ARANGES_HEADER_SIZE;
10547
10548   /* Count the address/length pair for this compilation unit.  */
10549   if (text_section_used)
10550     size += 2 * DWARF2_ADDR_SIZE;
10551   if (cold_text_section_used)
10552     size += 2 * DWARF2_ADDR_SIZE;
10553   size += 2 * DWARF2_ADDR_SIZE * arange_table_in_use;
10554
10555   /* Count the two zero words used to terminated the address range table.  */
10556   size += 2 * DWARF2_ADDR_SIZE;
10557   return size;
10558 }
10559 \f
10560 /* Select the encoding of an attribute value.  */
10561
10562 static enum dwarf_form
10563 value_format (dw_attr_ref a)
10564 {
10565   switch (a->dw_attr_val.val_class)
10566     {
10567     case dw_val_class_addr:
10568       /* Only very few attributes allow DW_FORM_addr.  */
10569       switch (a->dw_attr)
10570         {
10571         case DW_AT_low_pc:
10572         case DW_AT_high_pc:
10573         case DW_AT_entry_pc:
10574         case DW_AT_trampoline:
10575           return DW_FORM_addr;
10576         default:
10577           break;
10578         }
10579       switch (DWARF2_ADDR_SIZE)
10580         {
10581         case 1:
10582           return DW_FORM_data1;
10583         case 2:
10584           return DW_FORM_data2;
10585         case 4:
10586           return DW_FORM_data4;
10587         case 8:
10588           return DW_FORM_data8;
10589         default:
10590           gcc_unreachable ();
10591         }
10592     case dw_val_class_range_list:
10593     case dw_val_class_loc_list:
10594       if (dwarf_version >= 4)
10595         return DW_FORM_sec_offset;
10596       /* FALLTHRU */
10597     case dw_val_class_vms_delta:
10598     case dw_val_class_offset:
10599       switch (DWARF_OFFSET_SIZE)
10600         {
10601         case 4:
10602           return DW_FORM_data4;
10603         case 8:
10604           return DW_FORM_data8;
10605         default:
10606           gcc_unreachable ();
10607         }
10608     case dw_val_class_loc:
10609       if (dwarf_version >= 4)
10610         return DW_FORM_exprloc;
10611       switch (constant_size (size_of_locs (AT_loc (a))))
10612         {
10613         case 1:
10614           return DW_FORM_block1;
10615         case 2:
10616           return DW_FORM_block2;
10617         default:
10618           gcc_unreachable ();
10619         }
10620     case dw_val_class_const:
10621       return DW_FORM_sdata;
10622     case dw_val_class_unsigned_const:
10623       switch (constant_size (AT_unsigned (a)))
10624         {
10625         case 1:
10626           return DW_FORM_data1;
10627         case 2:
10628           return DW_FORM_data2;
10629         case 4:
10630           return DW_FORM_data4;
10631         case 8:
10632           return DW_FORM_data8;
10633         default:
10634           gcc_unreachable ();
10635         }
10636     case dw_val_class_const_double:
10637       switch (HOST_BITS_PER_WIDE_INT)
10638         {
10639         case 8:
10640           return DW_FORM_data2;
10641         case 16:
10642           return DW_FORM_data4;
10643         case 32:
10644           return DW_FORM_data8;
10645         case 64:
10646         default:
10647           return DW_FORM_block1;
10648         }
10649     case dw_val_class_vec:
10650       switch (constant_size (a->dw_attr_val.v.val_vec.length
10651                              * a->dw_attr_val.v.val_vec.elt_size))
10652         {
10653         case 1:
10654           return DW_FORM_block1;
10655         case 2:
10656           return DW_FORM_block2;
10657         case 4:
10658           return DW_FORM_block4;
10659         default:
10660           gcc_unreachable ();
10661         }
10662     case dw_val_class_flag:
10663       if (dwarf_version >= 4)
10664         {
10665           /* Currently all add_AT_flag calls pass in 1 as last argument,
10666              so DW_FORM_flag_present can be used.  If that ever changes,
10667              we'll need to use DW_FORM_flag and have some optimization
10668              in build_abbrev_table that will change those to
10669              DW_FORM_flag_present if it is set to 1 in all DIEs using
10670              the same abbrev entry.  */
10671           gcc_assert (a->dw_attr_val.v.val_flag == 1);
10672           return DW_FORM_flag_present;
10673         }
10674       return DW_FORM_flag;
10675     case dw_val_class_die_ref:
10676       if (AT_ref_external (a))
10677         return dwarf_version >= 4 ? DW_FORM_sig8 : DW_FORM_ref_addr;
10678       else
10679         return DW_FORM_ref;
10680     case dw_val_class_fde_ref:
10681       return DW_FORM_data;
10682     case dw_val_class_lbl_id:
10683       return DW_FORM_addr;
10684     case dw_val_class_lineptr:
10685     case dw_val_class_macptr:
10686       return dwarf_version >= 4 ? DW_FORM_sec_offset : DW_FORM_data;
10687     case dw_val_class_str:
10688       return AT_string_form (a);
10689     case dw_val_class_file:
10690       switch (constant_size (maybe_emit_file (a->dw_attr_val.v.val_file)))
10691         {
10692         case 1:
10693           return DW_FORM_data1;
10694         case 2:
10695           return DW_FORM_data2;
10696         case 4:
10697           return DW_FORM_data4;
10698         default:
10699           gcc_unreachable ();
10700         }
10701
10702     case dw_val_class_data8:
10703       return DW_FORM_data8;
10704
10705     default:
10706       gcc_unreachable ();
10707     }
10708 }
10709
10710 /* Output the encoding of an attribute value.  */
10711
10712 static void
10713 output_value_format (dw_attr_ref a)
10714 {
10715   enum dwarf_form form = value_format (a);
10716
10717   dw2_asm_output_data_uleb128 (form, "(%s)", dwarf_form_name (form));
10718 }
10719
10720 /* Output the .debug_abbrev section which defines the DIE abbreviation
10721    table.  */
10722
10723 static void
10724 output_abbrev_section (void)
10725 {
10726   unsigned long abbrev_id;
10727
10728   for (abbrev_id = 1; abbrev_id < abbrev_die_table_in_use; ++abbrev_id)
10729     {
10730       dw_die_ref abbrev = abbrev_die_table[abbrev_id];
10731       unsigned ix;
10732       dw_attr_ref a_attr;
10733
10734       dw2_asm_output_data_uleb128 (abbrev_id, "(abbrev code)");
10735       dw2_asm_output_data_uleb128 (abbrev->die_tag, "(TAG: %s)",
10736                                    dwarf_tag_name (abbrev->die_tag));
10737
10738       if (abbrev->die_child != NULL)
10739         dw2_asm_output_data (1, DW_children_yes, "DW_children_yes");
10740       else
10741         dw2_asm_output_data (1, DW_children_no, "DW_children_no");
10742
10743       for (ix = 0; VEC_iterate (dw_attr_node, abbrev->die_attr, ix, a_attr);
10744            ix++)
10745         {
10746           dw2_asm_output_data_uleb128 (a_attr->dw_attr, "(%s)",
10747                                        dwarf_attr_name (a_attr->dw_attr));
10748           output_value_format (a_attr);
10749         }
10750
10751       dw2_asm_output_data (1, 0, NULL);
10752       dw2_asm_output_data (1, 0, NULL);
10753     }
10754
10755   /* Terminate the table.  */
10756   dw2_asm_output_data (1, 0, NULL);
10757 }
10758
10759 /* Output a symbol we can use to refer to this DIE from another CU.  */
10760
10761 static inline void
10762 output_die_symbol (dw_die_ref die)
10763 {
10764   char *sym = die->die_id.die_symbol;
10765
10766   if (sym == 0)
10767     return;
10768
10769   if (strncmp (sym, DIE_LABEL_PREFIX, sizeof (DIE_LABEL_PREFIX) - 1) == 0)
10770     /* We make these global, not weak; if the target doesn't support
10771        .linkonce, it doesn't support combining the sections, so debugging
10772        will break.  */
10773     targetm.asm_out.globalize_label (asm_out_file, sym);
10774
10775   ASM_OUTPUT_LABEL (asm_out_file, sym);
10776 }
10777
10778 /* Return a new location list, given the begin and end range, and the
10779    expression.  */
10780
10781 static inline dw_loc_list_ref
10782 new_loc_list (dw_loc_descr_ref expr, const char *begin, const char *end,
10783               const char *section)
10784 {
10785   dw_loc_list_ref retlist = ggc_alloc_cleared_dw_loc_list_node ();
10786
10787   retlist->begin = begin;
10788   retlist->end = end;
10789   retlist->expr = expr;
10790   retlist->section = section;
10791
10792   return retlist;
10793 }
10794
10795 /* Generate a new internal symbol for this location list node, if it
10796    hasn't got one yet.  */
10797
10798 static inline void
10799 gen_llsym (dw_loc_list_ref list)
10800 {
10801   gcc_assert (!list->ll_symbol);
10802   list->ll_symbol = gen_internal_sym ("LLST");
10803 }
10804
10805 /* Output the location list given to us.  */
10806
10807 static void
10808 output_loc_list (dw_loc_list_ref list_head)
10809 {
10810   dw_loc_list_ref curr = list_head;
10811
10812   ASM_OUTPUT_LABEL (asm_out_file, list_head->ll_symbol);
10813
10814   /* Walk the location list, and output each range + expression.  */
10815   for (curr = list_head; curr != NULL; curr = curr->dw_loc_next)
10816     {
10817       unsigned long size;
10818       /* Don't output an entry that starts and ends at the same address.  */
10819       if (strcmp (curr->begin, curr->end) == 0)
10820         continue;
10821       if (!have_multiple_function_sections)
10822         {
10823           dw2_asm_output_delta (DWARF2_ADDR_SIZE, curr->begin, curr->section,
10824                                 "Location list begin address (%s)",
10825                                 list_head->ll_symbol);
10826           dw2_asm_output_delta (DWARF2_ADDR_SIZE, curr->end, curr->section,
10827                                 "Location list end address (%s)",
10828                                 list_head->ll_symbol);
10829         }
10830       else
10831         {
10832           dw2_asm_output_addr (DWARF2_ADDR_SIZE, curr->begin,
10833                                "Location list begin address (%s)",
10834                                list_head->ll_symbol);
10835           dw2_asm_output_addr (DWARF2_ADDR_SIZE, curr->end,
10836                                "Location list end address (%s)",
10837                                list_head->ll_symbol);
10838         }
10839       size = size_of_locs (curr->expr);
10840
10841       /* Output the block length for this list of location operations.  */
10842       gcc_assert (size <= 0xffff);
10843       dw2_asm_output_data (2, size, "%s", "Location expression size");
10844
10845       output_loc_sequence (curr->expr);
10846     }
10847
10848   dw2_asm_output_data (DWARF2_ADDR_SIZE, 0,
10849                        "Location list terminator begin (%s)",
10850                        list_head->ll_symbol);
10851   dw2_asm_output_data (DWARF2_ADDR_SIZE, 0,
10852                        "Location list terminator end (%s)",
10853                        list_head->ll_symbol);
10854 }
10855
10856 /* Output a type signature.  */
10857
10858 static inline void
10859 output_signature (const char *sig, const char *name)
10860 {
10861   int i;
10862
10863   for (i = 0; i < DWARF_TYPE_SIGNATURE_SIZE; i++)
10864     dw2_asm_output_data (1, sig[i], i == 0 ? "%s" : NULL, name);
10865 }
10866
10867 /* Output the DIE and its attributes.  Called recursively to generate
10868    the definitions of each child DIE.  */
10869
10870 static void
10871 output_die (dw_die_ref die)
10872 {
10873   dw_attr_ref a;
10874   dw_die_ref c;
10875   unsigned long size;
10876   unsigned ix;
10877
10878   /* If someone in another CU might refer to us, set up a symbol for
10879      them to point to.  */
10880   if (dwarf_version < 4 && die->die_id.die_symbol)
10881     output_die_symbol (die);
10882
10883   dw2_asm_output_data_uleb128 (die->die_abbrev, "(DIE (%#lx) %s)",
10884                                (unsigned long)die->die_offset,
10885                                dwarf_tag_name (die->die_tag));
10886
10887   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
10888     {
10889       const char *name = dwarf_attr_name (a->dw_attr);
10890
10891       switch (AT_class (a))
10892         {
10893         case dw_val_class_addr:
10894           dw2_asm_output_addr_rtx (DWARF2_ADDR_SIZE, AT_addr (a), "%s", name);
10895           break;
10896
10897         case dw_val_class_offset:
10898           dw2_asm_output_data (DWARF_OFFSET_SIZE, a->dw_attr_val.v.val_offset,
10899                                "%s", name);
10900           break;
10901
10902         case dw_val_class_range_list:
10903           {
10904             char *p = strchr (ranges_section_label, '\0');
10905
10906             sprintf (p, "+" HOST_WIDE_INT_PRINT_HEX,
10907                      a->dw_attr_val.v.val_offset);
10908             dw2_asm_output_offset (DWARF_OFFSET_SIZE, ranges_section_label,
10909                                    debug_ranges_section, "%s", name);
10910             *p = '\0';
10911           }
10912           break;
10913
10914         case dw_val_class_loc:
10915           size = size_of_locs (AT_loc (a));
10916
10917           /* Output the block length for this list of location operations.  */
10918           if (dwarf_version >= 4)
10919             dw2_asm_output_data_uleb128 (size, "%s", name);
10920           else
10921             dw2_asm_output_data (constant_size (size), size, "%s", name);
10922
10923           output_loc_sequence (AT_loc (a));
10924           break;
10925
10926         case dw_val_class_const:
10927           /* ??? It would be slightly more efficient to use a scheme like is
10928              used for unsigned constants below, but gdb 4.x does not sign
10929              extend.  Gdb 5.x does sign extend.  */
10930           dw2_asm_output_data_sleb128 (AT_int (a), "%s", name);
10931           break;
10932
10933         case dw_val_class_unsigned_const:
10934           dw2_asm_output_data (constant_size (AT_unsigned (a)),
10935                                AT_unsigned (a), "%s", name);
10936           break;
10937
10938         case dw_val_class_const_double:
10939           {
10940             unsigned HOST_WIDE_INT first, second;
10941
10942             if (HOST_BITS_PER_WIDE_INT >= 64)
10943               dw2_asm_output_data (1,
10944                                    2 * HOST_BITS_PER_WIDE_INT
10945                                    / HOST_BITS_PER_CHAR,
10946                                    NULL);
10947
10948             if (WORDS_BIG_ENDIAN)
10949               {
10950                 first = a->dw_attr_val.v.val_double.high;
10951                 second = a->dw_attr_val.v.val_double.low;
10952               }
10953             else
10954               {
10955                 first = a->dw_attr_val.v.val_double.low;
10956                 second = a->dw_attr_val.v.val_double.high;
10957               }
10958
10959             dw2_asm_output_data (HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR,
10960                                  first, name);
10961             dw2_asm_output_data (HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR,
10962                                  second, NULL);
10963           }
10964           break;
10965
10966         case dw_val_class_vec:
10967           {
10968             unsigned int elt_size = a->dw_attr_val.v.val_vec.elt_size;
10969             unsigned int len = a->dw_attr_val.v.val_vec.length;
10970             unsigned int i;
10971             unsigned char *p;
10972
10973             dw2_asm_output_data (constant_size (len * elt_size),
10974                                  len * elt_size, "%s", name);
10975             if (elt_size > sizeof (HOST_WIDE_INT))
10976               {
10977                 elt_size /= 2;
10978                 len *= 2;
10979               }
10980             for (i = 0, p = a->dw_attr_val.v.val_vec.array;
10981                  i < len;
10982                  i++, p += elt_size)
10983               dw2_asm_output_data (elt_size, extract_int (p, elt_size),
10984                                    "fp or vector constant word %u", i);
10985             break;
10986           }
10987
10988         case dw_val_class_flag:
10989           if (dwarf_version >= 4)
10990             {
10991               /* Currently all add_AT_flag calls pass in 1 as last argument,
10992                  so DW_FORM_flag_present can be used.  If that ever changes,
10993                  we'll need to use DW_FORM_flag and have some optimization
10994                  in build_abbrev_table that will change those to
10995                  DW_FORM_flag_present if it is set to 1 in all DIEs using
10996                  the same abbrev entry.  */
10997               gcc_assert (AT_flag (a) == 1);
10998               if (flag_debug_asm)
10999                 fprintf (asm_out_file, "\t\t\t%s %s\n",
11000                          ASM_COMMENT_START, name);
11001               break;
11002             }
11003           dw2_asm_output_data (1, AT_flag (a), "%s", name);
11004           break;
11005
11006         case dw_val_class_loc_list:
11007           {
11008             char *sym = AT_loc_list (a)->ll_symbol;
11009
11010             gcc_assert (sym);
11011             dw2_asm_output_offset (DWARF_OFFSET_SIZE, sym, debug_loc_section,
11012                                    "%s", name);
11013           }
11014           break;
11015
11016         case dw_val_class_die_ref:
11017           if (AT_ref_external (a))
11018             {
11019               if (dwarf_version >= 4)
11020                 {
11021                   comdat_type_node_ref type_node =
11022                     AT_ref (a)->die_id.die_type_node;
11023
11024                   gcc_assert (type_node);
11025                   output_signature (type_node->signature, name);
11026                 }
11027               else
11028                 {
11029                   char *sym = AT_ref (a)->die_id.die_symbol;
11030                   int size;
11031
11032                   gcc_assert (sym);
11033                   /* In DWARF2, DW_FORM_ref_addr is sized by target address
11034                      length, whereas in DWARF3 it's always sized as an
11035                      offset.  */
11036                   if (dwarf_version == 2)
11037                     size = DWARF2_ADDR_SIZE;
11038                   else
11039                     size = DWARF_OFFSET_SIZE;
11040                   dw2_asm_output_offset (size, sym, debug_info_section, "%s",
11041                                          name);
11042                 }
11043             }
11044           else
11045             {
11046               gcc_assert (AT_ref (a)->die_offset);
11047               dw2_asm_output_data (DWARF_OFFSET_SIZE, AT_ref (a)->die_offset,
11048                                    "%s", name);
11049             }
11050           break;
11051
11052         case dw_val_class_fde_ref:
11053           {
11054             char l1[20];
11055
11056             ASM_GENERATE_INTERNAL_LABEL (l1, FDE_LABEL,
11057                                          a->dw_attr_val.v.val_fde_index * 2);
11058             dw2_asm_output_offset (DWARF_OFFSET_SIZE, l1, debug_frame_section,
11059                                    "%s", name);
11060           }
11061           break;
11062
11063         case dw_val_class_vms_delta:
11064           dw2_asm_output_vms_delta (DWARF_OFFSET_SIZE,
11065                                     AT_vms_delta2 (a), AT_vms_delta1 (a),
11066                                     "%s", name);
11067           break;
11068
11069         case dw_val_class_lbl_id:
11070           dw2_asm_output_addr (DWARF2_ADDR_SIZE, AT_lbl (a), "%s", name);
11071           break;
11072
11073         case dw_val_class_lineptr:
11074           dw2_asm_output_offset (DWARF_OFFSET_SIZE, AT_lbl (a),
11075                                  debug_line_section, "%s", name);
11076           break;
11077
11078         case dw_val_class_macptr:
11079           dw2_asm_output_offset (DWARF_OFFSET_SIZE, AT_lbl (a),
11080                                  debug_macinfo_section, "%s", name);
11081           break;
11082
11083         case dw_val_class_str:
11084           if (AT_string_form (a) == DW_FORM_strp)
11085             dw2_asm_output_offset (DWARF_OFFSET_SIZE,
11086                                    a->dw_attr_val.v.val_str->label,
11087                                    debug_str_section,
11088                                    "%s: \"%s\"", name, AT_string (a));
11089           else
11090             dw2_asm_output_nstring (AT_string (a), -1, "%s", name);
11091           break;
11092
11093         case dw_val_class_file:
11094           {
11095             int f = maybe_emit_file (a->dw_attr_val.v.val_file);
11096
11097             dw2_asm_output_data (constant_size (f), f, "%s (%s)", name,
11098                                  a->dw_attr_val.v.val_file->filename);
11099             break;
11100           }
11101
11102         case dw_val_class_data8:
11103           {
11104             int i;
11105
11106             for (i = 0; i < 8; i++)
11107               dw2_asm_output_data (1, a->dw_attr_val.v.val_data8[i],
11108                                    i == 0 ? "%s" : NULL, name);
11109             break;
11110           }
11111
11112         default:
11113           gcc_unreachable ();
11114         }
11115     }
11116
11117   FOR_EACH_CHILD (die, c, output_die (c));
11118
11119   /* Add null byte to terminate sibling list.  */
11120   if (die->die_child != NULL)
11121     dw2_asm_output_data (1, 0, "end of children of DIE %#lx",
11122                          (unsigned long) die->die_offset);
11123 }
11124
11125 /* Output the compilation unit that appears at the beginning of the
11126    .debug_info section, and precedes the DIE descriptions.  */
11127
11128 static void
11129 output_compilation_unit_header (void)
11130 {
11131   int ver = dwarf_version;
11132
11133   if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
11134     dw2_asm_output_data (4, 0xffffffff,
11135       "Initial length escape value indicating 64-bit DWARF extension");
11136   dw2_asm_output_data (DWARF_OFFSET_SIZE,
11137                        next_die_offset - DWARF_INITIAL_LENGTH_SIZE,
11138                        "Length of Compilation Unit Info");
11139   dw2_asm_output_data (2, ver, "DWARF version number");
11140   dw2_asm_output_offset (DWARF_OFFSET_SIZE, abbrev_section_label,
11141                          debug_abbrev_section,
11142                          "Offset Into Abbrev. Section");
11143   dw2_asm_output_data (1, DWARF2_ADDR_SIZE, "Pointer Size (in bytes)");
11144 }
11145
11146 /* Output the compilation unit DIE and its children.  */
11147
11148 static void
11149 output_comp_unit (dw_die_ref die, int output_if_empty)
11150 {
11151   const char *secname;
11152   char *oldsym, *tmp;
11153
11154   /* Unless we are outputting main CU, we may throw away empty ones.  */
11155   if (!output_if_empty && die->die_child == NULL)
11156     return;
11157
11158   /* Even if there are no children of this DIE, we must output the information
11159      about the compilation unit.  Otherwise, on an empty translation unit, we
11160      will generate a present, but empty, .debug_info section.  IRIX 6.5 `nm'
11161      will then complain when examining the file.  First mark all the DIEs in
11162      this CU so we know which get local refs.  */
11163   mark_dies (die);
11164
11165   build_abbrev_table (die);
11166
11167   /* Initialize the beginning DIE offset - and calculate sizes/offsets.  */
11168   next_die_offset = DWARF_COMPILE_UNIT_HEADER_SIZE;
11169   calc_die_sizes (die);
11170
11171   oldsym = die->die_id.die_symbol;
11172   if (oldsym)
11173     {
11174       tmp = XALLOCAVEC (char, strlen (oldsym) + 24);
11175
11176       sprintf (tmp, ".gnu.linkonce.wi.%s", oldsym);
11177       secname = tmp;
11178       die->die_id.die_symbol = NULL;
11179       switch_to_section (get_section (secname, SECTION_DEBUG, NULL));
11180     }
11181   else
11182     switch_to_section (debug_info_section);
11183
11184   /* Output debugging information.  */
11185   output_compilation_unit_header ();
11186   output_die (die);
11187
11188   /* Leave the marks on the main CU, so we can check them in
11189      output_pubnames.  */
11190   if (oldsym)
11191     {
11192       unmark_dies (die);
11193       die->die_id.die_symbol = oldsym;
11194     }
11195 }
11196
11197 /* Output a comdat type unit DIE and its children.  */
11198
11199 static void
11200 output_comdat_type_unit (comdat_type_node *node)
11201 {
11202   const char *secname;
11203   char *tmp;
11204   int i;
11205 #if defined (OBJECT_FORMAT_ELF)
11206   tree comdat_key;
11207 #endif
11208
11209   /* First mark all the DIEs in this CU so we know which get local refs.  */
11210   mark_dies (node->root_die);
11211
11212   build_abbrev_table (node->root_die);
11213
11214   /* Initialize the beginning DIE offset - and calculate sizes/offsets.  */
11215   next_die_offset = DWARF_COMDAT_TYPE_UNIT_HEADER_SIZE;
11216   calc_die_sizes (node->root_die);
11217
11218 #if defined (OBJECT_FORMAT_ELF)
11219   secname = ".debug_types";
11220   tmp = XALLOCAVEC (char, 4 + DWARF_TYPE_SIGNATURE_SIZE * 2);
11221   sprintf (tmp, "wt.");
11222   for (i = 0; i < DWARF_TYPE_SIGNATURE_SIZE; i++)
11223     sprintf (tmp + 3 + i * 2, "%02x", node->signature[i] & 0xff);
11224   comdat_key = get_identifier (tmp);
11225   targetm.asm_out.named_section (secname,
11226                                  SECTION_DEBUG | SECTION_LINKONCE,
11227                                  comdat_key);
11228 #else
11229   tmp = XALLOCAVEC (char, 18 + DWARF_TYPE_SIGNATURE_SIZE * 2);
11230   sprintf (tmp, ".gnu.linkonce.wt.");
11231   for (i = 0; i < DWARF_TYPE_SIGNATURE_SIZE; i++)
11232     sprintf (tmp + 17 + i * 2, "%02x", node->signature[i] & 0xff);
11233   secname = tmp;
11234   switch_to_section (get_section (secname, SECTION_DEBUG, NULL));
11235 #endif
11236
11237   /* Output debugging information.  */
11238   output_compilation_unit_header ();
11239   output_signature (node->signature, "Type Signature");
11240   dw2_asm_output_data (DWARF_OFFSET_SIZE, node->type_die->die_offset,
11241                        "Offset to Type DIE");
11242   output_die (node->root_die);
11243
11244   unmark_dies (node->root_die);
11245 }
11246
11247 /* Return the DWARF2/3 pubname associated with a decl.  */
11248
11249 static const char *
11250 dwarf2_name (tree decl, int scope)
11251 {
11252   return lang_hooks.dwarf_name (decl, scope ? 1 : 0);
11253 }
11254
11255 /* Add a new entry to .debug_pubnames if appropriate.  */
11256
11257 static void
11258 add_pubname_string (const char *str, dw_die_ref die)
11259 {
11260   if (targetm.want_debug_pub_sections)
11261     {
11262       pubname_entry e;
11263
11264       e.die = die;
11265       e.name = xstrdup (str);
11266       VEC_safe_push (pubname_entry, gc, pubname_table, &e);
11267     }
11268 }
11269
11270 static void
11271 add_pubname (tree decl, dw_die_ref die)
11272 {
11273   if (targetm.want_debug_pub_sections && TREE_PUBLIC (decl))
11274     {
11275       const char *name = dwarf2_name (decl, 1);
11276       if (name)
11277         add_pubname_string (name, die);
11278     }
11279 }
11280
11281 /* Add a new entry to .debug_pubtypes if appropriate.  */
11282
11283 static void
11284 add_pubtype (tree decl, dw_die_ref die)
11285 {
11286   pubname_entry e;
11287
11288   if (!targetm.want_debug_pub_sections)
11289     return;
11290
11291   e.name = NULL;
11292   if ((TREE_PUBLIC (decl)
11293        || die->die_parent == comp_unit_die)
11294       && (die->die_tag == DW_TAG_typedef || COMPLETE_TYPE_P (decl)))
11295     {
11296       e.die = die;
11297       if (TYPE_P (decl))
11298         {
11299           if (TYPE_NAME (decl))
11300             {
11301               if (TREE_CODE (TYPE_NAME (decl)) == IDENTIFIER_NODE)
11302                 e.name = IDENTIFIER_POINTER (TYPE_NAME (decl));
11303               else if (TREE_CODE (TYPE_NAME (decl)) == TYPE_DECL
11304                        && DECL_NAME (TYPE_NAME (decl)))
11305                 e.name = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (decl)));
11306               else
11307                e.name = xstrdup ((const char *) get_AT_string (die, DW_AT_name));
11308             }
11309         }
11310       else
11311         {
11312           e.name = dwarf2_name (decl, 1);
11313           if (e.name)
11314             e.name = xstrdup (e.name);
11315         }
11316
11317       /* If we don't have a name for the type, there's no point in adding
11318          it to the table.  */
11319       if (e.name && e.name[0] != '\0')
11320         VEC_safe_push (pubname_entry, gc, pubtype_table, &e);
11321     }
11322 }
11323
11324 /* Output the public names table used to speed up access to externally
11325    visible names; or the public types table used to find type definitions.  */
11326
11327 static void
11328 output_pubnames (VEC (pubname_entry, gc) * names)
11329 {
11330   unsigned i;
11331   unsigned long pubnames_length = size_of_pubnames (names);
11332   pubname_ref pub;
11333
11334   if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
11335     dw2_asm_output_data (4, 0xffffffff,
11336       "Initial length escape value indicating 64-bit DWARF extension");
11337   if (names == pubname_table)
11338     dw2_asm_output_data (DWARF_OFFSET_SIZE, pubnames_length,
11339                          "Length of Public Names Info");
11340   else
11341     dw2_asm_output_data (DWARF_OFFSET_SIZE, pubnames_length,
11342                          "Length of Public Type Names Info");
11343   /* Version number for pubnames/pubtypes is still 2, even in DWARF3.  */
11344   dw2_asm_output_data (2, 2, "DWARF Version");
11345   dw2_asm_output_offset (DWARF_OFFSET_SIZE, debug_info_section_label,
11346                          debug_info_section,
11347                          "Offset of Compilation Unit Info");
11348   dw2_asm_output_data (DWARF_OFFSET_SIZE, next_die_offset,
11349                        "Compilation Unit Length");
11350
11351   for (i = 0; VEC_iterate (pubname_entry, names, i, pub); i++)
11352     {
11353       /* We shouldn't see pubnames for DIEs outside of the main CU.  */
11354       if (names == pubname_table)
11355         gcc_assert (pub->die->die_mark);
11356
11357       if (names != pubtype_table
11358           || pub->die->die_offset != 0
11359           || !flag_eliminate_unused_debug_types)
11360         {
11361           dw2_asm_output_data (DWARF_OFFSET_SIZE, pub->die->die_offset,
11362                                "DIE offset");
11363
11364           dw2_asm_output_nstring (pub->name, -1, "external name");
11365         }
11366     }
11367
11368   dw2_asm_output_data (DWARF_OFFSET_SIZE, 0, NULL);
11369 }
11370
11371 /* Add a new entry to .debug_aranges if appropriate.  */
11372
11373 static void
11374 add_arange (tree decl, dw_die_ref die)
11375 {
11376   if (! DECL_SECTION_NAME (decl))
11377     return;
11378
11379   if (arange_table_in_use == arange_table_allocated)
11380     {
11381       arange_table_allocated += ARANGE_TABLE_INCREMENT;
11382       arange_table = GGC_RESIZEVEC (dw_die_ref, arange_table,
11383                                     arange_table_allocated);
11384       memset (arange_table + arange_table_in_use, 0,
11385               ARANGE_TABLE_INCREMENT * sizeof (dw_die_ref));
11386     }
11387
11388   arange_table[arange_table_in_use++] = die;
11389 }
11390
11391 /* Output the information that goes into the .debug_aranges table.
11392    Namely, define the beginning and ending address range of the
11393    text section generated for this compilation unit.  */
11394
11395 static void
11396 output_aranges (void)
11397 {
11398   unsigned i;
11399   unsigned long aranges_length = size_of_aranges ();
11400
11401   if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
11402     dw2_asm_output_data (4, 0xffffffff,
11403       "Initial length escape value indicating 64-bit DWARF extension");
11404   dw2_asm_output_data (DWARF_OFFSET_SIZE, aranges_length,
11405                        "Length of Address Ranges Info");
11406   /* Version number for aranges is still 2, even in DWARF3.  */
11407   dw2_asm_output_data (2, 2, "DWARF Version");
11408   dw2_asm_output_offset (DWARF_OFFSET_SIZE, debug_info_section_label,
11409                          debug_info_section,
11410                          "Offset of Compilation Unit Info");
11411   dw2_asm_output_data (1, DWARF2_ADDR_SIZE, "Size of Address");
11412   dw2_asm_output_data (1, 0, "Size of Segment Descriptor");
11413
11414   /* We need to align to twice the pointer size here.  */
11415   if (DWARF_ARANGES_PAD_SIZE)
11416     {
11417       /* Pad using a 2 byte words so that padding is correct for any
11418          pointer size.  */
11419       dw2_asm_output_data (2, 0, "Pad to %d byte boundary",
11420                            2 * DWARF2_ADDR_SIZE);
11421       for (i = 2; i < (unsigned) DWARF_ARANGES_PAD_SIZE; i += 2)
11422         dw2_asm_output_data (2, 0, NULL);
11423     }
11424
11425   /* It is necessary not to output these entries if the sections were
11426      not used; if the sections were not used, the length will be 0 and
11427      the address may end up as 0 if the section is discarded by ld
11428      --gc-sections, leaving an invalid (0, 0) entry that can be
11429      confused with the terminator.  */
11430   if (text_section_used)
11431     {
11432       dw2_asm_output_addr (DWARF2_ADDR_SIZE, text_section_label, "Address");
11433       dw2_asm_output_delta (DWARF2_ADDR_SIZE, text_end_label,
11434                             text_section_label, "Length");
11435     }
11436   if (cold_text_section_used)
11437     {
11438       dw2_asm_output_addr (DWARF2_ADDR_SIZE, cold_text_section_label,
11439                            "Address");
11440       dw2_asm_output_delta (DWARF2_ADDR_SIZE, cold_end_label,
11441                             cold_text_section_label, "Length");
11442     }
11443
11444   for (i = 0; i < arange_table_in_use; i++)
11445     {
11446       dw_die_ref die = arange_table[i];
11447
11448       /* We shouldn't see aranges for DIEs outside of the main CU.  */
11449       gcc_assert (die->die_mark);
11450
11451       if (die->die_tag == DW_TAG_subprogram)
11452         {
11453           dw2_asm_output_addr (DWARF2_ADDR_SIZE, get_AT_low_pc (die),
11454                                "Address");
11455           dw2_asm_output_delta (DWARF2_ADDR_SIZE, get_AT_hi_pc (die),
11456                                 get_AT_low_pc (die), "Length");
11457         }
11458       else
11459         {
11460           /* A static variable; extract the symbol from DW_AT_location.
11461              Note that this code isn't currently hit, as we only emit
11462              aranges for functions (jason 9/23/99).  */
11463           dw_attr_ref a = get_AT (die, DW_AT_location);
11464           dw_loc_descr_ref loc;
11465
11466           gcc_assert (a && AT_class (a) == dw_val_class_loc);
11467
11468           loc = AT_loc (a);
11469           gcc_assert (loc->dw_loc_opc == DW_OP_addr);
11470
11471           dw2_asm_output_addr_rtx (DWARF2_ADDR_SIZE,
11472                                    loc->dw_loc_oprnd1.v.val_addr, "Address");
11473           dw2_asm_output_data (DWARF2_ADDR_SIZE,
11474                                get_AT_unsigned (die, DW_AT_byte_size),
11475                                "Length");
11476         }
11477     }
11478
11479   /* Output the terminator words.  */
11480   dw2_asm_output_data (DWARF2_ADDR_SIZE, 0, NULL);
11481   dw2_asm_output_data (DWARF2_ADDR_SIZE, 0, NULL);
11482 }
11483
11484 /* Add a new entry to .debug_ranges.  Return the offset at which it
11485    was placed.  */
11486
11487 static unsigned int
11488 add_ranges_num (int num)
11489 {
11490   unsigned int in_use = ranges_table_in_use;
11491
11492   if (in_use == ranges_table_allocated)
11493     {
11494       ranges_table_allocated += RANGES_TABLE_INCREMENT;
11495       ranges_table = GGC_RESIZEVEC (struct dw_ranges_struct, ranges_table,
11496                                     ranges_table_allocated);
11497       memset (ranges_table + ranges_table_in_use, 0,
11498               RANGES_TABLE_INCREMENT * sizeof (struct dw_ranges_struct));
11499     }
11500
11501   ranges_table[in_use].num = num;
11502   ranges_table_in_use = in_use + 1;
11503
11504   return in_use * 2 * DWARF2_ADDR_SIZE;
11505 }
11506
11507 /* Add a new entry to .debug_ranges corresponding to a block, or a
11508    range terminator if BLOCK is NULL.  */
11509
11510 static unsigned int
11511 add_ranges (const_tree block)
11512 {
11513   return add_ranges_num (block ? BLOCK_NUMBER (block) : 0);
11514 }
11515
11516 /* Add a new entry to .debug_ranges corresponding to a pair of
11517    labels.  */
11518
11519 static void
11520 add_ranges_by_labels (dw_die_ref die, const char *begin, const char *end,
11521                       bool *added)
11522 {
11523   unsigned int in_use = ranges_by_label_in_use;
11524   unsigned int offset;
11525
11526   if (in_use == ranges_by_label_allocated)
11527     {
11528       ranges_by_label_allocated += RANGES_TABLE_INCREMENT;
11529       ranges_by_label = GGC_RESIZEVEC (struct dw_ranges_by_label_struct,
11530                                        ranges_by_label,
11531                                        ranges_by_label_allocated);
11532       memset (ranges_by_label + ranges_by_label_in_use, 0,
11533               RANGES_TABLE_INCREMENT
11534               * sizeof (struct dw_ranges_by_label_struct));
11535     }
11536
11537   ranges_by_label[in_use].begin = begin;
11538   ranges_by_label[in_use].end = end;
11539   ranges_by_label_in_use = in_use + 1;
11540
11541   offset = add_ranges_num (-(int)in_use - 1);
11542   if (!*added)
11543     {
11544       add_AT_range_list (die, DW_AT_ranges, offset);
11545       *added = true;
11546     }
11547 }
11548
11549 static void
11550 output_ranges (void)
11551 {
11552   unsigned i;
11553   static const char *const start_fmt = "Offset %#x";
11554   const char *fmt = start_fmt;
11555
11556   for (i = 0; i < ranges_table_in_use; i++)
11557     {
11558       int block_num = ranges_table[i].num;
11559
11560       if (block_num > 0)
11561         {
11562           char blabel[MAX_ARTIFICIAL_LABEL_BYTES];
11563           char elabel[MAX_ARTIFICIAL_LABEL_BYTES];
11564
11565           ASM_GENERATE_INTERNAL_LABEL (blabel, BLOCK_BEGIN_LABEL, block_num);
11566           ASM_GENERATE_INTERNAL_LABEL (elabel, BLOCK_END_LABEL, block_num);
11567
11568           /* If all code is in the text section, then the compilation
11569              unit base address defaults to DW_AT_low_pc, which is the
11570              base of the text section.  */
11571           if (!have_multiple_function_sections)
11572             {
11573               dw2_asm_output_delta (DWARF2_ADDR_SIZE, blabel,
11574                                     text_section_label,
11575                                     fmt, i * 2 * DWARF2_ADDR_SIZE);
11576               dw2_asm_output_delta (DWARF2_ADDR_SIZE, elabel,
11577                                     text_section_label, NULL);
11578             }
11579
11580           /* Otherwise, the compilation unit base address is zero,
11581              which allows us to use absolute addresses, and not worry
11582              about whether the target supports cross-section
11583              arithmetic.  */
11584           else
11585             {
11586               dw2_asm_output_addr (DWARF2_ADDR_SIZE, blabel,
11587                                    fmt, i * 2 * DWARF2_ADDR_SIZE);
11588               dw2_asm_output_addr (DWARF2_ADDR_SIZE, elabel, NULL);
11589             }
11590
11591           fmt = NULL;
11592         }
11593
11594       /* Negative block_num stands for an index into ranges_by_label.  */
11595       else if (block_num < 0)
11596         {
11597           int lab_idx = - block_num - 1;
11598
11599           if (!have_multiple_function_sections)
11600             {
11601               gcc_unreachable ();
11602 #if 0
11603               /* If we ever use add_ranges_by_labels () for a single
11604                  function section, all we have to do is to take out
11605                  the #if 0 above.  */
11606               dw2_asm_output_delta (DWARF2_ADDR_SIZE,
11607                                     ranges_by_label[lab_idx].begin,
11608                                     text_section_label,
11609                                     fmt, i * 2 * DWARF2_ADDR_SIZE);
11610               dw2_asm_output_delta (DWARF2_ADDR_SIZE,
11611                                     ranges_by_label[lab_idx].end,
11612                                     text_section_label, NULL);
11613 #endif
11614             }
11615           else
11616             {
11617               dw2_asm_output_addr (DWARF2_ADDR_SIZE,
11618                                    ranges_by_label[lab_idx].begin,
11619                                    fmt, i * 2 * DWARF2_ADDR_SIZE);
11620               dw2_asm_output_addr (DWARF2_ADDR_SIZE,
11621                                    ranges_by_label[lab_idx].end,
11622                                    NULL);
11623             }
11624         }
11625       else
11626         {
11627           dw2_asm_output_data (DWARF2_ADDR_SIZE, 0, NULL);
11628           dw2_asm_output_data (DWARF2_ADDR_SIZE, 0, NULL);
11629           fmt = start_fmt;
11630         }
11631     }
11632 }
11633
11634 /* Data structure containing information about input files.  */
11635 struct file_info
11636 {
11637   const char *path;     /* Complete file name.  */
11638   const char *fname;    /* File name part.  */
11639   int length;           /* Length of entire string.  */
11640   struct dwarf_file_data * file_idx;    /* Index in input file table.  */
11641   int dir_idx;          /* Index in directory table.  */
11642 };
11643
11644 /* Data structure containing information about directories with source
11645    files.  */
11646 struct dir_info
11647 {
11648   const char *path;     /* Path including directory name.  */
11649   int length;           /* Path length.  */
11650   int prefix;           /* Index of directory entry which is a prefix.  */
11651   int count;            /* Number of files in this directory.  */
11652   int dir_idx;          /* Index of directory used as base.  */
11653 };
11654
11655 /* Callback function for file_info comparison.  We sort by looking at
11656    the directories in the path.  */
11657
11658 static int
11659 file_info_cmp (const void *p1, const void *p2)
11660 {
11661   const struct file_info *const s1 = (const struct file_info *) p1;
11662   const struct file_info *const s2 = (const struct file_info *) p2;
11663   const unsigned char *cp1;
11664   const unsigned char *cp2;
11665
11666   /* Take care of file names without directories.  We need to make sure that
11667      we return consistent values to qsort since some will get confused if
11668      we return the same value when identical operands are passed in opposite
11669      orders.  So if neither has a directory, return 0 and otherwise return
11670      1 or -1 depending on which one has the directory.  */
11671   if ((s1->path == s1->fname || s2->path == s2->fname))
11672     return (s2->path == s2->fname) - (s1->path == s1->fname);
11673
11674   cp1 = (const unsigned char *) s1->path;
11675   cp2 = (const unsigned char *) s2->path;
11676
11677   while (1)
11678     {
11679       ++cp1;
11680       ++cp2;
11681       /* Reached the end of the first path?  If so, handle like above.  */
11682       if ((cp1 == (const unsigned char *) s1->fname)
11683           || (cp2 == (const unsigned char *) s2->fname))
11684         return ((cp2 == (const unsigned char *) s2->fname)
11685                 - (cp1 == (const unsigned char *) s1->fname));
11686
11687       /* Character of current path component the same?  */
11688       else if (*cp1 != *cp2)
11689         return *cp1 - *cp2;
11690     }
11691 }
11692
11693 struct file_name_acquire_data
11694 {
11695   struct file_info *files;
11696   int used_files;
11697   int max_files;
11698 };
11699
11700 /* Traversal function for the hash table.  */
11701
11702 static int
11703 file_name_acquire (void ** slot, void *data)
11704 {
11705   struct file_name_acquire_data *fnad = (struct file_name_acquire_data *) data;
11706   struct dwarf_file_data *d = (struct dwarf_file_data *) *slot;
11707   struct file_info *fi;
11708   const char *f;
11709
11710   gcc_assert (fnad->max_files >= d->emitted_number);
11711
11712   if (! d->emitted_number)
11713     return 1;
11714
11715   gcc_assert (fnad->max_files != fnad->used_files);
11716
11717   fi = fnad->files + fnad->used_files++;
11718
11719   /* Skip all leading "./".  */
11720   f = d->filename;
11721   while (f[0] == '.' && IS_DIR_SEPARATOR (f[1]))
11722     f += 2;
11723
11724   /* Create a new array entry.  */
11725   fi->path = f;
11726   fi->length = strlen (f);
11727   fi->file_idx = d;
11728
11729   /* Search for the file name part.  */
11730   f = strrchr (f, DIR_SEPARATOR);
11731 #if defined (DIR_SEPARATOR_2)
11732   {
11733     char *g = strrchr (fi->path, DIR_SEPARATOR_2);
11734
11735     if (g != NULL)
11736       {
11737         if (f == NULL || f < g)
11738           f = g;
11739       }
11740   }
11741 #endif
11742
11743   fi->fname = f == NULL ? fi->path : f + 1;
11744   return 1;
11745 }
11746
11747 /* Output the directory table and the file name table.  We try to minimize
11748    the total amount of memory needed.  A heuristic is used to avoid large
11749    slowdowns with many input files.  */
11750
11751 static void
11752 output_file_names (void)
11753 {
11754   struct file_name_acquire_data fnad;
11755   int numfiles;
11756   struct file_info *files;
11757   struct dir_info *dirs;
11758   int *saved;
11759   int *savehere;
11760   int *backmap;
11761   int ndirs;
11762   int idx_offset;
11763   int i;
11764
11765   if (!last_emitted_file)
11766     {
11767       dw2_asm_output_data (1, 0, "End directory table");
11768       dw2_asm_output_data (1, 0, "End file name table");
11769       return;
11770     }
11771
11772   numfiles = last_emitted_file->emitted_number;
11773
11774   /* Allocate the various arrays we need.  */
11775   files = XALLOCAVEC (struct file_info, numfiles);
11776   dirs = XALLOCAVEC (struct dir_info, numfiles);
11777
11778   fnad.files = files;
11779   fnad.used_files = 0;
11780   fnad.max_files = numfiles;
11781   htab_traverse (file_table, file_name_acquire, &fnad);
11782   gcc_assert (fnad.used_files == fnad.max_files);
11783
11784   qsort (files, numfiles, sizeof (files[0]), file_info_cmp);
11785
11786   /* Find all the different directories used.  */
11787   dirs[0].path = files[0].path;
11788   dirs[0].length = files[0].fname - files[0].path;
11789   dirs[0].prefix = -1;
11790   dirs[0].count = 1;
11791   dirs[0].dir_idx = 0;
11792   files[0].dir_idx = 0;
11793   ndirs = 1;
11794
11795   for (i = 1; i < numfiles; i++)
11796     if (files[i].fname - files[i].path == dirs[ndirs - 1].length
11797         && memcmp (dirs[ndirs - 1].path, files[i].path,
11798                    dirs[ndirs - 1].length) == 0)
11799       {
11800         /* Same directory as last entry.  */
11801         files[i].dir_idx = ndirs - 1;
11802         ++dirs[ndirs - 1].count;
11803       }
11804     else
11805       {
11806         int j;
11807
11808         /* This is a new directory.  */
11809         dirs[ndirs].path = files[i].path;
11810         dirs[ndirs].length = files[i].fname - files[i].path;
11811         dirs[ndirs].count = 1;
11812         dirs[ndirs].dir_idx = ndirs;
11813         files[i].dir_idx = ndirs;
11814
11815         /* Search for a prefix.  */
11816         dirs[ndirs].prefix = -1;
11817         for (j = 0; j < ndirs; j++)
11818           if (dirs[j].length < dirs[ndirs].length
11819               && dirs[j].length > 1
11820               && (dirs[ndirs].prefix == -1
11821                   || dirs[j].length > dirs[dirs[ndirs].prefix].length)
11822               && memcmp (dirs[j].path, dirs[ndirs].path, dirs[j].length) == 0)
11823             dirs[ndirs].prefix = j;
11824
11825         ++ndirs;
11826       }
11827
11828   /* Now to the actual work.  We have to find a subset of the directories which
11829      allow expressing the file name using references to the directory table
11830      with the least amount of characters.  We do not do an exhaustive search
11831      where we would have to check out every combination of every single
11832      possible prefix.  Instead we use a heuristic which provides nearly optimal
11833      results in most cases and never is much off.  */
11834   saved = XALLOCAVEC (int, ndirs);
11835   savehere = XALLOCAVEC (int, ndirs);
11836
11837   memset (saved, '\0', ndirs * sizeof (saved[0]));
11838   for (i = 0; i < ndirs; i++)
11839     {
11840       int j;
11841       int total;
11842
11843       /* We can always save some space for the current directory.  But this
11844          does not mean it will be enough to justify adding the directory.  */
11845       savehere[i] = dirs[i].length;
11846       total = (savehere[i] - saved[i]) * dirs[i].count;
11847
11848       for (j = i + 1; j < ndirs; j++)
11849         {
11850           savehere[j] = 0;
11851           if (saved[j] < dirs[i].length)
11852             {
11853               /* Determine whether the dirs[i] path is a prefix of the
11854                  dirs[j] path.  */
11855               int k;
11856
11857               k = dirs[j].prefix;
11858               while (k != -1 && k != (int) i)
11859                 k = dirs[k].prefix;
11860
11861               if (k == (int) i)
11862                 {
11863                   /* Yes it is.  We can possibly save some memory by
11864                      writing the filenames in dirs[j] relative to
11865                      dirs[i].  */
11866                   savehere[j] = dirs[i].length;
11867                   total += (savehere[j] - saved[j]) * dirs[j].count;
11868                 }
11869             }
11870         }
11871
11872       /* Check whether we can save enough to justify adding the dirs[i]
11873          directory.  */
11874       if (total > dirs[i].length + 1)
11875         {
11876           /* It's worthwhile adding.  */
11877           for (j = i; j < ndirs; j++)
11878             if (savehere[j] > 0)
11879               {
11880                 /* Remember how much we saved for this directory so far.  */
11881                 saved[j] = savehere[j];
11882
11883                 /* Remember the prefix directory.  */
11884                 dirs[j].dir_idx = i;
11885               }
11886         }
11887     }
11888
11889   /* Emit the directory name table.  */
11890   idx_offset = dirs[0].length > 0 ? 1 : 0;
11891   for (i = 1 - idx_offset; i < ndirs; i++)
11892     dw2_asm_output_nstring (dirs[i].path,
11893                             dirs[i].length
11894                              - !DWARF2_DIR_SHOULD_END_WITH_SEPARATOR,
11895                             "Directory Entry: %#x", i + idx_offset);
11896
11897   dw2_asm_output_data (1, 0, "End directory table");
11898
11899   /* We have to emit them in the order of emitted_number since that's
11900      used in the debug info generation.  To do this efficiently we
11901      generate a back-mapping of the indices first.  */
11902   backmap = XALLOCAVEC (int, numfiles);
11903   for (i = 0; i < numfiles; i++)
11904     backmap[files[i].file_idx->emitted_number - 1] = i;
11905
11906   /* Now write all the file names.  */
11907   for (i = 0; i < numfiles; i++)
11908     {
11909       int file_idx = backmap[i];
11910       int dir_idx = dirs[files[file_idx].dir_idx].dir_idx;
11911
11912 #ifdef VMS_DEBUGGING_INFO
11913 #define MAX_VMS_VERSION_LEN 6 /* ";32768" */
11914
11915       /* Setting these fields can lead to debugger miscomparisons,
11916          but VMS Debug requires them to be set correctly.  */
11917
11918       int ver;
11919       long long cdt;
11920       long siz;
11921       int maxfilelen = strlen (files[file_idx].path)
11922                                + dirs[dir_idx].length
11923                                + MAX_VMS_VERSION_LEN + 1;
11924       char *filebuf = XALLOCAVEC (char, maxfilelen);
11925
11926       vms_file_stats_name (files[file_idx].path, 0, 0, 0, &ver);
11927       snprintf (filebuf, maxfilelen, "%s;%d",
11928                 files[file_idx].path + dirs[dir_idx].length, ver);
11929
11930       dw2_asm_output_nstring
11931         (filebuf, -1, "File Entry: %#x", (unsigned) i + 1);
11932
11933       /* Include directory index.  */
11934       dw2_asm_output_data_uleb128 (dir_idx + idx_offset, NULL);
11935
11936       /* Modification time.  */
11937       dw2_asm_output_data_uleb128
11938         ((vms_file_stats_name (files[file_idx].path, &cdt, 0, 0, 0) == 0)
11939           ? cdt : 0,
11940          NULL);
11941
11942       /* File length in bytes.  */
11943       dw2_asm_output_data_uleb128
11944         ((vms_file_stats_name (files[file_idx].path, 0, &siz, 0, 0) == 0)
11945           ? siz : 0,
11946          NULL);
11947 #else
11948       dw2_asm_output_nstring (files[file_idx].path + dirs[dir_idx].length, -1,
11949                               "File Entry: %#x", (unsigned) i + 1);
11950
11951       /* Include directory index.  */
11952       dw2_asm_output_data_uleb128 (dir_idx + idx_offset, NULL);
11953
11954       /* Modification time.  */
11955       dw2_asm_output_data_uleb128 (0, NULL);
11956
11957       /* File length in bytes.  */
11958       dw2_asm_output_data_uleb128 (0, NULL);
11959 #endif
11960     }
11961
11962   dw2_asm_output_data (1, 0, "End file name table");
11963 }
11964
11965
11966 /* Output the source line number correspondence information.  This
11967    information goes into the .debug_line section.  */
11968
11969 static void
11970 output_line_info (void)
11971 {
11972   char l1[20], l2[20], p1[20], p2[20];
11973   char line_label[MAX_ARTIFICIAL_LABEL_BYTES];
11974   char prev_line_label[MAX_ARTIFICIAL_LABEL_BYTES];
11975   unsigned opc;
11976   unsigned n_op_args;
11977   unsigned long lt_index;
11978   unsigned long current_line;
11979   long line_offset;
11980   long line_delta;
11981   unsigned long current_file;
11982   unsigned long function;
11983   int ver = dwarf_version;
11984
11985   ASM_GENERATE_INTERNAL_LABEL (l1, LINE_NUMBER_BEGIN_LABEL, 0);
11986   ASM_GENERATE_INTERNAL_LABEL (l2, LINE_NUMBER_END_LABEL, 0);
11987   ASM_GENERATE_INTERNAL_LABEL (p1, LN_PROLOG_AS_LABEL, 0);
11988   ASM_GENERATE_INTERNAL_LABEL (p2, LN_PROLOG_END_LABEL, 0);
11989
11990   if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
11991     dw2_asm_output_data (4, 0xffffffff,
11992       "Initial length escape value indicating 64-bit DWARF extension");
11993   dw2_asm_output_delta (DWARF_OFFSET_SIZE, l2, l1,
11994                         "Length of Source Line Info");
11995   ASM_OUTPUT_LABEL (asm_out_file, l1);
11996
11997   dw2_asm_output_data (2, ver, "DWARF Version");
11998   dw2_asm_output_delta (DWARF_OFFSET_SIZE, p2, p1, "Prolog Length");
11999   ASM_OUTPUT_LABEL (asm_out_file, p1);
12000
12001   /* Define the architecture-dependent minimum instruction length (in
12002    bytes).  In this implementation of DWARF, this field is used for
12003    information purposes only.  Since GCC generates assembly language,
12004    we have no a priori knowledge of how many instruction bytes are
12005    generated for each source line, and therefore can use only the
12006    DW_LNE_set_address and DW_LNS_fixed_advance_pc line information
12007    commands.  Accordingly, we fix this as `1', which is "correct
12008    enough" for all architectures, and don't let the target override.  */
12009   dw2_asm_output_data (1, 1,
12010                        "Minimum Instruction Length");
12011
12012   if (ver >= 4)
12013     dw2_asm_output_data (1, DWARF_LINE_DEFAULT_MAX_OPS_PER_INSN,
12014                          "Maximum Operations Per Instruction");
12015   dw2_asm_output_data (1, DWARF_LINE_DEFAULT_IS_STMT_START,
12016                        "Default is_stmt_start flag");
12017   dw2_asm_output_data (1, DWARF_LINE_BASE,
12018                        "Line Base Value (Special Opcodes)");
12019   dw2_asm_output_data (1, DWARF_LINE_RANGE,
12020                        "Line Range Value (Special Opcodes)");
12021   dw2_asm_output_data (1, DWARF_LINE_OPCODE_BASE,
12022                        "Special Opcode Base");
12023
12024   for (opc = 1; opc < DWARF_LINE_OPCODE_BASE; opc++)
12025     {
12026       switch (opc)
12027         {
12028         case DW_LNS_advance_pc:
12029         case DW_LNS_advance_line:
12030         case DW_LNS_set_file:
12031         case DW_LNS_set_column:
12032         case DW_LNS_fixed_advance_pc:
12033           n_op_args = 1;
12034           break;
12035         default:
12036           n_op_args = 0;
12037           break;
12038         }
12039
12040       dw2_asm_output_data (1, n_op_args, "opcode: %#x has %d args",
12041                            opc, n_op_args);
12042     }
12043
12044   /* Write out the information about the files we use.  */
12045   output_file_names ();
12046   ASM_OUTPUT_LABEL (asm_out_file, p2);
12047
12048   /* We used to set the address register to the first location in the text
12049      section here, but that didn't accomplish anything since we already
12050      have a line note for the opening brace of the first function.  */
12051
12052   /* Generate the line number to PC correspondence table, encoded as
12053      a series of state machine operations.  */
12054   current_file = 1;
12055   current_line = 1;
12056
12057   if (cfun && in_cold_section_p)
12058     strcpy (prev_line_label, crtl->subsections.cold_section_label);
12059   else
12060     strcpy (prev_line_label, text_section_label);
12061   for (lt_index = 1; lt_index < line_info_table_in_use; ++lt_index)
12062     {
12063       dw_line_info_ref line_info = &line_info_table[lt_index];
12064
12065 #if 0
12066       /* Disable this optimization for now; GDB wants to see two line notes
12067          at the beginning of a function so it can find the end of the
12068          prologue.  */
12069
12070       /* Don't emit anything for redundant notes.  Just updating the
12071          address doesn't accomplish anything, because we already assume
12072          that anything after the last address is this line.  */
12073       if (line_info->dw_line_num == current_line
12074           && line_info->dw_file_num == current_file)
12075         continue;
12076 #endif
12077
12078       /* Emit debug info for the address of the current line.
12079
12080          Unfortunately, we have little choice here currently, and must always
12081          use the most general form.  GCC does not know the address delta
12082          itself, so we can't use DW_LNS_advance_pc.  Many ports do have length
12083          attributes which will give an upper bound on the address range.  We
12084          could perhaps use length attributes to determine when it is safe to
12085          use DW_LNS_fixed_advance_pc.  */
12086
12087       ASM_GENERATE_INTERNAL_LABEL (line_label, LINE_CODE_LABEL, lt_index);
12088       if (0)
12089         {
12090           /* This can handle deltas up to 0xffff.  This takes 3 bytes.  */
12091           dw2_asm_output_data (1, DW_LNS_fixed_advance_pc,
12092                                "DW_LNS_fixed_advance_pc");
12093           dw2_asm_output_delta (2, line_label, prev_line_label, NULL);
12094         }
12095       else
12096         {
12097           /* This can handle any delta.  This takes
12098              4+DWARF2_ADDR_SIZE bytes.  */
12099           dw2_asm_output_data (1, 0, "DW_LNE_set_address");
12100           dw2_asm_output_data_uleb128 (1 + DWARF2_ADDR_SIZE, NULL);
12101           dw2_asm_output_data (1, DW_LNE_set_address, NULL);
12102           dw2_asm_output_addr (DWARF2_ADDR_SIZE, line_label, NULL);
12103         }
12104
12105       strcpy (prev_line_label, line_label);
12106
12107       /* Emit debug info for the source file of the current line, if
12108          different from the previous line.  */
12109       if (line_info->dw_file_num != current_file)
12110         {
12111           current_file = line_info->dw_file_num;
12112           dw2_asm_output_data (1, DW_LNS_set_file, "DW_LNS_set_file");
12113           dw2_asm_output_data_uleb128 (current_file, "%lu", current_file);
12114         }
12115
12116       /* Emit debug info for the current line number, choosing the encoding
12117          that uses the least amount of space.  */
12118       if (line_info->dw_line_num != current_line)
12119         {
12120           line_offset = line_info->dw_line_num - current_line;
12121           line_delta = line_offset - DWARF_LINE_BASE;
12122           current_line = line_info->dw_line_num;
12123           if (line_delta >= 0 && line_delta < (DWARF_LINE_RANGE - 1))
12124             /* This can handle deltas from -10 to 234, using the current
12125                definitions of DWARF_LINE_BASE and DWARF_LINE_RANGE.  This
12126                takes 1 byte.  */
12127             dw2_asm_output_data (1, DWARF_LINE_OPCODE_BASE + line_delta,
12128                                  "line %lu", current_line);
12129           else
12130             {
12131               /* This can handle any delta.  This takes at least 4 bytes,
12132                  depending on the value being encoded.  */
12133               dw2_asm_output_data (1, DW_LNS_advance_line,
12134                                    "advance to line %lu", current_line);
12135               dw2_asm_output_data_sleb128 (line_offset, NULL);
12136               dw2_asm_output_data (1, DW_LNS_copy, "DW_LNS_copy");
12137             }
12138         }
12139       else
12140         /* We still need to start a new row, so output a copy insn.  */
12141         dw2_asm_output_data (1, DW_LNS_copy, "DW_LNS_copy");
12142     }
12143
12144   /* Emit debug info for the address of the end of the function.  */
12145   if (0)
12146     {
12147       dw2_asm_output_data (1, DW_LNS_fixed_advance_pc,
12148                            "DW_LNS_fixed_advance_pc");
12149       dw2_asm_output_delta (2, text_end_label, prev_line_label, NULL);
12150     }
12151   else
12152     {
12153       dw2_asm_output_data (1, 0, "DW_LNE_set_address");
12154       dw2_asm_output_data_uleb128 (1 + DWARF2_ADDR_SIZE, NULL);
12155       dw2_asm_output_data (1, DW_LNE_set_address, NULL);
12156       dw2_asm_output_addr (DWARF2_ADDR_SIZE, text_end_label, NULL);
12157     }
12158
12159   dw2_asm_output_data (1, 0, "DW_LNE_end_sequence");
12160   dw2_asm_output_data_uleb128 (1, NULL);
12161   dw2_asm_output_data (1, DW_LNE_end_sequence, NULL);
12162
12163   function = 0;
12164   current_file = 1;
12165   current_line = 1;
12166   for (lt_index = 0; lt_index < separate_line_info_table_in_use;)
12167     {
12168       dw_separate_line_info_ref line_info
12169         = &separate_line_info_table[lt_index];
12170
12171 #if 0
12172       /* Don't emit anything for redundant notes.  */
12173       if (line_info->dw_line_num == current_line
12174           && line_info->dw_file_num == current_file
12175           && line_info->function == function)
12176         goto cont;
12177 #endif
12178
12179       /* Emit debug info for the address of the current line.  If this is
12180          a new function, or the first line of a function, then we need
12181          to handle it differently.  */
12182       ASM_GENERATE_INTERNAL_LABEL (line_label, SEPARATE_LINE_CODE_LABEL,
12183                                    lt_index);
12184       if (function != line_info->function)
12185         {
12186           function = line_info->function;
12187
12188           /* Set the address register to the first line in the function.  */
12189           dw2_asm_output_data (1, 0, "DW_LNE_set_address");
12190           dw2_asm_output_data_uleb128 (1 + DWARF2_ADDR_SIZE, NULL);
12191           dw2_asm_output_data (1, DW_LNE_set_address, NULL);
12192           dw2_asm_output_addr (DWARF2_ADDR_SIZE, line_label, NULL);
12193         }
12194       else
12195         {
12196           /* ??? See the DW_LNS_advance_pc comment above.  */
12197           if (0)
12198             {
12199               dw2_asm_output_data (1, DW_LNS_fixed_advance_pc,
12200                                    "DW_LNS_fixed_advance_pc");
12201               dw2_asm_output_delta (2, line_label, prev_line_label, NULL);
12202             }
12203           else
12204             {
12205               dw2_asm_output_data (1, 0, "DW_LNE_set_address");
12206               dw2_asm_output_data_uleb128 (1 + DWARF2_ADDR_SIZE, NULL);
12207               dw2_asm_output_data (1, DW_LNE_set_address, NULL);
12208               dw2_asm_output_addr (DWARF2_ADDR_SIZE, line_label, NULL);
12209             }
12210         }
12211
12212       strcpy (prev_line_label, line_label);
12213
12214       /* Emit debug info for the source file of the current line, if
12215          different from the previous line.  */
12216       if (line_info->dw_file_num != current_file)
12217         {
12218           current_file = line_info->dw_file_num;
12219           dw2_asm_output_data (1, DW_LNS_set_file, "DW_LNS_set_file");
12220           dw2_asm_output_data_uleb128 (current_file, "%lu", current_file);
12221         }
12222
12223       /* Emit debug info for the current line number, choosing the encoding
12224          that uses the least amount of space.  */
12225       if (line_info->dw_line_num != current_line)
12226         {
12227           line_offset = line_info->dw_line_num - current_line;
12228           line_delta = line_offset - DWARF_LINE_BASE;
12229           current_line = line_info->dw_line_num;
12230           if (line_delta >= 0 && line_delta < (DWARF_LINE_RANGE - 1))
12231             dw2_asm_output_data (1, DWARF_LINE_OPCODE_BASE + line_delta,
12232                                  "line %lu", current_line);
12233           else
12234             {
12235               dw2_asm_output_data (1, DW_LNS_advance_line,
12236                                    "advance to line %lu", current_line);
12237               dw2_asm_output_data_sleb128 (line_offset, NULL);
12238               dw2_asm_output_data (1, DW_LNS_copy, "DW_LNS_copy");
12239             }
12240         }
12241       else
12242         dw2_asm_output_data (1, DW_LNS_copy, "DW_LNS_copy");
12243
12244 #if 0
12245     cont:
12246 #endif
12247
12248       lt_index++;
12249
12250       /* If we're done with a function, end its sequence.  */
12251       if (lt_index == separate_line_info_table_in_use
12252           || separate_line_info_table[lt_index].function != function)
12253         {
12254           current_file = 1;
12255           current_line = 1;
12256
12257           /* Emit debug info for the address of the end of the function.  */
12258           ASM_GENERATE_INTERNAL_LABEL (line_label, FUNC_END_LABEL, function);
12259           if (0)
12260             {
12261               dw2_asm_output_data (1, DW_LNS_fixed_advance_pc,
12262                                    "DW_LNS_fixed_advance_pc");
12263               dw2_asm_output_delta (2, line_label, prev_line_label, NULL);
12264             }
12265           else
12266             {
12267               dw2_asm_output_data (1, 0, "DW_LNE_set_address");
12268               dw2_asm_output_data_uleb128 (1 + DWARF2_ADDR_SIZE, NULL);
12269               dw2_asm_output_data (1, DW_LNE_set_address, NULL);
12270               dw2_asm_output_addr (DWARF2_ADDR_SIZE, line_label, NULL);
12271             }
12272
12273           /* Output the marker for the end of this sequence.  */
12274           dw2_asm_output_data (1, 0, "DW_LNE_end_sequence");
12275           dw2_asm_output_data_uleb128 (1, NULL);
12276           dw2_asm_output_data (1, DW_LNE_end_sequence, NULL);
12277         }
12278     }
12279
12280   /* Output the marker for the end of the line number info.  */
12281   ASM_OUTPUT_LABEL (asm_out_file, l2);
12282 }
12283
12284 /* Return the size of the .debug_dcall table for the compilation unit.  */
12285
12286 static unsigned long
12287 size_of_dcall_table (void)
12288 {
12289   unsigned long size;
12290   unsigned int i;
12291   dcall_entry *p;
12292   tree last_poc_decl = NULL;
12293
12294   /* Header:  version + debug info section pointer + pointer size.  */
12295   size = 2 + DWARF_OFFSET_SIZE + 1;
12296
12297   /* Each entry:  code label + DIE offset.  */
12298   for (i = 0; VEC_iterate (dcall_entry, dcall_table, i, p); i++)
12299     {
12300       gcc_assert (p->targ_die != NULL);
12301       /* Insert a "from" entry when the point-of-call DIE offset changes.  */
12302       if (p->poc_decl != last_poc_decl)
12303         {
12304           dw_die_ref poc_die = lookup_decl_die (p->poc_decl);
12305           gcc_assert (poc_die);
12306           last_poc_decl = p->poc_decl;
12307           if (poc_die)
12308             size += (DWARF_OFFSET_SIZE
12309                      + size_of_uleb128 (poc_die->die_offset));
12310         }
12311       size += DWARF_OFFSET_SIZE + size_of_uleb128 (p->targ_die->die_offset);
12312     }
12313
12314   return size;
12315 }
12316
12317 /* Output the direct call table used to disambiguate PC values when
12318    identical function have been merged.  */
12319
12320 static void
12321 output_dcall_table (void)
12322 {
12323   unsigned i;
12324   unsigned long dcall_length = size_of_dcall_table ();
12325   dcall_entry *p;
12326   char poc_label[MAX_ARTIFICIAL_LABEL_BYTES];
12327   tree last_poc_decl = NULL;
12328
12329   if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
12330     dw2_asm_output_data (4, 0xffffffff,
12331       "Initial length escape value indicating 64-bit DWARF extension");
12332   dw2_asm_output_data (DWARF_OFFSET_SIZE, dcall_length,
12333                        "Length of Direct Call Table");
12334   dw2_asm_output_data (2, 4, "Version number");
12335   dw2_asm_output_offset (DWARF_OFFSET_SIZE, debug_info_section_label,
12336                          debug_info_section,
12337                          "Offset of Compilation Unit Info");
12338   dw2_asm_output_data (1, DWARF2_ADDR_SIZE, "Pointer Size (in bytes)");
12339
12340   for (i = 0; VEC_iterate (dcall_entry, dcall_table, i, p); i++)
12341     {
12342       /* Insert a "from" entry when the point-of-call DIE offset changes.  */
12343       if (p->poc_decl != last_poc_decl)
12344         {
12345           dw_die_ref poc_die = lookup_decl_die (p->poc_decl);
12346           last_poc_decl = p->poc_decl;
12347           if (poc_die)
12348             {
12349               dw2_asm_output_data (DWARF_OFFSET_SIZE, 0, "New caller");
12350               dw2_asm_output_data_uleb128 (poc_die->die_offset,
12351                                            "Caller DIE offset");
12352             }
12353         }
12354       ASM_GENERATE_INTERNAL_LABEL (poc_label, "LPOC", p->poc_label_num);
12355       dw2_asm_output_addr (DWARF_OFFSET_SIZE, poc_label, "Point of call");
12356       dw2_asm_output_data_uleb128 (p->targ_die->die_offset,
12357                                    "Callee DIE offset");
12358     }
12359 }
12360 \f
12361 /* Return the size of the .debug_vcall table for the compilation unit.  */
12362
12363 static unsigned long
12364 size_of_vcall_table (void)
12365 {
12366   unsigned long size;
12367   unsigned int i;
12368   vcall_entry *p;
12369
12370   /* Header:  version + pointer size.  */
12371   size = 2 + 1;
12372
12373   /* Each entry:  code label + vtable slot index.  */
12374   for (i = 0; VEC_iterate (vcall_entry, vcall_table, i, p); i++)
12375     size += DWARF_OFFSET_SIZE + size_of_uleb128 (p->vtable_slot);
12376
12377   return size;
12378 }
12379
12380 /* Output the virtual call table used to disambiguate PC values when
12381    identical function have been merged.  */
12382
12383 static void
12384 output_vcall_table (void)
12385 {
12386   unsigned i;
12387   unsigned long vcall_length = size_of_vcall_table ();
12388   vcall_entry *p;
12389   char poc_label[MAX_ARTIFICIAL_LABEL_BYTES];
12390
12391   if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
12392     dw2_asm_output_data (4, 0xffffffff,
12393       "Initial length escape value indicating 64-bit DWARF extension");
12394   dw2_asm_output_data (DWARF_OFFSET_SIZE, vcall_length,
12395                        "Length of Virtual Call Table");
12396   dw2_asm_output_data (2, 4, "Version number");
12397   dw2_asm_output_data (1, DWARF2_ADDR_SIZE, "Pointer Size (in bytes)");
12398
12399   for (i = 0; VEC_iterate (vcall_entry, vcall_table, i, p); i++)
12400     {
12401       ASM_GENERATE_INTERNAL_LABEL (poc_label, "LPOC", p->poc_label_num);
12402       dw2_asm_output_addr (DWARF_OFFSET_SIZE, poc_label, "Point of call");
12403       dw2_asm_output_data_uleb128 (p->vtable_slot, "Vtable slot");
12404     }
12405 }
12406 \f
12407 /* Given a pointer to a tree node for some base type, return a pointer to
12408    a DIE that describes the given type.
12409
12410    This routine must only be called for GCC type nodes that correspond to
12411    Dwarf base (fundamental) types.  */
12412
12413 static dw_die_ref
12414 base_type_die (tree type)
12415 {
12416   dw_die_ref base_type_result;
12417   enum dwarf_type encoding;
12418
12419   if (TREE_CODE (type) == ERROR_MARK || TREE_CODE (type) == VOID_TYPE)
12420     return 0;
12421
12422   /* If this is a subtype that should not be emitted as a subrange type,
12423      use the base type.  See subrange_type_for_debug_p.  */
12424   if (TREE_CODE (type) == INTEGER_TYPE && TREE_TYPE (type) != NULL_TREE)
12425     type = TREE_TYPE (type);
12426
12427   switch (TREE_CODE (type))
12428     {
12429     case INTEGER_TYPE:
12430       if ((dwarf_version >= 4 || !dwarf_strict)
12431           && TYPE_NAME (type)
12432           && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
12433           && DECL_IS_BUILTIN (TYPE_NAME (type))
12434           && DECL_NAME (TYPE_NAME (type)))
12435         {
12436           const char *name = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (type)));
12437           if (strcmp (name, "char16_t") == 0
12438               || strcmp (name, "char32_t") == 0)
12439             {
12440               encoding = DW_ATE_UTF;
12441               break;
12442             }
12443         }
12444       if (TYPE_STRING_FLAG (type))
12445         {
12446           if (TYPE_UNSIGNED (type))
12447             encoding = DW_ATE_unsigned_char;
12448           else
12449             encoding = DW_ATE_signed_char;
12450         }
12451       else if (TYPE_UNSIGNED (type))
12452         encoding = DW_ATE_unsigned;
12453       else
12454         encoding = DW_ATE_signed;
12455       break;
12456
12457     case REAL_TYPE:
12458       if (DECIMAL_FLOAT_MODE_P (TYPE_MODE (type)))
12459         {
12460           if (dwarf_version >= 3 || !dwarf_strict)
12461             encoding = DW_ATE_decimal_float;
12462           else
12463             encoding = DW_ATE_lo_user;
12464         }
12465       else
12466         encoding = DW_ATE_float;
12467       break;
12468
12469     case FIXED_POINT_TYPE:
12470       if (!(dwarf_version >= 3 || !dwarf_strict))
12471         encoding = DW_ATE_lo_user;
12472       else if (TYPE_UNSIGNED (type))
12473         encoding = DW_ATE_unsigned_fixed;
12474       else
12475         encoding = DW_ATE_signed_fixed;
12476       break;
12477
12478       /* Dwarf2 doesn't know anything about complex ints, so use
12479          a user defined type for it.  */
12480     case COMPLEX_TYPE:
12481       if (TREE_CODE (TREE_TYPE (type)) == REAL_TYPE)
12482         encoding = DW_ATE_complex_float;
12483       else
12484         encoding = DW_ATE_lo_user;
12485       break;
12486
12487     case BOOLEAN_TYPE:
12488       /* GNU FORTRAN/Ada/C++ BOOLEAN type.  */
12489       encoding = DW_ATE_boolean;
12490       break;
12491
12492     default:
12493       /* No other TREE_CODEs are Dwarf fundamental types.  */
12494       gcc_unreachable ();
12495     }
12496
12497   base_type_result = new_die (DW_TAG_base_type, comp_unit_die, type);
12498
12499   add_AT_unsigned (base_type_result, DW_AT_byte_size,
12500                    int_size_in_bytes (type));
12501   add_AT_unsigned (base_type_result, DW_AT_encoding, encoding);
12502
12503   return base_type_result;
12504 }
12505
12506 /* Given a pointer to an arbitrary ..._TYPE tree node, return nonzero if the
12507    given input type is a Dwarf "fundamental" type.  Otherwise return null.  */
12508
12509 static inline int
12510 is_base_type (tree type)
12511 {
12512   switch (TREE_CODE (type))
12513     {
12514     case ERROR_MARK:
12515     case VOID_TYPE:
12516     case INTEGER_TYPE:
12517     case REAL_TYPE:
12518     case FIXED_POINT_TYPE:
12519     case COMPLEX_TYPE:
12520     case BOOLEAN_TYPE:
12521       return 1;
12522
12523     case ARRAY_TYPE:
12524     case RECORD_TYPE:
12525     case UNION_TYPE:
12526     case QUAL_UNION_TYPE:
12527     case ENUMERAL_TYPE:
12528     case FUNCTION_TYPE:
12529     case METHOD_TYPE:
12530     case POINTER_TYPE:
12531     case REFERENCE_TYPE:
12532     case OFFSET_TYPE:
12533     case LANG_TYPE:
12534     case VECTOR_TYPE:
12535       return 0;
12536
12537     default:
12538       gcc_unreachable ();
12539     }
12540
12541   return 0;
12542 }
12543
12544 /* Given a pointer to a tree node, assumed to be some kind of a ..._TYPE
12545    node, return the size in bits for the type if it is a constant, or else
12546    return the alignment for the type if the type's size is not constant, or
12547    else return BITS_PER_WORD if the type actually turns out to be an
12548    ERROR_MARK node.  */
12549
12550 static inline unsigned HOST_WIDE_INT
12551 simple_type_size_in_bits (const_tree type)
12552 {
12553   if (TREE_CODE (type) == ERROR_MARK)
12554     return BITS_PER_WORD;
12555   else if (TYPE_SIZE (type) == NULL_TREE)
12556     return 0;
12557   else if (host_integerp (TYPE_SIZE (type), 1))
12558     return tree_low_cst (TYPE_SIZE (type), 1);
12559   else
12560     return TYPE_ALIGN (type);
12561 }
12562
12563 /* Similarly, but return a double_int instead of UHWI.  */
12564
12565 static inline double_int
12566 double_int_type_size_in_bits (const_tree type)
12567 {
12568   if (TREE_CODE (type) == ERROR_MARK)
12569     return uhwi_to_double_int (BITS_PER_WORD);
12570   else if (TYPE_SIZE (type) == NULL_TREE)
12571     return double_int_zero;
12572   else if (TREE_CODE (TYPE_SIZE (type)) == INTEGER_CST)
12573     return tree_to_double_int (TYPE_SIZE (type));
12574   else
12575     return uhwi_to_double_int (TYPE_ALIGN (type));
12576 }
12577
12578 /*  Given a pointer to a tree node for a subrange type, return a pointer
12579     to a DIE that describes the given type.  */
12580
12581 static dw_die_ref
12582 subrange_type_die (tree type, tree low, tree high, dw_die_ref context_die)
12583 {
12584   dw_die_ref subrange_die;
12585   const HOST_WIDE_INT size_in_bytes = int_size_in_bytes (type);
12586
12587   if (context_die == NULL)
12588     context_die = comp_unit_die;
12589
12590   subrange_die = new_die (DW_TAG_subrange_type, context_die, type);
12591
12592   if (int_size_in_bytes (TREE_TYPE (type)) != size_in_bytes)
12593     {
12594       /* The size of the subrange type and its base type do not match,
12595          so we need to generate a size attribute for the subrange type.  */
12596       add_AT_unsigned (subrange_die, DW_AT_byte_size, size_in_bytes);
12597     }
12598
12599   if (low)
12600     add_bound_info (subrange_die, DW_AT_lower_bound, low);
12601   if (high)
12602     add_bound_info (subrange_die, DW_AT_upper_bound, high);
12603
12604   return subrange_die;
12605 }
12606
12607 /* Given a pointer to an arbitrary ..._TYPE tree node, return a debugging
12608    entry that chains various modifiers in front of the given type.  */
12609
12610 static dw_die_ref
12611 modified_type_die (tree type, int is_const_type, int is_volatile_type,
12612                    dw_die_ref context_die)
12613 {
12614   enum tree_code code = TREE_CODE (type);
12615   dw_die_ref mod_type_die;
12616   dw_die_ref sub_die = NULL;
12617   tree item_type = NULL;
12618   tree qualified_type;
12619   tree name, low, high;
12620
12621   if (code == ERROR_MARK)
12622     return NULL;
12623
12624   /* See if we already have the appropriately qualified variant of
12625      this type.  */
12626   qualified_type
12627     = get_qualified_type (type,
12628                           ((is_const_type ? TYPE_QUAL_CONST : 0)
12629                            | (is_volatile_type ? TYPE_QUAL_VOLATILE : 0)));
12630
12631   if (qualified_type == sizetype
12632       && TYPE_NAME (qualified_type)
12633       && TREE_CODE (TYPE_NAME (qualified_type)) == TYPE_DECL)
12634     {
12635 #ifdef ENABLE_CHECKING
12636       gcc_assert (TREE_CODE (TREE_TYPE (TYPE_NAME (qualified_type)))
12637                   == INTEGER_TYPE
12638                   && TYPE_PRECISION (TREE_TYPE (TYPE_NAME (qualified_type)))
12639                      == TYPE_PRECISION (qualified_type)
12640                   && TYPE_UNSIGNED (TREE_TYPE (TYPE_NAME (qualified_type)))
12641                      == TYPE_UNSIGNED (qualified_type));
12642 #endif
12643       qualified_type = TREE_TYPE (TYPE_NAME (qualified_type));
12644     }
12645
12646   /* If we do, then we can just use its DIE, if it exists.  */
12647   if (qualified_type)
12648     {
12649       mod_type_die = lookup_type_die (qualified_type);
12650       if (mod_type_die)
12651         return mod_type_die;
12652     }
12653
12654   name = qualified_type ? TYPE_NAME (qualified_type) : NULL;
12655
12656   /* Handle C typedef types.  */
12657   if (name && TREE_CODE (name) == TYPE_DECL && DECL_ORIGINAL_TYPE (name)
12658       && !DECL_ARTIFICIAL (name))
12659     {
12660       tree dtype = TREE_TYPE (name);
12661
12662       if (qualified_type == dtype)
12663         {
12664           /* For a named type, use the typedef.  */
12665           gen_type_die (qualified_type, context_die);
12666           return lookup_type_die (qualified_type);
12667         }
12668       else if (is_const_type < TYPE_READONLY (dtype)
12669                || is_volatile_type < TYPE_VOLATILE (dtype)
12670                || (is_const_type <= TYPE_READONLY (dtype)
12671                    && is_volatile_type <= TYPE_VOLATILE (dtype)
12672                    && DECL_ORIGINAL_TYPE (name) != type))
12673         /* cv-unqualified version of named type.  Just use the unnamed
12674            type to which it refers.  */
12675         return modified_type_die (DECL_ORIGINAL_TYPE (name),
12676                                   is_const_type, is_volatile_type,
12677                                   context_die);
12678       /* Else cv-qualified version of named type; fall through.  */
12679     }
12680
12681   if (is_const_type)
12682     {
12683       mod_type_die = new_die (DW_TAG_const_type, comp_unit_die, type);
12684       sub_die = modified_type_die (type, 0, is_volatile_type, context_die);
12685     }
12686   else if (is_volatile_type)
12687     {
12688       mod_type_die = new_die (DW_TAG_volatile_type, comp_unit_die, type);
12689       sub_die = modified_type_die (type, 0, 0, context_die);
12690     }
12691   else if (code == POINTER_TYPE)
12692     {
12693       mod_type_die = new_die (DW_TAG_pointer_type, comp_unit_die, type);
12694       add_AT_unsigned (mod_type_die, DW_AT_byte_size,
12695                        simple_type_size_in_bits (type) / BITS_PER_UNIT);
12696       item_type = TREE_TYPE (type);
12697       if (!ADDR_SPACE_GENERIC_P (TYPE_ADDR_SPACE (item_type)))
12698         add_AT_unsigned (mod_type_die, DW_AT_address_class,
12699                          TYPE_ADDR_SPACE (item_type));
12700     }
12701   else if (code == REFERENCE_TYPE)
12702     {
12703       if (TYPE_REF_IS_RVALUE (type) && dwarf_version >= 4)
12704         mod_type_die = new_die (DW_TAG_rvalue_reference_type, comp_unit_die,
12705                                 type);
12706       else
12707         mod_type_die = new_die (DW_TAG_reference_type, comp_unit_die, type);
12708       add_AT_unsigned (mod_type_die, DW_AT_byte_size,
12709                        simple_type_size_in_bits (type) / BITS_PER_UNIT);
12710       item_type = TREE_TYPE (type);
12711       if (!ADDR_SPACE_GENERIC_P (TYPE_ADDR_SPACE (item_type)))
12712         add_AT_unsigned (mod_type_die, DW_AT_address_class,
12713                          TYPE_ADDR_SPACE (item_type));
12714     }
12715   else if (code == INTEGER_TYPE
12716            && TREE_TYPE (type) != NULL_TREE
12717            && subrange_type_for_debug_p (type, &low, &high))
12718     {
12719       mod_type_die = subrange_type_die (type, low, high, context_die);
12720       item_type = TREE_TYPE (type);
12721     }
12722   else if (is_base_type (type))
12723     mod_type_die = base_type_die (type);
12724   else
12725     {
12726       gen_type_die (type, context_die);
12727
12728       /* We have to get the type_main_variant here (and pass that to the
12729          `lookup_type_die' routine) because the ..._TYPE node we have
12730          might simply be a *copy* of some original type node (where the
12731          copy was created to help us keep track of typedef names) and
12732          that copy might have a different TYPE_UID from the original
12733          ..._TYPE node.  */
12734       if (TREE_CODE (type) != VECTOR_TYPE)
12735         return lookup_type_die (type_main_variant (type));
12736       else
12737         /* Vectors have the debugging information in the type,
12738            not the main variant.  */
12739         return lookup_type_die (type);
12740     }
12741
12742   /* Builtin types don't have a DECL_ORIGINAL_TYPE.  For those,
12743      don't output a DW_TAG_typedef, since there isn't one in the
12744      user's program; just attach a DW_AT_name to the type.
12745      Don't attach a DW_AT_name to DW_TAG_const_type or DW_TAG_volatile_type
12746      if the base type already has the same name.  */
12747   if (name
12748       && ((TREE_CODE (name) != TYPE_DECL
12749            && (qualified_type == TYPE_MAIN_VARIANT (type)
12750                || (!is_const_type && !is_volatile_type)))
12751           || (TREE_CODE (name) == TYPE_DECL
12752               && TREE_TYPE (name) == qualified_type
12753               && DECL_NAME (name))))
12754     {
12755       if (TREE_CODE (name) == TYPE_DECL)
12756         /* Could just call add_name_and_src_coords_attributes here,
12757            but since this is a builtin type it doesn't have any
12758            useful source coordinates anyway.  */
12759         name = DECL_NAME (name);
12760       add_name_attribute (mod_type_die, IDENTIFIER_POINTER (name));
12761     }
12762   /* This probably indicates a bug.  */
12763   else if (mod_type_die && mod_type_die->die_tag == DW_TAG_base_type)
12764     add_name_attribute (mod_type_die, "__unknown__");
12765
12766   if (qualified_type)
12767     equate_type_number_to_die (qualified_type, mod_type_die);
12768
12769   if (item_type)
12770     /* We must do this after the equate_type_number_to_die call, in case
12771        this is a recursive type.  This ensures that the modified_type_die
12772        recursion will terminate even if the type is recursive.  Recursive
12773        types are possible in Ada.  */
12774     sub_die = modified_type_die (item_type,
12775                                  TYPE_READONLY (item_type),
12776                                  TYPE_VOLATILE (item_type),
12777                                  context_die);
12778
12779   if (sub_die != NULL)
12780     add_AT_die_ref (mod_type_die, DW_AT_type, sub_die);
12781
12782   return mod_type_die;
12783 }
12784
12785 /* Generate DIEs for the generic parameters of T.
12786    T must be either a generic type or a generic function.
12787    See http://gcc.gnu.org/wiki/TemplateParmsDwarf for more.  */
12788
12789 static void
12790 gen_generic_params_dies (tree t)
12791 {
12792   tree parms, args;
12793   int parms_num, i;
12794   dw_die_ref die = NULL;
12795
12796   if (!t || (TYPE_P (t) && !COMPLETE_TYPE_P (t)))
12797     return;
12798
12799   if (TYPE_P (t))
12800     die = lookup_type_die (t);
12801   else if (DECL_P (t))
12802     die = lookup_decl_die (t);
12803
12804   gcc_assert (die);
12805
12806   parms = lang_hooks.get_innermost_generic_parms (t);
12807   if (!parms)
12808     /* T has no generic parameter. It means T is neither a generic type
12809        or function. End of story.  */
12810     return;
12811
12812   parms_num = TREE_VEC_LENGTH (parms);
12813   args = lang_hooks.get_innermost_generic_args (t);
12814   for (i = 0; i < parms_num; i++)
12815     {
12816       tree parm, arg, arg_pack_elems;
12817
12818       parm = TREE_VEC_ELT (parms, i);
12819       arg = TREE_VEC_ELT (args, i);
12820       arg_pack_elems = lang_hooks.types.get_argument_pack_elems (arg);
12821       gcc_assert (parm && TREE_VALUE (parm) && arg);
12822
12823       if (parm && TREE_VALUE (parm) && arg)
12824         {
12825           /* If PARM represents a template parameter pack,
12826              emit a DW_TAG_GNU_template_parameter_pack DIE, followed
12827              by DW_TAG_template_*_parameter DIEs for the argument
12828              pack elements of ARG. Note that ARG would then be
12829              an argument pack.  */
12830           if (arg_pack_elems)
12831             template_parameter_pack_die (TREE_VALUE (parm),
12832                                          arg_pack_elems,
12833                                          die);
12834           else
12835             generic_parameter_die (TREE_VALUE (parm), arg,
12836                                    true /* Emit DW_AT_name */, die);
12837         }
12838     }
12839 }
12840
12841 /* Create and return a DIE for PARM which should be
12842    the representation of a generic type parameter.
12843    For instance, in the C++ front end, PARM would be a template parameter.
12844    ARG is the argument to PARM.
12845    EMIT_NAME_P if tree, the DIE will have DW_AT_name attribute set to the
12846    name of the PARM.
12847    PARENT_DIE is the parent DIE which the new created DIE should be added to,
12848    as a child node.  */
12849
12850 static dw_die_ref
12851 generic_parameter_die (tree parm, tree arg,
12852                        bool emit_name_p,
12853                        dw_die_ref parent_die)
12854 {
12855   dw_die_ref tmpl_die = NULL;
12856   const char *name = NULL;
12857
12858   if (!parm || !DECL_NAME (parm) || !arg)
12859     return NULL;
12860
12861   /* We support non-type generic parameters and arguments,
12862      type generic parameters and arguments, as well as
12863      generic generic parameters (a.k.a. template template parameters in C++)
12864      and arguments.  */
12865   if (TREE_CODE (parm) == PARM_DECL)
12866     /* PARM is a nontype generic parameter  */
12867     tmpl_die = new_die (DW_TAG_template_value_param, parent_die, parm);
12868   else if (TREE_CODE (parm) == TYPE_DECL)
12869     /* PARM is a type generic parameter.  */
12870     tmpl_die = new_die (DW_TAG_template_type_param, parent_die, parm);
12871   else if (lang_hooks.decls.generic_generic_parameter_decl_p (parm))
12872     /* PARM is a generic generic parameter.
12873        Its DIE is a GNU extension. It shall have a
12874        DW_AT_name attribute to represent the name of the template template
12875        parameter, and a DW_AT_GNU_template_name attribute to represent the
12876        name of the template template argument.  */
12877     tmpl_die = new_die (DW_TAG_GNU_template_template_param,
12878                         parent_die, parm);
12879   else
12880     gcc_unreachable ();
12881
12882   if (tmpl_die)
12883     {
12884       tree tmpl_type;
12885
12886       /* If PARM is a generic parameter pack, it means we are
12887          emitting debug info for a template argument pack element.
12888          In other terms, ARG is a template argument pack element.
12889          In that case, we don't emit any DW_AT_name attribute for
12890          the die.  */
12891       if (emit_name_p)
12892         {
12893           name = IDENTIFIER_POINTER (DECL_NAME (parm));
12894           gcc_assert (name);
12895           add_AT_string (tmpl_die, DW_AT_name, name);
12896         }
12897
12898       if (!lang_hooks.decls.generic_generic_parameter_decl_p (parm))
12899         {
12900           /* DWARF3, 5.6.8 says if PARM is a non-type generic parameter
12901              TMPL_DIE should have a child DW_AT_type attribute that is set
12902              to the type of the argument to PARM, which is ARG.
12903              If PARM is a type generic parameter, TMPL_DIE should have a
12904              child DW_AT_type that is set to ARG.  */
12905           tmpl_type = TYPE_P (arg) ? arg : TREE_TYPE (arg);
12906           add_type_attribute (tmpl_die, tmpl_type, 0,
12907                               TREE_THIS_VOLATILE (tmpl_type),
12908                               parent_die);
12909         }
12910       else
12911         {
12912           /* So TMPL_DIE is a DIE representing a
12913              a generic generic template parameter, a.k.a template template
12914              parameter in C++ and arg is a template.  */
12915
12916           /* The DW_AT_GNU_template_name attribute of the DIE must be set
12917              to the name of the argument.  */
12918           name = dwarf2_name (TYPE_P (arg) ? TYPE_NAME (arg) : arg, 1);
12919           if (name)
12920             add_AT_string (tmpl_die, DW_AT_GNU_template_name, name);
12921         }
12922
12923       if (TREE_CODE (parm) == PARM_DECL)
12924         /* So PARM is a non-type generic parameter.
12925            DWARF3 5.6.8 says we must set a DW_AT_const_value child
12926            attribute of TMPL_DIE which value represents the value
12927            of ARG.
12928            We must be careful here:
12929            The value of ARG might reference some function decls.
12930            We might currently be emitting debug info for a generic
12931            type and types are emitted before function decls, we don't
12932            know if the function decls referenced by ARG will actually be
12933            emitted after cgraph computations.
12934            So must defer the generation of the DW_AT_const_value to
12935            after cgraph is ready.  */
12936         append_entry_to_tmpl_value_parm_die_table (tmpl_die, arg);
12937     }
12938
12939   return tmpl_die;
12940 }
12941
12942 /* Generate and return a  DW_TAG_GNU_template_parameter_pack DIE representing.
12943    PARM_PACK must be a template parameter pack. The returned DIE
12944    will be child DIE of PARENT_DIE.  */
12945
12946 static dw_die_ref
12947 template_parameter_pack_die (tree parm_pack,
12948                              tree parm_pack_args,
12949                              dw_die_ref parent_die)
12950 {
12951   dw_die_ref die;
12952   int j;
12953
12954   gcc_assert (parent_die && parm_pack);
12955
12956   die = new_die (DW_TAG_GNU_template_parameter_pack, parent_die, parm_pack);
12957   add_name_and_src_coords_attributes (die, parm_pack);
12958   for (j = 0; j < TREE_VEC_LENGTH (parm_pack_args); j++)
12959     generic_parameter_die (parm_pack,
12960                            TREE_VEC_ELT (parm_pack_args, j),
12961                            false /* Don't emit DW_AT_name */,
12962                            die);
12963   return die;
12964 }
12965
12966 /* Given a pointer to an arbitrary ..._TYPE tree node, return true if it is
12967    an enumerated type.  */
12968
12969 static inline int
12970 type_is_enum (const_tree type)
12971 {
12972   return TREE_CODE (type) == ENUMERAL_TYPE;
12973 }
12974
12975 /* Return the DBX register number described by a given RTL node.  */
12976
12977 static unsigned int
12978 dbx_reg_number (const_rtx rtl)
12979 {
12980   unsigned regno = REGNO (rtl);
12981
12982   gcc_assert (regno < FIRST_PSEUDO_REGISTER);
12983
12984 #ifdef LEAF_REG_REMAP
12985   if (current_function_uses_only_leaf_regs)
12986     {
12987       int leaf_reg = LEAF_REG_REMAP (regno);
12988       if (leaf_reg != -1)
12989         regno = (unsigned) leaf_reg;
12990     }
12991 #endif
12992
12993   return DBX_REGISTER_NUMBER (regno);
12994 }
12995
12996 /* Optionally add a DW_OP_piece term to a location description expression.
12997    DW_OP_piece is only added if the location description expression already
12998    doesn't end with DW_OP_piece.  */
12999
13000 static void
13001 add_loc_descr_op_piece (dw_loc_descr_ref *list_head, int size)
13002 {
13003   dw_loc_descr_ref loc;
13004
13005   if (*list_head != NULL)
13006     {
13007       /* Find the end of the chain.  */
13008       for (loc = *list_head; loc->dw_loc_next != NULL; loc = loc->dw_loc_next)
13009         ;
13010
13011       if (loc->dw_loc_opc != DW_OP_piece)
13012         loc->dw_loc_next = new_loc_descr (DW_OP_piece, size, 0);
13013     }
13014 }
13015
13016 /* Return a location descriptor that designates a machine register or
13017    zero if there is none.  */
13018
13019 static dw_loc_descr_ref
13020 reg_loc_descriptor (rtx rtl, enum var_init_status initialized)
13021 {
13022   rtx regs;
13023
13024   if (REGNO (rtl) >= FIRST_PSEUDO_REGISTER)
13025     return 0;
13026
13027   /* We only use "frame base" when we're sure we're talking about the
13028      post-prologue local stack frame.  We do this by *not* running
13029      register elimination until this point, and recognizing the special
13030      argument pointer and soft frame pointer rtx's.
13031      Use DW_OP_fbreg offset DW_OP_stack_value in this case.  */
13032   if ((rtl == arg_pointer_rtx || rtl == frame_pointer_rtx)
13033       && eliminate_regs (rtl, VOIDmode, NULL_RTX) != rtl)
13034     {
13035       dw_loc_descr_ref result = NULL;
13036
13037       if (dwarf_version >= 4 || !dwarf_strict)
13038         {
13039           result = mem_loc_descriptor (rtl, VOIDmode, initialized);
13040           if (result)
13041             add_loc_descr (&result,
13042                            new_loc_descr (DW_OP_stack_value, 0, 0));
13043         }
13044       return result;
13045     }
13046
13047   regs = targetm.dwarf_register_span (rtl);
13048
13049   if (hard_regno_nregs[REGNO (rtl)][GET_MODE (rtl)] > 1 || regs)
13050     return multiple_reg_loc_descriptor (rtl, regs, initialized);
13051   else
13052     return one_reg_loc_descriptor (dbx_reg_number (rtl), initialized);
13053 }
13054
13055 /* Return a location descriptor that designates a machine register for
13056    a given hard register number.  */
13057
13058 static dw_loc_descr_ref
13059 one_reg_loc_descriptor (unsigned int regno, enum var_init_status initialized)
13060 {
13061   dw_loc_descr_ref reg_loc_descr;
13062
13063   if (regno <= 31)
13064     reg_loc_descr
13065       = new_loc_descr ((enum dwarf_location_atom) (DW_OP_reg0 + regno), 0, 0);
13066   else
13067     reg_loc_descr = new_loc_descr (DW_OP_regx, regno, 0);
13068
13069   if (initialized == VAR_INIT_STATUS_UNINITIALIZED)
13070     add_loc_descr (&reg_loc_descr, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
13071
13072   return reg_loc_descr;
13073 }
13074
13075 /* Given an RTL of a register, return a location descriptor that
13076    designates a value that spans more than one register.  */
13077
13078 static dw_loc_descr_ref
13079 multiple_reg_loc_descriptor (rtx rtl, rtx regs,
13080                              enum var_init_status initialized)
13081 {
13082   int nregs, size, i;
13083   unsigned reg;
13084   dw_loc_descr_ref loc_result = NULL;
13085
13086   reg = REGNO (rtl);
13087 #ifdef LEAF_REG_REMAP
13088   if (current_function_uses_only_leaf_regs)
13089     {
13090       int leaf_reg = LEAF_REG_REMAP (reg);
13091       if (leaf_reg != -1)
13092         reg = (unsigned) leaf_reg;
13093     }
13094 #endif
13095   gcc_assert ((unsigned) DBX_REGISTER_NUMBER (reg) == dbx_reg_number (rtl));
13096   nregs = hard_regno_nregs[REGNO (rtl)][GET_MODE (rtl)];
13097
13098   /* Simple, contiguous registers.  */
13099   if (regs == NULL_RTX)
13100     {
13101       size = GET_MODE_SIZE (GET_MODE (rtl)) / nregs;
13102
13103       loc_result = NULL;
13104       while (nregs--)
13105         {
13106           dw_loc_descr_ref t;
13107
13108           t = one_reg_loc_descriptor (DBX_REGISTER_NUMBER (reg),
13109                                       VAR_INIT_STATUS_INITIALIZED);
13110           add_loc_descr (&loc_result, t);
13111           add_loc_descr_op_piece (&loc_result, size);
13112           ++reg;
13113         }
13114       return loc_result;
13115     }
13116
13117   /* Now onto stupid register sets in non contiguous locations.  */
13118
13119   gcc_assert (GET_CODE (regs) == PARALLEL);
13120
13121   size = GET_MODE_SIZE (GET_MODE (XVECEXP (regs, 0, 0)));
13122   loc_result = NULL;
13123
13124   for (i = 0; i < XVECLEN (regs, 0); ++i)
13125     {
13126       dw_loc_descr_ref t;
13127
13128       t = one_reg_loc_descriptor (REGNO (XVECEXP (regs, 0, i)),
13129                                   VAR_INIT_STATUS_INITIALIZED);
13130       add_loc_descr (&loc_result, t);
13131       size = GET_MODE_SIZE (GET_MODE (XVECEXP (regs, 0, 0)));
13132       add_loc_descr_op_piece (&loc_result, size);
13133     }
13134
13135   if (loc_result && initialized == VAR_INIT_STATUS_UNINITIALIZED)
13136     add_loc_descr (&loc_result, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
13137   return loc_result;
13138 }
13139
13140 #endif /* DWARF2_DEBUGGING_INFO */
13141
13142 #if defined (DWARF2_DEBUGGING_INFO) || defined (DWARF2_UNWIND_INFO)
13143
13144 /* Return a location descriptor that designates a constant.  */
13145
13146 static dw_loc_descr_ref
13147 int_loc_descriptor (HOST_WIDE_INT i)
13148 {
13149   enum dwarf_location_atom op;
13150
13151   /* Pick the smallest representation of a constant, rather than just
13152      defaulting to the LEB encoding.  */
13153   if (i >= 0)
13154     {
13155       if (i <= 31)
13156         op = (enum dwarf_location_atom) (DW_OP_lit0 + i);
13157       else if (i <= 0xff)
13158         op = DW_OP_const1u;
13159       else if (i <= 0xffff)
13160         op = DW_OP_const2u;
13161       else if (HOST_BITS_PER_WIDE_INT == 32
13162                || i <= 0xffffffff)
13163         op = DW_OP_const4u;
13164       else
13165         op = DW_OP_constu;
13166     }
13167   else
13168     {
13169       if (i >= -0x80)
13170         op = DW_OP_const1s;
13171       else if (i >= -0x8000)
13172         op = DW_OP_const2s;
13173       else if (HOST_BITS_PER_WIDE_INT == 32
13174                || i >= -0x80000000)
13175         op = DW_OP_const4s;
13176       else
13177         op = DW_OP_consts;
13178     }
13179
13180   return new_loc_descr (op, i, 0);
13181 }
13182 #endif
13183
13184 #ifdef DWARF2_DEBUGGING_INFO
13185 /* Return loc description representing "address" of integer value.
13186    This can appear only as toplevel expression.  */
13187
13188 static dw_loc_descr_ref
13189 address_of_int_loc_descriptor (int size, HOST_WIDE_INT i)
13190 {
13191   int litsize;
13192   dw_loc_descr_ref loc_result = NULL;
13193
13194   if (!(dwarf_version >= 4 || !dwarf_strict))
13195     return NULL;
13196
13197   if (i >= 0)
13198     {
13199       if (i <= 31)
13200         litsize = 1;
13201       else if (i <= 0xff)
13202         litsize = 2;
13203       else if (i <= 0xffff)
13204         litsize = 3;
13205       else if (HOST_BITS_PER_WIDE_INT == 32
13206                || i <= 0xffffffff)
13207         litsize = 5;
13208       else
13209         litsize = 1 + size_of_uleb128 ((unsigned HOST_WIDE_INT) i);
13210     }
13211   else
13212     {
13213       if (i >= -0x80)
13214         litsize = 2;
13215       else if (i >= -0x8000)
13216         litsize = 3;
13217       else if (HOST_BITS_PER_WIDE_INT == 32
13218                || i >= -0x80000000)
13219         litsize = 5;
13220       else
13221         litsize = 1 + size_of_sleb128 (i);
13222     }
13223   /* Determine if DW_OP_stack_value or DW_OP_implicit_value
13224      is more compact.  For DW_OP_stack_value we need:
13225      litsize + 1 (DW_OP_stack_value)
13226      and for DW_OP_implicit_value:
13227      1 (DW_OP_implicit_value) + 1 (length) + size.  */
13228   if ((int) DWARF2_ADDR_SIZE >= size && litsize + 1 <= 1 + 1 + size)
13229     {
13230       loc_result = int_loc_descriptor (i);
13231       add_loc_descr (&loc_result,
13232                      new_loc_descr (DW_OP_stack_value, 0, 0));
13233       return loc_result;
13234     }
13235
13236   loc_result = new_loc_descr (DW_OP_implicit_value,
13237                               size, 0);
13238   loc_result->dw_loc_oprnd2.val_class = dw_val_class_const;
13239   loc_result->dw_loc_oprnd2.v.val_int = i;
13240   return loc_result;
13241 }
13242
13243 /* Return a location descriptor that designates a base+offset location.  */
13244
13245 static dw_loc_descr_ref
13246 based_loc_descr (rtx reg, HOST_WIDE_INT offset,
13247                  enum var_init_status initialized)
13248 {
13249   unsigned int regno;
13250   dw_loc_descr_ref result;
13251   dw_fde_ref fde = current_fde ();
13252
13253   /* We only use "frame base" when we're sure we're talking about the
13254      post-prologue local stack frame.  We do this by *not* running
13255      register elimination until this point, and recognizing the special
13256      argument pointer and soft frame pointer rtx's.  */
13257   if (reg == arg_pointer_rtx || reg == frame_pointer_rtx)
13258     {
13259       rtx elim = eliminate_regs (reg, VOIDmode, NULL_RTX);
13260
13261       if (elim != reg)
13262         {
13263           if (GET_CODE (elim) == PLUS)
13264             {
13265               offset += INTVAL (XEXP (elim, 1));
13266               elim = XEXP (elim, 0);
13267             }
13268           gcc_assert ((SUPPORTS_STACK_ALIGNMENT
13269                        && (elim == hard_frame_pointer_rtx
13270                            || elim == stack_pointer_rtx))
13271                       || elim == (frame_pointer_needed
13272                                   ? hard_frame_pointer_rtx
13273                                   : stack_pointer_rtx));
13274
13275           /* If drap register is used to align stack, use frame
13276              pointer + offset to access stack variables.  If stack
13277              is aligned without drap, use stack pointer + offset to
13278              access stack variables.  */
13279           if (crtl->stack_realign_tried
13280               && reg == frame_pointer_rtx)
13281             {
13282               int base_reg
13283                 = DWARF_FRAME_REGNUM ((fde && fde->drap_reg != INVALID_REGNUM)
13284                                       ? HARD_FRAME_POINTER_REGNUM
13285                                       : STACK_POINTER_REGNUM);
13286               return new_reg_loc_descr (base_reg, offset);
13287             }
13288
13289           offset += frame_pointer_fb_offset;
13290           return new_loc_descr (DW_OP_fbreg, offset, 0);
13291         }
13292     }
13293   else if (!optimize
13294            && fde
13295            && (fde->drap_reg == REGNO (reg)
13296                || fde->vdrap_reg == REGNO (reg)))
13297     {
13298       /* Use cfa+offset to represent the location of arguments passed
13299          on the stack when drap is used to align stack.
13300          Only do this when not optimizing, for optimized code var-tracking
13301          is supposed to track where the arguments live and the register
13302          used as vdrap or drap in some spot might be used for something
13303          else in other part of the routine.  */
13304       return new_loc_descr (DW_OP_fbreg, offset, 0);
13305     }
13306
13307   regno = dbx_reg_number (reg);
13308   if (regno <= 31)
13309     result = new_loc_descr ((enum dwarf_location_atom) (DW_OP_breg0 + regno),
13310                             offset, 0);
13311   else
13312     result = new_loc_descr (DW_OP_bregx, regno, offset);
13313
13314   if (initialized == VAR_INIT_STATUS_UNINITIALIZED)
13315     add_loc_descr (&result, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
13316
13317   return result;
13318 }
13319
13320 /* Return true if this RTL expression describes a base+offset calculation.  */
13321
13322 static inline int
13323 is_based_loc (const_rtx rtl)
13324 {
13325   return (GET_CODE (rtl) == PLUS
13326           && ((REG_P (XEXP (rtl, 0))
13327                && REGNO (XEXP (rtl, 0)) < FIRST_PSEUDO_REGISTER
13328                && CONST_INT_P (XEXP (rtl, 1)))));
13329 }
13330
13331 /* Try to handle TLS MEMs, for which mem_loc_descriptor on XEXP (mem, 0)
13332    failed.  */
13333
13334 static dw_loc_descr_ref
13335 tls_mem_loc_descriptor (rtx mem)
13336 {
13337   tree base;
13338   dw_loc_descr_ref loc_result;
13339
13340   if (MEM_EXPR (mem) == NULL_TREE || MEM_OFFSET (mem) == NULL_RTX)
13341     return NULL;
13342
13343   base = get_base_address (MEM_EXPR (mem));
13344   if (base == NULL
13345       || TREE_CODE (base) != VAR_DECL
13346       || !DECL_THREAD_LOCAL_P (base))
13347     return NULL;
13348
13349   loc_result = loc_descriptor_from_tree (MEM_EXPR (mem), 1);
13350   if (loc_result == NULL)
13351     return NULL;
13352
13353   if (INTVAL (MEM_OFFSET (mem)))
13354     loc_descr_plus_const (&loc_result, INTVAL (MEM_OFFSET (mem)));
13355
13356   return loc_result;
13357 }
13358
13359 /* Output debug info about reason why we failed to expand expression as dwarf
13360    expression.  */
13361
13362 static void
13363 expansion_failed (tree expr, rtx rtl, char const *reason)
13364 {
13365   if (dump_file && (dump_flags & TDF_DETAILS))
13366     {
13367       fprintf (dump_file, "Failed to expand as dwarf: ");
13368       if (expr)
13369         print_generic_expr (dump_file, expr, dump_flags);
13370       if (rtl)
13371         {
13372           fprintf (dump_file, "\n");
13373           print_rtl (dump_file, rtl);
13374         }
13375       fprintf (dump_file, "\nReason: %s\n", reason);
13376     }
13377 }
13378
13379 /* Helper function for const_ok_for_output, called either directly
13380    or via for_each_rtx.  */
13381
13382 static int
13383 const_ok_for_output_1 (rtx *rtlp, void *data ATTRIBUTE_UNUSED)
13384 {
13385   rtx rtl = *rtlp;
13386
13387   if (GET_CODE (rtl) == UNSPEC)
13388     {
13389       /* If delegitimize_address couldn't do anything with the UNSPEC, assume
13390          we can't express it in the debug info.  */
13391 #ifdef ENABLE_CHECKING
13392       inform (current_function_decl
13393               ? DECL_SOURCE_LOCATION (current_function_decl)
13394               : UNKNOWN_LOCATION,
13395               "non-delegitimized UNSPEC %d found in variable location",
13396               XINT (rtl, 1));
13397 #endif
13398       expansion_failed (NULL_TREE, rtl,
13399                         "UNSPEC hasn't been delegitimized.\n");
13400       return 1;
13401     }
13402
13403   if (GET_CODE (rtl) != SYMBOL_REF)
13404     return 0;
13405
13406   if (CONSTANT_POOL_ADDRESS_P (rtl))
13407     {
13408       bool marked;
13409       get_pool_constant_mark (rtl, &marked);
13410       /* If all references to this pool constant were optimized away,
13411          it was not output and thus we can't represent it.  */
13412       if (!marked)
13413         {
13414           expansion_failed (NULL_TREE, rtl,
13415                             "Constant was removed from constant pool.\n");
13416           return 1;
13417         }
13418     }
13419
13420   if (SYMBOL_REF_TLS_MODEL (rtl) != TLS_MODEL_NONE)
13421     return 1;
13422
13423   /* Avoid references to external symbols in debug info, on several targets
13424      the linker might even refuse to link when linking a shared library,
13425      and in many other cases the relocations for .debug_info/.debug_loc are
13426      dropped, so the address becomes zero anyway.  Hidden symbols, guaranteed
13427      to be defined within the same shared library or executable are fine.  */
13428   if (SYMBOL_REF_EXTERNAL_P (rtl))
13429     {
13430       tree decl = SYMBOL_REF_DECL (rtl);
13431
13432       if (decl == NULL || !targetm.binds_local_p (decl))
13433         {
13434           expansion_failed (NULL_TREE, rtl,
13435                             "Symbol not defined in current TU.\n");
13436           return 1;
13437         }
13438     }
13439
13440   return 0;
13441 }
13442
13443 /* Return true if constant RTL can be emitted in DW_OP_addr or
13444    DW_AT_const_value.  TLS SYMBOL_REFs, external SYMBOL_REFs or
13445    non-marked constant pool SYMBOL_REFs can't be referenced in it.  */
13446
13447 static bool
13448 const_ok_for_output (rtx rtl)
13449 {
13450   if (GET_CODE (rtl) == SYMBOL_REF)
13451     return const_ok_for_output_1 (&rtl, NULL) == 0;
13452
13453   if (GET_CODE (rtl) == CONST)
13454     return for_each_rtx (&XEXP (rtl, 0), const_ok_for_output_1, NULL) == 0;
13455
13456   return true;
13457 }
13458
13459 /* The following routine converts the RTL for a variable or parameter
13460    (resident in memory) into an equivalent Dwarf representation of a
13461    mechanism for getting the address of that same variable onto the top of a
13462    hypothetical "address evaluation" stack.
13463
13464    When creating memory location descriptors, we are effectively transforming
13465    the RTL for a memory-resident object into its Dwarf postfix expression
13466    equivalent.  This routine recursively descends an RTL tree, turning
13467    it into Dwarf postfix code as it goes.
13468
13469    MODE is the mode of the memory reference, needed to handle some
13470    autoincrement addressing modes.
13471
13472    CAN_USE_FBREG is a flag whether we can use DW_AT_frame_base in the
13473    location list for RTL.
13474
13475    Return 0 if we can't represent the location.  */
13476
13477 static dw_loc_descr_ref
13478 mem_loc_descriptor (rtx rtl, enum machine_mode mode,
13479                     enum var_init_status initialized)
13480 {
13481   dw_loc_descr_ref mem_loc_result = NULL;
13482   enum dwarf_location_atom op;
13483   dw_loc_descr_ref op0, op1;
13484
13485   /* Note that for a dynamically sized array, the location we will generate a
13486      description of here will be the lowest numbered location which is
13487      actually within the array.  That's *not* necessarily the same as the
13488      zeroth element of the array.  */
13489
13490   rtl = targetm.delegitimize_address (rtl);
13491
13492   switch (GET_CODE (rtl))
13493     {
13494     case POST_INC:
13495     case POST_DEC:
13496     case POST_MODIFY:
13497       return mem_loc_descriptor (XEXP (rtl, 0), mode, initialized);
13498
13499     case SUBREG:
13500       /* The case of a subreg may arise when we have a local (register)
13501          variable or a formal (register) parameter which doesn't quite fill
13502          up an entire register.  For now, just assume that it is
13503          legitimate to make the Dwarf info refer to the whole register which
13504          contains the given subreg.  */
13505       if (!subreg_lowpart_p (rtl))
13506         break;
13507       rtl = SUBREG_REG (rtl);
13508       if (GET_MODE_SIZE (GET_MODE (rtl)) > DWARF2_ADDR_SIZE)
13509         break;
13510       if (GET_MODE_CLASS (GET_MODE (rtl)) != MODE_INT)
13511         break;
13512       mem_loc_result = mem_loc_descriptor (rtl, mode, initialized);
13513       break;
13514
13515     case REG:
13516       /* Whenever a register number forms a part of the description of the
13517          method for calculating the (dynamic) address of a memory resident
13518          object, DWARF rules require the register number be referred to as
13519          a "base register".  This distinction is not based in any way upon
13520          what category of register the hardware believes the given register
13521          belongs to.  This is strictly DWARF terminology we're dealing with
13522          here. Note that in cases where the location of a memory-resident
13523          data object could be expressed as: OP_ADD (OP_BASEREG (basereg),
13524          OP_CONST (0)) the actual DWARF location descriptor that we generate
13525          may just be OP_BASEREG (basereg).  This may look deceptively like
13526          the object in question was allocated to a register (rather than in
13527          memory) so DWARF consumers need to be aware of the subtle
13528          distinction between OP_REG and OP_BASEREG.  */
13529       if (REGNO (rtl) < FIRST_PSEUDO_REGISTER)
13530         mem_loc_result = based_loc_descr (rtl, 0, VAR_INIT_STATUS_INITIALIZED);
13531       else if (stack_realign_drap
13532                && crtl->drap_reg
13533                && crtl->args.internal_arg_pointer == rtl
13534                && REGNO (crtl->drap_reg) < FIRST_PSEUDO_REGISTER)
13535         {
13536           /* If RTL is internal_arg_pointer, which has been optimized
13537              out, use DRAP instead.  */
13538           mem_loc_result = based_loc_descr (crtl->drap_reg, 0,
13539                                             VAR_INIT_STATUS_INITIALIZED);
13540         }
13541       break;
13542
13543     case SIGN_EXTEND:
13544     case ZERO_EXTEND:
13545       op0 = mem_loc_descriptor (XEXP (rtl, 0), mode,
13546                                 VAR_INIT_STATUS_INITIALIZED);
13547       if (op0 == 0)
13548         break;
13549       else
13550         {
13551           int shift = DWARF2_ADDR_SIZE
13552                       - GET_MODE_SIZE (GET_MODE (XEXP (rtl, 0)));
13553           shift *= BITS_PER_UNIT;
13554           if (GET_CODE (rtl) == SIGN_EXTEND)
13555             op = DW_OP_shra;
13556           else
13557             op = DW_OP_shr;
13558           mem_loc_result = op0;
13559           add_loc_descr (&mem_loc_result, int_loc_descriptor (shift));
13560           add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_shl, 0, 0));
13561           add_loc_descr (&mem_loc_result, int_loc_descriptor (shift));
13562           add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0));
13563         }
13564       break;
13565
13566     case MEM:
13567       mem_loc_result = mem_loc_descriptor (XEXP (rtl, 0), GET_MODE (rtl),
13568                                            VAR_INIT_STATUS_INITIALIZED);
13569       if (mem_loc_result == NULL)
13570         mem_loc_result = tls_mem_loc_descriptor (rtl);
13571       if (mem_loc_result != 0)
13572         {
13573           if (GET_MODE_SIZE (GET_MODE (rtl)) > DWARF2_ADDR_SIZE)
13574             {
13575               expansion_failed (NULL_TREE, rtl, "DWARF address size mismatch");
13576               return 0;
13577             }
13578           else if (GET_MODE_SIZE (GET_MODE (rtl)) == DWARF2_ADDR_SIZE)
13579             add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_deref, 0, 0));
13580           else
13581             add_loc_descr (&mem_loc_result,
13582                            new_loc_descr (DW_OP_deref_size,
13583                                           GET_MODE_SIZE (GET_MODE (rtl)), 0));
13584         }
13585       else
13586         {
13587           rtx new_rtl = avoid_constant_pool_reference (rtl);
13588           if (new_rtl != rtl)
13589             return mem_loc_descriptor (new_rtl, mode, initialized);
13590         }
13591       break;
13592
13593     case LO_SUM:
13594          rtl = XEXP (rtl, 1);
13595
13596       /* ... fall through ...  */
13597
13598     case LABEL_REF:
13599       /* Some ports can transform a symbol ref into a label ref, because
13600          the symbol ref is too far away and has to be dumped into a constant
13601          pool.  */
13602     case CONST:
13603     case SYMBOL_REF:
13604       if (GET_CODE (rtl) == SYMBOL_REF
13605           && SYMBOL_REF_TLS_MODEL (rtl) != TLS_MODEL_NONE)
13606         {
13607           dw_loc_descr_ref temp;
13608
13609           /* If this is not defined, we have no way to emit the data.  */
13610           if (!targetm.have_tls || !targetm.asm_out.output_dwarf_dtprel)
13611             break;
13612
13613           /* We used to emit DW_OP_addr here, but that's wrong, since
13614              DW_OP_addr should be relocated by the debug info consumer,
13615              while DW_OP_GNU_push_tls_address operand should not.  */
13616           temp = new_loc_descr (DWARF2_ADDR_SIZE == 4
13617                                 ? DW_OP_const4u : DW_OP_const8u, 0, 0);
13618           temp->dw_loc_oprnd1.val_class = dw_val_class_addr;
13619           temp->dw_loc_oprnd1.v.val_addr = rtl;
13620           temp->dtprel = true;
13621
13622           mem_loc_result = new_loc_descr (DW_OP_GNU_push_tls_address, 0, 0);
13623           add_loc_descr (&mem_loc_result, temp);
13624
13625           break;
13626         }
13627
13628       if (!const_ok_for_output (rtl))
13629         break;
13630
13631     symref:
13632       mem_loc_result = new_loc_descr (DW_OP_addr, 0, 0);
13633       mem_loc_result->dw_loc_oprnd1.val_class = dw_val_class_addr;
13634       mem_loc_result->dw_loc_oprnd1.v.val_addr = rtl;
13635       VEC_safe_push (rtx, gc, used_rtx_array, rtl);
13636       break;
13637
13638     case CONCAT:
13639     case CONCATN:
13640     case VAR_LOCATION:
13641       expansion_failed (NULL_TREE, rtl,
13642                         "CONCAT/CONCATN/VAR_LOCATION is handled only by loc_descriptor");
13643       return 0;
13644
13645     case PRE_MODIFY:
13646       /* Extract the PLUS expression nested inside and fall into
13647          PLUS code below.  */
13648       rtl = XEXP (rtl, 1);
13649       goto plus;
13650
13651     case PRE_INC:
13652     case PRE_DEC:
13653       /* Turn these into a PLUS expression and fall into the PLUS code
13654          below.  */
13655       rtl = gen_rtx_PLUS (word_mode, XEXP (rtl, 0),
13656                           GEN_INT (GET_CODE (rtl) == PRE_INC
13657                                    ? GET_MODE_UNIT_SIZE (mode)
13658                                    : -GET_MODE_UNIT_SIZE (mode)));
13659
13660       /* ... fall through ...  */
13661
13662     case PLUS:
13663     plus:
13664       if (is_based_loc (rtl))
13665         mem_loc_result = based_loc_descr (XEXP (rtl, 0),
13666                                           INTVAL (XEXP (rtl, 1)),
13667                                           VAR_INIT_STATUS_INITIALIZED);
13668       else
13669         {
13670           mem_loc_result = mem_loc_descriptor (XEXP (rtl, 0), mode,
13671                                                VAR_INIT_STATUS_INITIALIZED);
13672           if (mem_loc_result == 0)
13673             break;
13674
13675           if (CONST_INT_P (XEXP (rtl, 1)))
13676             loc_descr_plus_const (&mem_loc_result, INTVAL (XEXP (rtl, 1)));
13677           else
13678             {
13679               dw_loc_descr_ref mem_loc_result2
13680                 = mem_loc_descriptor (XEXP (rtl, 1), mode,
13681                                       VAR_INIT_STATUS_INITIALIZED);
13682               if (mem_loc_result2 == 0)
13683                 break;
13684               add_loc_descr (&mem_loc_result, mem_loc_result2);
13685               add_loc_descr (&mem_loc_result,
13686                              new_loc_descr (DW_OP_plus, 0, 0));
13687             }
13688         }
13689       break;
13690
13691     /* If a pseudo-reg is optimized away, it is possible for it to
13692        be replaced with a MEM containing a multiply or shift.  */
13693     case MINUS:
13694       op = DW_OP_minus;
13695       goto do_binop;
13696
13697     case MULT:
13698       op = DW_OP_mul;
13699       goto do_binop;
13700
13701     case DIV:
13702       op = DW_OP_div;
13703       goto do_binop;
13704
13705     case UMOD:
13706       op = DW_OP_mod;
13707       goto do_binop;
13708
13709     case ASHIFT:
13710       op = DW_OP_shl;
13711       goto do_binop;
13712
13713     case ASHIFTRT:
13714       op = DW_OP_shra;
13715       goto do_binop;
13716
13717     case LSHIFTRT:
13718       op = DW_OP_shr;
13719       goto do_binop;
13720
13721     case AND:
13722       op = DW_OP_and;
13723       goto do_binop;
13724
13725     case IOR:
13726       op = DW_OP_or;
13727       goto do_binop;
13728
13729     case XOR:
13730       op = DW_OP_xor;
13731       goto do_binop;
13732
13733     do_binop:
13734       op0 = mem_loc_descriptor (XEXP (rtl, 0), mode,
13735                                 VAR_INIT_STATUS_INITIALIZED);
13736       op1 = mem_loc_descriptor (XEXP (rtl, 1), mode,
13737                                 VAR_INIT_STATUS_INITIALIZED);
13738
13739       if (op0 == 0 || op1 == 0)
13740         break;
13741
13742       mem_loc_result = op0;
13743       add_loc_descr (&mem_loc_result, op1);
13744       add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0));
13745       break;
13746
13747     case MOD:
13748       op0 = mem_loc_descriptor (XEXP (rtl, 0), mode,
13749                                 VAR_INIT_STATUS_INITIALIZED);
13750       op1 = mem_loc_descriptor (XEXP (rtl, 1), mode,
13751                                 VAR_INIT_STATUS_INITIALIZED);
13752
13753       if (op0 == 0 || op1 == 0)
13754         break;
13755
13756       mem_loc_result = op0;
13757       add_loc_descr (&mem_loc_result, op1);
13758       add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_over, 0, 0));
13759       add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_over, 0, 0));
13760       add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_div, 0, 0));
13761       add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_mul, 0, 0));
13762       add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_minus, 0, 0));
13763       break;
13764
13765     case NOT:
13766       op = DW_OP_not;
13767       goto do_unop;
13768
13769     case ABS:
13770       op = DW_OP_abs;
13771       goto do_unop;
13772
13773     case NEG:
13774       op = DW_OP_neg;
13775       goto do_unop;
13776
13777     do_unop:
13778       op0 = mem_loc_descriptor (XEXP (rtl, 0), mode,
13779                                 VAR_INIT_STATUS_INITIALIZED);
13780
13781       if (op0 == 0)
13782         break;
13783
13784       mem_loc_result = op0;
13785       add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0));
13786       break;
13787
13788     case CONST_INT:
13789       mem_loc_result = int_loc_descriptor (INTVAL (rtl));
13790       break;
13791
13792     case EQ:
13793       op = DW_OP_eq;
13794       goto do_scompare;
13795
13796     case GE:
13797       op = DW_OP_ge;
13798       goto do_scompare;
13799
13800     case GT:
13801       op = DW_OP_gt;
13802       goto do_scompare;
13803
13804     case LE:
13805       op = DW_OP_le;
13806       goto do_scompare;
13807
13808     case LT:
13809       op = DW_OP_lt;
13810       goto do_scompare;
13811
13812     case NE:
13813       op = DW_OP_ne;
13814       goto do_scompare;
13815
13816     do_scompare:
13817       if (GET_MODE_SIZE (GET_MODE (XEXP (rtl, 0))) > DWARF2_ADDR_SIZE
13818           || GET_MODE_SIZE (GET_MODE (XEXP (rtl, 1))) > DWARF2_ADDR_SIZE)
13819         break;
13820       else
13821         {
13822           enum machine_mode op_mode = GET_MODE (XEXP (rtl, 0));
13823
13824           if (op_mode == VOIDmode)
13825             op_mode = GET_MODE (XEXP (rtl, 1));
13826           if (op_mode != VOIDmode && GET_MODE_CLASS (op_mode) != MODE_INT)
13827             break;
13828
13829           op0 = mem_loc_descriptor (XEXP (rtl, 0), mode,
13830                                     VAR_INIT_STATUS_INITIALIZED);
13831           op1 = mem_loc_descriptor (XEXP (rtl, 1), mode,
13832                                     VAR_INIT_STATUS_INITIALIZED);
13833
13834           if (op0 == 0 || op1 == 0)
13835             break;
13836
13837           if (op_mode != VOIDmode
13838               && GET_MODE_SIZE (op_mode) < DWARF2_ADDR_SIZE)
13839             {
13840               int shift = DWARF2_ADDR_SIZE - GET_MODE_SIZE (op_mode);
13841               shift *= BITS_PER_UNIT;
13842               /* For eq/ne, if the operands are known to be zero-extended,
13843                  there is no need to do the fancy shifting up.  */
13844               if (op == DW_OP_eq || op == DW_OP_ne)
13845                 {
13846                   dw_loc_descr_ref last0, last1;
13847                   for (last0 = op0;
13848                        last0->dw_loc_next != NULL;
13849                        last0 = last0->dw_loc_next)
13850                     ;
13851                   for (last1 = op1;
13852                        last1->dw_loc_next != NULL;
13853                        last1 = last1->dw_loc_next)
13854                     ;
13855                   /* deref_size zero extends, and for constants we can check
13856                      whether they are zero extended or not.  */
13857                   if (((last0->dw_loc_opc == DW_OP_deref_size
13858                         && last0->dw_loc_oprnd1.v.val_int
13859                            <= GET_MODE_SIZE (op_mode))
13860                        || (CONST_INT_P (XEXP (rtl, 0))
13861                             && (unsigned HOST_WIDE_INT) INTVAL (XEXP (rtl, 0))
13862                                == (INTVAL (XEXP (rtl, 0))
13863                                    & GET_MODE_MASK (op_mode))))
13864                       && ((last1->dw_loc_opc == DW_OP_deref_size
13865                            && last1->dw_loc_oprnd1.v.val_int
13866                               <= GET_MODE_SIZE (op_mode))
13867                           || (CONST_INT_P (XEXP (rtl, 1))
13868                               && (unsigned HOST_WIDE_INT)
13869                                  INTVAL (XEXP (rtl, 1))
13870                                  == (INTVAL (XEXP (rtl, 1))
13871                                      & GET_MODE_MASK (op_mode)))))
13872                     goto do_compare;
13873                 }
13874               add_loc_descr (&op0, int_loc_descriptor (shift));
13875               add_loc_descr (&op0, new_loc_descr (DW_OP_shl, 0, 0));
13876               if (CONST_INT_P (XEXP (rtl, 1)))
13877                 op1 = int_loc_descriptor (INTVAL (XEXP (rtl, 1)) << shift);
13878               else
13879                 {
13880                   add_loc_descr (&op1, int_loc_descriptor (shift));
13881                   add_loc_descr (&op1, new_loc_descr (DW_OP_shl, 0, 0));
13882                 }
13883             }
13884         }
13885
13886     do_compare:
13887       mem_loc_result = op0;
13888       add_loc_descr (&mem_loc_result, op1);
13889       add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0));
13890       if (STORE_FLAG_VALUE != 1)
13891         {
13892           add_loc_descr (&mem_loc_result,
13893                          int_loc_descriptor (STORE_FLAG_VALUE));
13894           add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_mul, 0, 0));
13895         }
13896       break;
13897
13898     case GEU:
13899       op = DW_OP_ge;
13900       goto do_ucompare;
13901
13902     case GTU:
13903       op = DW_OP_gt;
13904       goto do_ucompare;
13905
13906     case LEU:
13907       op = DW_OP_le;
13908       goto do_ucompare;
13909
13910     case LTU:
13911       op = DW_OP_lt;
13912       goto do_ucompare;
13913
13914     do_ucompare:
13915       if (GET_MODE_SIZE (GET_MODE (XEXP (rtl, 0))) > DWARF2_ADDR_SIZE
13916           || GET_MODE_SIZE (GET_MODE (XEXP (rtl, 1))) > DWARF2_ADDR_SIZE)
13917         break;
13918       else
13919         {
13920           enum machine_mode op_mode = GET_MODE (XEXP (rtl, 0));
13921
13922           if (op_mode == VOIDmode)
13923             op_mode = GET_MODE (XEXP (rtl, 1));
13924           if (op_mode != VOIDmode && GET_MODE_CLASS (op_mode) != MODE_INT)
13925             break;
13926
13927           op0 = mem_loc_descriptor (XEXP (rtl, 0), mode,
13928                                     VAR_INIT_STATUS_INITIALIZED);
13929           op1 = mem_loc_descriptor (XEXP (rtl, 1), mode,
13930                                     VAR_INIT_STATUS_INITIALIZED);
13931
13932           if (op0 == 0 || op1 == 0)
13933             break;
13934
13935           if (op_mode != VOIDmode
13936               && GET_MODE_SIZE (op_mode) < DWARF2_ADDR_SIZE)
13937             {
13938               HOST_WIDE_INT mask = GET_MODE_MASK (op_mode);
13939               dw_loc_descr_ref last0, last1;
13940               for (last0 = op0;
13941                    last0->dw_loc_next != NULL;
13942                    last0 = last0->dw_loc_next)
13943                 ;
13944               for (last1 = op1;
13945                    last1->dw_loc_next != NULL;
13946                    last1 = last1->dw_loc_next)
13947                 ;
13948               if (CONST_INT_P (XEXP (rtl, 0)))
13949                 op0 = int_loc_descriptor (INTVAL (XEXP (rtl, 0)) & mask);
13950               /* deref_size zero extends, so no need to mask it again.  */
13951               else if (last0->dw_loc_opc != DW_OP_deref_size
13952                        || last0->dw_loc_oprnd1.v.val_int
13953                           > GET_MODE_SIZE (op_mode))
13954                 {
13955                   add_loc_descr (&op0, int_loc_descriptor (mask));
13956                   add_loc_descr (&op0, new_loc_descr (DW_OP_and, 0, 0));
13957                 }
13958               if (CONST_INT_P (XEXP (rtl, 1)))
13959                 op1 = int_loc_descriptor (INTVAL (XEXP (rtl, 1)) & mask);
13960               /* deref_size zero extends, so no need to mask it again.  */
13961               else if (last1->dw_loc_opc != DW_OP_deref_size
13962                        || last1->dw_loc_oprnd1.v.val_int
13963                           > GET_MODE_SIZE (op_mode))
13964                 {
13965                   add_loc_descr (&op1, int_loc_descriptor (mask));
13966                   add_loc_descr (&op1, new_loc_descr (DW_OP_and, 0, 0));
13967                 }
13968             }
13969           else
13970             {
13971               HOST_WIDE_INT bias = 1;
13972               bias <<= (DWARF2_ADDR_SIZE * BITS_PER_UNIT - 1);
13973               add_loc_descr (&op0, new_loc_descr (DW_OP_plus_uconst, bias, 0));
13974               if (CONST_INT_P (XEXP (rtl, 1)))
13975                 op1 = int_loc_descriptor ((unsigned HOST_WIDE_INT) bias
13976                                           + INTVAL (XEXP (rtl, 1)));
13977               else
13978                 add_loc_descr (&op1, new_loc_descr (DW_OP_plus_uconst,
13979                                                     bias, 0));
13980             }
13981         }
13982       goto do_compare;
13983
13984     case SMIN:
13985     case SMAX:
13986     case UMIN:
13987     case UMAX:
13988       if (GET_MODE_CLASS (GET_MODE (XEXP (rtl, 0))) != MODE_INT
13989           || GET_MODE_SIZE (GET_MODE (XEXP (rtl, 0))) > DWARF2_ADDR_SIZE
13990           || GET_MODE (XEXP (rtl, 0)) != GET_MODE (XEXP (rtl, 1)))
13991         break;
13992
13993       op0 = mem_loc_descriptor (XEXP (rtl, 0), mode,
13994                                 VAR_INIT_STATUS_INITIALIZED);
13995       op1 = mem_loc_descriptor (XEXP (rtl, 1), mode,
13996                                 VAR_INIT_STATUS_INITIALIZED);
13997
13998       if (op0 == 0 || op1 == 0)
13999         break;
14000
14001       add_loc_descr (&op0, new_loc_descr (DW_OP_dup, 0, 0));
14002       add_loc_descr (&op1, new_loc_descr (DW_OP_swap, 0, 0));
14003       add_loc_descr (&op1, new_loc_descr (DW_OP_over, 0, 0));
14004       if (GET_CODE (rtl) == UMIN || GET_CODE (rtl) == UMAX)
14005         {
14006           if (GET_MODE_SIZE (GET_MODE (XEXP (rtl, 0))) < DWARF2_ADDR_SIZE)
14007             {
14008               HOST_WIDE_INT mask = GET_MODE_MASK (GET_MODE (XEXP (rtl, 0)));
14009               add_loc_descr (&op0, int_loc_descriptor (mask));
14010               add_loc_descr (&op0, new_loc_descr (DW_OP_and, 0, 0));
14011               add_loc_descr (&op1, int_loc_descriptor (mask));
14012               add_loc_descr (&op1, new_loc_descr (DW_OP_and, 0, 0));
14013             }
14014           else
14015             {
14016               HOST_WIDE_INT bias = 1;
14017               bias <<= (DWARF2_ADDR_SIZE * BITS_PER_UNIT - 1);
14018               add_loc_descr (&op0, new_loc_descr (DW_OP_plus_uconst, bias, 0));
14019               add_loc_descr (&op1, new_loc_descr (DW_OP_plus_uconst, bias, 0));
14020             }
14021         }
14022       else if (GET_MODE_SIZE (GET_MODE (XEXP (rtl, 0))) < DWARF2_ADDR_SIZE)
14023         {
14024           int shift = DWARF2_ADDR_SIZE
14025                       - GET_MODE_SIZE (GET_MODE (XEXP (rtl, 0)));
14026           shift *= BITS_PER_UNIT;
14027           add_loc_descr (&op0, int_loc_descriptor (shift));
14028           add_loc_descr (&op0, new_loc_descr (DW_OP_shl, 0, 0));
14029           add_loc_descr (&op1, int_loc_descriptor (shift));
14030           add_loc_descr (&op1, new_loc_descr (DW_OP_shl, 0, 0));
14031         }
14032
14033       if (GET_CODE (rtl) == SMIN || GET_CODE (rtl) == UMIN)
14034         op = DW_OP_lt;
14035       else
14036         op = DW_OP_gt;
14037       mem_loc_result = op0;
14038       add_loc_descr (&mem_loc_result, op1);
14039       add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0));
14040       {
14041         dw_loc_descr_ref bra_node, drop_node;
14042
14043         bra_node = new_loc_descr (DW_OP_bra, 0, 0);
14044         add_loc_descr (&mem_loc_result, bra_node);
14045         add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_swap, 0, 0));
14046         drop_node = new_loc_descr (DW_OP_drop, 0, 0);
14047         add_loc_descr (&mem_loc_result, drop_node);
14048         bra_node->dw_loc_oprnd1.val_class = dw_val_class_loc;
14049         bra_node->dw_loc_oprnd1.v.val_loc = drop_node;
14050       }
14051       break;
14052
14053     case ZERO_EXTRACT:
14054     case SIGN_EXTRACT:
14055       if (CONST_INT_P (XEXP (rtl, 1))
14056           && CONST_INT_P (XEXP (rtl, 2))
14057           && ((unsigned) INTVAL (XEXP (rtl, 1))
14058               + (unsigned) INTVAL (XEXP (rtl, 2))
14059               <= GET_MODE_BITSIZE (GET_MODE (rtl)))
14060           && GET_MODE_BITSIZE (GET_MODE (rtl)) <= DWARF2_ADDR_SIZE
14061           && GET_MODE_BITSIZE (GET_MODE (XEXP (rtl, 0))) <= DWARF2_ADDR_SIZE)
14062         {
14063           int shift, size;
14064           op0 = mem_loc_descriptor (XEXP (rtl, 0), mode,
14065                                     VAR_INIT_STATUS_INITIALIZED);
14066           if (op0 == 0)
14067             break;
14068           if (GET_CODE (rtl) == SIGN_EXTRACT)
14069             op = DW_OP_shra;
14070           else
14071             op = DW_OP_shr;
14072           mem_loc_result = op0;
14073           size = INTVAL (XEXP (rtl, 1));
14074           shift = INTVAL (XEXP (rtl, 2));
14075           if (BITS_BIG_ENDIAN)
14076             shift = GET_MODE_BITSIZE (GET_MODE (XEXP (rtl, 0)))
14077                     - shift - size;
14078           if (shift + size != (int) DWARF2_ADDR_SIZE)
14079             {
14080               add_loc_descr (&mem_loc_result,
14081                              int_loc_descriptor (DWARF2_ADDR_SIZE
14082                                                  - shift - size));
14083               add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_shl, 0, 0));
14084             }
14085           if (size != (int) DWARF2_ADDR_SIZE)
14086             {
14087               add_loc_descr (&mem_loc_result,
14088                              int_loc_descriptor (DWARF2_ADDR_SIZE - size));
14089               add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0));
14090             }
14091         }
14092       break;
14093
14094     case COMPARE:
14095     case IF_THEN_ELSE:
14096     case ROTATE:
14097     case ROTATERT:
14098     case TRUNCATE:
14099       /* In theory, we could implement the above.  */
14100       /* DWARF cannot represent the unsigned compare operations
14101          natively.  */
14102     case SS_MULT:
14103     case US_MULT:
14104     case SS_DIV:
14105     case US_DIV:
14106     case SS_PLUS:
14107     case US_PLUS:
14108     case SS_MINUS:
14109     case US_MINUS:
14110     case SS_NEG:
14111     case US_NEG:
14112     case SS_ABS:
14113     case SS_ASHIFT:
14114     case US_ASHIFT:
14115     case SS_TRUNCATE:
14116     case US_TRUNCATE:
14117     case UDIV:
14118     case UNORDERED:
14119     case ORDERED:
14120     case UNEQ:
14121     case UNGE:
14122     case UNGT:
14123     case UNLE:
14124     case UNLT:
14125     case LTGT:
14126     case FLOAT_EXTEND:
14127     case FLOAT_TRUNCATE:
14128     case FLOAT:
14129     case UNSIGNED_FLOAT:
14130     case FIX:
14131     case UNSIGNED_FIX:
14132     case FRACT_CONVERT:
14133     case UNSIGNED_FRACT_CONVERT:
14134     case SAT_FRACT:
14135     case UNSIGNED_SAT_FRACT:
14136     case SQRT:
14137     case BSWAP:
14138     case FFS:
14139     case CLZ:
14140     case CTZ:
14141     case POPCOUNT:
14142     case PARITY:
14143     case ASM_OPERANDS:
14144     case VEC_MERGE:
14145     case VEC_SELECT:
14146     case VEC_CONCAT:
14147     case VEC_DUPLICATE:
14148     case UNSPEC:
14149     case HIGH:
14150       /* If delegitimize_address couldn't do anything with the UNSPEC, we
14151          can't express it in the debug info.  This can happen e.g. with some
14152          TLS UNSPECs.  */
14153       break;
14154
14155     case CONST_STRING:
14156       resolve_one_addr (&rtl, NULL);
14157       goto symref;
14158
14159     default:
14160 #ifdef ENABLE_CHECKING
14161       print_rtl (stderr, rtl);
14162       gcc_unreachable ();
14163 #else
14164       break;
14165 #endif
14166     }
14167
14168   if (mem_loc_result && initialized == VAR_INIT_STATUS_UNINITIALIZED)
14169     add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
14170
14171   return mem_loc_result;
14172 }
14173
14174 /* Return a descriptor that describes the concatenation of two locations.
14175    This is typically a complex variable.  */
14176
14177 static dw_loc_descr_ref
14178 concat_loc_descriptor (rtx x0, rtx x1, enum var_init_status initialized)
14179 {
14180   dw_loc_descr_ref cc_loc_result = NULL;
14181   dw_loc_descr_ref x0_ref
14182     = loc_descriptor (x0, VOIDmode, VAR_INIT_STATUS_INITIALIZED);
14183   dw_loc_descr_ref x1_ref
14184     = loc_descriptor (x1, VOIDmode, VAR_INIT_STATUS_INITIALIZED);
14185
14186   if (x0_ref == 0 || x1_ref == 0)
14187     return 0;
14188
14189   cc_loc_result = x0_ref;
14190   add_loc_descr_op_piece (&cc_loc_result, GET_MODE_SIZE (GET_MODE (x0)));
14191
14192   add_loc_descr (&cc_loc_result, x1_ref);
14193   add_loc_descr_op_piece (&cc_loc_result, GET_MODE_SIZE (GET_MODE (x1)));
14194
14195   if (initialized == VAR_INIT_STATUS_UNINITIALIZED)
14196     add_loc_descr (&cc_loc_result, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
14197
14198   return cc_loc_result;
14199 }
14200
14201 /* Return a descriptor that describes the concatenation of N
14202    locations.  */
14203
14204 static dw_loc_descr_ref
14205 concatn_loc_descriptor (rtx concatn, enum var_init_status initialized)
14206 {
14207   unsigned int i;
14208   dw_loc_descr_ref cc_loc_result = NULL;
14209   unsigned int n = XVECLEN (concatn, 0);
14210
14211   for (i = 0; i < n; ++i)
14212     {
14213       dw_loc_descr_ref ref;
14214       rtx x = XVECEXP (concatn, 0, i);
14215
14216       ref = loc_descriptor (x, VOIDmode, VAR_INIT_STATUS_INITIALIZED);
14217       if (ref == NULL)
14218         return NULL;
14219
14220       add_loc_descr (&cc_loc_result, ref);
14221       add_loc_descr_op_piece (&cc_loc_result, GET_MODE_SIZE (GET_MODE (x)));
14222     }
14223
14224   if (cc_loc_result && initialized == VAR_INIT_STATUS_UNINITIALIZED)
14225     add_loc_descr (&cc_loc_result, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
14226
14227   return cc_loc_result;
14228 }
14229
14230 /* Output a proper Dwarf location descriptor for a variable or parameter
14231    which is either allocated in a register or in a memory location.  For a
14232    register, we just generate an OP_REG and the register number.  For a
14233    memory location we provide a Dwarf postfix expression describing how to
14234    generate the (dynamic) address of the object onto the address stack.
14235
14236    MODE is mode of the decl if this loc_descriptor is going to be used in
14237    .debug_loc section where DW_OP_stack_value and DW_OP_implicit_value are
14238    allowed, VOIDmode otherwise.
14239
14240    If we don't know how to describe it, return 0.  */
14241
14242 static dw_loc_descr_ref
14243 loc_descriptor (rtx rtl, enum machine_mode mode,
14244                 enum var_init_status initialized)
14245 {
14246   dw_loc_descr_ref loc_result = NULL;
14247
14248   switch (GET_CODE (rtl))
14249     {
14250     case SUBREG:
14251       /* The case of a subreg may arise when we have a local (register)
14252          variable or a formal (register) parameter which doesn't quite fill
14253          up an entire register.  For now, just assume that it is
14254          legitimate to make the Dwarf info refer to the whole register which
14255          contains the given subreg.  */
14256       loc_result = loc_descriptor (SUBREG_REG (rtl), mode, initialized);
14257       break;
14258
14259     case REG:
14260       loc_result = reg_loc_descriptor (rtl, initialized);
14261       break;
14262
14263     case MEM:
14264       loc_result = mem_loc_descriptor (XEXP (rtl, 0), GET_MODE (rtl),
14265                                        initialized);
14266       if (loc_result == NULL)
14267         loc_result = tls_mem_loc_descriptor (rtl);
14268       if (loc_result == NULL)
14269         {
14270           rtx new_rtl = avoid_constant_pool_reference (rtl);
14271           if (new_rtl != rtl)
14272             loc_result = loc_descriptor (new_rtl, mode, initialized);
14273         }
14274       break;
14275
14276     case CONCAT:
14277       loc_result = concat_loc_descriptor (XEXP (rtl, 0), XEXP (rtl, 1),
14278                                           initialized);
14279       break;
14280
14281     case CONCATN:
14282       loc_result = concatn_loc_descriptor (rtl, initialized);
14283       break;
14284
14285     case VAR_LOCATION:
14286       /* Single part.  */
14287       if (GET_CODE (PAT_VAR_LOCATION_LOC (rtl)) != PARALLEL)
14288         {
14289           rtx loc = PAT_VAR_LOCATION_LOC (rtl);
14290           if (GET_CODE (loc) == EXPR_LIST)
14291             loc = XEXP (loc, 0);
14292           loc_result = loc_descriptor (loc, mode, initialized);
14293           break;
14294         }
14295
14296       rtl = XEXP (rtl, 1);
14297       /* FALLTHRU */
14298
14299     case PARALLEL:
14300       {
14301         rtvec par_elems = XVEC (rtl, 0);
14302         int num_elem = GET_NUM_ELEM (par_elems);
14303         enum machine_mode mode;
14304         int i;
14305
14306         /* Create the first one, so we have something to add to.  */
14307         loc_result = loc_descriptor (XEXP (RTVEC_ELT (par_elems, 0), 0),
14308                                      VOIDmode, initialized);
14309         if (loc_result == NULL)
14310           return NULL;
14311         mode = GET_MODE (XEXP (RTVEC_ELT (par_elems, 0), 0));
14312         add_loc_descr_op_piece (&loc_result, GET_MODE_SIZE (mode));
14313         for (i = 1; i < num_elem; i++)
14314           {
14315             dw_loc_descr_ref temp;
14316
14317             temp = loc_descriptor (XEXP (RTVEC_ELT (par_elems, i), 0),
14318                                    VOIDmode, initialized);
14319             if (temp == NULL)
14320               return NULL;
14321             add_loc_descr (&loc_result, temp);
14322             mode = GET_MODE (XEXP (RTVEC_ELT (par_elems, i), 0));
14323             add_loc_descr_op_piece (&loc_result, GET_MODE_SIZE (mode));
14324           }
14325       }
14326       break;
14327
14328     case CONST_INT:
14329       if (mode != VOIDmode && mode != BLKmode)
14330         loc_result = address_of_int_loc_descriptor (GET_MODE_SIZE (mode),
14331                                                     INTVAL (rtl));
14332       break;
14333
14334     case CONST_DOUBLE:
14335       if (mode == VOIDmode)
14336         mode = GET_MODE (rtl);
14337
14338       if (mode != VOIDmode && (dwarf_version >= 4 || !dwarf_strict))
14339         {
14340           gcc_assert (mode == GET_MODE (rtl) || VOIDmode == GET_MODE (rtl));
14341
14342           /* Note that a CONST_DOUBLE rtx could represent either an integer
14343              or a floating-point constant.  A CONST_DOUBLE is used whenever
14344              the constant requires more than one word in order to be
14345              adequately represented.  We output CONST_DOUBLEs as blocks.  */
14346           loc_result = new_loc_descr (DW_OP_implicit_value,
14347                                       GET_MODE_SIZE (mode), 0);
14348           if (SCALAR_FLOAT_MODE_P (mode))
14349             {
14350               unsigned int length = GET_MODE_SIZE (mode);
14351               unsigned char *array
14352                   = (unsigned char*) ggc_alloc_atomic (length);
14353
14354               insert_float (rtl, array);
14355               loc_result->dw_loc_oprnd2.val_class = dw_val_class_vec;
14356               loc_result->dw_loc_oprnd2.v.val_vec.length = length / 4;
14357               loc_result->dw_loc_oprnd2.v.val_vec.elt_size = 4;
14358               loc_result->dw_loc_oprnd2.v.val_vec.array = array;
14359             }
14360           else
14361             {
14362               loc_result->dw_loc_oprnd2.val_class = dw_val_class_const_double;
14363               loc_result->dw_loc_oprnd2.v.val_double
14364                 = rtx_to_double_int (rtl);
14365             }
14366         }
14367       break;
14368
14369     case CONST_VECTOR:
14370       if (mode == VOIDmode)
14371         mode = GET_MODE (rtl);
14372
14373       if (mode != VOIDmode && (dwarf_version >= 4 || !dwarf_strict))
14374         {
14375           unsigned int elt_size = GET_MODE_UNIT_SIZE (GET_MODE (rtl));
14376           unsigned int length = CONST_VECTOR_NUNITS (rtl);
14377           unsigned char *array = (unsigned char *)
14378             ggc_alloc_atomic (length * elt_size);
14379           unsigned int i;
14380           unsigned char *p;
14381
14382           gcc_assert (mode == GET_MODE (rtl) || VOIDmode == GET_MODE (rtl));
14383           switch (GET_MODE_CLASS (mode))
14384             {
14385             case MODE_VECTOR_INT:
14386               for (i = 0, p = array; i < length; i++, p += elt_size)
14387                 {
14388                   rtx elt = CONST_VECTOR_ELT (rtl, i);
14389                   double_int val = rtx_to_double_int (elt);
14390
14391                   if (elt_size <= sizeof (HOST_WIDE_INT))
14392                     insert_int (double_int_to_shwi (val), elt_size, p);
14393                   else
14394                     {
14395                       gcc_assert (elt_size == 2 * sizeof (HOST_WIDE_INT));
14396                       insert_double (val, p);
14397                     }
14398                 }
14399               break;
14400
14401             case MODE_VECTOR_FLOAT:
14402               for (i = 0, p = array; i < length; i++, p += elt_size)
14403                 {
14404                   rtx elt = CONST_VECTOR_ELT (rtl, i);
14405                   insert_float (elt, p);
14406                 }
14407               break;
14408
14409             default:
14410               gcc_unreachable ();
14411             }
14412
14413           loc_result = new_loc_descr (DW_OP_implicit_value,
14414                                       length * elt_size, 0);
14415           loc_result->dw_loc_oprnd2.val_class = dw_val_class_vec;
14416           loc_result->dw_loc_oprnd2.v.val_vec.length = length;
14417           loc_result->dw_loc_oprnd2.v.val_vec.elt_size = elt_size;
14418           loc_result->dw_loc_oprnd2.v.val_vec.array = array;
14419         }
14420       break;
14421
14422     case CONST:
14423       if (mode == VOIDmode
14424           || GET_CODE (XEXP (rtl, 0)) == CONST_INT
14425           || GET_CODE (XEXP (rtl, 0)) == CONST_DOUBLE
14426           || GET_CODE (XEXP (rtl, 0)) == CONST_VECTOR)
14427         {
14428           loc_result = loc_descriptor (XEXP (rtl, 0), mode, initialized);
14429           break;
14430         }
14431       /* FALLTHROUGH */
14432     case SYMBOL_REF:
14433       if (!const_ok_for_output (rtl))
14434         break;
14435     case LABEL_REF:
14436       if (mode != VOIDmode && GET_MODE_SIZE (mode) == DWARF2_ADDR_SIZE
14437           && (dwarf_version >= 4 || !dwarf_strict))
14438         {
14439           loc_result = new_loc_descr (DW_OP_addr, 0, 0);
14440           loc_result->dw_loc_oprnd1.val_class = dw_val_class_addr;
14441           loc_result->dw_loc_oprnd1.v.val_addr = rtl;
14442           add_loc_descr (&loc_result, new_loc_descr (DW_OP_stack_value, 0, 0));
14443           VEC_safe_push (rtx, gc, used_rtx_array, rtl);
14444         }
14445       break;
14446
14447     default:
14448       if (GET_MODE_CLASS (mode) == MODE_INT && GET_MODE (rtl) == mode
14449           && GET_MODE_SIZE (GET_MODE (rtl)) <= DWARF2_ADDR_SIZE
14450           && (dwarf_version >= 4 || !dwarf_strict))
14451         {
14452           /* Value expression.  */
14453           loc_result = mem_loc_descriptor (rtl, VOIDmode, initialized);
14454           if (loc_result)
14455             add_loc_descr (&loc_result,
14456                            new_loc_descr (DW_OP_stack_value, 0, 0));
14457         }
14458       break;
14459     }
14460
14461   return loc_result;
14462 }
14463
14464 /* We need to figure out what section we should use as the base for the
14465    address ranges where a given location is valid.
14466    1. If this particular DECL has a section associated with it, use that.
14467    2. If this function has a section associated with it, use that.
14468    3. Otherwise, use the text section.
14469    XXX: If you split a variable across multiple sections, we won't notice.  */
14470
14471 static const char *
14472 secname_for_decl (const_tree decl)
14473 {
14474   const char *secname;
14475
14476   if (VAR_OR_FUNCTION_DECL_P (decl) && DECL_SECTION_NAME (decl))
14477     {
14478       tree sectree = DECL_SECTION_NAME (decl);
14479       secname = TREE_STRING_POINTER (sectree);
14480     }
14481   else if (current_function_decl && DECL_SECTION_NAME (current_function_decl))
14482     {
14483       tree sectree = DECL_SECTION_NAME (current_function_decl);
14484       secname = TREE_STRING_POINTER (sectree);
14485     }
14486   else if (cfun && in_cold_section_p)
14487     secname = crtl->subsections.cold_section_label;
14488   else
14489     secname = text_section_label;
14490
14491   return secname;
14492 }
14493
14494 /* Return true when DECL_BY_REFERENCE is defined and set for DECL.  */
14495
14496 static bool
14497 decl_by_reference_p (tree decl)
14498 {
14499   return ((TREE_CODE (decl) == PARM_DECL || TREE_CODE (decl) == RESULT_DECL
14500            || TREE_CODE (decl) == VAR_DECL)
14501           && DECL_BY_REFERENCE (decl));
14502 }
14503
14504 /* Helper function for dw_loc_list.  Compute proper Dwarf location descriptor
14505    for VARLOC.  */
14506
14507 static dw_loc_descr_ref
14508 dw_loc_list_1 (tree loc, rtx varloc, int want_address,
14509                enum var_init_status initialized)
14510 {
14511   int have_address = 0;
14512   dw_loc_descr_ref descr;
14513   enum machine_mode mode;
14514
14515   if (want_address != 2)
14516     {
14517       gcc_assert (GET_CODE (varloc) == VAR_LOCATION);
14518       /* Single part.  */
14519       if (GET_CODE (PAT_VAR_LOCATION_LOC (varloc)) != PARALLEL)
14520         {
14521           varloc = PAT_VAR_LOCATION_LOC (varloc);
14522           if (GET_CODE (varloc) == EXPR_LIST)
14523             varloc = XEXP (varloc, 0);
14524           mode = GET_MODE (varloc);
14525           if (MEM_P (varloc))
14526             {
14527               rtx addr = XEXP (varloc, 0);
14528               descr = mem_loc_descriptor (addr, mode, initialized);
14529               if (descr)
14530                 have_address = 1;
14531               else
14532                 {
14533                   rtx x = avoid_constant_pool_reference (varloc);
14534                   if (x != varloc)
14535                     descr = mem_loc_descriptor (x, mode, initialized);
14536                 }
14537             }
14538           else
14539             descr = mem_loc_descriptor (varloc, mode, initialized);
14540         }
14541       else
14542         return 0;
14543     }
14544   else
14545     {
14546       if (GET_CODE (varloc) == VAR_LOCATION)
14547         mode = DECL_MODE (PAT_VAR_LOCATION_DECL (varloc));
14548       else
14549         mode = DECL_MODE (loc);
14550       descr = loc_descriptor (varloc, mode, initialized);
14551       have_address = 1;
14552     }
14553
14554   if (!descr)
14555     return 0;
14556
14557   if (want_address == 2 && !have_address
14558       && (dwarf_version >= 4 || !dwarf_strict))
14559     {
14560       if (int_size_in_bytes (TREE_TYPE (loc)) > DWARF2_ADDR_SIZE)
14561         {
14562           expansion_failed (loc, NULL_RTX,
14563                             "DWARF address size mismatch");
14564           return 0;
14565         }
14566       add_loc_descr (&descr, new_loc_descr (DW_OP_stack_value, 0, 0));
14567       have_address = 1;
14568     }
14569   /* Show if we can't fill the request for an address.  */
14570   if (want_address && !have_address)
14571     {
14572       expansion_failed (loc, NULL_RTX,
14573                         "Want address and only have value");
14574       return 0;
14575     }
14576
14577   /* If we've got an address and don't want one, dereference.  */
14578   if (!want_address && have_address)
14579     {
14580       HOST_WIDE_INT size = int_size_in_bytes (TREE_TYPE (loc));
14581       enum dwarf_location_atom op;
14582
14583       if (size > DWARF2_ADDR_SIZE || size == -1)
14584         {
14585           expansion_failed (loc, NULL_RTX,
14586                             "DWARF address size mismatch");
14587           return 0;
14588         }
14589       else if (size == DWARF2_ADDR_SIZE)
14590         op = DW_OP_deref;
14591       else
14592         op = DW_OP_deref_size;
14593
14594       add_loc_descr (&descr, new_loc_descr (op, size, 0));
14595     }
14596
14597   return descr;
14598 }
14599
14600 /* Create a DW_OP_piece or DW_OP_bit_piece for bitsize, or return NULL
14601    if it is not possible.  */
14602
14603 static dw_loc_descr_ref
14604 new_loc_descr_op_bit_piece (HOST_WIDE_INT bitsize, HOST_WIDE_INT offset)
14605 {
14606   if ((bitsize % BITS_PER_UNIT) == 0 && offset == 0)
14607     return new_loc_descr (DW_OP_piece, bitsize / BITS_PER_UNIT, 0);
14608   else if (dwarf_version >= 3 || !dwarf_strict)
14609     return new_loc_descr (DW_OP_bit_piece, bitsize, offset);
14610   else
14611     return NULL;
14612 }
14613
14614 /* Helper function for dw_loc_list.  Compute proper Dwarf location descriptor
14615    for VAR_LOC_NOTE for variable DECL that has been optimized by SRA.  */
14616
14617 static dw_loc_descr_ref
14618 dw_sra_loc_expr (tree decl, rtx loc)
14619 {
14620   rtx p;
14621   unsigned int padsize = 0;
14622   dw_loc_descr_ref descr, *descr_tail;
14623   unsigned HOST_WIDE_INT decl_size;
14624   rtx varloc;
14625   enum var_init_status initialized;
14626
14627   if (DECL_SIZE (decl) == NULL
14628       || !host_integerp (DECL_SIZE (decl), 1))
14629     return NULL;
14630
14631   decl_size = tree_low_cst (DECL_SIZE (decl), 1);
14632   descr = NULL;
14633   descr_tail = &descr;
14634
14635   for (p = loc; p; p = XEXP (p, 1))
14636     {
14637       unsigned int bitsize = decl_piece_bitsize (p);
14638       rtx loc_note = *decl_piece_varloc_ptr (p);
14639       dw_loc_descr_ref cur_descr;
14640       dw_loc_descr_ref *tail, last = NULL;
14641       unsigned int opsize = 0;
14642
14643       if (loc_note == NULL_RTX
14644           || NOTE_VAR_LOCATION_LOC (loc_note) == NULL_RTX)
14645         {
14646           padsize += bitsize;
14647           continue;
14648         }
14649       initialized = NOTE_VAR_LOCATION_STATUS (loc_note);
14650       varloc = NOTE_VAR_LOCATION (loc_note);
14651       cur_descr = dw_loc_list_1 (decl, varloc, 2, initialized);
14652       if (cur_descr == NULL)
14653         {
14654           padsize += bitsize;
14655           continue;
14656         }
14657
14658       /* Check that cur_descr either doesn't use
14659          DW_OP_*piece operations, or their sum is equal
14660          to bitsize.  Otherwise we can't embed it.  */
14661       for (tail = &cur_descr; *tail != NULL;
14662            tail = &(*tail)->dw_loc_next)
14663         if ((*tail)->dw_loc_opc == DW_OP_piece)
14664           {
14665             opsize += (*tail)->dw_loc_oprnd1.v.val_unsigned
14666                       * BITS_PER_UNIT;
14667             last = *tail;
14668           }
14669         else if ((*tail)->dw_loc_opc == DW_OP_bit_piece)
14670           {
14671             opsize += (*tail)->dw_loc_oprnd1.v.val_unsigned;
14672             last = *tail;
14673           }
14674
14675       if (last != NULL && opsize != bitsize)
14676         {
14677           padsize += bitsize;
14678           continue;
14679         }
14680
14681       /* If there is a hole, add DW_OP_*piece after empty DWARF
14682          expression, which means that those bits are optimized out.  */
14683       if (padsize)
14684         {
14685           if (padsize > decl_size)
14686             return NULL;
14687           decl_size -= padsize;
14688           *descr_tail = new_loc_descr_op_bit_piece (padsize, 0);
14689           if (*descr_tail == NULL)
14690             return NULL;
14691           descr_tail = &(*descr_tail)->dw_loc_next;
14692           padsize = 0;
14693         }
14694       *descr_tail = cur_descr;
14695       descr_tail = tail;
14696       if (bitsize > decl_size)
14697         return NULL;
14698       decl_size -= bitsize;
14699       if (last == NULL)
14700         {
14701           HOST_WIDE_INT offset = 0;
14702           if (GET_CODE (varloc) == VAR_LOCATION
14703               && GET_CODE (PAT_VAR_LOCATION_LOC (varloc)) != PARALLEL)
14704             {
14705               varloc = PAT_VAR_LOCATION_LOC (varloc);
14706               if (GET_CODE (varloc) == EXPR_LIST)
14707                 varloc = XEXP (varloc, 0);
14708             }
14709           do 
14710             {
14711               if (GET_CODE (varloc) == CONST
14712                   || GET_CODE (varloc) == SIGN_EXTEND
14713                   || GET_CODE (varloc) == ZERO_EXTEND)
14714                 varloc = XEXP (varloc, 0);
14715               else if (GET_CODE (varloc) == SUBREG)
14716                 varloc = SUBREG_REG (varloc);
14717               else
14718                 break;
14719             }
14720           while (1);
14721           /* DW_OP_bit_size offset should be zero for register
14722              or implicit location descriptions and empty location
14723              descriptions, but for memory addresses needs big endian
14724              adjustment.  */
14725           if (MEM_P (varloc))
14726             {
14727               unsigned HOST_WIDE_INT memsize
14728                 = INTVAL (MEM_SIZE (varloc)) * BITS_PER_UNIT;
14729               if (memsize != bitsize)
14730                 {
14731                   if (BYTES_BIG_ENDIAN != WORDS_BIG_ENDIAN
14732                       && (memsize > BITS_PER_WORD || bitsize > BITS_PER_WORD))
14733                     return NULL;
14734                   if (memsize < bitsize)
14735                     return NULL;
14736                   if (BITS_BIG_ENDIAN)
14737                     offset = memsize - bitsize;
14738                 }
14739             }
14740
14741           *descr_tail = new_loc_descr_op_bit_piece (bitsize, offset);
14742           if (*descr_tail == NULL)
14743             return NULL;
14744           descr_tail = &(*descr_tail)->dw_loc_next;
14745         }
14746     }
14747
14748   /* If there were any non-empty expressions, add padding till the end of
14749      the decl.  */
14750   if (descr != NULL && decl_size != 0)
14751     {
14752       *descr_tail = new_loc_descr_op_bit_piece (decl_size, 0);
14753       if (*descr_tail == NULL)
14754         return NULL;
14755     }
14756   return descr;
14757 }
14758
14759 /* Return the dwarf representation of the location list LOC_LIST of
14760    DECL.  WANT_ADDRESS has the same meaning as in loc_list_from_tree
14761    function.  */
14762
14763 static dw_loc_list_ref
14764 dw_loc_list (var_loc_list *loc_list, tree decl, int want_address)
14765 {
14766   const char *endname, *secname;
14767   rtx varloc;
14768   enum var_init_status initialized;
14769   struct var_loc_node *node;
14770   dw_loc_descr_ref descr;
14771   char label_id[MAX_ARTIFICIAL_LABEL_BYTES];
14772   dw_loc_list_ref list = NULL;
14773   dw_loc_list_ref *listp = &list;
14774
14775   /* Now that we know what section we are using for a base,
14776      actually construct the list of locations.
14777      The first location information is what is passed to the
14778      function that creates the location list, and the remaining
14779      locations just get added on to that list.
14780      Note that we only know the start address for a location
14781      (IE location changes), so to build the range, we use
14782      the range [current location start, next location start].
14783      This means we have to special case the last node, and generate
14784      a range of [last location start, end of function label].  */
14785
14786   secname = secname_for_decl (decl);
14787
14788   for (node = loc_list->first; node; node = node->next)
14789     if (GET_CODE (node->loc) == EXPR_LIST
14790         || NOTE_VAR_LOCATION_LOC (node->loc) != NULL_RTX)
14791       {
14792         if (GET_CODE (node->loc) == EXPR_LIST)
14793           {
14794             /* This requires DW_OP_{,bit_}piece, which is not usable
14795                inside DWARF expressions.  */
14796             if (want_address != 2)
14797               continue;
14798             descr = dw_sra_loc_expr (decl, node->loc);
14799             if (descr == NULL)
14800               continue;
14801           }
14802         else
14803           {
14804             initialized = NOTE_VAR_LOCATION_STATUS (node->loc);
14805             varloc = NOTE_VAR_LOCATION (node->loc);
14806             descr = dw_loc_list_1 (decl, varloc, want_address, initialized);
14807           }
14808         if (descr)
14809           {
14810             /* The variable has a location between NODE->LABEL and
14811                NODE->NEXT->LABEL.  */
14812             if (node->next)
14813               endname = node->next->label;
14814             /* If the variable has a location at the last label
14815                it keeps its location until the end of function.  */
14816             else if (!current_function_decl)
14817               endname = text_end_label;
14818             else
14819               {
14820                 ASM_GENERATE_INTERNAL_LABEL (label_id, FUNC_END_LABEL,
14821                                              current_function_funcdef_no);
14822                 endname = ggc_strdup (label_id);
14823               }
14824
14825             *listp = new_loc_list (descr, node->label, endname, secname);
14826             listp = &(*listp)->dw_loc_next;
14827           }
14828       }
14829
14830   /* Try to avoid the overhead of a location list emitting a location
14831      expression instead, but only if we didn't have more than one
14832      location entry in the first place.  If some entries were not
14833      representable, we don't want to pretend a single entry that was
14834      applies to the entire scope in which the variable is
14835      available.  */
14836   if (list && loc_list->first->next)
14837     gen_llsym (list);
14838
14839   return list;
14840 }
14841
14842 /* Return if the loc_list has only single element and thus can be represented
14843    as location description.   */
14844
14845 static bool
14846 single_element_loc_list_p (dw_loc_list_ref list)
14847 {
14848   gcc_assert (!list->dw_loc_next || list->ll_symbol);
14849   return !list->ll_symbol;
14850 }
14851
14852 /* To each location in list LIST add loc descr REF.  */
14853
14854 static void
14855 add_loc_descr_to_each (dw_loc_list_ref list, dw_loc_descr_ref ref)
14856 {
14857   dw_loc_descr_ref copy;
14858   add_loc_descr (&list->expr, ref);
14859   list = list->dw_loc_next;
14860   while (list)
14861     {
14862       copy = ggc_alloc_dw_loc_descr_node ();
14863       memcpy (copy, ref, sizeof (dw_loc_descr_node));
14864       add_loc_descr (&list->expr, copy);
14865       while (copy->dw_loc_next)
14866         {
14867           dw_loc_descr_ref new_copy = ggc_alloc_dw_loc_descr_node ();
14868           memcpy (new_copy, copy->dw_loc_next, sizeof (dw_loc_descr_node));
14869           copy->dw_loc_next = new_copy;
14870           copy = new_copy;
14871         }
14872       list = list->dw_loc_next;
14873     }
14874 }
14875
14876 /* Given two lists RET and LIST
14877    produce location list that is result of adding expression in LIST
14878    to expression in RET on each possition in program.
14879    Might be destructive on both RET and LIST.
14880
14881    TODO: We handle only simple cases of RET or LIST having at most one
14882    element. General case would inolve sorting the lists in program order
14883    and merging them that will need some additional work.
14884    Adding that will improve quality of debug info especially for SRA-ed
14885    structures.  */
14886
14887 static void
14888 add_loc_list (dw_loc_list_ref *ret, dw_loc_list_ref list)
14889 {
14890   if (!list)
14891     return;
14892   if (!*ret)
14893     {
14894       *ret = list;
14895       return;
14896     }
14897   if (!list->dw_loc_next)
14898     {
14899       add_loc_descr_to_each (*ret, list->expr);
14900       return;
14901     }
14902   if (!(*ret)->dw_loc_next)
14903     {
14904       add_loc_descr_to_each (list, (*ret)->expr);
14905       *ret = list;
14906       return;
14907     }
14908   expansion_failed (NULL_TREE, NULL_RTX,
14909                     "Don't know how to merge two non-trivial"
14910                     " location lists.\n");
14911   *ret = NULL;
14912   return;
14913 }
14914
14915 /* LOC is constant expression.  Try a luck, look it up in constant
14916    pool and return its loc_descr of its address.  */
14917
14918 static dw_loc_descr_ref
14919 cst_pool_loc_descr (tree loc)
14920 {
14921   /* Get an RTL for this, if something has been emitted.  */
14922   rtx rtl = lookup_constant_def (loc);
14923   enum machine_mode mode;
14924
14925   if (!rtl || !MEM_P (rtl))
14926     {
14927       gcc_assert (!rtl);
14928       return 0;
14929     }
14930   gcc_assert (GET_CODE (XEXP (rtl, 0)) == SYMBOL_REF);
14931
14932   /* TODO: We might get more coverage if we was actually delaying expansion
14933      of all expressions till end of compilation when constant pools are fully
14934      populated.  */
14935   if (!TREE_ASM_WRITTEN (SYMBOL_REF_DECL (XEXP (rtl, 0))))
14936     {
14937       expansion_failed (loc, NULL_RTX,
14938                         "CST value in contant pool but not marked.");
14939       return 0;
14940     }
14941   mode = GET_MODE (rtl);
14942   rtl = XEXP (rtl, 0);
14943   return mem_loc_descriptor (rtl, mode, VAR_INIT_STATUS_INITIALIZED);
14944 }
14945
14946 /* Return dw_loc_list representing address of addr_expr LOC
14947    by looking for innder INDIRECT_REF expression and turing it
14948    into simple arithmetics.  */
14949
14950 static dw_loc_list_ref
14951 loc_list_for_address_of_addr_expr_of_indirect_ref (tree loc, bool toplev)
14952 {
14953   tree obj, offset;
14954   HOST_WIDE_INT bitsize, bitpos, bytepos;
14955   enum machine_mode mode;
14956   int volatilep;
14957   int unsignedp = TYPE_UNSIGNED (TREE_TYPE (loc));
14958   dw_loc_list_ref list_ret = NULL, list_ret1 = NULL;
14959
14960   obj = get_inner_reference (TREE_OPERAND (loc, 0),
14961                              &bitsize, &bitpos, &offset, &mode,
14962                              &unsignedp, &volatilep, false);
14963   STRIP_NOPS (obj);
14964   if (bitpos % BITS_PER_UNIT)
14965     {
14966       expansion_failed (loc, NULL_RTX, "bitfield access");
14967       return 0;
14968     }
14969   if (!INDIRECT_REF_P (obj))
14970     {
14971       expansion_failed (obj,
14972                         NULL_RTX, "no indirect ref in inner refrence");
14973       return 0;
14974     }
14975   if (!offset && !bitpos)
14976     list_ret = loc_list_from_tree (TREE_OPERAND (obj, 0), toplev ? 2 : 1);
14977   else if (toplev
14978            && int_size_in_bytes (TREE_TYPE (loc)) <= DWARF2_ADDR_SIZE
14979            && (dwarf_version >= 4 || !dwarf_strict))
14980     {
14981       list_ret = loc_list_from_tree (TREE_OPERAND (obj, 0), 0);
14982       if (!list_ret)
14983         return 0;
14984       if (offset)
14985         {
14986           /* Variable offset.  */
14987           list_ret1 = loc_list_from_tree (offset, 0);
14988           if (list_ret1 == 0)
14989             return 0;
14990           add_loc_list (&list_ret, list_ret1);
14991           if (!list_ret)
14992             return 0;
14993           add_loc_descr_to_each (list_ret,
14994                                  new_loc_descr (DW_OP_plus, 0, 0));
14995         }
14996       bytepos = bitpos / BITS_PER_UNIT;
14997       if (bytepos > 0)
14998         add_loc_descr_to_each (list_ret,
14999                                new_loc_descr (DW_OP_plus_uconst,
15000                                               bytepos, 0));
15001       else if (bytepos < 0)
15002         loc_list_plus_const (list_ret, bytepos);
15003       add_loc_descr_to_each (list_ret,
15004                              new_loc_descr (DW_OP_stack_value, 0, 0));
15005     }
15006   return list_ret;
15007 }
15008
15009
15010 /* Generate Dwarf location list representing LOC.
15011    If WANT_ADDRESS is false, expression computing LOC will be computed
15012    If WANT_ADDRESS is 1, expression computing address of LOC will be returned
15013    if WANT_ADDRESS is 2, expression computing address useable in location
15014      will be returned (i.e. DW_OP_reg can be used
15015      to refer to register values).  */
15016
15017 static dw_loc_list_ref
15018 loc_list_from_tree (tree loc, int want_address)
15019 {
15020   dw_loc_descr_ref ret = NULL, ret1 = NULL;
15021   dw_loc_list_ref list_ret = NULL, list_ret1 = NULL;
15022   int have_address = 0;
15023   enum dwarf_location_atom op;
15024
15025   /* ??? Most of the time we do not take proper care for sign/zero
15026      extending the values properly.  Hopefully this won't be a real
15027      problem...  */
15028
15029   switch (TREE_CODE (loc))
15030     {
15031     case ERROR_MARK:
15032       expansion_failed (loc, NULL_RTX, "ERROR_MARK");
15033       return 0;
15034
15035     case PLACEHOLDER_EXPR:
15036       /* This case involves extracting fields from an object to determine the
15037          position of other fields.  We don't try to encode this here.  The
15038          only user of this is Ada, which encodes the needed information using
15039          the names of types.  */
15040       expansion_failed (loc, NULL_RTX, "PLACEHOLDER_EXPR");
15041       return 0;
15042
15043     case CALL_EXPR:
15044       expansion_failed (loc, NULL_RTX, "CALL_EXPR");
15045       /* There are no opcodes for these operations.  */
15046       return 0;
15047
15048     case PREINCREMENT_EXPR:
15049     case PREDECREMENT_EXPR:
15050     case POSTINCREMENT_EXPR:
15051     case POSTDECREMENT_EXPR:
15052       expansion_failed (loc, NULL_RTX, "PRE/POST INDCREMENT/DECREMENT");
15053       /* There are no opcodes for these operations.  */
15054       return 0;
15055
15056     case ADDR_EXPR:
15057       /* If we already want an address, see if there is INDIRECT_REF inside
15058          e.g. for &this->field.  */
15059       if (want_address)
15060         {
15061           list_ret = loc_list_for_address_of_addr_expr_of_indirect_ref
15062                        (loc, want_address == 2);
15063           if (list_ret)
15064             have_address = 1;
15065           else if (decl_address_ip_invariant_p (TREE_OPERAND (loc, 0))
15066                    && (ret = cst_pool_loc_descr (loc)))
15067             have_address = 1;
15068         }
15069         /* Otherwise, process the argument and look for the address.  */
15070       if (!list_ret && !ret)
15071         list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 1);
15072       else
15073         {
15074           if (want_address)
15075             expansion_failed (loc, NULL_RTX, "need address of ADDR_EXPR");
15076           return NULL;
15077         }
15078       break;
15079
15080     case VAR_DECL:
15081       if (DECL_THREAD_LOCAL_P (loc))
15082         {
15083           rtx rtl;
15084           enum dwarf_location_atom first_op;
15085           enum dwarf_location_atom second_op;
15086           bool dtprel = false;
15087
15088           if (targetm.have_tls)
15089             {
15090               /* If this is not defined, we have no way to emit the
15091                  data.  */
15092               if (!targetm.asm_out.output_dwarf_dtprel)
15093                 return 0;
15094
15095                /* The way DW_OP_GNU_push_tls_address is specified, we
15096                   can only look up addresses of objects in the current
15097                   module.  We used DW_OP_addr as first op, but that's
15098                   wrong, because DW_OP_addr is relocated by the debug
15099                   info consumer, while DW_OP_GNU_push_tls_address
15100                   operand shouldn't be.  */
15101               if (DECL_EXTERNAL (loc) && !targetm.binds_local_p (loc))
15102                 return 0;
15103               first_op = DWARF2_ADDR_SIZE == 4 ? DW_OP_const4u : DW_OP_const8u;
15104               dtprel = true;
15105               second_op = DW_OP_GNU_push_tls_address;
15106             }
15107           else
15108             {
15109               if (!targetm.emutls.debug_form_tls_address
15110                   || !(dwarf_version >= 3 || !dwarf_strict))
15111                 return 0;
15112               loc = emutls_decl (loc);
15113               first_op = DW_OP_addr;
15114               second_op = DW_OP_form_tls_address;
15115             }
15116
15117           rtl = rtl_for_decl_location (loc);
15118           if (rtl == NULL_RTX)
15119             return 0;
15120
15121           if (!MEM_P (rtl))
15122             return 0;
15123           rtl = XEXP (rtl, 0);
15124           if (! CONSTANT_P (rtl))
15125             return 0;
15126
15127           ret = new_loc_descr (first_op, 0, 0);
15128           ret->dw_loc_oprnd1.val_class = dw_val_class_addr;
15129           ret->dw_loc_oprnd1.v.val_addr = rtl;
15130           ret->dtprel = dtprel;
15131
15132           ret1 = new_loc_descr (second_op, 0, 0);
15133           add_loc_descr (&ret, ret1);
15134
15135           have_address = 1;
15136           break;
15137         }
15138       /* FALLTHRU */
15139
15140     case PARM_DECL:
15141       if (DECL_HAS_VALUE_EXPR_P (loc))
15142         return loc_list_from_tree (DECL_VALUE_EXPR (loc),
15143                                    want_address);
15144       /* FALLTHRU */
15145
15146     case RESULT_DECL:
15147     case FUNCTION_DECL:
15148       {
15149         rtx rtl;
15150         var_loc_list *loc_list = lookup_decl_loc (loc);
15151
15152         if (loc_list && loc_list->first)
15153           {
15154             list_ret = dw_loc_list (loc_list, loc, want_address);
15155             have_address = want_address != 0;
15156             break;
15157           }
15158         rtl = rtl_for_decl_location (loc);
15159         if (rtl == NULL_RTX)
15160           {
15161             expansion_failed (loc, NULL_RTX, "DECL has no RTL");
15162             return 0;
15163           }
15164         else if (CONST_INT_P (rtl))
15165           {
15166             HOST_WIDE_INT val = INTVAL (rtl);
15167             if (TYPE_UNSIGNED (TREE_TYPE (loc)))
15168               val &= GET_MODE_MASK (DECL_MODE (loc));
15169             ret = int_loc_descriptor (val);
15170           }
15171         else if (GET_CODE (rtl) == CONST_STRING)
15172           {
15173             expansion_failed (loc, NULL_RTX, "CONST_STRING");
15174             return 0;
15175           }
15176         else if (CONSTANT_P (rtl) && const_ok_for_output (rtl))
15177           {
15178             ret = new_loc_descr (DW_OP_addr, 0, 0);
15179             ret->dw_loc_oprnd1.val_class = dw_val_class_addr;
15180             ret->dw_loc_oprnd1.v.val_addr = rtl;
15181           }
15182         else
15183           {
15184             enum machine_mode mode;
15185
15186             /* Certain constructs can only be represented at top-level.  */
15187             if (want_address == 2)
15188               {
15189                 ret = loc_descriptor (rtl, VOIDmode,
15190                                       VAR_INIT_STATUS_INITIALIZED);
15191                 have_address = 1;
15192               }
15193             else
15194               {
15195                 mode = GET_MODE (rtl);
15196                 if (MEM_P (rtl))
15197                   {
15198                     rtl = XEXP (rtl, 0);
15199                     have_address = 1;
15200                   }
15201                 ret = mem_loc_descriptor (rtl, mode, VAR_INIT_STATUS_INITIALIZED);
15202               }
15203             if (!ret)
15204               expansion_failed (loc, rtl,
15205                                 "failed to produce loc descriptor for rtl");
15206           }
15207       }
15208       break;
15209
15210     case MEM_REF:
15211       /* ??? FIXME.  */
15212       if (!integer_zerop (TREE_OPERAND (loc, 1)))
15213         return 0;
15214       /* Fallthru.  */
15215     case INDIRECT_REF:
15216     case MISALIGNED_INDIRECT_REF:
15217       list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 0);
15218       have_address = 1;
15219       break;
15220
15221     case COMPOUND_EXPR:
15222       return loc_list_from_tree (TREE_OPERAND (loc, 1), want_address);
15223
15224     CASE_CONVERT:
15225     case VIEW_CONVERT_EXPR:
15226     case SAVE_EXPR:
15227     case MODIFY_EXPR:
15228       return loc_list_from_tree (TREE_OPERAND (loc, 0), want_address);
15229
15230     case COMPONENT_REF:
15231     case BIT_FIELD_REF:
15232     case ARRAY_REF:
15233     case ARRAY_RANGE_REF:
15234     case REALPART_EXPR:
15235     case IMAGPART_EXPR:
15236       {
15237         tree obj, offset;
15238         HOST_WIDE_INT bitsize, bitpos, bytepos;
15239         enum machine_mode mode;
15240         int volatilep;
15241         int unsignedp = TYPE_UNSIGNED (TREE_TYPE (loc));
15242
15243         obj = get_inner_reference (loc, &bitsize, &bitpos, &offset, &mode,
15244                                    &unsignedp, &volatilep, false);
15245
15246         gcc_assert (obj != loc);
15247
15248         list_ret = loc_list_from_tree (obj,
15249                                        want_address == 2
15250                                        && !bitpos && !offset ? 2 : 1);
15251         /* TODO: We can extract value of the small expression via shifting even
15252            for nonzero bitpos.  */
15253         if (list_ret == 0)
15254           return 0;
15255         if (bitpos % BITS_PER_UNIT != 0 || bitsize % BITS_PER_UNIT != 0)
15256           {
15257             expansion_failed (loc, NULL_RTX,
15258                               "bitfield access");
15259             return 0;
15260           }
15261
15262         if (offset != NULL_TREE)
15263           {
15264             /* Variable offset.  */
15265             list_ret1 = loc_list_from_tree (offset, 0);
15266             if (list_ret1 == 0)
15267               return 0;
15268             add_loc_list (&list_ret, list_ret1);
15269             if (!list_ret)
15270               return 0;
15271             add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_plus, 0, 0));
15272           }
15273
15274         bytepos = bitpos / BITS_PER_UNIT;
15275         if (bytepos > 0)
15276           add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_plus_uconst, bytepos, 0));
15277         else if (bytepos < 0)
15278           loc_list_plus_const (list_ret, bytepos);
15279
15280         have_address = 1;
15281         break;
15282       }
15283
15284     case INTEGER_CST:
15285       if ((want_address || !host_integerp (loc, 0))
15286           && (ret = cst_pool_loc_descr (loc)))
15287         have_address = 1;
15288       else if (want_address == 2
15289                && host_integerp (loc, 0)
15290                && (ret = address_of_int_loc_descriptor
15291                            (int_size_in_bytes (TREE_TYPE (loc)),
15292                             tree_low_cst (loc, 0))))
15293         have_address = 1;
15294       else if (host_integerp (loc, 0))
15295         ret = int_loc_descriptor (tree_low_cst (loc, 0));
15296       else
15297         {
15298           expansion_failed (loc, NULL_RTX,
15299                             "Integer operand is not host integer");
15300           return 0;
15301         }
15302       break;
15303
15304     case CONSTRUCTOR:
15305     case REAL_CST:
15306     case STRING_CST:
15307     case COMPLEX_CST:
15308       if ((ret = cst_pool_loc_descr (loc)))
15309         have_address = 1;
15310       else
15311       /* We can construct small constants here using int_loc_descriptor.  */
15312         expansion_failed (loc, NULL_RTX,
15313                           "constructor or constant not in constant pool");
15314       break;
15315
15316     case TRUTH_AND_EXPR:
15317     case TRUTH_ANDIF_EXPR:
15318     case BIT_AND_EXPR:
15319       op = DW_OP_and;
15320       goto do_binop;
15321
15322     case TRUTH_XOR_EXPR:
15323     case BIT_XOR_EXPR:
15324       op = DW_OP_xor;
15325       goto do_binop;
15326
15327     case TRUTH_OR_EXPR:
15328     case TRUTH_ORIF_EXPR:
15329     case BIT_IOR_EXPR:
15330       op = DW_OP_or;
15331       goto do_binop;
15332
15333     case FLOOR_DIV_EXPR:
15334     case CEIL_DIV_EXPR:
15335     case ROUND_DIV_EXPR:
15336     case TRUNC_DIV_EXPR:
15337       if (TYPE_UNSIGNED (TREE_TYPE (loc)))
15338         return 0;
15339       op = DW_OP_div;
15340       goto do_binop;
15341
15342     case MINUS_EXPR:
15343       op = DW_OP_minus;
15344       goto do_binop;
15345
15346     case FLOOR_MOD_EXPR:
15347     case CEIL_MOD_EXPR:
15348     case ROUND_MOD_EXPR:
15349     case TRUNC_MOD_EXPR:
15350       if (TYPE_UNSIGNED (TREE_TYPE (loc)))
15351         {
15352           op = DW_OP_mod;
15353           goto do_binop;
15354         }
15355       list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 0);
15356       list_ret1 = loc_list_from_tree (TREE_OPERAND (loc, 1), 0);
15357       if (list_ret == 0 || list_ret1 == 0)
15358         return 0;
15359
15360       add_loc_list (&list_ret, list_ret1);
15361       if (list_ret == 0)
15362         return 0;
15363       add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_over, 0, 0));
15364       add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_over, 0, 0));
15365       add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_div, 0, 0));
15366       add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_mul, 0, 0));
15367       add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_minus, 0, 0));
15368       break;
15369
15370     case MULT_EXPR:
15371       op = DW_OP_mul;
15372       goto do_binop;
15373
15374     case LSHIFT_EXPR:
15375       op = DW_OP_shl;
15376       goto do_binop;
15377
15378     case RSHIFT_EXPR:
15379       op = (TYPE_UNSIGNED (TREE_TYPE (loc)) ? DW_OP_shr : DW_OP_shra);
15380       goto do_binop;
15381
15382     case POINTER_PLUS_EXPR:
15383     case PLUS_EXPR:
15384       if (host_integerp (TREE_OPERAND (loc, 1), 0))
15385         {
15386           list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 0);
15387           if (list_ret == 0)
15388             return 0;
15389
15390           loc_list_plus_const (list_ret, tree_low_cst (TREE_OPERAND (loc, 1), 0));
15391           break;
15392         }
15393
15394       op = DW_OP_plus;
15395       goto do_binop;
15396
15397     case LE_EXPR:
15398       if (TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (loc, 0))))
15399         return 0;
15400
15401       op = DW_OP_le;
15402       goto do_binop;
15403
15404     case GE_EXPR:
15405       if (TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (loc, 0))))
15406         return 0;
15407
15408       op = DW_OP_ge;
15409       goto do_binop;
15410
15411     case LT_EXPR:
15412       if (TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (loc, 0))))
15413         return 0;
15414
15415       op = DW_OP_lt;
15416       goto do_binop;
15417
15418     case GT_EXPR:
15419       if (TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (loc, 0))))
15420         return 0;
15421
15422       op = DW_OP_gt;
15423       goto do_binop;
15424
15425     case EQ_EXPR:
15426       op = DW_OP_eq;
15427       goto do_binop;
15428
15429     case NE_EXPR:
15430       op = DW_OP_ne;
15431       goto do_binop;
15432
15433     do_binop:
15434       list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 0);
15435       list_ret1 = loc_list_from_tree (TREE_OPERAND (loc, 1), 0);
15436       if (list_ret == 0 || list_ret1 == 0)
15437         return 0;
15438
15439       add_loc_list (&list_ret, list_ret1);
15440       if (list_ret == 0)
15441         return 0;
15442       add_loc_descr_to_each (list_ret, new_loc_descr (op, 0, 0));
15443       break;
15444
15445     case TRUTH_NOT_EXPR:
15446     case BIT_NOT_EXPR:
15447       op = DW_OP_not;
15448       goto do_unop;
15449
15450     case ABS_EXPR:
15451       op = DW_OP_abs;
15452       goto do_unop;
15453
15454     case NEGATE_EXPR:
15455       op = DW_OP_neg;
15456       goto do_unop;
15457
15458     do_unop:
15459       list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 0);
15460       if (list_ret == 0)
15461         return 0;
15462
15463       add_loc_descr_to_each (list_ret, new_loc_descr (op, 0, 0));
15464       break;
15465
15466     case MIN_EXPR:
15467     case MAX_EXPR:
15468       {
15469         const enum tree_code code =
15470           TREE_CODE (loc) == MIN_EXPR ? GT_EXPR : LT_EXPR;
15471
15472         loc = build3 (COND_EXPR, TREE_TYPE (loc),
15473                       build2 (code, integer_type_node,
15474                               TREE_OPERAND (loc, 0), TREE_OPERAND (loc, 1)),
15475                       TREE_OPERAND (loc, 1), TREE_OPERAND (loc, 0));
15476       }
15477
15478       /* ... fall through ...  */
15479
15480     case COND_EXPR:
15481       {
15482         dw_loc_descr_ref lhs
15483           = loc_descriptor_from_tree (TREE_OPERAND (loc, 1), 0);
15484         dw_loc_list_ref rhs
15485           = loc_list_from_tree (TREE_OPERAND (loc, 2), 0);
15486         dw_loc_descr_ref bra_node, jump_node, tmp;
15487
15488         list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 0);
15489         if (list_ret == 0 || lhs == 0 || rhs == 0)
15490           return 0;
15491
15492         bra_node = new_loc_descr (DW_OP_bra, 0, 0);
15493         add_loc_descr_to_each (list_ret, bra_node);
15494
15495         add_loc_list (&list_ret, rhs);
15496         jump_node = new_loc_descr (DW_OP_skip, 0, 0);
15497         add_loc_descr_to_each (list_ret, jump_node);
15498
15499         add_loc_descr_to_each (list_ret, lhs);
15500         bra_node->dw_loc_oprnd1.val_class = dw_val_class_loc;
15501         bra_node->dw_loc_oprnd1.v.val_loc = lhs;
15502
15503         /* ??? Need a node to point the skip at.  Use a nop.  */
15504         tmp = new_loc_descr (DW_OP_nop, 0, 0);
15505         add_loc_descr_to_each (list_ret, tmp);
15506         jump_node->dw_loc_oprnd1.val_class = dw_val_class_loc;
15507         jump_node->dw_loc_oprnd1.v.val_loc = tmp;
15508       }
15509       break;
15510
15511     case FIX_TRUNC_EXPR:
15512       return 0;
15513
15514     default:
15515       /* Leave front-end specific codes as simply unknown.  This comes
15516          up, for instance, with the C STMT_EXPR.  */
15517       if ((unsigned int) TREE_CODE (loc)
15518           >= (unsigned int) LAST_AND_UNUSED_TREE_CODE)
15519         {
15520           expansion_failed (loc, NULL_RTX,
15521                             "language specific tree node");
15522           return 0;
15523         }
15524
15525 #ifdef ENABLE_CHECKING
15526       /* Otherwise this is a generic code; we should just lists all of
15527          these explicitly.  We forgot one.  */
15528       gcc_unreachable ();
15529 #else
15530       /* In a release build, we want to degrade gracefully: better to
15531          generate incomplete debugging information than to crash.  */
15532       return NULL;
15533 #endif
15534     }
15535
15536   if (!ret && !list_ret)
15537     return 0;
15538
15539   if (want_address == 2 && !have_address
15540       && (dwarf_version >= 4 || !dwarf_strict))
15541     {
15542       if (int_size_in_bytes (TREE_TYPE (loc)) > DWARF2_ADDR_SIZE)
15543         {
15544           expansion_failed (loc, NULL_RTX,
15545                             "DWARF address size mismatch");
15546           return 0;
15547         }
15548       if (ret)
15549         add_loc_descr (&ret, new_loc_descr (DW_OP_stack_value, 0, 0));
15550       else
15551         add_loc_descr_to_each (list_ret,
15552                                new_loc_descr (DW_OP_stack_value, 0, 0));
15553       have_address = 1;
15554     }
15555   /* Show if we can't fill the request for an address.  */
15556   if (want_address && !have_address)
15557     {
15558       expansion_failed (loc, NULL_RTX,
15559                         "Want address and only have value");
15560       return 0;
15561     }
15562
15563   gcc_assert (!ret || !list_ret);
15564
15565   /* If we've got an address and don't want one, dereference.  */
15566   if (!want_address && have_address)
15567     {
15568       HOST_WIDE_INT size = int_size_in_bytes (TREE_TYPE (loc));
15569
15570       if (size > DWARF2_ADDR_SIZE || size == -1)
15571         {
15572           expansion_failed (loc, NULL_RTX,
15573                             "DWARF address size mismatch");
15574           return 0;
15575         }
15576       else if (size == DWARF2_ADDR_SIZE)
15577         op = DW_OP_deref;
15578       else
15579         op = DW_OP_deref_size;
15580
15581       if (ret)
15582         add_loc_descr (&ret, new_loc_descr (op, size, 0));
15583       else
15584         add_loc_descr_to_each (list_ret, new_loc_descr (op, size, 0));
15585     }
15586   if (ret)
15587     list_ret = new_loc_list (ret, NULL, NULL, NULL);
15588
15589   return list_ret;
15590 }
15591
15592 /* Same as above but return only single location expression.  */
15593 static dw_loc_descr_ref
15594 loc_descriptor_from_tree (tree loc, int want_address)
15595 {
15596   dw_loc_list_ref ret = loc_list_from_tree (loc, want_address);
15597   if (!ret)
15598     return NULL;
15599   if (ret->dw_loc_next)
15600     {
15601       expansion_failed (loc, NULL_RTX,
15602                         "Location list where only loc descriptor needed");
15603       return NULL;
15604     }
15605   return ret->expr;
15606 }
15607
15608 /* Given a value, round it up to the lowest multiple of `boundary'
15609    which is not less than the value itself.  */
15610
15611 static inline HOST_WIDE_INT
15612 ceiling (HOST_WIDE_INT value, unsigned int boundary)
15613 {
15614   return (((value + boundary - 1) / boundary) * boundary);
15615 }
15616
15617 /* Given a pointer to what is assumed to be a FIELD_DECL node, return a
15618    pointer to the declared type for the relevant field variable, or return
15619    `integer_type_node' if the given node turns out to be an
15620    ERROR_MARK node.  */
15621
15622 static inline tree
15623 field_type (const_tree decl)
15624 {
15625   tree type;
15626
15627   if (TREE_CODE (decl) == ERROR_MARK)
15628     return integer_type_node;
15629
15630   type = DECL_BIT_FIELD_TYPE (decl);
15631   if (type == NULL_TREE)
15632     type = TREE_TYPE (decl);
15633
15634   return type;
15635 }
15636
15637 /* Given a pointer to a tree node, return the alignment in bits for
15638    it, or else return BITS_PER_WORD if the node actually turns out to
15639    be an ERROR_MARK node.  */
15640
15641 static inline unsigned
15642 simple_type_align_in_bits (const_tree type)
15643 {
15644   return (TREE_CODE (type) != ERROR_MARK) ? TYPE_ALIGN (type) : BITS_PER_WORD;
15645 }
15646
15647 static inline unsigned
15648 simple_decl_align_in_bits (const_tree decl)
15649 {
15650   return (TREE_CODE (decl) != ERROR_MARK) ? DECL_ALIGN (decl) : BITS_PER_WORD;
15651 }
15652
15653 /* Return the result of rounding T up to ALIGN.  */
15654
15655 static inline double_int
15656 round_up_to_align (double_int t, unsigned int align)
15657 {
15658   double_int alignd = uhwi_to_double_int (align);
15659   t = double_int_add (t, alignd);
15660   t = double_int_add (t, double_int_minus_one);
15661   t = double_int_div (t, alignd, true, TRUNC_DIV_EXPR);
15662   t = double_int_mul (t, alignd);
15663   return t;
15664 }
15665
15666 /* Given a pointer to a FIELD_DECL, compute and return the byte offset of the
15667    lowest addressed byte of the "containing object" for the given FIELD_DECL,
15668    or return 0 if we are unable to determine what that offset is, either
15669    because the argument turns out to be a pointer to an ERROR_MARK node, or
15670    because the offset is actually variable.  (We can't handle the latter case
15671    just yet).  */
15672
15673 static HOST_WIDE_INT
15674 field_byte_offset (const_tree decl)
15675 {
15676   double_int object_offset_in_bits;
15677   double_int object_offset_in_bytes;
15678   double_int bitpos_int;
15679
15680   if (TREE_CODE (decl) == ERROR_MARK)
15681     return 0;
15682
15683   gcc_assert (TREE_CODE (decl) == FIELD_DECL);
15684
15685   /* We cannot yet cope with fields whose positions are variable, so
15686      for now, when we see such things, we simply return 0.  Someday, we may
15687      be able to handle such cases, but it will be damn difficult.  */
15688   if (TREE_CODE (bit_position (decl)) != INTEGER_CST)
15689     return 0;
15690
15691   bitpos_int = tree_to_double_int (bit_position (decl));
15692
15693 #ifdef PCC_BITFIELD_TYPE_MATTERS
15694   if (PCC_BITFIELD_TYPE_MATTERS)
15695     {
15696       tree type;
15697       tree field_size_tree;
15698       double_int deepest_bitpos;
15699       double_int field_size_in_bits;
15700       unsigned int type_align_in_bits;
15701       unsigned int decl_align_in_bits;
15702       double_int type_size_in_bits;
15703
15704       type = field_type (decl);
15705       type_size_in_bits = double_int_type_size_in_bits (type);
15706       type_align_in_bits = simple_type_align_in_bits (type);
15707
15708       field_size_tree = DECL_SIZE (decl);
15709
15710       /* The size could be unspecified if there was an error, or for
15711          a flexible array member.  */
15712       if (!field_size_tree)
15713         field_size_tree = bitsize_zero_node;
15714
15715       /* If the size of the field is not constant, use the type size.  */
15716       if (TREE_CODE (field_size_tree) == INTEGER_CST)
15717         field_size_in_bits = tree_to_double_int (field_size_tree);
15718       else
15719         field_size_in_bits = type_size_in_bits;
15720
15721       decl_align_in_bits = simple_decl_align_in_bits (decl);
15722
15723       /* The GCC front-end doesn't make any attempt to keep track of the
15724          starting bit offset (relative to the start of the containing
15725          structure type) of the hypothetical "containing object" for a
15726          bit-field.  Thus, when computing the byte offset value for the
15727          start of the "containing object" of a bit-field, we must deduce
15728          this information on our own. This can be rather tricky to do in
15729          some cases.  For example, handling the following structure type
15730          definition when compiling for an i386/i486 target (which only
15731          aligns long long's to 32-bit boundaries) can be very tricky:
15732
15733          struct S { int field1; long long field2:31; };
15734
15735          Fortunately, there is a simple rule-of-thumb which can be used
15736          in such cases.  When compiling for an i386/i486, GCC will
15737          allocate 8 bytes for the structure shown above.  It decides to
15738          do this based upon one simple rule for bit-field allocation.
15739          GCC allocates each "containing object" for each bit-field at
15740          the first (i.e. lowest addressed) legitimate alignment boundary
15741          (based upon the required minimum alignment for the declared
15742          type of the field) which it can possibly use, subject to the
15743          condition that there is still enough available space remaining
15744          in the containing object (when allocated at the selected point)
15745          to fully accommodate all of the bits of the bit-field itself.
15746
15747          This simple rule makes it obvious why GCC allocates 8 bytes for
15748          each object of the structure type shown above.  When looking
15749          for a place to allocate the "containing object" for `field2',
15750          the compiler simply tries to allocate a 64-bit "containing
15751          object" at each successive 32-bit boundary (starting at zero)
15752          until it finds a place to allocate that 64- bit field such that
15753          at least 31 contiguous (and previously unallocated) bits remain
15754          within that selected 64 bit field.  (As it turns out, for the
15755          example above, the compiler finds it is OK to allocate the
15756          "containing object" 64-bit field at bit-offset zero within the
15757          structure type.)
15758
15759          Here we attempt to work backwards from the limited set of facts
15760          we're given, and we try to deduce from those facts, where GCC
15761          must have believed that the containing object started (within
15762          the structure type). The value we deduce is then used (by the
15763          callers of this routine) to generate DW_AT_location and
15764          DW_AT_bit_offset attributes for fields (both bit-fields and, in
15765          the case of DW_AT_location, regular fields as well).  */
15766
15767       /* Figure out the bit-distance from the start of the structure to
15768          the "deepest" bit of the bit-field.  */
15769       deepest_bitpos = double_int_add (bitpos_int, field_size_in_bits);
15770
15771       /* This is the tricky part.  Use some fancy footwork to deduce
15772          where the lowest addressed bit of the containing object must
15773          be.  */
15774       object_offset_in_bits
15775         = double_int_sub (deepest_bitpos, type_size_in_bits);
15776
15777       /* Round up to type_align by default.  This works best for
15778          bitfields.  */
15779       object_offset_in_bits
15780         = round_up_to_align (object_offset_in_bits, type_align_in_bits);
15781
15782       if (double_int_ucmp (object_offset_in_bits, bitpos_int) > 0)
15783         {
15784           object_offset_in_bits
15785             = double_int_sub (deepest_bitpos, type_size_in_bits);
15786
15787           /* Round up to decl_align instead.  */
15788           object_offset_in_bits
15789             = round_up_to_align (object_offset_in_bits, decl_align_in_bits);
15790         }
15791     }
15792   else
15793 #endif
15794     object_offset_in_bits = bitpos_int;
15795
15796   object_offset_in_bytes
15797     = double_int_div (object_offset_in_bits,
15798                       uhwi_to_double_int (BITS_PER_UNIT), true,
15799                       TRUNC_DIV_EXPR);
15800   return double_int_to_shwi (object_offset_in_bytes);
15801 }
15802 \f
15803 /* The following routines define various Dwarf attributes and any data
15804    associated with them.  */
15805
15806 /* Add a location description attribute value to a DIE.
15807
15808    This emits location attributes suitable for whole variables and
15809    whole parameters.  Note that the location attributes for struct fields are
15810    generated by the routine `data_member_location_attribute' below.  */
15811
15812 static inline void
15813 add_AT_location_description (dw_die_ref die, enum dwarf_attribute attr_kind,
15814                              dw_loc_list_ref descr)
15815 {
15816   if (descr == 0)
15817     return;
15818   if (single_element_loc_list_p (descr))
15819     add_AT_loc (die, attr_kind, descr->expr);
15820   else
15821     add_AT_loc_list (die, attr_kind, descr);
15822 }
15823
15824 /* Add DW_AT_accessibility attribute to DIE if needed.  */
15825
15826 static void
15827 add_accessibility_attribute (dw_die_ref die, tree decl)
15828 {
15829   if (TREE_PROTECTED (decl))
15830     add_AT_unsigned (die, DW_AT_accessibility, DW_ACCESS_protected);
15831   else if (TREE_PRIVATE (decl))
15832     add_AT_unsigned (die, DW_AT_accessibility, DW_ACCESS_private);
15833 }
15834
15835 /* Attach the specialized form of location attribute used for data members of
15836    struct and union types.  In the special case of a FIELD_DECL node which
15837    represents a bit-field, the "offset" part of this special location
15838    descriptor must indicate the distance in bytes from the lowest-addressed
15839    byte of the containing struct or union type to the lowest-addressed byte of
15840    the "containing object" for the bit-field.  (See the `field_byte_offset'
15841    function above).
15842
15843    For any given bit-field, the "containing object" is a hypothetical object
15844    (of some integral or enum type) within which the given bit-field lives.  The
15845    type of this hypothetical "containing object" is always the same as the
15846    declared type of the individual bit-field itself (for GCC anyway... the
15847    DWARF spec doesn't actually mandate this).  Note that it is the size (in
15848    bytes) of the hypothetical "containing object" which will be given in the
15849    DW_AT_byte_size attribute for this bit-field.  (See the
15850    `byte_size_attribute' function below.)  It is also used when calculating the
15851    value of the DW_AT_bit_offset attribute.  (See the `bit_offset_attribute'
15852    function below.)  */
15853
15854 static void
15855 add_data_member_location_attribute (dw_die_ref die, tree decl)
15856 {
15857   HOST_WIDE_INT offset;
15858   dw_loc_descr_ref loc_descr = 0;
15859
15860   if (TREE_CODE (decl) == TREE_BINFO)
15861     {
15862       /* We're working on the TAG_inheritance for a base class.  */
15863       if (BINFO_VIRTUAL_P (decl) && is_cxx ())
15864         {
15865           /* For C++ virtual bases we can't just use BINFO_OFFSET, as they
15866              aren't at a fixed offset from all (sub)objects of the same
15867              type.  We need to extract the appropriate offset from our
15868              vtable.  The following dwarf expression means
15869
15870                BaseAddr = ObAddr + *((*ObAddr) - Offset)
15871
15872              This is specific to the V3 ABI, of course.  */
15873
15874           dw_loc_descr_ref tmp;
15875
15876           /* Make a copy of the object address.  */
15877           tmp = new_loc_descr (DW_OP_dup, 0, 0);
15878           add_loc_descr (&loc_descr, tmp);
15879
15880           /* Extract the vtable address.  */
15881           tmp = new_loc_descr (DW_OP_deref, 0, 0);
15882           add_loc_descr (&loc_descr, tmp);
15883
15884           /* Calculate the address of the offset.  */
15885           offset = tree_low_cst (BINFO_VPTR_FIELD (decl), 0);
15886           gcc_assert (offset < 0);
15887
15888           tmp = int_loc_descriptor (-offset);
15889           add_loc_descr (&loc_descr, tmp);
15890           tmp = new_loc_descr (DW_OP_minus, 0, 0);
15891           add_loc_descr (&loc_descr, tmp);
15892
15893           /* Extract the offset.  */
15894           tmp = new_loc_descr (DW_OP_deref, 0, 0);
15895           add_loc_descr (&loc_descr, tmp);
15896
15897           /* Add it to the object address.  */
15898           tmp = new_loc_descr (DW_OP_plus, 0, 0);
15899           add_loc_descr (&loc_descr, tmp);
15900         }
15901       else
15902         offset = tree_low_cst (BINFO_OFFSET (decl), 0);
15903     }
15904   else
15905     offset = field_byte_offset (decl);
15906
15907   if (! loc_descr)
15908     {
15909       if (dwarf_version > 2)
15910         {
15911           /* Don't need to output a location expression, just the constant. */
15912           add_AT_int (die, DW_AT_data_member_location, offset);
15913           return;
15914         }
15915       else
15916         {
15917           enum dwarf_location_atom op;
15918
15919           /* The DWARF2 standard says that we should assume that the structure
15920              address is already on the stack, so we can specify a structure
15921              field address by using DW_OP_plus_uconst.  */
15922
15923 #ifdef MIPS_DEBUGGING_INFO
15924           /* ??? The SGI dwarf reader does not handle the DW_OP_plus_uconst
15925              operator correctly.  It works only if we leave the offset on the
15926              stack.  */
15927           op = DW_OP_constu;
15928 #else
15929           op = DW_OP_plus_uconst;
15930 #endif
15931
15932           loc_descr = new_loc_descr (op, offset, 0);
15933         }
15934     }
15935
15936   add_AT_loc (die, DW_AT_data_member_location, loc_descr);
15937 }
15938
15939 /* Writes integer values to dw_vec_const array.  */
15940
15941 static void
15942 insert_int (HOST_WIDE_INT val, unsigned int size, unsigned char *dest)
15943 {
15944   while (size != 0)
15945     {
15946       *dest++ = val & 0xff;
15947       val >>= 8;
15948       --size;
15949     }
15950 }
15951
15952 /* Reads integers from dw_vec_const array.  Inverse of insert_int.  */
15953
15954 static HOST_WIDE_INT
15955 extract_int (const unsigned char *src, unsigned int size)
15956 {
15957   HOST_WIDE_INT val = 0;
15958
15959   src += size;
15960   while (size != 0)
15961     {
15962       val <<= 8;
15963       val |= *--src & 0xff;
15964       --size;
15965     }
15966   return val;
15967 }
15968
15969 /* Writes double_int values to dw_vec_const array.  */
15970
15971 static void
15972 insert_double (double_int val, unsigned char *dest)
15973 {
15974   unsigned char *p0 = dest;
15975   unsigned char *p1 = dest + sizeof (HOST_WIDE_INT);
15976
15977   if (WORDS_BIG_ENDIAN)
15978     {
15979       p0 = p1;
15980       p1 = dest;
15981     }
15982
15983   insert_int ((HOST_WIDE_INT) val.low, sizeof (HOST_WIDE_INT), p0);
15984   insert_int ((HOST_WIDE_INT) val.high, sizeof (HOST_WIDE_INT), p1);
15985 }
15986
15987 /* Writes floating point values to dw_vec_const array.  */
15988
15989 static void
15990 insert_float (const_rtx rtl, unsigned char *array)
15991 {
15992   REAL_VALUE_TYPE rv;
15993   long val[4];
15994   int i;
15995
15996   REAL_VALUE_FROM_CONST_DOUBLE (rv, rtl);
15997   real_to_target (val, &rv, GET_MODE (rtl));
15998
15999   /* real_to_target puts 32-bit pieces in each long.  Pack them.  */
16000   for (i = 0; i < GET_MODE_SIZE (GET_MODE (rtl)) / 4; i++)
16001     {
16002       insert_int (val[i], 4, array);
16003       array += 4;
16004     }
16005 }
16006
16007 /* Attach a DW_AT_const_value attribute for a variable or a parameter which
16008    does not have a "location" either in memory or in a register.  These
16009    things can arise in GNU C when a constant is passed as an actual parameter
16010    to an inlined function.  They can also arise in C++ where declared
16011    constants do not necessarily get memory "homes".  */
16012
16013 static bool
16014 add_const_value_attribute (dw_die_ref die, rtx rtl)
16015 {
16016   switch (GET_CODE (rtl))
16017     {
16018     case CONST_INT:
16019       {
16020         HOST_WIDE_INT val = INTVAL (rtl);
16021
16022         if (val < 0)
16023           add_AT_int (die, DW_AT_const_value, val);
16024         else
16025           add_AT_unsigned (die, DW_AT_const_value, (unsigned HOST_WIDE_INT) val);
16026       }
16027       return true;
16028
16029     case CONST_DOUBLE:
16030       /* Note that a CONST_DOUBLE rtx could represent either an integer or a
16031          floating-point constant.  A CONST_DOUBLE is used whenever the
16032          constant requires more than one word in order to be adequately
16033          represented.  */
16034       {
16035         enum machine_mode mode = GET_MODE (rtl);
16036
16037         if (SCALAR_FLOAT_MODE_P (mode))
16038           {
16039             unsigned int length = GET_MODE_SIZE (mode);
16040             unsigned char *array = (unsigned char *) ggc_alloc_atomic (length);
16041
16042             insert_float (rtl, array);
16043             add_AT_vec (die, DW_AT_const_value, length / 4, 4, array);
16044           }
16045         else
16046           add_AT_double (die, DW_AT_const_value,
16047                          CONST_DOUBLE_HIGH (rtl), CONST_DOUBLE_LOW (rtl));
16048       }
16049       return true;
16050
16051     case CONST_VECTOR:
16052       {
16053         enum machine_mode mode = GET_MODE (rtl);
16054         unsigned int elt_size = GET_MODE_UNIT_SIZE (mode);
16055         unsigned int length = CONST_VECTOR_NUNITS (rtl);
16056         unsigned char *array = (unsigned char *) ggc_alloc_atomic
16057           (length * elt_size);
16058         unsigned int i;
16059         unsigned char *p;
16060
16061         switch (GET_MODE_CLASS (mode))
16062           {
16063           case MODE_VECTOR_INT:
16064             for (i = 0, p = array; i < length; i++, p += elt_size)
16065               {
16066                 rtx elt = CONST_VECTOR_ELT (rtl, i);
16067                 double_int val = rtx_to_double_int (elt);
16068
16069                 if (elt_size <= sizeof (HOST_WIDE_INT))
16070                   insert_int (double_int_to_shwi (val), elt_size, p);
16071                 else
16072                   {
16073                     gcc_assert (elt_size == 2 * sizeof (HOST_WIDE_INT));
16074                     insert_double (val, p);
16075                   }
16076               }
16077             break;
16078
16079           case MODE_VECTOR_FLOAT:
16080             for (i = 0, p = array; i < length; i++, p += elt_size)
16081               {
16082                 rtx elt = CONST_VECTOR_ELT (rtl, i);
16083                 insert_float (elt, p);
16084               }
16085             break;
16086
16087           default:
16088             gcc_unreachable ();
16089           }
16090
16091         add_AT_vec (die, DW_AT_const_value, length, elt_size, array);
16092       }
16093       return true;
16094
16095     case CONST_STRING:
16096       if (dwarf_version >= 4 || !dwarf_strict)
16097         {
16098           dw_loc_descr_ref loc_result;
16099           resolve_one_addr (&rtl, NULL);
16100         rtl_addr:
16101           loc_result = new_loc_descr (DW_OP_addr, 0, 0);
16102           loc_result->dw_loc_oprnd1.val_class = dw_val_class_addr;
16103           loc_result->dw_loc_oprnd1.v.val_addr = rtl;
16104           add_loc_descr (&loc_result, new_loc_descr (DW_OP_stack_value, 0, 0));
16105           add_AT_loc (die, DW_AT_location, loc_result);
16106           VEC_safe_push (rtx, gc, used_rtx_array, rtl);
16107           return true;
16108         }
16109       return false;
16110
16111     case CONST:
16112       if (CONSTANT_P (XEXP (rtl, 0)))
16113         return add_const_value_attribute (die, XEXP (rtl, 0));
16114       /* FALLTHROUGH */
16115     case SYMBOL_REF:
16116       if (!const_ok_for_output (rtl))
16117         return false;
16118     case LABEL_REF:
16119       if (dwarf_version >= 4 || !dwarf_strict)
16120         goto rtl_addr;
16121       return false;
16122
16123     case PLUS:
16124       /* In cases where an inlined instance of an inline function is passed
16125          the address of an `auto' variable (which is local to the caller) we
16126          can get a situation where the DECL_RTL of the artificial local
16127          variable (for the inlining) which acts as a stand-in for the
16128          corresponding formal parameter (of the inline function) will look
16129          like (plus:SI (reg:SI FRAME_PTR) (const_int ...)).  This is not
16130          exactly a compile-time constant expression, but it isn't the address
16131          of the (artificial) local variable either.  Rather, it represents the
16132          *value* which the artificial local variable always has during its
16133          lifetime.  We currently have no way to represent such quasi-constant
16134          values in Dwarf, so for now we just punt and generate nothing.  */
16135       return false;
16136
16137     case HIGH:
16138     case CONST_FIXED:
16139       return false;
16140
16141     case MEM:
16142       if (GET_CODE (XEXP (rtl, 0)) == CONST_STRING
16143           && MEM_READONLY_P (rtl)
16144           && GET_MODE (rtl) == BLKmode)
16145         {
16146           add_AT_string (die, DW_AT_const_value, XSTR (XEXP (rtl, 0), 0));
16147           return true;
16148         }
16149       return false;
16150
16151     default:
16152       /* No other kinds of rtx should be possible here.  */
16153       gcc_unreachable ();
16154     }
16155   return false;
16156 }
16157
16158 /* Determine whether the evaluation of EXPR references any variables
16159    or functions which aren't otherwise used (and therefore may not be
16160    output).  */
16161 static tree
16162 reference_to_unused (tree * tp, int * walk_subtrees,
16163                      void * data ATTRIBUTE_UNUSED)
16164 {
16165   if (! EXPR_P (*tp) && ! CONSTANT_CLASS_P (*tp))
16166     *walk_subtrees = 0;
16167
16168   if (DECL_P (*tp) && ! TREE_PUBLIC (*tp) && ! TREE_USED (*tp)
16169       && ! TREE_ASM_WRITTEN (*tp))
16170     return *tp;
16171   /* ???  The C++ FE emits debug information for using decls, so
16172      putting gcc_unreachable here falls over.  See PR31899.  For now
16173      be conservative.  */
16174   else if (!cgraph_global_info_ready
16175            && (TREE_CODE (*tp) == VAR_DECL || TREE_CODE (*tp) == FUNCTION_DECL))
16176     return *tp;
16177   else if (TREE_CODE (*tp) == VAR_DECL)
16178     {
16179       struct varpool_node *node = varpool_get_node (*tp);
16180       if (!node || !node->needed)
16181         return *tp;
16182     }
16183   else if (TREE_CODE (*tp) == FUNCTION_DECL
16184            && (!DECL_EXTERNAL (*tp) || DECL_DECLARED_INLINE_P (*tp)))
16185     {
16186       /* The call graph machinery must have finished analyzing,
16187          optimizing and gimplifying the CU by now.
16188          So if *TP has no call graph node associated
16189          to it, it means *TP will not be emitted.  */
16190       if (!cgraph_get_node (*tp))
16191         return *tp;
16192     }
16193   else if (TREE_CODE (*tp) == STRING_CST && !TREE_ASM_WRITTEN (*tp))
16194     return *tp;
16195
16196   return NULL_TREE;
16197 }
16198
16199 /* Generate an RTL constant from a decl initializer INIT with decl type TYPE,
16200    for use in a later add_const_value_attribute call.  */
16201
16202 static rtx
16203 rtl_for_decl_init (tree init, tree type)
16204 {
16205   rtx rtl = NULL_RTX;
16206
16207   /* If a variable is initialized with a string constant without embedded
16208      zeros, build CONST_STRING.  */
16209   if (TREE_CODE (init) == STRING_CST && TREE_CODE (type) == ARRAY_TYPE)
16210     {
16211       tree enttype = TREE_TYPE (type);
16212       tree domain = TYPE_DOMAIN (type);
16213       enum machine_mode mode = TYPE_MODE (enttype);
16214
16215       if (GET_MODE_CLASS (mode) == MODE_INT && GET_MODE_SIZE (mode) == 1
16216           && domain
16217           && integer_zerop (TYPE_MIN_VALUE (domain))
16218           && compare_tree_int (TYPE_MAX_VALUE (domain),
16219                                TREE_STRING_LENGTH (init) - 1) == 0
16220           && ((size_t) TREE_STRING_LENGTH (init)
16221               == strlen (TREE_STRING_POINTER (init)) + 1))
16222         {
16223           rtl = gen_rtx_CONST_STRING (VOIDmode,
16224                                       ggc_strdup (TREE_STRING_POINTER (init)));
16225           rtl = gen_rtx_MEM (BLKmode, rtl);
16226           MEM_READONLY_P (rtl) = 1;
16227         }
16228     }
16229   /* Other aggregates, and complex values, could be represented using
16230      CONCAT: FIXME!  */
16231   else if (AGGREGATE_TYPE_P (type) || TREE_CODE (type) == COMPLEX_TYPE)
16232     ;
16233   /* Vectors only work if their mode is supported by the target.
16234      FIXME: generic vectors ought to work too.  */
16235   else if (TREE_CODE (type) == VECTOR_TYPE && TYPE_MODE (type) == BLKmode)
16236     ;
16237   /* If the initializer is something that we know will expand into an
16238      immediate RTL constant, expand it now.  We must be careful not to
16239      reference variables which won't be output.  */
16240   else if (initializer_constant_valid_p (init, type)
16241            && ! walk_tree (&init, reference_to_unused, NULL, NULL))
16242     {
16243       /* Convert vector CONSTRUCTOR initializers to VECTOR_CST if
16244          possible.  */
16245       if (TREE_CODE (type) == VECTOR_TYPE)
16246         switch (TREE_CODE (init))
16247           {
16248           case VECTOR_CST:
16249             break;
16250           case CONSTRUCTOR:
16251             if (TREE_CONSTANT (init))
16252               {
16253                 VEC(constructor_elt,gc) *elts = CONSTRUCTOR_ELTS (init);
16254                 bool constant_p = true;
16255                 tree value;
16256                 unsigned HOST_WIDE_INT ix;
16257
16258                 /* Even when ctor is constant, it might contain non-*_CST
16259                    elements (e.g. { 1.0/0.0 - 1.0/0.0, 0.0 }) and those don't
16260                    belong into VECTOR_CST nodes.  */
16261                 FOR_EACH_CONSTRUCTOR_VALUE (elts, ix, value)
16262                   if (!CONSTANT_CLASS_P (value))
16263                     {
16264                       constant_p = false;
16265                       break;
16266                     }
16267
16268                 if (constant_p)
16269                   {
16270                     init = build_vector_from_ctor (type, elts);
16271                     break;
16272                   }
16273               }
16274             /* FALLTHRU */
16275
16276           default:
16277             return NULL;
16278           }
16279
16280       rtl = expand_expr (init, NULL_RTX, VOIDmode, EXPAND_INITIALIZER);
16281
16282       /* If expand_expr returns a MEM, it wasn't immediate.  */
16283       gcc_assert (!rtl || !MEM_P (rtl));
16284     }
16285
16286   return rtl;
16287 }
16288
16289 /* Generate RTL for the variable DECL to represent its location.  */
16290
16291 static rtx
16292 rtl_for_decl_location (tree decl)
16293 {
16294   rtx rtl;
16295
16296   /* Here we have to decide where we are going to say the parameter "lives"
16297      (as far as the debugger is concerned).  We only have a couple of
16298      choices.  GCC provides us with DECL_RTL and with DECL_INCOMING_RTL.
16299
16300      DECL_RTL normally indicates where the parameter lives during most of the
16301      activation of the function.  If optimization is enabled however, this
16302      could be either NULL or else a pseudo-reg.  Both of those cases indicate
16303      that the parameter doesn't really live anywhere (as far as the code
16304      generation parts of GCC are concerned) during most of the function's
16305      activation.  That will happen (for example) if the parameter is never
16306      referenced within the function.
16307
16308      We could just generate a location descriptor here for all non-NULL
16309      non-pseudo values of DECL_RTL and ignore all of the rest, but we can be
16310      a little nicer than that if we also consider DECL_INCOMING_RTL in cases
16311      where DECL_RTL is NULL or is a pseudo-reg.
16312
16313      Note however that we can only get away with using DECL_INCOMING_RTL as
16314      a backup substitute for DECL_RTL in certain limited cases.  In cases
16315      where DECL_ARG_TYPE (decl) indicates the same type as TREE_TYPE (decl),
16316      we can be sure that the parameter was passed using the same type as it is
16317      declared to have within the function, and that its DECL_INCOMING_RTL
16318      points us to a place where a value of that type is passed.
16319
16320      In cases where DECL_ARG_TYPE (decl) and TREE_TYPE (decl) are different,
16321      we cannot (in general) use DECL_INCOMING_RTL as a substitute for DECL_RTL
16322      because in these cases DECL_INCOMING_RTL points us to a value of some
16323      type which is *different* from the type of the parameter itself.  Thus,
16324      if we tried to use DECL_INCOMING_RTL to generate a location attribute in
16325      such cases, the debugger would end up (for example) trying to fetch a
16326      `float' from a place which actually contains the first part of a
16327      `double'.  That would lead to really incorrect and confusing
16328      output at debug-time.
16329
16330      So, in general, we *do not* use DECL_INCOMING_RTL as a backup for DECL_RTL
16331      in cases where DECL_ARG_TYPE (decl) != TREE_TYPE (decl).  There
16332      are a couple of exceptions however.  On little-endian machines we can
16333      get away with using DECL_INCOMING_RTL even when DECL_ARG_TYPE (decl) is
16334      not the same as TREE_TYPE (decl), but only when DECL_ARG_TYPE (decl) is
16335      an integral type that is smaller than TREE_TYPE (decl). These cases arise
16336      when (on a little-endian machine) a non-prototyped function has a
16337      parameter declared to be of type `short' or `char'.  In such cases,
16338      TREE_TYPE (decl) will be `short' or `char', DECL_ARG_TYPE (decl) will
16339      be `int', and DECL_INCOMING_RTL will point to the lowest-order byte of the
16340      passed `int' value.  If the debugger then uses that address to fetch
16341      a `short' or a `char' (on a little-endian machine) the result will be
16342      the correct data, so we allow for such exceptional cases below.
16343
16344      Note that our goal here is to describe the place where the given formal
16345      parameter lives during most of the function's activation (i.e. between the
16346      end of the prologue and the start of the epilogue).  We'll do that as best
16347      as we can. Note however that if the given formal parameter is modified
16348      sometime during the execution of the function, then a stack backtrace (at
16349      debug-time) will show the function as having been called with the *new*
16350      value rather than the value which was originally passed in.  This happens
16351      rarely enough that it is not a major problem, but it *is* a problem, and
16352      I'd like to fix it.
16353
16354      A future version of dwarf2out.c may generate two additional attributes for
16355      any given DW_TAG_formal_parameter DIE which will describe the "passed
16356      type" and the "passed location" for the given formal parameter in addition
16357      to the attributes we now generate to indicate the "declared type" and the
16358      "active location" for each parameter.  This additional set of attributes
16359      could be used by debuggers for stack backtraces. Separately, note that
16360      sometimes DECL_RTL can be NULL and DECL_INCOMING_RTL can be NULL also.
16361      This happens (for example) for inlined-instances of inline function formal
16362      parameters which are never referenced.  This really shouldn't be
16363      happening.  All PARM_DECL nodes should get valid non-NULL
16364      DECL_INCOMING_RTL values.  FIXME.  */
16365
16366   /* Use DECL_RTL as the "location" unless we find something better.  */
16367   rtl = DECL_RTL_IF_SET (decl);
16368
16369   /* When generating abstract instances, ignore everything except
16370      constants, symbols living in memory, and symbols living in
16371      fixed registers.  */
16372   if (! reload_completed)
16373     {
16374       if (rtl
16375           && (CONSTANT_P (rtl)
16376               || (MEM_P (rtl)
16377                   && CONSTANT_P (XEXP (rtl, 0)))
16378               || (REG_P (rtl)
16379                   && TREE_CODE (decl) == VAR_DECL
16380                   && TREE_STATIC (decl))))
16381         {
16382           rtl = targetm.delegitimize_address (rtl);
16383           return rtl;
16384         }
16385       rtl = NULL_RTX;
16386     }
16387   else if (TREE_CODE (decl) == PARM_DECL)
16388     {
16389       if (rtl == NULL_RTX || is_pseudo_reg (rtl))
16390         {
16391           tree declared_type = TREE_TYPE (decl);
16392           tree passed_type = DECL_ARG_TYPE (decl);
16393           enum machine_mode dmode = TYPE_MODE (declared_type);
16394           enum machine_mode pmode = TYPE_MODE (passed_type);
16395
16396           /* This decl represents a formal parameter which was optimized out.
16397              Note that DECL_INCOMING_RTL may be NULL in here, but we handle
16398              all cases where (rtl == NULL_RTX) just below.  */
16399           if (dmode == pmode)
16400             rtl = DECL_INCOMING_RTL (decl);
16401           else if (SCALAR_INT_MODE_P (dmode)
16402                    && GET_MODE_SIZE (dmode) <= GET_MODE_SIZE (pmode)
16403                    && DECL_INCOMING_RTL (decl))
16404             {
16405               rtx inc = DECL_INCOMING_RTL (decl);
16406               if (REG_P (inc))
16407                 rtl = inc;
16408               else if (MEM_P (inc))
16409                 {
16410                   if (BYTES_BIG_ENDIAN)
16411                     rtl = adjust_address_nv (inc, dmode,
16412                                              GET_MODE_SIZE (pmode)
16413                                              - GET_MODE_SIZE (dmode));
16414                   else
16415                     rtl = inc;
16416                 }
16417             }
16418         }
16419
16420       /* If the parm was passed in registers, but lives on the stack, then
16421          make a big endian correction if the mode of the type of the
16422          parameter is not the same as the mode of the rtl.  */
16423       /* ??? This is the same series of checks that are made in dbxout.c before
16424          we reach the big endian correction code there.  It isn't clear if all
16425          of these checks are necessary here, but keeping them all is the safe
16426          thing to do.  */
16427       else if (MEM_P (rtl)
16428                && XEXP (rtl, 0) != const0_rtx
16429                && ! CONSTANT_P (XEXP (rtl, 0))
16430                /* Not passed in memory.  */
16431                && !MEM_P (DECL_INCOMING_RTL (decl))
16432                /* Not passed by invisible reference.  */
16433                && (!REG_P (XEXP (rtl, 0))
16434                    || REGNO (XEXP (rtl, 0)) == HARD_FRAME_POINTER_REGNUM
16435                    || REGNO (XEXP (rtl, 0)) == STACK_POINTER_REGNUM
16436 #if ARG_POINTER_REGNUM != HARD_FRAME_POINTER_REGNUM
16437                    || REGNO (XEXP (rtl, 0)) == ARG_POINTER_REGNUM
16438 #endif
16439                      )
16440                /* Big endian correction check.  */
16441                && BYTES_BIG_ENDIAN
16442                && TYPE_MODE (TREE_TYPE (decl)) != GET_MODE (rtl)
16443                && (GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (decl)))
16444                    < UNITS_PER_WORD))
16445         {
16446           int offset = (UNITS_PER_WORD
16447                         - GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (decl))));
16448
16449           rtl = gen_rtx_MEM (TYPE_MODE (TREE_TYPE (decl)),
16450                              plus_constant (XEXP (rtl, 0), offset));
16451         }
16452     }
16453   else if (TREE_CODE (decl) == VAR_DECL
16454            && rtl
16455            && MEM_P (rtl)
16456            && GET_MODE (rtl) != TYPE_MODE (TREE_TYPE (decl))
16457            && BYTES_BIG_ENDIAN)
16458     {
16459       int rsize = GET_MODE_SIZE (GET_MODE (rtl));
16460       int dsize = GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (decl)));
16461
16462       /* If a variable is declared "register" yet is smaller than
16463          a register, then if we store the variable to memory, it
16464          looks like we're storing a register-sized value, when in
16465          fact we are not.  We need to adjust the offset of the
16466          storage location to reflect the actual value's bytes,
16467          else gdb will not be able to display it.  */
16468       if (rsize > dsize)
16469         rtl = gen_rtx_MEM (TYPE_MODE (TREE_TYPE (decl)),
16470                            plus_constant (XEXP (rtl, 0), rsize-dsize));
16471     }
16472
16473   /* A variable with no DECL_RTL but a DECL_INITIAL is a compile-time constant,
16474      and will have been substituted directly into all expressions that use it.
16475      C does not have such a concept, but C++ and other languages do.  */
16476   if (!rtl && TREE_CODE (decl) == VAR_DECL && DECL_INITIAL (decl))
16477     rtl = rtl_for_decl_init (DECL_INITIAL (decl), TREE_TYPE (decl));
16478
16479   if (rtl)
16480     rtl = targetm.delegitimize_address (rtl);
16481
16482   /* If we don't look past the constant pool, we risk emitting a
16483      reference to a constant pool entry that isn't referenced from
16484      code, and thus is not emitted.  */
16485   if (rtl)
16486     rtl = avoid_constant_pool_reference (rtl);
16487
16488   /* Try harder to get a rtl.  If this symbol ends up not being emitted
16489      in the current CU, resolve_addr will remove the expression referencing
16490      it.  */
16491   if (rtl == NULL_RTX
16492       && TREE_CODE (decl) == VAR_DECL
16493       && !DECL_EXTERNAL (decl)
16494       && TREE_STATIC (decl)
16495       && DECL_NAME (decl)
16496       && !DECL_HARD_REGISTER (decl)
16497       && DECL_MODE (decl) != VOIDmode)
16498     {
16499       rtl = make_decl_rtl_for_debug (decl);
16500       if (!MEM_P (rtl)
16501           || GET_CODE (XEXP (rtl, 0)) != SYMBOL_REF
16502           || SYMBOL_REF_DECL (XEXP (rtl, 0)) != decl)
16503         rtl = NULL_RTX;
16504     }
16505
16506   return rtl;
16507 }
16508
16509 /* Check whether decl is a Fortran COMMON symbol.  If not, NULL_TREE is
16510    returned.  If so, the decl for the COMMON block is returned, and the
16511    value is the offset into the common block for the symbol.  */
16512
16513 static tree
16514 fortran_common (tree decl, HOST_WIDE_INT *value)
16515 {
16516   tree val_expr, cvar;
16517   enum machine_mode mode;
16518   HOST_WIDE_INT bitsize, bitpos;
16519   tree offset;
16520   int volatilep = 0, unsignedp = 0;
16521
16522   /* If the decl isn't a VAR_DECL, or if it isn't static, or if
16523      it does not have a value (the offset into the common area), or if it
16524      is thread local (as opposed to global) then it isn't common, and shouldn't
16525      be handled as such.  */
16526   if (TREE_CODE (decl) != VAR_DECL
16527       || !TREE_STATIC (decl)
16528       || !DECL_HAS_VALUE_EXPR_P (decl)
16529       || !is_fortran ())
16530     return NULL_TREE;
16531
16532   val_expr = DECL_VALUE_EXPR (decl);
16533   if (TREE_CODE (val_expr) != COMPONENT_REF)
16534     return NULL_TREE;
16535
16536   cvar = get_inner_reference (val_expr, &bitsize, &bitpos, &offset,
16537                               &mode, &unsignedp, &volatilep, true);
16538
16539   if (cvar == NULL_TREE
16540       || TREE_CODE (cvar) != VAR_DECL
16541       || DECL_ARTIFICIAL (cvar)
16542       || !TREE_PUBLIC (cvar))
16543     return NULL_TREE;
16544
16545   *value = 0;
16546   if (offset != NULL)
16547     {
16548       if (!host_integerp (offset, 0))
16549         return NULL_TREE;
16550       *value = tree_low_cst (offset, 0);
16551     }
16552   if (bitpos != 0)
16553     *value += bitpos / BITS_PER_UNIT;
16554
16555   return cvar;
16556 }
16557
16558 /* Generate *either* a DW_AT_location attribute or else a DW_AT_const_value
16559    data attribute for a variable or a parameter.  We generate the
16560    DW_AT_const_value attribute only in those cases where the given variable
16561    or parameter does not have a true "location" either in memory or in a
16562    register.  This can happen (for example) when a constant is passed as an
16563    actual argument in a call to an inline function.  (It's possible that
16564    these things can crop up in other ways also.)  Note that one type of
16565    constant value which can be passed into an inlined function is a constant
16566    pointer.  This can happen for example if an actual argument in an inlined
16567    function call evaluates to a compile-time constant address.  */
16568
16569 static bool
16570 add_location_or_const_value_attribute (dw_die_ref die, tree decl,
16571                                        enum dwarf_attribute attr)
16572 {
16573   rtx rtl;
16574   dw_loc_list_ref list;
16575   var_loc_list *loc_list;
16576
16577   if (TREE_CODE (decl) == ERROR_MARK)
16578     return false;
16579
16580   gcc_assert (TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == PARM_DECL
16581               || TREE_CODE (decl) == RESULT_DECL);
16582
16583   /* Try to get some constant RTL for this decl, and use that as the value of
16584      the location.  */
16585
16586   rtl = rtl_for_decl_location (decl);
16587   if (rtl && (CONSTANT_P (rtl) || GET_CODE (rtl) == CONST_STRING)
16588       && add_const_value_attribute (die, rtl))
16589     return true;
16590
16591   /* See if we have single element location list that is equivalent to
16592      a constant value.  That way we are better to use add_const_value_attribute
16593      rather than expanding constant value equivalent.  */
16594   loc_list = lookup_decl_loc (decl);
16595   if (loc_list
16596       && loc_list->first
16597       && loc_list->first->next == NULL
16598       && NOTE_P (loc_list->first->loc)
16599       && NOTE_VAR_LOCATION (loc_list->first->loc)
16600       && NOTE_VAR_LOCATION_LOC (loc_list->first->loc))
16601     {
16602       struct var_loc_node *node;
16603
16604       node = loc_list->first;
16605       rtl = NOTE_VAR_LOCATION_LOC (node->loc);
16606       if (GET_CODE (rtl) == EXPR_LIST)
16607         rtl = XEXP (rtl, 0);
16608       if ((CONSTANT_P (rtl) || GET_CODE (rtl) == CONST_STRING)
16609           && add_const_value_attribute (die, rtl))
16610          return true;
16611     }
16612   list = loc_list_from_tree (decl, decl_by_reference_p (decl) ? 0 : 2);
16613   if (list)
16614     {
16615       add_AT_location_description (die, attr, list);
16616       return true;
16617     }
16618   /* None of that worked, so it must not really have a location;
16619      try adding a constant value attribute from the DECL_INITIAL.  */
16620   return tree_add_const_value_attribute_for_decl (die, decl);
16621 }
16622
16623 /* Add VARIABLE and DIE into deferred locations list.  */
16624
16625 static void
16626 defer_location (tree variable, dw_die_ref die)
16627 {
16628   deferred_locations entry;
16629   entry.variable = variable;
16630   entry.die = die;
16631   VEC_safe_push (deferred_locations, gc, deferred_locations_list, &entry);
16632 }
16633
16634 /* Helper function for tree_add_const_value_attribute.  Natively encode
16635    initializer INIT into an array.  Return true if successful.  */
16636
16637 static bool
16638 native_encode_initializer (tree init, unsigned char *array, int size)
16639 {
16640   tree type;
16641
16642   if (init == NULL_TREE)
16643     return false;
16644
16645   STRIP_NOPS (init);
16646   switch (TREE_CODE (init))
16647     {
16648     case STRING_CST:
16649       type = TREE_TYPE (init);
16650       if (TREE_CODE (type) == ARRAY_TYPE)
16651         {
16652           tree enttype = TREE_TYPE (type);
16653           enum machine_mode mode = TYPE_MODE (enttype);
16654
16655           if (GET_MODE_CLASS (mode) != MODE_INT || GET_MODE_SIZE (mode) != 1)
16656             return false;
16657           if (int_size_in_bytes (type) != size)
16658             return false;
16659           if (size > TREE_STRING_LENGTH (init))
16660             {
16661               memcpy (array, TREE_STRING_POINTER (init),
16662                       TREE_STRING_LENGTH (init));
16663               memset (array + TREE_STRING_LENGTH (init),
16664                       '\0', size - TREE_STRING_LENGTH (init));
16665             }
16666           else
16667             memcpy (array, TREE_STRING_POINTER (init), size);
16668           return true;
16669         }
16670       return false;
16671     case CONSTRUCTOR:
16672       type = TREE_TYPE (init);
16673       if (int_size_in_bytes (type) != size)
16674         return false;
16675       if (TREE_CODE (type) == ARRAY_TYPE)
16676         {
16677           HOST_WIDE_INT min_index;
16678           unsigned HOST_WIDE_INT cnt;
16679           int curpos = 0, fieldsize;
16680           constructor_elt *ce;
16681
16682           if (TYPE_DOMAIN (type) == NULL_TREE
16683               || !host_integerp (TYPE_MIN_VALUE (TYPE_DOMAIN (type)), 0))
16684             return false;
16685
16686           fieldsize = int_size_in_bytes (TREE_TYPE (type));
16687           if (fieldsize <= 0)
16688             return false;
16689
16690           min_index = tree_low_cst (TYPE_MIN_VALUE (TYPE_DOMAIN (type)), 0);
16691           memset (array, '\0', size);
16692           for (cnt = 0;
16693                VEC_iterate (constructor_elt, CONSTRUCTOR_ELTS (init), cnt, ce);
16694                cnt++)
16695             {
16696               tree val = ce->value;
16697               tree index = ce->index;
16698               int pos = curpos;
16699               if (index && TREE_CODE (index) == RANGE_EXPR)
16700                 pos = (tree_low_cst (TREE_OPERAND (index, 0), 0) - min_index)
16701                       * fieldsize;
16702               else if (index)
16703                 pos = (tree_low_cst (index, 0) - min_index) * fieldsize;
16704
16705               if (val)
16706                 {
16707                   STRIP_NOPS (val);
16708                   if (!native_encode_initializer (val, array + pos, fieldsize))
16709                     return false;
16710                 }
16711               curpos = pos + fieldsize;
16712               if (index && TREE_CODE (index) == RANGE_EXPR)
16713                 {
16714                   int count = tree_low_cst (TREE_OPERAND (index, 1), 0)
16715                               - tree_low_cst (TREE_OPERAND (index, 0), 0);
16716                   while (count > 0)
16717                     {
16718                       if (val)
16719                         memcpy (array + curpos, array + pos, fieldsize);
16720                       curpos += fieldsize;
16721                     }
16722                 }
16723               gcc_assert (curpos <= size);
16724             }
16725           return true;
16726         }
16727       else if (TREE_CODE (type) == RECORD_TYPE
16728                || TREE_CODE (type) == UNION_TYPE)
16729         {
16730           tree field = NULL_TREE;
16731           unsigned HOST_WIDE_INT cnt;
16732           constructor_elt *ce;
16733
16734           if (int_size_in_bytes (type) != size)
16735             return false;
16736
16737           if (TREE_CODE (type) == RECORD_TYPE)
16738             field = TYPE_FIELDS (type);
16739
16740           for (cnt = 0;
16741                VEC_iterate (constructor_elt, CONSTRUCTOR_ELTS (init), cnt, ce);
16742                cnt++, field = field ? DECL_CHAIN (field) : 0)
16743             {
16744               tree val = ce->value;
16745               int pos, fieldsize;
16746
16747               if (ce->index != 0)
16748                 field = ce->index;
16749
16750               if (val)
16751                 STRIP_NOPS (val);
16752
16753               if (field == NULL_TREE || DECL_BIT_FIELD (field))
16754                 return false;
16755
16756               if (TREE_CODE (TREE_TYPE (field)) == ARRAY_TYPE
16757                   && TYPE_DOMAIN (TREE_TYPE (field))
16758                   && ! TYPE_MAX_VALUE (TYPE_DOMAIN (TREE_TYPE (field))))
16759                 return false;
16760               else if (DECL_SIZE_UNIT (field) == NULL_TREE
16761                        || !host_integerp (DECL_SIZE_UNIT (field), 0))
16762                 return false;
16763               fieldsize = tree_low_cst (DECL_SIZE_UNIT (field), 0);
16764               pos = int_byte_position (field);
16765               gcc_assert (pos + fieldsize <= size);
16766               if (val
16767                   && !native_encode_initializer (val, array + pos, fieldsize))
16768                 return false;
16769             }
16770           return true;
16771         }
16772       return false;
16773     case VIEW_CONVERT_EXPR:
16774     case NON_LVALUE_EXPR:
16775       return native_encode_initializer (TREE_OPERAND (init, 0), array, size);
16776     default:
16777       return native_encode_expr (init, array, size) == size;
16778     }
16779 }
16780
16781 /* Attach a DW_AT_const_value attribute to DIE. The value of the
16782    attribute is the const value T.  */
16783
16784 static bool
16785 tree_add_const_value_attribute (dw_die_ref die, tree t)
16786 {
16787   tree init;
16788   tree type = TREE_TYPE (t);
16789   rtx rtl;
16790
16791   if (!t || !TREE_TYPE (t) || TREE_TYPE (t) == error_mark_node)
16792     return false;
16793
16794   init = t;
16795   gcc_assert (!DECL_P (init));
16796
16797   rtl = rtl_for_decl_init (init, type);
16798   if (rtl)
16799     return add_const_value_attribute (die, rtl);
16800   /* If the host and target are sane, try harder.  */
16801   else if (CHAR_BIT == 8 && BITS_PER_UNIT == 8
16802            && initializer_constant_valid_p (init, type))
16803     {
16804       HOST_WIDE_INT size = int_size_in_bytes (TREE_TYPE (init));
16805       if (size > 0 && (int) size == size)
16806         {
16807           unsigned char *array = (unsigned char *)
16808             ggc_alloc_cleared_atomic (size);
16809
16810           if (native_encode_initializer (init, array, size))
16811             {
16812               add_AT_vec (die, DW_AT_const_value, size, 1, array);
16813               return true;
16814             }
16815         }
16816     }
16817   return false;
16818 }
16819
16820 /* Attach a DW_AT_const_value attribute to VAR_DIE. The value of the
16821    attribute is the const value of T, where T is an integral constant
16822    variable with static storage duration
16823    (so it can't be a PARM_DECL or a RESULT_DECL).  */
16824
16825 static bool
16826 tree_add_const_value_attribute_for_decl (dw_die_ref var_die, tree decl)
16827 {
16828
16829   if (!decl
16830       || (TREE_CODE (decl) != VAR_DECL
16831           && TREE_CODE (decl) != CONST_DECL))
16832     return false;
16833
16834     if (TREE_READONLY (decl)
16835         && ! TREE_THIS_VOLATILE (decl)
16836         && DECL_INITIAL (decl))
16837       /* OK */;
16838     else
16839       return false;
16840
16841   /* Don't add DW_AT_const_value if abstract origin already has one.  */
16842   if (get_AT (var_die, DW_AT_const_value))
16843     return false;
16844
16845   return tree_add_const_value_attribute (var_die, DECL_INITIAL (decl));
16846 }
16847
16848 /* Convert the CFI instructions for the current function into a
16849    location list.  This is used for DW_AT_frame_base when we targeting
16850    a dwarf2 consumer that does not support the dwarf3
16851    DW_OP_call_frame_cfa.  OFFSET is a constant to be added to all CFA
16852    expressions.  */
16853
16854 static dw_loc_list_ref
16855 convert_cfa_to_fb_loc_list (HOST_WIDE_INT offset)
16856 {
16857   dw_fde_ref fde;
16858   dw_loc_list_ref list, *list_tail;
16859   dw_cfi_ref cfi;
16860   dw_cfa_location last_cfa, next_cfa;
16861   const char *start_label, *last_label, *section;
16862   dw_cfa_location remember;
16863
16864   fde = current_fde ();
16865   gcc_assert (fde != NULL);
16866
16867   section = secname_for_decl (current_function_decl);
16868   list_tail = &list;
16869   list = NULL;
16870
16871   memset (&next_cfa, 0, sizeof (next_cfa));
16872   next_cfa.reg = INVALID_REGNUM;
16873   remember = next_cfa;
16874
16875   start_label = fde->dw_fde_begin;
16876
16877   /* ??? Bald assumption that the CIE opcode list does not contain
16878      advance opcodes.  */
16879   for (cfi = cie_cfi_head; cfi; cfi = cfi->dw_cfi_next)
16880     lookup_cfa_1 (cfi, &next_cfa, &remember);
16881
16882   last_cfa = next_cfa;
16883   last_label = start_label;
16884
16885   for (cfi = fde->dw_fde_cfi; cfi; cfi = cfi->dw_cfi_next)
16886     switch (cfi->dw_cfi_opc)
16887       {
16888       case DW_CFA_set_loc:
16889       case DW_CFA_advance_loc1:
16890       case DW_CFA_advance_loc2:
16891       case DW_CFA_advance_loc4:
16892         if (!cfa_equal_p (&last_cfa, &next_cfa))
16893           {
16894             *list_tail = new_loc_list (build_cfa_loc (&last_cfa, offset),
16895                                        start_label, last_label, section);
16896
16897             list_tail = &(*list_tail)->dw_loc_next;
16898             last_cfa = next_cfa;
16899             start_label = last_label;
16900           }
16901         last_label = cfi->dw_cfi_oprnd1.dw_cfi_addr;
16902         break;
16903
16904       case DW_CFA_advance_loc:
16905         /* The encoding is complex enough that we should never emit this.  */
16906         gcc_unreachable ();
16907
16908       default:
16909         lookup_cfa_1 (cfi, &next_cfa, &remember);
16910         break;
16911       }
16912
16913   if (!cfa_equal_p (&last_cfa, &next_cfa))
16914     {
16915       *list_tail = new_loc_list (build_cfa_loc (&last_cfa, offset),
16916                                  start_label, last_label, section);
16917       list_tail = &(*list_tail)->dw_loc_next;
16918       start_label = last_label;
16919     }
16920
16921   *list_tail = new_loc_list (build_cfa_loc (&next_cfa, offset),
16922                              start_label, fde->dw_fde_end, section);
16923
16924   if (list && list->dw_loc_next)
16925     gen_llsym (list);
16926
16927   return list;
16928 }
16929
16930 /* Compute a displacement from the "steady-state frame pointer" to the
16931    frame base (often the same as the CFA), and store it in
16932    frame_pointer_fb_offset.  OFFSET is added to the displacement
16933    before the latter is negated.  */
16934
16935 static void
16936 compute_frame_pointer_to_fb_displacement (HOST_WIDE_INT offset)
16937 {
16938   rtx reg, elim;
16939
16940 #ifdef FRAME_POINTER_CFA_OFFSET
16941   reg = frame_pointer_rtx;
16942   offset += FRAME_POINTER_CFA_OFFSET (current_function_decl);
16943 #else
16944   reg = arg_pointer_rtx;
16945   offset += ARG_POINTER_CFA_OFFSET (current_function_decl);
16946 #endif
16947
16948   elim = eliminate_regs (reg, VOIDmode, NULL_RTX);
16949   if (GET_CODE (elim) == PLUS)
16950     {
16951       offset += INTVAL (XEXP (elim, 1));
16952       elim = XEXP (elim, 0);
16953     }
16954
16955   gcc_assert ((SUPPORTS_STACK_ALIGNMENT
16956                && (elim == hard_frame_pointer_rtx
16957                    || elim == stack_pointer_rtx))
16958               || elim == (frame_pointer_needed
16959                           ? hard_frame_pointer_rtx
16960                           : stack_pointer_rtx));
16961
16962   frame_pointer_fb_offset = -offset;
16963 }
16964
16965 /* Generate a DW_AT_name attribute given some string value to be included as
16966    the value of the attribute.  */
16967
16968 static void
16969 add_name_attribute (dw_die_ref die, const char *name_string)
16970 {
16971   if (name_string != NULL && *name_string != 0)
16972     {
16973       if (demangle_name_func)
16974         name_string = (*demangle_name_func) (name_string);
16975
16976       add_AT_string (die, DW_AT_name, name_string);
16977     }
16978 }
16979
16980 /* Generate a DW_AT_comp_dir attribute for DIE.  */
16981
16982 static void
16983 add_comp_dir_attribute (dw_die_ref die)
16984 {
16985   const char *wd = get_src_pwd ();
16986   char *wd1;
16987
16988   if (wd == NULL)
16989     return;
16990
16991   if (DWARF2_DIR_SHOULD_END_WITH_SEPARATOR)
16992     {
16993       int wdlen;
16994
16995       wdlen = strlen (wd);
16996       wd1 = (char *) ggc_alloc_atomic (wdlen + 2);
16997       strcpy (wd1, wd);
16998       wd1 [wdlen] = DIR_SEPARATOR;
16999       wd1 [wdlen + 1] = 0;
17000       wd = wd1;
17001     }
17002
17003     add_AT_string (die, DW_AT_comp_dir, remap_debug_filename (wd));
17004 }
17005
17006 /* Return the default for DW_AT_lower_bound, or -1 if there is not any
17007    default.  */
17008
17009 static int
17010 lower_bound_default (void)
17011 {
17012   switch (get_AT_unsigned (comp_unit_die, DW_AT_language))
17013     {
17014     case DW_LANG_C:
17015     case DW_LANG_C89:
17016     case DW_LANG_C99:
17017     case DW_LANG_C_plus_plus:
17018     case DW_LANG_ObjC:
17019     case DW_LANG_ObjC_plus_plus:
17020     case DW_LANG_Java:
17021       return 0;
17022     case DW_LANG_Fortran77:
17023     case DW_LANG_Fortran90:
17024     case DW_LANG_Fortran95:
17025       return 1;
17026     case DW_LANG_UPC:
17027     case DW_LANG_D:
17028     case DW_LANG_Python:
17029       return dwarf_version >= 4 ? 0 : -1;
17030     case DW_LANG_Ada95:
17031     case DW_LANG_Ada83:
17032     case DW_LANG_Cobol74:
17033     case DW_LANG_Cobol85:
17034     case DW_LANG_Pascal83:
17035     case DW_LANG_Modula2:
17036     case DW_LANG_PLI:
17037       return dwarf_version >= 4 ? 1 : -1;
17038     default:
17039       return -1;
17040     }
17041 }
17042
17043 /* Given a tree node describing an array bound (either lower or upper) output
17044    a representation for that bound.  */
17045
17046 static void
17047 add_bound_info (dw_die_ref subrange_die, enum dwarf_attribute bound_attr, tree bound)
17048 {
17049   switch (TREE_CODE (bound))
17050     {
17051     case ERROR_MARK:
17052       return;
17053
17054     /* All fixed-bounds are represented by INTEGER_CST nodes.  */
17055     case INTEGER_CST:
17056       {
17057         unsigned int prec = simple_type_size_in_bits (TREE_TYPE (bound));
17058         int dflt;
17059
17060         /* Use the default if possible.  */
17061         if (bound_attr == DW_AT_lower_bound
17062             && host_integerp (bound, 0)
17063             && (dflt = lower_bound_default ()) != -1
17064             && tree_low_cst (bound, 0) == dflt)
17065           ;
17066
17067         /* Otherwise represent the bound as an unsigned value with the
17068            precision of its type.  The precision and signedness of the
17069            type will be necessary to re-interpret it unambiguously.  */
17070         else if (prec < HOST_BITS_PER_WIDE_INT)
17071           {
17072             unsigned HOST_WIDE_INT mask
17073               = ((unsigned HOST_WIDE_INT) 1 << prec) - 1;
17074             add_AT_unsigned (subrange_die, bound_attr,
17075                              TREE_INT_CST_LOW (bound) & mask);
17076           }
17077         else if (prec == HOST_BITS_PER_WIDE_INT
17078                  || TREE_INT_CST_HIGH (bound) == 0)
17079           add_AT_unsigned (subrange_die, bound_attr,
17080                            TREE_INT_CST_LOW (bound));
17081         else
17082           add_AT_double (subrange_die, bound_attr, TREE_INT_CST_HIGH (bound),
17083                          TREE_INT_CST_LOW (bound));
17084       }
17085       break;
17086
17087     CASE_CONVERT:
17088     case VIEW_CONVERT_EXPR:
17089       add_bound_info (subrange_die, bound_attr, TREE_OPERAND (bound, 0));
17090       break;
17091
17092     case SAVE_EXPR:
17093       break;
17094
17095     case VAR_DECL:
17096     case PARM_DECL:
17097     case RESULT_DECL:
17098       {
17099         dw_die_ref decl_die = lookup_decl_die (bound);
17100
17101         /* ??? Can this happen, or should the variable have been bound
17102            first?  Probably it can, since I imagine that we try to create
17103            the types of parameters in the order in which they exist in
17104            the list, and won't have created a forward reference to a
17105            later parameter.  */
17106         if (decl_die != NULL)
17107           {
17108             add_AT_die_ref (subrange_die, bound_attr, decl_die);
17109             break;
17110           }
17111       }
17112       /* FALLTHRU */
17113
17114     default:
17115       {
17116         /* Otherwise try to create a stack operation procedure to
17117            evaluate the value of the array bound.  */
17118
17119         dw_die_ref ctx, decl_die;
17120         dw_loc_list_ref list;
17121
17122         list = loc_list_from_tree (bound, 2);
17123         if (list == NULL || single_element_loc_list_p (list))
17124           {
17125             /* If DW_AT_*bound is not a reference nor constant, it is
17126                a DWARF expression rather than location description.
17127                For that loc_list_from_tree (bound, 0) is needed.
17128                If that fails to give a single element list,
17129                fall back to outputting this as a reference anyway.  */
17130             dw_loc_list_ref list2 = loc_list_from_tree (bound, 0);
17131             if (list2 && single_element_loc_list_p (list2))
17132               {
17133                 add_AT_loc (subrange_die, bound_attr, list2->expr);
17134                 break;
17135               }
17136           }
17137         if (list == NULL)
17138           break;
17139
17140         if (current_function_decl == 0)
17141           ctx = comp_unit_die;
17142         else
17143           ctx = lookup_decl_die (current_function_decl);
17144
17145         decl_die = new_die (DW_TAG_variable, ctx, bound);
17146         add_AT_flag (decl_die, DW_AT_artificial, 1);
17147         add_type_attribute (decl_die, TREE_TYPE (bound), 1, 0, ctx);
17148         add_AT_location_description (decl_die, DW_AT_location, list);
17149         add_AT_die_ref (subrange_die, bound_attr, decl_die);
17150         break;
17151       }
17152     }
17153 }
17154
17155 /* Add subscript info to TYPE_DIE, describing an array TYPE, collapsing
17156    possibly nested array subscripts in a flat sequence if COLLAPSE_P is true.
17157    Note that the block of subscript information for an array type also
17158    includes information about the element type of the given array type.  */
17159
17160 static void
17161 add_subscript_info (dw_die_ref type_die, tree type, bool collapse_p)
17162 {
17163   unsigned dimension_number;
17164   tree lower, upper;
17165   dw_die_ref subrange_die;
17166
17167   for (dimension_number = 0;
17168        TREE_CODE (type) == ARRAY_TYPE && (dimension_number == 0 || collapse_p);
17169        type = TREE_TYPE (type), dimension_number++)
17170     {
17171       tree domain = TYPE_DOMAIN (type);
17172
17173       if (TYPE_STRING_FLAG (type) && is_fortran () && dimension_number > 0)
17174         break;
17175
17176       /* Arrays come in three flavors: Unspecified bounds, fixed bounds,
17177          and (in GNU C only) variable bounds.  Handle all three forms
17178          here.  */
17179       subrange_die = new_die (DW_TAG_subrange_type, type_die, NULL);
17180       if (domain)
17181         {
17182           /* We have an array type with specified bounds.  */
17183           lower = TYPE_MIN_VALUE (domain);
17184           upper = TYPE_MAX_VALUE (domain);
17185
17186           /* Define the index type.  */
17187           if (TREE_TYPE (domain))
17188             {
17189               /* ??? This is probably an Ada unnamed subrange type.  Ignore the
17190                  TREE_TYPE field.  We can't emit debug info for this
17191                  because it is an unnamed integral type.  */
17192               if (TREE_CODE (domain) == INTEGER_TYPE
17193                   && TYPE_NAME (domain) == NULL_TREE
17194                   && TREE_CODE (TREE_TYPE (domain)) == INTEGER_TYPE
17195                   && TYPE_NAME (TREE_TYPE (domain)) == NULL_TREE)
17196                 ;
17197               else
17198                 add_type_attribute (subrange_die, TREE_TYPE (domain), 0, 0,
17199                                     type_die);
17200             }
17201
17202           /* ??? If upper is NULL, the array has unspecified length,
17203              but it does have a lower bound.  This happens with Fortran
17204                dimension arr(N:*)
17205              Since the debugger is definitely going to need to know N
17206              to produce useful results, go ahead and output the lower
17207              bound solo, and hope the debugger can cope.  */
17208
17209           add_bound_info (subrange_die, DW_AT_lower_bound, lower);
17210           if (upper)
17211             add_bound_info (subrange_die, DW_AT_upper_bound, upper);
17212         }
17213
17214       /* Otherwise we have an array type with an unspecified length.  The
17215          DWARF-2 spec does not say how to handle this; let's just leave out the
17216          bounds.  */
17217     }
17218 }
17219
17220 static void
17221 add_byte_size_attribute (dw_die_ref die, tree tree_node)
17222 {
17223   unsigned size;
17224
17225   switch (TREE_CODE (tree_node))
17226     {
17227     case ERROR_MARK:
17228       size = 0;
17229       break;
17230     case ENUMERAL_TYPE:
17231     case RECORD_TYPE:
17232     case UNION_TYPE:
17233     case QUAL_UNION_TYPE:
17234       size = int_size_in_bytes (tree_node);
17235       break;
17236     case FIELD_DECL:
17237       /* For a data member of a struct or union, the DW_AT_byte_size is
17238          generally given as the number of bytes normally allocated for an
17239          object of the *declared* type of the member itself.  This is true
17240          even for bit-fields.  */
17241       size = simple_type_size_in_bits (field_type (tree_node)) / BITS_PER_UNIT;
17242       break;
17243     default:
17244       gcc_unreachable ();
17245     }
17246
17247   /* Note that `size' might be -1 when we get to this point.  If it is, that
17248      indicates that the byte size of the entity in question is variable.  We
17249      have no good way of expressing this fact in Dwarf at the present time,
17250      so just let the -1 pass on through.  */
17251   add_AT_unsigned (die, DW_AT_byte_size, size);
17252 }
17253
17254 /* For a FIELD_DECL node which represents a bit-field, output an attribute
17255    which specifies the distance in bits from the highest order bit of the
17256    "containing object" for the bit-field to the highest order bit of the
17257    bit-field itself.
17258
17259    For any given bit-field, the "containing object" is a hypothetical object
17260    (of some integral or enum type) within which the given bit-field lives.  The
17261    type of this hypothetical "containing object" is always the same as the
17262    declared type of the individual bit-field itself.  The determination of the
17263    exact location of the "containing object" for a bit-field is rather
17264    complicated.  It's handled by the `field_byte_offset' function (above).
17265
17266    Note that it is the size (in bytes) of the hypothetical "containing object"
17267    which will be given in the DW_AT_byte_size attribute for this bit-field.
17268    (See `byte_size_attribute' above).  */
17269
17270 static inline void
17271 add_bit_offset_attribute (dw_die_ref die, tree decl)
17272 {
17273   HOST_WIDE_INT object_offset_in_bytes = field_byte_offset (decl);
17274   tree type = DECL_BIT_FIELD_TYPE (decl);
17275   HOST_WIDE_INT bitpos_int;
17276   HOST_WIDE_INT highest_order_object_bit_offset;
17277   HOST_WIDE_INT highest_order_field_bit_offset;
17278   HOST_WIDE_INT unsigned bit_offset;
17279
17280   /* Must be a field and a bit field.  */
17281   gcc_assert (type && TREE_CODE (decl) == FIELD_DECL);
17282
17283   /* We can't yet handle bit-fields whose offsets are variable, so if we
17284      encounter such things, just return without generating any attribute
17285      whatsoever.  Likewise for variable or too large size.  */
17286   if (! host_integerp (bit_position (decl), 0)
17287       || ! host_integerp (DECL_SIZE (decl), 1))
17288     return;
17289
17290   bitpos_int = int_bit_position (decl);
17291
17292   /* Note that the bit offset is always the distance (in bits) from the
17293      highest-order bit of the "containing object" to the highest-order bit of
17294      the bit-field itself.  Since the "high-order end" of any object or field
17295      is different on big-endian and little-endian machines, the computation
17296      below must take account of these differences.  */
17297   highest_order_object_bit_offset = object_offset_in_bytes * BITS_PER_UNIT;
17298   highest_order_field_bit_offset = bitpos_int;
17299
17300   if (! BYTES_BIG_ENDIAN)
17301     {
17302       highest_order_field_bit_offset += tree_low_cst (DECL_SIZE (decl), 0);
17303       highest_order_object_bit_offset += simple_type_size_in_bits (type);
17304     }
17305
17306   bit_offset
17307     = (! BYTES_BIG_ENDIAN
17308        ? highest_order_object_bit_offset - highest_order_field_bit_offset
17309        : highest_order_field_bit_offset - highest_order_object_bit_offset);
17310
17311   add_AT_unsigned (die, DW_AT_bit_offset, bit_offset);
17312 }
17313
17314 /* For a FIELD_DECL node which represents a bit field, output an attribute
17315    which specifies the length in bits of the given field.  */
17316
17317 static inline void
17318 add_bit_size_attribute (dw_die_ref die, tree decl)
17319 {
17320   /* Must be a field and a bit field.  */
17321   gcc_assert (TREE_CODE (decl) == FIELD_DECL
17322               && DECL_BIT_FIELD_TYPE (decl));
17323
17324   if (host_integerp (DECL_SIZE (decl), 1))
17325     add_AT_unsigned (die, DW_AT_bit_size, tree_low_cst (DECL_SIZE (decl), 1));
17326 }
17327
17328 /* If the compiled language is ANSI C, then add a 'prototyped'
17329    attribute, if arg types are given for the parameters of a function.  */
17330
17331 static inline void
17332 add_prototyped_attribute (dw_die_ref die, tree func_type)
17333 {
17334   if (get_AT_unsigned (comp_unit_die, DW_AT_language) == DW_LANG_C89
17335       && TYPE_ARG_TYPES (func_type) != NULL)
17336     add_AT_flag (die, DW_AT_prototyped, 1);
17337 }
17338
17339 /* Add an 'abstract_origin' attribute below a given DIE.  The DIE is found
17340    by looking in either the type declaration or object declaration
17341    equate table.  */
17342
17343 static inline dw_die_ref
17344 add_abstract_origin_attribute (dw_die_ref die, tree origin)
17345 {
17346   dw_die_ref origin_die = NULL;
17347
17348   if (TREE_CODE (origin) != FUNCTION_DECL)
17349     {
17350       /* We may have gotten separated from the block for the inlined
17351          function, if we're in an exception handler or some such; make
17352          sure that the abstract function has been written out.
17353
17354          Doing this for nested functions is wrong, however; functions are
17355          distinct units, and our context might not even be inline.  */
17356       tree fn = origin;
17357
17358       if (TYPE_P (fn))
17359         fn = TYPE_STUB_DECL (fn);
17360
17361       fn = decl_function_context (fn);
17362       if (fn)
17363         dwarf2out_abstract_function (fn);
17364     }
17365
17366   if (DECL_P (origin))
17367     origin_die = lookup_decl_die (origin);
17368   else if (TYPE_P (origin))
17369     origin_die = lookup_type_die (origin);
17370
17371   /* XXX: Functions that are never lowered don't always have correct block
17372      trees (in the case of java, they simply have no block tree, in some other
17373      languages).  For these functions, there is nothing we can really do to
17374      output correct debug info for inlined functions in all cases.  Rather
17375      than die, we'll just produce deficient debug info now, in that we will
17376      have variables without a proper abstract origin.  In the future, when all
17377      functions are lowered, we should re-add a gcc_assert (origin_die)
17378      here.  */
17379
17380   if (origin_die)
17381     add_AT_die_ref (die, DW_AT_abstract_origin, origin_die);
17382   return origin_die;
17383 }
17384
17385 /* We do not currently support the pure_virtual attribute.  */
17386
17387 static inline void
17388 add_pure_or_virtual_attribute (dw_die_ref die, tree func_decl)
17389 {
17390   if (DECL_VINDEX (func_decl))
17391     {
17392       add_AT_unsigned (die, DW_AT_virtuality, DW_VIRTUALITY_virtual);
17393
17394       if (host_integerp (DECL_VINDEX (func_decl), 0))
17395         add_AT_loc (die, DW_AT_vtable_elem_location,
17396                     new_loc_descr (DW_OP_constu,
17397                                    tree_low_cst (DECL_VINDEX (func_decl), 0),
17398                                    0));
17399
17400       /* GNU extension: Record what type this method came from originally.  */
17401       if (debug_info_level > DINFO_LEVEL_TERSE
17402           && DECL_CONTEXT (func_decl))
17403         add_AT_die_ref (die, DW_AT_containing_type,
17404                         lookup_type_die (DECL_CONTEXT (func_decl)));
17405     }
17406 }
17407 \f
17408 /* Add a DW_AT_linkage_name or DW_AT_MIPS_linkage_name attribute for the
17409    given decl.  This used to be a vendor extension until after DWARF 4
17410    standardized it.  */
17411
17412 static void
17413 add_linkage_attr (dw_die_ref die, tree decl)
17414 {
17415   const char *name = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl));
17416
17417   /* Mimic what assemble_name_raw does with a leading '*'.  */
17418   if (name[0] == '*')
17419     name = &name[1];
17420
17421   if (dwarf_version >= 4)
17422     add_AT_string (die, DW_AT_linkage_name, name);
17423   else
17424     add_AT_string (die, DW_AT_MIPS_linkage_name, name);
17425 }
17426
17427 /* Add source coordinate attributes for the given decl.  */
17428
17429 static void
17430 add_src_coords_attributes (dw_die_ref die, tree decl)
17431 {
17432   expanded_location s = expand_location (DECL_SOURCE_LOCATION (decl));
17433
17434   add_AT_file (die, DW_AT_decl_file, lookup_filename (s.file));
17435   add_AT_unsigned (die, DW_AT_decl_line, s.line);
17436 }
17437
17438 /* Add DW_AT_{,MIPS_}linkage_name attribute for the given decl.  */
17439
17440 static void
17441 add_linkage_name (dw_die_ref die, tree decl)
17442 {
17443   if ((TREE_CODE (decl) == FUNCTION_DECL || TREE_CODE (decl) == VAR_DECL)
17444        && TREE_PUBLIC (decl)
17445        && !DECL_ABSTRACT (decl)
17446        && !(TREE_CODE (decl) == VAR_DECL && DECL_REGISTER (decl))
17447        && die->die_tag != DW_TAG_member)
17448     {
17449       /* Defer until we have an assembler name set.  */
17450       if (!DECL_ASSEMBLER_NAME_SET_P (decl))
17451         {
17452           limbo_die_node *asm_name;
17453
17454           asm_name = ggc_alloc_cleared_limbo_die_node ();
17455           asm_name->die = die;
17456           asm_name->created_for = decl;
17457           asm_name->next = deferred_asm_name;
17458           deferred_asm_name = asm_name;
17459         }
17460       else if (DECL_ASSEMBLER_NAME (decl) != DECL_NAME (decl))
17461         add_linkage_attr (die, decl);
17462     }
17463 }
17464
17465 /* Add a DW_AT_name attribute and source coordinate attribute for the
17466    given decl, but only if it actually has a name.  */
17467
17468 static void
17469 add_name_and_src_coords_attributes (dw_die_ref die, tree decl)
17470 {
17471   tree decl_name;
17472
17473   decl_name = DECL_NAME (decl);
17474   if (decl_name != NULL && IDENTIFIER_POINTER (decl_name) != NULL)
17475     {
17476       const char *name = dwarf2_name (decl, 0);
17477       if (name)
17478         add_name_attribute (die, name);
17479       if (! DECL_ARTIFICIAL (decl))
17480         add_src_coords_attributes (die, decl);
17481
17482       add_linkage_name (die, decl);
17483     }
17484
17485 #ifdef VMS_DEBUGGING_INFO
17486   /* Get the function's name, as described by its RTL.  This may be different
17487      from the DECL_NAME name used in the source file.  */
17488   if (TREE_CODE (decl) == FUNCTION_DECL && TREE_ASM_WRITTEN (decl))
17489     {
17490       add_AT_addr (die, DW_AT_VMS_rtnbeg_pd_address,
17491                    XEXP (DECL_RTL (decl), 0));
17492       VEC_safe_push (rtx, gc, used_rtx_array, XEXP (DECL_RTL (decl), 0));
17493     }
17494 #endif
17495 }
17496
17497 #ifdef VMS_DEBUGGING_INFO
17498
17499 /* Output the debug main pointer die for VMS */
17500
17501 void
17502 dwarf2out_vms_debug_main_pointer (void)
17503 {
17504   char label[MAX_ARTIFICIAL_LABEL_BYTES];
17505   dw_die_ref die;
17506
17507   /* Allocate the VMS debug main subprogram die.  */
17508   die = ggc_alloc_cleared_die_node ();
17509   die->die_tag = DW_TAG_subprogram;
17510   add_name_attribute (die, VMS_DEBUG_MAIN_POINTER);
17511   ASM_GENERATE_INTERNAL_LABEL (label, PROLOGUE_END_LABEL,
17512                                current_function_funcdef_no);
17513   add_AT_lbl_id (die, DW_AT_entry_pc, label);
17514
17515   /* Make it the first child of comp_unit_die.  */
17516   die->die_parent = comp_unit_die;
17517   if (comp_unit_die->die_child)
17518     {
17519       die->die_sib = comp_unit_die->die_child->die_sib;
17520       comp_unit_die->die_child->die_sib = die;
17521     }
17522   else
17523     {
17524       die->die_sib = die;
17525       comp_unit_die->die_child = die;
17526     }
17527 }
17528 #endif
17529
17530 /* Push a new declaration scope.  */
17531
17532 static void
17533 push_decl_scope (tree scope)
17534 {
17535   VEC_safe_push (tree, gc, decl_scope_table, scope);
17536 }
17537
17538 /* Pop a declaration scope.  */
17539
17540 static inline void
17541 pop_decl_scope (void)
17542 {
17543   VEC_pop (tree, decl_scope_table);
17544 }
17545
17546 /* Return the DIE for the scope that immediately contains this type.
17547    Non-named types get global scope.  Named types nested in other
17548    types get their containing scope if it's open, or global scope
17549    otherwise.  All other types (i.e. function-local named types) get
17550    the current active scope.  */
17551
17552 static dw_die_ref
17553 scope_die_for (tree t, dw_die_ref context_die)
17554 {
17555   dw_die_ref scope_die = NULL;
17556   tree containing_scope;
17557   int i;
17558
17559   /* Non-types always go in the current scope.  */
17560   gcc_assert (TYPE_P (t));
17561
17562   containing_scope = TYPE_CONTEXT (t);
17563
17564   /* Use the containing namespace if it was passed in (for a declaration).  */
17565   if (containing_scope && TREE_CODE (containing_scope) == NAMESPACE_DECL)
17566     {
17567       if (context_die == lookup_decl_die (containing_scope))
17568         /* OK */;
17569       else
17570         containing_scope = NULL_TREE;
17571     }
17572
17573   /* Ignore function type "scopes" from the C frontend.  They mean that
17574      a tagged type is local to a parmlist of a function declarator, but
17575      that isn't useful to DWARF.  */
17576   if (containing_scope && TREE_CODE (containing_scope) == FUNCTION_TYPE)
17577     containing_scope = NULL_TREE;
17578
17579   if (containing_scope == NULL_TREE)
17580     scope_die = comp_unit_die;
17581   else if (TYPE_P (containing_scope))
17582     {
17583       /* For types, we can just look up the appropriate DIE.  But
17584          first we check to see if we're in the middle of emitting it
17585          so we know where the new DIE should go.  */
17586       for (i = VEC_length (tree, decl_scope_table) - 1; i >= 0; --i)
17587         if (VEC_index (tree, decl_scope_table, i) == containing_scope)
17588           break;
17589
17590       if (i < 0)
17591         {
17592           gcc_assert (debug_info_level <= DINFO_LEVEL_TERSE
17593                       || TREE_ASM_WRITTEN (containing_scope));
17594           /*We are not in the middle of emitting the type
17595             CONTAINING_SCOPE. Let's see if it's emitted already.  */
17596           scope_die = lookup_type_die (containing_scope);
17597
17598           /* If none of the current dies are suitable, we get file scope.  */
17599           if (scope_die == NULL)
17600             scope_die = comp_unit_die;
17601         }
17602       else
17603         scope_die = lookup_type_die (containing_scope);
17604     }
17605   else
17606     scope_die = context_die;
17607
17608   return scope_die;
17609 }
17610
17611 /* Returns nonzero if CONTEXT_DIE is internal to a function.  */
17612
17613 static inline int
17614 local_scope_p (dw_die_ref context_die)
17615 {
17616   for (; context_die; context_die = context_die->die_parent)
17617     if (context_die->die_tag == DW_TAG_inlined_subroutine
17618         || context_die->die_tag == DW_TAG_subprogram)
17619       return 1;
17620
17621   return 0;
17622 }
17623
17624 /* Returns nonzero if CONTEXT_DIE is a class.  */
17625
17626 static inline int
17627 class_scope_p (dw_die_ref context_die)
17628 {
17629   return (context_die
17630           && (context_die->die_tag == DW_TAG_structure_type
17631               || context_die->die_tag == DW_TAG_class_type
17632               || context_die->die_tag == DW_TAG_interface_type
17633               || context_die->die_tag == DW_TAG_union_type));
17634 }
17635
17636 /* Returns nonzero if CONTEXT_DIE is a class or namespace, for deciding
17637    whether or not to treat a DIE in this context as a declaration.  */
17638
17639 static inline int
17640 class_or_namespace_scope_p (dw_die_ref context_die)
17641 {
17642   return (class_scope_p (context_die)
17643           || (context_die && context_die->die_tag == DW_TAG_namespace));
17644 }
17645
17646 /* Many forms of DIEs require a "type description" attribute.  This
17647    routine locates the proper "type descriptor" die for the type given
17648    by 'type', and adds a DW_AT_type attribute below the given die.  */
17649
17650 static void
17651 add_type_attribute (dw_die_ref object_die, tree type, int decl_const,
17652                     int decl_volatile, dw_die_ref context_die)
17653 {
17654   enum tree_code code  = TREE_CODE (type);
17655   dw_die_ref type_die  = NULL;
17656
17657   /* ??? If this type is an unnamed subrange type of an integral, floating-point
17658      or fixed-point type, use the inner type.  This is because we have no
17659      support for unnamed types in base_type_die.  This can happen if this is
17660      an Ada subrange type.  Correct solution is emit a subrange type die.  */
17661   if ((code == INTEGER_TYPE || code == REAL_TYPE || code == FIXED_POINT_TYPE)
17662       && TREE_TYPE (type) != 0 && TYPE_NAME (type) == 0)
17663     type = TREE_TYPE (type), code = TREE_CODE (type);
17664
17665   if (code == ERROR_MARK
17666       /* Handle a special case.  For functions whose return type is void, we
17667          generate *no* type attribute.  (Note that no object may have type
17668          `void', so this only applies to function return types).  */
17669       || code == VOID_TYPE)
17670     return;
17671
17672   type_die = modified_type_die (type,
17673                                 decl_const || TYPE_READONLY (type),
17674                                 decl_volatile || TYPE_VOLATILE (type),
17675                                 context_die);
17676
17677   if (type_die != NULL)
17678     add_AT_die_ref (object_die, DW_AT_type, type_die);
17679 }
17680
17681 /* Given an object die, add the calling convention attribute for the
17682    function call type.  */
17683 static void
17684 add_calling_convention_attribute (dw_die_ref subr_die, tree decl)
17685 {
17686   enum dwarf_calling_convention value = DW_CC_normal;
17687
17688   value = ((enum dwarf_calling_convention)
17689            targetm.dwarf_calling_convention (TREE_TYPE (decl)));
17690
17691   /* DWARF doesn't provide a way to identify a program's source-level
17692      entry point.  DW_AT_calling_convention attributes are only meant
17693      to describe functions' calling conventions.  However, lacking a
17694      better way to signal the Fortran main program, we use this for the
17695      time being, following existing custom.  */
17696   if (is_fortran ()
17697       && !strcmp (IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl)), "MAIN__"))
17698     value = DW_CC_program;
17699
17700   /* Only add the attribute if the backend requests it, and
17701      is not DW_CC_normal.  */
17702   if (value && (value != DW_CC_normal))
17703     add_AT_unsigned (subr_die, DW_AT_calling_convention, value);
17704 }
17705
17706 /* Given a tree pointer to a struct, class, union, or enum type node, return
17707    a pointer to the (string) tag name for the given type, or zero if the type
17708    was declared without a tag.  */
17709
17710 static const char *
17711 type_tag (const_tree type)
17712 {
17713   const char *name = 0;
17714
17715   if (TYPE_NAME (type) != 0)
17716     {
17717       tree t = 0;
17718
17719       /* Find the IDENTIFIER_NODE for the type name.  */
17720       if (TREE_CODE (TYPE_NAME (type)) == IDENTIFIER_NODE)
17721         t = TYPE_NAME (type);
17722
17723       /* The g++ front end makes the TYPE_NAME of *each* tagged type point to
17724          a TYPE_DECL node, regardless of whether or not a `typedef' was
17725          involved.  */
17726       else if (TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
17727                && ! DECL_IGNORED_P (TYPE_NAME (type)))
17728         {
17729           /* We want to be extra verbose.  Don't call dwarf_name if
17730              DECL_NAME isn't set.  The default hook for decl_printable_name
17731              doesn't like that, and in this context it's correct to return
17732              0, instead of "<anonymous>" or the like.  */
17733           if (DECL_NAME (TYPE_NAME (type)))
17734             name = lang_hooks.dwarf_name (TYPE_NAME (type), 2);
17735         }
17736
17737       /* Now get the name as a string, or invent one.  */
17738       if (!name && t != 0)
17739         name = IDENTIFIER_POINTER (t);
17740     }
17741
17742   return (name == 0 || *name == '\0') ? 0 : name;
17743 }
17744
17745 /* Return the type associated with a data member, make a special check
17746    for bit field types.  */
17747
17748 static inline tree
17749 member_declared_type (const_tree member)
17750 {
17751   return (DECL_BIT_FIELD_TYPE (member)
17752           ? DECL_BIT_FIELD_TYPE (member) : TREE_TYPE (member));
17753 }
17754
17755 /* Get the decl's label, as described by its RTL. This may be different
17756    from the DECL_NAME name used in the source file.  */
17757
17758 #if 0
17759 static const char *
17760 decl_start_label (tree decl)
17761 {
17762   rtx x;
17763   const char *fnname;
17764
17765   x = DECL_RTL (decl);
17766   gcc_assert (MEM_P (x));
17767
17768   x = XEXP (x, 0);
17769   gcc_assert (GET_CODE (x) == SYMBOL_REF);
17770
17771   fnname = XSTR (x, 0);
17772   return fnname;
17773 }
17774 #endif
17775 \f
17776 /* These routines generate the internal representation of the DIE's for
17777    the compilation unit.  Debugging information is collected by walking
17778    the declaration trees passed in from dwarf2out_decl().  */
17779
17780 static void
17781 gen_array_type_die (tree type, dw_die_ref context_die)
17782 {
17783   dw_die_ref scope_die = scope_die_for (type, context_die);
17784   dw_die_ref array_die;
17785
17786   /* GNU compilers represent multidimensional array types as sequences of one
17787      dimensional array types whose element types are themselves array types.
17788      We sometimes squish that down to a single array_type DIE with multiple
17789      subscripts in the Dwarf debugging info.  The draft Dwarf specification
17790      say that we are allowed to do this kind of compression in C, because
17791      there is no difference between an array of arrays and a multidimensional
17792      array.  We don't do this for Ada to remain as close as possible to the
17793      actual representation, which is especially important against the language
17794      flexibilty wrt arrays of variable size.  */
17795
17796   bool collapse_nested_arrays = !is_ada ();
17797   tree element_type;
17798
17799   /* Emit DW_TAG_string_type for Fortran character types (with kind 1 only, as
17800      DW_TAG_string_type doesn't have DW_AT_type attribute).  */
17801   if (TYPE_STRING_FLAG (type)
17802       && TREE_CODE (type) == ARRAY_TYPE
17803       && is_fortran ()
17804       && TYPE_MODE (TREE_TYPE (type)) == TYPE_MODE (char_type_node))
17805     {
17806       HOST_WIDE_INT size;
17807
17808       array_die = new_die (DW_TAG_string_type, scope_die, type);
17809       add_name_attribute (array_die, type_tag (type));
17810       equate_type_number_to_die (type, array_die);
17811       size = int_size_in_bytes (type);
17812       if (size >= 0)
17813         add_AT_unsigned (array_die, DW_AT_byte_size, size);
17814       else if (TYPE_DOMAIN (type) != NULL_TREE
17815                && TYPE_MAX_VALUE (TYPE_DOMAIN (type)) != NULL_TREE
17816                && DECL_P (TYPE_MAX_VALUE (TYPE_DOMAIN (type))))
17817         {
17818           tree szdecl = TYPE_MAX_VALUE (TYPE_DOMAIN (type));
17819           dw_loc_list_ref loc = loc_list_from_tree (szdecl, 2);
17820
17821           size = int_size_in_bytes (TREE_TYPE (szdecl));
17822           if (loc && size > 0)
17823             {
17824               add_AT_location_description (array_die, DW_AT_string_length, loc);
17825               if (size != DWARF2_ADDR_SIZE)
17826                 add_AT_unsigned (array_die, DW_AT_byte_size, size);
17827             }
17828         }
17829       return;
17830     }
17831
17832   /* ??? The SGI dwarf reader fails for array of array of enum types
17833      (e.g. const enum machine_mode insn_operand_mode[2][10]) unless the inner
17834      array type comes before the outer array type.  We thus call gen_type_die
17835      before we new_die and must prevent nested array types collapsing for this
17836      target.  */
17837
17838 #ifdef MIPS_DEBUGGING_INFO
17839   gen_type_die (TREE_TYPE (type), context_die);
17840   collapse_nested_arrays = false;
17841 #endif
17842
17843   array_die = new_die (DW_TAG_array_type, scope_die, type);
17844   add_name_attribute (array_die, type_tag (type));
17845   equate_type_number_to_die (type, array_die);
17846
17847   if (TREE_CODE (type) == VECTOR_TYPE)
17848     {
17849       /* The frontend feeds us a representation for the vector as a struct
17850          containing an array.  Pull out the array type.  */
17851       type = TREE_TYPE (TYPE_FIELDS (TYPE_DEBUG_REPRESENTATION_TYPE (type)));
17852       add_AT_flag (array_die, DW_AT_GNU_vector, 1);
17853     }
17854
17855   /* For Fortran multidimensional arrays use DW_ORD_col_major ordering.  */
17856   if (is_fortran ()
17857       && TREE_CODE (type) == ARRAY_TYPE
17858       && TREE_CODE (TREE_TYPE (type)) == ARRAY_TYPE
17859       && !TYPE_STRING_FLAG (TREE_TYPE (type)))
17860     add_AT_unsigned (array_die, DW_AT_ordering, DW_ORD_col_major);
17861
17862 #if 0
17863   /* We default the array ordering.  SDB will probably do
17864      the right things even if DW_AT_ordering is not present.  It's not even
17865      an issue until we start to get into multidimensional arrays anyway.  If
17866      SDB is ever caught doing the Wrong Thing for multi-dimensional arrays,
17867      then we'll have to put the DW_AT_ordering attribute back in.  (But if
17868      and when we find out that we need to put these in, we will only do so
17869      for multidimensional arrays.  */
17870   add_AT_unsigned (array_die, DW_AT_ordering, DW_ORD_row_major);
17871 #endif
17872
17873 #ifdef MIPS_DEBUGGING_INFO
17874   /* The SGI compilers handle arrays of unknown bound by setting
17875      AT_declaration and not emitting any subrange DIEs.  */
17876   if (! TYPE_DOMAIN (type))
17877     add_AT_flag (array_die, DW_AT_declaration, 1);
17878   else
17879 #endif
17880     add_subscript_info (array_die, type, collapse_nested_arrays);
17881
17882   /* Add representation of the type of the elements of this array type and
17883      emit the corresponding DIE if we haven't done it already.  */
17884   element_type = TREE_TYPE (type);
17885   if (collapse_nested_arrays)
17886     while (TREE_CODE (element_type) == ARRAY_TYPE)
17887       {
17888         if (TYPE_STRING_FLAG (element_type) && is_fortran ())
17889           break;
17890         element_type = TREE_TYPE (element_type);
17891       }
17892
17893 #ifndef MIPS_DEBUGGING_INFO
17894   gen_type_die (element_type, context_die);
17895 #endif
17896
17897   add_type_attribute (array_die, element_type, 0, 0, context_die);
17898
17899   if (get_AT (array_die, DW_AT_name))
17900     add_pubtype (type, array_die);
17901 }
17902
17903 static dw_loc_descr_ref
17904 descr_info_loc (tree val, tree base_decl)
17905 {
17906   HOST_WIDE_INT size;
17907   dw_loc_descr_ref loc, loc2;
17908   enum dwarf_location_atom op;
17909
17910   if (val == base_decl)
17911     return new_loc_descr (DW_OP_push_object_address, 0, 0);
17912
17913   switch (TREE_CODE (val))
17914     {
17915     CASE_CONVERT:
17916       return descr_info_loc (TREE_OPERAND (val, 0), base_decl);
17917     case VAR_DECL:
17918       return loc_descriptor_from_tree (val, 0);
17919     case INTEGER_CST:
17920       if (host_integerp (val, 0))
17921         return int_loc_descriptor (tree_low_cst (val, 0));
17922       break;
17923     case INDIRECT_REF:
17924       size = int_size_in_bytes (TREE_TYPE (val));
17925       if (size < 0)
17926         break;
17927       loc = descr_info_loc (TREE_OPERAND (val, 0), base_decl);
17928       if (!loc)
17929         break;
17930       if (size == DWARF2_ADDR_SIZE)
17931         add_loc_descr (&loc, new_loc_descr (DW_OP_deref, 0, 0));
17932       else
17933         add_loc_descr (&loc, new_loc_descr (DW_OP_deref_size, size, 0));
17934       return loc;
17935     case POINTER_PLUS_EXPR:
17936     case PLUS_EXPR:
17937       if (host_integerp (TREE_OPERAND (val, 1), 1)
17938           && (unsigned HOST_WIDE_INT) tree_low_cst (TREE_OPERAND (val, 1), 1)
17939              < 16384)
17940         {
17941           loc = descr_info_loc (TREE_OPERAND (val, 0), base_decl);
17942           if (!loc)
17943             break;
17944           loc_descr_plus_const (&loc, tree_low_cst (TREE_OPERAND (val, 1), 0));
17945         }
17946       else
17947         {
17948           op = DW_OP_plus;
17949         do_binop:
17950           loc = descr_info_loc (TREE_OPERAND (val, 0), base_decl);
17951           if (!loc)
17952             break;
17953           loc2 = descr_info_loc (TREE_OPERAND (val, 1), base_decl);
17954           if (!loc2)
17955             break;
17956           add_loc_descr (&loc, loc2);
17957           add_loc_descr (&loc2, new_loc_descr (op, 0, 0));
17958         }
17959       return loc;
17960     case MINUS_EXPR:
17961       op = DW_OP_minus;
17962       goto do_binop;
17963     case MULT_EXPR:
17964       op = DW_OP_mul;
17965       goto do_binop;
17966     case EQ_EXPR:
17967       op = DW_OP_eq;
17968       goto do_binop;
17969     case NE_EXPR:
17970       op = DW_OP_ne;
17971       goto do_binop;
17972     default:
17973       break;
17974     }
17975   return NULL;
17976 }
17977
17978 static void
17979 add_descr_info_field (dw_die_ref die, enum dwarf_attribute attr,
17980                       tree val, tree base_decl)
17981 {
17982   dw_loc_descr_ref loc;
17983
17984   if (host_integerp (val, 0))
17985     {
17986       add_AT_unsigned (die, attr, tree_low_cst (val, 0));
17987       return;
17988     }
17989
17990   loc = descr_info_loc (val, base_decl);
17991   if (!loc)
17992     return;
17993
17994   add_AT_loc (die, attr, loc);
17995 }
17996
17997 /* This routine generates DIE for array with hidden descriptor, details
17998    are filled into *info by a langhook.  */
17999
18000 static void
18001 gen_descr_array_type_die (tree type, struct array_descr_info *info,
18002                           dw_die_ref context_die)
18003 {
18004   dw_die_ref scope_die = scope_die_for (type, context_die);
18005   dw_die_ref array_die;
18006   int dim;
18007
18008   array_die = new_die (DW_TAG_array_type, scope_die, type);
18009   add_name_attribute (array_die, type_tag (type));
18010   equate_type_number_to_die (type, array_die);
18011
18012   /* For Fortran multidimensional arrays use DW_ORD_col_major ordering.  */
18013   if (is_fortran ()
18014       && info->ndimensions >= 2)
18015     add_AT_unsigned (array_die, DW_AT_ordering, DW_ORD_col_major);
18016
18017   if (info->data_location)
18018     add_descr_info_field (array_die, DW_AT_data_location, info->data_location,
18019                           info->base_decl);
18020   if (info->associated)
18021     add_descr_info_field (array_die, DW_AT_associated, info->associated,
18022                           info->base_decl);
18023   if (info->allocated)
18024     add_descr_info_field (array_die, DW_AT_allocated, info->allocated,
18025                           info->base_decl);
18026
18027   for (dim = 0; dim < info->ndimensions; dim++)
18028     {
18029       dw_die_ref subrange_die
18030         = new_die (DW_TAG_subrange_type, array_die, NULL);
18031
18032       if (info->dimen[dim].lower_bound)
18033         {
18034           /* If it is the default value, omit it.  */
18035           int dflt;
18036
18037           if (host_integerp (info->dimen[dim].lower_bound, 0)
18038               && (dflt = lower_bound_default ()) != -1
18039               && tree_low_cst (info->dimen[dim].lower_bound, 0) == dflt)
18040             ;
18041           else
18042             add_descr_info_field (subrange_die, DW_AT_lower_bound,
18043                                   info->dimen[dim].lower_bound,
18044                                   info->base_decl);
18045         }
18046       if (info->dimen[dim].upper_bound)
18047         add_descr_info_field (subrange_die, DW_AT_upper_bound,
18048                               info->dimen[dim].upper_bound,
18049                               info->base_decl);
18050       if (info->dimen[dim].stride)
18051         add_descr_info_field (subrange_die, DW_AT_byte_stride,
18052                               info->dimen[dim].stride,
18053                               info->base_decl);
18054     }
18055
18056   gen_type_die (info->element_type, context_die);
18057   add_type_attribute (array_die, info->element_type, 0, 0, context_die);
18058
18059   if (get_AT (array_die, DW_AT_name))
18060     add_pubtype (type, array_die);
18061 }
18062
18063 #if 0
18064 static void
18065 gen_entry_point_die (tree decl, dw_die_ref context_die)
18066 {
18067   tree origin = decl_ultimate_origin (decl);
18068   dw_die_ref decl_die = new_die (DW_TAG_entry_point, context_die, decl);
18069
18070   if (origin != NULL)
18071     add_abstract_origin_attribute (decl_die, origin);
18072   else
18073     {
18074       add_name_and_src_coords_attributes (decl_die, decl);
18075       add_type_attribute (decl_die, TREE_TYPE (TREE_TYPE (decl)),
18076                           0, 0, context_die);
18077     }
18078
18079   if (DECL_ABSTRACT (decl))
18080     equate_decl_number_to_die (decl, decl_die);
18081   else
18082     add_AT_lbl_id (decl_die, DW_AT_low_pc, decl_start_label (decl));
18083 }
18084 #endif
18085
18086 /* Walk through the list of incomplete types again, trying once more to
18087    emit full debugging info for them.  */
18088
18089 static void
18090 retry_incomplete_types (void)
18091 {
18092   int i;
18093
18094   for (i = VEC_length (tree, incomplete_types) - 1; i >= 0; i--)
18095     if (should_emit_struct_debug (VEC_index (tree, incomplete_types, i),
18096                                   DINFO_USAGE_DIR_USE))
18097       gen_type_die (VEC_index (tree, incomplete_types, i), comp_unit_die);
18098 }
18099
18100 /* Determine what tag to use for a record type.  */
18101
18102 static enum dwarf_tag
18103 record_type_tag (tree type)
18104 {
18105   if (! lang_hooks.types.classify_record)
18106     return DW_TAG_structure_type;
18107
18108   switch (lang_hooks.types.classify_record (type))
18109     {
18110     case RECORD_IS_STRUCT:
18111       return DW_TAG_structure_type;
18112
18113     case RECORD_IS_CLASS:
18114       return DW_TAG_class_type;
18115
18116     case RECORD_IS_INTERFACE:
18117       if (dwarf_version >= 3 || !dwarf_strict)
18118         return DW_TAG_interface_type;
18119       return DW_TAG_structure_type;
18120
18121     default:
18122       gcc_unreachable ();
18123     }
18124 }
18125
18126 /* Generate a DIE to represent an enumeration type.  Note that these DIEs
18127    include all of the information about the enumeration values also. Each
18128    enumerated type name/value is listed as a child of the enumerated type
18129    DIE.  */
18130
18131 static dw_die_ref
18132 gen_enumeration_type_die (tree type, dw_die_ref context_die)
18133 {
18134   dw_die_ref type_die = lookup_type_die (type);
18135
18136   if (type_die == NULL)
18137     {
18138       type_die = new_die (DW_TAG_enumeration_type,
18139                           scope_die_for (type, context_die), type);
18140       equate_type_number_to_die (type, type_die);
18141       add_name_attribute (type_die, type_tag (type));
18142       if ((dwarf_version >= 4 || !dwarf_strict)
18143           && ENUM_IS_SCOPED (type))
18144         add_AT_flag (type_die, DW_AT_enum_class, 1);
18145     }
18146   else if (! TYPE_SIZE (type))
18147     return type_die;
18148   else
18149     remove_AT (type_die, DW_AT_declaration);
18150
18151   /* Handle a GNU C/C++ extension, i.e. incomplete enum types.  If the
18152      given enum type is incomplete, do not generate the DW_AT_byte_size
18153      attribute or the DW_AT_element_list attribute.  */
18154   if (TYPE_SIZE (type))
18155     {
18156       tree link;
18157
18158       TREE_ASM_WRITTEN (type) = 1;
18159       add_byte_size_attribute (type_die, type);
18160       if (TYPE_STUB_DECL (type) != NULL_TREE)
18161         {
18162           add_src_coords_attributes (type_die, TYPE_STUB_DECL (type));
18163           add_accessibility_attribute (type_die, TYPE_STUB_DECL (type));
18164         }
18165
18166       /* If the first reference to this type was as the return type of an
18167          inline function, then it may not have a parent.  Fix this now.  */
18168       if (type_die->die_parent == NULL)
18169         add_child_die (scope_die_for (type, context_die), type_die);
18170
18171       for (link = TYPE_VALUES (type);
18172            link != NULL; link = TREE_CHAIN (link))
18173         {
18174           dw_die_ref enum_die = new_die (DW_TAG_enumerator, type_die, link);
18175           tree value = TREE_VALUE (link);
18176
18177           add_name_attribute (enum_die,
18178                               IDENTIFIER_POINTER (TREE_PURPOSE (link)));
18179
18180           if (TREE_CODE (value) == CONST_DECL)
18181             value = DECL_INITIAL (value);
18182
18183           if (host_integerp (value, TYPE_UNSIGNED (TREE_TYPE (value))))
18184             /* DWARF2 does not provide a way of indicating whether or
18185                not enumeration constants are signed or unsigned.  GDB
18186                always assumes the values are signed, so we output all
18187                values as if they were signed.  That means that
18188                enumeration constants with very large unsigned values
18189                will appear to have negative values in the debugger.  */
18190             add_AT_int (enum_die, DW_AT_const_value,
18191                         tree_low_cst (value, tree_int_cst_sgn (value) > 0));
18192         }
18193     }
18194   else
18195     add_AT_flag (type_die, DW_AT_declaration, 1);
18196
18197   if (get_AT (type_die, DW_AT_name))
18198     add_pubtype (type, type_die);
18199
18200   return type_die;
18201 }
18202
18203 /* Generate a DIE to represent either a real live formal parameter decl or to
18204    represent just the type of some formal parameter position in some function
18205    type.
18206
18207    Note that this routine is a bit unusual because its argument may be a
18208    ..._DECL node (i.e. either a PARM_DECL or perhaps a VAR_DECL which
18209    represents an inlining of some PARM_DECL) or else some sort of a ..._TYPE
18210    node.  If it's the former then this function is being called to output a
18211    DIE to represent a formal parameter object (or some inlining thereof).  If
18212    it's the latter, then this function is only being called to output a
18213    DW_TAG_formal_parameter DIE to stand as a placeholder for some formal
18214    argument type of some subprogram type.
18215    If EMIT_NAME_P is true, name and source coordinate attributes
18216    are emitted.  */
18217
18218 static dw_die_ref
18219 gen_formal_parameter_die (tree node, tree origin, bool emit_name_p,
18220                           dw_die_ref context_die)
18221 {
18222   tree node_or_origin = node ? node : origin;
18223   tree ultimate_origin;
18224   dw_die_ref parm_die
18225     = new_die (DW_TAG_formal_parameter, context_die, node);
18226
18227   switch (TREE_CODE_CLASS (TREE_CODE (node_or_origin)))
18228     {
18229     case tcc_declaration:
18230       ultimate_origin = decl_ultimate_origin (node_or_origin);
18231       if (node || ultimate_origin)
18232         origin = ultimate_origin;
18233       if (origin != NULL)
18234         add_abstract_origin_attribute (parm_die, origin);
18235       else if (emit_name_p)
18236         add_name_and_src_coords_attributes (parm_die, node);
18237       if (origin == NULL
18238           || (! DECL_ABSTRACT (node_or_origin)
18239               && variably_modified_type_p (TREE_TYPE (node_or_origin),
18240                                            decl_function_context
18241                                                             (node_or_origin))))
18242         {
18243           tree type = TREE_TYPE (node_or_origin);
18244           if (decl_by_reference_p (node_or_origin))
18245             add_type_attribute (parm_die, TREE_TYPE (type), 0, 0,
18246                                 context_die);
18247           else
18248             add_type_attribute (parm_die, type,
18249                                 TREE_READONLY (node_or_origin),
18250                                 TREE_THIS_VOLATILE (node_or_origin),
18251                                 context_die);
18252         }
18253       if (origin == NULL && DECL_ARTIFICIAL (node))
18254         add_AT_flag (parm_die, DW_AT_artificial, 1);
18255
18256       if (node && node != origin)
18257         equate_decl_number_to_die (node, parm_die);
18258       if (! DECL_ABSTRACT (node_or_origin))
18259         add_location_or_const_value_attribute (parm_die, node_or_origin,
18260                                                DW_AT_location);
18261
18262       break;
18263
18264     case tcc_type:
18265       /* We were called with some kind of a ..._TYPE node.  */
18266       add_type_attribute (parm_die, node_or_origin, 0, 0, context_die);
18267       break;
18268
18269     default:
18270       gcc_unreachable ();
18271     }
18272
18273   return parm_die;
18274 }
18275
18276 /* Generate and return a DW_TAG_GNU_formal_parameter_pack. Also generate
18277    children DW_TAG_formal_parameter DIEs representing the arguments of the
18278    parameter pack.
18279
18280    PARM_PACK must be a function parameter pack.
18281    PACK_ARG is the first argument of the parameter pack. Its TREE_CHAIN
18282    must point to the subsequent arguments of the function PACK_ARG belongs to.
18283    SUBR_DIE is the DIE of the function PACK_ARG belongs to.
18284    If NEXT_ARG is non NULL, *NEXT_ARG is set to the function argument
18285    following the last one for which a DIE was generated.  */
18286
18287 static dw_die_ref
18288 gen_formal_parameter_pack_die  (tree parm_pack,
18289                                 tree pack_arg,
18290                                 dw_die_ref subr_die,
18291                                 tree *next_arg)
18292 {
18293   tree arg;
18294   dw_die_ref parm_pack_die;
18295
18296   gcc_assert (parm_pack
18297               && lang_hooks.function_parameter_pack_p (parm_pack)
18298               && subr_die);
18299
18300   parm_pack_die = new_die (DW_TAG_GNU_formal_parameter_pack, subr_die, parm_pack);
18301   add_src_coords_attributes (parm_pack_die, parm_pack);
18302
18303   for (arg = pack_arg; arg; arg = DECL_CHAIN (arg))
18304     {
18305       if (! lang_hooks.decls.function_parm_expanded_from_pack_p (arg,
18306                                                                  parm_pack))
18307         break;
18308       gen_formal_parameter_die (arg, NULL,
18309                                 false /* Don't emit name attribute.  */,
18310                                 parm_pack_die);
18311     }
18312   if (next_arg)
18313     *next_arg = arg;
18314   return parm_pack_die;
18315 }
18316
18317 /* Generate a special type of DIE used as a stand-in for a trailing ellipsis
18318    at the end of an (ANSI prototyped) formal parameters list.  */
18319
18320 static void
18321 gen_unspecified_parameters_die (tree decl_or_type, dw_die_ref context_die)
18322 {
18323   new_die (DW_TAG_unspecified_parameters, context_die, decl_or_type);
18324 }
18325
18326 /* Generate a list of nameless DW_TAG_formal_parameter DIEs (and perhaps a
18327    DW_TAG_unspecified_parameters DIE) to represent the types of the formal
18328    parameters as specified in some function type specification (except for
18329    those which appear as part of a function *definition*).  */
18330
18331 static void
18332 gen_formal_types_die (tree function_or_method_type, dw_die_ref context_die)
18333 {
18334   tree link;
18335   tree formal_type = NULL;
18336   tree first_parm_type;
18337   tree arg;
18338
18339   if (TREE_CODE (function_or_method_type) == FUNCTION_DECL)
18340     {
18341       arg = DECL_ARGUMENTS (function_or_method_type);
18342       function_or_method_type = TREE_TYPE (function_or_method_type);
18343     }
18344   else
18345     arg = NULL_TREE;
18346
18347   first_parm_type = TYPE_ARG_TYPES (function_or_method_type);
18348
18349   /* Make our first pass over the list of formal parameter types and output a
18350      DW_TAG_formal_parameter DIE for each one.  */
18351   for (link = first_parm_type; link; )
18352     {
18353       dw_die_ref parm_die;
18354
18355       formal_type = TREE_VALUE (link);
18356       if (formal_type == void_type_node)
18357         break;
18358
18359       /* Output a (nameless) DIE to represent the formal parameter itself.  */
18360       parm_die = gen_formal_parameter_die (formal_type, NULL,
18361                                            true /* Emit name attribute.  */,
18362                                            context_die);
18363       if ((TREE_CODE (function_or_method_type) == METHOD_TYPE
18364            && link == first_parm_type)
18365           || (arg && DECL_ARTIFICIAL (arg)))
18366         add_AT_flag (parm_die, DW_AT_artificial, 1);
18367
18368       link = TREE_CHAIN (link);
18369       if (arg)
18370         arg = DECL_CHAIN (arg);
18371     }
18372
18373   /* If this function type has an ellipsis, add a
18374      DW_TAG_unspecified_parameters DIE to the end of the parameter list.  */
18375   if (formal_type != void_type_node)
18376     gen_unspecified_parameters_die (function_or_method_type, context_die);
18377
18378   /* Make our second (and final) pass over the list of formal parameter types
18379      and output DIEs to represent those types (as necessary).  */
18380   for (link = TYPE_ARG_TYPES (function_or_method_type);
18381        link && TREE_VALUE (link);
18382        link = TREE_CHAIN (link))
18383     gen_type_die (TREE_VALUE (link), context_die);
18384 }
18385
18386 /* We want to generate the DIE for TYPE so that we can generate the
18387    die for MEMBER, which has been defined; we will need to refer back
18388    to the member declaration nested within TYPE.  If we're trying to
18389    generate minimal debug info for TYPE, processing TYPE won't do the
18390    trick; we need to attach the member declaration by hand.  */
18391
18392 static void
18393 gen_type_die_for_member (tree type, tree member, dw_die_ref context_die)
18394 {
18395   gen_type_die (type, context_die);
18396
18397   /* If we're trying to avoid duplicate debug info, we may not have
18398      emitted the member decl for this function.  Emit it now.  */
18399   if (TYPE_STUB_DECL (type)
18400       && TYPE_DECL_SUPPRESS_DEBUG (TYPE_STUB_DECL (type))
18401       && ! lookup_decl_die (member))
18402     {
18403       dw_die_ref type_die;
18404       gcc_assert (!decl_ultimate_origin (member));
18405
18406       push_decl_scope (type);
18407       type_die = lookup_type_die (type);
18408       if (TREE_CODE (member) == FUNCTION_DECL)
18409         gen_subprogram_die (member, type_die);
18410       else if (TREE_CODE (member) == FIELD_DECL)
18411         {
18412           /* Ignore the nameless fields that are used to skip bits but handle
18413              C++ anonymous unions and structs.  */
18414           if (DECL_NAME (member) != NULL_TREE
18415               || TREE_CODE (TREE_TYPE (member)) == UNION_TYPE
18416               || TREE_CODE (TREE_TYPE (member)) == RECORD_TYPE)
18417             {
18418               gen_type_die (member_declared_type (member), type_die);
18419               gen_field_die (member, type_die);
18420             }
18421         }
18422       else
18423         gen_variable_die (member, NULL_TREE, type_die);
18424
18425       pop_decl_scope ();
18426     }
18427 }
18428
18429 /* Generate the DWARF2 info for the "abstract" instance of a function which we
18430    may later generate inlined and/or out-of-line instances of.  */
18431
18432 static void
18433 dwarf2out_abstract_function (tree decl)
18434 {
18435   dw_die_ref old_die;
18436   tree save_fn;
18437   tree context;
18438   int was_abstract;
18439   htab_t old_decl_loc_table;
18440
18441   /* Make sure we have the actual abstract inline, not a clone.  */
18442   decl = DECL_ORIGIN (decl);
18443
18444   old_die = lookup_decl_die (decl);
18445   if (old_die && get_AT (old_die, DW_AT_inline))
18446     /* We've already generated the abstract instance.  */
18447     return;
18448
18449   /* We can be called while recursively when seeing block defining inlined subroutine
18450      DIE.  Be sure to not clobber the outer location table nor use it or we would
18451      get locations in abstract instantces.  */
18452   old_decl_loc_table = decl_loc_table;
18453   decl_loc_table = NULL;
18454
18455   /* Be sure we've emitted the in-class declaration DIE (if any) first, so
18456      we don't get confused by DECL_ABSTRACT.  */
18457   if (debug_info_level > DINFO_LEVEL_TERSE)
18458     {
18459       context = decl_class_context (decl);
18460       if (context)
18461         gen_type_die_for_member
18462           (context, decl, decl_function_context (decl) ? NULL : comp_unit_die);
18463     }
18464
18465   /* Pretend we've just finished compiling this function.  */
18466   save_fn = current_function_decl;
18467   current_function_decl = decl;
18468   push_cfun (DECL_STRUCT_FUNCTION (decl));
18469
18470   was_abstract = DECL_ABSTRACT (decl);
18471   set_decl_abstract_flags (decl, 1);
18472   dwarf2out_decl (decl);
18473   if (! was_abstract)
18474     set_decl_abstract_flags (decl, 0);
18475
18476   current_function_decl = save_fn;
18477   decl_loc_table = old_decl_loc_table;
18478   pop_cfun ();
18479 }
18480
18481 /* Helper function of premark_used_types() which gets called through
18482    htab_traverse.
18483
18484    Marks the DIE of a given type in *SLOT as perennial, so it never gets
18485    marked as unused by prune_unused_types.  */
18486
18487 static int
18488 premark_used_types_helper (void **slot, void *data ATTRIBUTE_UNUSED)
18489 {
18490   tree type;
18491   dw_die_ref die;
18492
18493   type = (tree) *slot;
18494   die = lookup_type_die (type);
18495   if (die != NULL)
18496     die->die_perennial_p = 1;
18497   return 1;
18498 }
18499
18500 /* Helper function of premark_types_used_by_global_vars which gets called
18501    through htab_traverse.
18502
18503    Marks the DIE of a given type in *SLOT as perennial, so it never gets
18504    marked as unused by prune_unused_types. The DIE of the type is marked
18505    only if the global variable using the type will actually be emitted.  */
18506
18507 static int
18508 premark_types_used_by_global_vars_helper (void **slot,
18509                                           void *data ATTRIBUTE_UNUSED)
18510 {
18511   struct types_used_by_vars_entry *entry;
18512   dw_die_ref die;
18513
18514   entry = (struct types_used_by_vars_entry *) *slot;
18515   gcc_assert (entry->type != NULL
18516               && entry->var_decl != NULL);
18517   die = lookup_type_die (entry->type);
18518   if (die)
18519     {
18520       /* Ask cgraph if the global variable really is to be emitted.
18521          If yes, then we'll keep the DIE of ENTRY->TYPE.  */
18522       struct varpool_node *node = varpool_get_node (entry->var_decl);
18523       if (node && node->needed)
18524         {
18525           die->die_perennial_p = 1;
18526           /* Keep the parent DIEs as well.  */
18527           while ((die = die->die_parent) && die->die_perennial_p == 0)
18528             die->die_perennial_p = 1;
18529         }
18530     }
18531   return 1;
18532 }
18533
18534 /* Mark all members of used_types_hash as perennial.  */
18535
18536 static void
18537 premark_used_types (void)
18538 {
18539   if (cfun && cfun->used_types_hash)
18540     htab_traverse (cfun->used_types_hash, premark_used_types_helper, NULL);
18541 }
18542
18543 /* Mark all members of types_used_by_vars_entry as perennial.  */
18544
18545 static void
18546 premark_types_used_by_global_vars (void)
18547 {
18548   if (types_used_by_vars_hash)
18549     htab_traverse (types_used_by_vars_hash,
18550                    premark_types_used_by_global_vars_helper, NULL);
18551 }
18552
18553 /* Generate a DIE to represent a declared function (either file-scope or
18554    block-local).  */
18555
18556 static void
18557 gen_subprogram_die (tree decl, dw_die_ref context_die)
18558 {
18559   char label_id[MAX_ARTIFICIAL_LABEL_BYTES];
18560   tree origin = decl_ultimate_origin (decl);
18561   dw_die_ref subr_die;
18562   tree fn_arg_types;
18563   tree outer_scope;
18564   dw_die_ref old_die = lookup_decl_die (decl);
18565   int declaration = (current_function_decl != decl
18566                      || class_or_namespace_scope_p (context_die));
18567
18568   premark_used_types ();
18569
18570   /* It is possible to have both DECL_ABSTRACT and DECLARATION be true if we
18571      started to generate the abstract instance of an inline, decided to output
18572      its containing class, and proceeded to emit the declaration of the inline
18573      from the member list for the class.  If so, DECLARATION takes priority;
18574      we'll get back to the abstract instance when done with the class.  */
18575
18576   /* The class-scope declaration DIE must be the primary DIE.  */
18577   if (origin && declaration && class_or_namespace_scope_p (context_die))
18578     {
18579       origin = NULL;
18580       gcc_assert (!old_die);
18581     }
18582
18583   /* Now that the C++ front end lazily declares artificial member fns, we
18584      might need to retrofit the declaration into its class.  */
18585   if (!declaration && !origin && !old_die
18586       && DECL_CONTEXT (decl) && TYPE_P (DECL_CONTEXT (decl))
18587       && !class_or_namespace_scope_p (context_die)
18588       && debug_info_level > DINFO_LEVEL_TERSE)
18589     old_die = force_decl_die (decl);
18590
18591   if (origin != NULL)
18592     {
18593       gcc_assert (!declaration || local_scope_p (context_die));
18594
18595       /* Fixup die_parent for the abstract instance of a nested
18596          inline function.  */
18597       if (old_die && old_die->die_parent == NULL)
18598         add_child_die (context_die, old_die);
18599
18600       subr_die = new_die (DW_TAG_subprogram, context_die, decl);
18601       add_abstract_origin_attribute (subr_die, origin);
18602     }
18603   else if (old_die)
18604     {
18605       expanded_location s = expand_location (DECL_SOURCE_LOCATION (decl));
18606       struct dwarf_file_data * file_index = lookup_filename (s.file);
18607
18608       if (!get_AT_flag (old_die, DW_AT_declaration)
18609           /* We can have a normal definition following an inline one in the
18610              case of redefinition of GNU C extern inlines.
18611              It seems reasonable to use AT_specification in this case.  */
18612           && !get_AT (old_die, DW_AT_inline))
18613         {
18614           /* Detect and ignore this case, where we are trying to output
18615              something we have already output.  */
18616           return;
18617         }
18618
18619       /* If the definition comes from the same place as the declaration,
18620          maybe use the old DIE.  We always want the DIE for this function
18621          that has the *_pc attributes to be under comp_unit_die so the
18622          debugger can find it.  We also need to do this for abstract
18623          instances of inlines, since the spec requires the out-of-line copy
18624          to have the same parent.  For local class methods, this doesn't
18625          apply; we just use the old DIE.  */
18626       if ((old_die->die_parent == comp_unit_die || context_die == NULL)
18627           && (DECL_ARTIFICIAL (decl)
18628               || (get_AT_file (old_die, DW_AT_decl_file) == file_index
18629                   && (get_AT_unsigned (old_die, DW_AT_decl_line)
18630                       == (unsigned) s.line))))
18631         {
18632           subr_die = old_die;
18633
18634           /* Clear out the declaration attribute and the formal parameters.
18635              Do not remove all children, because it is possible that this
18636              declaration die was forced using force_decl_die(). In such
18637              cases die that forced declaration die (e.g. TAG_imported_module)
18638              is one of the children that we do not want to remove.  */
18639           remove_AT (subr_die, DW_AT_declaration);
18640           remove_child_TAG (subr_die, DW_TAG_formal_parameter);
18641         }
18642       else
18643         {
18644           subr_die = new_die (DW_TAG_subprogram, context_die, decl);
18645           add_AT_specification (subr_die, old_die);
18646           if (get_AT_file (old_die, DW_AT_decl_file) != file_index)
18647             add_AT_file (subr_die, DW_AT_decl_file, file_index);
18648           if (get_AT_unsigned (old_die, DW_AT_decl_line) != (unsigned) s.line)
18649             add_AT_unsigned (subr_die, DW_AT_decl_line, s.line);
18650         }
18651     }
18652   else
18653     {
18654       subr_die = new_die (DW_TAG_subprogram, context_die, decl);
18655
18656       if (TREE_PUBLIC (decl))
18657         add_AT_flag (subr_die, DW_AT_external, 1);
18658
18659       add_name_and_src_coords_attributes (subr_die, decl);
18660       if (debug_info_level > DINFO_LEVEL_TERSE)
18661         {
18662           add_prototyped_attribute (subr_die, TREE_TYPE (decl));
18663           add_type_attribute (subr_die, TREE_TYPE (TREE_TYPE (decl)),
18664                               0, 0, context_die);
18665         }
18666
18667       add_pure_or_virtual_attribute (subr_die, decl);
18668       if (DECL_ARTIFICIAL (decl))
18669         add_AT_flag (subr_die, DW_AT_artificial, 1);
18670
18671       add_accessibility_attribute (subr_die, decl);
18672     }
18673
18674   if (declaration)
18675     {
18676       if (!old_die || !get_AT (old_die, DW_AT_inline))
18677         {
18678           add_AT_flag (subr_die, DW_AT_declaration, 1);
18679
18680           /* If this is an explicit function declaration then generate
18681              a DW_AT_explicit attribute.  */
18682           if (lang_hooks.decls.function_decl_explicit_p (decl)
18683               && (dwarf_version >= 3 || !dwarf_strict))
18684             add_AT_flag (subr_die, DW_AT_explicit, 1);
18685
18686           /* The first time we see a member function, it is in the context of
18687              the class to which it belongs.  We make sure of this by emitting
18688              the class first.  The next time is the definition, which is
18689              handled above.  The two may come from the same source text.
18690
18691              Note that force_decl_die() forces function declaration die. It is
18692              later reused to represent definition.  */
18693           equate_decl_number_to_die (decl, subr_die);
18694         }
18695     }
18696   else if (DECL_ABSTRACT (decl))
18697     {
18698       if (DECL_DECLARED_INLINE_P (decl))
18699         {
18700           if (cgraph_function_possibly_inlined_p (decl))
18701             add_AT_unsigned (subr_die, DW_AT_inline, DW_INL_declared_inlined);
18702           else
18703             add_AT_unsigned (subr_die, DW_AT_inline, DW_INL_declared_not_inlined);
18704         }
18705       else
18706         {
18707           if (cgraph_function_possibly_inlined_p (decl))
18708             add_AT_unsigned (subr_die, DW_AT_inline, DW_INL_inlined);
18709           else
18710             add_AT_unsigned (subr_die, DW_AT_inline, DW_INL_not_inlined);
18711         }
18712
18713       if (DECL_DECLARED_INLINE_P (decl)
18714           && lookup_attribute ("artificial", DECL_ATTRIBUTES (decl)))
18715         add_AT_flag (subr_die, DW_AT_artificial, 1);
18716
18717       equate_decl_number_to_die (decl, subr_die);
18718     }
18719   else if (!DECL_EXTERNAL (decl))
18720     {
18721       HOST_WIDE_INT cfa_fb_offset;
18722
18723       if (!old_die || !get_AT (old_die, DW_AT_inline))
18724         equate_decl_number_to_die (decl, subr_die);
18725
18726       if (!flag_reorder_blocks_and_partition)
18727         {
18728           ASM_GENERATE_INTERNAL_LABEL (label_id, FUNC_BEGIN_LABEL,
18729                                        current_function_funcdef_no);
18730           add_AT_lbl_id (subr_die, DW_AT_low_pc, label_id);
18731           ASM_GENERATE_INTERNAL_LABEL (label_id, FUNC_END_LABEL,
18732                                        current_function_funcdef_no);
18733           add_AT_lbl_id (subr_die, DW_AT_high_pc, label_id);
18734
18735 #if VMS_DEBUGGING_INFO
18736       /* HP OpenVMS Industry Standard 64: DWARF Extensions
18737          Section 2.3 Prologue and Epilogue Attributes:
18738          When a breakpoint is set on entry to a function, it is generally
18739          desirable for execution to be suspended, not on the very first
18740          instruction of the function, but rather at a point after the
18741          function's frame has been set up, after any language defined local
18742          declaration processing has been completed, and before execution of
18743          the first statement of the function begins. Debuggers generally
18744          cannot properly determine where this point is.  Similarly for a
18745          breakpoint set on exit from a function. The prologue and epilogue
18746          attributes allow a compiler to communicate the location(s) to use.  */
18747
18748       {
18749         dw_fde_ref fde = &fde_table[current_funcdef_fde];
18750
18751         if (fde->dw_fde_vms_end_prologue)
18752           add_AT_vms_delta (subr_die, DW_AT_HP_prologue,
18753             fde->dw_fde_begin, fde->dw_fde_vms_end_prologue);
18754
18755         if (fde->dw_fde_vms_begin_epilogue)
18756           add_AT_vms_delta (subr_die, DW_AT_HP_epilogue,
18757             fde->dw_fde_begin, fde->dw_fde_vms_begin_epilogue);
18758       }
18759 #endif
18760
18761           add_pubname (decl, subr_die);
18762           add_arange (decl, subr_die);
18763         }
18764       else
18765         {  /* Do nothing for now; maybe need to duplicate die, one for
18766               hot section and one for cold section, then use the hot/cold
18767               section begin/end labels to generate the aranges...  */
18768           /*
18769             add_AT_lbl_id (subr_die, DW_AT_low_pc, hot_section_label);
18770             add_AT_lbl_id (subr_die, DW_AT_high_pc, hot_section_end_label);
18771             add_AT_lbl_id (subr_die, DW_AT_lo_user, unlikely_section_label);
18772             add_AT_lbl_id (subr_die, DW_AT_hi_user, cold_section_end_label);
18773
18774             add_pubname (decl, subr_die);
18775             add_arange (decl, subr_die);
18776             add_arange (decl, subr_die);
18777            */
18778         }
18779
18780 #ifdef MIPS_DEBUGGING_INFO
18781       /* Add a reference to the FDE for this routine.  */
18782       add_AT_fde_ref (subr_die, DW_AT_MIPS_fde, current_funcdef_fde);
18783 #endif
18784
18785       cfa_fb_offset = CFA_FRAME_BASE_OFFSET (decl);
18786
18787       /* We define the "frame base" as the function's CFA.  This is more
18788          convenient for several reasons: (1) It's stable across the prologue
18789          and epilogue, which makes it better than just a frame pointer,
18790          (2) With dwarf3, there exists a one-byte encoding that allows us
18791          to reference the .debug_frame data by proxy, but failing that,
18792          (3) We can at least reuse the code inspection and interpretation
18793          code that determines the CFA position at various points in the
18794          function.  */
18795       if (dwarf_version >= 3)
18796         {
18797           dw_loc_descr_ref op = new_loc_descr (DW_OP_call_frame_cfa, 0, 0);
18798           add_AT_loc (subr_die, DW_AT_frame_base, op);
18799         }
18800       else
18801         {
18802           dw_loc_list_ref list = convert_cfa_to_fb_loc_list (cfa_fb_offset);
18803           if (list->dw_loc_next)
18804             add_AT_loc_list (subr_die, DW_AT_frame_base, list);
18805           else
18806             add_AT_loc (subr_die, DW_AT_frame_base, list->expr);
18807         }
18808
18809       /* Compute a displacement from the "steady-state frame pointer" to
18810          the CFA.  The former is what all stack slots and argument slots
18811          will reference in the rtl; the later is what we've told the
18812          debugger about.  We'll need to adjust all frame_base references
18813          by this displacement.  */
18814       compute_frame_pointer_to_fb_displacement (cfa_fb_offset);
18815
18816       if (cfun->static_chain_decl)
18817         add_AT_location_description (subr_die, DW_AT_static_link,
18818                  loc_list_from_tree (cfun->static_chain_decl, 2));
18819     }
18820
18821   /* Generate child dies for template paramaters.  */
18822   if (debug_info_level > DINFO_LEVEL_TERSE)
18823     gen_generic_params_dies (decl);
18824
18825   /* Now output descriptions of the arguments for this function. This gets
18826      (unnecessarily?) complex because of the fact that the DECL_ARGUMENT list
18827      for a FUNCTION_DECL doesn't indicate cases where there was a trailing
18828      `...' at the end of the formal parameter list.  In order to find out if
18829      there was a trailing ellipsis or not, we must instead look at the type
18830      associated with the FUNCTION_DECL.  This will be a node of type
18831      FUNCTION_TYPE. If the chain of type nodes hanging off of this
18832      FUNCTION_TYPE node ends with a void_type_node then there should *not* be
18833      an ellipsis at the end.  */
18834
18835   /* In the case where we are describing a mere function declaration, all we
18836      need to do here (and all we *can* do here) is to describe the *types* of
18837      its formal parameters.  */
18838   if (debug_info_level <= DINFO_LEVEL_TERSE)
18839     ;
18840   else if (declaration)
18841     gen_formal_types_die (decl, subr_die);
18842   else
18843     {
18844       /* Generate DIEs to represent all known formal parameters.  */
18845       tree parm = DECL_ARGUMENTS (decl);
18846       tree generic_decl = lang_hooks.decls.get_generic_function_decl (decl);
18847       tree generic_decl_parm = generic_decl
18848                                 ? DECL_ARGUMENTS (generic_decl)
18849                                 : NULL;
18850
18851       /* Now we want to walk the list of parameters of the function and
18852          emit their relevant DIEs.
18853
18854          We consider the case of DECL being an instance of a generic function
18855          as well as it being a normal function.
18856
18857          If DECL is an instance of a generic function we walk the
18858          parameters of the generic function declaration _and_ the parameters of
18859          DECL itself. This is useful because we want to emit specific DIEs for
18860          function parameter packs and those are declared as part of the
18861          generic function declaration. In that particular case,
18862          the parameter pack yields a DW_TAG_GNU_formal_parameter_pack DIE.
18863          That DIE has children DIEs representing the set of arguments
18864          of the pack. Note that the set of pack arguments can be empty.
18865          In that case, the DW_TAG_GNU_formal_parameter_pack DIE will not have any
18866          children DIE.
18867
18868          Otherwise, we just consider the parameters of DECL.  */
18869       while (generic_decl_parm || parm)
18870         {
18871           if (generic_decl_parm
18872               && lang_hooks.function_parameter_pack_p (generic_decl_parm))
18873             gen_formal_parameter_pack_die (generic_decl_parm,
18874                                            parm, subr_die,
18875                                            &parm);
18876           else if (parm)
18877             {
18878               gen_decl_die (parm, NULL, subr_die);
18879               parm = DECL_CHAIN (parm);
18880             }
18881
18882           if (generic_decl_parm)
18883             generic_decl_parm = DECL_CHAIN (generic_decl_parm);
18884         }
18885
18886       /* Decide whether we need an unspecified_parameters DIE at the end.
18887          There are 2 more cases to do this for: 1) the ansi ... declaration -
18888          this is detectable when the end of the arg list is not a
18889          void_type_node 2) an unprototyped function declaration (not a
18890          definition).  This just means that we have no info about the
18891          parameters at all.  */
18892       fn_arg_types = TYPE_ARG_TYPES (TREE_TYPE (decl));
18893       if (fn_arg_types != NULL)
18894         {
18895           /* This is the prototyped case, check for....  */
18896           if (TREE_VALUE (tree_last (fn_arg_types)) != void_type_node)
18897             gen_unspecified_parameters_die (decl, subr_die);
18898         }
18899       else if (DECL_INITIAL (decl) == NULL_TREE)
18900         gen_unspecified_parameters_die (decl, subr_die);
18901     }
18902
18903   /* Output Dwarf info for all of the stuff within the body of the function
18904      (if it has one - it may be just a declaration).  */
18905   outer_scope = DECL_INITIAL (decl);
18906
18907   /* OUTER_SCOPE is a pointer to the outermost BLOCK node created to represent
18908      a function.  This BLOCK actually represents the outermost binding contour
18909      for the function, i.e. the contour in which the function's formal
18910      parameters and labels get declared. Curiously, it appears that the front
18911      end doesn't actually put the PARM_DECL nodes for the current function onto
18912      the BLOCK_VARS list for this outer scope, but are strung off of the
18913      DECL_ARGUMENTS list for the function instead.
18914
18915      The BLOCK_VARS list for the `outer_scope' does provide us with a list of
18916      the LABEL_DECL nodes for the function however, and we output DWARF info
18917      for those in decls_for_scope.  Just within the `outer_scope' there will be
18918      a BLOCK node representing the function's outermost pair of curly braces,
18919      and any blocks used for the base and member initializers of a C++
18920      constructor function.  */
18921   if (! declaration && TREE_CODE (outer_scope) != ERROR_MARK)
18922     {
18923       /* Emit a DW_TAG_variable DIE for a named return value.  */
18924       if (DECL_NAME (DECL_RESULT (decl)))
18925         gen_decl_die (DECL_RESULT (decl), NULL, subr_die);
18926
18927       current_function_has_inlines = 0;
18928       decls_for_scope (outer_scope, subr_die, 0);
18929
18930 #if 0 && defined (MIPS_DEBUGGING_INFO)
18931       if (current_function_has_inlines)
18932         {
18933           add_AT_flag (subr_die, DW_AT_MIPS_has_inlines, 1);
18934           if (! comp_unit_has_inlines)
18935             {
18936               add_AT_flag (comp_unit_die, DW_AT_MIPS_has_inlines, 1);
18937               comp_unit_has_inlines = 1;
18938             }
18939         }
18940 #endif
18941     }
18942   /* Add the calling convention attribute if requested.  */
18943   add_calling_convention_attribute (subr_die, decl);
18944
18945 }
18946
18947 /* Returns a hash value for X (which really is a die_struct).  */
18948
18949 static hashval_t
18950 common_block_die_table_hash (const void *x)
18951 {
18952   const_dw_die_ref d = (const_dw_die_ref) x;
18953   return (hashval_t) d->decl_id ^ htab_hash_pointer (d->die_parent);
18954 }
18955
18956 /* Return nonzero if decl_id and die_parent of die_struct X is the same
18957    as decl_id and die_parent of die_struct Y.  */
18958
18959 static int
18960 common_block_die_table_eq (const void *x, const void *y)
18961 {
18962   const_dw_die_ref d = (const_dw_die_ref) x;
18963   const_dw_die_ref e = (const_dw_die_ref) y;
18964   return d->decl_id == e->decl_id && d->die_parent == e->die_parent;
18965 }
18966
18967 /* Generate a DIE to represent a declared data object.
18968    Either DECL or ORIGIN must be non-null.  */
18969
18970 static void
18971 gen_variable_die (tree decl, tree origin, dw_die_ref context_die)
18972 {
18973   HOST_WIDE_INT off;
18974   tree com_decl;
18975   tree decl_or_origin = decl ? decl : origin;
18976   tree ultimate_origin;
18977   dw_die_ref var_die;
18978   dw_die_ref old_die = decl ? lookup_decl_die (decl) : NULL;
18979   dw_die_ref origin_die;
18980   bool declaration = (DECL_EXTERNAL (decl_or_origin)
18981                       || class_or_namespace_scope_p (context_die));
18982   bool specialization_p = false;
18983
18984   ultimate_origin = decl_ultimate_origin (decl_or_origin);
18985   if (decl || ultimate_origin)
18986     origin = ultimate_origin;
18987   com_decl = fortran_common (decl_or_origin, &off);
18988
18989   /* Symbol in common gets emitted as a child of the common block, in the form
18990      of a data member.  */
18991   if (com_decl)
18992     {
18993       dw_die_ref com_die;
18994       dw_loc_list_ref loc;
18995       die_node com_die_arg;
18996
18997       var_die = lookup_decl_die (decl_or_origin);
18998       if (var_die)
18999         {
19000           if (get_AT (var_die, DW_AT_location) == NULL)
19001             {
19002               loc = loc_list_from_tree (com_decl, off ? 1 : 2);
19003               if (loc)
19004                 {
19005                   if (off)
19006                     {
19007                       /* Optimize the common case.  */
19008                       if (single_element_loc_list_p (loc)
19009                           && loc->expr->dw_loc_opc == DW_OP_addr
19010                           && loc->expr->dw_loc_next == NULL
19011                           && GET_CODE (loc->expr->dw_loc_oprnd1.v.val_addr)
19012                              == SYMBOL_REF)
19013                         loc->expr->dw_loc_oprnd1.v.val_addr
19014                           = plus_constant (loc->expr->dw_loc_oprnd1.v.val_addr, off);
19015                         else
19016                           loc_list_plus_const (loc, off);
19017                     }
19018                   add_AT_location_description (var_die, DW_AT_location, loc);
19019                   remove_AT (var_die, DW_AT_declaration);
19020                 }
19021             }
19022           return;
19023         }
19024
19025       if (common_block_die_table == NULL)
19026         common_block_die_table
19027           = htab_create_ggc (10, common_block_die_table_hash,
19028                              common_block_die_table_eq, NULL);
19029
19030       com_die_arg.decl_id = DECL_UID (com_decl);
19031       com_die_arg.die_parent = context_die;
19032       com_die = (dw_die_ref) htab_find (common_block_die_table, &com_die_arg);
19033       loc = loc_list_from_tree (com_decl, 2);
19034       if (com_die == NULL)
19035         {
19036           const char *cnam
19037             = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (com_decl));
19038           void **slot;
19039
19040           com_die = new_die (DW_TAG_common_block, context_die, decl);
19041           add_name_and_src_coords_attributes (com_die, com_decl);
19042           if (loc)
19043             {
19044               add_AT_location_description (com_die, DW_AT_location, loc);
19045               /* Avoid sharing the same loc descriptor between
19046                  DW_TAG_common_block and DW_TAG_variable.  */
19047               loc = loc_list_from_tree (com_decl, 2);
19048             }
19049           else if (DECL_EXTERNAL (decl))
19050             add_AT_flag (com_die, DW_AT_declaration, 1);
19051           add_pubname_string (cnam, com_die); /* ??? needed? */
19052           com_die->decl_id = DECL_UID (com_decl);
19053           slot = htab_find_slot (common_block_die_table, com_die, INSERT);
19054           *slot = (void *) com_die;
19055         }
19056       else if (get_AT (com_die, DW_AT_location) == NULL && loc)
19057         {
19058           add_AT_location_description (com_die, DW_AT_location, loc);
19059           loc = loc_list_from_tree (com_decl, 2);
19060           remove_AT (com_die, DW_AT_declaration);
19061         }
19062       var_die = new_die (DW_TAG_variable, com_die, decl);
19063       add_name_and_src_coords_attributes (var_die, decl);
19064       add_type_attribute (var_die, TREE_TYPE (decl), TREE_READONLY (decl),
19065                           TREE_THIS_VOLATILE (decl), context_die);
19066       add_AT_flag (var_die, DW_AT_external, 1);
19067       if (loc)
19068         {
19069           if (off)
19070             {
19071               /* Optimize the common case.  */
19072               if (single_element_loc_list_p (loc)
19073                   && loc->expr->dw_loc_opc == DW_OP_addr
19074                   && loc->expr->dw_loc_next == NULL
19075                   && GET_CODE (loc->expr->dw_loc_oprnd1.v.val_addr) == SYMBOL_REF)
19076                 loc->expr->dw_loc_oprnd1.v.val_addr
19077                   = plus_constant (loc->expr->dw_loc_oprnd1.v.val_addr, off);
19078               else
19079                 loc_list_plus_const (loc, off);
19080             }
19081           add_AT_location_description (var_die, DW_AT_location, loc);
19082         }
19083       else if (DECL_EXTERNAL (decl))
19084         add_AT_flag (var_die, DW_AT_declaration, 1);
19085       equate_decl_number_to_die (decl, var_die);
19086       return;
19087     }
19088
19089   /* If the compiler emitted a definition for the DECL declaration
19090      and if we already emitted a DIE for it, don't emit a second
19091      DIE for it again. Allow re-declarations of DECLs that are
19092      inside functions, though.  */
19093   if (old_die && declaration && !local_scope_p (context_die))
19094     return;
19095
19096   /* For static data members, the declaration in the class is supposed
19097      to have DW_TAG_member tag; the specification should still be
19098      DW_TAG_variable referencing the DW_TAG_member DIE.  */
19099   if (declaration && class_scope_p (context_die))
19100     var_die = new_die (DW_TAG_member, context_die, decl);
19101   else
19102     var_die = new_die (DW_TAG_variable, context_die, decl);
19103
19104   origin_die = NULL;
19105   if (origin != NULL)
19106     origin_die = add_abstract_origin_attribute (var_die, origin);
19107
19108   /* Loop unrolling can create multiple blocks that refer to the same
19109      static variable, so we must test for the DW_AT_declaration flag.
19110
19111      ??? Loop unrolling/reorder_blocks should perhaps be rewritten to
19112      copy decls and set the DECL_ABSTRACT flag on them instead of
19113      sharing them.
19114
19115      ??? Duplicated blocks have been rewritten to use .debug_ranges.
19116
19117      ??? The declare_in_namespace support causes us to get two DIEs for one
19118      variable, both of which are declarations.  We want to avoid considering
19119      one to be a specification, so we must test that this DIE is not a
19120      declaration.  */
19121   else if (old_die && TREE_STATIC (decl) && ! declaration
19122            && get_AT_flag (old_die, DW_AT_declaration) == 1)
19123     {
19124       /* This is a definition of a C++ class level static.  */
19125       add_AT_specification (var_die, old_die);
19126       specialization_p = true;
19127       if (DECL_NAME (decl))
19128         {
19129           expanded_location s = expand_location (DECL_SOURCE_LOCATION (decl));
19130           struct dwarf_file_data * file_index = lookup_filename (s.file);
19131
19132           if (get_AT_file (old_die, DW_AT_decl_file) != file_index)
19133             add_AT_file (var_die, DW_AT_decl_file, file_index);
19134
19135           if (get_AT_unsigned (old_die, DW_AT_decl_line) != (unsigned) s.line)
19136             add_AT_unsigned (var_die, DW_AT_decl_line, s.line);
19137
19138           if (old_die->die_tag == DW_TAG_member)
19139             add_linkage_name (var_die, decl);
19140         }
19141     }
19142   else
19143     add_name_and_src_coords_attributes (var_die, decl);
19144
19145   if ((origin == NULL && !specialization_p)
19146       || (origin != NULL
19147           && !DECL_ABSTRACT (decl_or_origin)
19148           && variably_modified_type_p (TREE_TYPE (decl_or_origin),
19149                                        decl_function_context
19150                                                         (decl_or_origin))))
19151     {
19152       tree type = TREE_TYPE (decl_or_origin);
19153
19154       if (decl_by_reference_p (decl_or_origin))
19155         add_type_attribute (var_die, TREE_TYPE (type), 0, 0, context_die);
19156       else
19157         add_type_attribute (var_die, type, TREE_READONLY (decl_or_origin),
19158                             TREE_THIS_VOLATILE (decl_or_origin), context_die);
19159     }
19160
19161   if (origin == NULL && !specialization_p)
19162     {
19163       if (TREE_PUBLIC (decl))
19164         add_AT_flag (var_die, DW_AT_external, 1);
19165
19166       if (DECL_ARTIFICIAL (decl))
19167         add_AT_flag (var_die, DW_AT_artificial, 1);
19168
19169       add_accessibility_attribute (var_die, decl);
19170     }
19171
19172   if (declaration)
19173     add_AT_flag (var_die, DW_AT_declaration, 1);
19174
19175   if (decl && (DECL_ABSTRACT (decl) || declaration))
19176     equate_decl_number_to_die (decl, var_die);
19177
19178   if (! declaration
19179       && (! DECL_ABSTRACT (decl_or_origin)
19180           /* Local static vars are shared between all clones/inlines,
19181              so emit DW_AT_location on the abstract DIE if DECL_RTL is
19182              already set.  */
19183           || (TREE_CODE (decl_or_origin) == VAR_DECL
19184               && TREE_STATIC (decl_or_origin)
19185               && DECL_RTL_SET_P (decl_or_origin)))
19186       /* When abstract origin already has DW_AT_location attribute, no need
19187          to add it again.  */
19188       && (origin_die == NULL || get_AT (origin_die, DW_AT_location) == NULL))
19189     {
19190       if (TREE_CODE (decl_or_origin) == VAR_DECL && TREE_STATIC (decl_or_origin)
19191           && !TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (decl_or_origin)))
19192         defer_location (decl_or_origin, var_die);
19193       else
19194         add_location_or_const_value_attribute (var_die,
19195                                                decl_or_origin,
19196                                                DW_AT_location);
19197       add_pubname (decl_or_origin, var_die);
19198     }
19199   else
19200     tree_add_const_value_attribute_for_decl (var_die, decl_or_origin);
19201 }
19202
19203 /* Generate a DIE to represent a named constant.  */
19204
19205 static void
19206 gen_const_die (tree decl, dw_die_ref context_die)
19207 {
19208   dw_die_ref const_die;
19209   tree type = TREE_TYPE (decl);
19210
19211   const_die = new_die (DW_TAG_constant, context_die, decl);
19212   add_name_and_src_coords_attributes (const_die, decl);
19213   add_type_attribute (const_die, type, 1, 0, context_die);
19214   if (TREE_PUBLIC (decl))
19215     add_AT_flag (const_die, DW_AT_external, 1);
19216   if (DECL_ARTIFICIAL (decl))
19217     add_AT_flag (const_die, DW_AT_artificial, 1);
19218   tree_add_const_value_attribute_for_decl (const_die, decl);
19219 }
19220
19221 /* Generate a DIE to represent a label identifier.  */
19222
19223 static void
19224 gen_label_die (tree decl, dw_die_ref context_die)
19225 {
19226   tree origin = decl_ultimate_origin (decl);
19227   dw_die_ref lbl_die = new_die (DW_TAG_label, context_die, decl);
19228   rtx insn;
19229   char label[MAX_ARTIFICIAL_LABEL_BYTES];
19230
19231   if (origin != NULL)
19232     add_abstract_origin_attribute (lbl_die, origin);
19233   else
19234     add_name_and_src_coords_attributes (lbl_die, decl);
19235
19236   if (DECL_ABSTRACT (decl))
19237     equate_decl_number_to_die (decl, lbl_die);
19238   else
19239     {
19240       insn = DECL_RTL_IF_SET (decl);
19241
19242       /* Deleted labels are programmer specified labels which have been
19243          eliminated because of various optimizations.  We still emit them
19244          here so that it is possible to put breakpoints on them.  */
19245       if (insn
19246           && (LABEL_P (insn)
19247               || ((NOTE_P (insn)
19248                    && NOTE_KIND (insn) == NOTE_INSN_DELETED_LABEL))))
19249         {
19250           /* When optimization is enabled (via -O) some parts of the compiler
19251              (e.g. jump.c and cse.c) may try to delete CODE_LABEL insns which
19252              represent source-level labels which were explicitly declared by
19253              the user.  This really shouldn't be happening though, so catch
19254              it if it ever does happen.  */
19255           gcc_assert (!INSN_DELETED_P (insn));
19256
19257           ASM_GENERATE_INTERNAL_LABEL (label, "L", CODE_LABEL_NUMBER (insn));
19258           add_AT_lbl_id (lbl_die, DW_AT_low_pc, label);
19259         }
19260     }
19261 }
19262
19263 /* A helper function for gen_inlined_subroutine_die.  Add source coordinate
19264    attributes to the DIE for a block STMT, to describe where the inlined
19265    function was called from.  This is similar to add_src_coords_attributes.  */
19266
19267 static inline void
19268 add_call_src_coords_attributes (tree stmt, dw_die_ref die)
19269 {
19270   expanded_location s = expand_location (BLOCK_SOURCE_LOCATION (stmt));
19271
19272   if (dwarf_version >= 3 || !dwarf_strict)
19273     {
19274       add_AT_file (die, DW_AT_call_file, lookup_filename (s.file));
19275       add_AT_unsigned (die, DW_AT_call_line, s.line);
19276     }
19277 }
19278
19279
19280 /* A helper function for gen_lexical_block_die and gen_inlined_subroutine_die.
19281    Add low_pc and high_pc attributes to the DIE for a block STMT.  */
19282
19283 static inline void
19284 add_high_low_attributes (tree stmt, dw_die_ref die)
19285 {
19286   char label[MAX_ARTIFICIAL_LABEL_BYTES];
19287
19288   if (BLOCK_FRAGMENT_CHAIN (stmt)
19289       && (dwarf_version >= 3 || !dwarf_strict))
19290     {
19291       tree chain;
19292
19293       if (inlined_function_outer_scope_p (stmt))
19294         {
19295           ASM_GENERATE_INTERNAL_LABEL (label, BLOCK_BEGIN_LABEL,
19296                                        BLOCK_NUMBER (stmt));
19297           add_AT_lbl_id (die, DW_AT_entry_pc, label);
19298         }
19299
19300       add_AT_range_list (die, DW_AT_ranges, add_ranges (stmt));
19301
19302       chain = BLOCK_FRAGMENT_CHAIN (stmt);
19303       do
19304         {
19305           add_ranges (chain);
19306           chain = BLOCK_FRAGMENT_CHAIN (chain);
19307         }
19308       while (chain);
19309       add_ranges (NULL);
19310     }
19311   else
19312     {
19313       ASM_GENERATE_INTERNAL_LABEL (label, BLOCK_BEGIN_LABEL,
19314                                    BLOCK_NUMBER (stmt));
19315       add_AT_lbl_id (die, DW_AT_low_pc, label);
19316       ASM_GENERATE_INTERNAL_LABEL (label, BLOCK_END_LABEL,
19317                                    BLOCK_NUMBER (stmt));
19318       add_AT_lbl_id (die, DW_AT_high_pc, label);
19319     }
19320 }
19321
19322 /* Generate a DIE for a lexical block.  */
19323
19324 static void
19325 gen_lexical_block_die (tree stmt, dw_die_ref context_die, int depth)
19326 {
19327   dw_die_ref stmt_die = new_die (DW_TAG_lexical_block, context_die, stmt);
19328
19329   if (! BLOCK_ABSTRACT (stmt) && TREE_ASM_WRITTEN (stmt))
19330     add_high_low_attributes (stmt, stmt_die);
19331
19332   decls_for_scope (stmt, stmt_die, depth);
19333 }
19334
19335 /* Generate a DIE for an inlined subprogram.  */
19336
19337 static void
19338 gen_inlined_subroutine_die (tree stmt, dw_die_ref context_die, int depth)
19339 {
19340   tree decl;
19341
19342   /* The instance of function that is effectively being inlined shall not
19343      be abstract.  */
19344   gcc_assert (! BLOCK_ABSTRACT (stmt));
19345
19346   decl = block_ultimate_origin (stmt);
19347
19348   /* Emit info for the abstract instance first, if we haven't yet.  We
19349      must emit this even if the block is abstract, otherwise when we
19350      emit the block below (or elsewhere), we may end up trying to emit
19351      a die whose origin die hasn't been emitted, and crashing.  */
19352   dwarf2out_abstract_function (decl);
19353
19354   if (! BLOCK_ABSTRACT (stmt))
19355     {
19356       dw_die_ref subr_die
19357         = new_die (DW_TAG_inlined_subroutine, context_die, stmt);
19358
19359       add_abstract_origin_attribute (subr_die, decl);
19360       if (TREE_ASM_WRITTEN (stmt))
19361         add_high_low_attributes (stmt, subr_die);
19362       add_call_src_coords_attributes (stmt, subr_die);
19363
19364       decls_for_scope (stmt, subr_die, depth);
19365       current_function_has_inlines = 1;
19366     }
19367 }
19368
19369 /* Generate a DIE for a field in a record, or structure.  */
19370
19371 static void
19372 gen_field_die (tree decl, dw_die_ref context_die)
19373 {
19374   dw_die_ref decl_die;
19375
19376   if (TREE_TYPE (decl) == error_mark_node)
19377     return;
19378
19379   decl_die = new_die (DW_TAG_member, context_die, decl);
19380   add_name_and_src_coords_attributes (decl_die, decl);
19381   add_type_attribute (decl_die, member_declared_type (decl),
19382                       TREE_READONLY (decl), TREE_THIS_VOLATILE (decl),
19383                       context_die);
19384
19385   if (DECL_BIT_FIELD_TYPE (decl))
19386     {
19387       add_byte_size_attribute (decl_die, decl);
19388       add_bit_size_attribute (decl_die, decl);
19389       add_bit_offset_attribute (decl_die, decl);
19390     }
19391
19392   if (TREE_CODE (DECL_FIELD_CONTEXT (decl)) != UNION_TYPE)
19393     add_data_member_location_attribute (decl_die, decl);
19394
19395   if (DECL_ARTIFICIAL (decl))
19396     add_AT_flag (decl_die, DW_AT_artificial, 1);
19397
19398   add_accessibility_attribute (decl_die, decl);
19399
19400   /* Equate decl number to die, so that we can look up this decl later on.  */
19401   equate_decl_number_to_die (decl, decl_die);
19402 }
19403
19404 #if 0
19405 /* Don't generate either pointer_type DIEs or reference_type DIEs here.
19406    Use modified_type_die instead.
19407    We keep this code here just in case these types of DIEs may be needed to
19408    represent certain things in other languages (e.g. Pascal) someday.  */
19409
19410 static void
19411 gen_pointer_type_die (tree type, dw_die_ref context_die)
19412 {
19413   dw_die_ref ptr_die
19414     = new_die (DW_TAG_pointer_type, scope_die_for (type, context_die), type);
19415
19416   equate_type_number_to_die (type, ptr_die);
19417   add_type_attribute (ptr_die, TREE_TYPE (type), 0, 0, context_die);
19418   add_AT_unsigned (mod_type_die, DW_AT_byte_size, PTR_SIZE);
19419 }
19420
19421 /* Don't generate either pointer_type DIEs or reference_type DIEs here.
19422    Use modified_type_die instead.
19423    We keep this code here just in case these types of DIEs may be needed to
19424    represent certain things in other languages (e.g. Pascal) someday.  */
19425
19426 static void
19427 gen_reference_type_die (tree type, dw_die_ref context_die)
19428 {
19429   dw_die_ref ref_die, scope_die = scope_die_for (type, context_die);
19430
19431   if (TYPE_REF_IS_RVALUE (type) && dwarf_version >= 4)
19432     ref_die = new_die (DW_TAG_rvalue_reference_type, scope_die, type);
19433   else
19434     ref_die = new_die (DW_TAG_reference_type, scope_die, type);
19435
19436   equate_type_number_to_die (type, ref_die);
19437   add_type_attribute (ref_die, TREE_TYPE (type), 0, 0, context_die);
19438   add_AT_unsigned (mod_type_die, DW_AT_byte_size, PTR_SIZE);
19439 }
19440 #endif
19441
19442 /* Generate a DIE for a pointer to a member type.  */
19443
19444 static void
19445 gen_ptr_to_mbr_type_die (tree type, dw_die_ref context_die)
19446 {
19447   dw_die_ref ptr_die
19448     = new_die (DW_TAG_ptr_to_member_type,
19449                scope_die_for (type, context_die), type);
19450
19451   equate_type_number_to_die (type, ptr_die);
19452   add_AT_die_ref (ptr_die, DW_AT_containing_type,
19453                   lookup_type_die (TYPE_OFFSET_BASETYPE (type)));
19454   add_type_attribute (ptr_die, TREE_TYPE (type), 0, 0, context_die);
19455 }
19456
19457 /* Generate the DIE for the compilation unit.  */
19458
19459 static dw_die_ref
19460 gen_compile_unit_die (const char *filename)
19461 {
19462   dw_die_ref die;
19463   char producer[250];
19464   const char *language_string = lang_hooks.name;
19465   int language;
19466
19467   die = new_die (DW_TAG_compile_unit, NULL, NULL);
19468
19469   if (filename)
19470     {
19471       add_name_attribute (die, filename);
19472       /* Don't add cwd for <built-in>.  */
19473       if (!IS_ABSOLUTE_PATH (filename) && filename[0] != '<')
19474         add_comp_dir_attribute (die);
19475     }
19476
19477   sprintf (producer, "%s %s", language_string, version_string);
19478
19479 #ifdef MIPS_DEBUGGING_INFO
19480   /* The MIPS/SGI compilers place the 'cc' command line options in the producer
19481      string.  The SGI debugger looks for -g, -g1, -g2, or -g3; if they do
19482      not appear in the producer string, the debugger reaches the conclusion
19483      that the object file is stripped and has no debugging information.
19484      To get the MIPS/SGI debugger to believe that there is debugging
19485      information in the object file, we add a -g to the producer string.  */
19486   if (debug_info_level > DINFO_LEVEL_TERSE)
19487     strcat (producer, " -g");
19488 #endif
19489
19490   add_AT_string (die, DW_AT_producer, producer);
19491
19492   language = DW_LANG_C89;
19493   if (strcmp (language_string, "GNU C++") == 0)
19494     language = DW_LANG_C_plus_plus;
19495   else if (strcmp (language_string, "GNU F77") == 0)
19496     language = DW_LANG_Fortran77;
19497   else if (strcmp (language_string, "GNU Pascal") == 0)
19498     language = DW_LANG_Pascal83;
19499   else if (dwarf_version >= 3 || !dwarf_strict)
19500     {
19501       if (strcmp (language_string, "GNU Ada") == 0)
19502         language = DW_LANG_Ada95;
19503       else if (strcmp (language_string, "GNU Fortran") == 0)
19504         language = DW_LANG_Fortran95;
19505       else if (strcmp (language_string, "GNU Java") == 0)
19506         language = DW_LANG_Java;
19507       else if (strcmp (language_string, "GNU Objective-C") == 0)
19508         language = DW_LANG_ObjC;
19509       else if (strcmp (language_string, "GNU Objective-C++") == 0)
19510         language = DW_LANG_ObjC_plus_plus;
19511     }
19512
19513   add_AT_unsigned (die, DW_AT_language, language);
19514
19515   switch (language)
19516     {
19517     case DW_LANG_Fortran77:
19518     case DW_LANG_Fortran90:
19519     case DW_LANG_Fortran95:
19520       /* Fortran has case insensitive identifiers and the front-end
19521          lowercases everything.  */
19522       add_AT_unsigned (die, DW_AT_identifier_case, DW_ID_down_case);
19523       break;
19524     default:
19525       /* The default DW_ID_case_sensitive doesn't need to be specified.  */
19526       break;
19527     }
19528   return die;
19529 }
19530
19531 /* Generate the DIE for a base class.  */
19532
19533 static void
19534 gen_inheritance_die (tree binfo, tree access, dw_die_ref context_die)
19535 {
19536   dw_die_ref die = new_die (DW_TAG_inheritance, context_die, binfo);
19537
19538   add_type_attribute (die, BINFO_TYPE (binfo), 0, 0, context_die);
19539   add_data_member_location_attribute (die, binfo);
19540
19541   if (BINFO_VIRTUAL_P (binfo))
19542     add_AT_unsigned (die, DW_AT_virtuality, DW_VIRTUALITY_virtual);
19543
19544   if (access == access_public_node)
19545     add_AT_unsigned (die, DW_AT_accessibility, DW_ACCESS_public);
19546   else if (access == access_protected_node)
19547     add_AT_unsigned (die, DW_AT_accessibility, DW_ACCESS_protected);
19548 }
19549
19550 /* Generate a DIE for a class member.  */
19551
19552 static void
19553 gen_member_die (tree type, dw_die_ref context_die)
19554 {
19555   tree member;
19556   tree binfo = TYPE_BINFO (type);
19557   dw_die_ref child;
19558
19559   /* If this is not an incomplete type, output descriptions of each of its
19560      members. Note that as we output the DIEs necessary to represent the
19561      members of this record or union type, we will also be trying to output
19562      DIEs to represent the *types* of those members. However the `type'
19563      function (above) will specifically avoid generating type DIEs for member
19564      types *within* the list of member DIEs for this (containing) type except
19565      for those types (of members) which are explicitly marked as also being
19566      members of this (containing) type themselves.  The g++ front- end can
19567      force any given type to be treated as a member of some other (containing)
19568      type by setting the TYPE_CONTEXT of the given (member) type to point to
19569      the TREE node representing the appropriate (containing) type.  */
19570
19571   /* First output info about the base classes.  */
19572   if (binfo)
19573     {
19574       VEC(tree,gc) *accesses = BINFO_BASE_ACCESSES (binfo);
19575       int i;
19576       tree base;
19577
19578       for (i = 0; BINFO_BASE_ITERATE (binfo, i, base); i++)
19579         gen_inheritance_die (base,
19580                              (accesses ? VEC_index (tree, accesses, i)
19581                               : access_public_node), context_die);
19582     }
19583
19584   /* Now output info about the data members and type members.  */
19585   for (member = TYPE_FIELDS (type); member; member = DECL_CHAIN (member))
19586     {
19587       /* If we thought we were generating minimal debug info for TYPE
19588          and then changed our minds, some of the member declarations
19589          may have already been defined.  Don't define them again, but
19590          do put them in the right order.  */
19591
19592       child = lookup_decl_die (member);
19593       if (child)
19594         splice_child_die (context_die, child);
19595       else
19596         gen_decl_die (member, NULL, context_die);
19597     }
19598
19599   /* Now output info about the function members (if any).  */
19600   for (member = TYPE_METHODS (type); member; member = DECL_CHAIN (member))
19601     {
19602       /* Don't include clones in the member list.  */
19603       if (DECL_ABSTRACT_ORIGIN (member))
19604         continue;
19605
19606       child = lookup_decl_die (member);
19607       if (child)
19608         splice_child_die (context_die, child);
19609       else
19610         gen_decl_die (member, NULL, context_die);
19611     }
19612 }
19613
19614 /* Generate a DIE for a structure or union type.  If TYPE_DECL_SUPPRESS_DEBUG
19615    is set, we pretend that the type was never defined, so we only get the
19616    member DIEs needed by later specification DIEs.  */
19617
19618 static void
19619 gen_struct_or_union_type_die (tree type, dw_die_ref context_die,
19620                                 enum debug_info_usage usage)
19621 {
19622   dw_die_ref type_die = lookup_type_die (type);
19623   dw_die_ref scope_die = 0;
19624   int nested = 0;
19625   int complete = (TYPE_SIZE (type)
19626                   && (! TYPE_STUB_DECL (type)
19627                       || ! TYPE_DECL_SUPPRESS_DEBUG (TYPE_STUB_DECL (type))));
19628   int ns_decl = (context_die && context_die->die_tag == DW_TAG_namespace);
19629   complete = complete && should_emit_struct_debug (type, usage);
19630
19631   if (type_die && ! complete)
19632     return;
19633
19634   if (TYPE_CONTEXT (type) != NULL_TREE
19635       && (AGGREGATE_TYPE_P (TYPE_CONTEXT (type))
19636           || TREE_CODE (TYPE_CONTEXT (type)) == NAMESPACE_DECL))
19637     nested = 1;
19638
19639   scope_die = scope_die_for (type, context_die);
19640
19641   if (! type_die || (nested && scope_die == comp_unit_die))
19642     /* First occurrence of type or toplevel definition of nested class.  */
19643     {
19644       dw_die_ref old_die = type_die;
19645
19646       type_die = new_die (TREE_CODE (type) == RECORD_TYPE
19647                           ? record_type_tag (type) : DW_TAG_union_type,
19648                           scope_die, type);
19649       equate_type_number_to_die (type, type_die);
19650       if (old_die)
19651         add_AT_specification (type_die, old_die);
19652       else
19653         add_name_attribute (type_die, type_tag (type));
19654     }
19655   else
19656     remove_AT (type_die, DW_AT_declaration);
19657
19658   /* Generate child dies for template paramaters.  */
19659   if (debug_info_level > DINFO_LEVEL_TERSE
19660       && COMPLETE_TYPE_P (type))
19661     gen_generic_params_dies (type);
19662
19663   /* If this type has been completed, then give it a byte_size attribute and
19664      then give a list of members.  */
19665   if (complete && !ns_decl)
19666     {
19667       /* Prevent infinite recursion in cases where the type of some member of
19668          this type is expressed in terms of this type itself.  */
19669       TREE_ASM_WRITTEN (type) = 1;
19670       add_byte_size_attribute (type_die, type);
19671       if (TYPE_STUB_DECL (type) != NULL_TREE)
19672         {
19673           add_src_coords_attributes (type_die, TYPE_STUB_DECL (type));
19674           add_accessibility_attribute (type_die, TYPE_STUB_DECL (type));
19675         }
19676
19677       /* If the first reference to this type was as the return type of an
19678          inline function, then it may not have a parent.  Fix this now.  */
19679       if (type_die->die_parent == NULL)
19680         add_child_die (scope_die, type_die);
19681
19682       push_decl_scope (type);
19683       gen_member_die (type, type_die);
19684       pop_decl_scope ();
19685
19686       /* GNU extension: Record what type our vtable lives in.  */
19687       if (TYPE_VFIELD (type))
19688         {
19689           tree vtype = DECL_FCONTEXT (TYPE_VFIELD (type));
19690
19691           gen_type_die (vtype, context_die);
19692           add_AT_die_ref (type_die, DW_AT_containing_type,
19693                           lookup_type_die (vtype));
19694         }
19695     }
19696   else
19697     {
19698       add_AT_flag (type_die, DW_AT_declaration, 1);
19699
19700       /* We don't need to do this for function-local types.  */
19701       if (TYPE_STUB_DECL (type)
19702           && ! decl_function_context (TYPE_STUB_DECL (type)))
19703         VEC_safe_push (tree, gc, incomplete_types, type);
19704     }
19705
19706   if (get_AT (type_die, DW_AT_name))
19707     add_pubtype (type, type_die);
19708 }
19709
19710 /* Generate a DIE for a subroutine _type_.  */
19711
19712 static void
19713 gen_subroutine_type_die (tree type, dw_die_ref context_die)
19714 {
19715   tree return_type = TREE_TYPE (type);
19716   dw_die_ref subr_die
19717     = new_die (DW_TAG_subroutine_type,
19718                scope_die_for (type, context_die), type);
19719
19720   equate_type_number_to_die (type, subr_die);
19721   add_prototyped_attribute (subr_die, type);
19722   add_type_attribute (subr_die, return_type, 0, 0, context_die);
19723   gen_formal_types_die (type, subr_die);
19724
19725   if (get_AT (subr_die, DW_AT_name))
19726     add_pubtype (type, subr_die);
19727 }
19728
19729 /* Generate a DIE for a type definition.  */
19730
19731 static void
19732 gen_typedef_die (tree decl, dw_die_ref context_die)
19733 {
19734   dw_die_ref type_die;
19735   tree origin;
19736
19737   if (TREE_ASM_WRITTEN (decl))
19738     return;
19739
19740   TREE_ASM_WRITTEN (decl) = 1;
19741   type_die = new_die (DW_TAG_typedef, context_die, decl);
19742   origin = decl_ultimate_origin (decl);
19743   if (origin != NULL)
19744     add_abstract_origin_attribute (type_die, origin);
19745   else
19746     {
19747       tree type;
19748
19749       add_name_and_src_coords_attributes (type_die, decl);
19750       if (DECL_ORIGINAL_TYPE (decl))
19751         {
19752           type = DECL_ORIGINAL_TYPE (decl);
19753
19754           gcc_assert (type != TREE_TYPE (decl));
19755           equate_type_number_to_die (TREE_TYPE (decl), type_die);
19756         }
19757       else
19758         {
19759           type = TREE_TYPE (decl);
19760
19761           if (is_naming_typedef_decl (TYPE_NAME (type)))
19762             /* 
19763                Here, we are in the case of decl being a typedef naming
19764                an anonymous type, e.g:
19765                      typedef struct {...} foo;
19766                In that case TREE_TYPE (decl) is not a typedef variant
19767                type and TYPE_NAME of the anonymous type is set to the
19768                TYPE_DECL of the typedef. This construct is emitted by
19769                the C++ FE.
19770
19771                TYPE is the anonymous struct named by the typedef
19772                DECL. As we need the DW_AT_type attribute of the
19773                DW_TAG_typedef to point to the DIE of TYPE, let's
19774                generate that DIE right away. add_type_attribute
19775                called below will then pick (via lookup_type_die) that
19776                anonymous struct DIE.  */
19777             gen_tagged_type_die (type, context_die, DINFO_USAGE_DIR_USE);
19778         }
19779
19780       add_type_attribute (type_die, type, TREE_READONLY (decl),
19781                           TREE_THIS_VOLATILE (decl), context_die);
19782
19783       if (is_naming_typedef_decl (decl))
19784         /* We want that all subsequent calls to lookup_type_die with
19785            TYPE in argument yield the DW_TAG_typedef we have just
19786            created.  */
19787         equate_type_number_to_die (type, type_die);
19788
19789       add_accessibility_attribute (type_die, decl);
19790     }
19791
19792   if (DECL_ABSTRACT (decl))
19793     equate_decl_number_to_die (decl, type_die);
19794
19795   if (get_AT (type_die, DW_AT_name))
19796     add_pubtype (decl, type_die);
19797 }
19798
19799 /* Generate a DIE for a struct, class, enum or union type.  */
19800
19801 static void
19802 gen_tagged_type_die (tree type,
19803                      dw_die_ref context_die,
19804                      enum debug_info_usage usage)
19805 {
19806   int need_pop;
19807
19808   if (type == NULL_TREE
19809       || !is_tagged_type (type))
19810     return;
19811
19812   /* If this is a nested type whose containing class hasn't been written
19813      out yet, writing it out will cover this one, too.  This does not apply
19814      to instantiations of member class templates; they need to be added to
19815      the containing class as they are generated.  FIXME: This hurts the
19816      idea of combining type decls from multiple TUs, since we can't predict
19817      what set of template instantiations we'll get.  */
19818   if (TYPE_CONTEXT (type)
19819       && AGGREGATE_TYPE_P (TYPE_CONTEXT (type))
19820       && ! TREE_ASM_WRITTEN (TYPE_CONTEXT (type)))
19821     {
19822       gen_type_die_with_usage (TYPE_CONTEXT (type), context_die, usage);
19823
19824       if (TREE_ASM_WRITTEN (type))
19825         return;
19826
19827       /* If that failed, attach ourselves to the stub.  */
19828       push_decl_scope (TYPE_CONTEXT (type));
19829       context_die = lookup_type_die (TYPE_CONTEXT (type));
19830       need_pop = 1;
19831     }
19832   else if (TYPE_CONTEXT (type) != NULL_TREE
19833            && (TREE_CODE (TYPE_CONTEXT (type)) == FUNCTION_DECL))
19834     {
19835       /* If this type is local to a function that hasn't been written
19836          out yet, use a NULL context for now; it will be fixed up in
19837          decls_for_scope.  */
19838       context_die = lookup_decl_die (TYPE_CONTEXT (type));
19839       need_pop = 0;
19840     }
19841   else
19842     {
19843       context_die = declare_in_namespace (type, context_die);
19844       need_pop = 0;
19845     }
19846
19847   if (TREE_CODE (type) == ENUMERAL_TYPE)
19848     {
19849       /* This might have been written out by the call to
19850          declare_in_namespace.  */
19851       if (!TREE_ASM_WRITTEN (type))
19852         gen_enumeration_type_die (type, context_die);
19853     }
19854   else
19855     gen_struct_or_union_type_die (type, context_die, usage);
19856
19857   if (need_pop)
19858     pop_decl_scope ();
19859
19860   /* Don't set TREE_ASM_WRITTEN on an incomplete struct; we want to fix
19861      it up if it is ever completed.  gen_*_type_die will set it for us
19862      when appropriate.  */
19863 }
19864
19865 /* Generate a type description DIE.  */
19866
19867 static void
19868 gen_type_die_with_usage (tree type, dw_die_ref context_die,
19869                                 enum debug_info_usage usage)
19870 {
19871   struct array_descr_info info;
19872
19873   if (type == NULL_TREE || type == error_mark_node)
19874     return;
19875
19876   /* If TYPE is a typedef type variant, let's generate debug info
19877      for the parent typedef which TYPE is a type of.  */
19878   if (typedef_variant_p (type))
19879     {
19880       if (TREE_ASM_WRITTEN (type))
19881         return;
19882
19883       /* Prevent broken recursion; we can't hand off to the same type.  */
19884       gcc_assert (DECL_ORIGINAL_TYPE (TYPE_NAME (type)) != type);
19885
19886       /* Use the DIE of the containing namespace as the parent DIE of
19887          the type description DIE we want to generate.  */
19888       if (DECL_CONTEXT (TYPE_NAME (type))
19889           && TREE_CODE (DECL_CONTEXT (TYPE_NAME (type))) == NAMESPACE_DECL)
19890         context_die = get_context_die (DECL_CONTEXT (TYPE_NAME (type)));
19891
19892       TREE_ASM_WRITTEN (type) = 1;
19893
19894       gen_decl_die (TYPE_NAME (type), NULL, context_die);
19895       return;
19896     }
19897
19898   /* If type is an anonymous tagged type named by a typedef, let's
19899      generate debug info for the typedef.  */
19900   if (is_naming_typedef_decl (TYPE_NAME (type)))
19901     {
19902       /* Use the DIE of the containing namespace as the parent DIE of
19903          the type description DIE we want to generate.  */
19904       if (DECL_CONTEXT (TYPE_NAME (type))
19905           && TREE_CODE (DECL_CONTEXT (TYPE_NAME (type))) == NAMESPACE_DECL)
19906         context_die = get_context_die (DECL_CONTEXT (TYPE_NAME (type)));
19907       
19908       gen_decl_die (TYPE_NAME (type), NULL, context_die);
19909       return;
19910     }
19911
19912   /* If this is an array type with hidden descriptor, handle it first.  */
19913   if (!TREE_ASM_WRITTEN (type)
19914       && lang_hooks.types.get_array_descr_info
19915       && lang_hooks.types.get_array_descr_info (type, &info)
19916       && (dwarf_version >= 3 || !dwarf_strict))
19917     {
19918       gen_descr_array_type_die (type, &info, context_die);
19919       TREE_ASM_WRITTEN (type) = 1;
19920       return;
19921     }
19922
19923   /* We are going to output a DIE to represent the unqualified version
19924      of this type (i.e. without any const or volatile qualifiers) so
19925      get the main variant (i.e. the unqualified version) of this type
19926      now.  (Vectors are special because the debugging info is in the
19927      cloned type itself).  */
19928   if (TREE_CODE (type) != VECTOR_TYPE)
19929     type = type_main_variant (type);
19930
19931   if (TREE_ASM_WRITTEN (type))
19932     return;
19933
19934   switch (TREE_CODE (type))
19935     {
19936     case ERROR_MARK:
19937       break;
19938
19939     case POINTER_TYPE:
19940     case REFERENCE_TYPE:
19941       /* We must set TREE_ASM_WRITTEN in case this is a recursive type.  This
19942          ensures that the gen_type_die recursion will terminate even if the
19943          type is recursive.  Recursive types are possible in Ada.  */
19944       /* ??? We could perhaps do this for all types before the switch
19945          statement.  */
19946       TREE_ASM_WRITTEN (type) = 1;
19947
19948       /* For these types, all that is required is that we output a DIE (or a
19949          set of DIEs) to represent the "basis" type.  */
19950       gen_type_die_with_usage (TREE_TYPE (type), context_die,
19951                                 DINFO_USAGE_IND_USE);
19952       break;
19953
19954     case OFFSET_TYPE:
19955       /* This code is used for C++ pointer-to-data-member types.
19956          Output a description of the relevant class type.  */
19957       gen_type_die_with_usage (TYPE_OFFSET_BASETYPE (type), context_die,
19958                                         DINFO_USAGE_IND_USE);
19959
19960       /* Output a description of the type of the object pointed to.  */
19961       gen_type_die_with_usage (TREE_TYPE (type), context_die,
19962                                         DINFO_USAGE_IND_USE);
19963
19964       /* Now output a DIE to represent this pointer-to-data-member type
19965          itself.  */
19966       gen_ptr_to_mbr_type_die (type, context_die);
19967       break;
19968
19969     case FUNCTION_TYPE:
19970       /* Force out return type (in case it wasn't forced out already).  */
19971       gen_type_die_with_usage (TREE_TYPE (type), context_die,
19972                                         DINFO_USAGE_DIR_USE);
19973       gen_subroutine_type_die (type, context_die);
19974       break;
19975
19976     case METHOD_TYPE:
19977       /* Force out return type (in case it wasn't forced out already).  */
19978       gen_type_die_with_usage (TREE_TYPE (type), context_die,
19979                                         DINFO_USAGE_DIR_USE);
19980       gen_subroutine_type_die (type, context_die);
19981       break;
19982
19983     case ARRAY_TYPE:
19984       gen_array_type_die (type, context_die);
19985       break;
19986
19987     case VECTOR_TYPE:
19988       gen_array_type_die (type, context_die);
19989       break;
19990
19991     case ENUMERAL_TYPE:
19992     case RECORD_TYPE:
19993     case UNION_TYPE:
19994     case QUAL_UNION_TYPE:
19995       gen_tagged_type_die (type, context_die, usage);
19996       return;
19997
19998     case VOID_TYPE:
19999     case INTEGER_TYPE:
20000     case REAL_TYPE:
20001     case FIXED_POINT_TYPE:
20002     case COMPLEX_TYPE:
20003     case BOOLEAN_TYPE:
20004       /* No DIEs needed for fundamental types.  */
20005       break;
20006
20007     case LANG_TYPE:
20008       /* Just use DW_TAG_unspecified_type.  */
20009       {
20010         dw_die_ref type_die = lookup_type_die (type);
20011         if (type_die == NULL)
20012           {
20013             tree name = TYPE_NAME (type);
20014             if (TREE_CODE (name) == TYPE_DECL)
20015               name = DECL_NAME (name);
20016             type_die = new_die (DW_TAG_unspecified_type, comp_unit_die, type);
20017             add_name_attribute (type_die, IDENTIFIER_POINTER (name));
20018             equate_type_number_to_die (type, type_die);
20019           }
20020       }
20021       break;
20022
20023     default:
20024       gcc_unreachable ();
20025     }
20026
20027   TREE_ASM_WRITTEN (type) = 1;
20028 }
20029
20030 static void
20031 gen_type_die (tree type, dw_die_ref context_die)
20032 {
20033   gen_type_die_with_usage (type, context_die, DINFO_USAGE_DIR_USE);
20034 }
20035
20036 /* Generate a DW_TAG_lexical_block DIE followed by DIEs to represent all of the
20037    things which are local to the given block.  */
20038
20039 static void
20040 gen_block_die (tree stmt, dw_die_ref context_die, int depth)
20041 {
20042   int must_output_die = 0;
20043   bool inlined_func;
20044
20045   /* Ignore blocks that are NULL.  */
20046   if (stmt == NULL_TREE)
20047     return;
20048
20049   inlined_func = inlined_function_outer_scope_p (stmt);
20050
20051   /* If the block is one fragment of a non-contiguous block, do not
20052      process the variables, since they will have been done by the
20053      origin block.  Do process subblocks.  */
20054   if (BLOCK_FRAGMENT_ORIGIN (stmt))
20055     {
20056       tree sub;
20057
20058       for (sub = BLOCK_SUBBLOCKS (stmt); sub; sub = BLOCK_CHAIN (sub))
20059         gen_block_die (sub, context_die, depth + 1);
20060
20061       return;
20062     }
20063
20064   /* Determine if we need to output any Dwarf DIEs at all to represent this
20065      block.  */
20066   if (inlined_func)
20067     /* The outer scopes for inlinings *must* always be represented.  We
20068        generate DW_TAG_inlined_subroutine DIEs for them.  (See below.) */
20069     must_output_die = 1;
20070   else
20071     {
20072       /* Determine if this block directly contains any "significant"
20073          local declarations which we will need to output DIEs for.  */
20074       if (debug_info_level > DINFO_LEVEL_TERSE)
20075         /* We are not in terse mode so *any* local declaration counts
20076            as being a "significant" one.  */
20077         must_output_die = ((BLOCK_VARS (stmt) != NULL
20078                             || BLOCK_NUM_NONLOCALIZED_VARS (stmt))
20079                            && (TREE_USED (stmt)
20080                                || TREE_ASM_WRITTEN (stmt)
20081                                || BLOCK_ABSTRACT (stmt)));
20082       else if ((TREE_USED (stmt)
20083                 || TREE_ASM_WRITTEN (stmt)
20084                 || BLOCK_ABSTRACT (stmt))
20085                && !dwarf2out_ignore_block (stmt))
20086         must_output_die = 1;
20087     }
20088
20089   /* It would be a waste of space to generate a Dwarf DW_TAG_lexical_block
20090      DIE for any block which contains no significant local declarations at
20091      all.  Rather, in such cases we just call `decls_for_scope' so that any
20092      needed Dwarf info for any sub-blocks will get properly generated. Note
20093      that in terse mode, our definition of what constitutes a "significant"
20094      local declaration gets restricted to include only inlined function
20095      instances and local (nested) function definitions.  */
20096   if (must_output_die)
20097     {
20098       if (inlined_func)
20099         {
20100           /* If STMT block is abstract, that means we have been called
20101              indirectly from dwarf2out_abstract_function.
20102              That function rightfully marks the descendent blocks (of
20103              the abstract function it is dealing with) as being abstract,
20104              precisely to prevent us from emitting any
20105              DW_TAG_inlined_subroutine DIE as a descendent
20106              of an abstract function instance. So in that case, we should
20107              not call gen_inlined_subroutine_die.
20108
20109              Later though, when cgraph asks dwarf2out to emit info
20110              for the concrete instance of the function decl into which
20111              the concrete instance of STMT got inlined, the later will lead
20112              to the generation of a DW_TAG_inlined_subroutine DIE.  */
20113           if (! BLOCK_ABSTRACT (stmt))
20114             gen_inlined_subroutine_die (stmt, context_die, depth);
20115         }
20116       else
20117         gen_lexical_block_die (stmt, context_die, depth);
20118     }
20119   else
20120     decls_for_scope (stmt, context_die, depth);
20121 }
20122
20123 /* Process variable DECL (or variable with origin ORIGIN) within
20124    block STMT and add it to CONTEXT_DIE.  */
20125 static void
20126 process_scope_var (tree stmt, tree decl, tree origin, dw_die_ref context_die)
20127 {
20128   dw_die_ref die;
20129   tree decl_or_origin = decl ? decl : origin;
20130
20131   if (TREE_CODE (decl_or_origin) == FUNCTION_DECL)
20132     die = lookup_decl_die (decl_or_origin);
20133   else if (TREE_CODE (decl_or_origin) == TYPE_DECL
20134            && TYPE_DECL_IS_STUB (decl_or_origin))
20135     die = lookup_type_die (TREE_TYPE (decl_or_origin));
20136   else
20137     die = NULL;
20138
20139   if (die != NULL && die->die_parent == NULL)
20140     add_child_die (context_die, die);
20141   else if (TREE_CODE (decl_or_origin) == IMPORTED_DECL)
20142     dwarf2out_imported_module_or_decl_1 (decl_or_origin, DECL_NAME (decl_or_origin),
20143                                          stmt, context_die);
20144   else
20145     gen_decl_die (decl, origin, context_die);
20146 }
20147
20148 /* Generate all of the decls declared within a given scope and (recursively)
20149    all of its sub-blocks.  */
20150
20151 static void
20152 decls_for_scope (tree stmt, dw_die_ref context_die, int depth)
20153 {
20154   tree decl;
20155   unsigned int i;
20156   tree subblocks;
20157
20158   /* Ignore NULL blocks.  */
20159   if (stmt == NULL_TREE)
20160     return;
20161
20162   /* Output the DIEs to represent all of the data objects and typedefs
20163      declared directly within this block but not within any nested
20164      sub-blocks.  Also, nested function and tag DIEs have been
20165      generated with a parent of NULL; fix that up now.  */
20166   for (decl = BLOCK_VARS (stmt); decl != NULL; decl = DECL_CHAIN (decl))
20167     process_scope_var (stmt, decl, NULL_TREE, context_die);
20168   for (i = 0; i < BLOCK_NUM_NONLOCALIZED_VARS (stmt); i++)
20169     process_scope_var (stmt, NULL, BLOCK_NONLOCALIZED_VAR (stmt, i),
20170                        context_die);
20171
20172   /* If we're at -g1, we're not interested in subblocks.  */
20173   if (debug_info_level <= DINFO_LEVEL_TERSE)
20174     return;
20175
20176   /* Output the DIEs to represent all sub-blocks (and the items declared
20177      therein) of this block.  */
20178   for (subblocks = BLOCK_SUBBLOCKS (stmt);
20179        subblocks != NULL;
20180        subblocks = BLOCK_CHAIN (subblocks))
20181     gen_block_die (subblocks, context_die, depth + 1);
20182 }
20183
20184 /* Is this a typedef we can avoid emitting?  */
20185
20186 static inline int
20187 is_redundant_typedef (const_tree decl)
20188 {
20189   if (TYPE_DECL_IS_STUB (decl))
20190     return 1;
20191
20192   if (DECL_ARTIFICIAL (decl)
20193       && DECL_CONTEXT (decl)
20194       && is_tagged_type (DECL_CONTEXT (decl))
20195       && TREE_CODE (TYPE_NAME (DECL_CONTEXT (decl))) == TYPE_DECL
20196       && DECL_NAME (decl) == DECL_NAME (TYPE_NAME (DECL_CONTEXT (decl))))
20197     /* Also ignore the artificial member typedef for the class name.  */
20198     return 1;
20199
20200   return 0;
20201 }
20202
20203 /* Return TRUE if TYPE is a typedef that names a type for linkage
20204    purposes. This kind of typedefs is produced by the C++ FE for
20205    constructs like:
20206
20207    typedef struct {...} foo;
20208
20209    In that case, there is no typedef variant type produced for foo.
20210    Rather, the TREE_TYPE of the TYPE_DECL of foo is the anonymous
20211    struct type.  */
20212
20213 static bool
20214 is_naming_typedef_decl (const_tree decl)
20215 {
20216   if (decl == NULL_TREE
20217       || TREE_CODE (decl) != TYPE_DECL
20218       || !is_tagged_type (TREE_TYPE (decl))
20219       || DECL_IS_BUILTIN (decl)
20220       || is_redundant_typedef (decl)
20221       /* It looks like Ada produces TYPE_DECLs that are very similar
20222          to C++ naming typedefs but that have different
20223          semantics. Let's be specific to c++ for now.  */
20224       || !is_cxx ())
20225     return FALSE;
20226
20227   return (DECL_ORIGINAL_TYPE (decl) == NULL_TREE
20228           && TYPE_NAME (TREE_TYPE (decl)) == decl
20229           && (TYPE_STUB_DECL (TREE_TYPE (decl))
20230               != TYPE_NAME (TREE_TYPE (decl))));
20231 }
20232
20233 /* Returns the DIE for a context.  */
20234
20235 static inline dw_die_ref
20236 get_context_die (tree context)
20237 {
20238   if (context)
20239     {
20240       /* Find die that represents this context.  */
20241       if (TYPE_P (context))
20242         return force_type_die (TYPE_MAIN_VARIANT (context));
20243       else
20244         return force_decl_die (context);
20245     }
20246   return comp_unit_die;
20247 }
20248
20249 /* Returns the DIE for decl.  A DIE will always be returned.  */
20250
20251 static dw_die_ref
20252 force_decl_die (tree decl)
20253 {
20254   dw_die_ref decl_die;
20255   unsigned saved_external_flag;
20256   tree save_fn = NULL_TREE;
20257   decl_die = lookup_decl_die (decl);
20258   if (!decl_die)
20259     {
20260       dw_die_ref context_die = get_context_die (DECL_CONTEXT (decl));
20261
20262       decl_die = lookup_decl_die (decl);
20263       if (decl_die)
20264         return decl_die;
20265
20266       switch (TREE_CODE (decl))
20267         {
20268         case FUNCTION_DECL:
20269           /* Clear current_function_decl, so that gen_subprogram_die thinks
20270              that this is a declaration. At this point, we just want to force
20271              declaration die.  */
20272           save_fn = current_function_decl;
20273           current_function_decl = NULL_TREE;
20274           gen_subprogram_die (decl, context_die);
20275           current_function_decl = save_fn;
20276           break;
20277
20278         case VAR_DECL:
20279           /* Set external flag to force declaration die. Restore it after
20280            gen_decl_die() call.  */
20281           saved_external_flag = DECL_EXTERNAL (decl);
20282           DECL_EXTERNAL (decl) = 1;
20283           gen_decl_die (decl, NULL, context_die);
20284           DECL_EXTERNAL (decl) = saved_external_flag;
20285           break;
20286
20287         case NAMESPACE_DECL:
20288           if (dwarf_version >= 3 || !dwarf_strict)
20289             dwarf2out_decl (decl);
20290           else
20291             /* DWARF2 has neither DW_TAG_module, nor DW_TAG_namespace.  */
20292             decl_die = comp_unit_die;
20293           break;
20294
20295         default:
20296           gcc_unreachable ();
20297         }
20298
20299       /* We should be able to find the DIE now.  */
20300       if (!decl_die)
20301         decl_die = lookup_decl_die (decl);
20302       gcc_assert (decl_die);
20303     }
20304
20305   return decl_die;
20306 }
20307
20308 /* Returns the DIE for TYPE, that must not be a base type.  A DIE is
20309    always returned.  */
20310
20311 static dw_die_ref
20312 force_type_die (tree type)
20313 {
20314   dw_die_ref type_die;
20315
20316   type_die = lookup_type_die (type);
20317   if (!type_die)
20318     {
20319       dw_die_ref context_die = get_context_die (TYPE_CONTEXT (type));
20320
20321       type_die = modified_type_die (type, TYPE_READONLY (type),
20322                                     TYPE_VOLATILE (type), context_die);
20323       gcc_assert (type_die);
20324     }
20325   return type_die;
20326 }
20327
20328 /* Force out any required namespaces to be able to output DECL,
20329    and return the new context_die for it, if it's changed.  */
20330
20331 static dw_die_ref
20332 setup_namespace_context (tree thing, dw_die_ref context_die)
20333 {
20334   tree context = (DECL_P (thing)
20335                   ? DECL_CONTEXT (thing) : TYPE_CONTEXT (thing));
20336   if (context && TREE_CODE (context) == NAMESPACE_DECL)
20337     /* Force out the namespace.  */
20338     context_die = force_decl_die (context);
20339
20340   return context_die;
20341 }
20342
20343 /* Emit a declaration DIE for THING (which is either a DECL or a tagged
20344    type) within its namespace, if appropriate.
20345
20346    For compatibility with older debuggers, namespace DIEs only contain
20347    declarations; all definitions are emitted at CU scope.  */
20348
20349 static dw_die_ref
20350 declare_in_namespace (tree thing, dw_die_ref context_die)
20351 {
20352   dw_die_ref ns_context;
20353
20354   if (debug_info_level <= DINFO_LEVEL_TERSE)
20355     return context_die;
20356
20357   /* If this decl is from an inlined function, then don't try to emit it in its
20358      namespace, as we will get confused.  It would have already been emitted
20359      when the abstract instance of the inline function was emitted anyways.  */
20360   if (DECL_P (thing) && DECL_ABSTRACT_ORIGIN (thing))
20361     return context_die;
20362
20363   ns_context = setup_namespace_context (thing, context_die);
20364
20365   if (ns_context != context_die)
20366     {
20367       if (is_fortran ())
20368         return ns_context;
20369       if (DECL_P (thing))
20370         gen_decl_die (thing, NULL, ns_context);
20371       else
20372         gen_type_die (thing, ns_context);
20373     }
20374   return context_die;
20375 }
20376
20377 /* Generate a DIE for a namespace or namespace alias.  */
20378
20379 static void
20380 gen_namespace_die (tree decl, dw_die_ref context_die)
20381 {
20382   dw_die_ref namespace_die;
20383
20384   /* Namespace aliases have a DECL_ABSTRACT_ORIGIN of the namespace
20385      they are an alias of.  */
20386   if (DECL_ABSTRACT_ORIGIN (decl) == NULL)
20387     {
20388       /* Output a real namespace or module.  */
20389       context_die = setup_namespace_context (decl, comp_unit_die);
20390       namespace_die = new_die (is_fortran ()
20391                                ? DW_TAG_module : DW_TAG_namespace,
20392                                context_die, decl);
20393       /* For Fortran modules defined in different CU don't add src coords.  */
20394       if (namespace_die->die_tag == DW_TAG_module && DECL_EXTERNAL (decl))
20395         {
20396           const char *name = dwarf2_name (decl, 0);
20397           if (name)
20398             add_name_attribute (namespace_die, name);
20399         }
20400       else
20401         add_name_and_src_coords_attributes (namespace_die, decl);
20402       if (DECL_EXTERNAL (decl))
20403         add_AT_flag (namespace_die, DW_AT_declaration, 1);
20404       equate_decl_number_to_die (decl, namespace_die);
20405     }
20406   else
20407     {
20408       /* Output a namespace alias.  */
20409
20410       /* Force out the namespace we are an alias of, if necessary.  */
20411       dw_die_ref origin_die
20412         = force_decl_die (DECL_ABSTRACT_ORIGIN (decl));
20413
20414       if (DECL_CONTEXT (decl) == NULL_TREE
20415           || TREE_CODE (DECL_CONTEXT (decl)) == NAMESPACE_DECL)
20416         context_die = setup_namespace_context (decl, comp_unit_die);
20417       /* Now create the namespace alias DIE.  */
20418       namespace_die = new_die (DW_TAG_imported_declaration, context_die, decl);
20419       add_name_and_src_coords_attributes (namespace_die, decl);
20420       add_AT_die_ref (namespace_die, DW_AT_import, origin_die);
20421       equate_decl_number_to_die (decl, namespace_die);
20422     }
20423 }
20424
20425 /* Generate Dwarf debug information for a decl described by DECL.  */
20426
20427 static void
20428 gen_decl_die (tree decl, tree origin, dw_die_ref context_die)
20429 {
20430   tree decl_or_origin = decl ? decl : origin;
20431   tree class_origin = NULL, ultimate_origin;
20432
20433   if (DECL_P (decl_or_origin) && DECL_IGNORED_P (decl_or_origin))
20434     return;
20435
20436   switch (TREE_CODE (decl_or_origin))
20437     {
20438     case ERROR_MARK:
20439       break;
20440
20441     case CONST_DECL:
20442       if (!is_fortran ())
20443         {
20444           /* The individual enumerators of an enum type get output when we output
20445              the Dwarf representation of the relevant enum type itself.  */
20446           break;
20447         }
20448
20449       /* Emit its type.  */
20450       gen_type_die (TREE_TYPE (decl), context_die);
20451
20452       /* And its containing namespace.  */
20453       context_die = declare_in_namespace (decl, context_die);
20454
20455       gen_const_die (decl, context_die);
20456       break;
20457
20458     case FUNCTION_DECL:
20459       /* Don't output any DIEs to represent mere function declarations,
20460          unless they are class members or explicit block externs.  */
20461       if (DECL_INITIAL (decl_or_origin) == NULL_TREE
20462           && DECL_CONTEXT (decl_or_origin) == NULL_TREE
20463           && (current_function_decl == NULL_TREE
20464               || DECL_ARTIFICIAL (decl_or_origin)))
20465         break;
20466
20467 #if 0
20468       /* FIXME */
20469       /* This doesn't work because the C frontend sets DECL_ABSTRACT_ORIGIN
20470          on local redeclarations of global functions.  That seems broken.  */
20471       if (current_function_decl != decl)
20472         /* This is only a declaration.  */;
20473 #endif
20474
20475       /* If we're emitting a clone, emit info for the abstract instance.  */
20476       if (origin || DECL_ORIGIN (decl) != decl)
20477         dwarf2out_abstract_function (origin
20478                                      ? DECL_ORIGIN (origin)
20479                                      : DECL_ABSTRACT_ORIGIN (decl));
20480
20481       /* If we're emitting an out-of-line copy of an inline function,
20482          emit info for the abstract instance and set up to refer to it.  */
20483       else if (cgraph_function_possibly_inlined_p (decl)
20484                && ! DECL_ABSTRACT (decl)
20485                && ! class_or_namespace_scope_p (context_die)
20486                /* dwarf2out_abstract_function won't emit a die if this is just
20487                   a declaration.  We must avoid setting DECL_ABSTRACT_ORIGIN in
20488                   that case, because that works only if we have a die.  */
20489                && DECL_INITIAL (decl) != NULL_TREE)
20490         {
20491           dwarf2out_abstract_function (decl);
20492           set_decl_origin_self (decl);
20493         }
20494
20495       /* Otherwise we're emitting the primary DIE for this decl.  */
20496       else if (debug_info_level > DINFO_LEVEL_TERSE)
20497         {
20498           /* Before we describe the FUNCTION_DECL itself, make sure that we
20499              have described its return type.  */
20500           gen_type_die (TREE_TYPE (TREE_TYPE (decl)), context_die);
20501
20502           /* And its virtual context.  */
20503           if (DECL_VINDEX (decl) != NULL_TREE)
20504             gen_type_die (DECL_CONTEXT (decl), context_die);
20505
20506           /* And its containing type.  */
20507           if (!origin)
20508             origin = decl_class_context (decl);
20509           if (origin != NULL_TREE)
20510             gen_type_die_for_member (origin, decl, context_die);
20511
20512           /* And its containing namespace.  */
20513           context_die = declare_in_namespace (decl, context_die);
20514         }
20515
20516       /* Now output a DIE to represent the function itself.  */
20517       if (decl)
20518         gen_subprogram_die (decl, context_die);
20519       break;
20520
20521     case TYPE_DECL:
20522       /* If we are in terse mode, don't generate any DIEs to represent any
20523          actual typedefs.  */
20524       if (debug_info_level <= DINFO_LEVEL_TERSE)
20525         break;
20526
20527       /* In the special case of a TYPE_DECL node representing the declaration
20528          of some type tag, if the given TYPE_DECL is marked as having been
20529          instantiated from some other (original) TYPE_DECL node (e.g. one which
20530          was generated within the original definition of an inline function) we
20531          used to generate a special (abbreviated) DW_TAG_structure_type,
20532          DW_TAG_union_type, or DW_TAG_enumeration_type DIE here.  But nothing
20533          should be actually referencing those DIEs, as variable DIEs with that
20534          type would be emitted already in the abstract origin, so it was always
20535          removed during unused type prunning.  Don't add anything in this
20536          case.  */
20537       if (TYPE_DECL_IS_STUB (decl) && decl_ultimate_origin (decl) != NULL_TREE)
20538         break;
20539
20540       if (is_redundant_typedef (decl))
20541         gen_type_die (TREE_TYPE (decl), context_die);
20542       else
20543         /* Output a DIE to represent the typedef itself.  */
20544         gen_typedef_die (decl, context_die);
20545       break;
20546
20547     case LABEL_DECL:
20548       if (debug_info_level >= DINFO_LEVEL_NORMAL)
20549         gen_label_die (decl, context_die);
20550       break;
20551
20552     case VAR_DECL:
20553     case RESULT_DECL:
20554       /* If we are in terse mode, don't generate any DIEs to represent any
20555          variable declarations or definitions.  */
20556       if (debug_info_level <= DINFO_LEVEL_TERSE)
20557         break;
20558
20559       /* Output any DIEs that are needed to specify the type of this data
20560          object.  */
20561       if (decl_by_reference_p (decl_or_origin))
20562         gen_type_die (TREE_TYPE (TREE_TYPE (decl_or_origin)), context_die);
20563       else
20564         gen_type_die (TREE_TYPE (decl_or_origin), context_die);
20565
20566       /* And its containing type.  */
20567       class_origin = decl_class_context (decl_or_origin);
20568       if (class_origin != NULL_TREE)
20569         gen_type_die_for_member (class_origin, decl_or_origin, context_die);
20570
20571       /* And its containing namespace.  */
20572       context_die = declare_in_namespace (decl_or_origin, context_die);
20573
20574       /* Now output the DIE to represent the data object itself.  This gets
20575          complicated because of the possibility that the VAR_DECL really
20576          represents an inlined instance of a formal parameter for an inline
20577          function.  */
20578       ultimate_origin = decl_ultimate_origin (decl_or_origin);
20579       if (ultimate_origin != NULL_TREE
20580           && TREE_CODE (ultimate_origin) == PARM_DECL)
20581         gen_formal_parameter_die (decl, origin,
20582                                   true /* Emit name attribute.  */,
20583                                   context_die);
20584       else
20585         gen_variable_die (decl, origin, context_die);
20586       break;
20587
20588     case FIELD_DECL:
20589       /* Ignore the nameless fields that are used to skip bits but handle C++
20590          anonymous unions and structs.  */
20591       if (DECL_NAME (decl) != NULL_TREE
20592           || TREE_CODE (TREE_TYPE (decl)) == UNION_TYPE
20593           || TREE_CODE (TREE_TYPE (decl)) == RECORD_TYPE)
20594         {
20595           gen_type_die (member_declared_type (decl), context_die);
20596           gen_field_die (decl, context_die);
20597         }
20598       break;
20599
20600     case PARM_DECL:
20601       if (DECL_BY_REFERENCE (decl_or_origin))
20602         gen_type_die (TREE_TYPE (TREE_TYPE (decl_or_origin)), context_die);
20603       else
20604         gen_type_die (TREE_TYPE (decl_or_origin), context_die);
20605       gen_formal_parameter_die (decl, origin,
20606                                 true /* Emit name attribute.  */,
20607                                 context_die);
20608       break;
20609
20610     case NAMESPACE_DECL:
20611     case IMPORTED_DECL:
20612       if (dwarf_version >= 3 || !dwarf_strict)
20613         gen_namespace_die (decl, context_die);
20614       break;
20615
20616     default:
20617       /* Probably some frontend-internal decl.  Assume we don't care.  */
20618       gcc_assert ((int)TREE_CODE (decl) > NUM_TREE_CODES);
20619       break;
20620     }
20621 }
20622 \f
20623 /* Output debug information for global decl DECL.  Called from toplev.c after
20624    compilation proper has finished.  */
20625
20626 static void
20627 dwarf2out_global_decl (tree decl)
20628 {
20629   /* Output DWARF2 information for file-scope tentative data object
20630      declarations, file-scope (extern) function declarations (which
20631      had no corresponding body) and file-scope tagged type declarations
20632      and definitions which have not yet been forced out.  */
20633   if (TREE_CODE (decl) != FUNCTION_DECL || !DECL_INITIAL (decl))
20634     dwarf2out_decl (decl);
20635 }
20636
20637 /* Output debug information for type decl DECL.  Called from toplev.c
20638    and from language front ends (to record built-in types).  */
20639 static void
20640 dwarf2out_type_decl (tree decl, int local)
20641 {
20642   if (!local)
20643     dwarf2out_decl (decl);
20644 }
20645
20646 /* Output debug information for imported module or decl DECL.
20647    NAME is non-NULL name in the lexical block if the decl has been renamed.
20648    LEXICAL_BLOCK is the lexical block (which TREE_CODE is a BLOCK)
20649    that DECL belongs to.
20650    LEXICAL_BLOCK_DIE is the DIE of LEXICAL_BLOCK.  */
20651 static void
20652 dwarf2out_imported_module_or_decl_1 (tree decl,
20653                                      tree name,
20654                                      tree lexical_block,
20655                                      dw_die_ref lexical_block_die)
20656 {
20657   expanded_location xloc;
20658   dw_die_ref imported_die = NULL;
20659   dw_die_ref at_import_die;
20660
20661   if (TREE_CODE (decl) == IMPORTED_DECL)
20662     {
20663       xloc = expand_location (DECL_SOURCE_LOCATION (decl));
20664       decl = IMPORTED_DECL_ASSOCIATED_DECL (decl);
20665       gcc_assert (decl);
20666     }
20667   else
20668     xloc = expand_location (input_location);
20669
20670   if (TREE_CODE (decl) == TYPE_DECL || TREE_CODE (decl) == CONST_DECL)
20671     {
20672       at_import_die = force_type_die (TREE_TYPE (decl));
20673       /* For namespace N { typedef void T; } using N::T; base_type_die
20674          returns NULL, but DW_TAG_imported_declaration requires
20675          the DW_AT_import tag.  Force creation of DW_TAG_typedef.  */
20676       if (!at_import_die)
20677         {
20678           gcc_assert (TREE_CODE (decl) == TYPE_DECL);
20679           gen_typedef_die (decl, get_context_die (DECL_CONTEXT (decl)));
20680           at_import_die = lookup_type_die (TREE_TYPE (decl));
20681           gcc_assert (at_import_die);
20682         }
20683     }
20684   else
20685     {
20686       at_import_die = lookup_decl_die (decl);
20687       if (!at_import_die)
20688         {
20689           /* If we're trying to avoid duplicate debug info, we may not have
20690              emitted the member decl for this field.  Emit it now.  */
20691           if (TREE_CODE (decl) == FIELD_DECL)
20692             {
20693               tree type = DECL_CONTEXT (decl);
20694
20695               if (TYPE_CONTEXT (type)
20696                   && TYPE_P (TYPE_CONTEXT (type))
20697                   && !should_emit_struct_debug (TYPE_CONTEXT (type),
20698                                                 DINFO_USAGE_DIR_USE))
20699                 return;
20700               gen_type_die_for_member (type, decl,
20701                                        get_context_die (TYPE_CONTEXT (type)));
20702             }
20703           at_import_die = force_decl_die (decl);
20704         }
20705     }
20706
20707   if (TREE_CODE (decl) == NAMESPACE_DECL)
20708     {
20709       if (dwarf_version >= 3 || !dwarf_strict)
20710         imported_die = new_die (DW_TAG_imported_module,
20711                                 lexical_block_die,
20712                                 lexical_block);
20713       else
20714         return;
20715     }
20716   else
20717     imported_die = new_die (DW_TAG_imported_declaration,
20718                             lexical_block_die,
20719                             lexical_block);
20720
20721   add_AT_file (imported_die, DW_AT_decl_file, lookup_filename (xloc.file));
20722   add_AT_unsigned (imported_die, DW_AT_decl_line, xloc.line);
20723   if (name)
20724     add_AT_string (imported_die, DW_AT_name,
20725                    IDENTIFIER_POINTER (name));
20726   add_AT_die_ref (imported_die, DW_AT_import, at_import_die);
20727 }
20728
20729 /* Output debug information for imported module or decl DECL.
20730    NAME is non-NULL name in context if the decl has been renamed.
20731    CHILD is true if decl is one of the renamed decls as part of
20732    importing whole module.  */
20733
20734 static void
20735 dwarf2out_imported_module_or_decl (tree decl, tree name, tree context,
20736                                    bool child)
20737 {
20738   /* dw_die_ref at_import_die;  */
20739   dw_die_ref scope_die;
20740
20741   if (debug_info_level <= DINFO_LEVEL_TERSE)
20742     return;
20743
20744   gcc_assert (decl);
20745
20746   /* To emit DW_TAG_imported_module or DW_TAG_imported_decl, we need two DIEs.
20747      We need decl DIE for reference and scope die. First, get DIE for the decl
20748      itself.  */
20749
20750   /* Get the scope die for decl context. Use comp_unit_die for global module
20751      or decl. If die is not found for non globals, force new die.  */
20752   if (context
20753       && TYPE_P (context)
20754       && !should_emit_struct_debug (context, DINFO_USAGE_DIR_USE))
20755     return;
20756
20757   if (!(dwarf_version >= 3 || !dwarf_strict))
20758     return;
20759
20760   scope_die = get_context_die (context);
20761
20762   if (child)
20763     {
20764       gcc_assert (scope_die->die_child);
20765       gcc_assert (scope_die->die_child->die_tag == DW_TAG_imported_module);
20766       gcc_assert (TREE_CODE (decl) != NAMESPACE_DECL);
20767       scope_die = scope_die->die_child;
20768     }
20769
20770   /* OK, now we have DIEs for decl as well as scope. Emit imported die.  */
20771   dwarf2out_imported_module_or_decl_1 (decl, name, context, scope_die);
20772
20773 }
20774
20775 /* Write the debugging output for DECL.  */
20776
20777 void
20778 dwarf2out_decl (tree decl)
20779 {
20780   dw_die_ref context_die = comp_unit_die;
20781
20782   switch (TREE_CODE (decl))
20783     {
20784     case ERROR_MARK:
20785       return;
20786
20787     case FUNCTION_DECL:
20788       /* What we would really like to do here is to filter out all mere
20789          file-scope declarations of file-scope functions which are never
20790          referenced later within this translation unit (and keep all of ones
20791          that *are* referenced later on) but we aren't clairvoyant, so we have
20792          no idea which functions will be referenced in the future (i.e. later
20793          on within the current translation unit). So here we just ignore all
20794          file-scope function declarations which are not also definitions.  If
20795          and when the debugger needs to know something about these functions,
20796          it will have to hunt around and find the DWARF information associated
20797          with the definition of the function.
20798
20799          We can't just check DECL_EXTERNAL to find out which FUNCTION_DECL
20800          nodes represent definitions and which ones represent mere
20801          declarations.  We have to check DECL_INITIAL instead. That's because
20802          the C front-end supports some weird semantics for "extern inline"
20803          function definitions.  These can get inlined within the current
20804          translation unit (and thus, we need to generate Dwarf info for their
20805          abstract instances so that the Dwarf info for the concrete inlined
20806          instances can have something to refer to) but the compiler never
20807          generates any out-of-lines instances of such things (despite the fact
20808          that they *are* definitions).
20809
20810          The important point is that the C front-end marks these "extern
20811          inline" functions as DECL_EXTERNAL, but we need to generate DWARF for
20812          them anyway. Note that the C++ front-end also plays some similar games
20813          for inline function definitions appearing within include files which
20814          also contain `#pragma interface' pragmas.  */
20815       if (DECL_INITIAL (decl) == NULL_TREE)
20816         return;
20817
20818       /* If we're a nested function, initially use a parent of NULL; if we're
20819          a plain function, this will be fixed up in decls_for_scope.  If
20820          we're a method, it will be ignored, since we already have a DIE.  */
20821       if (decl_function_context (decl)
20822           /* But if we're in terse mode, we don't care about scope.  */
20823           && debug_info_level > DINFO_LEVEL_TERSE)
20824         context_die = NULL;
20825       break;
20826
20827     case VAR_DECL:
20828       /* Ignore this VAR_DECL if it refers to a file-scope extern data object
20829          declaration and if the declaration was never even referenced from
20830          within this entire compilation unit.  We suppress these DIEs in
20831          order to save space in the .debug section (by eliminating entries
20832          which are probably useless).  Note that we must not suppress
20833          block-local extern declarations (whether used or not) because that
20834          would screw-up the debugger's name lookup mechanism and cause it to
20835          miss things which really ought to be in scope at a given point.  */
20836       if (DECL_EXTERNAL (decl) && !TREE_USED (decl))
20837         return;
20838
20839       /* For local statics lookup proper context die.  */
20840       if (TREE_STATIC (decl) && decl_function_context (decl))
20841         context_die = lookup_decl_die (DECL_CONTEXT (decl));
20842
20843       /* If we are in terse mode, don't generate any DIEs to represent any
20844          variable declarations or definitions.  */
20845       if (debug_info_level <= DINFO_LEVEL_TERSE)
20846         return;
20847       break;
20848
20849     case CONST_DECL:
20850       if (debug_info_level <= DINFO_LEVEL_TERSE)
20851         return;
20852       if (!is_fortran ())
20853         return;
20854       if (TREE_STATIC (decl) && decl_function_context (decl))
20855         context_die = lookup_decl_die (DECL_CONTEXT (decl));
20856       break;
20857
20858     case NAMESPACE_DECL:
20859     case IMPORTED_DECL:
20860       if (debug_info_level <= DINFO_LEVEL_TERSE)
20861         return;
20862       if (lookup_decl_die (decl) != NULL)
20863         return;
20864       break;
20865
20866     case TYPE_DECL:
20867       /* Don't emit stubs for types unless they are needed by other DIEs.  */
20868       if (TYPE_DECL_SUPPRESS_DEBUG (decl))
20869         return;
20870
20871       /* Don't bother trying to generate any DIEs to represent any of the
20872          normal built-in types for the language we are compiling.  */
20873       if (DECL_IS_BUILTIN (decl))
20874         {
20875           /* OK, we need to generate one for `bool' so GDB knows what type
20876              comparisons have.  */
20877           if (is_cxx ()
20878               && TREE_CODE (TREE_TYPE (decl)) == BOOLEAN_TYPE
20879               && ! DECL_IGNORED_P (decl))
20880             modified_type_die (TREE_TYPE (decl), 0, 0, NULL);
20881
20882           return;
20883         }
20884
20885       /* If we are in terse mode, don't generate any DIEs for types.  */
20886       if (debug_info_level <= DINFO_LEVEL_TERSE)
20887         return;
20888
20889       /* If we're a function-scope tag, initially use a parent of NULL;
20890          this will be fixed up in decls_for_scope.  */
20891       if (decl_function_context (decl))
20892         context_die = NULL;
20893
20894       break;
20895
20896     default:
20897       return;
20898     }
20899
20900   gen_decl_die (decl, NULL, context_die);
20901 }
20902
20903 /* Write the debugging output for DECL.  */
20904
20905 static void
20906 dwarf2out_function_decl (tree decl)
20907 {
20908   dwarf2out_decl (decl);
20909
20910   htab_empty (decl_loc_table);
20911 }
20912
20913 /* Output a marker (i.e. a label) for the beginning of the generated code for
20914    a lexical block.  */
20915
20916 static void
20917 dwarf2out_begin_block (unsigned int line ATTRIBUTE_UNUSED,
20918                        unsigned int blocknum)
20919 {
20920   switch_to_section (current_function_section ());
20921   ASM_OUTPUT_DEBUG_LABEL (asm_out_file, BLOCK_BEGIN_LABEL, blocknum);
20922 }
20923
20924 /* Output a marker (i.e. a label) for the end of the generated code for a
20925    lexical block.  */
20926
20927 static void
20928 dwarf2out_end_block (unsigned int line ATTRIBUTE_UNUSED, unsigned int blocknum)
20929 {
20930   switch_to_section (current_function_section ());
20931   ASM_OUTPUT_DEBUG_LABEL (asm_out_file, BLOCK_END_LABEL, blocknum);
20932 }
20933
20934 /* Returns nonzero if it is appropriate not to emit any debugging
20935    information for BLOCK, because it doesn't contain any instructions.
20936
20937    Don't allow this for blocks with nested functions or local classes
20938    as we would end up with orphans, and in the presence of scheduling
20939    we may end up calling them anyway.  */
20940
20941 static bool
20942 dwarf2out_ignore_block (const_tree block)
20943 {
20944   tree decl;
20945   unsigned int i;
20946
20947   for (decl = BLOCK_VARS (block); decl; decl = DECL_CHAIN (decl))
20948     if (TREE_CODE (decl) == FUNCTION_DECL
20949         || (TREE_CODE (decl) == TYPE_DECL && TYPE_DECL_IS_STUB (decl)))
20950       return 0;
20951   for (i = 0; i < BLOCK_NUM_NONLOCALIZED_VARS (block); i++)
20952     {
20953       decl = BLOCK_NONLOCALIZED_VAR (block, i);
20954       if (TREE_CODE (decl) == FUNCTION_DECL
20955           || (TREE_CODE (decl) == TYPE_DECL && TYPE_DECL_IS_STUB (decl)))
20956       return 0;
20957     }
20958
20959   return 1;
20960 }
20961
20962 /* Hash table routines for file_hash.  */
20963
20964 static int
20965 file_table_eq (const void *p1_p, const void *p2_p)
20966 {
20967   const struct dwarf_file_data *const p1 =
20968     (const struct dwarf_file_data *) p1_p;
20969   const char *const p2 = (const char *) p2_p;
20970   return strcmp (p1->filename, p2) == 0;
20971 }
20972
20973 static hashval_t
20974 file_table_hash (const void *p_p)
20975 {
20976   const struct dwarf_file_data *const p = (const struct dwarf_file_data *) p_p;
20977   return htab_hash_string (p->filename);
20978 }
20979
20980 /* Lookup FILE_NAME (in the list of filenames that we know about here in
20981    dwarf2out.c) and return its "index".  The index of each (known) filename is
20982    just a unique number which is associated with only that one filename.  We
20983    need such numbers for the sake of generating labels (in the .debug_sfnames
20984    section) and references to those files numbers (in the .debug_srcinfo
20985    and.debug_macinfo sections).  If the filename given as an argument is not
20986    found in our current list, add it to the list and assign it the next
20987    available unique index number.  In order to speed up searches, we remember
20988    the index of the filename was looked up last.  This handles the majority of
20989    all searches.  */
20990
20991 static struct dwarf_file_data *
20992 lookup_filename (const char *file_name)
20993 {
20994   void ** slot;
20995   struct dwarf_file_data * created;
20996
20997   /* Check to see if the file name that was searched on the previous
20998      call matches this file name.  If so, return the index.  */
20999   if (file_table_last_lookup
21000       && (file_name == file_table_last_lookup->filename
21001           || strcmp (file_table_last_lookup->filename, file_name) == 0))
21002     return file_table_last_lookup;
21003
21004   /* Didn't match the previous lookup, search the table.  */
21005   slot = htab_find_slot_with_hash (file_table, file_name,
21006                                    htab_hash_string (file_name), INSERT);
21007   if (*slot)
21008     return (struct dwarf_file_data *) *slot;
21009
21010   created = ggc_alloc_dwarf_file_data ();
21011   created->filename = file_name;
21012   created->emitted_number = 0;
21013   *slot = created;
21014   return created;
21015 }
21016
21017 /* If the assembler will construct the file table, then translate the compiler
21018    internal file table number into the assembler file table number, and emit
21019    a .file directive if we haven't already emitted one yet.  The file table
21020    numbers are different because we prune debug info for unused variables and
21021    types, which may include filenames.  */
21022
21023 static int
21024 maybe_emit_file (struct dwarf_file_data * fd)
21025 {
21026   if (! fd->emitted_number)
21027     {
21028       if (last_emitted_file)
21029         fd->emitted_number = last_emitted_file->emitted_number + 1;
21030       else
21031         fd->emitted_number = 1;
21032       last_emitted_file = fd;
21033
21034       if (DWARF2_ASM_LINE_DEBUG_INFO)
21035         {
21036           fprintf (asm_out_file, "\t.file %u ", fd->emitted_number);
21037           output_quoted_string (asm_out_file,
21038                                 remap_debug_filename (fd->filename));
21039           fputc ('\n', asm_out_file);
21040         }
21041     }
21042
21043   return fd->emitted_number;
21044 }
21045
21046 /* Schedule generation of a DW_AT_const_value attribute to DIE.
21047    That generation should happen after function debug info has been
21048    generated. The value of the attribute is the constant value of ARG.  */
21049
21050 static void
21051 append_entry_to_tmpl_value_parm_die_table (dw_die_ref die, tree arg)
21052 {
21053   die_arg_entry entry;
21054
21055   if (!die || !arg)
21056     return;
21057
21058   if (!tmpl_value_parm_die_table)
21059     tmpl_value_parm_die_table
21060       = VEC_alloc (die_arg_entry, gc, 32);
21061
21062   entry.die = die;
21063   entry.arg = arg;
21064   VEC_safe_push (die_arg_entry, gc,
21065                  tmpl_value_parm_die_table,
21066                  &entry);
21067 }
21068
21069 /* Add a DW_AT_const_value attribute to DIEs that were scheduled
21070    by append_entry_to_tmpl_value_parm_die_table. This function must
21071    be called after function DIEs have been generated.  */
21072
21073 static void
21074 gen_remaining_tmpl_value_param_die_attribute (void)
21075 {
21076   if (tmpl_value_parm_die_table)
21077     {
21078       unsigned i;
21079       die_arg_entry *e;
21080
21081       for (i = 0;
21082            VEC_iterate (die_arg_entry, tmpl_value_parm_die_table, i, e);
21083            i++)
21084         tree_add_const_value_attribute (e->die, e->arg);
21085     }
21086 }
21087
21088
21089 /* Replace DW_AT_name for the decl with name.  */
21090
21091 static void
21092 dwarf2out_set_name (tree decl, tree name)
21093 {
21094   dw_die_ref die;
21095   dw_attr_ref attr;
21096   const char *dname;
21097
21098   die = TYPE_SYMTAB_DIE (decl);
21099   if (!die)
21100     return;
21101
21102   dname = dwarf2_name (name, 0);
21103   if (!dname)
21104     return;
21105
21106   attr = get_AT (die, DW_AT_name);
21107   if (attr)
21108     {
21109       struct indirect_string_node *node;
21110
21111       node = find_AT_string (dname);
21112       /* replace the string.  */
21113       attr->dw_attr_val.v.val_str = node;
21114     }
21115
21116   else
21117     add_name_attribute (die, dname);
21118 }
21119
21120 /* Called by the final INSN scan whenever we see a direct function call.
21121    Make an entry into the direct call table, recording the point of call
21122    and a reference to the target function's debug entry.  */
21123
21124 static void
21125 dwarf2out_direct_call (tree targ)
21126 {
21127   dcall_entry e;
21128   tree origin = decl_ultimate_origin (targ);
21129
21130   /* If this is a clone, use the abstract origin as the target.  */
21131   if (origin)
21132     targ = origin;
21133
21134   e.poc_label_num = poc_label_num++;
21135   e.poc_decl = current_function_decl;
21136   e.targ_die = force_decl_die (targ);
21137   VEC_safe_push (dcall_entry, gc, dcall_table, &e);
21138
21139   /* Drop a label at the return point to mark the point of call.  */
21140   ASM_OUTPUT_DEBUG_LABEL (asm_out_file, "LPOC", e.poc_label_num);
21141 }
21142
21143 /* Returns a hash value for X (which really is a struct vcall_insn).  */
21144
21145 static hashval_t
21146 vcall_insn_table_hash (const void *x)
21147 {
21148   return (hashval_t) ((const struct vcall_insn *) x)->insn_uid;
21149 }
21150
21151 /* Return nonzero if insn_uid of struct vcall_insn *X is the same as
21152    insnd_uid of *Y.  */
21153
21154 static int
21155 vcall_insn_table_eq (const void *x, const void *y)
21156 {
21157   return (((const struct vcall_insn *) x)->insn_uid
21158           == ((const struct vcall_insn *) y)->insn_uid);
21159 }
21160
21161 /* Associate VTABLE_SLOT with INSN_UID in the VCALL_INSN_TABLE.  */
21162
21163 static void
21164 store_vcall_insn (unsigned int vtable_slot, int insn_uid)
21165 {
21166   struct vcall_insn *item = ggc_alloc_vcall_insn ();
21167   struct vcall_insn **slot;
21168
21169   gcc_assert (item);
21170   item->insn_uid = insn_uid;
21171   item->vtable_slot = vtable_slot;
21172   slot = (struct vcall_insn **)
21173       htab_find_slot_with_hash (vcall_insn_table, &item,
21174                                 (hashval_t) insn_uid, INSERT);
21175   *slot = item;
21176 }
21177
21178 /* Return the VTABLE_SLOT associated with INSN_UID.  */
21179
21180 static unsigned int
21181 lookup_vcall_insn (unsigned int insn_uid)
21182 {
21183   struct vcall_insn item;
21184   struct vcall_insn *p;
21185
21186   item.insn_uid = insn_uid;
21187   item.vtable_slot = 0;
21188   p = (struct vcall_insn *) htab_find_with_hash (vcall_insn_table,
21189                                                  (void *) &item,
21190                                                  (hashval_t) insn_uid);
21191   if (p == NULL)
21192     return (unsigned int) -1;
21193   return p->vtable_slot;
21194 }
21195
21196
21197 /* Called when lowering indirect calls to RTL.  We make a note of INSN_UID
21198    and the OBJ_TYPE_REF_TOKEN from ADDR.  For C++ virtual calls, the token
21199    is the vtable slot index that we will need to put in the virtual call
21200    table later.  */
21201
21202 static void
21203 dwarf2out_virtual_call_token (tree addr, int insn_uid)
21204 {
21205   if (is_cxx() && TREE_CODE (addr) == OBJ_TYPE_REF)
21206     {
21207       tree token = OBJ_TYPE_REF_TOKEN (addr);
21208       if (TREE_CODE (token) == INTEGER_CST)
21209         store_vcall_insn (TREE_INT_CST_LOW (token), insn_uid);
21210     }
21211 }
21212
21213 /* Called when scheduling RTL, when a CALL_INSN is split.  Copies the
21214    OBJ_TYPE_REF_TOKEN previously associated with OLD_INSN and associates it
21215    with NEW_INSN.  */
21216
21217 static void
21218 dwarf2out_copy_call_info (rtx old_insn, rtx new_insn)
21219 {
21220   unsigned int vtable_slot = lookup_vcall_insn (INSN_UID (old_insn));
21221
21222   if (vtable_slot != (unsigned int) -1)
21223     store_vcall_insn (vtable_slot, INSN_UID (new_insn));
21224 }
21225
21226 /* Called by the final INSN scan whenever we see a virtual function call.
21227    Make an entry into the virtual call table, recording the point of call
21228    and the slot index of the vtable entry used to call the virtual member
21229    function.  The slot index was associated with the INSN_UID during the
21230    lowering to RTL.  */
21231
21232 static void
21233 dwarf2out_virtual_call (int insn_uid)
21234 {
21235   unsigned int vtable_slot = lookup_vcall_insn (insn_uid);
21236   vcall_entry e;
21237
21238   if (vtable_slot == (unsigned int) -1)
21239     return;
21240
21241   e.poc_label_num = poc_label_num++;
21242   e.vtable_slot = vtable_slot;
21243   VEC_safe_push (vcall_entry, gc, vcall_table, &e);
21244
21245   /* Drop a label at the return point to mark the point of call.  */
21246   ASM_OUTPUT_DEBUG_LABEL (asm_out_file, "LPOC", e.poc_label_num);
21247 }
21248
21249 /* Called by the final INSN scan whenever we see a var location.  We
21250    use it to drop labels in the right places, and throw the location in
21251    our lookup table.  */
21252
21253 static void
21254 dwarf2out_var_location (rtx loc_note)
21255 {
21256   char loclabel[MAX_ARTIFICIAL_LABEL_BYTES + 2];
21257   struct var_loc_node *newloc;
21258   rtx next_real;
21259   static const char *last_label;
21260   static const char *last_postcall_label;
21261   static bool last_in_cold_section_p;
21262   tree decl;
21263
21264   if (!DECL_P (NOTE_VAR_LOCATION_DECL (loc_note)))
21265     return;
21266
21267   next_real = next_real_insn (loc_note);
21268   /* If there are no instructions which would be affected by this note,
21269      don't do anything.  */
21270   if (next_real == NULL_RTX)
21271     return;
21272
21273   /* If there were any real insns between note we processed last time
21274      and this note (or if it is the first note), clear
21275      last_{,postcall_}label so that they are not reused this time.  */
21276   if (last_var_location_insn == NULL_RTX
21277       || last_var_location_insn != next_real
21278       || last_in_cold_section_p != in_cold_section_p)
21279     {
21280       last_label = NULL;
21281       last_postcall_label = NULL;
21282     }
21283
21284   decl = NOTE_VAR_LOCATION_DECL (loc_note);
21285   newloc = add_var_loc_to_decl (decl, loc_note,
21286                                 NOTE_DURING_CALL_P (loc_note)
21287                                 ? last_postcall_label : last_label);
21288   if (newloc == NULL)
21289     return;
21290
21291   /* If there were no real insns between note we processed last time
21292      and this note, use the label we emitted last time.  Otherwise
21293      create a new label and emit it.  */
21294   if (last_label == NULL)
21295     {
21296       ASM_GENERATE_INTERNAL_LABEL (loclabel, "LVL", loclabel_num);
21297       ASM_OUTPUT_DEBUG_LABEL (asm_out_file, "LVL", loclabel_num);
21298       loclabel_num++;
21299       last_label = ggc_strdup (loclabel);
21300     }
21301
21302   if (!NOTE_DURING_CALL_P (loc_note))
21303     newloc->label = last_label;
21304   else
21305     {
21306       if (!last_postcall_label)
21307         {
21308           sprintf (loclabel, "%s-1", last_label);
21309           last_postcall_label = ggc_strdup (loclabel);
21310         }
21311       newloc->label = last_postcall_label;
21312     }
21313
21314   last_var_location_insn = next_real;
21315   last_in_cold_section_p = in_cold_section_p;
21316 }
21317
21318 /* We need to reset the locations at the beginning of each
21319    function. We can't do this in the end_function hook, because the
21320    declarations that use the locations won't have been output when
21321    that hook is called.  Also compute have_multiple_function_sections here.  */
21322
21323 static void
21324 dwarf2out_begin_function (tree fun)
21325 {
21326   if (function_section (fun) != text_section)
21327     have_multiple_function_sections = true;
21328
21329   dwarf2out_note_section_used ();
21330 }
21331
21332 /* Output a label to mark the beginning of a source code line entry
21333    and record information relating to this source line, in
21334    'line_info_table' for later output of the .debug_line section.  */
21335
21336 static void
21337 dwarf2out_source_line (unsigned int line, const char *filename,
21338                        int discriminator, bool is_stmt)
21339 {
21340   static bool last_is_stmt = true;
21341
21342   if (debug_info_level >= DINFO_LEVEL_NORMAL
21343       && line != 0)
21344     {
21345       int file_num = maybe_emit_file (lookup_filename (filename));
21346
21347       switch_to_section (current_function_section ());
21348
21349       /* If requested, emit something human-readable.  */
21350       if (flag_debug_asm)
21351         fprintf (asm_out_file, "\t%s %s:%d\n", ASM_COMMENT_START,
21352                  filename, line);
21353
21354       if (DWARF2_ASM_LINE_DEBUG_INFO)
21355         {
21356           /* Emit the .loc directive understood by GNU as.  */
21357           fprintf (asm_out_file, "\t.loc %d %d 0", file_num, line);
21358           if (is_stmt != last_is_stmt)
21359             {
21360               fprintf (asm_out_file, " is_stmt %d", is_stmt ? 1 : 0);
21361               last_is_stmt = is_stmt;
21362             }
21363           if (SUPPORTS_DISCRIMINATOR && discriminator != 0)
21364             fprintf (asm_out_file, " discriminator %d", discriminator);
21365           fputc ('\n', asm_out_file);
21366
21367           /* Indicate that line number info exists.  */
21368           line_info_table_in_use++;
21369         }
21370       else if (function_section (current_function_decl) != text_section)
21371         {
21372           dw_separate_line_info_ref line_info;
21373           targetm.asm_out.internal_label (asm_out_file,
21374                                           SEPARATE_LINE_CODE_LABEL,
21375                                           separate_line_info_table_in_use);
21376
21377           /* Expand the line info table if necessary.  */
21378           if (separate_line_info_table_in_use
21379               == separate_line_info_table_allocated)
21380             {
21381               separate_line_info_table_allocated += LINE_INFO_TABLE_INCREMENT;
21382               separate_line_info_table
21383                 = GGC_RESIZEVEC (dw_separate_line_info_entry,
21384                                  separate_line_info_table,
21385                                  separate_line_info_table_allocated);
21386               memset (separate_line_info_table
21387                        + separate_line_info_table_in_use,
21388                       0,
21389                       (LINE_INFO_TABLE_INCREMENT
21390                        * sizeof (dw_separate_line_info_entry)));
21391             }
21392
21393           /* Add the new entry at the end of the line_info_table.  */
21394           line_info
21395             = &separate_line_info_table[separate_line_info_table_in_use++];
21396           line_info->dw_file_num = file_num;
21397           line_info->dw_line_num = line;
21398           line_info->function = current_function_funcdef_no;
21399         }
21400       else
21401         {
21402           dw_line_info_ref line_info;
21403
21404           targetm.asm_out.internal_label (asm_out_file, LINE_CODE_LABEL,
21405                                      line_info_table_in_use);
21406
21407           /* Expand the line info table if necessary.  */
21408           if (line_info_table_in_use == line_info_table_allocated)
21409             {
21410               line_info_table_allocated += LINE_INFO_TABLE_INCREMENT;
21411               line_info_table
21412                 = GGC_RESIZEVEC (dw_line_info_entry, line_info_table,
21413                                  line_info_table_allocated);
21414               memset (line_info_table + line_info_table_in_use, 0,
21415                       LINE_INFO_TABLE_INCREMENT * sizeof (dw_line_info_entry));
21416             }
21417
21418           /* Add the new entry at the end of the line_info_table.  */
21419           line_info = &line_info_table[line_info_table_in_use++];
21420           line_info->dw_file_num = file_num;
21421           line_info->dw_line_num = line;
21422         }
21423     }
21424 }
21425
21426 /* Record the beginning of a new source file.  */
21427
21428 static void
21429 dwarf2out_start_source_file (unsigned int lineno, const char *filename)
21430 {
21431   if (flag_eliminate_dwarf2_dups && dwarf_version < 4)
21432     {
21433       /* Record the beginning of the file for break_out_includes.  */
21434       dw_die_ref bincl_die;
21435
21436       bincl_die = new_die (DW_TAG_GNU_BINCL, comp_unit_die, NULL);
21437       add_AT_string (bincl_die, DW_AT_name, remap_debug_filename (filename));
21438     }
21439
21440   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
21441     {
21442       int file_num = maybe_emit_file (lookup_filename (filename));
21443
21444       switch_to_section (debug_macinfo_section);
21445       dw2_asm_output_data (1, DW_MACINFO_start_file, "Start new file");
21446       dw2_asm_output_data_uleb128 (lineno, "Included from line number %d",
21447                                    lineno);
21448
21449       dw2_asm_output_data_uleb128 (file_num, "file %s", filename);
21450     }
21451 }
21452
21453 /* Record the end of a source file.  */
21454
21455 static void
21456 dwarf2out_end_source_file (unsigned int lineno ATTRIBUTE_UNUSED)
21457 {
21458   if (flag_eliminate_dwarf2_dups && dwarf_version < 4)
21459     /* Record the end of the file for break_out_includes.  */
21460     new_die (DW_TAG_GNU_EINCL, comp_unit_die, NULL);
21461
21462   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
21463     {
21464       switch_to_section (debug_macinfo_section);
21465       dw2_asm_output_data (1, DW_MACINFO_end_file, "End file");
21466     }
21467 }
21468
21469 /* Called from debug_define in toplev.c.  The `buffer' parameter contains
21470    the tail part of the directive line, i.e. the part which is past the
21471    initial whitespace, #, whitespace, directive-name, whitespace part.  */
21472
21473 static void
21474 dwarf2out_define (unsigned int lineno ATTRIBUTE_UNUSED,
21475                   const char *buffer ATTRIBUTE_UNUSED)
21476 {
21477   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
21478     {
21479       switch_to_section (debug_macinfo_section);
21480       dw2_asm_output_data (1, DW_MACINFO_define, "Define macro");
21481       dw2_asm_output_data_uleb128 (lineno, "At line number %d", lineno);
21482       dw2_asm_output_nstring (buffer, -1, "The macro");
21483     }
21484 }
21485
21486 /* Called from debug_undef in toplev.c.  The `buffer' parameter contains
21487    the tail part of the directive line, i.e. the part which is past the
21488    initial whitespace, #, whitespace, directive-name, whitespace part.  */
21489
21490 static void
21491 dwarf2out_undef (unsigned int lineno ATTRIBUTE_UNUSED,
21492                  const char *buffer ATTRIBUTE_UNUSED)
21493 {
21494   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
21495     {
21496       switch_to_section (debug_macinfo_section);
21497       dw2_asm_output_data (1, DW_MACINFO_undef, "Undefine macro");
21498       dw2_asm_output_data_uleb128 (lineno, "At line number %d", lineno);
21499       dw2_asm_output_nstring (buffer, -1, "The macro");
21500     }
21501 }
21502
21503 /* Set up for Dwarf output at the start of compilation.  */
21504
21505 static void
21506 dwarf2out_init (const char *filename ATTRIBUTE_UNUSED)
21507 {
21508   /* Allocate the file_table.  */
21509   file_table = htab_create_ggc (50, file_table_hash,
21510                                 file_table_eq, NULL);
21511
21512   /* Allocate the decl_die_table.  */
21513   decl_die_table = htab_create_ggc (10, decl_die_table_hash,
21514                                     decl_die_table_eq, NULL);
21515
21516   /* Allocate the decl_loc_table.  */
21517   decl_loc_table = htab_create_ggc (10, decl_loc_table_hash,
21518                                     decl_loc_table_eq, NULL);
21519
21520   /* Allocate the initial hunk of the decl_scope_table.  */
21521   decl_scope_table = VEC_alloc (tree, gc, 256);
21522
21523   /* Allocate the initial hunk of the abbrev_die_table.  */
21524   abbrev_die_table = ggc_alloc_cleared_vec_dw_die_ref
21525     (ABBREV_DIE_TABLE_INCREMENT);
21526   abbrev_die_table_allocated = ABBREV_DIE_TABLE_INCREMENT;
21527   /* Zero-th entry is allocated, but unused.  */
21528   abbrev_die_table_in_use = 1;
21529
21530   /* Allocate the initial hunk of the line_info_table.  */
21531   line_info_table = ggc_alloc_cleared_vec_dw_line_info_entry
21532     (LINE_INFO_TABLE_INCREMENT);
21533   line_info_table_allocated = LINE_INFO_TABLE_INCREMENT;
21534
21535   /* Zero-th entry is allocated, but unused.  */
21536   line_info_table_in_use = 1;
21537
21538   /* Allocate the pubtypes and pubnames vectors.  */
21539   pubname_table = VEC_alloc (pubname_entry, gc, 32);
21540   pubtype_table = VEC_alloc (pubname_entry, gc, 32);
21541
21542   /* Allocate the table that maps insn UIDs to vtable slot indexes.  */
21543   vcall_insn_table = htab_create_ggc (10, vcall_insn_table_hash,
21544                                       vcall_insn_table_eq, NULL);
21545
21546   /* Generate the initial DIE for the .debug section.  Note that the (string)
21547      value given in the DW_AT_name attribute of the DW_TAG_compile_unit DIE
21548      will (typically) be a relative pathname and that this pathname should be
21549      taken as being relative to the directory from which the compiler was
21550      invoked when the given (base) source file was compiled.  We will fill
21551      in this value in dwarf2out_finish.  */
21552   comp_unit_die = gen_compile_unit_die (NULL);
21553
21554   incomplete_types = VEC_alloc (tree, gc, 64);
21555
21556   used_rtx_array = VEC_alloc (rtx, gc, 32);
21557
21558   debug_info_section = get_section (DEBUG_INFO_SECTION,
21559                                     SECTION_DEBUG, NULL);
21560   debug_abbrev_section = get_section (DEBUG_ABBREV_SECTION,
21561                                       SECTION_DEBUG, NULL);
21562   debug_aranges_section = get_section (DEBUG_ARANGES_SECTION,
21563                                        SECTION_DEBUG, NULL);
21564   debug_macinfo_section = get_section (DEBUG_MACINFO_SECTION,
21565                                        SECTION_DEBUG, NULL);
21566   debug_line_section = get_section (DEBUG_LINE_SECTION,
21567                                     SECTION_DEBUG, NULL);
21568   debug_loc_section = get_section (DEBUG_LOC_SECTION,
21569                                    SECTION_DEBUG, NULL);
21570   debug_pubnames_section = get_section (DEBUG_PUBNAMES_SECTION,
21571                                         SECTION_DEBUG, NULL);
21572   debug_pubtypes_section = get_section (DEBUG_PUBTYPES_SECTION,
21573                                         SECTION_DEBUG, NULL);
21574   debug_dcall_section = get_section (DEBUG_DCALL_SECTION,
21575                                      SECTION_DEBUG, NULL);
21576   debug_vcall_section = get_section (DEBUG_VCALL_SECTION,
21577                                      SECTION_DEBUG, NULL);
21578   debug_str_section = get_section (DEBUG_STR_SECTION,
21579                                    DEBUG_STR_SECTION_FLAGS, NULL);
21580   debug_ranges_section = get_section (DEBUG_RANGES_SECTION,
21581                                       SECTION_DEBUG, NULL);
21582   debug_frame_section = get_section (DEBUG_FRAME_SECTION,
21583                                      SECTION_DEBUG, NULL);
21584
21585   ASM_GENERATE_INTERNAL_LABEL (text_end_label, TEXT_END_LABEL, 0);
21586   ASM_GENERATE_INTERNAL_LABEL (abbrev_section_label,
21587                                DEBUG_ABBREV_SECTION_LABEL, 0);
21588   ASM_GENERATE_INTERNAL_LABEL (text_section_label, TEXT_SECTION_LABEL, 0);
21589   ASM_GENERATE_INTERNAL_LABEL (cold_text_section_label,
21590                                COLD_TEXT_SECTION_LABEL, 0);
21591   ASM_GENERATE_INTERNAL_LABEL (cold_end_label, COLD_END_LABEL, 0);
21592
21593   ASM_GENERATE_INTERNAL_LABEL (debug_info_section_label,
21594                                DEBUG_INFO_SECTION_LABEL, 0);
21595   ASM_GENERATE_INTERNAL_LABEL (debug_line_section_label,
21596                                DEBUG_LINE_SECTION_LABEL, 0);
21597   ASM_GENERATE_INTERNAL_LABEL (ranges_section_label,
21598                                DEBUG_RANGES_SECTION_LABEL, 0);
21599   switch_to_section (debug_abbrev_section);
21600   ASM_OUTPUT_LABEL (asm_out_file, abbrev_section_label);
21601   switch_to_section (debug_info_section);
21602   ASM_OUTPUT_LABEL (asm_out_file, debug_info_section_label);
21603   switch_to_section (debug_line_section);
21604   ASM_OUTPUT_LABEL (asm_out_file, debug_line_section_label);
21605
21606   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
21607     {
21608       switch_to_section (debug_macinfo_section);
21609       ASM_GENERATE_INTERNAL_LABEL (macinfo_section_label,
21610                                    DEBUG_MACINFO_SECTION_LABEL, 0);
21611       ASM_OUTPUT_LABEL (asm_out_file, macinfo_section_label);
21612     }
21613
21614   switch_to_section (text_section);
21615   ASM_OUTPUT_LABEL (asm_out_file, text_section_label);
21616   if (flag_reorder_blocks_and_partition)
21617     {
21618       cold_text_section = unlikely_text_section ();
21619       switch_to_section (cold_text_section);
21620       ASM_OUTPUT_LABEL (asm_out_file, cold_text_section_label);
21621     }
21622
21623 }
21624
21625 /* Called before cgraph_optimize starts outputtting functions, variables
21626    and toplevel asms into assembly.  */
21627
21628 static void
21629 dwarf2out_assembly_start (void)
21630 {
21631   if (HAVE_GAS_CFI_SECTIONS_DIRECTIVE && dwarf2out_do_cfi_asm ())
21632     {
21633 #ifndef TARGET_UNWIND_INFO
21634       if (USING_SJLJ_EXCEPTIONS || (!flag_unwind_tables && !flag_exceptions))
21635 #endif
21636         fprintf (asm_out_file, "\t.cfi_sections\t.debug_frame\n");
21637     }
21638 }
21639
21640 /* A helper function for dwarf2out_finish called through
21641    htab_traverse.  Emit one queued .debug_str string.  */
21642
21643 static int
21644 output_indirect_string (void **h, void *v ATTRIBUTE_UNUSED)
21645 {
21646   struct indirect_string_node *node = (struct indirect_string_node *) *h;
21647
21648   if (node->label && node->refcount)
21649     {
21650       switch_to_section (debug_str_section);
21651       ASM_OUTPUT_LABEL (asm_out_file, node->label);
21652       assemble_string (node->str, strlen (node->str) + 1);
21653     }
21654
21655   return 1;
21656 }
21657
21658 #if ENABLE_ASSERT_CHECKING
21659 /* Verify that all marks are clear.  */
21660
21661 static void
21662 verify_marks_clear (dw_die_ref die)
21663 {
21664   dw_die_ref c;
21665
21666   gcc_assert (! die->die_mark);
21667   FOR_EACH_CHILD (die, c, verify_marks_clear (c));
21668 }
21669 #endif /* ENABLE_ASSERT_CHECKING */
21670
21671 /* Clear the marks for a die and its children.
21672    Be cool if the mark isn't set.  */
21673
21674 static void
21675 prune_unmark_dies (dw_die_ref die)
21676 {
21677   dw_die_ref c;
21678
21679   if (die->die_mark)
21680     die->die_mark = 0;
21681   FOR_EACH_CHILD (die, c, prune_unmark_dies (c));
21682 }
21683
21684 /* Given DIE that we're marking as used, find any other dies
21685    it references as attributes and mark them as used.  */
21686
21687 static void
21688 prune_unused_types_walk_attribs (dw_die_ref die)
21689 {
21690   dw_attr_ref a;
21691   unsigned ix;
21692
21693   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
21694     {
21695       if (a->dw_attr_val.val_class == dw_val_class_die_ref)
21696         {
21697           /* A reference to another DIE.
21698              Make sure that it will get emitted.
21699              If it was broken out into a comdat group, don't follow it.  */
21700           if (dwarf_version < 4
21701               || a->dw_attr == DW_AT_specification
21702               || a->dw_attr_val.v.val_die_ref.die->die_id.die_type_node == NULL)
21703             prune_unused_types_mark (a->dw_attr_val.v.val_die_ref.die, 1);
21704         }
21705       /* Set the string's refcount to 0 so that prune_unused_types_mark
21706          accounts properly for it.  */
21707       if (AT_class (a) == dw_val_class_str)
21708         a->dw_attr_val.v.val_str->refcount = 0;
21709     }
21710 }
21711
21712
21713 /* Mark DIE as being used.  If DOKIDS is true, then walk down
21714    to DIE's children.  */
21715
21716 static void
21717 prune_unused_types_mark (dw_die_ref die, int dokids)
21718 {
21719   dw_die_ref c;
21720
21721   if (die->die_mark == 0)
21722     {
21723       /* We haven't done this node yet.  Mark it as used.  */
21724       die->die_mark = 1;
21725
21726       /* We also have to mark its parents as used.
21727          (But we don't want to mark our parents' kids due to this.)  */
21728       if (die->die_parent)
21729         prune_unused_types_mark (die->die_parent, 0);
21730
21731       /* Mark any referenced nodes.  */
21732       prune_unused_types_walk_attribs (die);
21733
21734       /* If this node is a specification,
21735          also mark the definition, if it exists.  */
21736       if (get_AT_flag (die, DW_AT_declaration) && die->die_definition)
21737         prune_unused_types_mark (die->die_definition, 1);
21738     }
21739
21740   if (dokids && die->die_mark != 2)
21741     {
21742       /* We need to walk the children, but haven't done so yet.
21743          Remember that we've walked the kids.  */
21744       die->die_mark = 2;
21745
21746       /* If this is an array type, we need to make sure our
21747          kids get marked, even if they're types.  If we're
21748          breaking out types into comdat sections, do this
21749          for all type definitions.  */
21750       if (die->die_tag == DW_TAG_array_type
21751           || (dwarf_version >= 4
21752               && is_type_die (die) && ! is_declaration_die (die)))
21753         FOR_EACH_CHILD (die, c, prune_unused_types_mark (c, 1));
21754       else
21755         FOR_EACH_CHILD (die, c, prune_unused_types_walk (c));
21756     }
21757 }
21758
21759 /* For local classes, look if any static member functions were emitted
21760    and if so, mark them.  */
21761
21762 static void
21763 prune_unused_types_walk_local_classes (dw_die_ref die)
21764 {
21765   dw_die_ref c;
21766
21767   if (die->die_mark == 2)
21768     return;
21769
21770   switch (die->die_tag)
21771     {
21772     case DW_TAG_structure_type:
21773     case DW_TAG_union_type:
21774     case DW_TAG_class_type:
21775       break;
21776
21777     case DW_TAG_subprogram:
21778       if (!get_AT_flag (die, DW_AT_declaration)
21779           || die->die_definition != NULL)
21780         prune_unused_types_mark (die, 1);
21781       return;
21782
21783     default:
21784       return;
21785     }
21786
21787   /* Mark children.  */
21788   FOR_EACH_CHILD (die, c, prune_unused_types_walk_local_classes (c));
21789 }
21790
21791 /* Walk the tree DIE and mark types that we actually use.  */
21792
21793 static void
21794 prune_unused_types_walk (dw_die_ref die)
21795 {
21796   dw_die_ref c;
21797
21798   /* Don't do anything if this node is already marked and
21799      children have been marked as well.  */
21800   if (die->die_mark == 2)
21801     return;
21802
21803   switch (die->die_tag)
21804     {
21805     case DW_TAG_structure_type:
21806     case DW_TAG_union_type:
21807     case DW_TAG_class_type:
21808       if (die->die_perennial_p)
21809         break;
21810
21811       for (c = die->die_parent; c; c = c->die_parent)
21812         if (c->die_tag == DW_TAG_subprogram)
21813           break;
21814
21815       /* Finding used static member functions inside of classes
21816          is needed just for local classes, because for other classes
21817          static member function DIEs with DW_AT_specification
21818          are emitted outside of the DW_TAG_*_type.  If we ever change
21819          it, we'd need to call this even for non-local classes.  */
21820       if (c)
21821         prune_unused_types_walk_local_classes (die);
21822
21823       /* It's a type node --- don't mark it.  */
21824       return;
21825
21826     case DW_TAG_const_type:
21827     case DW_TAG_packed_type:
21828     case DW_TAG_pointer_type:
21829     case DW_TAG_reference_type:
21830     case DW_TAG_rvalue_reference_type:
21831     case DW_TAG_volatile_type:
21832     case DW_TAG_typedef:
21833     case DW_TAG_array_type:
21834     case DW_TAG_interface_type:
21835     case DW_TAG_friend:
21836     case DW_TAG_variant_part:
21837     case DW_TAG_enumeration_type:
21838     case DW_TAG_subroutine_type:
21839     case DW_TAG_string_type:
21840     case DW_TAG_set_type:
21841     case DW_TAG_subrange_type:
21842     case DW_TAG_ptr_to_member_type:
21843     case DW_TAG_file_type:
21844       if (die->die_perennial_p)
21845         break;
21846
21847       /* It's a type node --- don't mark it.  */
21848       return;
21849
21850     default:
21851       /* Mark everything else.  */
21852       break;
21853   }
21854
21855   if (die->die_mark == 0)
21856     {
21857       die->die_mark = 1;
21858
21859       /* Now, mark any dies referenced from here.  */
21860       prune_unused_types_walk_attribs (die);
21861     }
21862
21863   die->die_mark = 2;
21864
21865   /* Mark children.  */
21866   FOR_EACH_CHILD (die, c, prune_unused_types_walk (c));
21867 }
21868
21869 /* Increment the string counts on strings referred to from DIE's
21870    attributes.  */
21871
21872 static void
21873 prune_unused_types_update_strings (dw_die_ref die)
21874 {
21875   dw_attr_ref a;
21876   unsigned ix;
21877
21878   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
21879     if (AT_class (a) == dw_val_class_str)
21880       {
21881         struct indirect_string_node *s = a->dw_attr_val.v.val_str;
21882         s->refcount++;
21883         /* Avoid unnecessarily putting strings that are used less than
21884            twice in the hash table.  */
21885         if (s->refcount
21886             == ((DEBUG_STR_SECTION_FLAGS & SECTION_MERGE) ? 1 : 2))
21887           {
21888             void ** slot;
21889             slot = htab_find_slot_with_hash (debug_str_hash, s->str,
21890                                              htab_hash_string (s->str),
21891                                              INSERT);
21892             gcc_assert (*slot == NULL);
21893             *slot = s;
21894           }
21895       }
21896 }
21897
21898 /* Remove from the tree DIE any dies that aren't marked.  */
21899
21900 static void
21901 prune_unused_types_prune (dw_die_ref die)
21902 {
21903   dw_die_ref c;
21904
21905   gcc_assert (die->die_mark);
21906   prune_unused_types_update_strings (die);
21907
21908   if (! die->die_child)
21909     return;
21910
21911   c = die->die_child;
21912   do {
21913     dw_die_ref prev = c;
21914     for (c = c->die_sib; ! c->die_mark; c = c->die_sib)
21915       if (c == die->die_child)
21916         {
21917           /* No marked children between 'prev' and the end of the list.  */
21918           if (prev == c)
21919             /* No marked children at all.  */
21920             die->die_child = NULL;
21921           else
21922             {
21923               prev->die_sib = c->die_sib;
21924               die->die_child = prev;
21925             }
21926           return;
21927         }
21928
21929     if (c != prev->die_sib)
21930       prev->die_sib = c;
21931     prune_unused_types_prune (c);
21932   } while (c != die->die_child);
21933 }
21934
21935 /* A helper function for dwarf2out_finish called through
21936    htab_traverse.  Clear .debug_str strings that we haven't already
21937    decided to emit.  */
21938
21939 static int
21940 prune_indirect_string (void **h, void *v ATTRIBUTE_UNUSED)
21941 {
21942   struct indirect_string_node *node = (struct indirect_string_node *) *h;
21943
21944   if (!node->label || !node->refcount)
21945     htab_clear_slot (debug_str_hash, h);
21946
21947   return 1;
21948 }
21949
21950 /* Remove dies representing declarations that we never use.  */
21951
21952 static void
21953 prune_unused_types (void)
21954 {
21955   unsigned int i;
21956   limbo_die_node *node;
21957   comdat_type_node *ctnode;
21958   pubname_ref pub;
21959   dcall_entry *dcall;
21960
21961 #if ENABLE_ASSERT_CHECKING
21962   /* All the marks should already be clear.  */
21963   verify_marks_clear (comp_unit_die);
21964   for (node = limbo_die_list; node; node = node->next)
21965     verify_marks_clear (node->die);
21966   for (ctnode = comdat_type_list; ctnode; ctnode = ctnode->next)
21967     verify_marks_clear (ctnode->root_die);
21968 #endif /* ENABLE_ASSERT_CHECKING */
21969
21970   /* Mark types that are used in global variables.  */
21971   premark_types_used_by_global_vars ();
21972
21973   /* Set the mark on nodes that are actually used.  */
21974   prune_unused_types_walk (comp_unit_die);
21975   for (node = limbo_die_list; node; node = node->next)
21976     prune_unused_types_walk (node->die);
21977   for (ctnode = comdat_type_list; ctnode; ctnode = ctnode->next)
21978     {
21979       prune_unused_types_walk (ctnode->root_die);
21980       prune_unused_types_mark (ctnode->type_die, 1);
21981     }
21982
21983   /* Also set the mark on nodes referenced from the
21984      pubname_table or arange_table.  */
21985   for (i = 0; VEC_iterate (pubname_entry, pubname_table, i, pub); i++)
21986     prune_unused_types_mark (pub->die, 1);
21987   for (i = 0; i < arange_table_in_use; i++)
21988     prune_unused_types_mark (arange_table[i], 1);
21989
21990   /* Mark nodes referenced from the direct call table.  */
21991   for (i = 0; VEC_iterate (dcall_entry, dcall_table, i, dcall); i++)
21992     prune_unused_types_mark (dcall->targ_die, 1);
21993
21994   /* Get rid of nodes that aren't marked; and update the string counts.  */
21995   if (debug_str_hash && debug_str_hash_forced)
21996     htab_traverse (debug_str_hash, prune_indirect_string, NULL);
21997   else if (debug_str_hash)
21998     htab_empty (debug_str_hash);
21999   prune_unused_types_prune (comp_unit_die);
22000   for (node = limbo_die_list; node; node = node->next)
22001     prune_unused_types_prune (node->die);
22002   for (ctnode = comdat_type_list; ctnode; ctnode = ctnode->next)
22003     prune_unused_types_prune (ctnode->root_die);
22004
22005   /* Leave the marks clear.  */
22006   prune_unmark_dies (comp_unit_die);
22007   for (node = limbo_die_list; node; node = node->next)
22008     prune_unmark_dies (node->die);
22009   for (ctnode = comdat_type_list; ctnode; ctnode = ctnode->next)
22010     prune_unmark_dies (ctnode->root_die);
22011 }
22012
22013 /* Set the parameter to true if there are any relative pathnames in
22014    the file table.  */
22015 static int
22016 file_table_relative_p (void ** slot, void *param)
22017 {
22018   bool *p = (bool *) param;
22019   struct dwarf_file_data *d = (struct dwarf_file_data *) *slot;
22020   if (!IS_ABSOLUTE_PATH (d->filename))
22021     {
22022       *p = true;
22023       return 0;
22024     }
22025   return 1;
22026 }
22027
22028 /* Routines to manipulate hash table of comdat type units.  */
22029
22030 static hashval_t
22031 htab_ct_hash (const void *of)
22032 {
22033   hashval_t h;
22034   const comdat_type_node *const type_node = (const comdat_type_node *) of;
22035
22036   memcpy (&h, type_node->signature, sizeof (h));
22037   return h;
22038 }
22039
22040 static int
22041 htab_ct_eq (const void *of1, const void *of2)
22042 {
22043   const comdat_type_node *const type_node_1 = (const comdat_type_node *) of1;
22044   const comdat_type_node *const type_node_2 = (const comdat_type_node *) of2;
22045
22046   return (! memcmp (type_node_1->signature, type_node_2->signature,
22047                     DWARF_TYPE_SIGNATURE_SIZE));
22048 }
22049
22050 /* Move a DW_AT_{,MIPS_}linkage_name attribute just added to dw_die_ref
22051    to the location it would have been added, should we know its
22052    DECL_ASSEMBLER_NAME when we added other attributes.  This will
22053    probably improve compactness of debug info, removing equivalent
22054    abbrevs, and hide any differences caused by deferring the
22055    computation of the assembler name, triggered by e.g. PCH.  */
22056
22057 static inline void
22058 move_linkage_attr (dw_die_ref die)
22059 {
22060   unsigned ix = VEC_length (dw_attr_node, die->die_attr);
22061   dw_attr_node linkage = *VEC_index (dw_attr_node, die->die_attr, ix - 1);
22062
22063   gcc_assert (linkage.dw_attr == DW_AT_linkage_name
22064               || linkage.dw_attr == DW_AT_MIPS_linkage_name);
22065
22066   while (--ix > 0)
22067     {
22068       dw_attr_node *prev = VEC_index (dw_attr_node, die->die_attr, ix - 1);
22069
22070       if (prev->dw_attr == DW_AT_decl_line || prev->dw_attr == DW_AT_name)
22071         break;
22072     }
22073
22074   if (ix != VEC_length (dw_attr_node, die->die_attr) - 1)
22075     {
22076       VEC_pop (dw_attr_node, die->die_attr);
22077       VEC_quick_insert (dw_attr_node, die->die_attr, ix, &linkage);
22078     }
22079 }
22080
22081 /* Helper function for resolve_addr, attempt to resolve
22082    one CONST_STRING, return non-zero if not successful.  Similarly verify that
22083    SYMBOL_REFs refer to variables emitted in the current CU.  */
22084
22085 static int
22086 resolve_one_addr (rtx *addr, void *data ATTRIBUTE_UNUSED)
22087 {
22088   rtx rtl = *addr;
22089
22090   if (GET_CODE (rtl) == CONST_STRING)
22091     {
22092       size_t len = strlen (XSTR (rtl, 0)) + 1;
22093       tree t = build_string (len, XSTR (rtl, 0));
22094       tree tlen = build_int_cst (NULL_TREE, len - 1);
22095       TREE_TYPE (t)
22096         = build_array_type (char_type_node, build_index_type (tlen));
22097       rtl = lookup_constant_def (t);
22098       if (!rtl || !MEM_P (rtl))
22099         return 1;
22100       rtl = XEXP (rtl, 0);
22101       VEC_safe_push (rtx, gc, used_rtx_array, rtl);
22102       *addr = rtl;
22103       return 0;
22104     }
22105
22106   if (GET_CODE (rtl) == SYMBOL_REF
22107       && SYMBOL_REF_DECL (rtl)
22108       && !TREE_ASM_WRITTEN (SYMBOL_REF_DECL (rtl)))
22109     return 1;
22110
22111   if (GET_CODE (rtl) == CONST
22112       && for_each_rtx (&XEXP (rtl, 0), resolve_one_addr, NULL))
22113     return 1;
22114
22115   return 0;
22116 }
22117
22118 /* Helper function for resolve_addr, handle one location
22119    expression, return false if at least one CONST_STRING or SYMBOL_REF in
22120    the location list couldn't be resolved.  */
22121
22122 static bool
22123 resolve_addr_in_expr (dw_loc_descr_ref loc)
22124 {
22125   for (; loc; loc = loc->dw_loc_next)
22126     if (((loc->dw_loc_opc == DW_OP_addr || loc->dtprel)
22127          && resolve_one_addr (&loc->dw_loc_oprnd1.v.val_addr, NULL))
22128         || (loc->dw_loc_opc == DW_OP_implicit_value
22129             && loc->dw_loc_oprnd2.val_class == dw_val_class_addr
22130             && resolve_one_addr (&loc->dw_loc_oprnd2.v.val_addr, NULL)))
22131       return false;
22132   return true;
22133 }
22134
22135 /* Resolve DW_OP_addr and DW_AT_const_value CONST_STRING arguments to
22136    an address in .rodata section if the string literal is emitted there,
22137    or remove the containing location list or replace DW_AT_const_value
22138    with DW_AT_location and empty location expression, if it isn't found
22139    in .rodata.  Similarly for SYMBOL_REFs, keep only those that refer
22140    to something that has been emitted in the current CU.  */
22141
22142 static void
22143 resolve_addr (dw_die_ref die)
22144 {
22145   dw_die_ref c;
22146   dw_attr_ref a;
22147   dw_loc_list_ref *curr;
22148   unsigned ix;
22149
22150   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
22151     switch (AT_class (a))
22152       {
22153       case dw_val_class_loc_list:
22154         curr = AT_loc_list_ptr (a);
22155         while (*curr)
22156           {
22157             if (!resolve_addr_in_expr ((*curr)->expr))
22158               {
22159                 dw_loc_list_ref next = (*curr)->dw_loc_next;
22160                 if (next && (*curr)->ll_symbol)
22161                   {
22162                     gcc_assert (!next->ll_symbol);
22163                     next->ll_symbol = (*curr)->ll_symbol;
22164                   }
22165                 *curr = next;
22166               }
22167             else
22168               curr = &(*curr)->dw_loc_next;
22169           }
22170         if (!AT_loc_list (a))
22171           {
22172             remove_AT (die, a->dw_attr);
22173             ix--;
22174           }
22175         break;
22176       case dw_val_class_loc:
22177         if (!resolve_addr_in_expr (AT_loc (a)))
22178           {
22179             remove_AT (die, a->dw_attr);
22180             ix--;
22181           }
22182         break;
22183       case dw_val_class_addr:
22184         if (a->dw_attr == DW_AT_const_value
22185             && resolve_one_addr (&a->dw_attr_val.v.val_addr, NULL))
22186           {
22187             remove_AT (die, a->dw_attr);
22188             ix--;
22189           }
22190         break;
22191       default:
22192         break;
22193       }
22194
22195   FOR_EACH_CHILD (die, c, resolve_addr (c));
22196 }
22197
22198 /* Output stuff that dwarf requires at the end of every file,
22199    and generate the DWARF-2 debugging info.  */
22200
22201 static void
22202 dwarf2out_finish (const char *filename)
22203 {
22204   limbo_die_node *node, *next_node;
22205   comdat_type_node *ctnode;
22206   htab_t comdat_type_table;
22207   dw_die_ref die = 0;
22208   unsigned int i;
22209
22210   gen_remaining_tmpl_value_param_die_attribute ();
22211
22212   /* Add the name for the main input file now.  We delayed this from
22213      dwarf2out_init to avoid complications with PCH.  */
22214   add_name_attribute (comp_unit_die, remap_debug_filename (filename));
22215   if (!IS_ABSOLUTE_PATH (filename))
22216     add_comp_dir_attribute (comp_unit_die);
22217   else if (get_AT (comp_unit_die, DW_AT_comp_dir) == NULL)
22218     {
22219       bool p = false;
22220       htab_traverse (file_table, file_table_relative_p, &p);
22221       if (p)
22222         add_comp_dir_attribute (comp_unit_die);
22223     }
22224
22225   for (i = 0; i < VEC_length (deferred_locations, deferred_locations_list); i++)
22226     {
22227       add_location_or_const_value_attribute (
22228         VEC_index (deferred_locations, deferred_locations_list, i)->die,
22229         VEC_index (deferred_locations, deferred_locations_list, i)->variable,
22230         DW_AT_location);
22231     }
22232
22233   /* Traverse the limbo die list, and add parent/child links.  The only
22234      dies without parents that should be here are concrete instances of
22235      inline functions, and the comp_unit_die.  We can ignore the comp_unit_die.
22236      For concrete instances, we can get the parent die from the abstract
22237      instance.  */
22238   for (node = limbo_die_list; node; node = next_node)
22239     {
22240       next_node = node->next;
22241       die = node->die;
22242
22243       if (die->die_parent == NULL)
22244         {
22245           dw_die_ref origin = get_AT_ref (die, DW_AT_abstract_origin);
22246
22247           if (origin)
22248             add_child_die (origin->die_parent, die);
22249           else if (die == comp_unit_die)
22250             ;
22251           else if (seen_error ())
22252             /* It's OK to be confused by errors in the input.  */
22253             add_child_die (comp_unit_die, die);
22254           else
22255             {
22256               /* In certain situations, the lexical block containing a
22257                  nested function can be optimized away, which results
22258                  in the nested function die being orphaned.  Likewise
22259                  with the return type of that nested function.  Force
22260                  this to be a child of the containing function.
22261
22262                  It may happen that even the containing function got fully
22263                  inlined and optimized out.  In that case we are lost and
22264                  assign the empty child.  This should not be big issue as
22265                  the function is likely unreachable too.  */
22266               tree context = NULL_TREE;
22267
22268               gcc_assert (node->created_for);
22269
22270               if (DECL_P (node->created_for))
22271                 context = DECL_CONTEXT (node->created_for);
22272               else if (TYPE_P (node->created_for))
22273                 context = TYPE_CONTEXT (node->created_for);
22274
22275               gcc_assert (context
22276                           && (TREE_CODE (context) == FUNCTION_DECL
22277                               || TREE_CODE (context) == NAMESPACE_DECL));
22278
22279               origin = lookup_decl_die (context);
22280               if (origin)
22281                 add_child_die (origin, die);
22282               else
22283                 add_child_die (comp_unit_die, die);
22284             }
22285         }
22286     }
22287
22288   limbo_die_list = NULL;
22289
22290   resolve_addr (comp_unit_die);
22291
22292   for (node = deferred_asm_name; node; node = node->next)
22293     {
22294       tree decl = node->created_for;
22295       if (DECL_ASSEMBLER_NAME (decl) != DECL_NAME (decl))
22296         {
22297           add_linkage_attr (node->die, decl);
22298           move_linkage_attr (node->die);
22299         }
22300     }
22301
22302   deferred_asm_name = NULL;
22303
22304   /* Walk through the list of incomplete types again, trying once more to
22305      emit full debugging info for them.  */
22306   retry_incomplete_types ();
22307
22308   if (flag_eliminate_unused_debug_types)
22309     prune_unused_types ();
22310
22311   /* Generate separate CUs for each of the include files we've seen.
22312      They will go into limbo_die_list.  */
22313   if (flag_eliminate_dwarf2_dups && dwarf_version < 4)
22314     break_out_includes (comp_unit_die);
22315
22316   /* Generate separate COMDAT sections for type DIEs. */
22317   if (dwarf_version >= 4)
22318     {
22319       break_out_comdat_types (comp_unit_die);
22320
22321       /* Each new type_unit DIE was added to the limbo die list when created.
22322          Since these have all been added to comdat_type_list, clear the
22323          limbo die list.  */
22324       limbo_die_list = NULL;
22325
22326       /* For each new comdat type unit, copy declarations for incomplete
22327          types to make the new unit self-contained (i.e., no direct
22328          references to the main compile unit).  */
22329       for (ctnode = comdat_type_list; ctnode != NULL; ctnode = ctnode->next)
22330         copy_decls_for_unworthy_types (ctnode->root_die);
22331       copy_decls_for_unworthy_types (comp_unit_die);
22332
22333       /* In the process of copying declarations from one unit to another,
22334          we may have left some declarations behind that are no longer
22335          referenced.  Prune them.  */
22336       prune_unused_types ();
22337     }
22338
22339   /* Traverse the DIE's and add add sibling attributes to those DIE's
22340      that have children.  */
22341   add_sibling_attributes (comp_unit_die);
22342   for (node = limbo_die_list; node; node = node->next)
22343     add_sibling_attributes (node->die);
22344   for (ctnode = comdat_type_list; ctnode != NULL; ctnode = ctnode->next)
22345     add_sibling_attributes (ctnode->root_die);
22346
22347   /* Output a terminator label for the .text section.  */
22348   switch_to_section (text_section);
22349   targetm.asm_out.internal_label (asm_out_file, TEXT_END_LABEL, 0);
22350   if (flag_reorder_blocks_and_partition)
22351     {
22352       switch_to_section (unlikely_text_section ());
22353       targetm.asm_out.internal_label (asm_out_file, COLD_END_LABEL, 0);
22354     }
22355
22356   /* We can only use the low/high_pc attributes if all of the code was
22357      in .text.  */
22358   if (!have_multiple_function_sections
22359       || !(dwarf_version >= 3 || !dwarf_strict))
22360     {
22361       add_AT_lbl_id (comp_unit_die, DW_AT_low_pc, text_section_label);
22362       add_AT_lbl_id (comp_unit_die, DW_AT_high_pc, text_end_label);
22363     }
22364
22365   else
22366     {
22367       unsigned fde_idx = 0;
22368       bool range_list_added = false;
22369
22370       /* We need to give .debug_loc and .debug_ranges an appropriate
22371          "base address".  Use zero so that these addresses become
22372          absolute.  Historically, we've emitted the unexpected
22373          DW_AT_entry_pc instead of DW_AT_low_pc for this purpose.
22374          Emit both to give time for other tools to adapt.  */
22375       add_AT_addr (comp_unit_die, DW_AT_low_pc, const0_rtx);
22376       add_AT_addr (comp_unit_die, DW_AT_entry_pc, const0_rtx);
22377
22378       if (text_section_used)
22379         add_ranges_by_labels (comp_unit_die, text_section_label,
22380                               text_end_label, &range_list_added);
22381       if (flag_reorder_blocks_and_partition && cold_text_section_used)
22382         add_ranges_by_labels (comp_unit_die, cold_text_section_label,
22383                               cold_end_label, &range_list_added);
22384
22385       for (fde_idx = 0; fde_idx < fde_table_in_use; fde_idx++)
22386         {
22387           dw_fde_ref fde = &fde_table[fde_idx];
22388
22389           if (fde->dw_fde_switched_sections)
22390             {
22391               if (!fde->in_std_section)
22392                 add_ranges_by_labels (comp_unit_die,
22393                                       fde->dw_fde_hot_section_label,
22394                                       fde->dw_fde_hot_section_end_label,
22395                                       &range_list_added);
22396               if (!fde->cold_in_std_section)
22397                 add_ranges_by_labels (comp_unit_die,
22398                                       fde->dw_fde_unlikely_section_label,
22399                                       fde->dw_fde_unlikely_section_end_label,
22400                                       &range_list_added);
22401             }
22402           else if (!fde->in_std_section)
22403             add_ranges_by_labels (comp_unit_die, fde->dw_fde_begin,
22404                                   fde->dw_fde_end, &range_list_added);
22405         }
22406
22407       if (range_list_added)
22408         add_ranges (NULL);
22409     }
22410
22411   /* Output location list section if necessary.  */
22412   if (have_location_lists)
22413     {
22414       /* Output the location lists info.  */
22415       switch_to_section (debug_loc_section);
22416       ASM_GENERATE_INTERNAL_LABEL (loc_section_label,
22417                                    DEBUG_LOC_SECTION_LABEL, 0);
22418       ASM_OUTPUT_LABEL (asm_out_file, loc_section_label);
22419       output_location_lists (die);
22420     }
22421
22422   if (debug_info_level >= DINFO_LEVEL_NORMAL)
22423     add_AT_lineptr (comp_unit_die, DW_AT_stmt_list,
22424                     debug_line_section_label);
22425
22426   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
22427     add_AT_macptr (comp_unit_die, DW_AT_macro_info, macinfo_section_label);
22428
22429   /* Output all of the compilation units.  We put the main one last so that
22430      the offsets are available to output_pubnames.  */
22431   for (node = limbo_die_list; node; node = node->next)
22432     output_comp_unit (node->die, 0);
22433
22434   comdat_type_table = htab_create (100, htab_ct_hash, htab_ct_eq, NULL);
22435   for (ctnode = comdat_type_list; ctnode != NULL; ctnode = ctnode->next)
22436     {
22437       void **slot = htab_find_slot (comdat_type_table, ctnode, INSERT);
22438
22439       /* Don't output duplicate types.  */
22440       if (*slot != HTAB_EMPTY_ENTRY)
22441         continue;
22442
22443       /* Add a pointer to the line table for the main compilation unit
22444          so that the debugger can make sense of DW_AT_decl_file
22445          attributes.  */
22446       if (debug_info_level >= DINFO_LEVEL_NORMAL)
22447         add_AT_lineptr (ctnode->root_die, DW_AT_stmt_list,
22448                         debug_line_section_label);
22449
22450       output_comdat_type_unit (ctnode);
22451       *slot = ctnode;
22452     }
22453   htab_delete (comdat_type_table);
22454
22455   /* Output the main compilation unit if non-empty or if .debug_macinfo
22456      has been emitted.  */
22457   output_comp_unit (comp_unit_die, debug_info_level >= DINFO_LEVEL_VERBOSE);
22458
22459   /* Output the abbreviation table.  */
22460   switch_to_section (debug_abbrev_section);
22461   output_abbrev_section ();
22462
22463   /* Output public names table if necessary.  */
22464   if (!VEC_empty (pubname_entry, pubname_table))
22465     {
22466       switch_to_section (debug_pubnames_section);
22467       output_pubnames (pubname_table);
22468     }
22469
22470   /* Output public types table if necessary.  */
22471   /* ??? Only defined by DWARF3, but emitted by Darwin for DWARF2.
22472      It shouldn't hurt to emit it always, since pure DWARF2 consumers
22473      simply won't look for the section.  */
22474   if (!VEC_empty (pubname_entry, pubtype_table))
22475     {
22476       switch_to_section (debug_pubtypes_section);
22477       output_pubnames (pubtype_table);
22478     }
22479
22480   /* Output direct and virtual call tables if necessary.  */
22481   if (!VEC_empty (dcall_entry, dcall_table))
22482     {
22483       switch_to_section (debug_dcall_section);
22484       output_dcall_table ();
22485     }
22486   if (!VEC_empty (vcall_entry, vcall_table))
22487     {
22488       switch_to_section (debug_vcall_section);
22489       output_vcall_table ();
22490     }
22491
22492   /* Output the address range information.  We only put functions in the arange
22493      table, so don't write it out if we don't have any.  */
22494   if (fde_table_in_use)
22495     {
22496       switch_to_section (debug_aranges_section);
22497       output_aranges ();
22498     }
22499
22500   /* Output ranges section if necessary.  */
22501   if (ranges_table_in_use)
22502     {
22503       switch_to_section (debug_ranges_section);
22504       ASM_OUTPUT_LABEL (asm_out_file, ranges_section_label);
22505       output_ranges ();
22506     }
22507
22508   /* Output the source line correspondence table.  We must do this
22509      even if there is no line information.  Otherwise, on an empty
22510      translation unit, we will generate a present, but empty,
22511      .debug_info section.  IRIX 6.5 `nm' will then complain when
22512      examining the file.  This is done late so that any filenames
22513      used by the debug_info section are marked as 'used'.  */
22514   if (! DWARF2_ASM_LINE_DEBUG_INFO)
22515     {
22516       switch_to_section (debug_line_section);
22517       output_line_info ();
22518     }
22519
22520   /* Have to end the macro section.  */
22521   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
22522     {
22523       switch_to_section (debug_macinfo_section);
22524       dw2_asm_output_data (1, 0, "End compilation unit");
22525     }
22526
22527   /* If we emitted any DW_FORM_strp form attribute, output the string
22528      table too.  */
22529   if (debug_str_hash)
22530     htab_traverse (debug_str_hash, output_indirect_string, NULL);
22531 }
22532 #else
22533
22534 /* This should never be used, but its address is needed for comparisons.  */
22535 const struct gcc_debug_hooks dwarf2_debug_hooks =
22536 {
22537   0,            /* init */
22538   0,            /* finish */
22539   0,            /* assembly_start */
22540   0,            /* define */
22541   0,            /* undef */
22542   0,            /* start_source_file */
22543   0,            /* end_source_file */
22544   0,            /* begin_block */
22545   0,            /* end_block */
22546   0,            /* ignore_block */
22547   0,            /* source_line */
22548   0,            /* begin_prologue */
22549   0,            /* end_prologue */
22550   0,            /* begin_epilogue */
22551   0,            /* end_epilogue */
22552   0,            /* begin_function */
22553   0,            /* end_function */
22554   0,            /* function_decl */
22555   0,            /* global_decl */
22556   0,            /* type_decl */
22557   0,            /* imported_module_or_decl */
22558   0,            /* deferred_inline_function */
22559   0,            /* outlining_inline_function */
22560   0,            /* label */
22561   0,            /* handle_pch */
22562   0,            /* var_location */
22563   0,            /* switch_text_section */
22564   0,            /* direct_call */
22565   0,            /* virtual_call_token */
22566   0,            /* copy_call_info */
22567   0,            /* virtual_call */
22568   0,            /* set_name */
22569   0             /* start_end_main_source_file */
22570 };
22571
22572 #endif /* DWARF2_DEBUGGING_INFO */
22573
22574 #include "gt-dwarf2out.h"