OSDN Git Service

PR debug/41048
[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_hot_section_label;
303   const char *dw_fde_hot_section_end_label;
304   const char *dw_fde_unlikely_section_label;
305   const char *dw_fde_unlikely_section_end_label;
306   dw_cfi_ref dw_fde_cfi;
307   dw_cfi_ref dw_fde_switch_cfi; /* Last CFI before switching sections.  */
308   unsigned funcdef_number;
309   HOST_WIDE_INT stack_realignment;
310   /* Dynamic realign argument pointer register.  */
311   unsigned int drap_reg;
312   /* Virtual dynamic realign argument pointer register.  */
313   unsigned int vdrap_reg;
314   /* These 3 flags are copied from rtl_data in function.h.  */
315   unsigned all_throwers_are_sibcalls : 1;
316   unsigned uses_eh_lsda : 1;
317   unsigned nothrow : 1;
318   /* Whether we did stack realign in this call frame.  */
319   unsigned stack_realign : 1;
320   /* Whether dynamic realign argument pointer register has been saved.  */
321   unsigned drap_reg_saved: 1;
322   /* True iff dw_fde_begin label is in text_section or cold_text_section.  */
323   unsigned in_std_section : 1;
324   /* True iff dw_fde_unlikely_section_label is in text_section or
325      cold_text_section.  */
326   unsigned cold_in_std_section : 1;
327   /* True iff switched sections.  */
328   unsigned dw_fde_switched_sections : 1;
329   /* True iff switching from cold to hot section.  */
330   unsigned dw_fde_switched_cold_to_hot : 1;
331 }
332 dw_fde_node;
333
334 /* Maximum size (in bytes) of an artificially generated label.  */
335 #define MAX_ARTIFICIAL_LABEL_BYTES      30
336
337 /* The size of addresses as they appear in the Dwarf 2 data.
338    Some architectures use word addresses to refer to code locations,
339    but Dwarf 2 info always uses byte addresses.  On such machines,
340    Dwarf 2 addresses need to be larger than the architecture's
341    pointers.  */
342 #ifndef DWARF2_ADDR_SIZE
343 #define DWARF2_ADDR_SIZE (POINTER_SIZE / BITS_PER_UNIT)
344 #endif
345
346 /* The size in bytes of a DWARF field indicating an offset or length
347    relative to a debug info section, specified to be 4 bytes in the
348    DWARF-2 specification.  The SGI/MIPS ABI defines it to be the same
349    as PTR_SIZE.  */
350
351 #ifndef DWARF_OFFSET_SIZE
352 #define DWARF_OFFSET_SIZE 4
353 #endif
354
355 /* The size in bytes of a DWARF 4 type signature.  */
356
357 #ifndef DWARF_TYPE_SIGNATURE_SIZE
358 #define DWARF_TYPE_SIGNATURE_SIZE 8
359 #endif
360
361 /* According to the (draft) DWARF 3 specification, the initial length
362    should either be 4 or 12 bytes.  When it's 12 bytes, the first 4
363    bytes are 0xffffffff, followed by the length stored in the next 8
364    bytes.
365
366    However, the SGI/MIPS ABI uses an initial length which is equal to
367    DWARF_OFFSET_SIZE.  It is defined (elsewhere) accordingly.  */
368
369 #ifndef DWARF_INITIAL_LENGTH_SIZE
370 #define DWARF_INITIAL_LENGTH_SIZE (DWARF_OFFSET_SIZE == 4 ? 4 : 12)
371 #endif
372
373 /* Round SIZE up to the nearest BOUNDARY.  */
374 #define DWARF_ROUND(SIZE,BOUNDARY) \
375   ((((SIZE) + (BOUNDARY) - 1) / (BOUNDARY)) * (BOUNDARY))
376
377 /* Offsets recorded in opcodes are a multiple of this alignment factor.  */
378 #ifndef DWARF_CIE_DATA_ALIGNMENT
379 #ifdef STACK_GROWS_DOWNWARD
380 #define DWARF_CIE_DATA_ALIGNMENT (-((int) UNITS_PER_WORD))
381 #else
382 #define DWARF_CIE_DATA_ALIGNMENT ((int) UNITS_PER_WORD)
383 #endif
384 #endif
385
386 /* CIE identifier.  */
387 #if HOST_BITS_PER_WIDE_INT >= 64
388 #define DWARF_CIE_ID \
389   (unsigned HOST_WIDE_INT) (DWARF_OFFSET_SIZE == 4 ? DW_CIE_ID : DW64_CIE_ID)
390 #else
391 #define DWARF_CIE_ID DW_CIE_ID
392 #endif
393
394 /* A pointer to the base of a table that contains frame description
395    information for each routine.  */
396 static GTY((length ("fde_table_allocated"))) dw_fde_ref fde_table;
397
398 /* Number of elements currently allocated for fde_table.  */
399 static GTY(()) unsigned fde_table_allocated;
400
401 /* Number of elements in fde_table currently in use.  */
402 static GTY(()) unsigned fde_table_in_use;
403
404 /* Size (in elements) of increments by which we may expand the
405    fde_table.  */
406 #define FDE_TABLE_INCREMENT 256
407
408 /* Get the current fde_table entry we should use.  */
409
410 static inline dw_fde_ref
411 current_fde (void)
412 {
413   return fde_table_in_use ? &fde_table[fde_table_in_use - 1] : NULL;
414 }
415
416 /* A list of call frame insns for the CIE.  */
417 static GTY(()) dw_cfi_ref cie_cfi_head;
418
419 #if defined (DWARF2_DEBUGGING_INFO) || defined (DWARF2_UNWIND_INFO)
420 /* Some DWARF extensions (e.g., MIPS/SGI) implement a subprogram
421    attribute that accelerates the lookup of the FDE associated
422    with the subprogram.  This variable holds the table index of the FDE
423    associated with the current function (body) definition.  */
424 static unsigned current_funcdef_fde;
425 #endif
426
427 struct GTY(()) indirect_string_node {
428   const char *str;
429   unsigned int refcount;
430   enum dwarf_form form;
431   char *label;
432 };
433
434 static GTY ((param_is (struct indirect_string_node))) htab_t debug_str_hash;
435
436 /* True if the compilation unit has location entries that reference
437    debug strings.  */
438 static GTY(()) bool debug_str_hash_forced = false;
439
440 static GTY(()) int dw2_string_counter;
441 static GTY(()) unsigned long dwarf2out_cfi_label_num;
442
443 /* True if the compilation unit places functions in more than one section.  */
444 static GTY(()) bool have_multiple_function_sections = false;
445
446 /* Whether the default text and cold text sections have been used at all.  */
447
448 static GTY(()) bool text_section_used = false;
449 static GTY(()) bool cold_text_section_used = false;
450
451 /* The default cold text section.  */
452 static GTY(()) section *cold_text_section;
453
454 #if defined (DWARF2_DEBUGGING_INFO) || defined (DWARF2_UNWIND_INFO)
455
456 /* Forward declarations for functions defined in this file.  */
457
458 static char *stripattributes (const char *);
459 static const char *dwarf_cfi_name (unsigned);
460 static dw_cfi_ref new_cfi (void);
461 static void add_cfi (dw_cfi_ref *, dw_cfi_ref);
462 static void add_fde_cfi (const char *, dw_cfi_ref);
463 static void lookup_cfa_1 (dw_cfi_ref, dw_cfa_location *, dw_cfa_location *);
464 static void lookup_cfa (dw_cfa_location *);
465 static void reg_save (const char *, unsigned, unsigned, HOST_WIDE_INT);
466 #ifdef DWARF2_UNWIND_INFO
467 static void initial_return_save (rtx);
468 #endif
469 static HOST_WIDE_INT stack_adjust_offset (const_rtx, HOST_WIDE_INT,
470                                           HOST_WIDE_INT);
471 static void output_cfi (dw_cfi_ref, dw_fde_ref, int);
472 static void output_cfi_directive (dw_cfi_ref);
473 static void output_call_frame_info (int);
474 static void dwarf2out_note_section_used (void);
475 static void flush_queued_reg_saves (void);
476 static bool clobbers_queued_reg_save (const_rtx);
477 static void dwarf2out_frame_debug_expr (rtx, const char *);
478
479 /* Support for complex CFA locations.  */
480 static void output_cfa_loc (dw_cfi_ref);
481 static void output_cfa_loc_raw (dw_cfi_ref);
482 static void get_cfa_from_loc_descr (dw_cfa_location *,
483                                     struct dw_loc_descr_struct *);
484 static struct dw_loc_descr_struct *build_cfa_loc
485   (dw_cfa_location *, HOST_WIDE_INT);
486 static struct dw_loc_descr_struct *build_cfa_aligned_loc
487   (HOST_WIDE_INT, HOST_WIDE_INT);
488 static void def_cfa_1 (const char *, dw_cfa_location *);
489
490 /* How to start an assembler comment.  */
491 #ifndef ASM_COMMENT_START
492 #define ASM_COMMENT_START ";#"
493 #endif
494
495 /* Data and reference forms for relocatable data.  */
496 #define DW_FORM_data (DWARF_OFFSET_SIZE == 8 ? DW_FORM_data8 : DW_FORM_data4)
497 #define DW_FORM_ref (DWARF_OFFSET_SIZE == 8 ? DW_FORM_ref8 : DW_FORM_ref4)
498
499 #ifndef DEBUG_FRAME_SECTION
500 #define DEBUG_FRAME_SECTION     ".debug_frame"
501 #endif
502
503 #ifndef FUNC_BEGIN_LABEL
504 #define FUNC_BEGIN_LABEL        "LFB"
505 #endif
506
507 #ifndef FUNC_END_LABEL
508 #define FUNC_END_LABEL          "LFE"
509 #endif
510
511 #ifndef FRAME_BEGIN_LABEL
512 #define FRAME_BEGIN_LABEL       "Lframe"
513 #endif
514 #define CIE_AFTER_SIZE_LABEL    "LSCIE"
515 #define CIE_END_LABEL           "LECIE"
516 #define FDE_LABEL               "LSFDE"
517 #define FDE_AFTER_SIZE_LABEL    "LASFDE"
518 #define FDE_END_LABEL           "LEFDE"
519 #define LINE_NUMBER_BEGIN_LABEL "LSLT"
520 #define LINE_NUMBER_END_LABEL   "LELT"
521 #define LN_PROLOG_AS_LABEL      "LASLTP"
522 #define LN_PROLOG_END_LABEL     "LELTP"
523 #define DIE_LABEL_PREFIX        "DW"
524
525 /* The DWARF 2 CFA column which tracks the return address.  Normally this
526    is the column for PC, or the first column after all of the hard
527    registers.  */
528 #ifndef DWARF_FRAME_RETURN_COLUMN
529 #ifdef PC_REGNUM
530 #define DWARF_FRAME_RETURN_COLUMN       DWARF_FRAME_REGNUM (PC_REGNUM)
531 #else
532 #define DWARF_FRAME_RETURN_COLUMN       DWARF_FRAME_REGISTERS
533 #endif
534 #endif
535
536 /* The mapping from gcc register number to DWARF 2 CFA column number.  By
537    default, we just provide columns for all registers.  */
538 #ifndef DWARF_FRAME_REGNUM
539 #define DWARF_FRAME_REGNUM(REG) DBX_REGISTER_NUMBER (REG)
540 #endif
541 \f
542 /* Hook used by __throw.  */
543
544 rtx
545 expand_builtin_dwarf_sp_column (void)
546 {
547   unsigned int dwarf_regnum = DWARF_FRAME_REGNUM (STACK_POINTER_REGNUM);
548   return GEN_INT (DWARF2_FRAME_REG_OUT (dwarf_regnum, 1));
549 }
550
551 /* Return a pointer to a copy of the section string name S with all
552    attributes stripped off, and an asterisk prepended (for assemble_name).  */
553
554 static inline char *
555 stripattributes (const char *s)
556 {
557   char *stripped = XNEWVEC (char, strlen (s) + 2);
558   char *p = stripped;
559
560   *p++ = '*';
561
562   while (*s && *s != ',')
563     *p++ = *s++;
564
565   *p = '\0';
566   return stripped;
567 }
568
569 /* MEM is a memory reference for the register size table, each element of
570    which has mode MODE.  Initialize column C as a return address column.  */
571
572 static void
573 init_return_column_size (enum machine_mode mode, rtx mem, unsigned int c)
574 {
575   HOST_WIDE_INT offset = c * GET_MODE_SIZE (mode);
576   HOST_WIDE_INT size = GET_MODE_SIZE (Pmode);
577   emit_move_insn (adjust_address (mem, mode, offset), GEN_INT (size));
578 }
579
580 /* Divide OFF by DWARF_CIE_DATA_ALIGNMENT, asserting no remainder.  */
581
582 static inline HOST_WIDE_INT
583 div_data_align (HOST_WIDE_INT off)
584 {
585   HOST_WIDE_INT r = off / DWARF_CIE_DATA_ALIGNMENT;
586   gcc_assert (r * DWARF_CIE_DATA_ALIGNMENT == off);
587   return r;
588 }
589
590 /* Return true if we need a signed version of a given opcode
591    (e.g. DW_CFA_offset_extended_sf vs DW_CFA_offset_extended).  */
592
593 static inline bool
594 need_data_align_sf_opcode (HOST_WIDE_INT off)
595 {
596   return DWARF_CIE_DATA_ALIGNMENT < 0 ? off > 0 : off < 0;
597 }
598
599 /* Generate code to initialize the register size table.  */
600
601 void
602 expand_builtin_init_dwarf_reg_sizes (tree address)
603 {
604   unsigned int i;
605   enum machine_mode mode = TYPE_MODE (char_type_node);
606   rtx addr = expand_normal (address);
607   rtx mem = gen_rtx_MEM (BLKmode, addr);
608   bool wrote_return_column = false;
609
610   for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
611     {
612       int rnum = DWARF2_FRAME_REG_OUT (DWARF_FRAME_REGNUM (i), 1);
613
614       if (rnum < DWARF_FRAME_REGISTERS)
615         {
616           HOST_WIDE_INT offset = rnum * GET_MODE_SIZE (mode);
617           enum machine_mode save_mode = reg_raw_mode[i];
618           HOST_WIDE_INT size;
619
620           if (HARD_REGNO_CALL_PART_CLOBBERED (i, save_mode))
621             save_mode = choose_hard_reg_mode (i, 1, true);
622           if (DWARF_FRAME_REGNUM (i) == DWARF_FRAME_RETURN_COLUMN)
623             {
624               if (save_mode == VOIDmode)
625                 continue;
626               wrote_return_column = true;
627             }
628           size = GET_MODE_SIZE (save_mode);
629           if (offset < 0)
630             continue;
631
632           emit_move_insn (adjust_address (mem, mode, offset),
633                           gen_int_mode (size, mode));
634         }
635     }
636
637   if (!wrote_return_column)
638     init_return_column_size (mode, mem, DWARF_FRAME_RETURN_COLUMN);
639
640 #ifdef DWARF_ALT_FRAME_RETURN_COLUMN
641   init_return_column_size (mode, mem, DWARF_ALT_FRAME_RETURN_COLUMN);
642 #endif
643
644   targetm.init_dwarf_reg_sizes_extra (address);
645 }
646
647 /* Convert a DWARF call frame info. operation to its string name */
648
649 static const char *
650 dwarf_cfi_name (unsigned int cfi_opc)
651 {
652   switch (cfi_opc)
653     {
654     case DW_CFA_advance_loc:
655       return "DW_CFA_advance_loc";
656     case DW_CFA_offset:
657       return "DW_CFA_offset";
658     case DW_CFA_restore:
659       return "DW_CFA_restore";
660     case DW_CFA_nop:
661       return "DW_CFA_nop";
662     case DW_CFA_set_loc:
663       return "DW_CFA_set_loc";
664     case DW_CFA_advance_loc1:
665       return "DW_CFA_advance_loc1";
666     case DW_CFA_advance_loc2:
667       return "DW_CFA_advance_loc2";
668     case DW_CFA_advance_loc4:
669       return "DW_CFA_advance_loc4";
670     case DW_CFA_offset_extended:
671       return "DW_CFA_offset_extended";
672     case DW_CFA_restore_extended:
673       return "DW_CFA_restore_extended";
674     case DW_CFA_undefined:
675       return "DW_CFA_undefined";
676     case DW_CFA_same_value:
677       return "DW_CFA_same_value";
678     case DW_CFA_register:
679       return "DW_CFA_register";
680     case DW_CFA_remember_state:
681       return "DW_CFA_remember_state";
682     case DW_CFA_restore_state:
683       return "DW_CFA_restore_state";
684     case DW_CFA_def_cfa:
685       return "DW_CFA_def_cfa";
686     case DW_CFA_def_cfa_register:
687       return "DW_CFA_def_cfa_register";
688     case DW_CFA_def_cfa_offset:
689       return "DW_CFA_def_cfa_offset";
690
691     /* DWARF 3 */
692     case DW_CFA_def_cfa_expression:
693       return "DW_CFA_def_cfa_expression";
694     case DW_CFA_expression:
695       return "DW_CFA_expression";
696     case DW_CFA_offset_extended_sf:
697       return "DW_CFA_offset_extended_sf";
698     case DW_CFA_def_cfa_sf:
699       return "DW_CFA_def_cfa_sf";
700     case DW_CFA_def_cfa_offset_sf:
701       return "DW_CFA_def_cfa_offset_sf";
702
703     /* SGI/MIPS specific */
704     case DW_CFA_MIPS_advance_loc8:
705       return "DW_CFA_MIPS_advance_loc8";
706
707     /* GNU extensions */
708     case DW_CFA_GNU_window_save:
709       return "DW_CFA_GNU_window_save";
710     case DW_CFA_GNU_args_size:
711       return "DW_CFA_GNU_args_size";
712     case DW_CFA_GNU_negative_offset_extended:
713       return "DW_CFA_GNU_negative_offset_extended";
714
715     default:
716       return "DW_CFA_<unknown>";
717     }
718 }
719
720 /* Return a pointer to a newly allocated Call Frame Instruction.  */
721
722 static inline dw_cfi_ref
723 new_cfi (void)
724 {
725   dw_cfi_ref cfi = GGC_NEW (dw_cfi_node);
726
727   cfi->dw_cfi_next = NULL;
728   cfi->dw_cfi_oprnd1.dw_cfi_reg_num = 0;
729   cfi->dw_cfi_oprnd2.dw_cfi_reg_num = 0;
730
731   return cfi;
732 }
733
734 /* Add a Call Frame Instruction to list of instructions.  */
735
736 static inline void
737 add_cfi (dw_cfi_ref *list_head, dw_cfi_ref cfi)
738 {
739   dw_cfi_ref *p;
740   dw_fde_ref fde = current_fde ();
741
742   /* When DRAP is used, CFA is defined with an expression.  Redefine
743      CFA may lead to a different CFA value.   */
744   /* ??? Of course, this heuristic fails when we're annotating epilogues,
745      because of course we'll always want to redefine the CFA back to the
746      stack pointer on the way out.  Where should we move this check?  */
747   if (0 && fde && fde->drap_reg != INVALID_REGNUM)
748     switch (cfi->dw_cfi_opc)
749       {
750         case DW_CFA_def_cfa_register:
751         case DW_CFA_def_cfa_offset:
752         case DW_CFA_def_cfa_offset_sf:
753         case DW_CFA_def_cfa:
754         case DW_CFA_def_cfa_sf:
755           gcc_unreachable ();
756
757         default:
758           break;
759       }
760
761   /* Find the end of the chain.  */
762   for (p = list_head; (*p) != NULL; p = &(*p)->dw_cfi_next)
763     ;
764
765   *p = cfi;
766 }
767
768 /* Generate a new label for the CFI info to refer to.  FORCE is true
769    if a label needs to be output even when using .cfi_* directives.  */
770
771 char *
772 dwarf2out_cfi_label (bool force)
773 {
774   static char label[20];
775
776   if (!force && dwarf2out_do_cfi_asm ())
777     {
778       /* In this case, we will be emitting the asm directive instead of
779          the label, so just return a placeholder to keep the rest of the
780          interfaces happy.  */
781       strcpy (label, "<do not output>");
782     }
783   else
784     {
785       ASM_GENERATE_INTERNAL_LABEL (label, "LCFI", dwarf2out_cfi_label_num++);
786       ASM_OUTPUT_LABEL (asm_out_file, label);
787     }
788
789   return label;
790 }
791
792 /* True if remember_state should be emitted before following CFI directive.  */
793 static bool emit_cfa_remember;
794
795 /* Add CFI to the current fde at the PC value indicated by LABEL if specified,
796    or to the CIE if LABEL is NULL.  */
797
798 static void
799 add_fde_cfi (const char *label, dw_cfi_ref cfi)
800 {
801   dw_cfi_ref *list_head;
802
803   if (emit_cfa_remember)
804     {
805       dw_cfi_ref cfi_remember;
806
807       /* Emit the state save.  */
808       emit_cfa_remember = false;
809       cfi_remember = new_cfi ();
810       cfi_remember->dw_cfi_opc = DW_CFA_remember_state;
811       add_fde_cfi (label, cfi_remember);
812     }
813
814   list_head = &cie_cfi_head;
815
816   if (dwarf2out_do_cfi_asm ())
817     {
818       if (label)
819         {
820           dw_fde_ref fde = current_fde ();
821
822           gcc_assert (fde != NULL);
823
824           /* We still have to add the cfi to the list so that lookup_cfa
825              works later on.  When -g2 and above we even need to force
826              emitting of CFI labels and add to list a DW_CFA_set_loc for
827              convert_cfa_to_fb_loc_list purposes.  If we're generating
828              DWARF3 output we use DW_OP_call_frame_cfa and so don't use
829              convert_cfa_to_fb_loc_list.  */
830           if (dwarf_version == 2
831               && debug_info_level > DINFO_LEVEL_TERSE
832               && (write_symbols == DWARF2_DEBUG
833                   || write_symbols == VMS_AND_DWARF2_DEBUG))
834             {
835               switch (cfi->dw_cfi_opc)
836                 {
837                 case DW_CFA_def_cfa_offset:
838                 case DW_CFA_def_cfa_offset_sf:
839                 case DW_CFA_def_cfa_register:
840                 case DW_CFA_def_cfa:
841                 case DW_CFA_def_cfa_sf:
842                 case DW_CFA_def_cfa_expression:
843                 case DW_CFA_restore_state:
844                   if (*label == 0 || strcmp (label, "<do not output>") == 0)
845                     label = dwarf2out_cfi_label (true);
846
847                   if (fde->dw_fde_current_label == NULL
848                       || strcmp (label, fde->dw_fde_current_label) != 0)
849                     {
850                       dw_cfi_ref xcfi;
851
852                       label = xstrdup (label);
853
854                       /* Set the location counter to the new label.  */
855                       xcfi = new_cfi ();
856                       /* It doesn't metter whether DW_CFA_set_loc
857                          or DW_CFA_advance_loc4 is added here, those aren't
858                          emitted into assembly, only looked up by
859                          convert_cfa_to_fb_loc_list.  */
860                       xcfi->dw_cfi_opc = DW_CFA_set_loc;
861                       xcfi->dw_cfi_oprnd1.dw_cfi_addr = label;
862                       add_cfi (&fde->dw_fde_cfi, xcfi);
863                       fde->dw_fde_current_label = label;
864                     }
865                   break;
866                 default:
867                   break;
868                 }
869             }
870
871           output_cfi_directive (cfi);
872
873           list_head = &fde->dw_fde_cfi;
874         }
875       /* ??? If this is a CFI for the CIE, we don't emit.  This
876          assumes that the standard CIE contents that the assembler
877          uses matches the standard CIE contents that the compiler
878          uses.  This is probably a bad assumption.  I'm not quite
879          sure how to address this for now.  */
880     }
881   else if (label)
882     {
883       dw_fde_ref fde = current_fde ();
884
885       gcc_assert (fde != NULL);
886
887       if (*label == 0)
888         label = dwarf2out_cfi_label (false);
889
890       if (fde->dw_fde_current_label == NULL
891           || strcmp (label, fde->dw_fde_current_label) != 0)
892         {
893           dw_cfi_ref xcfi;
894
895           label = xstrdup (label);
896
897           /* Set the location counter to the new label.  */
898           xcfi = new_cfi ();
899           /* If we have a current label, advance from there, otherwise
900              set the location directly using set_loc.  */
901           xcfi->dw_cfi_opc = fde->dw_fde_current_label
902                              ? DW_CFA_advance_loc4
903                              : DW_CFA_set_loc;
904           xcfi->dw_cfi_oprnd1.dw_cfi_addr = label;
905           add_cfi (&fde->dw_fde_cfi, xcfi);
906
907           fde->dw_fde_current_label = label;
908         }
909
910       list_head = &fde->dw_fde_cfi;
911     }
912
913   add_cfi (list_head, cfi);
914 }
915
916 /* Subroutine of lookup_cfa.  */
917
918 static void
919 lookup_cfa_1 (dw_cfi_ref cfi, dw_cfa_location *loc, dw_cfa_location *remember)
920 {
921   switch (cfi->dw_cfi_opc)
922     {
923     case DW_CFA_def_cfa_offset:
924     case DW_CFA_def_cfa_offset_sf:
925       loc->offset = cfi->dw_cfi_oprnd1.dw_cfi_offset;
926       break;
927     case DW_CFA_def_cfa_register:
928       loc->reg = cfi->dw_cfi_oprnd1.dw_cfi_reg_num;
929       break;
930     case DW_CFA_def_cfa:
931     case DW_CFA_def_cfa_sf:
932       loc->reg = cfi->dw_cfi_oprnd1.dw_cfi_reg_num;
933       loc->offset = cfi->dw_cfi_oprnd2.dw_cfi_offset;
934       break;
935     case DW_CFA_def_cfa_expression:
936       get_cfa_from_loc_descr (loc, cfi->dw_cfi_oprnd1.dw_cfi_loc);
937       break;
938
939     case DW_CFA_remember_state:
940       gcc_assert (!remember->in_use);
941       *remember = *loc;
942       remember->in_use = 1;
943       break;
944     case DW_CFA_restore_state:
945       gcc_assert (remember->in_use);
946       *loc = *remember;
947       remember->in_use = 0;
948       break;
949
950     default:
951       break;
952     }
953 }
954
955 /* Find the previous value for the CFA.  */
956
957 static void
958 lookup_cfa (dw_cfa_location *loc)
959 {
960   dw_cfi_ref cfi;
961   dw_fde_ref fde;
962   dw_cfa_location remember;
963
964   memset (loc, 0, sizeof (*loc));
965   loc->reg = INVALID_REGNUM;
966   remember = *loc;
967
968   for (cfi = cie_cfi_head; cfi; cfi = cfi->dw_cfi_next)
969     lookup_cfa_1 (cfi, loc, &remember);
970
971   fde = current_fde ();
972   if (fde)
973     for (cfi = fde->dw_fde_cfi; cfi; cfi = cfi->dw_cfi_next)
974       lookup_cfa_1 (cfi, loc, &remember);
975 }
976
977 /* The current rule for calculating the DWARF2 canonical frame address.  */
978 static dw_cfa_location cfa;
979
980 /* The register used for saving registers to the stack, and its offset
981    from the CFA.  */
982 static dw_cfa_location cfa_store;
983
984 /* The current save location around an epilogue.  */
985 static dw_cfa_location cfa_remember;
986
987 /* The running total of the size of arguments pushed onto the stack.  */
988 static HOST_WIDE_INT args_size;
989
990 /* The last args_size we actually output.  */
991 static HOST_WIDE_INT old_args_size;
992
993 /* Entry point to update the canonical frame address (CFA).
994    LABEL is passed to add_fde_cfi.  The value of CFA is now to be
995    calculated from REG+OFFSET.  */
996
997 void
998 dwarf2out_def_cfa (const char *label, unsigned int reg, HOST_WIDE_INT offset)
999 {
1000   dw_cfa_location loc;
1001   loc.indirect = 0;
1002   loc.base_offset = 0;
1003   loc.reg = reg;
1004   loc.offset = offset;
1005   def_cfa_1 (label, &loc);
1006 }
1007
1008 /* Determine if two dw_cfa_location structures define the same data.  */
1009
1010 static bool
1011 cfa_equal_p (const dw_cfa_location *loc1, const dw_cfa_location *loc2)
1012 {
1013   return (loc1->reg == loc2->reg
1014           && loc1->offset == loc2->offset
1015           && loc1->indirect == loc2->indirect
1016           && (loc1->indirect == 0
1017               || loc1->base_offset == loc2->base_offset));
1018 }
1019
1020 /* This routine does the actual work.  The CFA is now calculated from
1021    the dw_cfa_location structure.  */
1022
1023 static void
1024 def_cfa_1 (const char *label, dw_cfa_location *loc_p)
1025 {
1026   dw_cfi_ref cfi;
1027   dw_cfa_location old_cfa, loc;
1028
1029   cfa = *loc_p;
1030   loc = *loc_p;
1031
1032   if (cfa_store.reg == loc.reg && loc.indirect == 0)
1033     cfa_store.offset = loc.offset;
1034
1035   loc.reg = DWARF_FRAME_REGNUM (loc.reg);
1036   lookup_cfa (&old_cfa);
1037
1038   /* If nothing changed, no need to issue any call frame instructions.  */
1039   if (cfa_equal_p (&loc, &old_cfa))
1040     return;
1041
1042   cfi = new_cfi ();
1043
1044   if (loc.reg == old_cfa.reg && !loc.indirect && !old_cfa.indirect)
1045     {
1046       /* Construct a "DW_CFA_def_cfa_offset <offset>" instruction, indicating
1047          the CFA register did not change but the offset did.  The data
1048          factoring for DW_CFA_def_cfa_offset_sf happens in output_cfi, or
1049          in the assembler via the .cfi_def_cfa_offset directive.  */
1050       if (loc.offset < 0)
1051         cfi->dw_cfi_opc = DW_CFA_def_cfa_offset_sf;
1052       else
1053         cfi->dw_cfi_opc = DW_CFA_def_cfa_offset;
1054       cfi->dw_cfi_oprnd1.dw_cfi_offset = loc.offset;
1055     }
1056
1057 #ifndef MIPS_DEBUGGING_INFO  /* SGI dbx thinks this means no offset.  */
1058   else if (loc.offset == old_cfa.offset
1059            && old_cfa.reg != INVALID_REGNUM
1060            && !loc.indirect
1061            && !old_cfa.indirect)
1062     {
1063       /* Construct a "DW_CFA_def_cfa_register <register>" instruction,
1064          indicating the CFA register has changed to <register> but the
1065          offset has not changed.  */
1066       cfi->dw_cfi_opc = DW_CFA_def_cfa_register;
1067       cfi->dw_cfi_oprnd1.dw_cfi_reg_num = loc.reg;
1068     }
1069 #endif
1070
1071   else if (loc.indirect == 0)
1072     {
1073       /* Construct a "DW_CFA_def_cfa <register> <offset>" instruction,
1074          indicating the CFA register has changed to <register> with
1075          the specified offset.  The data factoring for DW_CFA_def_cfa_sf
1076          happens in output_cfi, or in the assembler via the .cfi_def_cfa
1077          directive.  */
1078       if (loc.offset < 0)
1079         cfi->dw_cfi_opc = DW_CFA_def_cfa_sf;
1080       else
1081         cfi->dw_cfi_opc = DW_CFA_def_cfa;
1082       cfi->dw_cfi_oprnd1.dw_cfi_reg_num = loc.reg;
1083       cfi->dw_cfi_oprnd2.dw_cfi_offset = loc.offset;
1084     }
1085   else
1086     {
1087       /* Construct a DW_CFA_def_cfa_expression instruction to
1088          calculate the CFA using a full location expression since no
1089          register-offset pair is available.  */
1090       struct dw_loc_descr_struct *loc_list;
1091
1092       cfi->dw_cfi_opc = DW_CFA_def_cfa_expression;
1093       loc_list = build_cfa_loc (&loc, 0);
1094       cfi->dw_cfi_oprnd1.dw_cfi_loc = loc_list;
1095     }
1096
1097   add_fde_cfi (label, cfi);
1098 }
1099
1100 /* Add the CFI for saving a register.  REG is the CFA column number.
1101    LABEL is passed to add_fde_cfi.
1102    If SREG is -1, the register is saved at OFFSET from the CFA;
1103    otherwise it is saved in SREG.  */
1104
1105 static void
1106 reg_save (const char *label, unsigned int reg, unsigned int sreg, HOST_WIDE_INT offset)
1107 {
1108   dw_cfi_ref cfi = new_cfi ();
1109   dw_fde_ref fde = current_fde ();
1110
1111   cfi->dw_cfi_oprnd1.dw_cfi_reg_num = reg;
1112
1113   /* When stack is aligned, store REG using DW_CFA_expression with
1114      FP.  */
1115   if (fde
1116       && fde->stack_realign
1117       && sreg == INVALID_REGNUM)
1118     {
1119       cfi->dw_cfi_opc = DW_CFA_expression;
1120       cfi->dw_cfi_oprnd1.dw_cfi_reg_num = reg;
1121       cfi->dw_cfi_oprnd2.dw_cfi_loc
1122         = build_cfa_aligned_loc (offset, fde->stack_realignment);
1123     }
1124   else if (sreg == INVALID_REGNUM)
1125     {
1126       if (need_data_align_sf_opcode (offset))
1127         cfi->dw_cfi_opc = DW_CFA_offset_extended_sf;
1128       else if (reg & ~0x3f)
1129         cfi->dw_cfi_opc = DW_CFA_offset_extended;
1130       else
1131         cfi->dw_cfi_opc = DW_CFA_offset;
1132       cfi->dw_cfi_oprnd2.dw_cfi_offset = offset;
1133     }
1134   else if (sreg == reg)
1135     cfi->dw_cfi_opc = DW_CFA_same_value;
1136   else
1137     {
1138       cfi->dw_cfi_opc = DW_CFA_register;
1139       cfi->dw_cfi_oprnd2.dw_cfi_reg_num = sreg;
1140     }
1141
1142   add_fde_cfi (label, cfi);
1143 }
1144
1145 /* Add the CFI for saving a register window.  LABEL is passed to reg_save.
1146    This CFI tells the unwinder that it needs to restore the window registers
1147    from the previous frame's window save area.
1148
1149    ??? Perhaps we should note in the CIE where windows are saved (instead of
1150    assuming 0(cfa)) and what registers are in the window.  */
1151
1152 void
1153 dwarf2out_window_save (const char *label)
1154 {
1155   dw_cfi_ref cfi = new_cfi ();
1156
1157   cfi->dw_cfi_opc = DW_CFA_GNU_window_save;
1158   add_fde_cfi (label, cfi);
1159 }
1160
1161 /* Entry point for saving a register to the stack.  REG is the GCC register
1162    number.  LABEL and OFFSET are passed to reg_save.  */
1163
1164 void
1165 dwarf2out_reg_save (const char *label, unsigned int reg, HOST_WIDE_INT offset)
1166 {
1167   reg_save (label, DWARF_FRAME_REGNUM (reg), INVALID_REGNUM, offset);
1168 }
1169
1170 /* Entry point for saving the return address in the stack.
1171    LABEL and OFFSET are passed to reg_save.  */
1172
1173 void
1174 dwarf2out_return_save (const char *label, HOST_WIDE_INT offset)
1175 {
1176   reg_save (label, DWARF_FRAME_RETURN_COLUMN, INVALID_REGNUM, offset);
1177 }
1178
1179 /* Entry point for saving the return address in a register.
1180    LABEL and SREG are passed to reg_save.  */
1181
1182 void
1183 dwarf2out_return_reg (const char *label, unsigned int sreg)
1184 {
1185   reg_save (label, DWARF_FRAME_RETURN_COLUMN, DWARF_FRAME_REGNUM (sreg), 0);
1186 }
1187
1188 #ifdef DWARF2_UNWIND_INFO
1189 /* Record the initial position of the return address.  RTL is
1190    INCOMING_RETURN_ADDR_RTX.  */
1191
1192 static void
1193 initial_return_save (rtx rtl)
1194 {
1195   unsigned int reg = INVALID_REGNUM;
1196   HOST_WIDE_INT offset = 0;
1197
1198   switch (GET_CODE (rtl))
1199     {
1200     case REG:
1201       /* RA is in a register.  */
1202       reg = DWARF_FRAME_REGNUM (REGNO (rtl));
1203       break;
1204
1205     case MEM:
1206       /* RA is on the stack.  */
1207       rtl = XEXP (rtl, 0);
1208       switch (GET_CODE (rtl))
1209         {
1210         case REG:
1211           gcc_assert (REGNO (rtl) == STACK_POINTER_REGNUM);
1212           offset = 0;
1213           break;
1214
1215         case PLUS:
1216           gcc_assert (REGNO (XEXP (rtl, 0)) == STACK_POINTER_REGNUM);
1217           offset = INTVAL (XEXP (rtl, 1));
1218           break;
1219
1220         case MINUS:
1221           gcc_assert (REGNO (XEXP (rtl, 0)) == STACK_POINTER_REGNUM);
1222           offset = -INTVAL (XEXP (rtl, 1));
1223           break;
1224
1225         default:
1226           gcc_unreachable ();
1227         }
1228
1229       break;
1230
1231     case PLUS:
1232       /* The return address is at some offset from any value we can
1233          actually load.  For instance, on the SPARC it is in %i7+8. Just
1234          ignore the offset for now; it doesn't matter for unwinding frames.  */
1235       gcc_assert (CONST_INT_P (XEXP (rtl, 1)));
1236       initial_return_save (XEXP (rtl, 0));
1237       return;
1238
1239     default:
1240       gcc_unreachable ();
1241     }
1242
1243   if (reg != DWARF_FRAME_RETURN_COLUMN)
1244     reg_save (NULL, DWARF_FRAME_RETURN_COLUMN, reg, offset - cfa.offset);
1245 }
1246 #endif
1247
1248 /* Given a SET, calculate the amount of stack adjustment it
1249    contains.  */
1250
1251 static HOST_WIDE_INT
1252 stack_adjust_offset (const_rtx pattern, HOST_WIDE_INT cur_args_size,
1253                      HOST_WIDE_INT cur_offset)
1254 {
1255   const_rtx src = SET_SRC (pattern);
1256   const_rtx dest = SET_DEST (pattern);
1257   HOST_WIDE_INT offset = 0;
1258   enum rtx_code code;
1259
1260   if (dest == stack_pointer_rtx)
1261     {
1262       code = GET_CODE (src);
1263
1264       /* Assume (set (reg sp) (reg whatever)) sets args_size
1265          level to 0.  */
1266       if (code == REG && src != stack_pointer_rtx)
1267         {
1268           offset = -cur_args_size;
1269 #ifndef STACK_GROWS_DOWNWARD
1270           offset = -offset;
1271 #endif
1272           return offset - cur_offset;
1273         }
1274
1275       if (! (code == PLUS || code == MINUS)
1276           || XEXP (src, 0) != stack_pointer_rtx
1277           || !CONST_INT_P (XEXP (src, 1)))
1278         return 0;
1279
1280       /* (set (reg sp) (plus (reg sp) (const_int))) */
1281       offset = INTVAL (XEXP (src, 1));
1282       if (code == PLUS)
1283         offset = -offset;
1284       return offset;
1285     }
1286
1287   if (MEM_P (src) && !MEM_P (dest))
1288     dest = src;
1289   if (MEM_P (dest))
1290     {
1291       /* (set (mem (pre_dec (reg sp))) (foo)) */
1292       src = XEXP (dest, 0);
1293       code = GET_CODE (src);
1294
1295       switch (code)
1296         {
1297         case PRE_MODIFY:
1298         case POST_MODIFY:
1299           if (XEXP (src, 0) == stack_pointer_rtx)
1300             {
1301               rtx val = XEXP (XEXP (src, 1), 1);
1302               /* We handle only adjustments by constant amount.  */
1303               gcc_assert (GET_CODE (XEXP (src, 1)) == PLUS
1304                           && CONST_INT_P (val));
1305               offset = -INTVAL (val);
1306               break;
1307             }
1308           return 0;
1309
1310         case PRE_DEC:
1311         case POST_DEC:
1312           if (XEXP (src, 0) == stack_pointer_rtx)
1313             {
1314               offset = GET_MODE_SIZE (GET_MODE (dest));
1315               break;
1316             }
1317           return 0;
1318
1319         case PRE_INC:
1320         case POST_INC:
1321           if (XEXP (src, 0) == stack_pointer_rtx)
1322             {
1323               offset = -GET_MODE_SIZE (GET_MODE (dest));
1324               break;
1325             }
1326           return 0;
1327
1328         default:
1329           return 0;
1330         }
1331     }
1332   else
1333     return 0;
1334
1335   return offset;
1336 }
1337
1338 /* Precomputed args_size for CODE_LABELs and BARRIERs preceeding them,
1339    indexed by INSN_UID.  */
1340
1341 static HOST_WIDE_INT *barrier_args_size;
1342
1343 /* Helper function for compute_barrier_args_size.  Handle one insn.  */
1344
1345 static HOST_WIDE_INT
1346 compute_barrier_args_size_1 (rtx insn, HOST_WIDE_INT cur_args_size,
1347                              VEC (rtx, heap) **next)
1348 {
1349   HOST_WIDE_INT offset = 0;
1350   int i;
1351
1352   if (! RTX_FRAME_RELATED_P (insn))
1353     {
1354       if (prologue_epilogue_contains (insn))
1355         /* Nothing */;
1356       else if (GET_CODE (PATTERN (insn)) == SET)
1357         offset = stack_adjust_offset (PATTERN (insn), cur_args_size, 0);
1358       else if (GET_CODE (PATTERN (insn)) == PARALLEL
1359                || GET_CODE (PATTERN (insn)) == SEQUENCE)
1360         {
1361           /* There may be stack adjustments inside compound insns.  Search
1362              for them.  */
1363           for (i = XVECLEN (PATTERN (insn), 0) - 1; i >= 0; i--)
1364             if (GET_CODE (XVECEXP (PATTERN (insn), 0, i)) == SET)
1365               offset += stack_adjust_offset (XVECEXP (PATTERN (insn), 0, i),
1366                                              cur_args_size, offset);
1367         }
1368     }
1369   else
1370     {
1371       rtx expr = find_reg_note (insn, REG_FRAME_RELATED_EXPR, NULL_RTX);
1372
1373       if (expr)
1374         {
1375           expr = XEXP (expr, 0);
1376           if (GET_CODE (expr) == PARALLEL
1377               || GET_CODE (expr) == SEQUENCE)
1378             for (i = 1; i < XVECLEN (expr, 0); i++)
1379               {
1380                 rtx elem = XVECEXP (expr, 0, i);
1381
1382                 if (GET_CODE (elem) == SET && !RTX_FRAME_RELATED_P (elem))
1383                   offset += stack_adjust_offset (elem, cur_args_size, offset);
1384               }
1385         }
1386     }
1387
1388 #ifndef STACK_GROWS_DOWNWARD
1389   offset = -offset;
1390 #endif
1391
1392   cur_args_size += offset;
1393   if (cur_args_size < 0)
1394     cur_args_size = 0;
1395
1396   if (JUMP_P (insn))
1397     {
1398       rtx dest = JUMP_LABEL (insn);
1399
1400       if (dest)
1401         {
1402           if (barrier_args_size [INSN_UID (dest)] < 0)
1403             {
1404               barrier_args_size [INSN_UID (dest)] = cur_args_size;
1405               VEC_safe_push (rtx, heap, *next, dest);
1406             }
1407         }
1408     }
1409
1410   return cur_args_size;
1411 }
1412
1413 /* Walk the whole function and compute args_size on BARRIERs.  */
1414
1415 static void
1416 compute_barrier_args_size (void)
1417 {
1418   int max_uid = get_max_uid (), i;
1419   rtx insn;
1420   VEC (rtx, heap) *worklist, *next, *tmp;
1421
1422   barrier_args_size = XNEWVEC (HOST_WIDE_INT, max_uid);
1423   for (i = 0; i < max_uid; i++)
1424     barrier_args_size[i] = -1;
1425
1426   worklist = VEC_alloc (rtx, heap, 20);
1427   next = VEC_alloc (rtx, heap, 20);
1428   insn = get_insns ();
1429   barrier_args_size[INSN_UID (insn)] = 0;
1430   VEC_quick_push (rtx, worklist, insn);
1431   for (;;)
1432     {
1433       while (!VEC_empty (rtx, worklist))
1434         {
1435           rtx prev, body, first_insn;
1436           HOST_WIDE_INT cur_args_size;
1437
1438           first_insn = insn = VEC_pop (rtx, worklist);
1439           cur_args_size = barrier_args_size[INSN_UID (insn)];
1440           prev = prev_nonnote_insn (insn);
1441           if (prev && BARRIER_P (prev))
1442             barrier_args_size[INSN_UID (prev)] = cur_args_size;
1443
1444           for (; insn; insn = NEXT_INSN (insn))
1445             {
1446               if (INSN_DELETED_P (insn) || NOTE_P (insn))
1447                 continue;
1448               if (BARRIER_P (insn))
1449                 break;
1450
1451               if (LABEL_P (insn))
1452                 {
1453                   if (insn == first_insn)
1454                     continue;
1455                   else if (barrier_args_size[INSN_UID (insn)] < 0)
1456                     {
1457                       barrier_args_size[INSN_UID (insn)] = cur_args_size;
1458                       continue;
1459                     }
1460                   else
1461                     {
1462                       /* The insns starting with this label have been
1463                          already scanned or are in the worklist.  */
1464                       break;
1465                     }
1466                 }
1467
1468               body = PATTERN (insn);
1469               if (GET_CODE (body) == SEQUENCE)
1470                 {
1471                   HOST_WIDE_INT dest_args_size = cur_args_size;
1472                   for (i = 1; i < XVECLEN (body, 0); i++)
1473                     if (INSN_ANNULLED_BRANCH_P (XVECEXP (body, 0, 0))
1474                         && INSN_FROM_TARGET_P (XVECEXP (body, 0, i)))
1475                       dest_args_size
1476                         = compute_barrier_args_size_1 (XVECEXP (body, 0, i),
1477                                                        dest_args_size, &next);
1478                     else
1479                       cur_args_size
1480                         = compute_barrier_args_size_1 (XVECEXP (body, 0, i),
1481                                                        cur_args_size, &next);
1482
1483                   if (INSN_ANNULLED_BRANCH_P (XVECEXP (body, 0, 0)))
1484                     compute_barrier_args_size_1 (XVECEXP (body, 0, 0),
1485                                                  dest_args_size, &next);
1486                   else
1487                     cur_args_size
1488                       = compute_barrier_args_size_1 (XVECEXP (body, 0, 0),
1489                                                      cur_args_size, &next);
1490                 }
1491               else
1492                 cur_args_size
1493                   = compute_barrier_args_size_1 (insn, cur_args_size, &next);
1494             }
1495         }
1496
1497       if (VEC_empty (rtx, next))
1498         break;
1499
1500       /* Swap WORKLIST with NEXT and truncate NEXT for next iteration.  */
1501       tmp = next;
1502       next = worklist;
1503       worklist = tmp;
1504       VEC_truncate (rtx, next, 0);
1505     }
1506
1507   VEC_free (rtx, heap, worklist);
1508   VEC_free (rtx, heap, next);
1509 }
1510
1511 /* Add a CFI to update the running total of the size of arguments
1512    pushed onto the stack.  */
1513
1514 static void
1515 dwarf2out_args_size (const char *label, HOST_WIDE_INT size)
1516 {
1517   dw_cfi_ref cfi;
1518
1519   if (size == old_args_size)
1520     return;
1521
1522   old_args_size = size;
1523
1524   cfi = new_cfi ();
1525   cfi->dw_cfi_opc = DW_CFA_GNU_args_size;
1526   cfi->dw_cfi_oprnd1.dw_cfi_offset = size;
1527   add_fde_cfi (label, cfi);
1528 }
1529
1530 /* Record a stack adjustment of OFFSET bytes.  */
1531
1532 static void
1533 dwarf2out_stack_adjust (HOST_WIDE_INT offset, const char *label)
1534 {
1535   if (cfa.reg == STACK_POINTER_REGNUM)
1536     cfa.offset += offset;
1537
1538   if (cfa_store.reg == STACK_POINTER_REGNUM)
1539     cfa_store.offset += offset;
1540
1541   if (ACCUMULATE_OUTGOING_ARGS)
1542     return;
1543
1544 #ifndef STACK_GROWS_DOWNWARD
1545   offset = -offset;
1546 #endif
1547
1548   args_size += offset;
1549   if (args_size < 0)
1550     args_size = 0;
1551
1552   def_cfa_1 (label, &cfa);
1553   if (flag_asynchronous_unwind_tables)
1554     dwarf2out_args_size (label, args_size);
1555 }
1556
1557 /* Check INSN to see if it looks like a push or a stack adjustment, and
1558    make a note of it if it does.  EH uses this information to find out
1559    how much extra space it needs to pop off the stack.  */
1560
1561 static void
1562 dwarf2out_notice_stack_adjust (rtx insn, bool after_p)
1563 {
1564   HOST_WIDE_INT offset;
1565   const char *label;
1566   int i;
1567
1568   /* Don't handle epilogues at all.  Certainly it would be wrong to do so
1569      with this function.  Proper support would require all frame-related
1570      insns to be marked, and to be able to handle saving state around
1571      epilogues textually in the middle of the function.  */
1572   if (prologue_epilogue_contains (insn))
1573     return;
1574
1575   /* If INSN is an instruction from target of an annulled branch, the
1576      effects are for the target only and so current argument size
1577      shouldn't change at all.  */
1578   if (final_sequence
1579       && INSN_ANNULLED_BRANCH_P (XVECEXP (final_sequence, 0, 0))
1580       && INSN_FROM_TARGET_P (insn))
1581     return;
1582
1583   /* If only calls can throw, and we have a frame pointer,
1584      save up adjustments until we see the CALL_INSN.  */
1585   if (!flag_asynchronous_unwind_tables && cfa.reg != STACK_POINTER_REGNUM)
1586     {
1587       if (CALL_P (insn) && !after_p)
1588         {
1589           /* Extract the size of the args from the CALL rtx itself.  */
1590           insn = PATTERN (insn);
1591           if (GET_CODE (insn) == PARALLEL)
1592             insn = XVECEXP (insn, 0, 0);
1593           if (GET_CODE (insn) == SET)
1594             insn = SET_SRC (insn);
1595           gcc_assert (GET_CODE (insn) == CALL);
1596           dwarf2out_args_size ("", INTVAL (XEXP (insn, 1)));
1597         }
1598       return;
1599     }
1600
1601   if (CALL_P (insn) && !after_p)
1602     {
1603       if (!flag_asynchronous_unwind_tables)
1604         dwarf2out_args_size ("", args_size);
1605       return;
1606     }
1607   else if (BARRIER_P (insn))
1608     {
1609       /* Don't call compute_barrier_args_size () if the only
1610          BARRIER is at the end of function.  */
1611       if (barrier_args_size == NULL && next_nonnote_insn (insn))
1612         compute_barrier_args_size ();
1613       if (barrier_args_size == NULL)
1614         offset = 0;
1615       else
1616         {
1617           offset = barrier_args_size[INSN_UID (insn)];
1618           if (offset < 0)
1619             offset = 0;
1620         }
1621
1622       offset -= args_size;
1623 #ifndef STACK_GROWS_DOWNWARD
1624       offset = -offset;
1625 #endif
1626     }
1627   else if (GET_CODE (PATTERN (insn)) == SET)
1628     offset = stack_adjust_offset (PATTERN (insn), args_size, 0);
1629   else if (GET_CODE (PATTERN (insn)) == PARALLEL
1630            || GET_CODE (PATTERN (insn)) == SEQUENCE)
1631     {
1632       /* There may be stack adjustments inside compound insns.  Search
1633          for them.  */
1634       for (offset = 0, i = XVECLEN (PATTERN (insn), 0) - 1; i >= 0; i--)
1635         if (GET_CODE (XVECEXP (PATTERN (insn), 0, i)) == SET)
1636           offset += stack_adjust_offset (XVECEXP (PATTERN (insn), 0, i),
1637                                          args_size, offset);
1638     }
1639   else
1640     return;
1641
1642   if (offset == 0)
1643     return;
1644
1645   label = dwarf2out_cfi_label (false);
1646   dwarf2out_stack_adjust (offset, label);
1647 }
1648
1649 #endif
1650
1651 /* We delay emitting a register save until either (a) we reach the end
1652    of the prologue or (b) the register is clobbered.  This clusters
1653    register saves so that there are fewer pc advances.  */
1654
1655 struct GTY(()) queued_reg_save {
1656   struct queued_reg_save *next;
1657   rtx reg;
1658   HOST_WIDE_INT cfa_offset;
1659   rtx saved_reg;
1660 };
1661
1662 static GTY(()) struct queued_reg_save *queued_reg_saves;
1663
1664 /* The caller's ORIG_REG is saved in SAVED_IN_REG.  */
1665 struct GTY(()) reg_saved_in_data {
1666   rtx orig_reg;
1667   rtx saved_in_reg;
1668 };
1669
1670 /* A list of registers saved in other registers.
1671    The list intentionally has a small maximum capacity of 4; if your
1672    port needs more than that, you might consider implementing a
1673    more efficient data structure.  */
1674 static GTY(()) struct reg_saved_in_data regs_saved_in_regs[4];
1675 static GTY(()) size_t num_regs_saved_in_regs;
1676
1677 #if defined (DWARF2_DEBUGGING_INFO) || defined (DWARF2_UNWIND_INFO)
1678 static const char *last_reg_save_label;
1679
1680 /* Add an entry to QUEUED_REG_SAVES saying that REG is now saved at
1681    SREG, or if SREG is NULL then it is saved at OFFSET to the CFA.  */
1682
1683 static void
1684 queue_reg_save (const char *label, rtx reg, rtx sreg, HOST_WIDE_INT offset)
1685 {
1686   struct queued_reg_save *q;
1687
1688   /* Duplicates waste space, but it's also necessary to remove them
1689      for correctness, since the queue gets output in reverse
1690      order.  */
1691   for (q = queued_reg_saves; q != NULL; q = q->next)
1692     if (REGNO (q->reg) == REGNO (reg))
1693       break;
1694
1695   if (q == NULL)
1696     {
1697       q = GGC_NEW (struct queued_reg_save);
1698       q->next = queued_reg_saves;
1699       queued_reg_saves = q;
1700     }
1701
1702   q->reg = reg;
1703   q->cfa_offset = offset;
1704   q->saved_reg = sreg;
1705
1706   last_reg_save_label = label;
1707 }
1708
1709 /* Output all the entries in QUEUED_REG_SAVES.  */
1710
1711 static void
1712 flush_queued_reg_saves (void)
1713 {
1714   struct queued_reg_save *q;
1715
1716   for (q = queued_reg_saves; q; q = q->next)
1717     {
1718       size_t i;
1719       unsigned int reg, sreg;
1720
1721       for (i = 0; i < num_regs_saved_in_regs; i++)
1722         if (REGNO (regs_saved_in_regs[i].orig_reg) == REGNO (q->reg))
1723           break;
1724       if (q->saved_reg && i == num_regs_saved_in_regs)
1725         {
1726           gcc_assert (i != ARRAY_SIZE (regs_saved_in_regs));
1727           num_regs_saved_in_regs++;
1728         }
1729       if (i != num_regs_saved_in_regs)
1730         {
1731           regs_saved_in_regs[i].orig_reg = q->reg;
1732           regs_saved_in_regs[i].saved_in_reg = q->saved_reg;
1733         }
1734
1735       reg = DWARF_FRAME_REGNUM (REGNO (q->reg));
1736       if (q->saved_reg)
1737         sreg = DWARF_FRAME_REGNUM (REGNO (q->saved_reg));
1738       else
1739         sreg = INVALID_REGNUM;
1740       reg_save (last_reg_save_label, reg, sreg, q->cfa_offset);
1741     }
1742
1743   queued_reg_saves = NULL;
1744   last_reg_save_label = NULL;
1745 }
1746
1747 /* Does INSN clobber any register which QUEUED_REG_SAVES lists a saved
1748    location for?  Or, does it clobber a register which we've previously
1749    said that some other register is saved in, and for which we now
1750    have a new location for?  */
1751
1752 static bool
1753 clobbers_queued_reg_save (const_rtx insn)
1754 {
1755   struct queued_reg_save *q;
1756
1757   for (q = queued_reg_saves; q; q = q->next)
1758     {
1759       size_t i;
1760       if (modified_in_p (q->reg, insn))
1761         return true;
1762       for (i = 0; i < num_regs_saved_in_regs; i++)
1763         if (REGNO (q->reg) == REGNO (regs_saved_in_regs[i].orig_reg)
1764             && modified_in_p (regs_saved_in_regs[i].saved_in_reg, insn))
1765           return true;
1766     }
1767
1768   return false;
1769 }
1770
1771 /* Entry point for saving the first register into the second.  */
1772
1773 void
1774 dwarf2out_reg_save_reg (const char *label, rtx reg, rtx sreg)
1775 {
1776   size_t i;
1777   unsigned int regno, sregno;
1778
1779   for (i = 0; i < num_regs_saved_in_regs; i++)
1780     if (REGNO (regs_saved_in_regs[i].orig_reg) == REGNO (reg))
1781       break;
1782   if (i == num_regs_saved_in_regs)
1783     {
1784       gcc_assert (i != ARRAY_SIZE (regs_saved_in_regs));
1785       num_regs_saved_in_regs++;
1786     }
1787   regs_saved_in_regs[i].orig_reg = reg;
1788   regs_saved_in_regs[i].saved_in_reg = sreg;
1789
1790   regno = DWARF_FRAME_REGNUM (REGNO (reg));
1791   sregno = DWARF_FRAME_REGNUM (REGNO (sreg));
1792   reg_save (label, regno, sregno, 0);
1793 }
1794
1795 /* What register, if any, is currently saved in REG?  */
1796
1797 static rtx
1798 reg_saved_in (rtx reg)
1799 {
1800   unsigned int regn = REGNO (reg);
1801   size_t i;
1802   struct queued_reg_save *q;
1803
1804   for (q = queued_reg_saves; q; q = q->next)
1805     if (q->saved_reg && regn == REGNO (q->saved_reg))
1806       return q->reg;
1807
1808   for (i = 0; i < num_regs_saved_in_regs; i++)
1809     if (regs_saved_in_regs[i].saved_in_reg
1810         && regn == REGNO (regs_saved_in_regs[i].saved_in_reg))
1811       return regs_saved_in_regs[i].orig_reg;
1812
1813   return NULL_RTX;
1814 }
1815
1816
1817 /* A temporary register holding an integral value used in adjusting SP
1818    or setting up the store_reg.  The "offset" field holds the integer
1819    value, not an offset.  */
1820 static dw_cfa_location cfa_temp;
1821
1822 /* A subroutine of dwarf2out_frame_debug, process a REG_DEF_CFA note.  */
1823
1824 static void
1825 dwarf2out_frame_debug_def_cfa (rtx pat, const char *label)
1826 {
1827   memset (&cfa, 0, sizeof (cfa));
1828
1829   switch (GET_CODE (pat))
1830     {
1831     case PLUS:
1832       cfa.reg = REGNO (XEXP (pat, 0));
1833       cfa.offset = INTVAL (XEXP (pat, 1));
1834       break;
1835
1836     case REG:
1837       cfa.reg = REGNO (pat);
1838       break;
1839
1840     default:
1841       /* Recurse and define an expression.  */
1842       gcc_unreachable ();
1843     }
1844
1845   def_cfa_1 (label, &cfa);
1846 }
1847
1848 /* A subroutine of dwarf2out_frame_debug, process a REG_ADJUST_CFA note.  */
1849
1850 static void
1851 dwarf2out_frame_debug_adjust_cfa (rtx pat, const char *label)
1852 {
1853   rtx src, dest;
1854
1855   gcc_assert (GET_CODE (pat) == SET);
1856   dest = XEXP (pat, 0);
1857   src = XEXP (pat, 1);
1858
1859   switch (GET_CODE (src))
1860     {
1861     case PLUS:
1862       gcc_assert (REGNO (XEXP (src, 0)) == cfa.reg);
1863       cfa.offset -= INTVAL (XEXP (src, 1));
1864       break;
1865
1866     case REG:
1867         break;
1868
1869     default:
1870         gcc_unreachable ();
1871     }
1872
1873   cfa.reg = REGNO (dest);
1874   gcc_assert (cfa.indirect == 0);
1875
1876   def_cfa_1 (label, &cfa);
1877 }
1878
1879 /* A subroutine of dwarf2out_frame_debug, process a REG_CFA_OFFSET note.  */
1880
1881 static void
1882 dwarf2out_frame_debug_cfa_offset (rtx set, const char *label)
1883 {
1884   HOST_WIDE_INT offset;
1885   rtx src, addr, span;
1886
1887   src = XEXP (set, 1);
1888   addr = XEXP (set, 0);
1889   gcc_assert (MEM_P (addr));
1890   addr = XEXP (addr, 0);
1891
1892   /* As documented, only consider extremely simple addresses.  */
1893   switch (GET_CODE (addr))
1894     {
1895     case REG:
1896       gcc_assert (REGNO (addr) == cfa.reg);
1897       offset = -cfa.offset;
1898       break;
1899     case PLUS:
1900       gcc_assert (REGNO (XEXP (addr, 0)) == cfa.reg);
1901       offset = INTVAL (XEXP (addr, 1)) - cfa.offset;
1902       break;
1903     default:
1904       gcc_unreachable ();
1905     }
1906
1907   span = targetm.dwarf_register_span (src);
1908
1909   /* ??? We'd like to use queue_reg_save, but we need to come up with
1910      a different flushing heuristic for epilogues.  */
1911   if (!span)
1912     reg_save (label, DWARF_FRAME_REGNUM (REGNO (src)), INVALID_REGNUM, offset);
1913   else
1914     {
1915       /* We have a PARALLEL describing where the contents of SRC live.
1916          Queue register saves for each piece of the PARALLEL.  */
1917       int par_index;
1918       int limit;
1919       HOST_WIDE_INT span_offset = offset;
1920
1921       gcc_assert (GET_CODE (span) == PARALLEL);
1922
1923       limit = XVECLEN (span, 0);
1924       for (par_index = 0; par_index < limit; par_index++)
1925         {
1926           rtx elem = XVECEXP (span, 0, par_index);
1927
1928           reg_save (label, DWARF_FRAME_REGNUM (REGNO (elem)),
1929                     INVALID_REGNUM, span_offset);
1930           span_offset += GET_MODE_SIZE (GET_MODE (elem));
1931         }
1932     }
1933 }
1934
1935 /* A subroutine of dwarf2out_frame_debug, process a REG_CFA_REGISTER note.  */
1936
1937 static void
1938 dwarf2out_frame_debug_cfa_register (rtx set, const char *label)
1939 {
1940   rtx src, dest;
1941   unsigned sregno, dregno;
1942
1943   src = XEXP (set, 1);
1944   dest = XEXP (set, 0);
1945
1946   if (src == pc_rtx)
1947     sregno = DWARF_FRAME_RETURN_COLUMN;
1948   else
1949     sregno = DWARF_FRAME_REGNUM (REGNO (src));
1950
1951   dregno = DWARF_FRAME_REGNUM (REGNO (dest));
1952
1953   /* ??? We'd like to use queue_reg_save, but we need to come up with
1954      a different flushing heuristic for epilogues.  */
1955   reg_save (label, sregno, dregno, 0);
1956 }
1957
1958 /* A subroutine of dwarf2out_frame_debug, process a REG_CFA_RESTORE note.  */
1959
1960 static void
1961 dwarf2out_frame_debug_cfa_restore (rtx reg, const char *label)
1962 {
1963   dw_cfi_ref cfi = new_cfi ();
1964   unsigned int regno = DWARF_FRAME_REGNUM (REGNO (reg));
1965
1966   cfi->dw_cfi_opc = (regno & ~0x3f ? DW_CFA_restore_extended : DW_CFA_restore);
1967   cfi->dw_cfi_oprnd1.dw_cfi_reg_num = regno;
1968
1969   add_fde_cfi (label, cfi);
1970 }
1971
1972 /* Record call frame debugging information for an expression EXPR,
1973    which either sets SP or FP (adjusting how we calculate the frame
1974    address) or saves a register to the stack or another register.
1975    LABEL indicates the address of EXPR.
1976
1977    This function encodes a state machine mapping rtxes to actions on
1978    cfa, cfa_store, and cfa_temp.reg.  We describe these rules so
1979    users need not read the source code.
1980
1981   The High-Level Picture
1982
1983   Changes in the register we use to calculate the CFA: Currently we
1984   assume that if you copy the CFA register into another register, we
1985   should take the other one as the new CFA register; this seems to
1986   work pretty well.  If it's wrong for some target, it's simple
1987   enough not to set RTX_FRAME_RELATED_P on the insn in question.
1988
1989   Changes in the register we use for saving registers to the stack:
1990   This is usually SP, but not always.  Again, we deduce that if you
1991   copy SP into another register (and SP is not the CFA register),
1992   then the new register is the one we will be using for register
1993   saves.  This also seems to work.
1994
1995   Register saves: There's not much guesswork about this one; if
1996   RTX_FRAME_RELATED_P is set on an insn which modifies memory, it's a
1997   register save, and the register used to calculate the destination
1998   had better be the one we think we're using for this purpose.
1999   It's also assumed that a copy from a call-saved register to another
2000   register is saving that register if RTX_FRAME_RELATED_P is set on
2001   that instruction.  If the copy is from a call-saved register to
2002   the *same* register, that means that the register is now the same
2003   value as in the caller.
2004
2005   Except: If the register being saved is the CFA register, and the
2006   offset is nonzero, we are saving the CFA, so we assume we have to
2007   use DW_CFA_def_cfa_expression.  If the offset is 0, we assume that
2008   the intent is to save the value of SP from the previous frame.
2009
2010   In addition, if a register has previously been saved to a different
2011   register,
2012
2013   Invariants / Summaries of Rules
2014
2015   cfa          current rule for calculating the CFA.  It usually
2016                consists of a register and an offset.
2017   cfa_store    register used by prologue code to save things to the stack
2018                cfa_store.offset is the offset from the value of
2019                cfa_store.reg to the actual CFA
2020   cfa_temp     register holding an integral value.  cfa_temp.offset
2021                stores the value, which will be used to adjust the
2022                stack pointer.  cfa_temp is also used like cfa_store,
2023                to track stores to the stack via fp or a temp reg.
2024
2025   Rules  1- 4: Setting a register's value to cfa.reg or an expression
2026                with cfa.reg as the first operand changes the cfa.reg and its
2027                cfa.offset.  Rule 1 and 4 also set cfa_temp.reg and
2028                cfa_temp.offset.
2029
2030   Rules  6- 9: Set a non-cfa.reg register value to a constant or an
2031                expression yielding a constant.  This sets cfa_temp.reg
2032                and cfa_temp.offset.
2033
2034   Rule 5:      Create a new register cfa_store used to save items to the
2035                stack.
2036
2037   Rules 10-14: Save a register to the stack.  Define offset as the
2038                difference of the original location and cfa_store's
2039                location (or cfa_temp's location if cfa_temp is used).
2040
2041   Rules 16-20: If AND operation happens on sp in prologue, we assume
2042                stack is realigned.  We will use a group of DW_OP_XXX
2043                expressions to represent the location of the stored
2044                register instead of CFA+offset.
2045
2046   The Rules
2047
2048   "{a,b}" indicates a choice of a xor b.
2049   "<reg>:cfa.reg" indicates that <reg> must equal cfa.reg.
2050
2051   Rule 1:
2052   (set <reg1> <reg2>:cfa.reg)
2053   effects: cfa.reg = <reg1>
2054            cfa.offset unchanged
2055            cfa_temp.reg = <reg1>
2056            cfa_temp.offset = cfa.offset
2057
2058   Rule 2:
2059   (set sp ({minus,plus,losum} {sp,fp}:cfa.reg
2060                               {<const_int>,<reg>:cfa_temp.reg}))
2061   effects: cfa.reg = sp if fp used
2062            cfa.offset += {+/- <const_int>, cfa_temp.offset} if cfa.reg==sp
2063            cfa_store.offset += {+/- <const_int>, cfa_temp.offset}
2064              if cfa_store.reg==sp
2065
2066   Rule 3:
2067   (set fp ({minus,plus,losum} <reg>:cfa.reg <const_int>))
2068   effects: cfa.reg = fp
2069            cfa_offset += +/- <const_int>
2070
2071   Rule 4:
2072   (set <reg1> ({plus,losum} <reg2>:cfa.reg <const_int>))
2073   constraints: <reg1> != fp
2074                <reg1> != sp
2075   effects: cfa.reg = <reg1>
2076            cfa_temp.reg = <reg1>
2077            cfa_temp.offset = cfa.offset
2078
2079   Rule 5:
2080   (set <reg1> (plus <reg2>:cfa_temp.reg sp:cfa.reg))
2081   constraints: <reg1> != fp
2082                <reg1> != sp
2083   effects: cfa_store.reg = <reg1>
2084            cfa_store.offset = cfa.offset - cfa_temp.offset
2085
2086   Rule 6:
2087   (set <reg> <const_int>)
2088   effects: cfa_temp.reg = <reg>
2089            cfa_temp.offset = <const_int>
2090
2091   Rule 7:
2092   (set <reg1>:cfa_temp.reg (ior <reg2>:cfa_temp.reg <const_int>))
2093   effects: cfa_temp.reg = <reg1>
2094            cfa_temp.offset |= <const_int>
2095
2096   Rule 8:
2097   (set <reg> (high <exp>))
2098   effects: none
2099
2100   Rule 9:
2101   (set <reg> (lo_sum <exp> <const_int>))
2102   effects: cfa_temp.reg = <reg>
2103            cfa_temp.offset = <const_int>
2104
2105   Rule 10:
2106   (set (mem (pre_modify sp:cfa_store (???? <reg1> <const_int>))) <reg2>)
2107   effects: cfa_store.offset -= <const_int>
2108            cfa.offset = cfa_store.offset if cfa.reg == sp
2109            cfa.reg = sp
2110            cfa.base_offset = -cfa_store.offset
2111
2112   Rule 11:
2113   (set (mem ({pre_inc,pre_dec} sp:cfa_store.reg)) <reg>)
2114   effects: cfa_store.offset += -/+ mode_size(mem)
2115            cfa.offset = cfa_store.offset if cfa.reg == sp
2116            cfa.reg = sp
2117            cfa.base_offset = -cfa_store.offset
2118
2119   Rule 12:
2120   (set (mem ({minus,plus,losum} <reg1>:{cfa_store,cfa_temp} <const_int>))
2121
2122        <reg2>)
2123   effects: cfa.reg = <reg1>
2124            cfa.base_offset = -/+ <const_int> - {cfa_store,cfa_temp}.offset
2125
2126   Rule 13:
2127   (set (mem <reg1>:{cfa_store,cfa_temp}) <reg2>)
2128   effects: cfa.reg = <reg1>
2129            cfa.base_offset = -{cfa_store,cfa_temp}.offset
2130
2131   Rule 14:
2132   (set (mem (postinc <reg1>:cfa_temp <const_int>)) <reg2>)
2133   effects: cfa.reg = <reg1>
2134            cfa.base_offset = -cfa_temp.offset
2135            cfa_temp.offset -= mode_size(mem)
2136
2137   Rule 15:
2138   (set <reg> {unspec, unspec_volatile})
2139   effects: target-dependent
2140
2141   Rule 16:
2142   (set sp (and: sp <const_int>))
2143   constraints: cfa_store.reg == sp
2144   effects: current_fde.stack_realign = 1
2145            cfa_store.offset = 0
2146            fde->drap_reg = cfa.reg if cfa.reg != sp and cfa.reg != fp
2147
2148   Rule 17:
2149   (set (mem ({pre_inc, pre_dec} sp)) (mem (plus (cfa.reg) (const_int))))
2150   effects: cfa_store.offset += -/+ mode_size(mem)
2151
2152   Rule 18:
2153   (set (mem ({pre_inc, pre_dec} sp)) fp)
2154   constraints: fde->stack_realign == 1
2155   effects: cfa_store.offset = 0
2156            cfa.reg != HARD_FRAME_POINTER_REGNUM
2157
2158   Rule 19:
2159   (set (mem ({pre_inc, pre_dec} sp)) cfa.reg)
2160   constraints: fde->stack_realign == 1
2161                && cfa.offset == 0
2162                && cfa.indirect == 0
2163                && cfa.reg != HARD_FRAME_POINTER_REGNUM
2164   effects: Use DW_CFA_def_cfa_expression to define cfa
2165            cfa.reg == fde->drap_reg  */
2166
2167 static void
2168 dwarf2out_frame_debug_expr (rtx expr, const char *label)
2169 {
2170   rtx src, dest, span;
2171   HOST_WIDE_INT offset;
2172   dw_fde_ref fde;
2173
2174   /* If RTX_FRAME_RELATED_P is set on a PARALLEL, process each member of
2175      the PARALLEL independently. The first element is always processed if
2176      it is a SET. This is for backward compatibility.   Other elements
2177      are processed only if they are SETs and the RTX_FRAME_RELATED_P
2178      flag is set in them.  */
2179   if (GET_CODE (expr) == PARALLEL || GET_CODE (expr) == SEQUENCE)
2180     {
2181       int par_index;
2182       int limit = XVECLEN (expr, 0);
2183       rtx elem;
2184
2185       /* PARALLELs have strict read-modify-write semantics, so we
2186          ought to evaluate every rvalue before changing any lvalue.
2187          It's cumbersome to do that in general, but there's an
2188          easy approximation that is enough for all current users:
2189          handle register saves before register assignments.  */
2190       if (GET_CODE (expr) == PARALLEL)
2191         for (par_index = 0; par_index < limit; par_index++)
2192           {
2193             elem = XVECEXP (expr, 0, par_index);
2194             if (GET_CODE (elem) == SET
2195                 && MEM_P (SET_DEST (elem))
2196                 && (RTX_FRAME_RELATED_P (elem) || par_index == 0))
2197               dwarf2out_frame_debug_expr (elem, label);
2198           }
2199
2200       for (par_index = 0; par_index < limit; par_index++)
2201         {
2202           elem = XVECEXP (expr, 0, par_index);
2203           if (GET_CODE (elem) == SET
2204               && (!MEM_P (SET_DEST (elem)) || GET_CODE (expr) == SEQUENCE)
2205               && (RTX_FRAME_RELATED_P (elem) || par_index == 0))
2206             dwarf2out_frame_debug_expr (elem, label);
2207           else if (GET_CODE (elem) == SET
2208                    && par_index != 0
2209                    && !RTX_FRAME_RELATED_P (elem))
2210             {
2211               /* Stack adjustment combining might combine some post-prologue
2212                  stack adjustment into a prologue stack adjustment.  */
2213               HOST_WIDE_INT offset = stack_adjust_offset (elem, args_size, 0);
2214
2215               if (offset != 0)
2216                 dwarf2out_stack_adjust (offset, label);
2217             }
2218         }
2219       return;
2220     }
2221
2222   gcc_assert (GET_CODE (expr) == SET);
2223
2224   src = SET_SRC (expr);
2225   dest = SET_DEST (expr);
2226
2227   if (REG_P (src))
2228     {
2229       rtx rsi = reg_saved_in (src);
2230       if (rsi)
2231         src = rsi;
2232     }
2233
2234   fde = current_fde ();
2235
2236   switch (GET_CODE (dest))
2237     {
2238     case REG:
2239       switch (GET_CODE (src))
2240         {
2241           /* Setting FP from SP.  */
2242         case REG:
2243           if (cfa.reg == (unsigned) REGNO (src))
2244             {
2245               /* Rule 1 */
2246               /* Update the CFA rule wrt SP or FP.  Make sure src is
2247                  relative to the current CFA register.
2248
2249                  We used to require that dest be either SP or FP, but the
2250                  ARM copies SP to a temporary register, and from there to
2251                  FP.  So we just rely on the backends to only set
2252                  RTX_FRAME_RELATED_P on appropriate insns.  */
2253               cfa.reg = REGNO (dest);
2254               cfa_temp.reg = cfa.reg;
2255               cfa_temp.offset = cfa.offset;
2256             }
2257           else
2258             {
2259               /* Saving a register in a register.  */
2260               gcc_assert (!fixed_regs [REGNO (dest)]
2261                           /* For the SPARC and its register window.  */
2262                           || (DWARF_FRAME_REGNUM (REGNO (src))
2263                               == DWARF_FRAME_RETURN_COLUMN));
2264
2265               /* After stack is aligned, we can only save SP in FP
2266                  if drap register is used.  In this case, we have
2267                  to restore stack pointer with the CFA value and we
2268                  don't generate this DWARF information.  */
2269               if (fde
2270                   && fde->stack_realign
2271                   && REGNO (src) == STACK_POINTER_REGNUM)
2272                 gcc_assert (REGNO (dest) == HARD_FRAME_POINTER_REGNUM
2273                             && fde->drap_reg != INVALID_REGNUM
2274                             && cfa.reg != REGNO (src));
2275               else
2276                 queue_reg_save (label, src, dest, 0);
2277             }
2278           break;
2279
2280         case PLUS:
2281         case MINUS:
2282         case LO_SUM:
2283           if (dest == stack_pointer_rtx)
2284             {
2285               /* Rule 2 */
2286               /* Adjusting SP.  */
2287               switch (GET_CODE (XEXP (src, 1)))
2288                 {
2289                 case CONST_INT:
2290                   offset = INTVAL (XEXP (src, 1));
2291                   break;
2292                 case REG:
2293                   gcc_assert ((unsigned) REGNO (XEXP (src, 1))
2294                               == cfa_temp.reg);
2295                   offset = cfa_temp.offset;
2296                   break;
2297                 default:
2298                   gcc_unreachable ();
2299                 }
2300
2301               if (XEXP (src, 0) == hard_frame_pointer_rtx)
2302                 {
2303                   /* Restoring SP from FP in the epilogue.  */
2304                   gcc_assert (cfa.reg == (unsigned) HARD_FRAME_POINTER_REGNUM);
2305                   cfa.reg = STACK_POINTER_REGNUM;
2306                 }
2307               else if (GET_CODE (src) == LO_SUM)
2308                 /* Assume we've set the source reg of the LO_SUM from sp.  */
2309                 ;
2310               else
2311                 gcc_assert (XEXP (src, 0) == stack_pointer_rtx);
2312
2313               if (GET_CODE (src) != MINUS)
2314                 offset = -offset;
2315               if (cfa.reg == STACK_POINTER_REGNUM)
2316                 cfa.offset += offset;
2317               if (cfa_store.reg == STACK_POINTER_REGNUM)
2318                 cfa_store.offset += offset;
2319             }
2320           else if (dest == hard_frame_pointer_rtx)
2321             {
2322               /* Rule 3 */
2323               /* Either setting the FP from an offset of the SP,
2324                  or adjusting the FP */
2325               gcc_assert (frame_pointer_needed);
2326
2327               gcc_assert (REG_P (XEXP (src, 0))
2328                           && (unsigned) REGNO (XEXP (src, 0)) == cfa.reg
2329                           && CONST_INT_P (XEXP (src, 1)));
2330               offset = INTVAL (XEXP (src, 1));
2331               if (GET_CODE (src) != MINUS)
2332                 offset = -offset;
2333               cfa.offset += offset;
2334               cfa.reg = HARD_FRAME_POINTER_REGNUM;
2335             }
2336           else
2337             {
2338               gcc_assert (GET_CODE (src) != MINUS);
2339
2340               /* Rule 4 */
2341               if (REG_P (XEXP (src, 0))
2342                   && REGNO (XEXP (src, 0)) == cfa.reg
2343                   && CONST_INT_P (XEXP (src, 1)))
2344                 {
2345                   /* Setting a temporary CFA register that will be copied
2346                      into the FP later on.  */
2347                   offset = - INTVAL (XEXP (src, 1));
2348                   cfa.offset += offset;
2349                   cfa.reg = REGNO (dest);
2350                   /* Or used to save regs to the stack.  */
2351                   cfa_temp.reg = cfa.reg;
2352                   cfa_temp.offset = cfa.offset;
2353                 }
2354
2355               /* Rule 5 */
2356               else if (REG_P (XEXP (src, 0))
2357                        && REGNO (XEXP (src, 0)) == cfa_temp.reg
2358                        && XEXP (src, 1) == stack_pointer_rtx)
2359                 {
2360                   /* Setting a scratch register that we will use instead
2361                      of SP for saving registers to the stack.  */
2362                   gcc_assert (cfa.reg == STACK_POINTER_REGNUM);
2363                   cfa_store.reg = REGNO (dest);
2364                   cfa_store.offset = cfa.offset - cfa_temp.offset;
2365                 }
2366
2367               /* Rule 9 */
2368               else if (GET_CODE (src) == LO_SUM
2369                        && CONST_INT_P (XEXP (src, 1)))
2370                 {
2371                   cfa_temp.reg = REGNO (dest);
2372                   cfa_temp.offset = INTVAL (XEXP (src, 1));
2373                 }
2374               else
2375                 gcc_unreachable ();
2376             }
2377           break;
2378
2379           /* Rule 6 */
2380         case CONST_INT:
2381           cfa_temp.reg = REGNO (dest);
2382           cfa_temp.offset = INTVAL (src);
2383           break;
2384
2385           /* Rule 7 */
2386         case IOR:
2387           gcc_assert (REG_P (XEXP (src, 0))
2388                       && (unsigned) REGNO (XEXP (src, 0)) == cfa_temp.reg
2389                       && CONST_INT_P (XEXP (src, 1)));
2390
2391           if ((unsigned) REGNO (dest) != cfa_temp.reg)
2392             cfa_temp.reg = REGNO (dest);
2393           cfa_temp.offset |= INTVAL (XEXP (src, 1));
2394           break;
2395
2396           /* Skip over HIGH, assuming it will be followed by a LO_SUM,
2397              which will fill in all of the bits.  */
2398           /* Rule 8 */
2399         case HIGH:
2400           break;
2401
2402           /* Rule 15 */
2403         case UNSPEC:
2404         case UNSPEC_VOLATILE:
2405           gcc_assert (targetm.dwarf_handle_frame_unspec);
2406           targetm.dwarf_handle_frame_unspec (label, expr, XINT (src, 1));
2407           return;
2408
2409           /* Rule 16 */
2410         case AND:
2411           /* If this AND operation happens on stack pointer in prologue,
2412              we assume the stack is realigned and we extract the
2413              alignment.  */
2414           if (fde && XEXP (src, 0) == stack_pointer_rtx)
2415             {
2416               gcc_assert (cfa_store.reg == REGNO (XEXP (src, 0)));
2417               fde->stack_realign = 1;
2418               fde->stack_realignment = INTVAL (XEXP (src, 1));
2419               cfa_store.offset = 0;
2420
2421               if (cfa.reg != STACK_POINTER_REGNUM
2422                   && cfa.reg != HARD_FRAME_POINTER_REGNUM)
2423                 fde->drap_reg = cfa.reg;
2424             }
2425           return;
2426
2427         default:
2428           gcc_unreachable ();
2429         }
2430
2431       def_cfa_1 (label, &cfa);
2432       break;
2433
2434     case MEM:
2435
2436       /* Saving a register to the stack.  Make sure dest is relative to the
2437          CFA register.  */
2438       switch (GET_CODE (XEXP (dest, 0)))
2439         {
2440           /* Rule 10 */
2441           /* With a push.  */
2442         case PRE_MODIFY:
2443           /* We can't handle variable size modifications.  */
2444           gcc_assert (GET_CODE (XEXP (XEXP (XEXP (dest, 0), 1), 1))
2445                       == CONST_INT);
2446           offset = -INTVAL (XEXP (XEXP (XEXP (dest, 0), 1), 1));
2447
2448           gcc_assert (REGNO (XEXP (XEXP (dest, 0), 0)) == STACK_POINTER_REGNUM
2449                       && cfa_store.reg == STACK_POINTER_REGNUM);
2450
2451           cfa_store.offset += offset;
2452           if (cfa.reg == STACK_POINTER_REGNUM)
2453             cfa.offset = cfa_store.offset;
2454
2455           offset = -cfa_store.offset;
2456           break;
2457
2458           /* Rule 11 */
2459         case PRE_INC:
2460         case PRE_DEC:
2461           offset = GET_MODE_SIZE (GET_MODE (dest));
2462           if (GET_CODE (XEXP (dest, 0)) == PRE_INC)
2463             offset = -offset;
2464
2465           gcc_assert ((REGNO (XEXP (XEXP (dest, 0), 0))
2466                        == STACK_POINTER_REGNUM)
2467                       && cfa_store.reg == STACK_POINTER_REGNUM);
2468
2469           cfa_store.offset += offset;
2470
2471           /* Rule 18: If stack is aligned, we will use FP as a
2472              reference to represent the address of the stored
2473              regiser.  */
2474           if (fde
2475               && fde->stack_realign
2476               && src == hard_frame_pointer_rtx)
2477             {
2478               gcc_assert (cfa.reg != HARD_FRAME_POINTER_REGNUM);
2479               cfa_store.offset = 0;
2480             }
2481
2482           if (cfa.reg == STACK_POINTER_REGNUM)
2483             cfa.offset = cfa_store.offset;
2484
2485           offset = -cfa_store.offset;
2486           break;
2487
2488           /* Rule 12 */
2489           /* With an offset.  */
2490         case PLUS:
2491         case MINUS:
2492         case LO_SUM:
2493           {
2494             int regno;
2495
2496             gcc_assert (CONST_INT_P (XEXP (XEXP (dest, 0), 1))
2497                         && REG_P (XEXP (XEXP (dest, 0), 0)));
2498             offset = INTVAL (XEXP (XEXP (dest, 0), 1));
2499             if (GET_CODE (XEXP (dest, 0)) == MINUS)
2500               offset = -offset;
2501
2502             regno = REGNO (XEXP (XEXP (dest, 0), 0));
2503
2504             if (cfa_store.reg == (unsigned) regno)
2505               offset -= cfa_store.offset;
2506             else
2507               {
2508                 gcc_assert (cfa_temp.reg == (unsigned) regno);
2509                 offset -= cfa_temp.offset;
2510               }
2511           }
2512           break;
2513
2514           /* Rule 13 */
2515           /* Without an offset.  */
2516         case REG:
2517           {
2518             int regno = REGNO (XEXP (dest, 0));
2519
2520             if (cfa_store.reg == (unsigned) regno)
2521               offset = -cfa_store.offset;
2522             else
2523               {
2524                 gcc_assert (cfa_temp.reg == (unsigned) regno);
2525                 offset = -cfa_temp.offset;
2526               }
2527           }
2528           break;
2529
2530           /* Rule 14 */
2531         case POST_INC:
2532           gcc_assert (cfa_temp.reg
2533                       == (unsigned) REGNO (XEXP (XEXP (dest, 0), 0)));
2534           offset = -cfa_temp.offset;
2535           cfa_temp.offset -= GET_MODE_SIZE (GET_MODE (dest));
2536           break;
2537
2538         default:
2539           gcc_unreachable ();
2540         }
2541
2542         /* Rule 17 */
2543         /* If the source operand of this MEM operation is not a
2544            register, basically the source is return address.  Here
2545            we only care how much stack grew and we don't save it.  */
2546       if (!REG_P (src))
2547         break;
2548
2549       if (REGNO (src) != STACK_POINTER_REGNUM
2550           && REGNO (src) != HARD_FRAME_POINTER_REGNUM
2551           && (unsigned) REGNO (src) == cfa.reg)
2552         {
2553           /* We're storing the current CFA reg into the stack.  */
2554
2555           if (cfa.offset == 0)
2556             {
2557               /* Rule 19 */
2558               /* If stack is aligned, putting CFA reg into stack means
2559                  we can no longer use reg + offset to represent CFA.
2560                  Here we use DW_CFA_def_cfa_expression instead.  The
2561                  result of this expression equals to the original CFA
2562                  value.  */
2563               if (fde
2564                   && fde->stack_realign
2565                   && cfa.indirect == 0
2566                   && cfa.reg != HARD_FRAME_POINTER_REGNUM)
2567                 {
2568                   dw_cfa_location cfa_exp;
2569
2570                   gcc_assert (fde->drap_reg == cfa.reg);
2571
2572                   cfa_exp.indirect = 1;
2573                   cfa_exp.reg = HARD_FRAME_POINTER_REGNUM;
2574                   cfa_exp.base_offset = offset;
2575                   cfa_exp.offset = 0;
2576
2577                   fde->drap_reg_saved = 1;
2578
2579                   def_cfa_1 (label, &cfa_exp);
2580                   break;
2581                 }
2582
2583               /* If the source register is exactly the CFA, assume
2584                  we're saving SP like any other register; this happens
2585                  on the ARM.  */
2586               def_cfa_1 (label, &cfa);
2587               queue_reg_save (label, stack_pointer_rtx, NULL_RTX, offset);
2588               break;
2589             }
2590           else
2591             {
2592               /* Otherwise, we'll need to look in the stack to
2593                  calculate the CFA.  */
2594               rtx x = XEXP (dest, 0);
2595
2596               if (!REG_P (x))
2597                 x = XEXP (x, 0);
2598               gcc_assert (REG_P (x));
2599
2600               cfa.reg = REGNO (x);
2601               cfa.base_offset = offset;
2602               cfa.indirect = 1;
2603               def_cfa_1 (label, &cfa);
2604               break;
2605             }
2606         }
2607
2608       def_cfa_1 (label, &cfa);
2609       {
2610         span = targetm.dwarf_register_span (src);
2611
2612         if (!span)
2613           queue_reg_save (label, src, NULL_RTX, offset);
2614         else
2615           {
2616             /* We have a PARALLEL describing where the contents of SRC
2617                live.  Queue register saves for each piece of the
2618                PARALLEL.  */
2619             int par_index;
2620             int limit;
2621             HOST_WIDE_INT span_offset = offset;
2622
2623             gcc_assert (GET_CODE (span) == PARALLEL);
2624
2625             limit = XVECLEN (span, 0);
2626             for (par_index = 0; par_index < limit; par_index++)
2627               {
2628                 rtx elem = XVECEXP (span, 0, par_index);
2629
2630                 queue_reg_save (label, elem, NULL_RTX, span_offset);
2631                 span_offset += GET_MODE_SIZE (GET_MODE (elem));
2632               }
2633           }
2634       }
2635       break;
2636
2637     default:
2638       gcc_unreachable ();
2639     }
2640 }
2641
2642 /* Record call frame debugging information for INSN, which either
2643    sets SP or FP (adjusting how we calculate the frame address) or saves a
2644    register to the stack.  If INSN is NULL_RTX, initialize our state.
2645
2646    If AFTER_P is false, we're being called before the insn is emitted,
2647    otherwise after.  Call instructions get invoked twice.  */
2648
2649 void
2650 dwarf2out_frame_debug (rtx insn, bool after_p)
2651 {
2652   const char *label;
2653   rtx note, n;
2654   bool handled_one = false;
2655
2656   if (insn == NULL_RTX)
2657     {
2658       size_t i;
2659
2660       /* Flush any queued register saves.  */
2661       flush_queued_reg_saves ();
2662
2663       /* Set up state for generating call frame debug info.  */
2664       lookup_cfa (&cfa);
2665       gcc_assert (cfa.reg
2666                   == (unsigned long)DWARF_FRAME_REGNUM (STACK_POINTER_REGNUM));
2667
2668       cfa.reg = STACK_POINTER_REGNUM;
2669       cfa_store = cfa;
2670       cfa_temp.reg = -1;
2671       cfa_temp.offset = 0;
2672
2673       for (i = 0; i < num_regs_saved_in_regs; i++)
2674         {
2675           regs_saved_in_regs[i].orig_reg = NULL_RTX;
2676           regs_saved_in_regs[i].saved_in_reg = NULL_RTX;
2677         }
2678       num_regs_saved_in_regs = 0;
2679
2680       if (barrier_args_size)
2681         {
2682           XDELETEVEC (barrier_args_size);
2683           barrier_args_size = NULL;
2684         }
2685       return;
2686     }
2687
2688   if (!NONJUMP_INSN_P (insn) || clobbers_queued_reg_save (insn))
2689     flush_queued_reg_saves ();
2690
2691   if (!RTX_FRAME_RELATED_P (insn))
2692     {
2693       /* ??? This should be done unconditionally since stack adjustments
2694          matter if the stack pointer is not the CFA register anymore but
2695          is still used to save registers.  */
2696       if (!ACCUMULATE_OUTGOING_ARGS)
2697         dwarf2out_notice_stack_adjust (insn, after_p);
2698       return;
2699     }
2700
2701   label = dwarf2out_cfi_label (false);
2702
2703   for (note = REG_NOTES (insn); note; note = XEXP (note, 1))
2704     switch (REG_NOTE_KIND (note))
2705       {
2706       case REG_FRAME_RELATED_EXPR:
2707         insn = XEXP (note, 0);
2708         goto found;
2709
2710       case REG_CFA_DEF_CFA:
2711         dwarf2out_frame_debug_def_cfa (XEXP (note, 0), label);
2712         handled_one = true;
2713         break;
2714
2715       case REG_CFA_ADJUST_CFA:
2716         n = XEXP (note, 0);
2717         if (n == NULL)
2718           {
2719             n = PATTERN (insn);
2720             if (GET_CODE (n) == PARALLEL)
2721               n = XVECEXP (n, 0, 0);
2722           }
2723         dwarf2out_frame_debug_adjust_cfa (n, label);
2724         handled_one = true;
2725         break;
2726
2727       case REG_CFA_OFFSET:
2728         n = XEXP (note, 0);
2729         if (n == NULL)
2730           n = single_set (insn);
2731         dwarf2out_frame_debug_cfa_offset (n, label);
2732         handled_one = true;
2733         break;
2734
2735       case REG_CFA_REGISTER:
2736         n = XEXP (note, 0);
2737         if (n == NULL)
2738           {
2739             n = PATTERN (insn);
2740             if (GET_CODE (n) == PARALLEL)
2741               n = XVECEXP (n, 0, 0);
2742           }
2743         dwarf2out_frame_debug_cfa_register (n, label);
2744         handled_one = true;
2745         break;
2746
2747       case REG_CFA_RESTORE:
2748         n = XEXP (note, 0);
2749         if (n == NULL)
2750           {
2751             n = PATTERN (insn);
2752             if (GET_CODE (n) == PARALLEL)
2753               n = XVECEXP (n, 0, 0);
2754             n = XEXP (n, 0);
2755           }
2756         dwarf2out_frame_debug_cfa_restore (n, label);
2757         handled_one = true;
2758         break;
2759
2760       case REG_CFA_SET_VDRAP:
2761         n = XEXP (note, 0);
2762         if (REG_P (n))
2763           {
2764             dw_fde_ref fde = current_fde ();
2765             if (fde)
2766               {
2767                 gcc_assert (fde->vdrap_reg == INVALID_REGNUM);
2768                 if (REG_P (n))
2769                   fde->vdrap_reg = REGNO (n);
2770               }
2771           }
2772         handled_one = true;
2773         break;
2774
2775       default:
2776         break;
2777       }
2778   if (handled_one)
2779     return;
2780
2781   insn = PATTERN (insn);
2782  found:
2783   dwarf2out_frame_debug_expr (insn, label);
2784 }
2785
2786 /* Determine if we need to save and restore CFI information around this
2787    epilogue.  If SIBCALL is true, then this is a sibcall epilogue.  If
2788    we do need to save/restore, then emit the save now, and insert a
2789    NOTE_INSN_CFA_RESTORE_STATE at the appropriate place in the stream.  */
2790
2791 void
2792 dwarf2out_begin_epilogue (rtx insn)
2793 {
2794   bool saw_frp = false;
2795   rtx i;
2796
2797   /* Scan forward to the return insn, noticing if there are possible
2798      frame related insns.  */
2799   for (i = NEXT_INSN (insn); i ; i = NEXT_INSN (i))
2800     {
2801       if (!INSN_P (i))
2802         continue;
2803
2804       /* Look for both regular and sibcalls to end the block.  */
2805       if (returnjump_p (i))
2806         break;
2807       if (CALL_P (i) && SIBLING_CALL_P (i))
2808         break;
2809
2810       if (GET_CODE (PATTERN (i)) == SEQUENCE)
2811         {
2812           int idx;
2813           rtx seq = PATTERN (i);
2814
2815           if (returnjump_p (XVECEXP (seq, 0, 0)))
2816             break;
2817           if (CALL_P (XVECEXP (seq, 0, 0))
2818               && SIBLING_CALL_P (XVECEXP (seq, 0, 0)))
2819             break;
2820
2821           for (idx = 0; idx < XVECLEN (seq, 0); idx++)
2822             if (RTX_FRAME_RELATED_P (XVECEXP (seq, 0, idx)))
2823               saw_frp = true;
2824         }
2825
2826       if (RTX_FRAME_RELATED_P (i))
2827         saw_frp = true;
2828     }
2829
2830   /* If the port doesn't emit epilogue unwind info, we don't need a
2831      save/restore pair.  */
2832   if (!saw_frp)
2833     return;
2834
2835   /* Otherwise, search forward to see if the return insn was the last
2836      basic block of the function.  If so, we don't need save/restore.  */
2837   gcc_assert (i != NULL);
2838   i = next_real_insn (i);
2839   if (i == NULL)
2840     return;
2841
2842   /* Insert the restore before that next real insn in the stream, and before
2843      a potential NOTE_INSN_EPILOGUE_BEG -- we do need these notes to be
2844      properly nested.  This should be after any label or alignment.  This
2845      will be pushed into the CFI stream by the function below.  */
2846   while (1)
2847     {
2848       rtx p = PREV_INSN (i);
2849       if (!NOTE_P (p))
2850         break;
2851       if (NOTE_KIND (p) == NOTE_INSN_BASIC_BLOCK)
2852         break;
2853       i = p;
2854     }
2855   emit_note_before (NOTE_INSN_CFA_RESTORE_STATE, i);
2856
2857   emit_cfa_remember = true;
2858
2859   /* And emulate the state save.  */
2860   gcc_assert (!cfa_remember.in_use);
2861   cfa_remember = cfa;
2862   cfa_remember.in_use = 1;
2863 }
2864
2865 /* A "subroutine" of dwarf2out_begin_epilogue.  Emit the restore required.  */
2866
2867 void
2868 dwarf2out_frame_debug_restore_state (void)
2869 {
2870   dw_cfi_ref cfi = new_cfi ();
2871   const char *label = dwarf2out_cfi_label (false);
2872
2873   cfi->dw_cfi_opc = DW_CFA_restore_state;
2874   add_fde_cfi (label, cfi);
2875
2876   gcc_assert (cfa_remember.in_use);
2877   cfa = cfa_remember;
2878   cfa_remember.in_use = 0;
2879 }
2880
2881 #endif
2882
2883 /* Describe for the GTY machinery what parts of dw_cfi_oprnd1 are used.  */
2884 static enum dw_cfi_oprnd_type dw_cfi_oprnd1_desc
2885  (enum dwarf_call_frame_info cfi);
2886
2887 static enum dw_cfi_oprnd_type
2888 dw_cfi_oprnd1_desc (enum dwarf_call_frame_info cfi)
2889 {
2890   switch (cfi)
2891     {
2892     case DW_CFA_nop:
2893     case DW_CFA_GNU_window_save:
2894     case DW_CFA_remember_state:
2895     case DW_CFA_restore_state:
2896       return dw_cfi_oprnd_unused;
2897
2898     case DW_CFA_set_loc:
2899     case DW_CFA_advance_loc1:
2900     case DW_CFA_advance_loc2:
2901     case DW_CFA_advance_loc4:
2902     case DW_CFA_MIPS_advance_loc8:
2903       return dw_cfi_oprnd_addr;
2904
2905     case DW_CFA_offset:
2906     case DW_CFA_offset_extended:
2907     case DW_CFA_def_cfa:
2908     case DW_CFA_offset_extended_sf:
2909     case DW_CFA_def_cfa_sf:
2910     case DW_CFA_restore:
2911     case DW_CFA_restore_extended:
2912     case DW_CFA_undefined:
2913     case DW_CFA_same_value:
2914     case DW_CFA_def_cfa_register:
2915     case DW_CFA_register:
2916     case DW_CFA_expression:
2917       return dw_cfi_oprnd_reg_num;
2918
2919     case DW_CFA_def_cfa_offset:
2920     case DW_CFA_GNU_args_size:
2921     case DW_CFA_def_cfa_offset_sf:
2922       return dw_cfi_oprnd_offset;
2923
2924     case DW_CFA_def_cfa_expression:
2925       return dw_cfi_oprnd_loc;
2926
2927     default:
2928       gcc_unreachable ();
2929     }
2930 }
2931
2932 /* Describe for the GTY machinery what parts of dw_cfi_oprnd2 are used.  */
2933 static enum dw_cfi_oprnd_type dw_cfi_oprnd2_desc
2934  (enum dwarf_call_frame_info cfi);
2935
2936 static enum dw_cfi_oprnd_type
2937 dw_cfi_oprnd2_desc (enum dwarf_call_frame_info cfi)
2938 {
2939   switch (cfi)
2940     {
2941     case DW_CFA_def_cfa:
2942     case DW_CFA_def_cfa_sf:
2943     case DW_CFA_offset:
2944     case DW_CFA_offset_extended_sf:
2945     case DW_CFA_offset_extended:
2946       return dw_cfi_oprnd_offset;
2947
2948     case DW_CFA_register:
2949       return dw_cfi_oprnd_reg_num;
2950
2951     case DW_CFA_expression:
2952       return dw_cfi_oprnd_loc;
2953
2954     default:
2955       return dw_cfi_oprnd_unused;
2956     }
2957 }
2958
2959 #if defined (DWARF2_DEBUGGING_INFO) || defined (DWARF2_UNWIND_INFO)
2960
2961 /* Switch [BACK] to eh_frame_section.  If we don't have an eh_frame_section,
2962    switch to the data section instead, and write out a synthetic start label
2963    for collect2 the first time around.  */
2964
2965 static void
2966 switch_to_eh_frame_section (bool back)
2967 {
2968   tree label;
2969
2970 #ifdef EH_FRAME_SECTION_NAME
2971   if (eh_frame_section == 0)
2972     {
2973       int flags;
2974
2975       if (EH_TABLES_CAN_BE_READ_ONLY)
2976         {
2977           int fde_encoding;
2978           int per_encoding;
2979           int lsda_encoding;
2980
2981           fde_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/1,
2982                                                        /*global=*/0);
2983           per_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/2,
2984                                                        /*global=*/1);
2985           lsda_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/0,
2986                                                         /*global=*/0);
2987           flags = ((! flag_pic
2988                     || ((fde_encoding & 0x70) != DW_EH_PE_absptr
2989                         && (fde_encoding & 0x70) != DW_EH_PE_aligned
2990                         && (per_encoding & 0x70) != DW_EH_PE_absptr
2991                         && (per_encoding & 0x70) != DW_EH_PE_aligned
2992                         && (lsda_encoding & 0x70) != DW_EH_PE_absptr
2993                         && (lsda_encoding & 0x70) != DW_EH_PE_aligned))
2994                    ? 0 : SECTION_WRITE);
2995         }
2996       else
2997         flags = SECTION_WRITE;
2998       eh_frame_section = get_section (EH_FRAME_SECTION_NAME, flags, NULL);
2999     }
3000 #endif
3001
3002   if (eh_frame_section)
3003     switch_to_section (eh_frame_section);
3004   else
3005     {
3006       /* We have no special eh_frame section.  Put the information in
3007          the data section and emit special labels to guide collect2.  */
3008       switch_to_section (data_section);
3009
3010       if (!back)
3011         {
3012           label = get_file_function_name ("F");
3013           ASM_OUTPUT_ALIGN (asm_out_file, floor_log2 (PTR_SIZE));
3014           targetm.asm_out.globalize_label (asm_out_file,
3015                                            IDENTIFIER_POINTER (label));
3016           ASM_OUTPUT_LABEL (asm_out_file, IDENTIFIER_POINTER (label));
3017         }
3018     }
3019 }
3020
3021 /* Switch [BACK] to the eh or debug frame table section, depending on
3022    FOR_EH.  */
3023
3024 static void
3025 switch_to_frame_table_section (int for_eh, bool back)
3026 {
3027   if (for_eh)
3028     switch_to_eh_frame_section (back);
3029   else
3030     {
3031       if (!debug_frame_section)
3032         debug_frame_section = get_section (DEBUG_FRAME_SECTION,
3033                                            SECTION_DEBUG, NULL);
3034       switch_to_section (debug_frame_section);
3035     }
3036 }
3037
3038 /* Output a Call Frame Information opcode and its operand(s).  */
3039
3040 static void
3041 output_cfi (dw_cfi_ref cfi, dw_fde_ref fde, int for_eh)
3042 {
3043   unsigned long r;
3044   HOST_WIDE_INT off;
3045
3046   if (cfi->dw_cfi_opc == DW_CFA_advance_loc)
3047     dw2_asm_output_data (1, (cfi->dw_cfi_opc
3048                              | (cfi->dw_cfi_oprnd1.dw_cfi_offset & 0x3f)),
3049                          "DW_CFA_advance_loc " HOST_WIDE_INT_PRINT_HEX,
3050                          ((unsigned HOST_WIDE_INT)
3051                           cfi->dw_cfi_oprnd1.dw_cfi_offset));
3052   else if (cfi->dw_cfi_opc == DW_CFA_offset)
3053     {
3054       r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, for_eh);
3055       dw2_asm_output_data (1, (cfi->dw_cfi_opc | (r & 0x3f)),
3056                            "DW_CFA_offset, column %#lx", r);
3057       off = div_data_align (cfi->dw_cfi_oprnd2.dw_cfi_offset);
3058       dw2_asm_output_data_uleb128 (off, NULL);
3059     }
3060   else if (cfi->dw_cfi_opc == DW_CFA_restore)
3061     {
3062       r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, for_eh);
3063       dw2_asm_output_data (1, (cfi->dw_cfi_opc | (r & 0x3f)),
3064                            "DW_CFA_restore, column %#lx", r);
3065     }
3066   else
3067     {
3068       dw2_asm_output_data (1, cfi->dw_cfi_opc,
3069                            "%s", dwarf_cfi_name (cfi->dw_cfi_opc));
3070
3071       switch (cfi->dw_cfi_opc)
3072         {
3073         case DW_CFA_set_loc:
3074           if (for_eh)
3075             dw2_asm_output_encoded_addr_rtx (
3076                 ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/1, /*global=*/0),
3077                 gen_rtx_SYMBOL_REF (Pmode, cfi->dw_cfi_oprnd1.dw_cfi_addr),
3078                 false, NULL);
3079           else
3080             dw2_asm_output_addr (DWARF2_ADDR_SIZE,
3081                                  cfi->dw_cfi_oprnd1.dw_cfi_addr, NULL);
3082           fde->dw_fde_current_label = cfi->dw_cfi_oprnd1.dw_cfi_addr;
3083           break;
3084
3085         case DW_CFA_advance_loc1:
3086           dw2_asm_output_delta (1, cfi->dw_cfi_oprnd1.dw_cfi_addr,
3087                                 fde->dw_fde_current_label, NULL);
3088           fde->dw_fde_current_label = cfi->dw_cfi_oprnd1.dw_cfi_addr;
3089           break;
3090
3091         case DW_CFA_advance_loc2:
3092           dw2_asm_output_delta (2, cfi->dw_cfi_oprnd1.dw_cfi_addr,
3093                                 fde->dw_fde_current_label, NULL);
3094           fde->dw_fde_current_label = cfi->dw_cfi_oprnd1.dw_cfi_addr;
3095           break;
3096
3097         case DW_CFA_advance_loc4:
3098           dw2_asm_output_delta (4, cfi->dw_cfi_oprnd1.dw_cfi_addr,
3099                                 fde->dw_fde_current_label, NULL);
3100           fde->dw_fde_current_label = cfi->dw_cfi_oprnd1.dw_cfi_addr;
3101           break;
3102
3103         case DW_CFA_MIPS_advance_loc8:
3104           dw2_asm_output_delta (8, cfi->dw_cfi_oprnd1.dw_cfi_addr,
3105                                 fde->dw_fde_current_label, NULL);
3106           fde->dw_fde_current_label = cfi->dw_cfi_oprnd1.dw_cfi_addr;
3107           break;
3108
3109         case DW_CFA_offset_extended:
3110           r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, for_eh);
3111           dw2_asm_output_data_uleb128 (r, NULL);
3112           off = div_data_align (cfi->dw_cfi_oprnd2.dw_cfi_offset);
3113           dw2_asm_output_data_uleb128 (off, NULL);
3114           break;
3115
3116         case DW_CFA_def_cfa:
3117           r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, for_eh);
3118           dw2_asm_output_data_uleb128 (r, NULL);
3119           dw2_asm_output_data_uleb128 (cfi->dw_cfi_oprnd2.dw_cfi_offset, NULL);
3120           break;
3121
3122         case DW_CFA_offset_extended_sf:
3123           r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, for_eh);
3124           dw2_asm_output_data_uleb128 (r, NULL);
3125           off = div_data_align (cfi->dw_cfi_oprnd2.dw_cfi_offset);
3126           dw2_asm_output_data_sleb128 (off, NULL);
3127           break;
3128
3129         case DW_CFA_def_cfa_sf:
3130           r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, for_eh);
3131           dw2_asm_output_data_uleb128 (r, NULL);
3132           off = div_data_align (cfi->dw_cfi_oprnd2.dw_cfi_offset);
3133           dw2_asm_output_data_sleb128 (off, NULL);
3134           break;
3135
3136         case DW_CFA_restore_extended:
3137         case DW_CFA_undefined:
3138         case DW_CFA_same_value:
3139         case DW_CFA_def_cfa_register:
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           break;
3143
3144         case DW_CFA_register:
3145           r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, for_eh);
3146           dw2_asm_output_data_uleb128 (r, NULL);
3147           r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd2.dw_cfi_reg_num, for_eh);
3148           dw2_asm_output_data_uleb128 (r, NULL);
3149           break;
3150
3151         case DW_CFA_def_cfa_offset:
3152         case DW_CFA_GNU_args_size:
3153           dw2_asm_output_data_uleb128 (cfi->dw_cfi_oprnd1.dw_cfi_offset, NULL);
3154           break;
3155
3156         case DW_CFA_def_cfa_offset_sf:
3157           off = div_data_align (cfi->dw_cfi_oprnd1.dw_cfi_offset);
3158           dw2_asm_output_data_sleb128 (off, NULL);
3159           break;
3160
3161         case DW_CFA_GNU_window_save:
3162           break;
3163
3164         case DW_CFA_def_cfa_expression:
3165         case DW_CFA_expression:
3166           output_cfa_loc (cfi);
3167           break;
3168
3169         case DW_CFA_GNU_negative_offset_extended:
3170           /* Obsoleted by DW_CFA_offset_extended_sf.  */
3171           gcc_unreachable ();
3172
3173         default:
3174           break;
3175         }
3176     }
3177 }
3178
3179 /* Similar, but do it via assembler directives instead.  */
3180
3181 static void
3182 output_cfi_directive (dw_cfi_ref cfi)
3183 {
3184   unsigned long r, r2;
3185
3186   switch (cfi->dw_cfi_opc)
3187     {
3188     case DW_CFA_advance_loc:
3189     case DW_CFA_advance_loc1:
3190     case DW_CFA_advance_loc2:
3191     case DW_CFA_advance_loc4:
3192     case DW_CFA_MIPS_advance_loc8:
3193     case DW_CFA_set_loc:
3194       /* Should only be created by add_fde_cfi in a code path not
3195          followed when emitting via directives.  The assembler is
3196          going to take care of this for us.  */
3197       gcc_unreachable ();
3198
3199     case DW_CFA_offset:
3200     case DW_CFA_offset_extended:
3201     case DW_CFA_offset_extended_sf:
3202       r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, 1);
3203       fprintf (asm_out_file, "\t.cfi_offset %lu, "HOST_WIDE_INT_PRINT_DEC"\n",
3204                r, cfi->dw_cfi_oprnd2.dw_cfi_offset);
3205       break;
3206
3207     case DW_CFA_restore:
3208     case DW_CFA_restore_extended:
3209       r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, 1);
3210       fprintf (asm_out_file, "\t.cfi_restore %lu\n", r);
3211       break;
3212
3213     case DW_CFA_undefined:
3214       r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, 1);
3215       fprintf (asm_out_file, "\t.cfi_undefined %lu\n", r);
3216       break;
3217
3218     case DW_CFA_same_value:
3219       r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, 1);
3220       fprintf (asm_out_file, "\t.cfi_same_value %lu\n", r);
3221       break;
3222
3223     case DW_CFA_def_cfa:
3224     case DW_CFA_def_cfa_sf:
3225       r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, 1);
3226       fprintf (asm_out_file, "\t.cfi_def_cfa %lu, "HOST_WIDE_INT_PRINT_DEC"\n",
3227                r, cfi->dw_cfi_oprnd2.dw_cfi_offset);
3228       break;
3229
3230     case DW_CFA_def_cfa_register:
3231       r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, 1);
3232       fprintf (asm_out_file, "\t.cfi_def_cfa_register %lu\n", r);
3233       break;
3234
3235     case DW_CFA_register:
3236       r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, 1);
3237       r2 = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd2.dw_cfi_reg_num, 1);
3238       fprintf (asm_out_file, "\t.cfi_register %lu, %lu\n", r, r2);
3239       break;
3240
3241     case DW_CFA_def_cfa_offset:
3242     case DW_CFA_def_cfa_offset_sf:
3243       fprintf (asm_out_file, "\t.cfi_def_cfa_offset "
3244                HOST_WIDE_INT_PRINT_DEC"\n",
3245                cfi->dw_cfi_oprnd1.dw_cfi_offset);
3246       break;
3247
3248     case DW_CFA_remember_state:
3249       fprintf (asm_out_file, "\t.cfi_remember_state\n");
3250       break;
3251     case DW_CFA_restore_state:
3252       fprintf (asm_out_file, "\t.cfi_restore_state\n");
3253       break;
3254
3255     case DW_CFA_GNU_args_size:
3256       fprintf (asm_out_file, "\t.cfi_escape %#x,", DW_CFA_GNU_args_size);
3257       dw2_asm_output_data_uleb128_raw (cfi->dw_cfi_oprnd1.dw_cfi_offset);
3258       if (flag_debug_asm)
3259         fprintf (asm_out_file, "\t%s args_size "HOST_WIDE_INT_PRINT_DEC,
3260                  ASM_COMMENT_START, cfi->dw_cfi_oprnd1.dw_cfi_offset);
3261       fputc ('\n', asm_out_file);
3262       break;
3263
3264     case DW_CFA_GNU_window_save:
3265       fprintf (asm_out_file, "\t.cfi_window_save\n");
3266       break;
3267
3268     case DW_CFA_def_cfa_expression:
3269     case DW_CFA_expression:
3270       fprintf (asm_out_file, "\t.cfi_escape %#x,", cfi->dw_cfi_opc);
3271       output_cfa_loc_raw (cfi);
3272       fputc ('\n', asm_out_file);
3273       break;
3274
3275     default:
3276       gcc_unreachable ();
3277     }
3278 }
3279
3280 DEF_VEC_P (dw_cfi_ref);
3281 DEF_VEC_ALLOC_P (dw_cfi_ref, heap);
3282
3283 /* Output CFIs to bring current FDE to the same state as after executing
3284    CFIs in CFI chain.  DO_CFI_ASM is true if .cfi_* directives shall
3285    be emitted, false otherwise.  If it is false, FDE and FOR_EH are the
3286    other arguments to pass to output_cfi.  */
3287
3288 static void
3289 output_cfis (dw_cfi_ref cfi, bool do_cfi_asm, dw_fde_ref fde, bool for_eh)
3290 {
3291   struct dw_cfi_struct cfi_buf;
3292   dw_cfi_ref cfi2;
3293   dw_cfi_ref cfi_args_size = NULL, cfi_cfa = NULL, cfi_cfa_offset = NULL;
3294   VEC (dw_cfi_ref, heap) *regs = VEC_alloc (dw_cfi_ref, heap, 32);
3295   unsigned int len, idx;
3296
3297   for (;; cfi = cfi->dw_cfi_next)
3298     switch (cfi ? cfi->dw_cfi_opc : DW_CFA_nop)
3299       {
3300       case DW_CFA_advance_loc:
3301       case DW_CFA_advance_loc1:
3302       case DW_CFA_advance_loc2:
3303       case DW_CFA_advance_loc4:
3304       case DW_CFA_MIPS_advance_loc8:
3305       case DW_CFA_set_loc:
3306         /* All advances should be ignored.  */
3307         break;
3308       case DW_CFA_remember_state:
3309         {
3310           dw_cfi_ref args_size = cfi_args_size;
3311
3312           /* Skip everything between .cfi_remember_state and
3313              .cfi_restore_state.  */
3314           for (cfi2 = cfi->dw_cfi_next; cfi2; cfi2 = cfi2->dw_cfi_next)
3315             if (cfi2->dw_cfi_opc == DW_CFA_restore_state)
3316               break;
3317             else if (cfi2->dw_cfi_opc == DW_CFA_GNU_args_size)
3318               args_size = cfi2;
3319             else
3320               gcc_assert (cfi2->dw_cfi_opc != DW_CFA_remember_state);
3321
3322           if (cfi2 == NULL)
3323             goto flush_all;
3324           else
3325             {
3326               cfi = cfi2;
3327               cfi_args_size = args_size;
3328             }
3329           break;
3330         }
3331       case DW_CFA_GNU_args_size:
3332         cfi_args_size = cfi;
3333         break;
3334       case DW_CFA_GNU_window_save:
3335         goto flush_all;
3336       case DW_CFA_offset:
3337       case DW_CFA_offset_extended:
3338       case DW_CFA_offset_extended_sf:
3339       case DW_CFA_restore:
3340       case DW_CFA_restore_extended:
3341       case DW_CFA_undefined:
3342       case DW_CFA_same_value:
3343       case DW_CFA_register:
3344       case DW_CFA_val_offset:
3345       case DW_CFA_val_offset_sf:
3346       case DW_CFA_expression:
3347       case DW_CFA_val_expression:
3348       case DW_CFA_GNU_negative_offset_extended:
3349         if (VEC_length (dw_cfi_ref, regs) <= cfi->dw_cfi_oprnd1.dw_cfi_reg_num)
3350           VEC_safe_grow_cleared (dw_cfi_ref, heap, regs,
3351                                  cfi->dw_cfi_oprnd1.dw_cfi_reg_num + 1);
3352         VEC_replace (dw_cfi_ref, regs, cfi->dw_cfi_oprnd1.dw_cfi_reg_num, cfi);
3353         break;
3354       case DW_CFA_def_cfa:
3355       case DW_CFA_def_cfa_sf:
3356       case DW_CFA_def_cfa_expression:
3357         cfi_cfa = cfi;
3358         cfi_cfa_offset = cfi;
3359         break;
3360       case DW_CFA_def_cfa_register:
3361         cfi_cfa = cfi;
3362         break;
3363       case DW_CFA_def_cfa_offset:
3364       case DW_CFA_def_cfa_offset_sf:
3365         cfi_cfa_offset = cfi;
3366         break;
3367       case DW_CFA_nop:
3368         gcc_assert (cfi == NULL);
3369       flush_all:
3370         len = VEC_length (dw_cfi_ref, regs);
3371         for (idx = 0; idx < len; idx++)
3372           {
3373             cfi2 = VEC_replace (dw_cfi_ref, regs, idx, NULL);
3374             if (cfi2 != NULL
3375                 && cfi2->dw_cfi_opc != DW_CFA_restore
3376                 && cfi2->dw_cfi_opc != DW_CFA_restore_extended)
3377               {
3378                 if (do_cfi_asm)
3379                   output_cfi_directive (cfi2);
3380                 else
3381                   output_cfi (cfi2, fde, for_eh);
3382               }
3383           }
3384         if (cfi_cfa && cfi_cfa_offset && cfi_cfa_offset != cfi_cfa)
3385           {
3386             gcc_assert (cfi_cfa->dw_cfi_opc != DW_CFA_def_cfa_expression);
3387             cfi_buf = *cfi_cfa;
3388             switch (cfi_cfa_offset->dw_cfi_opc)
3389               {
3390               case DW_CFA_def_cfa_offset:
3391                 cfi_buf.dw_cfi_opc = DW_CFA_def_cfa;
3392                 cfi_buf.dw_cfi_oprnd2 = cfi_cfa_offset->dw_cfi_oprnd1;
3393                 break;
3394               case DW_CFA_def_cfa_offset_sf:
3395                 cfi_buf.dw_cfi_opc = DW_CFA_def_cfa_sf;
3396                 cfi_buf.dw_cfi_oprnd2 = cfi_cfa_offset->dw_cfi_oprnd1;
3397                 break;
3398               case DW_CFA_def_cfa:
3399               case DW_CFA_def_cfa_sf:
3400                 cfi_buf.dw_cfi_opc = cfi_cfa_offset->dw_cfi_opc;
3401                 cfi_buf.dw_cfi_oprnd2 = cfi_cfa_offset->dw_cfi_oprnd2;
3402                 break;
3403               default:
3404                 gcc_unreachable ();
3405               }
3406             cfi_cfa = &cfi_buf;
3407           }
3408         else if (cfi_cfa_offset)
3409           cfi_cfa = cfi_cfa_offset;
3410         if (cfi_cfa)
3411           {
3412             if (do_cfi_asm)
3413               output_cfi_directive (cfi_cfa);
3414             else
3415               output_cfi (cfi_cfa, fde, for_eh);
3416           }
3417         cfi_cfa = NULL;
3418         cfi_cfa_offset = NULL;
3419         if (cfi_args_size
3420             && cfi_args_size->dw_cfi_oprnd1.dw_cfi_offset)
3421           {
3422             if (do_cfi_asm)
3423               output_cfi_directive (cfi_args_size);
3424             else
3425               output_cfi (cfi_args_size, fde, for_eh);
3426           }
3427         cfi_args_size = NULL;
3428         if (cfi == NULL)
3429           {
3430             VEC_free (dw_cfi_ref, heap, regs);
3431             return;
3432           }
3433         else if (do_cfi_asm)
3434           output_cfi_directive (cfi);
3435         else
3436           output_cfi (cfi, fde, for_eh);
3437         break;
3438       default:
3439         gcc_unreachable ();
3440     }
3441 }
3442
3443 /* Output one FDE.  */
3444
3445 static void
3446 output_fde (dw_fde_ref fde, bool for_eh, bool second,
3447             char *section_start_label, int fde_encoding, char *augmentation,
3448             bool any_lsda_needed, int lsda_encoding)
3449 {
3450   const char *begin, *end;
3451   static unsigned int j;
3452   char l1[20], l2[20];
3453   dw_cfi_ref cfi;
3454
3455   targetm.asm_out.unwind_label (asm_out_file, fde->decl, for_eh,
3456                                 /* empty */ 0);
3457   targetm.asm_out.internal_label (asm_out_file, FDE_LABEL,
3458                                   for_eh + j);
3459   ASM_GENERATE_INTERNAL_LABEL (l1, FDE_AFTER_SIZE_LABEL, for_eh + j);
3460   ASM_GENERATE_INTERNAL_LABEL (l2, FDE_END_LABEL, for_eh + j);
3461   if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4 && !for_eh)
3462     dw2_asm_output_data (4, 0xffffffff, "Initial length escape value"
3463                          " indicating 64-bit DWARF extension");
3464   dw2_asm_output_delta (for_eh ? 4 : DWARF_OFFSET_SIZE, l2, l1,
3465                         "FDE Length");
3466   ASM_OUTPUT_LABEL (asm_out_file, l1);
3467
3468   if (for_eh)
3469     dw2_asm_output_delta (4, l1, section_start_label, "FDE CIE offset");
3470   else
3471     dw2_asm_output_offset (DWARF_OFFSET_SIZE, section_start_label,
3472                            debug_frame_section, "FDE CIE offset");
3473
3474   if (!fde->dw_fde_switched_sections)
3475     {
3476       begin = fde->dw_fde_begin;
3477       end = fde->dw_fde_end;
3478     }
3479   else
3480     {
3481       /* For the first section, prefer dw_fde_begin over
3482          dw_fde_{hot,cold}_section_label, as the latter
3483          might be separated from the real start of the
3484          function by alignment padding.  */
3485       if (!second)
3486         begin = fde->dw_fde_begin;
3487       else if (fde->dw_fde_switched_cold_to_hot)
3488         begin = fde->dw_fde_hot_section_label;
3489       else
3490         begin = fde->dw_fde_unlikely_section_label;
3491       if (second ^ fde->dw_fde_switched_cold_to_hot)
3492         end = fde->dw_fde_unlikely_section_end_label;
3493       else
3494         end = fde->dw_fde_hot_section_end_label;
3495     }
3496
3497   if (for_eh)
3498     {
3499       rtx sym_ref = gen_rtx_SYMBOL_REF (Pmode, begin);
3500       SYMBOL_REF_FLAGS (sym_ref) |= SYMBOL_FLAG_LOCAL;
3501       dw2_asm_output_encoded_addr_rtx (fde_encoding, sym_ref, false,
3502                                        "FDE initial location");
3503       dw2_asm_output_delta (size_of_encoded_value (fde_encoding),
3504                             end, begin, "FDE address range");
3505     }
3506   else
3507     {
3508       dw2_asm_output_addr (DWARF2_ADDR_SIZE, begin, "FDE initial location");
3509       dw2_asm_output_delta (DWARF2_ADDR_SIZE, end, begin, "FDE address range");
3510     }
3511
3512   if (augmentation[0])
3513     {
3514       if (any_lsda_needed)
3515         {
3516           int size = size_of_encoded_value (lsda_encoding);
3517
3518           if (lsda_encoding == DW_EH_PE_aligned)
3519             {
3520               int offset = (  4         /* Length */
3521                             + 4         /* CIE offset */
3522                             + 2 * size_of_encoded_value (fde_encoding)
3523                             + 1         /* Augmentation size */ );
3524               int pad = -offset & (PTR_SIZE - 1);
3525
3526               size += pad;
3527               gcc_assert (size_of_uleb128 (size) == 1);
3528             }
3529
3530           dw2_asm_output_data_uleb128 (size, "Augmentation size");
3531
3532           if (fde->uses_eh_lsda)
3533             {
3534               ASM_GENERATE_INTERNAL_LABEL (l1, second ? "LLSDAC" : "LLSDA",
3535                                            fde->funcdef_number);
3536               dw2_asm_output_encoded_addr_rtx (lsda_encoding,
3537                                                gen_rtx_SYMBOL_REF (Pmode, l1),
3538                                                false,
3539                                                "Language Specific Data Area");
3540             }
3541           else
3542             {
3543               if (lsda_encoding == DW_EH_PE_aligned)
3544                 ASM_OUTPUT_ALIGN (asm_out_file, floor_log2 (PTR_SIZE));
3545               dw2_asm_output_data (size_of_encoded_value (lsda_encoding), 0,
3546                                    "Language Specific Data Area (none)");
3547             }
3548         }
3549       else
3550         dw2_asm_output_data_uleb128 (0, "Augmentation size");
3551     }
3552
3553   /* Loop through the Call Frame Instructions associated with
3554      this FDE.  */
3555   fde->dw_fde_current_label = begin;
3556   if (!fde->dw_fde_switched_sections)
3557     for (cfi = fde->dw_fde_cfi; cfi != NULL; cfi = cfi->dw_cfi_next)
3558       output_cfi (cfi, fde, for_eh);
3559   else if (!second)
3560     {
3561       if (fde->dw_fde_switch_cfi)
3562         for (cfi = fde->dw_fde_cfi; cfi != NULL; cfi = cfi->dw_cfi_next)
3563           {
3564             output_cfi (cfi, fde, for_eh);
3565             if (cfi == fde->dw_fde_switch_cfi)
3566               break;
3567           }
3568     }
3569   else
3570     {
3571       dw_cfi_ref cfi_next = fde->dw_fde_cfi;
3572
3573       if (fde->dw_fde_switch_cfi)
3574         {
3575           cfi_next = fde->dw_fde_switch_cfi->dw_cfi_next;
3576           fde->dw_fde_switch_cfi->dw_cfi_next = NULL;
3577           output_cfis (fde->dw_fde_cfi, false, fde, for_eh);
3578           fde->dw_fde_switch_cfi->dw_cfi_next = cfi_next;
3579         }
3580       for (cfi = cfi_next; cfi != NULL; cfi = cfi->dw_cfi_next)
3581         output_cfi (cfi, fde, for_eh);
3582     }
3583
3584   /* If we are to emit a ref/link from function bodies to their frame tables,
3585      do it now.  This is typically performed to make sure that tables
3586      associated with functions are dragged with them and not discarded in
3587      garbage collecting links. We need to do this on a per function basis to
3588      cope with -ffunction-sections.  */
3589
3590 #ifdef ASM_OUTPUT_DWARF_TABLE_REF
3591   /* Switch to the function section, emit the ref to the tables, and
3592      switch *back* into the table section.  */
3593   switch_to_section (function_section (fde->decl));
3594   ASM_OUTPUT_DWARF_TABLE_REF (section_start_label);
3595   switch_to_frame_table_section (for_eh, true);
3596 #endif
3597
3598   /* Pad the FDE out to an address sized boundary.  */
3599   ASM_OUTPUT_ALIGN (asm_out_file,
3600                     floor_log2 ((for_eh ? PTR_SIZE : DWARF2_ADDR_SIZE)));
3601   ASM_OUTPUT_LABEL (asm_out_file, l2);
3602
3603   j += 2;
3604 }
3605
3606 /* Return true if frame description entry FDE is needed for EH.  */
3607
3608 static bool
3609 fde_needed_for_eh_p (dw_fde_ref fde)
3610 {
3611   if (flag_asynchronous_unwind_tables)
3612     return true;
3613
3614   if (TARGET_USES_WEAK_UNWIND_INFO && DECL_WEAK (fde->decl))
3615     return true;
3616
3617   if (fde->uses_eh_lsda)
3618     return true;
3619
3620   /* If exceptions are enabled, we have collected nothrow info.  */
3621   if (flag_exceptions && (fde->all_throwers_are_sibcalls || fde->nothrow))
3622     return false;
3623
3624   return true;
3625 }
3626
3627 /* Output the call frame information used to record information
3628    that relates to calculating the frame pointer, and records the
3629    location of saved registers.  */
3630
3631 static void
3632 output_call_frame_info (int for_eh)
3633 {
3634   unsigned int i;
3635   dw_fde_ref fde;
3636   dw_cfi_ref cfi;
3637   char l1[20], l2[20], section_start_label[20];
3638   bool any_lsda_needed = false;
3639   char augmentation[6];
3640   int augmentation_size;
3641   int fde_encoding = DW_EH_PE_absptr;
3642   int per_encoding = DW_EH_PE_absptr;
3643   int lsda_encoding = DW_EH_PE_absptr;
3644   int return_reg;
3645   rtx personality = NULL;
3646   int dw_cie_version;
3647
3648   /* Don't emit a CIE if there won't be any FDEs.  */
3649   if (fde_table_in_use == 0)
3650     return;
3651
3652   /* Nothing to do if the assembler's doing it all.  */
3653   if (dwarf2out_do_cfi_asm ())
3654     return;
3655
3656   /* If we don't have any functions we'll want to unwind out of, don't emit
3657      any EH unwind information.  If we make FDEs linkonce, we may have to
3658      emit an empty label for an FDE that wouldn't otherwise be emitted.  We
3659      want to avoid having an FDE kept around when the function it refers to
3660      is discarded.  Example where this matters: a primary function template
3661      in C++ requires EH information, an explicit specialization doesn't.  */
3662   if (for_eh)
3663     {
3664       bool any_eh_needed = false;
3665
3666       for (i = 0; i < fde_table_in_use; i++)
3667         if (fde_table[i].uses_eh_lsda)
3668           any_eh_needed = any_lsda_needed = true;
3669         else if (fde_needed_for_eh_p (&fde_table[i]))
3670           any_eh_needed = true;
3671         else if (TARGET_USES_WEAK_UNWIND_INFO)
3672           targetm.asm_out.unwind_label (asm_out_file, fde_table[i].decl, 1, 1);
3673
3674       if (!any_eh_needed)
3675         return;
3676     }
3677
3678   /* We're going to be generating comments, so turn on app.  */
3679   if (flag_debug_asm)
3680     app_enable ();
3681
3682   /* Switch to the proper frame section, first time.  */
3683   switch_to_frame_table_section (for_eh, false);
3684
3685   ASM_GENERATE_INTERNAL_LABEL (section_start_label, FRAME_BEGIN_LABEL, for_eh);
3686   ASM_OUTPUT_LABEL (asm_out_file, section_start_label);
3687
3688   /* Output the CIE.  */
3689   ASM_GENERATE_INTERNAL_LABEL (l1, CIE_AFTER_SIZE_LABEL, for_eh);
3690   ASM_GENERATE_INTERNAL_LABEL (l2, CIE_END_LABEL, for_eh);
3691   if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4 && !for_eh)
3692     dw2_asm_output_data (4, 0xffffffff,
3693       "Initial length escape value indicating 64-bit DWARF extension");
3694   dw2_asm_output_delta (for_eh ? 4 : DWARF_OFFSET_SIZE, l2, l1,
3695                         "Length of Common Information Entry");
3696   ASM_OUTPUT_LABEL (asm_out_file, l1);
3697
3698   /* Now that the CIE pointer is PC-relative for EH,
3699      use 0 to identify the CIE.  */
3700   dw2_asm_output_data ((for_eh ? 4 : DWARF_OFFSET_SIZE),
3701                        (for_eh ? 0 : DWARF_CIE_ID),
3702                        "CIE Identifier Tag");
3703
3704   /* Use the CIE version 3 for DWARF3; allow DWARF2 to continue to
3705      use CIE version 1, unless that would produce incorrect results
3706      due to overflowing the return register column.  */
3707   return_reg = DWARF2_FRAME_REG_OUT (DWARF_FRAME_RETURN_COLUMN, for_eh);
3708   dw_cie_version = 1;
3709   if (return_reg >= 256 || dwarf_version > 2)
3710     dw_cie_version = 3;
3711   dw2_asm_output_data (1, dw_cie_version, "CIE Version");
3712
3713   augmentation[0] = 0;
3714   augmentation_size = 0;
3715
3716   personality = current_unit_personality;
3717   if (for_eh)
3718     {
3719       char *p;
3720
3721       /* Augmentation:
3722          z      Indicates that a uleb128 is present to size the
3723                 augmentation section.
3724          L      Indicates the encoding (and thus presence) of
3725                 an LSDA pointer in the FDE augmentation.
3726          R      Indicates a non-default pointer encoding for
3727                 FDE code pointers.
3728          P      Indicates the presence of an encoding + language
3729                 personality routine in the CIE augmentation.  */
3730
3731       fde_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/1, /*global=*/0);
3732       per_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/2, /*global=*/1);
3733       lsda_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/0, /*global=*/0);
3734
3735       p = augmentation + 1;
3736       if (personality)
3737         {
3738           *p++ = 'P';
3739           augmentation_size += 1 + size_of_encoded_value (per_encoding);
3740           assemble_external_libcall (personality);
3741         }
3742       if (any_lsda_needed)
3743         {
3744           *p++ = 'L';
3745           augmentation_size += 1;
3746         }
3747       if (fde_encoding != DW_EH_PE_absptr)
3748         {
3749           *p++ = 'R';
3750           augmentation_size += 1;
3751         }
3752       if (p > augmentation + 1)
3753         {
3754           augmentation[0] = 'z';
3755           *p = '\0';
3756         }
3757
3758       /* Ug.  Some platforms can't do unaligned dynamic relocations at all.  */
3759       if (personality && per_encoding == DW_EH_PE_aligned)
3760         {
3761           int offset = (  4             /* Length */
3762                         + 4             /* CIE Id */
3763                         + 1             /* CIE version */
3764                         + strlen (augmentation) + 1     /* Augmentation */
3765                         + size_of_uleb128 (1)           /* Code alignment */
3766                         + size_of_sleb128 (DWARF_CIE_DATA_ALIGNMENT)
3767                         + 1             /* RA column */
3768                         + 1             /* Augmentation size */
3769                         + 1             /* Personality encoding */ );
3770           int pad = -offset & (PTR_SIZE - 1);
3771
3772           augmentation_size += pad;
3773
3774           /* Augmentations should be small, so there's scarce need to
3775              iterate for a solution.  Die if we exceed one uleb128 byte.  */
3776           gcc_assert (size_of_uleb128 (augmentation_size) == 1);
3777         }
3778     }
3779
3780   dw2_asm_output_nstring (augmentation, -1, "CIE Augmentation");
3781   if (dw_cie_version >= 4)
3782     {
3783       dw2_asm_output_data (1, DWARF2_ADDR_SIZE, "CIE Address Size");
3784       dw2_asm_output_data (1, 0, "CIE Segment Size");
3785     }
3786   dw2_asm_output_data_uleb128 (1, "CIE Code Alignment Factor");
3787   dw2_asm_output_data_sleb128 (DWARF_CIE_DATA_ALIGNMENT,
3788                                "CIE Data Alignment Factor");
3789
3790   if (dw_cie_version == 1)
3791     dw2_asm_output_data (1, return_reg, "CIE RA Column");
3792   else
3793     dw2_asm_output_data_uleb128 (return_reg, "CIE RA Column");
3794
3795   if (augmentation[0])
3796     {
3797       dw2_asm_output_data_uleb128 (augmentation_size, "Augmentation size");
3798       if (personality)
3799         {
3800           dw2_asm_output_data (1, per_encoding, "Personality (%s)",
3801                                eh_data_format_name (per_encoding));
3802           dw2_asm_output_encoded_addr_rtx (per_encoding,
3803                                            personality,
3804                                            true, NULL);
3805         }
3806
3807       if (any_lsda_needed)
3808         dw2_asm_output_data (1, lsda_encoding, "LSDA Encoding (%s)",
3809                              eh_data_format_name (lsda_encoding));
3810
3811       if (fde_encoding != DW_EH_PE_absptr)
3812         dw2_asm_output_data (1, fde_encoding, "FDE Encoding (%s)",
3813                              eh_data_format_name (fde_encoding));
3814     }
3815
3816   for (cfi = cie_cfi_head; cfi != NULL; cfi = cfi->dw_cfi_next)
3817     output_cfi (cfi, NULL, for_eh);
3818
3819   /* Pad the CIE out to an address sized boundary.  */
3820   ASM_OUTPUT_ALIGN (asm_out_file,
3821                     floor_log2 (for_eh ? PTR_SIZE : DWARF2_ADDR_SIZE));
3822   ASM_OUTPUT_LABEL (asm_out_file, l2);
3823
3824   /* Loop through all of the FDE's.  */
3825   for (i = 0; i < fde_table_in_use; i++)
3826     {
3827       unsigned int k;
3828       fde = &fde_table[i];
3829
3830       /* Don't emit EH unwind info for leaf functions that don't need it.  */
3831       if (for_eh && !fde_needed_for_eh_p (fde))
3832         continue;
3833
3834       for (k = 0; k < (fde->dw_fde_switched_sections ? 2 : 1); k++)
3835         output_fde (fde, for_eh, k, section_start_label, fde_encoding,
3836                     augmentation, any_lsda_needed, lsda_encoding);
3837     }
3838
3839   if (for_eh && targetm.terminate_dw2_eh_frame_info)
3840     dw2_asm_output_data (4, 0, "End of Table");
3841 #ifdef MIPS_DEBUGGING_INFO
3842   /* Work around Irix 6 assembler bug whereby labels at the end of a section
3843      get a value of 0.  Putting .align 0 after the label fixes it.  */
3844   ASM_OUTPUT_ALIGN (asm_out_file, 0);
3845 #endif
3846
3847   /* Turn off app to make assembly quicker.  */
3848   if (flag_debug_asm)
3849     app_disable ();
3850 }
3851
3852 /* Emit .cfi_startproc and .cfi_personality/.cfi_lsda if needed.  */
3853
3854 static void
3855 dwarf2out_do_cfi_startproc (bool second)
3856 {
3857   int enc;
3858   rtx ref;
3859   rtx personality = get_personality_function (current_function_decl);
3860
3861   fprintf (asm_out_file, "\t.cfi_startproc\n");
3862
3863   if (personality)
3864     {
3865       enc = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/2, /*global=*/1);
3866       ref = personality;
3867
3868       /* ??? The GAS support isn't entirely consistent.  We have to
3869          handle indirect support ourselves, but PC-relative is done
3870          in the assembler.  Further, the assembler can't handle any
3871          of the weirder relocation types.  */
3872       if (enc & DW_EH_PE_indirect)
3873         ref = dw2_force_const_mem (ref, true);
3874
3875       fprintf (asm_out_file, "\t.cfi_personality %#x,", enc);
3876       output_addr_const (asm_out_file, ref);
3877       fputc ('\n', asm_out_file);
3878     }
3879
3880   if (crtl->uses_eh_lsda)
3881     {
3882       char lab[20];
3883
3884       enc = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/0, /*global=*/0);
3885       ASM_GENERATE_INTERNAL_LABEL (lab, second ? "LLSDAC" : "LLSDA",
3886                                    current_function_funcdef_no);
3887       ref = gen_rtx_SYMBOL_REF (Pmode, lab);
3888       SYMBOL_REF_FLAGS (ref) = SYMBOL_FLAG_LOCAL;
3889
3890       if (enc & DW_EH_PE_indirect)
3891         ref = dw2_force_const_mem (ref, true);
3892
3893       fprintf (asm_out_file, "\t.cfi_lsda %#x,", enc);
3894       output_addr_const (asm_out_file, ref);
3895       fputc ('\n', asm_out_file);
3896     }
3897 }
3898
3899 /* Output a marker (i.e. a label) for the beginning of a function, before
3900    the prologue.  */
3901
3902 void
3903 dwarf2out_begin_prologue (unsigned int line ATTRIBUTE_UNUSED,
3904                           const char *file ATTRIBUTE_UNUSED)
3905 {
3906   char label[MAX_ARTIFICIAL_LABEL_BYTES];
3907   char * dup_label;
3908   dw_fde_ref fde;
3909   section *fnsec;
3910
3911   current_function_func_begin_label = NULL;
3912
3913 #ifdef TARGET_UNWIND_INFO
3914   /* ??? current_function_func_begin_label is also used by except.c
3915      for call-site information.  We must emit this label if it might
3916      be used.  */
3917   if ((! flag_exceptions || USING_SJLJ_EXCEPTIONS)
3918       && ! dwarf2out_do_frame ())
3919     return;
3920 #else
3921   if (! dwarf2out_do_frame ())
3922     return;
3923 #endif
3924
3925   fnsec = function_section (current_function_decl);
3926   switch_to_section (fnsec);
3927   ASM_GENERATE_INTERNAL_LABEL (label, FUNC_BEGIN_LABEL,
3928                                current_function_funcdef_no);
3929   ASM_OUTPUT_DEBUG_LABEL (asm_out_file, FUNC_BEGIN_LABEL,
3930                           current_function_funcdef_no);
3931   dup_label = xstrdup (label);
3932   current_function_func_begin_label = dup_label;
3933
3934 #ifdef TARGET_UNWIND_INFO
3935   /* We can elide the fde allocation if we're not emitting debug info.  */
3936   if (! dwarf2out_do_frame ())
3937     return;
3938 #endif
3939
3940   /* Expand the fde table if necessary.  */
3941   if (fde_table_in_use == fde_table_allocated)
3942     {
3943       fde_table_allocated += FDE_TABLE_INCREMENT;
3944       fde_table = GGC_RESIZEVEC (dw_fde_node, fde_table, fde_table_allocated);
3945       memset (fde_table + fde_table_in_use, 0,
3946               FDE_TABLE_INCREMENT * sizeof (dw_fde_node));
3947     }
3948
3949   /* Record the FDE associated with this function.  */
3950   current_funcdef_fde = fde_table_in_use;
3951
3952   /* Add the new FDE at the end of the fde_table.  */
3953   fde = &fde_table[fde_table_in_use++];
3954   fde->decl = current_function_decl;
3955   fde->dw_fde_begin = dup_label;
3956   fde->dw_fde_current_label = dup_label;
3957   fde->dw_fde_hot_section_label = NULL;
3958   fde->dw_fde_hot_section_end_label = NULL;
3959   fde->dw_fde_unlikely_section_label = NULL;
3960   fde->dw_fde_unlikely_section_end_label = NULL;
3961   fde->dw_fde_switched_sections = 0;
3962   fde->dw_fde_switched_cold_to_hot = 0;
3963   fde->dw_fde_end = NULL;
3964   fde->dw_fde_cfi = NULL;
3965   fde->dw_fde_switch_cfi = NULL;
3966   fde->funcdef_number = current_function_funcdef_no;
3967   fde->all_throwers_are_sibcalls = crtl->all_throwers_are_sibcalls;
3968   fde->uses_eh_lsda = crtl->uses_eh_lsda;
3969   fde->nothrow = crtl->nothrow;
3970   fde->drap_reg = INVALID_REGNUM;
3971   fde->vdrap_reg = INVALID_REGNUM;
3972   if (flag_reorder_blocks_and_partition)
3973     {
3974       section *unlikelysec;
3975       if (first_function_block_is_cold)
3976         fde->in_std_section = 1;
3977       else
3978         fde->in_std_section
3979           = (fnsec == text_section
3980              || (cold_text_section && fnsec == cold_text_section));
3981       unlikelysec = unlikely_text_section ();
3982       fde->cold_in_std_section
3983         = (unlikelysec == text_section
3984            || (cold_text_section && unlikelysec == cold_text_section));
3985     }
3986   else
3987     {
3988       fde->in_std_section
3989         = (fnsec == text_section
3990            || (cold_text_section && fnsec == cold_text_section));
3991       fde->cold_in_std_section = 0;
3992     }
3993
3994   args_size = old_args_size = 0;
3995
3996   /* We only want to output line number information for the genuine dwarf2
3997      prologue case, not the eh frame case.  */
3998 #ifdef DWARF2_DEBUGGING_INFO
3999   if (file)
4000     dwarf2out_source_line (line, file, 0, true);
4001 #endif
4002
4003   if (dwarf2out_do_cfi_asm ())
4004     dwarf2out_do_cfi_startproc (false);
4005   else
4006     {
4007       rtx personality = get_personality_function (current_function_decl);
4008       if (!current_unit_personality)
4009         current_unit_personality = personality;
4010
4011       /* We cannot keep a current personality per function as without CFI
4012          asm, at the point where we emit the CFI data, there is no current
4013          function anymore.  */
4014       if (personality && current_unit_personality != personality)
4015         sorry ("multiple EH personalities are supported only with assemblers "
4016                "supporting .cfi_personality directive");
4017     }
4018 }
4019
4020 /* Output a marker (i.e. a label) for the absolute end of the generated code
4021    for a function definition.  This gets called *after* the epilogue code has
4022    been generated.  */
4023
4024 void
4025 dwarf2out_end_epilogue (unsigned int line ATTRIBUTE_UNUSED,
4026                         const char *file ATTRIBUTE_UNUSED)
4027 {
4028   dw_fde_ref fde;
4029   char label[MAX_ARTIFICIAL_LABEL_BYTES];
4030
4031 #ifdef DWARF2_DEBUGGING_INFO
4032   last_var_location_insn = NULL_RTX;
4033 #endif
4034
4035   if (dwarf2out_do_cfi_asm ())
4036     fprintf (asm_out_file, "\t.cfi_endproc\n");
4037
4038   /* Output a label to mark the endpoint of the code generated for this
4039      function.  */
4040   ASM_GENERATE_INTERNAL_LABEL (label, FUNC_END_LABEL,
4041                                current_function_funcdef_no);
4042   ASM_OUTPUT_LABEL (asm_out_file, label);
4043   fde = current_fde ();
4044   gcc_assert (fde != NULL);
4045   fde->dw_fde_end = xstrdup (label);
4046 }
4047
4048 void
4049 dwarf2out_frame_init (void)
4050 {
4051   /* Allocate the initial hunk of the fde_table.  */
4052   fde_table = GGC_CNEWVEC (dw_fde_node, FDE_TABLE_INCREMENT);
4053   fde_table_allocated = FDE_TABLE_INCREMENT;
4054   fde_table_in_use = 0;
4055
4056   /* Generate the CFA instructions common to all FDE's.  Do it now for the
4057      sake of lookup_cfa.  */
4058
4059   /* On entry, the Canonical Frame Address is at SP.  */
4060   dwarf2out_def_cfa (NULL, STACK_POINTER_REGNUM, INCOMING_FRAME_SP_OFFSET);
4061
4062 #ifdef DWARF2_UNWIND_INFO
4063   if (DWARF2_UNWIND_INFO || DWARF2_FRAME_INFO)
4064     initial_return_save (INCOMING_RETURN_ADDR_RTX);
4065 #endif
4066 }
4067
4068 void
4069 dwarf2out_frame_finish (void)
4070 {
4071   /* Output call frame information.  */
4072   if (DWARF2_FRAME_INFO)
4073     output_call_frame_info (0);
4074
4075 #ifndef TARGET_UNWIND_INFO
4076   /* Output another copy for the unwinder.  */
4077   if (! USING_SJLJ_EXCEPTIONS && (flag_unwind_tables || flag_exceptions))
4078     output_call_frame_info (1);
4079 #endif
4080 }
4081
4082 /* Note that the current function section is being used for code.  */
4083
4084 static void
4085 dwarf2out_note_section_used (void)
4086 {
4087   section *sec = current_function_section ();
4088   if (sec == text_section)
4089     text_section_used = true;
4090   else if (sec == cold_text_section)
4091     cold_text_section_used = true;
4092 }
4093
4094 void
4095 dwarf2out_switch_text_section (void)
4096 {
4097   dw_fde_ref fde = current_fde ();
4098
4099   gcc_assert (cfun && fde && !fde->dw_fde_switched_sections);
4100
4101   fde->dw_fde_switched_sections = 1;
4102   fde->dw_fde_switched_cold_to_hot = !in_cold_section_p;
4103
4104   fde->dw_fde_hot_section_label = crtl->subsections.hot_section_label;
4105   fde->dw_fde_hot_section_end_label = crtl->subsections.hot_section_end_label;
4106   fde->dw_fde_unlikely_section_label = crtl->subsections.cold_section_label;
4107   fde->dw_fde_unlikely_section_end_label = crtl->subsections.cold_section_end_label;
4108   have_multiple_function_sections = true;
4109
4110   /* Reset the current label on switching text sections, so that we
4111      don't attempt to advance_loc4 between labels in different sections.  */
4112   fde->dw_fde_current_label = NULL;
4113
4114   /* There is no need to mark used sections when not debugging.  */
4115   if (cold_text_section != NULL)
4116     dwarf2out_note_section_used ();
4117
4118   if (dwarf2out_do_cfi_asm ())
4119     fprintf (asm_out_file, "\t.cfi_endproc\n");
4120
4121   /* Now do the real section switch.  */
4122   switch_to_section (current_function_section ());
4123
4124   if (dwarf2out_do_cfi_asm ())
4125     {
4126       dwarf2out_do_cfi_startproc (true);
4127       /* As this is a different FDE, insert all current CFI instructions
4128          again.  */
4129       output_cfis (fde->dw_fde_cfi, true, fde, true);
4130     }
4131   else
4132     {
4133       dw_cfi_ref cfi = fde->dw_fde_cfi;
4134
4135       cfi = fde->dw_fde_cfi;
4136       if (cfi)
4137         while (cfi->dw_cfi_next != NULL)
4138           cfi = cfi->dw_cfi_next;
4139       fde->dw_fde_switch_cfi = cfi;
4140     }
4141 }
4142 #endif
4143 \f
4144 /* And now, the subset of the debugging information support code necessary
4145    for emitting location expressions.  */
4146
4147 /* Data about a single source file.  */
4148 struct GTY(()) dwarf_file_data {
4149   const char * filename;
4150   int emitted_number;
4151 };
4152
4153 typedef struct dw_val_struct *dw_val_ref;
4154 typedef struct die_struct *dw_die_ref;
4155 typedef const struct die_struct *const_dw_die_ref;
4156 typedef struct dw_loc_descr_struct *dw_loc_descr_ref;
4157 typedef struct dw_loc_list_struct *dw_loc_list_ref;
4158
4159 typedef struct GTY(()) deferred_locations_struct
4160 {
4161   tree variable;
4162   dw_die_ref die;
4163 } deferred_locations;
4164
4165 DEF_VEC_O(deferred_locations);
4166 DEF_VEC_ALLOC_O(deferred_locations,gc);
4167
4168 static GTY(()) VEC(deferred_locations, gc) *deferred_locations_list;
4169
4170 DEF_VEC_P(dw_die_ref);
4171 DEF_VEC_ALLOC_P(dw_die_ref,heap);
4172
4173 /* Each DIE may have a series of attribute/value pairs.  Values
4174    can take on several forms.  The forms that are used in this
4175    implementation are listed below.  */
4176
4177 enum dw_val_class
4178 {
4179   dw_val_class_addr,
4180   dw_val_class_offset,
4181   dw_val_class_loc,
4182   dw_val_class_loc_list,
4183   dw_val_class_range_list,
4184   dw_val_class_const,
4185   dw_val_class_unsigned_const,
4186   dw_val_class_const_double,
4187   dw_val_class_vec,
4188   dw_val_class_flag,
4189   dw_val_class_die_ref,
4190   dw_val_class_fde_ref,
4191   dw_val_class_lbl_id,
4192   dw_val_class_lineptr,
4193   dw_val_class_str,
4194   dw_val_class_macptr,
4195   dw_val_class_file,
4196   dw_val_class_data8
4197 };
4198
4199 /* Describe a floating point constant value, or a vector constant value.  */
4200
4201 typedef struct GTY(()) dw_vec_struct {
4202   unsigned char * GTY((length ("%h.length"))) array;
4203   unsigned length;
4204   unsigned elt_size;
4205 }
4206 dw_vec_const;
4207
4208 /* The dw_val_node describes an attribute's value, as it is
4209    represented internally.  */
4210
4211 typedef struct GTY(()) dw_val_struct {
4212   enum dw_val_class val_class;
4213   union dw_val_struct_union
4214     {
4215       rtx GTY ((tag ("dw_val_class_addr"))) val_addr;
4216       unsigned HOST_WIDE_INT GTY ((tag ("dw_val_class_offset"))) val_offset;
4217       dw_loc_list_ref GTY ((tag ("dw_val_class_loc_list"))) val_loc_list;
4218       dw_loc_descr_ref GTY ((tag ("dw_val_class_loc"))) val_loc;
4219       HOST_WIDE_INT GTY ((default)) val_int;
4220       unsigned HOST_WIDE_INT GTY ((tag ("dw_val_class_unsigned_const"))) val_unsigned;
4221       double_int GTY ((tag ("dw_val_class_const_double"))) val_double;
4222       dw_vec_const GTY ((tag ("dw_val_class_vec"))) val_vec;
4223       struct dw_val_die_union
4224         {
4225           dw_die_ref die;
4226           int external;
4227         } GTY ((tag ("dw_val_class_die_ref"))) val_die_ref;
4228       unsigned GTY ((tag ("dw_val_class_fde_ref"))) val_fde_index;
4229       struct indirect_string_node * GTY ((tag ("dw_val_class_str"))) val_str;
4230       char * GTY ((tag ("dw_val_class_lbl_id"))) val_lbl_id;
4231       unsigned char GTY ((tag ("dw_val_class_flag"))) val_flag;
4232       struct dwarf_file_data * GTY ((tag ("dw_val_class_file"))) val_file;
4233       unsigned char GTY ((tag ("dw_val_class_data8"))) val_data8[8];
4234     }
4235   GTY ((desc ("%1.val_class"))) v;
4236 }
4237 dw_val_node;
4238
4239 /* Locations in memory are described using a sequence of stack machine
4240    operations.  */
4241
4242 typedef struct GTY(()) dw_loc_descr_struct {
4243   dw_loc_descr_ref dw_loc_next;
4244   ENUM_BITFIELD (dwarf_location_atom) dw_loc_opc : 8;
4245   /* Used to distinguish DW_OP_addr with a direct symbol relocation
4246      from DW_OP_addr with a dtp-relative symbol relocation.  */
4247   unsigned int dtprel : 1;
4248   int dw_loc_addr;
4249   dw_val_node dw_loc_oprnd1;
4250   dw_val_node dw_loc_oprnd2;
4251 }
4252 dw_loc_descr_node;
4253
4254 /* Location lists are ranges + location descriptions for that range,
4255    so you can track variables that are in different places over
4256    their entire life.  */
4257 typedef struct GTY(()) dw_loc_list_struct {
4258   dw_loc_list_ref dw_loc_next;
4259   const char *begin; /* Label for begin address of range */
4260   const char *end;  /* Label for end address of range */
4261   char *ll_symbol; /* Label for beginning of location list.
4262                       Only on head of list */
4263   const char *section; /* Section this loclist is relative to */
4264   dw_loc_descr_ref expr;
4265 } dw_loc_list_node;
4266
4267 #if defined (DWARF2_DEBUGGING_INFO) || defined (DWARF2_UNWIND_INFO)
4268
4269 static dw_loc_descr_ref int_loc_descriptor (HOST_WIDE_INT);
4270
4271 /* Convert a DWARF stack opcode into its string name.  */
4272
4273 static const char *
4274 dwarf_stack_op_name (unsigned int op)
4275 {
4276   switch (op)
4277     {
4278     case DW_OP_addr:
4279       return "DW_OP_addr";
4280     case DW_OP_deref:
4281       return "DW_OP_deref";
4282     case DW_OP_const1u:
4283       return "DW_OP_const1u";
4284     case DW_OP_const1s:
4285       return "DW_OP_const1s";
4286     case DW_OP_const2u:
4287       return "DW_OP_const2u";
4288     case DW_OP_const2s:
4289       return "DW_OP_const2s";
4290     case DW_OP_const4u:
4291       return "DW_OP_const4u";
4292     case DW_OP_const4s:
4293       return "DW_OP_const4s";
4294     case DW_OP_const8u:
4295       return "DW_OP_const8u";
4296     case DW_OP_const8s:
4297       return "DW_OP_const8s";
4298     case DW_OP_constu:
4299       return "DW_OP_constu";
4300     case DW_OP_consts:
4301       return "DW_OP_consts";
4302     case DW_OP_dup:
4303       return "DW_OP_dup";
4304     case DW_OP_drop:
4305       return "DW_OP_drop";
4306     case DW_OP_over:
4307       return "DW_OP_over";
4308     case DW_OP_pick:
4309       return "DW_OP_pick";
4310     case DW_OP_swap:
4311       return "DW_OP_swap";
4312     case DW_OP_rot:
4313       return "DW_OP_rot";
4314     case DW_OP_xderef:
4315       return "DW_OP_xderef";
4316     case DW_OP_abs:
4317       return "DW_OP_abs";
4318     case DW_OP_and:
4319       return "DW_OP_and";
4320     case DW_OP_div:
4321       return "DW_OP_div";
4322     case DW_OP_minus:
4323       return "DW_OP_minus";
4324     case DW_OP_mod:
4325       return "DW_OP_mod";
4326     case DW_OP_mul:
4327       return "DW_OP_mul";
4328     case DW_OP_neg:
4329       return "DW_OP_neg";
4330     case DW_OP_not:
4331       return "DW_OP_not";
4332     case DW_OP_or:
4333       return "DW_OP_or";
4334     case DW_OP_plus:
4335       return "DW_OP_plus";
4336     case DW_OP_plus_uconst:
4337       return "DW_OP_plus_uconst";
4338     case DW_OP_shl:
4339       return "DW_OP_shl";
4340     case DW_OP_shr:
4341       return "DW_OP_shr";
4342     case DW_OP_shra:
4343       return "DW_OP_shra";
4344     case DW_OP_xor:
4345       return "DW_OP_xor";
4346     case DW_OP_bra:
4347       return "DW_OP_bra";
4348     case DW_OP_eq:
4349       return "DW_OP_eq";
4350     case DW_OP_ge:
4351       return "DW_OP_ge";
4352     case DW_OP_gt:
4353       return "DW_OP_gt";
4354     case DW_OP_le:
4355       return "DW_OP_le";
4356     case DW_OP_lt:
4357       return "DW_OP_lt";
4358     case DW_OP_ne:
4359       return "DW_OP_ne";
4360     case DW_OP_skip:
4361       return "DW_OP_skip";
4362     case DW_OP_lit0:
4363       return "DW_OP_lit0";
4364     case DW_OP_lit1:
4365       return "DW_OP_lit1";
4366     case DW_OP_lit2:
4367       return "DW_OP_lit2";
4368     case DW_OP_lit3:
4369       return "DW_OP_lit3";
4370     case DW_OP_lit4:
4371       return "DW_OP_lit4";
4372     case DW_OP_lit5:
4373       return "DW_OP_lit5";
4374     case DW_OP_lit6:
4375       return "DW_OP_lit6";
4376     case DW_OP_lit7:
4377       return "DW_OP_lit7";
4378     case DW_OP_lit8:
4379       return "DW_OP_lit8";
4380     case DW_OP_lit9:
4381       return "DW_OP_lit9";
4382     case DW_OP_lit10:
4383       return "DW_OP_lit10";
4384     case DW_OP_lit11:
4385       return "DW_OP_lit11";
4386     case DW_OP_lit12:
4387       return "DW_OP_lit12";
4388     case DW_OP_lit13:
4389       return "DW_OP_lit13";
4390     case DW_OP_lit14:
4391       return "DW_OP_lit14";
4392     case DW_OP_lit15:
4393       return "DW_OP_lit15";
4394     case DW_OP_lit16:
4395       return "DW_OP_lit16";
4396     case DW_OP_lit17:
4397       return "DW_OP_lit17";
4398     case DW_OP_lit18:
4399       return "DW_OP_lit18";
4400     case DW_OP_lit19:
4401       return "DW_OP_lit19";
4402     case DW_OP_lit20:
4403       return "DW_OP_lit20";
4404     case DW_OP_lit21:
4405       return "DW_OP_lit21";
4406     case DW_OP_lit22:
4407       return "DW_OP_lit22";
4408     case DW_OP_lit23:
4409       return "DW_OP_lit23";
4410     case DW_OP_lit24:
4411       return "DW_OP_lit24";
4412     case DW_OP_lit25:
4413       return "DW_OP_lit25";
4414     case DW_OP_lit26:
4415       return "DW_OP_lit26";
4416     case DW_OP_lit27:
4417       return "DW_OP_lit27";
4418     case DW_OP_lit28:
4419       return "DW_OP_lit28";
4420     case DW_OP_lit29:
4421       return "DW_OP_lit29";
4422     case DW_OP_lit30:
4423       return "DW_OP_lit30";
4424     case DW_OP_lit31:
4425       return "DW_OP_lit31";
4426     case DW_OP_reg0:
4427       return "DW_OP_reg0";
4428     case DW_OP_reg1:
4429       return "DW_OP_reg1";
4430     case DW_OP_reg2:
4431       return "DW_OP_reg2";
4432     case DW_OP_reg3:
4433       return "DW_OP_reg3";
4434     case DW_OP_reg4:
4435       return "DW_OP_reg4";
4436     case DW_OP_reg5:
4437       return "DW_OP_reg5";
4438     case DW_OP_reg6:
4439       return "DW_OP_reg6";
4440     case DW_OP_reg7:
4441       return "DW_OP_reg7";
4442     case DW_OP_reg8:
4443       return "DW_OP_reg8";
4444     case DW_OP_reg9:
4445       return "DW_OP_reg9";
4446     case DW_OP_reg10:
4447       return "DW_OP_reg10";
4448     case DW_OP_reg11:
4449       return "DW_OP_reg11";
4450     case DW_OP_reg12:
4451       return "DW_OP_reg12";
4452     case DW_OP_reg13:
4453       return "DW_OP_reg13";
4454     case DW_OP_reg14:
4455       return "DW_OP_reg14";
4456     case DW_OP_reg15:
4457       return "DW_OP_reg15";
4458     case DW_OP_reg16:
4459       return "DW_OP_reg16";
4460     case DW_OP_reg17:
4461       return "DW_OP_reg17";
4462     case DW_OP_reg18:
4463       return "DW_OP_reg18";
4464     case DW_OP_reg19:
4465       return "DW_OP_reg19";
4466     case DW_OP_reg20:
4467       return "DW_OP_reg20";
4468     case DW_OP_reg21:
4469       return "DW_OP_reg21";
4470     case DW_OP_reg22:
4471       return "DW_OP_reg22";
4472     case DW_OP_reg23:
4473       return "DW_OP_reg23";
4474     case DW_OP_reg24:
4475       return "DW_OP_reg24";
4476     case DW_OP_reg25:
4477       return "DW_OP_reg25";
4478     case DW_OP_reg26:
4479       return "DW_OP_reg26";
4480     case DW_OP_reg27:
4481       return "DW_OP_reg27";
4482     case DW_OP_reg28:
4483       return "DW_OP_reg28";
4484     case DW_OP_reg29:
4485       return "DW_OP_reg29";
4486     case DW_OP_reg30:
4487       return "DW_OP_reg30";
4488     case DW_OP_reg31:
4489       return "DW_OP_reg31";
4490     case DW_OP_breg0:
4491       return "DW_OP_breg0";
4492     case DW_OP_breg1:
4493       return "DW_OP_breg1";
4494     case DW_OP_breg2:
4495       return "DW_OP_breg2";
4496     case DW_OP_breg3:
4497       return "DW_OP_breg3";
4498     case DW_OP_breg4:
4499       return "DW_OP_breg4";
4500     case DW_OP_breg5:
4501       return "DW_OP_breg5";
4502     case DW_OP_breg6:
4503       return "DW_OP_breg6";
4504     case DW_OP_breg7:
4505       return "DW_OP_breg7";
4506     case DW_OP_breg8:
4507       return "DW_OP_breg8";
4508     case DW_OP_breg9:
4509       return "DW_OP_breg9";
4510     case DW_OP_breg10:
4511       return "DW_OP_breg10";
4512     case DW_OP_breg11:
4513       return "DW_OP_breg11";
4514     case DW_OP_breg12:
4515       return "DW_OP_breg12";
4516     case DW_OP_breg13:
4517       return "DW_OP_breg13";
4518     case DW_OP_breg14:
4519       return "DW_OP_breg14";
4520     case DW_OP_breg15:
4521       return "DW_OP_breg15";
4522     case DW_OP_breg16:
4523       return "DW_OP_breg16";
4524     case DW_OP_breg17:
4525       return "DW_OP_breg17";
4526     case DW_OP_breg18:
4527       return "DW_OP_breg18";
4528     case DW_OP_breg19:
4529       return "DW_OP_breg19";
4530     case DW_OP_breg20:
4531       return "DW_OP_breg20";
4532     case DW_OP_breg21:
4533       return "DW_OP_breg21";
4534     case DW_OP_breg22:
4535       return "DW_OP_breg22";
4536     case DW_OP_breg23:
4537       return "DW_OP_breg23";
4538     case DW_OP_breg24:
4539       return "DW_OP_breg24";
4540     case DW_OP_breg25:
4541       return "DW_OP_breg25";
4542     case DW_OP_breg26:
4543       return "DW_OP_breg26";
4544     case DW_OP_breg27:
4545       return "DW_OP_breg27";
4546     case DW_OP_breg28:
4547       return "DW_OP_breg28";
4548     case DW_OP_breg29:
4549       return "DW_OP_breg29";
4550     case DW_OP_breg30:
4551       return "DW_OP_breg30";
4552     case DW_OP_breg31:
4553       return "DW_OP_breg31";
4554     case DW_OP_regx:
4555       return "DW_OP_regx";
4556     case DW_OP_fbreg:
4557       return "DW_OP_fbreg";
4558     case DW_OP_bregx:
4559       return "DW_OP_bregx";
4560     case DW_OP_piece:
4561       return "DW_OP_piece";
4562     case DW_OP_deref_size:
4563       return "DW_OP_deref_size";
4564     case DW_OP_xderef_size:
4565       return "DW_OP_xderef_size";
4566     case DW_OP_nop:
4567       return "DW_OP_nop";
4568
4569     case DW_OP_push_object_address:
4570       return "DW_OP_push_object_address";
4571     case DW_OP_call2:
4572       return "DW_OP_call2";
4573     case DW_OP_call4:
4574       return "DW_OP_call4";
4575     case DW_OP_call_ref:
4576       return "DW_OP_call_ref";
4577     case DW_OP_implicit_value:
4578       return "DW_OP_implicit_value";
4579     case DW_OP_stack_value:
4580       return "DW_OP_stack_value";
4581     case DW_OP_form_tls_address:
4582       return "DW_OP_form_tls_address";
4583     case DW_OP_call_frame_cfa:
4584       return "DW_OP_call_frame_cfa";
4585     case DW_OP_bit_piece:
4586       return "DW_OP_bit_piece";
4587
4588     case DW_OP_GNU_push_tls_address:
4589       return "DW_OP_GNU_push_tls_address";
4590     case DW_OP_GNU_uninit:
4591       return "DW_OP_GNU_uninit";
4592     case DW_OP_GNU_encoded_addr:
4593       return "DW_OP_GNU_encoded_addr";
4594
4595     default:
4596       return "OP_<unknown>";
4597     }
4598 }
4599
4600 /* Return a pointer to a newly allocated location description.  Location
4601    descriptions are simple expression terms that can be strung
4602    together to form more complicated location (address) descriptions.  */
4603
4604 static inline dw_loc_descr_ref
4605 new_loc_descr (enum dwarf_location_atom op, unsigned HOST_WIDE_INT oprnd1,
4606                unsigned HOST_WIDE_INT oprnd2)
4607 {
4608   dw_loc_descr_ref descr = GGC_CNEW (dw_loc_descr_node);
4609
4610   descr->dw_loc_opc = op;
4611   descr->dw_loc_oprnd1.val_class = dw_val_class_unsigned_const;
4612   descr->dw_loc_oprnd1.v.val_unsigned = oprnd1;
4613   descr->dw_loc_oprnd2.val_class = dw_val_class_unsigned_const;
4614   descr->dw_loc_oprnd2.v.val_unsigned = oprnd2;
4615
4616   return descr;
4617 }
4618
4619 /* Return a pointer to a newly allocated location description for
4620    REG and OFFSET.  */
4621
4622 static inline dw_loc_descr_ref
4623 new_reg_loc_descr (unsigned int reg,  unsigned HOST_WIDE_INT offset)
4624 {
4625   if (reg <= 31)
4626     return new_loc_descr ((enum dwarf_location_atom) (DW_OP_breg0 + reg),
4627                           offset, 0);
4628   else
4629     return new_loc_descr (DW_OP_bregx, reg, offset);
4630 }
4631
4632 /* Add a location description term to a location description expression.  */
4633
4634 static inline void
4635 add_loc_descr (dw_loc_descr_ref *list_head, dw_loc_descr_ref descr)
4636 {
4637   dw_loc_descr_ref *d;
4638
4639   /* Find the end of the chain.  */
4640   for (d = list_head; (*d) != NULL; d = &(*d)->dw_loc_next)
4641     ;
4642
4643   *d = descr;
4644 }
4645
4646 /* Add a constant OFFSET to a location expression.  */
4647
4648 static void
4649 loc_descr_plus_const (dw_loc_descr_ref *list_head, HOST_WIDE_INT offset)
4650 {
4651   dw_loc_descr_ref loc;
4652   HOST_WIDE_INT *p;
4653
4654   gcc_assert (*list_head != NULL);
4655
4656   if (!offset)
4657     return;
4658
4659   /* Find the end of the chain.  */
4660   for (loc = *list_head; loc->dw_loc_next != NULL; loc = loc->dw_loc_next)
4661     ;
4662
4663   p = NULL;
4664   if (loc->dw_loc_opc == DW_OP_fbreg
4665       || (loc->dw_loc_opc >= DW_OP_breg0 && loc->dw_loc_opc <= DW_OP_breg31))
4666     p = &loc->dw_loc_oprnd1.v.val_int;
4667   else if (loc->dw_loc_opc == DW_OP_bregx)
4668     p = &loc->dw_loc_oprnd2.v.val_int;
4669
4670   /* If the last operation is fbreg, breg{0..31,x}, optimize by adjusting its
4671      offset.  Don't optimize if an signed integer overflow would happen.  */
4672   if (p != NULL
4673       && ((offset > 0 && *p <= INTTYPE_MAXIMUM (HOST_WIDE_INT) - offset)
4674           || (offset < 0 && *p >= INTTYPE_MINIMUM (HOST_WIDE_INT) - offset)))
4675     *p += offset;
4676
4677   else if (offset > 0)
4678     loc->dw_loc_next = new_loc_descr (DW_OP_plus_uconst, offset, 0);
4679
4680   else
4681     {
4682       loc->dw_loc_next = int_loc_descriptor (-offset);
4683       add_loc_descr (&loc->dw_loc_next, new_loc_descr (DW_OP_minus, 0, 0));
4684     }
4685 }
4686
4687 #ifdef DWARF2_DEBUGGING_INFO
4688 /* Add a constant OFFSET to a location list.  */
4689
4690 static void
4691 loc_list_plus_const (dw_loc_list_ref list_head, HOST_WIDE_INT offset)
4692 {
4693   dw_loc_list_ref d;
4694   for (d = list_head; d != NULL; d = d->dw_loc_next)
4695     loc_descr_plus_const (&d->expr, offset);
4696 }
4697 #endif
4698
4699 /* Return the size of a location descriptor.  */
4700
4701 static unsigned long
4702 size_of_loc_descr (dw_loc_descr_ref loc)
4703 {
4704   unsigned long size = 1;
4705
4706   switch (loc->dw_loc_opc)
4707     {
4708     case DW_OP_addr:
4709       size += DWARF2_ADDR_SIZE;
4710       break;
4711     case DW_OP_const1u:
4712     case DW_OP_const1s:
4713       size += 1;
4714       break;
4715     case DW_OP_const2u:
4716     case DW_OP_const2s:
4717       size += 2;
4718       break;
4719     case DW_OP_const4u:
4720     case DW_OP_const4s:
4721       size += 4;
4722       break;
4723     case DW_OP_const8u:
4724     case DW_OP_const8s:
4725       size += 8;
4726       break;
4727     case DW_OP_constu:
4728       size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
4729       break;
4730     case DW_OP_consts:
4731       size += size_of_sleb128 (loc->dw_loc_oprnd1.v.val_int);
4732       break;
4733     case DW_OP_pick:
4734       size += 1;
4735       break;
4736     case DW_OP_plus_uconst:
4737       size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
4738       break;
4739     case DW_OP_skip:
4740     case DW_OP_bra:
4741       size += 2;
4742       break;
4743     case DW_OP_breg0:
4744     case DW_OP_breg1:
4745     case DW_OP_breg2:
4746     case DW_OP_breg3:
4747     case DW_OP_breg4:
4748     case DW_OP_breg5:
4749     case DW_OP_breg6:
4750     case DW_OP_breg7:
4751     case DW_OP_breg8:
4752     case DW_OP_breg9:
4753     case DW_OP_breg10:
4754     case DW_OP_breg11:
4755     case DW_OP_breg12:
4756     case DW_OP_breg13:
4757     case DW_OP_breg14:
4758     case DW_OP_breg15:
4759     case DW_OP_breg16:
4760     case DW_OP_breg17:
4761     case DW_OP_breg18:
4762     case DW_OP_breg19:
4763     case DW_OP_breg20:
4764     case DW_OP_breg21:
4765     case DW_OP_breg22:
4766     case DW_OP_breg23:
4767     case DW_OP_breg24:
4768     case DW_OP_breg25:
4769     case DW_OP_breg26:
4770     case DW_OP_breg27:
4771     case DW_OP_breg28:
4772     case DW_OP_breg29:
4773     case DW_OP_breg30:
4774     case DW_OP_breg31:
4775       size += size_of_sleb128 (loc->dw_loc_oprnd1.v.val_int);
4776       break;
4777     case DW_OP_regx:
4778       size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
4779       break;
4780     case DW_OP_fbreg:
4781       size += size_of_sleb128 (loc->dw_loc_oprnd1.v.val_int);
4782       break;
4783     case DW_OP_bregx:
4784       size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
4785       size += size_of_sleb128 (loc->dw_loc_oprnd2.v.val_int);
4786       break;
4787     case DW_OP_piece:
4788       size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
4789       break;
4790     case DW_OP_bit_piece:
4791       size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
4792       size += size_of_uleb128 (loc->dw_loc_oprnd2.v.val_unsigned);
4793       break;
4794     case DW_OP_deref_size:
4795     case DW_OP_xderef_size:
4796       size += 1;
4797       break;
4798     case DW_OP_call2:
4799       size += 2;
4800       break;
4801     case DW_OP_call4:
4802       size += 4;
4803       break;
4804     case DW_OP_call_ref:
4805       size += DWARF2_ADDR_SIZE;
4806       break;
4807     case DW_OP_implicit_value:
4808       size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned)
4809               + loc->dw_loc_oprnd1.v.val_unsigned;
4810       break;
4811     default:
4812       break;
4813     }
4814
4815   return size;
4816 }
4817
4818 /* Return the size of a series of location descriptors.  */
4819
4820 static unsigned long
4821 size_of_locs (dw_loc_descr_ref loc)
4822 {
4823   dw_loc_descr_ref l;
4824   unsigned long size;
4825
4826   /* If there are no skip or bra opcodes, don't fill in the dw_loc_addr
4827      field, to avoid writing to a PCH file.  */
4828   for (size = 0, l = loc; l != NULL; l = l->dw_loc_next)
4829     {
4830       if (l->dw_loc_opc == DW_OP_skip || l->dw_loc_opc == DW_OP_bra)
4831         break;
4832       size += size_of_loc_descr (l);
4833     }
4834   if (! l)
4835     return size;
4836
4837   for (size = 0, l = loc; l != NULL; l = l->dw_loc_next)
4838     {
4839       l->dw_loc_addr = size;
4840       size += size_of_loc_descr (l);
4841     }
4842
4843   return size;
4844 }
4845
4846 #ifdef DWARF2_DEBUGGING_INFO
4847 static HOST_WIDE_INT extract_int (const unsigned char *, unsigned);
4848 #endif
4849
4850 /* Output location description stack opcode's operands (if any).  */
4851
4852 static void
4853 output_loc_operands (dw_loc_descr_ref loc)
4854 {
4855   dw_val_ref val1 = &loc->dw_loc_oprnd1;
4856   dw_val_ref val2 = &loc->dw_loc_oprnd2;
4857
4858   switch (loc->dw_loc_opc)
4859     {
4860 #ifdef DWARF2_DEBUGGING_INFO
4861     case DW_OP_const2u:
4862     case DW_OP_const2s:
4863       dw2_asm_output_data (2, val1->v.val_int, NULL);
4864       break;
4865     case DW_OP_const4u:
4866     case DW_OP_const4s:
4867       dw2_asm_output_data (4, val1->v.val_int, NULL);
4868       break;
4869     case DW_OP_const8u:
4870     case DW_OP_const8s:
4871       gcc_assert (HOST_BITS_PER_WIDE_INT >= 64);
4872       dw2_asm_output_data (8, val1->v.val_int, NULL);
4873       break;
4874     case DW_OP_skip:
4875     case DW_OP_bra:
4876       {
4877         int offset;
4878
4879         gcc_assert (val1->val_class == dw_val_class_loc);
4880         offset = val1->v.val_loc->dw_loc_addr - (loc->dw_loc_addr + 3);
4881
4882         dw2_asm_output_data (2, offset, NULL);
4883       }
4884       break;
4885     case DW_OP_implicit_value:
4886       dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
4887       switch (val2->val_class)
4888         {
4889         case dw_val_class_const:
4890           dw2_asm_output_data (val1->v.val_unsigned, val2->v.val_int, NULL);
4891           break;
4892         case dw_val_class_vec:
4893           {
4894             unsigned int elt_size = val2->v.val_vec.elt_size;
4895             unsigned int len = val2->v.val_vec.length;
4896             unsigned int i;
4897             unsigned char *p;
4898
4899             if (elt_size > sizeof (HOST_WIDE_INT))
4900               {
4901                 elt_size /= 2;
4902                 len *= 2;
4903               }
4904             for (i = 0, p = val2->v.val_vec.array;
4905                  i < len;
4906                  i++, p += elt_size)
4907               dw2_asm_output_data (elt_size, extract_int (p, elt_size),
4908                                    "fp or vector constant word %u", i);
4909           }
4910           break;
4911         case dw_val_class_const_double:
4912           {
4913             unsigned HOST_WIDE_INT first, second;
4914
4915             if (WORDS_BIG_ENDIAN)
4916               {
4917                 first = val2->v.val_double.high;
4918                 second = val2->v.val_double.low;
4919               }
4920             else
4921               {
4922                 first = val2->v.val_double.low;
4923                 second = val2->v.val_double.high;
4924               }
4925             dw2_asm_output_data (HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR,
4926                                  first, NULL);
4927             dw2_asm_output_data (HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR,
4928                                  second, NULL);
4929           }
4930           break;
4931         case dw_val_class_addr:
4932           gcc_assert (val1->v.val_unsigned == DWARF2_ADDR_SIZE);
4933           dw2_asm_output_addr_rtx (DWARF2_ADDR_SIZE, val2->v.val_addr, NULL);
4934           break;
4935         default:
4936           gcc_unreachable ();
4937         }
4938       break;
4939 #else
4940     case DW_OP_const2u:
4941     case DW_OP_const2s:
4942     case DW_OP_const4u:
4943     case DW_OP_const4s:
4944     case DW_OP_const8u:
4945     case DW_OP_const8s:
4946     case DW_OP_skip:
4947     case DW_OP_bra:
4948     case DW_OP_implicit_value:
4949       /* We currently don't make any attempt to make sure these are
4950          aligned properly like we do for the main unwind info, so
4951          don't support emitting things larger than a byte if we're
4952          only doing unwinding.  */
4953       gcc_unreachable ();
4954 #endif
4955     case DW_OP_const1u:
4956     case DW_OP_const1s:
4957       dw2_asm_output_data (1, val1->v.val_int, NULL);
4958       break;
4959     case DW_OP_constu:
4960       dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
4961       break;
4962     case DW_OP_consts:
4963       dw2_asm_output_data_sleb128 (val1->v.val_int, NULL);
4964       break;
4965     case DW_OP_pick:
4966       dw2_asm_output_data (1, val1->v.val_int, NULL);
4967       break;
4968     case DW_OP_plus_uconst:
4969       dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
4970       break;
4971     case DW_OP_breg0:
4972     case DW_OP_breg1:
4973     case DW_OP_breg2:
4974     case DW_OP_breg3:
4975     case DW_OP_breg4:
4976     case DW_OP_breg5:
4977     case DW_OP_breg6:
4978     case DW_OP_breg7:
4979     case DW_OP_breg8:
4980     case DW_OP_breg9:
4981     case DW_OP_breg10:
4982     case DW_OP_breg11:
4983     case DW_OP_breg12:
4984     case DW_OP_breg13:
4985     case DW_OP_breg14:
4986     case DW_OP_breg15:
4987     case DW_OP_breg16:
4988     case DW_OP_breg17:
4989     case DW_OP_breg18:
4990     case DW_OP_breg19:
4991     case DW_OP_breg20:
4992     case DW_OP_breg21:
4993     case DW_OP_breg22:
4994     case DW_OP_breg23:
4995     case DW_OP_breg24:
4996     case DW_OP_breg25:
4997     case DW_OP_breg26:
4998     case DW_OP_breg27:
4999     case DW_OP_breg28:
5000     case DW_OP_breg29:
5001     case DW_OP_breg30:
5002     case DW_OP_breg31:
5003       dw2_asm_output_data_sleb128 (val1->v.val_int, NULL);
5004       break;
5005     case DW_OP_regx:
5006       dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
5007       break;
5008     case DW_OP_fbreg:
5009       dw2_asm_output_data_sleb128 (val1->v.val_int, NULL);
5010       break;
5011     case DW_OP_bregx:
5012       dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
5013       dw2_asm_output_data_sleb128 (val2->v.val_int, NULL);
5014       break;
5015     case DW_OP_piece:
5016       dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
5017       break;
5018     case DW_OP_bit_piece:
5019       dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
5020       dw2_asm_output_data_uleb128 (val2->v.val_unsigned, NULL);
5021       break;
5022     case DW_OP_deref_size:
5023     case DW_OP_xderef_size:
5024       dw2_asm_output_data (1, val1->v.val_int, NULL);
5025       break;
5026
5027     case DW_OP_addr:
5028       if (loc->dtprel)
5029         {
5030           if (targetm.asm_out.output_dwarf_dtprel)
5031             {
5032               targetm.asm_out.output_dwarf_dtprel (asm_out_file,
5033                                                    DWARF2_ADDR_SIZE,
5034                                                    val1->v.val_addr);
5035               fputc ('\n', asm_out_file);
5036             }
5037           else
5038             gcc_unreachable ();
5039         }
5040       else
5041         {
5042 #ifdef DWARF2_DEBUGGING_INFO
5043           dw2_asm_output_addr_rtx (DWARF2_ADDR_SIZE, val1->v.val_addr, NULL);
5044 #else
5045           gcc_unreachable ();
5046 #endif
5047         }
5048       break;
5049
5050     default:
5051       /* Other codes have no operands.  */
5052       break;
5053     }
5054 }
5055
5056 /* Output a sequence of location operations.  */
5057
5058 static void
5059 output_loc_sequence (dw_loc_descr_ref loc)
5060 {
5061   for (; loc != NULL; loc = loc->dw_loc_next)
5062     {
5063       /* Output the opcode.  */
5064       dw2_asm_output_data (1, loc->dw_loc_opc,
5065                            "%s", dwarf_stack_op_name (loc->dw_loc_opc));
5066
5067       /* Output the operand(s) (if any).  */
5068       output_loc_operands (loc);
5069     }
5070 }
5071
5072 /* Output location description stack opcode's operands (if any).
5073    The output is single bytes on a line, suitable for .cfi_escape.  */
5074
5075 static void
5076 output_loc_operands_raw (dw_loc_descr_ref loc)
5077 {
5078   dw_val_ref val1 = &loc->dw_loc_oprnd1;
5079   dw_val_ref val2 = &loc->dw_loc_oprnd2;
5080
5081   switch (loc->dw_loc_opc)
5082     {
5083     case DW_OP_addr:
5084     case DW_OP_implicit_value:
5085       /* We cannot output addresses in .cfi_escape, only bytes.  */
5086       gcc_unreachable ();
5087
5088     case DW_OP_const1u:
5089     case DW_OP_const1s:
5090     case DW_OP_pick:
5091     case DW_OP_deref_size:
5092     case DW_OP_xderef_size:
5093       fputc (',', asm_out_file);
5094       dw2_asm_output_data_raw (1, val1->v.val_int);
5095       break;
5096
5097     case DW_OP_const2u:
5098     case DW_OP_const2s:
5099       fputc (',', asm_out_file);
5100       dw2_asm_output_data_raw (2, val1->v.val_int);
5101       break;
5102
5103     case DW_OP_const4u:
5104     case DW_OP_const4s:
5105       fputc (',', asm_out_file);
5106       dw2_asm_output_data_raw (4, val1->v.val_int);
5107       break;
5108
5109     case DW_OP_const8u:
5110     case DW_OP_const8s:
5111       gcc_assert (HOST_BITS_PER_WIDE_INT >= 64);
5112       fputc (',', asm_out_file);
5113       dw2_asm_output_data_raw (8, val1->v.val_int);
5114       break;
5115
5116     case DW_OP_skip:
5117     case DW_OP_bra:
5118       {
5119         int offset;
5120
5121         gcc_assert (val1->val_class == dw_val_class_loc);
5122         offset = val1->v.val_loc->dw_loc_addr - (loc->dw_loc_addr + 3);
5123
5124         fputc (',', asm_out_file);
5125         dw2_asm_output_data_raw (2, offset);
5126       }
5127       break;
5128
5129     case DW_OP_constu:
5130     case DW_OP_plus_uconst:
5131     case DW_OP_regx:
5132     case DW_OP_piece:
5133       fputc (',', asm_out_file);
5134       dw2_asm_output_data_uleb128_raw (val1->v.val_unsigned);
5135       break;
5136
5137     case DW_OP_bit_piece:
5138       fputc (',', asm_out_file);
5139       dw2_asm_output_data_uleb128_raw (val1->v.val_unsigned);
5140       dw2_asm_output_data_uleb128_raw (val2->v.val_unsigned);
5141       break;
5142
5143     case DW_OP_consts:
5144     case DW_OP_breg0:
5145     case DW_OP_breg1:
5146     case DW_OP_breg2:
5147     case DW_OP_breg3:
5148     case DW_OP_breg4:
5149     case DW_OP_breg5:
5150     case DW_OP_breg6:
5151     case DW_OP_breg7:
5152     case DW_OP_breg8:
5153     case DW_OP_breg9:
5154     case DW_OP_breg10:
5155     case DW_OP_breg11:
5156     case DW_OP_breg12:
5157     case DW_OP_breg13:
5158     case DW_OP_breg14:
5159     case DW_OP_breg15:
5160     case DW_OP_breg16:
5161     case DW_OP_breg17:
5162     case DW_OP_breg18:
5163     case DW_OP_breg19:
5164     case DW_OP_breg20:
5165     case DW_OP_breg21:
5166     case DW_OP_breg22:
5167     case DW_OP_breg23:
5168     case DW_OP_breg24:
5169     case DW_OP_breg25:
5170     case DW_OP_breg26:
5171     case DW_OP_breg27:
5172     case DW_OP_breg28:
5173     case DW_OP_breg29:
5174     case DW_OP_breg30:
5175     case DW_OP_breg31:
5176     case DW_OP_fbreg:
5177       fputc (',', asm_out_file);
5178       dw2_asm_output_data_sleb128_raw (val1->v.val_int);
5179       break;
5180
5181     case DW_OP_bregx:
5182       fputc (',', asm_out_file);
5183       dw2_asm_output_data_uleb128_raw (val1->v.val_unsigned);
5184       fputc (',', asm_out_file);
5185       dw2_asm_output_data_sleb128_raw (val2->v.val_int);
5186       break;
5187
5188     default:
5189       /* Other codes have no operands.  */
5190       break;
5191     }
5192 }
5193
5194 static void
5195 output_loc_sequence_raw (dw_loc_descr_ref loc)
5196 {
5197   while (1)
5198     {
5199       /* Output the opcode.  */
5200       fprintf (asm_out_file, "%#x", loc->dw_loc_opc);
5201       output_loc_operands_raw (loc);
5202
5203       if (!loc->dw_loc_next)
5204         break;
5205       loc = loc->dw_loc_next;
5206
5207       fputc (',', asm_out_file);
5208     }
5209 }
5210
5211 /* This routine will generate the correct assembly data for a location
5212    description based on a cfi entry with a complex address.  */
5213
5214 static void
5215 output_cfa_loc (dw_cfi_ref cfi)
5216 {
5217   dw_loc_descr_ref loc;
5218   unsigned long size;
5219
5220   if (cfi->dw_cfi_opc == DW_CFA_expression)
5221     {
5222       dw2_asm_output_data (1, cfi->dw_cfi_oprnd1.dw_cfi_reg_num, NULL);
5223       loc = cfi->dw_cfi_oprnd2.dw_cfi_loc;
5224     }
5225   else
5226     loc = cfi->dw_cfi_oprnd1.dw_cfi_loc;
5227
5228   /* Output the size of the block.  */
5229   size = size_of_locs (loc);
5230   dw2_asm_output_data_uleb128 (size, NULL);
5231
5232   /* Now output the operations themselves.  */
5233   output_loc_sequence (loc);
5234 }
5235
5236 /* Similar, but used for .cfi_escape.  */
5237
5238 static void
5239 output_cfa_loc_raw (dw_cfi_ref cfi)
5240 {
5241   dw_loc_descr_ref loc;
5242   unsigned long size;
5243
5244   if (cfi->dw_cfi_opc == DW_CFA_expression)
5245     {
5246       fprintf (asm_out_file, "%#x,", cfi->dw_cfi_oprnd1.dw_cfi_reg_num);
5247       loc = cfi->dw_cfi_oprnd2.dw_cfi_loc;
5248     }
5249   else
5250     loc = cfi->dw_cfi_oprnd1.dw_cfi_loc;
5251
5252   /* Output the size of the block.  */
5253   size = size_of_locs (loc);
5254   dw2_asm_output_data_uleb128_raw (size);
5255   fputc (',', asm_out_file);
5256
5257   /* Now output the operations themselves.  */
5258   output_loc_sequence_raw (loc);
5259 }
5260
5261 /* This function builds a dwarf location descriptor sequence from a
5262    dw_cfa_location, adding the given OFFSET to the result of the
5263    expression.  */
5264
5265 static struct dw_loc_descr_struct *
5266 build_cfa_loc (dw_cfa_location *cfa, HOST_WIDE_INT offset)
5267 {
5268   struct dw_loc_descr_struct *head, *tmp;
5269
5270   offset += cfa->offset;
5271
5272   if (cfa->indirect)
5273     {
5274       head = new_reg_loc_descr (cfa->reg, cfa->base_offset);
5275       head->dw_loc_oprnd1.val_class = dw_val_class_const;
5276       tmp = new_loc_descr (DW_OP_deref, 0, 0);
5277       add_loc_descr (&head, tmp);
5278       if (offset != 0)
5279         {
5280           tmp = new_loc_descr (DW_OP_plus_uconst, offset, 0);
5281           add_loc_descr (&head, tmp);
5282         }
5283     }
5284   else
5285     head = new_reg_loc_descr (cfa->reg, offset);
5286
5287   return head;
5288 }
5289
5290 /* This function builds a dwarf location descriptor sequence for
5291    the address at OFFSET from the CFA when stack is aligned to
5292    ALIGNMENT byte.  */
5293
5294 static struct dw_loc_descr_struct *
5295 build_cfa_aligned_loc (HOST_WIDE_INT offset, HOST_WIDE_INT alignment)
5296 {
5297   struct dw_loc_descr_struct *head;
5298   unsigned int dwarf_fp
5299     = DWARF_FRAME_REGNUM (HARD_FRAME_POINTER_REGNUM);
5300
5301  /* When CFA is defined as FP+OFFSET, emulate stack alignment.  */
5302   if (cfa.reg == HARD_FRAME_POINTER_REGNUM && cfa.indirect == 0)
5303     {
5304       head = new_reg_loc_descr (dwarf_fp, 0);
5305       add_loc_descr (&head, int_loc_descriptor (alignment));
5306       add_loc_descr (&head, new_loc_descr (DW_OP_and, 0, 0));
5307       loc_descr_plus_const (&head, offset);
5308     }
5309   else
5310     head = new_reg_loc_descr (dwarf_fp, offset);
5311   return head;
5312 }
5313
5314 /* This function fills in aa dw_cfa_location structure from a dwarf location
5315    descriptor sequence.  */
5316
5317 static void
5318 get_cfa_from_loc_descr (dw_cfa_location *cfa, struct dw_loc_descr_struct *loc)
5319 {
5320   struct dw_loc_descr_struct *ptr;
5321   cfa->offset = 0;
5322   cfa->base_offset = 0;
5323   cfa->indirect = 0;
5324   cfa->reg = -1;
5325
5326   for (ptr = loc; ptr != NULL; ptr = ptr->dw_loc_next)
5327     {
5328       enum dwarf_location_atom op = ptr->dw_loc_opc;
5329
5330       switch (op)
5331         {
5332         case DW_OP_reg0:
5333         case DW_OP_reg1:
5334         case DW_OP_reg2:
5335         case DW_OP_reg3:
5336         case DW_OP_reg4:
5337         case DW_OP_reg5:
5338         case DW_OP_reg6:
5339         case DW_OP_reg7:
5340         case DW_OP_reg8:
5341         case DW_OP_reg9:
5342         case DW_OP_reg10:
5343         case DW_OP_reg11:
5344         case DW_OP_reg12:
5345         case DW_OP_reg13:
5346         case DW_OP_reg14:
5347         case DW_OP_reg15:
5348         case DW_OP_reg16:
5349         case DW_OP_reg17:
5350         case DW_OP_reg18:
5351         case DW_OP_reg19:
5352         case DW_OP_reg20:
5353         case DW_OP_reg21:
5354         case DW_OP_reg22:
5355         case DW_OP_reg23:
5356         case DW_OP_reg24:
5357         case DW_OP_reg25:
5358         case DW_OP_reg26:
5359         case DW_OP_reg27:
5360         case DW_OP_reg28:
5361         case DW_OP_reg29:
5362         case DW_OP_reg30:
5363         case DW_OP_reg31:
5364           cfa->reg = op - DW_OP_reg0;
5365           break;
5366         case DW_OP_regx:
5367           cfa->reg = ptr->dw_loc_oprnd1.v.val_int;
5368           break;
5369         case DW_OP_breg0:
5370         case DW_OP_breg1:
5371         case DW_OP_breg2:
5372         case DW_OP_breg3:
5373         case DW_OP_breg4:
5374         case DW_OP_breg5:
5375         case DW_OP_breg6:
5376         case DW_OP_breg7:
5377         case DW_OP_breg8:
5378         case DW_OP_breg9:
5379         case DW_OP_breg10:
5380         case DW_OP_breg11:
5381         case DW_OP_breg12:
5382         case DW_OP_breg13:
5383         case DW_OP_breg14:
5384         case DW_OP_breg15:
5385         case DW_OP_breg16:
5386         case DW_OP_breg17:
5387         case DW_OP_breg18:
5388         case DW_OP_breg19:
5389         case DW_OP_breg20:
5390         case DW_OP_breg21:
5391         case DW_OP_breg22:
5392         case DW_OP_breg23:
5393         case DW_OP_breg24:
5394         case DW_OP_breg25:
5395         case DW_OP_breg26:
5396         case DW_OP_breg27:
5397         case DW_OP_breg28:
5398         case DW_OP_breg29:
5399         case DW_OP_breg30:
5400         case DW_OP_breg31:
5401           cfa->reg = op - DW_OP_breg0;
5402           cfa->base_offset = ptr->dw_loc_oprnd1.v.val_int;
5403           break;
5404         case DW_OP_bregx:
5405           cfa->reg = ptr->dw_loc_oprnd1.v.val_int;
5406           cfa->base_offset = ptr->dw_loc_oprnd2.v.val_int;
5407           break;
5408         case DW_OP_deref:
5409           cfa->indirect = 1;
5410           break;
5411         case DW_OP_plus_uconst:
5412           cfa->offset = ptr->dw_loc_oprnd1.v.val_unsigned;
5413           break;
5414         default:
5415           internal_error ("DW_LOC_OP %s not implemented",
5416                           dwarf_stack_op_name (ptr->dw_loc_opc));
5417         }
5418     }
5419 }
5420 #endif /* .debug_frame support */
5421 \f
5422 /* And now, the support for symbolic debugging information.  */
5423 #ifdef DWARF2_DEBUGGING_INFO
5424
5425 /* .debug_str support.  */
5426 static int output_indirect_string (void **, void *);
5427
5428 static void dwarf2out_init (const char *);
5429 static void dwarf2out_finish (const char *);
5430 static void dwarf2out_assembly_start (void);
5431 static void dwarf2out_define (unsigned int, const char *);
5432 static void dwarf2out_undef (unsigned int, const char *);
5433 static void dwarf2out_start_source_file (unsigned, const char *);
5434 static void dwarf2out_end_source_file (unsigned);
5435 static void dwarf2out_function_decl (tree);
5436 static void dwarf2out_begin_block (unsigned, unsigned);
5437 static void dwarf2out_end_block (unsigned, unsigned);
5438 static bool dwarf2out_ignore_block (const_tree);
5439 static void dwarf2out_global_decl (tree);
5440 static void dwarf2out_type_decl (tree, int);
5441 static void dwarf2out_imported_module_or_decl (tree, tree, tree, bool);
5442 static void dwarf2out_imported_module_or_decl_1 (tree, tree, tree,
5443                                                  dw_die_ref);
5444 static void dwarf2out_abstract_function (tree);
5445 static void dwarf2out_var_location (rtx);
5446 static void dwarf2out_direct_call (tree);
5447 static void dwarf2out_virtual_call_token (tree, int);
5448 static void dwarf2out_copy_call_info (rtx, rtx);
5449 static void dwarf2out_virtual_call (int);
5450 static void dwarf2out_begin_function (tree);
5451 static void dwarf2out_set_name (tree, tree);
5452
5453 /* The debug hooks structure.  */
5454
5455 const struct gcc_debug_hooks dwarf2_debug_hooks =
5456 {
5457   dwarf2out_init,
5458   dwarf2out_finish,
5459   dwarf2out_assembly_start,
5460   dwarf2out_define,
5461   dwarf2out_undef,
5462   dwarf2out_start_source_file,
5463   dwarf2out_end_source_file,
5464   dwarf2out_begin_block,
5465   dwarf2out_end_block,
5466   dwarf2out_ignore_block,
5467   dwarf2out_source_line,
5468   dwarf2out_begin_prologue,
5469   debug_nothing_int_charstar,   /* end_prologue */
5470   dwarf2out_end_epilogue,
5471   dwarf2out_begin_function,
5472   debug_nothing_int,            /* end_function */
5473   dwarf2out_function_decl,      /* function_decl */
5474   dwarf2out_global_decl,
5475   dwarf2out_type_decl,          /* type_decl */
5476   dwarf2out_imported_module_or_decl,
5477   debug_nothing_tree,           /* deferred_inline_function */
5478   /* The DWARF 2 backend tries to reduce debugging bloat by not
5479      emitting the abstract description of inline functions until
5480      something tries to reference them.  */
5481   dwarf2out_abstract_function,  /* outlining_inline_function */
5482   debug_nothing_rtx,            /* label */
5483   debug_nothing_int,            /* handle_pch */
5484   dwarf2out_var_location,
5485   dwarf2out_switch_text_section,
5486   dwarf2out_direct_call,
5487   dwarf2out_virtual_call_token,
5488   dwarf2out_copy_call_info,
5489   dwarf2out_virtual_call,
5490   dwarf2out_set_name,
5491   1                             /* start_end_main_source_file */
5492 };
5493 #endif
5494 \f
5495 /* NOTE: In the comments in this file, many references are made to
5496    "Debugging Information Entries".  This term is abbreviated as `DIE'
5497    throughout the remainder of this file.  */
5498
5499 /* An internal representation of the DWARF output is built, and then
5500    walked to generate the DWARF debugging info.  The walk of the internal
5501    representation is done after the entire program has been compiled.
5502    The types below are used to describe the internal representation.  */
5503
5504 /* Various DIE's use offsets relative to the beginning of the
5505    .debug_info section to refer to each other.  */
5506
5507 typedef long int dw_offset;
5508
5509 /* Define typedefs here to avoid circular dependencies.  */
5510
5511 typedef struct dw_attr_struct *dw_attr_ref;
5512 typedef struct dw_line_info_struct *dw_line_info_ref;
5513 typedef struct dw_separate_line_info_struct *dw_separate_line_info_ref;
5514 typedef struct pubname_struct *pubname_ref;
5515 typedef struct dw_ranges_struct *dw_ranges_ref;
5516 typedef struct dw_ranges_by_label_struct *dw_ranges_by_label_ref;
5517 typedef struct comdat_type_struct *comdat_type_node_ref;
5518
5519 /* Each entry in the line_info_table maintains the file and
5520    line number associated with the label generated for that
5521    entry.  The label gives the PC value associated with
5522    the line number entry.  */
5523
5524 typedef struct GTY(()) dw_line_info_struct {
5525   unsigned long dw_file_num;
5526   unsigned long dw_line_num;
5527 }
5528 dw_line_info_entry;
5529
5530 /* Line information for functions in separate sections; each one gets its
5531    own sequence.  */
5532 typedef struct GTY(()) dw_separate_line_info_struct {
5533   unsigned long dw_file_num;
5534   unsigned long dw_line_num;
5535   unsigned long function;
5536 }
5537 dw_separate_line_info_entry;
5538
5539 /* Each DIE attribute has a field specifying the attribute kind,
5540    a link to the next attribute in the chain, and an attribute value.
5541    Attributes are typically linked below the DIE they modify.  */
5542
5543 typedef struct GTY(()) dw_attr_struct {
5544   enum dwarf_attribute dw_attr;
5545   dw_val_node dw_attr_val;
5546 }
5547 dw_attr_node;
5548
5549 DEF_VEC_O(dw_attr_node);
5550 DEF_VEC_ALLOC_O(dw_attr_node,gc);
5551
5552 /* The Debugging Information Entry (DIE) structure.  DIEs form a tree.
5553    The children of each node form a circular list linked by
5554    die_sib.  die_child points to the node *before* the "first" child node.  */
5555
5556 typedef struct GTY((chain_circular ("%h.die_sib"))) die_struct {
5557   enum dwarf_tag die_tag;
5558   union die_symbol_or_type_node
5559     {
5560       char * GTY ((tag ("0"))) die_symbol;
5561       comdat_type_node_ref GTY ((tag ("1"))) die_type_node;
5562     }
5563   GTY ((desc ("dwarf_version >= 4"))) die_id;
5564   VEC(dw_attr_node,gc) * die_attr;
5565   dw_die_ref die_parent;
5566   dw_die_ref die_child;
5567   dw_die_ref die_sib;
5568   dw_die_ref die_definition; /* ref from a specification to its definition */
5569   dw_offset die_offset;
5570   unsigned long die_abbrev;
5571   int die_mark;
5572   /* Die is used and must not be pruned as unused.  */
5573   int die_perennial_p;
5574   unsigned int decl_id;
5575 }
5576 die_node;
5577
5578 /* Evaluate 'expr' while 'c' is set to each child of DIE in order.  */
5579 #define FOR_EACH_CHILD(die, c, expr) do {       \
5580   c = die->die_child;                           \
5581   if (c) do {                                   \
5582     c = c->die_sib;                             \
5583     expr;                                       \
5584   } while (c != die->die_child);                \
5585 } while (0)
5586
5587 /* The pubname structure */
5588
5589 typedef struct GTY(()) pubname_struct {
5590   dw_die_ref die;
5591   const char *name;
5592 }
5593 pubname_entry;
5594
5595 DEF_VEC_O(pubname_entry);
5596 DEF_VEC_ALLOC_O(pubname_entry, gc);
5597
5598 struct GTY(()) dw_ranges_struct {
5599   /* If this is positive, it's a block number, otherwise it's a
5600      bitwise-negated index into dw_ranges_by_label.  */
5601   int num;
5602 };
5603
5604 struct GTY(()) dw_ranges_by_label_struct {
5605   const char *begin;
5606   const char *end;
5607 };
5608
5609 /* The comdat type node structure.  */
5610 typedef struct GTY(()) comdat_type_struct
5611 {
5612   dw_die_ref root_die;
5613   dw_die_ref type_die;
5614   char signature[DWARF_TYPE_SIGNATURE_SIZE];
5615   struct comdat_type_struct *next;
5616 }
5617 comdat_type_node;
5618
5619 /* The limbo die list structure.  */
5620 typedef struct GTY(()) limbo_die_struct {
5621   dw_die_ref die;
5622   tree created_for;
5623   struct limbo_die_struct *next;
5624 }
5625 limbo_die_node;
5626
5627 typedef struct GTY(()) skeleton_chain_struct
5628 {
5629   dw_die_ref old_die;
5630   dw_die_ref new_die;
5631   struct skeleton_chain_struct *parent;
5632 }
5633 skeleton_chain_node;
5634
5635 /* How to start an assembler comment.  */
5636 #ifndef ASM_COMMENT_START
5637 #define ASM_COMMENT_START ";#"
5638 #endif
5639
5640 /* Define a macro which returns nonzero for a TYPE_DECL which was
5641    implicitly generated for a tagged type.
5642
5643    Note that unlike the gcc front end (which generates a NULL named
5644    TYPE_DECL node for each complete tagged type, each array type, and
5645    each function type node created) the g++ front end generates a
5646    _named_ TYPE_DECL node for each tagged type node created.
5647    These TYPE_DECLs have DECL_ARTIFICIAL set, so we know not to
5648    generate a DW_TAG_typedef DIE for them.  */
5649
5650 #define TYPE_DECL_IS_STUB(decl)                         \
5651   (DECL_NAME (decl) == NULL_TREE                        \
5652    || (DECL_ARTIFICIAL (decl)                           \
5653        && is_tagged_type (TREE_TYPE (decl))             \
5654        && ((decl == TYPE_STUB_DECL (TREE_TYPE (decl)))  \
5655            /* This is necessary for stub decls that     \
5656               appear in nested inline functions.  */    \
5657            || (DECL_ABSTRACT_ORIGIN (decl) != NULL_TREE \
5658                && (decl_ultimate_origin (decl)          \
5659                    == TYPE_STUB_DECL (TREE_TYPE (decl)))))))
5660
5661 /* Information concerning the compilation unit's programming
5662    language, and compiler version.  */
5663
5664 /* Fixed size portion of the DWARF compilation unit header.  */
5665 #define DWARF_COMPILE_UNIT_HEADER_SIZE \
5666   (DWARF_INITIAL_LENGTH_SIZE + DWARF_OFFSET_SIZE + 3)
5667
5668 /* Fixed size portion of the DWARF comdat type unit header.  */
5669 #define DWARF_COMDAT_TYPE_UNIT_HEADER_SIZE \
5670   (DWARF_COMPILE_UNIT_HEADER_SIZE + DWARF_TYPE_SIGNATURE_SIZE \
5671    + DWARF_OFFSET_SIZE)
5672
5673 /* Fixed size portion of public names info.  */
5674 #define DWARF_PUBNAMES_HEADER_SIZE (2 * DWARF_OFFSET_SIZE + 2)
5675
5676 /* Fixed size portion of the address range info.  */
5677 #define DWARF_ARANGES_HEADER_SIZE                                       \
5678   (DWARF_ROUND (DWARF_INITIAL_LENGTH_SIZE + DWARF_OFFSET_SIZE + 4,      \
5679                 DWARF2_ADDR_SIZE * 2)                                   \
5680    - DWARF_INITIAL_LENGTH_SIZE)
5681
5682 /* Size of padding portion in the address range info.  It must be
5683    aligned to twice the pointer size.  */
5684 #define DWARF_ARANGES_PAD_SIZE \
5685   (DWARF_ROUND (DWARF_INITIAL_LENGTH_SIZE + DWARF_OFFSET_SIZE + 4, \
5686                 DWARF2_ADDR_SIZE * 2)                              \
5687    - (DWARF_INITIAL_LENGTH_SIZE + DWARF_OFFSET_SIZE + 4))
5688
5689 /* Use assembler line directives if available.  */
5690 #ifndef DWARF2_ASM_LINE_DEBUG_INFO
5691 #ifdef HAVE_AS_DWARF2_DEBUG_LINE
5692 #define DWARF2_ASM_LINE_DEBUG_INFO 1
5693 #else
5694 #define DWARF2_ASM_LINE_DEBUG_INFO 0
5695 #endif
5696 #endif
5697
5698 /* Minimum line offset in a special line info. opcode.
5699    This value was chosen to give a reasonable range of values.  */
5700 #define DWARF_LINE_BASE  -10
5701
5702 /* First special line opcode - leave room for the standard opcodes.  */
5703 #define DWARF_LINE_OPCODE_BASE  10
5704
5705 /* Range of line offsets in a special line info. opcode.  */
5706 #define DWARF_LINE_RANGE  (254-DWARF_LINE_OPCODE_BASE+1)
5707
5708 /* Flag that indicates the initial value of the is_stmt_start flag.
5709    In the present implementation, we do not mark any lines as
5710    the beginning of a source statement, because that information
5711    is not made available by the GCC front-end.  */
5712 #define DWARF_LINE_DEFAULT_IS_STMT_START 1
5713
5714 /* Maximum number of operations per instruction bundle.  */
5715 #ifndef DWARF_LINE_DEFAULT_MAX_OPS_PER_INSN
5716 #define DWARF_LINE_DEFAULT_MAX_OPS_PER_INSN 1
5717 #endif
5718
5719 #ifdef DWARF2_DEBUGGING_INFO
5720 /* This location is used by calc_die_sizes() to keep track
5721    the offset of each DIE within the .debug_info section.  */
5722 static unsigned long next_die_offset;
5723 #endif
5724
5725 /* Record the root of the DIE's built for the current compilation unit.  */
5726 static GTY(()) dw_die_ref comp_unit_die;
5727
5728 /* A list of type DIEs that have been separated into comdat sections.  */
5729 static GTY(()) comdat_type_node *comdat_type_list;
5730
5731 /* A list of DIEs with a NULL parent waiting to be relocated.  */
5732 static GTY(()) limbo_die_node *limbo_die_list;
5733
5734 /* A list of DIEs for which we may have to generate
5735    DW_AT_{,MIPS_}linkage_name once their DECL_ASSEMBLER_NAMEs are set.  */
5736 static GTY(()) limbo_die_node *deferred_asm_name;
5737
5738 /* Filenames referenced by this compilation unit.  */
5739 static GTY((param_is (struct dwarf_file_data))) htab_t file_table;
5740
5741 /* A hash table of references to DIE's that describe declarations.
5742    The key is a DECL_UID() which is a unique number identifying each decl.  */
5743 static GTY ((param_is (struct die_struct))) htab_t decl_die_table;
5744
5745 /* A hash table of references to DIE's that describe COMMON blocks.
5746    The key is DECL_UID() ^ die_parent.  */
5747 static GTY ((param_is (struct die_struct))) htab_t common_block_die_table;
5748
5749 typedef struct GTY(()) die_arg_entry_struct {
5750     dw_die_ref die;
5751     tree arg;
5752 } die_arg_entry;
5753
5754 DEF_VEC_O(die_arg_entry);
5755 DEF_VEC_ALLOC_O(die_arg_entry,gc);
5756
5757 /* Node of the variable location list.  */
5758 struct GTY ((chain_next ("%h.next"))) var_loc_node {
5759   /* Either NOTE_INSN_VAR_LOCATION, or, for SRA optimized variables,
5760      EXPR_LIST chain.  For small bitsizes, bitsize is encoded
5761      in mode of the EXPR_LIST node and first EXPR_LIST operand
5762      is either NOTE_INSN_VAR_LOCATION for a piece with a known
5763      location or NULL for padding.  For larger bitsizes,
5764      mode is 0 and first operand is a CONCAT with bitsize
5765      as first CONCAT operand and NOTE_INSN_VAR_LOCATION resp.
5766      NULL as second operand.  */
5767   rtx GTY (()) loc;
5768   const char * GTY (()) label;
5769   struct var_loc_node * GTY (()) next;
5770 };
5771
5772 /* Variable location list.  */
5773 struct GTY (()) var_loc_list_def {
5774   struct var_loc_node * GTY (()) first;
5775
5776   /* Pointer to the last but one or last element of the
5777      chained list.  If the list is empty, both first and
5778      last are NULL, if the list contains just one node
5779      or the last node certainly is not redundant, it points
5780      to the last node, otherwise points to the last but one.
5781      Do not mark it for GC because it is marked through the chain.  */
5782   struct var_loc_node * GTY ((skip ("%h"))) last;
5783
5784   /* DECL_UID of the variable decl.  */
5785   unsigned int decl_id;
5786 };
5787 typedef struct var_loc_list_def var_loc_list;
5788
5789
5790 /* Table of decl location linked lists.  */
5791 static GTY ((param_is (var_loc_list))) htab_t decl_loc_table;
5792
5793 /* A pointer to the base of a list of references to DIE's that
5794    are uniquely identified by their tag, presence/absence of
5795    children DIE's, and list of attribute/value pairs.  */
5796 static GTY((length ("abbrev_die_table_allocated")))
5797   dw_die_ref *abbrev_die_table;
5798
5799 /* Number of elements currently allocated for abbrev_die_table.  */
5800 static GTY(()) unsigned abbrev_die_table_allocated;
5801
5802 /* Number of elements in type_die_table currently in use.  */
5803 static GTY(()) unsigned abbrev_die_table_in_use;
5804
5805 /* Size (in elements) of increments by which we may expand the
5806    abbrev_die_table.  */
5807 #define ABBREV_DIE_TABLE_INCREMENT 256
5808
5809 /* A pointer to the base of a table that contains line information
5810    for each source code line in .text in the compilation unit.  */
5811 static GTY((length ("line_info_table_allocated")))
5812      dw_line_info_ref line_info_table;
5813
5814 /* Number of elements currently allocated for line_info_table.  */
5815 static GTY(()) unsigned line_info_table_allocated;
5816
5817 /* Number of elements in line_info_table currently in use.  */
5818 static GTY(()) unsigned line_info_table_in_use;
5819
5820 /* A pointer to the base of a table that contains line information
5821    for each source code line outside of .text in the compilation unit.  */
5822 static GTY ((length ("separate_line_info_table_allocated")))
5823      dw_separate_line_info_ref separate_line_info_table;
5824
5825 /* Number of elements currently allocated for separate_line_info_table.  */
5826 static GTY(()) unsigned separate_line_info_table_allocated;
5827
5828 /* Number of elements in separate_line_info_table currently in use.  */
5829 static GTY(()) unsigned separate_line_info_table_in_use;
5830
5831 /* Size (in elements) of increments by which we may expand the
5832    line_info_table.  */
5833 #define LINE_INFO_TABLE_INCREMENT 1024
5834
5835 /* A pointer to the base of a table that contains a list of publicly
5836    accessible names.  */
5837 static GTY (()) VEC (pubname_entry, gc) *  pubname_table;
5838
5839 /* A pointer to the base of a table that contains a list of publicly
5840    accessible types.  */
5841 static GTY (()) VEC (pubname_entry, gc) * pubtype_table;
5842
5843 /* Array of dies for which we should generate .debug_arange info.  */
5844 static GTY((length ("arange_table_allocated"))) dw_die_ref *arange_table;
5845
5846 /* Number of elements currently allocated for arange_table.  */
5847 static GTY(()) unsigned arange_table_allocated;
5848
5849 /* Number of elements in arange_table currently in use.  */
5850 static GTY(()) unsigned arange_table_in_use;
5851
5852 /* Size (in elements) of increments by which we may expand the
5853    arange_table.  */
5854 #define ARANGE_TABLE_INCREMENT 64
5855
5856 /* Array of dies for which we should generate .debug_ranges info.  */
5857 static GTY ((length ("ranges_table_allocated"))) dw_ranges_ref ranges_table;
5858
5859 /* Number of elements currently allocated for ranges_table.  */
5860 static GTY(()) unsigned ranges_table_allocated;
5861
5862 /* Number of elements in ranges_table currently in use.  */
5863 static GTY(()) unsigned ranges_table_in_use;
5864
5865 /* Array of pairs of labels referenced in ranges_table.  */
5866 static GTY ((length ("ranges_by_label_allocated")))
5867      dw_ranges_by_label_ref ranges_by_label;
5868
5869 /* Number of elements currently allocated for ranges_by_label.  */
5870 static GTY(()) unsigned ranges_by_label_allocated;
5871
5872 /* Number of elements in ranges_by_label currently in use.  */
5873 static GTY(()) unsigned ranges_by_label_in_use;
5874
5875 /* Size (in elements) of increments by which we may expand the
5876    ranges_table.  */
5877 #define RANGES_TABLE_INCREMENT 64
5878
5879 /* Whether we have location lists that need outputting */
5880 static GTY(()) bool have_location_lists;
5881
5882 /* Unique label counter.  */
5883 static GTY(()) unsigned int loclabel_num;
5884
5885 /* Unique label counter for point-of-call tables.  */
5886 static GTY(()) unsigned int poc_label_num;
5887
5888 /* The direct call table structure.  */
5889
5890 typedef struct GTY(()) dcall_struct {
5891   unsigned int poc_label_num;
5892   tree poc_decl;
5893   dw_die_ref targ_die;
5894 }
5895 dcall_entry;
5896
5897 DEF_VEC_O(dcall_entry);
5898 DEF_VEC_ALLOC_O(dcall_entry, gc);
5899
5900 /* The virtual call table structure.  */
5901
5902 typedef struct GTY(()) vcall_struct {
5903   unsigned int poc_label_num;
5904   unsigned int vtable_slot;
5905 }
5906 vcall_entry;
5907
5908 DEF_VEC_O(vcall_entry);
5909 DEF_VEC_ALLOC_O(vcall_entry, gc);
5910
5911 /* Pointers to the direct and virtual call tables.  */
5912 static GTY (()) VEC (dcall_entry, gc) * dcall_table = NULL;
5913 static GTY (()) VEC (vcall_entry, gc) * vcall_table = NULL;
5914
5915 /* A hash table to map INSN_UIDs to vtable slot indexes.  */
5916
5917 struct GTY (()) vcall_insn {
5918   int insn_uid;
5919   unsigned int vtable_slot;
5920 };
5921
5922 static GTY ((param_is (struct vcall_insn))) htab_t vcall_insn_table;
5923
5924 #ifdef DWARF2_DEBUGGING_INFO
5925 /* Record whether the function being analyzed contains inlined functions.  */
5926 static int current_function_has_inlines;
5927 #endif
5928 #if 0 && defined (MIPS_DEBUGGING_INFO)
5929 static int comp_unit_has_inlines;
5930 #endif
5931
5932 /* The last file entry emitted by maybe_emit_file().  */
5933 static GTY(()) struct dwarf_file_data * last_emitted_file;
5934
5935 /* Number of internal labels generated by gen_internal_sym().  */
5936 static GTY(()) int label_num;
5937
5938 /* Cached result of previous call to lookup_filename.  */
5939 static GTY(()) struct dwarf_file_data * file_table_last_lookup;
5940
5941 static GTY(()) VEC(die_arg_entry,gc) *tmpl_value_parm_die_table;
5942
5943 #ifdef DWARF2_DEBUGGING_INFO
5944
5945 /* Offset from the "steady-state frame pointer" to the frame base,
5946    within the current function.  */
5947 static HOST_WIDE_INT frame_pointer_fb_offset;
5948
5949 /* Forward declarations for functions defined in this file.  */
5950
5951 static int is_pseudo_reg (const_rtx);
5952 static tree type_main_variant (tree);
5953 static int is_tagged_type (const_tree);
5954 static const char *dwarf_tag_name (unsigned);
5955 static const char *dwarf_attr_name (unsigned);
5956 static const char *dwarf_form_name (unsigned);
5957 static tree decl_ultimate_origin (const_tree);
5958 static tree decl_class_context (tree);
5959 static void add_dwarf_attr (dw_die_ref, dw_attr_ref);
5960 static inline enum dw_val_class AT_class (dw_attr_ref);
5961 static void add_AT_flag (dw_die_ref, enum dwarf_attribute, unsigned);
5962 static inline unsigned AT_flag (dw_attr_ref);
5963 static void add_AT_int (dw_die_ref, enum dwarf_attribute, HOST_WIDE_INT);
5964 static inline HOST_WIDE_INT AT_int (dw_attr_ref);
5965 static void add_AT_unsigned (dw_die_ref, enum dwarf_attribute, unsigned HOST_WIDE_INT);
5966 static inline unsigned HOST_WIDE_INT AT_unsigned (dw_attr_ref);
5967 static void add_AT_double (dw_die_ref, enum dwarf_attribute,
5968                            HOST_WIDE_INT, unsigned HOST_WIDE_INT);
5969 static inline void add_AT_vec (dw_die_ref, enum dwarf_attribute, unsigned int,
5970                                unsigned int, unsigned char *);
5971 static void add_AT_data8 (dw_die_ref, enum dwarf_attribute, unsigned char *);
5972 static hashval_t debug_str_do_hash (const void *);
5973 static int debug_str_eq (const void *, const void *);
5974 static void add_AT_string (dw_die_ref, enum dwarf_attribute, const char *);
5975 static inline const char *AT_string (dw_attr_ref);
5976 static enum dwarf_form AT_string_form (dw_attr_ref);
5977 static void add_AT_die_ref (dw_die_ref, enum dwarf_attribute, dw_die_ref);
5978 static void add_AT_specification (dw_die_ref, dw_die_ref);
5979 static inline dw_die_ref AT_ref (dw_attr_ref);
5980 static inline int AT_ref_external (dw_attr_ref);
5981 static inline void set_AT_ref_external (dw_attr_ref, int);
5982 static void add_AT_fde_ref (dw_die_ref, enum dwarf_attribute, unsigned);
5983 static void add_AT_loc (dw_die_ref, enum dwarf_attribute, dw_loc_descr_ref);
5984 static inline dw_loc_descr_ref AT_loc (dw_attr_ref);
5985 static void add_AT_loc_list (dw_die_ref, enum dwarf_attribute,
5986                              dw_loc_list_ref);
5987 static inline dw_loc_list_ref AT_loc_list (dw_attr_ref);
5988 static void add_AT_addr (dw_die_ref, enum dwarf_attribute, rtx);
5989 static inline rtx AT_addr (dw_attr_ref);
5990 static void add_AT_lbl_id (dw_die_ref, enum dwarf_attribute, const char *);
5991 static void add_AT_lineptr (dw_die_ref, enum dwarf_attribute, const char *);
5992 static void add_AT_macptr (dw_die_ref, enum dwarf_attribute, const char *);
5993 static void add_AT_offset (dw_die_ref, enum dwarf_attribute,
5994                            unsigned HOST_WIDE_INT);
5995 static void add_AT_range_list (dw_die_ref, enum dwarf_attribute,
5996                                unsigned long);
5997 static inline const char *AT_lbl (dw_attr_ref);
5998 static dw_attr_ref get_AT (dw_die_ref, enum dwarf_attribute);
5999 static const char *get_AT_low_pc (dw_die_ref);
6000 static const char *get_AT_hi_pc (dw_die_ref);
6001 static const char *get_AT_string (dw_die_ref, enum dwarf_attribute);
6002 static int get_AT_flag (dw_die_ref, enum dwarf_attribute);
6003 static unsigned get_AT_unsigned (dw_die_ref, enum dwarf_attribute);
6004 static inline dw_die_ref get_AT_ref (dw_die_ref, enum dwarf_attribute);
6005 static bool is_cxx (void);
6006 static bool is_fortran (void);
6007 static bool is_ada (void);
6008 static void remove_AT (dw_die_ref, enum dwarf_attribute);
6009 static void remove_child_TAG (dw_die_ref, enum dwarf_tag);
6010 static void add_child_die (dw_die_ref, dw_die_ref);
6011 static dw_die_ref new_die (enum dwarf_tag, dw_die_ref, tree);
6012 static dw_die_ref lookup_type_die (tree);
6013 static void equate_type_number_to_die (tree, dw_die_ref);
6014 static hashval_t decl_die_table_hash (const void *);
6015 static int decl_die_table_eq (const void *, const void *);
6016 static dw_die_ref lookup_decl_die (tree);
6017 static hashval_t common_block_die_table_hash (const void *);
6018 static int common_block_die_table_eq (const void *, const void *);
6019 static hashval_t decl_loc_table_hash (const void *);
6020 static int decl_loc_table_eq (const void *, const void *);
6021 static var_loc_list *lookup_decl_loc (const_tree);
6022 static void equate_decl_number_to_die (tree, dw_die_ref);
6023 static struct var_loc_node *add_var_loc_to_decl (tree, rtx, const char *);
6024 static void print_spaces (FILE *);
6025 static void print_die (dw_die_ref, FILE *);
6026 static void print_dwarf_line_table (FILE *);
6027 static dw_die_ref push_new_compile_unit (dw_die_ref, dw_die_ref);
6028 static dw_die_ref pop_compile_unit (dw_die_ref);
6029 static void loc_checksum (dw_loc_descr_ref, struct md5_ctx *);
6030 static void attr_checksum (dw_attr_ref, struct md5_ctx *, int *);
6031 static void die_checksum (dw_die_ref, struct md5_ctx *, int *);
6032 static void checksum_sleb128 (HOST_WIDE_INT, struct md5_ctx *);
6033 static void checksum_uleb128 (unsigned HOST_WIDE_INT, struct md5_ctx *);
6034 static void loc_checksum_ordered (dw_loc_descr_ref, struct md5_ctx *);
6035 static void attr_checksum_ordered (enum dwarf_tag, dw_attr_ref,
6036                                    struct md5_ctx *, int *);
6037 struct checksum_attributes;
6038 static void collect_checksum_attributes (struct checksum_attributes *, dw_die_ref);
6039 static void die_checksum_ordered (dw_die_ref, struct md5_ctx *, int *);
6040 static void checksum_die_context (dw_die_ref, struct md5_ctx *);
6041 static void generate_type_signature (dw_die_ref, comdat_type_node *);
6042 static int same_loc_p (dw_loc_descr_ref, dw_loc_descr_ref, int *);
6043 static int same_dw_val_p (const dw_val_node *, const dw_val_node *, int *);
6044 static int same_attr_p (dw_attr_ref, dw_attr_ref, int *);
6045 static int same_die_p (dw_die_ref, dw_die_ref, int *);
6046 static int same_die_p_wrap (dw_die_ref, dw_die_ref);
6047 static void compute_section_prefix (dw_die_ref);
6048 static int is_type_die (dw_die_ref);
6049 static int is_comdat_die (dw_die_ref);
6050 static int is_symbol_die (dw_die_ref);
6051 static void assign_symbol_names (dw_die_ref);
6052 static void break_out_includes (dw_die_ref);
6053 static int is_declaration_die (dw_die_ref);
6054 static int should_move_die_to_comdat (dw_die_ref);
6055 static dw_die_ref clone_as_declaration (dw_die_ref);
6056 static dw_die_ref clone_die (dw_die_ref);
6057 static dw_die_ref clone_tree (dw_die_ref);
6058 static void copy_declaration_context (dw_die_ref, dw_die_ref);
6059 static void generate_skeleton_ancestor_tree (skeleton_chain_node *);
6060 static void generate_skeleton_bottom_up (skeleton_chain_node *);
6061 static dw_die_ref generate_skeleton (dw_die_ref);
6062 static dw_die_ref remove_child_or_replace_with_skeleton (dw_die_ref,
6063                                                          dw_die_ref);
6064 static void break_out_comdat_types (dw_die_ref);
6065 static dw_die_ref copy_ancestor_tree (dw_die_ref, dw_die_ref, htab_t);
6066 static void copy_decls_walk (dw_die_ref, dw_die_ref, htab_t);
6067 static void copy_decls_for_unworthy_types (dw_die_ref);
6068
6069 static hashval_t htab_cu_hash (const void *);
6070 static int htab_cu_eq (const void *, const void *);
6071 static void htab_cu_del (void *);
6072 static int check_duplicate_cu (dw_die_ref, htab_t, unsigned *);
6073 static void record_comdat_symbol_number (dw_die_ref, htab_t, unsigned);
6074 static void add_sibling_attributes (dw_die_ref);
6075 static void build_abbrev_table (dw_die_ref);
6076 static void output_location_lists (dw_die_ref);
6077 static int constant_size (unsigned HOST_WIDE_INT);
6078 static unsigned long size_of_die (dw_die_ref);
6079 static void calc_die_sizes (dw_die_ref);
6080 static void mark_dies (dw_die_ref);
6081 static void unmark_dies (dw_die_ref);
6082 static void unmark_all_dies (dw_die_ref);
6083 static unsigned long size_of_pubnames (VEC (pubname_entry,gc) *);
6084 static unsigned long size_of_aranges (void);
6085 static enum dwarf_form value_format (dw_attr_ref);
6086 static void output_value_format (dw_attr_ref);
6087 static void output_abbrev_section (void);
6088 static void output_die_symbol (dw_die_ref);
6089 static void output_die (dw_die_ref);
6090 static void output_compilation_unit_header (void);
6091 static void output_comp_unit (dw_die_ref, int);
6092 static void output_comdat_type_unit (comdat_type_node *);
6093 static const char *dwarf2_name (tree, int);
6094 static void add_pubname (tree, dw_die_ref);
6095 static void add_pubname_string (const char *, dw_die_ref);
6096 static void add_pubtype (tree, dw_die_ref);
6097 static void output_pubnames (VEC (pubname_entry,gc) *);
6098 static void add_arange (tree, dw_die_ref);
6099 static void output_aranges (void);
6100 static unsigned int add_ranges_num (int);
6101 static unsigned int add_ranges (const_tree);
6102 static void add_ranges_by_labels (dw_die_ref, const char *, const char *,
6103                                   bool *);
6104 static void output_ranges (void);
6105 static void output_line_info (void);
6106 static void output_file_names (void);
6107 static dw_die_ref base_type_die (tree);
6108 static int is_base_type (tree);
6109 static dw_die_ref subrange_type_die (tree, tree, tree, dw_die_ref);
6110 static dw_die_ref modified_type_die (tree, int, int, dw_die_ref);
6111 static dw_die_ref generic_parameter_die (tree, tree, bool, dw_die_ref);
6112 static dw_die_ref template_parameter_pack_die (tree, tree, dw_die_ref);
6113 static int type_is_enum (const_tree);
6114 static unsigned int dbx_reg_number (const_rtx);
6115 static void add_loc_descr_op_piece (dw_loc_descr_ref *, int);
6116 static dw_loc_descr_ref reg_loc_descriptor (rtx, enum var_init_status);
6117 static dw_loc_descr_ref one_reg_loc_descriptor (unsigned int,
6118                                                 enum var_init_status);
6119 static dw_loc_descr_ref multiple_reg_loc_descriptor (rtx, rtx,
6120                                                      enum var_init_status);
6121 static dw_loc_descr_ref based_loc_descr (rtx, HOST_WIDE_INT,
6122                                          enum var_init_status);
6123 static int is_based_loc (const_rtx);
6124 static int resolve_one_addr (rtx *, void *);
6125 static dw_loc_descr_ref mem_loc_descriptor (rtx, enum machine_mode mode,
6126                                             enum var_init_status);
6127 static dw_loc_descr_ref concat_loc_descriptor (rtx, rtx,
6128                                                enum var_init_status);
6129 static dw_loc_descr_ref loc_descriptor (rtx, enum machine_mode mode,
6130                                         enum var_init_status);
6131 static dw_loc_list_ref loc_list_from_tree (tree, int);
6132 static dw_loc_descr_ref loc_descriptor_from_tree (tree, int);
6133 static HOST_WIDE_INT ceiling (HOST_WIDE_INT, unsigned int);
6134 static tree field_type (const_tree);
6135 static unsigned int simple_type_align_in_bits (const_tree);
6136 static unsigned int simple_decl_align_in_bits (const_tree);
6137 static unsigned HOST_WIDE_INT simple_type_size_in_bits (const_tree);
6138 static HOST_WIDE_INT field_byte_offset (const_tree);
6139 static void add_AT_location_description (dw_die_ref, enum dwarf_attribute,
6140                                          dw_loc_list_ref);
6141 static void add_data_member_location_attribute (dw_die_ref, tree);
6142 static bool add_const_value_attribute (dw_die_ref, rtx);
6143 static void insert_int (HOST_WIDE_INT, unsigned, unsigned char *);
6144 static void insert_double (double_int, unsigned char *);
6145 static void insert_float (const_rtx, unsigned char *);
6146 static rtx rtl_for_decl_location (tree);
6147 static bool add_location_or_const_value_attribute (dw_die_ref, tree,
6148                                                    enum dwarf_attribute);
6149 static bool tree_add_const_value_attribute (dw_die_ref, tree);
6150 static bool tree_add_const_value_attribute_for_decl (dw_die_ref, tree);
6151 static void add_name_attribute (dw_die_ref, const char *);
6152 static void add_comp_dir_attribute (dw_die_ref);
6153 static void add_bound_info (dw_die_ref, enum dwarf_attribute, tree);
6154 static void add_subscript_info (dw_die_ref, tree, bool);
6155 static void add_byte_size_attribute (dw_die_ref, tree);
6156 static void add_bit_offset_attribute (dw_die_ref, tree);
6157 static void add_bit_size_attribute (dw_die_ref, tree);
6158 static void add_prototyped_attribute (dw_die_ref, tree);
6159 static dw_die_ref add_abstract_origin_attribute (dw_die_ref, tree);
6160 static void add_pure_or_virtual_attribute (dw_die_ref, tree);
6161 static void add_src_coords_attributes (dw_die_ref, tree);
6162 static void add_name_and_src_coords_attributes (dw_die_ref, tree);
6163 static void push_decl_scope (tree);
6164 static void pop_decl_scope (void);
6165 static dw_die_ref scope_die_for (tree, dw_die_ref);
6166 static inline int local_scope_p (dw_die_ref);
6167 static inline int class_scope_p (dw_die_ref);
6168 static inline int class_or_namespace_scope_p (dw_die_ref);
6169 static void add_type_attribute (dw_die_ref, tree, int, int, dw_die_ref);
6170 static void add_calling_convention_attribute (dw_die_ref, tree);
6171 static const char *type_tag (const_tree);
6172 static tree member_declared_type (const_tree);
6173 #if 0
6174 static const char *decl_start_label (tree);
6175 #endif
6176 static void gen_array_type_die (tree, dw_die_ref);
6177 static void gen_descr_array_type_die (tree, struct array_descr_info *, dw_die_ref);
6178 #if 0
6179 static void gen_entry_point_die (tree, dw_die_ref);
6180 #endif
6181 static dw_die_ref gen_enumeration_type_die (tree, dw_die_ref);
6182 static dw_die_ref gen_formal_parameter_die (tree, tree, bool, dw_die_ref);
6183 static dw_die_ref gen_formal_parameter_pack_die  (tree, tree, dw_die_ref, tree*);
6184 static void gen_unspecified_parameters_die (tree, dw_die_ref);
6185 static void gen_formal_types_die (tree, dw_die_ref);
6186 static void gen_subprogram_die (tree, dw_die_ref);
6187 static void gen_variable_die (tree, tree, dw_die_ref);
6188 static void gen_const_die (tree, dw_die_ref);
6189 static void gen_label_die (tree, dw_die_ref);
6190 static void gen_lexical_block_die (tree, dw_die_ref, int);
6191 static void gen_inlined_subroutine_die (tree, dw_die_ref, int);
6192 static void gen_field_die (tree, dw_die_ref);
6193 static void gen_ptr_to_mbr_type_die (tree, dw_die_ref);
6194 static dw_die_ref gen_compile_unit_die (const char *);
6195 static void gen_inheritance_die (tree, tree, dw_die_ref);
6196 static void gen_member_die (tree, dw_die_ref);
6197 static void gen_struct_or_union_type_die (tree, dw_die_ref,
6198                                                 enum debug_info_usage);
6199 static void gen_subroutine_type_die (tree, dw_die_ref);
6200 static void gen_typedef_die (tree, dw_die_ref);
6201 static void gen_type_die (tree, dw_die_ref);
6202 static void gen_block_die (tree, dw_die_ref, int);
6203 static void decls_for_scope (tree, dw_die_ref, int);
6204 static int is_redundant_typedef (const_tree);
6205 static inline dw_die_ref get_context_die (tree);
6206 static void gen_namespace_die (tree, dw_die_ref);
6207 static void gen_decl_die (tree, tree, dw_die_ref);
6208 static dw_die_ref force_decl_die (tree);
6209 static dw_die_ref force_type_die (tree);
6210 static dw_die_ref setup_namespace_context (tree, dw_die_ref);
6211 static dw_die_ref declare_in_namespace (tree, dw_die_ref);
6212 static struct dwarf_file_data * lookup_filename (const char *);
6213 static void retry_incomplete_types (void);
6214 static void gen_type_die_for_member (tree, tree, dw_die_ref);
6215 static void gen_generic_params_dies (tree);
6216 static void splice_child_die (dw_die_ref, dw_die_ref);
6217 static int file_info_cmp (const void *, const void *);
6218 static dw_loc_list_ref new_loc_list (dw_loc_descr_ref, const char *,
6219                                      const char *, const char *);
6220 static void output_loc_list (dw_loc_list_ref);
6221 static char *gen_internal_sym (const char *);
6222
6223 static void prune_unmark_dies (dw_die_ref);
6224 static void prune_unused_types_mark (dw_die_ref, int);
6225 static void prune_unused_types_walk (dw_die_ref);
6226 static void prune_unused_types_walk_attribs (dw_die_ref);
6227 static void prune_unused_types_prune (dw_die_ref);
6228 static void prune_unused_types (void);
6229 static int maybe_emit_file (struct dwarf_file_data *fd);
6230 static void append_entry_to_tmpl_value_parm_die_table (dw_die_ref, tree);
6231 static void gen_remaining_tmpl_value_param_die_attribute (void);
6232
6233 /* Section names used to hold DWARF debugging information.  */
6234 #ifndef DEBUG_INFO_SECTION
6235 #define DEBUG_INFO_SECTION      ".debug_info"
6236 #endif
6237 #ifndef DEBUG_ABBREV_SECTION
6238 #define DEBUG_ABBREV_SECTION    ".debug_abbrev"
6239 #endif
6240 #ifndef DEBUG_ARANGES_SECTION
6241 #define DEBUG_ARANGES_SECTION   ".debug_aranges"
6242 #endif
6243 #ifndef DEBUG_MACINFO_SECTION
6244 #define DEBUG_MACINFO_SECTION   ".debug_macinfo"
6245 #endif
6246 #ifndef DEBUG_LINE_SECTION
6247 #define DEBUG_LINE_SECTION      ".debug_line"
6248 #endif
6249 #ifndef DEBUG_LOC_SECTION
6250 #define DEBUG_LOC_SECTION       ".debug_loc"
6251 #endif
6252 #ifndef DEBUG_PUBNAMES_SECTION
6253 #define DEBUG_PUBNAMES_SECTION  ".debug_pubnames"
6254 #endif
6255 #ifndef DEBUG_PUBTYPES_SECTION
6256 #define DEBUG_PUBTYPES_SECTION  ".debug_pubtypes"
6257 #endif
6258 #ifndef DEBUG_DCALL_SECTION
6259 #define DEBUG_DCALL_SECTION     ".debug_dcall"
6260 #endif
6261 #ifndef DEBUG_VCALL_SECTION
6262 #define DEBUG_VCALL_SECTION     ".debug_vcall"
6263 #endif
6264 #ifndef DEBUG_STR_SECTION
6265 #define DEBUG_STR_SECTION       ".debug_str"
6266 #endif
6267 #ifndef DEBUG_RANGES_SECTION
6268 #define DEBUG_RANGES_SECTION    ".debug_ranges"
6269 #endif
6270
6271 /* Standard ELF section names for compiled code and data.  */
6272 #ifndef TEXT_SECTION_NAME
6273 #define TEXT_SECTION_NAME       ".text"
6274 #endif
6275
6276 /* Section flags for .debug_str section.  */
6277 #define DEBUG_STR_SECTION_FLAGS \
6278   (HAVE_GAS_SHF_MERGE && flag_merge_debug_strings               \
6279    ? SECTION_DEBUG | SECTION_MERGE | SECTION_STRINGS | 1        \
6280    : SECTION_DEBUG)
6281
6282 /* Labels we insert at beginning sections we can reference instead of
6283    the section names themselves.  */
6284
6285 #ifndef TEXT_SECTION_LABEL
6286 #define TEXT_SECTION_LABEL              "Ltext"
6287 #endif
6288 #ifndef COLD_TEXT_SECTION_LABEL
6289 #define COLD_TEXT_SECTION_LABEL         "Ltext_cold"
6290 #endif
6291 #ifndef DEBUG_LINE_SECTION_LABEL
6292 #define DEBUG_LINE_SECTION_LABEL        "Ldebug_line"
6293 #endif
6294 #ifndef DEBUG_INFO_SECTION_LABEL
6295 #define DEBUG_INFO_SECTION_LABEL        "Ldebug_info"
6296 #endif
6297 #ifndef DEBUG_ABBREV_SECTION_LABEL
6298 #define DEBUG_ABBREV_SECTION_LABEL      "Ldebug_abbrev"
6299 #endif
6300 #ifndef DEBUG_LOC_SECTION_LABEL
6301 #define DEBUG_LOC_SECTION_LABEL         "Ldebug_loc"
6302 #endif
6303 #ifndef DEBUG_RANGES_SECTION_LABEL
6304 #define DEBUG_RANGES_SECTION_LABEL      "Ldebug_ranges"
6305 #endif
6306 #ifndef DEBUG_MACINFO_SECTION_LABEL
6307 #define DEBUG_MACINFO_SECTION_LABEL     "Ldebug_macinfo"
6308 #endif
6309
6310 /* Mangled name attribute to use.  This used to be a vendor extension
6311    until DWARF 4 standardized it.  */
6312 #define AT_linkage_name \
6313   (dwarf_version >= 4 ? DW_AT_linkage_name : DW_AT_MIPS_linkage_name)
6314
6315
6316 /* Definitions of defaults for formats and names of various special
6317    (artificial) labels which may be generated within this file (when the -g
6318    options is used and DWARF2_DEBUGGING_INFO is in effect.
6319    If necessary, these may be overridden from within the tm.h file, but
6320    typically, overriding these defaults is unnecessary.  */
6321
6322 static char text_end_label[MAX_ARTIFICIAL_LABEL_BYTES];
6323 static char text_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
6324 static char cold_text_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
6325 static char cold_end_label[MAX_ARTIFICIAL_LABEL_BYTES];
6326 static char abbrev_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
6327 static char debug_info_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
6328 static char debug_line_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
6329 static char macinfo_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
6330 static char loc_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
6331 static char ranges_section_label[2 * MAX_ARTIFICIAL_LABEL_BYTES];
6332
6333 #ifndef TEXT_END_LABEL
6334 #define TEXT_END_LABEL          "Letext"
6335 #endif
6336 #ifndef COLD_END_LABEL
6337 #define COLD_END_LABEL          "Letext_cold"
6338 #endif
6339 #ifndef BLOCK_BEGIN_LABEL
6340 #define BLOCK_BEGIN_LABEL       "LBB"
6341 #endif
6342 #ifndef BLOCK_END_LABEL
6343 #define BLOCK_END_LABEL         "LBE"
6344 #endif
6345 #ifndef LINE_CODE_LABEL
6346 #define LINE_CODE_LABEL         "LM"
6347 #endif
6348 #ifndef SEPARATE_LINE_CODE_LABEL
6349 #define SEPARATE_LINE_CODE_LABEL        "LSM"
6350 #endif
6351
6352 \f
6353 /* We allow a language front-end to designate a function that is to be
6354    called to "demangle" any name before it is put into a DIE.  */
6355
6356 static const char *(*demangle_name_func) (const char *);
6357
6358 void
6359 dwarf2out_set_demangle_name_func (const char *(*func) (const char *))
6360 {
6361   demangle_name_func = func;
6362 }
6363
6364 /* Test if rtl node points to a pseudo register.  */
6365
6366 static inline int
6367 is_pseudo_reg (const_rtx rtl)
6368 {
6369   return ((REG_P (rtl) && REGNO (rtl) >= FIRST_PSEUDO_REGISTER)
6370           || (GET_CODE (rtl) == SUBREG
6371               && REGNO (SUBREG_REG (rtl)) >= FIRST_PSEUDO_REGISTER));
6372 }
6373
6374 /* Return a reference to a type, with its const and volatile qualifiers
6375    removed.  */
6376
6377 static inline tree
6378 type_main_variant (tree type)
6379 {
6380   type = TYPE_MAIN_VARIANT (type);
6381
6382   /* ??? There really should be only one main variant among any group of
6383      variants of a given type (and all of the MAIN_VARIANT values for all
6384      members of the group should point to that one type) but sometimes the C
6385      front-end messes this up for array types, so we work around that bug
6386      here.  */
6387   if (TREE_CODE (type) == ARRAY_TYPE)
6388     while (type != TYPE_MAIN_VARIANT (type))
6389       type = TYPE_MAIN_VARIANT (type);
6390
6391   return type;
6392 }
6393
6394 /* Return nonzero if the given type node represents a tagged type.  */
6395
6396 static inline int
6397 is_tagged_type (const_tree type)
6398 {
6399   enum tree_code code = TREE_CODE (type);
6400
6401   return (code == RECORD_TYPE || code == UNION_TYPE
6402           || code == QUAL_UNION_TYPE || code == ENUMERAL_TYPE);
6403 }
6404
6405 /* Convert a DIE tag into its string name.  */
6406
6407 static const char *
6408 dwarf_tag_name (unsigned int tag)
6409 {
6410   switch (tag)
6411     {
6412     case DW_TAG_padding:
6413       return "DW_TAG_padding";
6414     case DW_TAG_array_type:
6415       return "DW_TAG_array_type";
6416     case DW_TAG_class_type:
6417       return "DW_TAG_class_type";
6418     case DW_TAG_entry_point:
6419       return "DW_TAG_entry_point";
6420     case DW_TAG_enumeration_type:
6421       return "DW_TAG_enumeration_type";
6422     case DW_TAG_formal_parameter:
6423       return "DW_TAG_formal_parameter";
6424     case DW_TAG_imported_declaration:
6425       return "DW_TAG_imported_declaration";
6426     case DW_TAG_label:
6427       return "DW_TAG_label";
6428     case DW_TAG_lexical_block:
6429       return "DW_TAG_lexical_block";
6430     case DW_TAG_member:
6431       return "DW_TAG_member";
6432     case DW_TAG_pointer_type:
6433       return "DW_TAG_pointer_type";
6434     case DW_TAG_reference_type:
6435       return "DW_TAG_reference_type";
6436     case DW_TAG_compile_unit:
6437       return "DW_TAG_compile_unit";
6438     case DW_TAG_string_type:
6439       return "DW_TAG_string_type";
6440     case DW_TAG_structure_type:
6441       return "DW_TAG_structure_type";
6442     case DW_TAG_subroutine_type:
6443       return "DW_TAG_subroutine_type";
6444     case DW_TAG_typedef:
6445       return "DW_TAG_typedef";
6446     case DW_TAG_union_type:
6447       return "DW_TAG_union_type";
6448     case DW_TAG_unspecified_parameters:
6449       return "DW_TAG_unspecified_parameters";
6450     case DW_TAG_variant:
6451       return "DW_TAG_variant";
6452     case DW_TAG_common_block:
6453       return "DW_TAG_common_block";
6454     case DW_TAG_common_inclusion:
6455       return "DW_TAG_common_inclusion";
6456     case DW_TAG_inheritance:
6457       return "DW_TAG_inheritance";
6458     case DW_TAG_inlined_subroutine:
6459       return "DW_TAG_inlined_subroutine";
6460     case DW_TAG_module:
6461       return "DW_TAG_module";
6462     case DW_TAG_ptr_to_member_type:
6463       return "DW_TAG_ptr_to_member_type";
6464     case DW_TAG_set_type:
6465       return "DW_TAG_set_type";
6466     case DW_TAG_subrange_type:
6467       return "DW_TAG_subrange_type";
6468     case DW_TAG_with_stmt:
6469       return "DW_TAG_with_stmt";
6470     case DW_TAG_access_declaration:
6471       return "DW_TAG_access_declaration";
6472     case DW_TAG_base_type:
6473       return "DW_TAG_base_type";
6474     case DW_TAG_catch_block:
6475       return "DW_TAG_catch_block";
6476     case DW_TAG_const_type:
6477       return "DW_TAG_const_type";
6478     case DW_TAG_constant:
6479       return "DW_TAG_constant";
6480     case DW_TAG_enumerator:
6481       return "DW_TAG_enumerator";
6482     case DW_TAG_file_type:
6483       return "DW_TAG_file_type";
6484     case DW_TAG_friend:
6485       return "DW_TAG_friend";
6486     case DW_TAG_namelist:
6487       return "DW_TAG_namelist";
6488     case DW_TAG_namelist_item:
6489       return "DW_TAG_namelist_item";
6490     case DW_TAG_packed_type:
6491       return "DW_TAG_packed_type";
6492     case DW_TAG_subprogram:
6493       return "DW_TAG_subprogram";
6494     case DW_TAG_template_type_param:
6495       return "DW_TAG_template_type_param";
6496     case DW_TAG_template_value_param:
6497       return "DW_TAG_template_value_param";
6498     case DW_TAG_thrown_type:
6499       return "DW_TAG_thrown_type";
6500     case DW_TAG_try_block:
6501       return "DW_TAG_try_block";
6502     case DW_TAG_variant_part:
6503       return "DW_TAG_variant_part";
6504     case DW_TAG_variable:
6505       return "DW_TAG_variable";
6506     case DW_TAG_volatile_type:
6507       return "DW_TAG_volatile_type";
6508     case DW_TAG_dwarf_procedure:
6509       return "DW_TAG_dwarf_procedure";
6510     case DW_TAG_restrict_type:
6511       return "DW_TAG_restrict_type";
6512     case DW_TAG_interface_type:
6513       return "DW_TAG_interface_type";
6514     case DW_TAG_namespace:
6515       return "DW_TAG_namespace";
6516     case DW_TAG_imported_module:
6517       return "DW_TAG_imported_module";
6518     case DW_TAG_unspecified_type:
6519       return "DW_TAG_unspecified_type";
6520     case DW_TAG_partial_unit:
6521       return "DW_TAG_partial_unit";
6522     case DW_TAG_imported_unit:
6523       return "DW_TAG_imported_unit";
6524     case DW_TAG_condition:
6525       return "DW_TAG_condition";
6526     case DW_TAG_shared_type:
6527       return "DW_TAG_shared_type";
6528     case DW_TAG_type_unit:
6529       return "DW_TAG_type_unit";
6530     case DW_TAG_rvalue_reference_type:
6531       return "DW_TAG_rvalue_reference_type";
6532     case DW_TAG_template_alias:
6533       return "DW_TAG_template_alias";
6534     case DW_TAG_GNU_template_parameter_pack:
6535       return "DW_TAG_GNU_template_parameter_pack";
6536     case DW_TAG_GNU_formal_parameter_pack:
6537       return "DW_TAG_GNU_formal_parameter_pack";
6538     case DW_TAG_MIPS_loop:
6539       return "DW_TAG_MIPS_loop";
6540     case DW_TAG_format_label:
6541       return "DW_TAG_format_label";
6542     case DW_TAG_function_template:
6543       return "DW_TAG_function_template";
6544     case DW_TAG_class_template:
6545       return "DW_TAG_class_template";
6546     case DW_TAG_GNU_BINCL:
6547       return "DW_TAG_GNU_BINCL";
6548     case DW_TAG_GNU_EINCL:
6549       return "DW_TAG_GNU_EINCL";
6550     case DW_TAG_GNU_template_template_param:
6551       return "DW_TAG_GNU_template_template_param";
6552     default:
6553       return "DW_TAG_<unknown>";
6554     }
6555 }
6556
6557 /* Convert a DWARF attribute code into its string name.  */
6558
6559 static const char *
6560 dwarf_attr_name (unsigned int attr)
6561 {
6562   switch (attr)
6563     {
6564     case DW_AT_sibling:
6565       return "DW_AT_sibling";
6566     case DW_AT_location:
6567       return "DW_AT_location";
6568     case DW_AT_name:
6569       return "DW_AT_name";
6570     case DW_AT_ordering:
6571       return "DW_AT_ordering";
6572     case DW_AT_subscr_data:
6573       return "DW_AT_subscr_data";
6574     case DW_AT_byte_size:
6575       return "DW_AT_byte_size";
6576     case DW_AT_bit_offset:
6577       return "DW_AT_bit_offset";
6578     case DW_AT_bit_size:
6579       return "DW_AT_bit_size";
6580     case DW_AT_element_list:
6581       return "DW_AT_element_list";
6582     case DW_AT_stmt_list:
6583       return "DW_AT_stmt_list";
6584     case DW_AT_low_pc:
6585       return "DW_AT_low_pc";
6586     case DW_AT_high_pc:
6587       return "DW_AT_high_pc";
6588     case DW_AT_language:
6589       return "DW_AT_language";
6590     case DW_AT_member:
6591       return "DW_AT_member";
6592     case DW_AT_discr:
6593       return "DW_AT_discr";
6594     case DW_AT_discr_value:
6595       return "DW_AT_discr_value";
6596     case DW_AT_visibility:
6597       return "DW_AT_visibility";
6598     case DW_AT_import:
6599       return "DW_AT_import";
6600     case DW_AT_string_length:
6601       return "DW_AT_string_length";
6602     case DW_AT_common_reference:
6603       return "DW_AT_common_reference";
6604     case DW_AT_comp_dir:
6605       return "DW_AT_comp_dir";
6606     case DW_AT_const_value:
6607       return "DW_AT_const_value";
6608     case DW_AT_containing_type:
6609       return "DW_AT_containing_type";
6610     case DW_AT_default_value:
6611       return "DW_AT_default_value";
6612     case DW_AT_inline:
6613       return "DW_AT_inline";
6614     case DW_AT_is_optional:
6615       return "DW_AT_is_optional";
6616     case DW_AT_lower_bound:
6617       return "DW_AT_lower_bound";
6618     case DW_AT_producer:
6619       return "DW_AT_producer";
6620     case DW_AT_prototyped:
6621       return "DW_AT_prototyped";
6622     case DW_AT_return_addr:
6623       return "DW_AT_return_addr";
6624     case DW_AT_start_scope:
6625       return "DW_AT_start_scope";
6626     case DW_AT_bit_stride:
6627       return "DW_AT_bit_stride";
6628     case DW_AT_upper_bound:
6629       return "DW_AT_upper_bound";
6630     case DW_AT_abstract_origin:
6631       return "DW_AT_abstract_origin";
6632     case DW_AT_accessibility:
6633       return "DW_AT_accessibility";
6634     case DW_AT_address_class:
6635       return "DW_AT_address_class";
6636     case DW_AT_artificial:
6637       return "DW_AT_artificial";
6638     case DW_AT_base_types:
6639       return "DW_AT_base_types";
6640     case DW_AT_calling_convention:
6641       return "DW_AT_calling_convention";
6642     case DW_AT_count:
6643       return "DW_AT_count";
6644     case DW_AT_data_member_location:
6645       return "DW_AT_data_member_location";
6646     case DW_AT_decl_column:
6647       return "DW_AT_decl_column";
6648     case DW_AT_decl_file:
6649       return "DW_AT_decl_file";
6650     case DW_AT_decl_line:
6651       return "DW_AT_decl_line";
6652     case DW_AT_declaration:
6653       return "DW_AT_declaration";
6654     case DW_AT_discr_list:
6655       return "DW_AT_discr_list";
6656     case DW_AT_encoding:
6657       return "DW_AT_encoding";
6658     case DW_AT_external:
6659       return "DW_AT_external";
6660     case DW_AT_explicit:
6661       return "DW_AT_explicit";
6662     case DW_AT_frame_base:
6663       return "DW_AT_frame_base";
6664     case DW_AT_friend:
6665       return "DW_AT_friend";
6666     case DW_AT_identifier_case:
6667       return "DW_AT_identifier_case";
6668     case DW_AT_macro_info:
6669       return "DW_AT_macro_info";
6670     case DW_AT_namelist_items:
6671       return "DW_AT_namelist_items";
6672     case DW_AT_priority:
6673       return "DW_AT_priority";
6674     case DW_AT_segment:
6675       return "DW_AT_segment";
6676     case DW_AT_specification:
6677       return "DW_AT_specification";
6678     case DW_AT_static_link:
6679       return "DW_AT_static_link";
6680     case DW_AT_type:
6681       return "DW_AT_type";
6682     case DW_AT_use_location:
6683       return "DW_AT_use_location";
6684     case DW_AT_variable_parameter:
6685       return "DW_AT_variable_parameter";
6686     case DW_AT_virtuality:
6687       return "DW_AT_virtuality";
6688     case DW_AT_vtable_elem_location:
6689       return "DW_AT_vtable_elem_location";
6690
6691     case DW_AT_allocated:
6692       return "DW_AT_allocated";
6693     case DW_AT_associated:
6694       return "DW_AT_associated";
6695     case DW_AT_data_location:
6696       return "DW_AT_data_location";
6697     case DW_AT_byte_stride:
6698       return "DW_AT_byte_stride";
6699     case DW_AT_entry_pc:
6700       return "DW_AT_entry_pc";
6701     case DW_AT_use_UTF8:
6702       return "DW_AT_use_UTF8";
6703     case DW_AT_extension:
6704       return "DW_AT_extension";
6705     case DW_AT_ranges:
6706       return "DW_AT_ranges";
6707     case DW_AT_trampoline:
6708       return "DW_AT_trampoline";
6709     case DW_AT_call_column:
6710       return "DW_AT_call_column";
6711     case DW_AT_call_file:
6712       return "DW_AT_call_file";
6713     case DW_AT_call_line:
6714       return "DW_AT_call_line";
6715
6716     case DW_AT_signature:
6717       return "DW_AT_signature";
6718     case DW_AT_main_subprogram:
6719       return "DW_AT_main_subprogram";
6720     case DW_AT_data_bit_offset:
6721       return "DW_AT_data_bit_offset";
6722     case DW_AT_const_expr:
6723       return "DW_AT_const_expr";
6724     case DW_AT_enum_class:
6725       return "DW_AT_enum_class";
6726     case DW_AT_linkage_name:
6727       return "DW_AT_linkage_name";
6728
6729     case DW_AT_MIPS_fde:
6730       return "DW_AT_MIPS_fde";
6731     case DW_AT_MIPS_loop_begin:
6732       return "DW_AT_MIPS_loop_begin";
6733     case DW_AT_MIPS_tail_loop_begin:
6734       return "DW_AT_MIPS_tail_loop_begin";
6735     case DW_AT_MIPS_epilog_begin:
6736       return "DW_AT_MIPS_epilog_begin";
6737     case DW_AT_MIPS_loop_unroll_factor:
6738       return "DW_AT_MIPS_loop_unroll_factor";
6739     case DW_AT_MIPS_software_pipeline_depth:
6740       return "DW_AT_MIPS_software_pipeline_depth";
6741     case DW_AT_MIPS_linkage_name:
6742       return "DW_AT_MIPS_linkage_name";
6743     case DW_AT_MIPS_stride:
6744       return "DW_AT_MIPS_stride";
6745     case DW_AT_MIPS_abstract_name:
6746       return "DW_AT_MIPS_abstract_name";
6747     case DW_AT_MIPS_clone_origin:
6748       return "DW_AT_MIPS_clone_origin";
6749     case DW_AT_MIPS_has_inlines:
6750       return "DW_AT_MIPS_has_inlines";
6751
6752     case DW_AT_sf_names:
6753       return "DW_AT_sf_names";
6754     case DW_AT_src_info:
6755       return "DW_AT_src_info";
6756     case DW_AT_mac_info:
6757       return "DW_AT_mac_info";
6758     case DW_AT_src_coords:
6759       return "DW_AT_src_coords";
6760     case DW_AT_body_begin:
6761       return "DW_AT_body_begin";
6762     case DW_AT_body_end:
6763       return "DW_AT_body_end";
6764     case DW_AT_GNU_vector:
6765       return "DW_AT_GNU_vector";
6766     case DW_AT_GNU_guarded_by:
6767       return "DW_AT_GNU_guarded_by";
6768     case DW_AT_GNU_pt_guarded_by:
6769       return "DW_AT_GNU_pt_guarded_by";
6770     case DW_AT_GNU_guarded:
6771       return "DW_AT_GNU_guarded";
6772     case DW_AT_GNU_pt_guarded:
6773       return "DW_AT_GNU_pt_guarded";
6774     case DW_AT_GNU_locks_excluded:
6775       return "DW_AT_GNU_locks_excluded";
6776     case DW_AT_GNU_exclusive_locks_required:
6777       return "DW_AT_GNU_exclusive_locks_required";
6778     case DW_AT_GNU_shared_locks_required:
6779       return "DW_AT_GNU_shared_locks_required";
6780     case DW_AT_GNU_odr_signature:
6781       return "DW_AT_GNU_odr_signature";
6782     case DW_AT_GNU_template_name:
6783       return "DW_AT_GNU_template_name";
6784
6785     case DW_AT_VMS_rtnbeg_pd_address:
6786       return "DW_AT_VMS_rtnbeg_pd_address";
6787
6788     default:
6789       return "DW_AT_<unknown>";
6790     }
6791 }
6792
6793 /* Convert a DWARF value form code into its string name.  */
6794
6795 static const char *
6796 dwarf_form_name (unsigned int form)
6797 {
6798   switch (form)
6799     {
6800     case DW_FORM_addr:
6801       return "DW_FORM_addr";
6802     case DW_FORM_block2:
6803       return "DW_FORM_block2";
6804     case DW_FORM_block4:
6805       return "DW_FORM_block4";
6806     case DW_FORM_data2:
6807       return "DW_FORM_data2";
6808     case DW_FORM_data4:
6809       return "DW_FORM_data4";
6810     case DW_FORM_data8:
6811       return "DW_FORM_data8";
6812     case DW_FORM_string:
6813       return "DW_FORM_string";
6814     case DW_FORM_block:
6815       return "DW_FORM_block";
6816     case DW_FORM_block1:
6817       return "DW_FORM_block1";
6818     case DW_FORM_data1:
6819       return "DW_FORM_data1";
6820     case DW_FORM_flag:
6821       return "DW_FORM_flag";
6822     case DW_FORM_sdata:
6823       return "DW_FORM_sdata";
6824     case DW_FORM_strp:
6825       return "DW_FORM_strp";
6826     case DW_FORM_udata:
6827       return "DW_FORM_udata";
6828     case DW_FORM_ref_addr:
6829       return "DW_FORM_ref_addr";
6830     case DW_FORM_ref1:
6831       return "DW_FORM_ref1";
6832     case DW_FORM_ref2:
6833       return "DW_FORM_ref2";
6834     case DW_FORM_ref4:
6835       return "DW_FORM_ref4";
6836     case DW_FORM_ref8:
6837       return "DW_FORM_ref8";
6838     case DW_FORM_ref_udata:
6839       return "DW_FORM_ref_udata";
6840     case DW_FORM_indirect:
6841       return "DW_FORM_indirect";
6842     case DW_FORM_sec_offset:
6843       return "DW_FORM_sec_offset";
6844     case DW_FORM_exprloc:
6845       return "DW_FORM_exprloc";
6846     case DW_FORM_flag_present:
6847       return "DW_FORM_flag_present";
6848     case DW_FORM_ref_sig8:
6849       return "DW_FORM_ref_sig8";
6850     default:
6851       return "DW_FORM_<unknown>";
6852     }
6853 }
6854 \f
6855 /* Determine the "ultimate origin" of a decl.  The decl may be an inlined
6856    instance of an inlined instance of a decl which is local to an inline
6857    function, so we have to trace all of the way back through the origin chain
6858    to find out what sort of node actually served as the original seed for the
6859    given block.  */
6860
6861 static tree
6862 decl_ultimate_origin (const_tree decl)
6863 {
6864   if (!CODE_CONTAINS_STRUCT (TREE_CODE (decl), TS_DECL_COMMON))
6865     return NULL_TREE;
6866
6867   /* output_inline_function sets DECL_ABSTRACT_ORIGIN for all the
6868      nodes in the function to point to themselves; ignore that if
6869      we're trying to output the abstract instance of this function.  */
6870   if (DECL_ABSTRACT (decl) && DECL_ABSTRACT_ORIGIN (decl) == decl)
6871     return NULL_TREE;
6872
6873   /* Since the DECL_ABSTRACT_ORIGIN for a DECL is supposed to be the
6874      most distant ancestor, this should never happen.  */
6875   gcc_assert (!DECL_FROM_INLINE (DECL_ORIGIN (decl)));
6876
6877   return DECL_ABSTRACT_ORIGIN (decl);
6878 }
6879
6880 /* Get the class to which DECL belongs, if any.  In g++, the DECL_CONTEXT
6881    of a virtual function may refer to a base class, so we check the 'this'
6882    parameter.  */
6883
6884 static tree
6885 decl_class_context (tree decl)
6886 {
6887   tree context = NULL_TREE;
6888
6889   if (TREE_CODE (decl) != FUNCTION_DECL || ! DECL_VINDEX (decl))
6890     context = DECL_CONTEXT (decl);
6891   else
6892     context = TYPE_MAIN_VARIANT
6893       (TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (TREE_TYPE (decl)))));
6894
6895   if (context && !TYPE_P (context))
6896     context = NULL_TREE;
6897
6898   return context;
6899 }
6900 \f
6901 /* Add an attribute/value pair to a DIE.  */
6902
6903 static inline void
6904 add_dwarf_attr (dw_die_ref die, dw_attr_ref attr)
6905 {
6906   /* Maybe this should be an assert?  */
6907   if (die == NULL)
6908     return;
6909
6910   if (die->die_attr == NULL)
6911     die->die_attr = VEC_alloc (dw_attr_node, gc, 1);
6912   VEC_safe_push (dw_attr_node, gc, die->die_attr, attr);
6913 }
6914
6915 static inline enum dw_val_class
6916 AT_class (dw_attr_ref a)
6917 {
6918   return a->dw_attr_val.val_class;
6919 }
6920
6921 /* Add a flag value attribute to a DIE.  */
6922
6923 static inline void
6924 add_AT_flag (dw_die_ref die, enum dwarf_attribute attr_kind, unsigned int flag)
6925 {
6926   dw_attr_node attr;
6927
6928   attr.dw_attr = attr_kind;
6929   attr.dw_attr_val.val_class = dw_val_class_flag;
6930   attr.dw_attr_val.v.val_flag = flag;
6931   add_dwarf_attr (die, &attr);
6932 }
6933
6934 static inline unsigned
6935 AT_flag (dw_attr_ref a)
6936 {
6937   gcc_assert (a && AT_class (a) == dw_val_class_flag);
6938   return a->dw_attr_val.v.val_flag;
6939 }
6940
6941 /* Add a signed integer attribute value to a DIE.  */
6942
6943 static inline void
6944 add_AT_int (dw_die_ref die, enum dwarf_attribute attr_kind, HOST_WIDE_INT int_val)
6945 {
6946   dw_attr_node attr;
6947
6948   attr.dw_attr = attr_kind;
6949   attr.dw_attr_val.val_class = dw_val_class_const;
6950   attr.dw_attr_val.v.val_int = int_val;
6951   add_dwarf_attr (die, &attr);
6952 }
6953
6954 static inline HOST_WIDE_INT
6955 AT_int (dw_attr_ref a)
6956 {
6957   gcc_assert (a && AT_class (a) == dw_val_class_const);
6958   return a->dw_attr_val.v.val_int;
6959 }
6960
6961 /* Add an unsigned integer attribute value to a DIE.  */
6962
6963 static inline void
6964 add_AT_unsigned (dw_die_ref die, enum dwarf_attribute attr_kind,
6965                  unsigned HOST_WIDE_INT unsigned_val)
6966 {
6967   dw_attr_node attr;
6968
6969   attr.dw_attr = attr_kind;
6970   attr.dw_attr_val.val_class = dw_val_class_unsigned_const;
6971   attr.dw_attr_val.v.val_unsigned = unsigned_val;
6972   add_dwarf_attr (die, &attr);
6973 }
6974
6975 static inline unsigned HOST_WIDE_INT
6976 AT_unsigned (dw_attr_ref a)
6977 {
6978   gcc_assert (a && AT_class (a) == dw_val_class_unsigned_const);
6979   return a->dw_attr_val.v.val_unsigned;
6980 }
6981
6982 /* Add an unsigned double integer attribute value to a DIE.  */
6983
6984 static inline void
6985 add_AT_double (dw_die_ref die, enum dwarf_attribute attr_kind,
6986                HOST_WIDE_INT high, unsigned HOST_WIDE_INT low)
6987 {
6988   dw_attr_node attr;
6989
6990   attr.dw_attr = attr_kind;
6991   attr.dw_attr_val.val_class = dw_val_class_const_double;
6992   attr.dw_attr_val.v.val_double.high = high;
6993   attr.dw_attr_val.v.val_double.low = low;
6994   add_dwarf_attr (die, &attr);
6995 }
6996
6997 /* Add a floating point attribute value to a DIE and return it.  */
6998
6999 static inline void
7000 add_AT_vec (dw_die_ref die, enum dwarf_attribute attr_kind,
7001             unsigned int length, unsigned int elt_size, unsigned char *array)
7002 {
7003   dw_attr_node attr;
7004
7005   attr.dw_attr = attr_kind;
7006   attr.dw_attr_val.val_class = dw_val_class_vec;
7007   attr.dw_attr_val.v.val_vec.length = length;
7008   attr.dw_attr_val.v.val_vec.elt_size = elt_size;
7009   attr.dw_attr_val.v.val_vec.array = array;
7010   add_dwarf_attr (die, &attr);
7011 }
7012
7013 /* Add an 8-byte data attribute value to a DIE.  */
7014
7015 static inline void
7016 add_AT_data8 (dw_die_ref die, enum dwarf_attribute attr_kind,
7017               unsigned char data8[8])
7018 {
7019   dw_attr_node attr;
7020
7021   attr.dw_attr = attr_kind;
7022   attr.dw_attr_val.val_class = dw_val_class_data8;
7023   memcpy (attr.dw_attr_val.v.val_data8, data8, 8);
7024   add_dwarf_attr (die, &attr);
7025 }
7026
7027 /* Hash and equality functions for debug_str_hash.  */
7028
7029 static hashval_t
7030 debug_str_do_hash (const void *x)
7031 {
7032   return htab_hash_string (((const struct indirect_string_node *)x)->str);
7033 }
7034
7035 static int
7036 debug_str_eq (const void *x1, const void *x2)
7037 {
7038   return strcmp ((((const struct indirect_string_node *)x1)->str),
7039                  (const char *)x2) == 0;
7040 }
7041
7042 /* Add STR to the indirect string hash table.  */
7043
7044 static struct indirect_string_node *
7045 find_AT_string (const char *str)
7046 {
7047   struct indirect_string_node *node;
7048   void **slot;
7049
7050   if (! debug_str_hash)
7051     debug_str_hash = htab_create_ggc (10, debug_str_do_hash,
7052                                       debug_str_eq, NULL);
7053
7054   slot = htab_find_slot_with_hash (debug_str_hash, str,
7055                                    htab_hash_string (str), INSERT);
7056   if (*slot == NULL)
7057     {
7058       node = (struct indirect_string_node *)
7059                ggc_alloc_cleared (sizeof (struct indirect_string_node));
7060       node->str = ggc_strdup (str);
7061       *slot = node;
7062     }
7063   else
7064     node = (struct indirect_string_node *) *slot;
7065
7066   node->refcount++;
7067   return node;
7068 }
7069
7070 /* Add a string attribute value to a DIE.  */
7071
7072 static inline void
7073 add_AT_string (dw_die_ref die, enum dwarf_attribute attr_kind, const char *str)
7074 {
7075   dw_attr_node attr;
7076   struct indirect_string_node *node;
7077
7078   node = find_AT_string (str);
7079
7080   attr.dw_attr = attr_kind;
7081   attr.dw_attr_val.val_class = dw_val_class_str;
7082   attr.dw_attr_val.v.val_str = node;
7083   add_dwarf_attr (die, &attr);
7084 }
7085
7086 /* Create a label for an indirect string node, ensuring it is going to
7087    be output, unless its reference count goes down to zero.  */
7088
7089 static inline void
7090 gen_label_for_indirect_string (struct indirect_string_node *node)
7091 {
7092   char label[32];
7093
7094   if (node->label)
7095     return;
7096
7097   ASM_GENERATE_INTERNAL_LABEL (label, "LASF", dw2_string_counter);
7098   ++dw2_string_counter;
7099   node->label = xstrdup (label);
7100 }
7101
7102 /* Create a SYMBOL_REF rtx whose value is the initial address of a
7103    debug string STR.  */
7104
7105 static inline rtx
7106 get_debug_string_label (const char *str)
7107 {
7108   struct indirect_string_node *node = find_AT_string (str);
7109
7110   debug_str_hash_forced = true;
7111
7112   gen_label_for_indirect_string (node);
7113
7114   return gen_rtx_SYMBOL_REF (Pmode, node->label);
7115 }
7116
7117 static inline const char *
7118 AT_string (dw_attr_ref a)
7119 {
7120   gcc_assert (a && AT_class (a) == dw_val_class_str);
7121   return a->dw_attr_val.v.val_str->str;
7122 }
7123
7124 /* Find out whether a string should be output inline in DIE
7125    or out-of-line in .debug_str section.  */
7126
7127 static enum dwarf_form
7128 AT_string_form (dw_attr_ref a)
7129 {
7130   struct indirect_string_node *node;
7131   unsigned int len;
7132
7133   gcc_assert (a && AT_class (a) == dw_val_class_str);
7134
7135   node = a->dw_attr_val.v.val_str;
7136   if (node->form)
7137     return node->form;
7138
7139   len = strlen (node->str) + 1;
7140
7141   /* If the string is shorter or equal to the size of the reference, it is
7142      always better to put it inline.  */
7143   if (len <= DWARF_OFFSET_SIZE || node->refcount == 0)
7144     return node->form = DW_FORM_string;
7145
7146   /* If we cannot expect the linker to merge strings in .debug_str
7147      section, only put it into .debug_str if it is worth even in this
7148      single module.  */
7149   if (DWARF2_INDIRECT_STRING_SUPPORT_MISSING_ON_TARGET
7150       || ((debug_str_section->common.flags & SECTION_MERGE) == 0
7151       && (len - DWARF_OFFSET_SIZE) * node->refcount <= len))
7152     return node->form = DW_FORM_string;
7153
7154   gen_label_for_indirect_string (node);
7155
7156   return node->form = DW_FORM_strp;
7157 }
7158
7159 /* Add a DIE reference attribute value to a DIE.  */
7160
7161 static inline void
7162 add_AT_die_ref (dw_die_ref die, enum dwarf_attribute attr_kind, dw_die_ref targ_die)
7163 {
7164   dw_attr_node attr;
7165
7166   attr.dw_attr = attr_kind;
7167   attr.dw_attr_val.val_class = dw_val_class_die_ref;
7168   attr.dw_attr_val.v.val_die_ref.die = targ_die;
7169   attr.dw_attr_val.v.val_die_ref.external = 0;
7170   add_dwarf_attr (die, &attr);
7171 }
7172
7173 /* Add an AT_specification attribute to a DIE, and also make the back
7174    pointer from the specification to the definition.  */
7175
7176 static inline void
7177 add_AT_specification (dw_die_ref die, dw_die_ref targ_die)
7178 {
7179   add_AT_die_ref (die, DW_AT_specification, targ_die);
7180   gcc_assert (!targ_die->die_definition);
7181   targ_die->die_definition = die;
7182 }
7183
7184 static inline dw_die_ref
7185 AT_ref (dw_attr_ref a)
7186 {
7187   gcc_assert (a && AT_class (a) == dw_val_class_die_ref);
7188   return a->dw_attr_val.v.val_die_ref.die;
7189 }
7190
7191 static inline int
7192 AT_ref_external (dw_attr_ref a)
7193 {
7194   if (a && AT_class (a) == dw_val_class_die_ref)
7195     return a->dw_attr_val.v.val_die_ref.external;
7196
7197   return 0;
7198 }
7199
7200 static inline void
7201 set_AT_ref_external (dw_attr_ref a, int i)
7202 {
7203   gcc_assert (a && AT_class (a) == dw_val_class_die_ref);
7204   a->dw_attr_val.v.val_die_ref.external = i;
7205 }
7206
7207 /* Add an FDE reference attribute value to a DIE.  */
7208
7209 static inline void
7210 add_AT_fde_ref (dw_die_ref die, enum dwarf_attribute attr_kind, unsigned int targ_fde)
7211 {
7212   dw_attr_node attr;
7213
7214   attr.dw_attr = attr_kind;
7215   attr.dw_attr_val.val_class = dw_val_class_fde_ref;
7216   attr.dw_attr_val.v.val_fde_index = targ_fde;
7217   add_dwarf_attr (die, &attr);
7218 }
7219
7220 /* Add a location description attribute value to a DIE.  */
7221
7222 static inline void
7223 add_AT_loc (dw_die_ref die, enum dwarf_attribute attr_kind, dw_loc_descr_ref loc)
7224 {
7225   dw_attr_node attr;
7226
7227   attr.dw_attr = attr_kind;
7228   attr.dw_attr_val.val_class = dw_val_class_loc;
7229   attr.dw_attr_val.v.val_loc = loc;
7230   add_dwarf_attr (die, &attr);
7231 }
7232
7233 static inline dw_loc_descr_ref
7234 AT_loc (dw_attr_ref a)
7235 {
7236   gcc_assert (a && AT_class (a) == dw_val_class_loc);
7237   return a->dw_attr_val.v.val_loc;
7238 }
7239
7240 static inline void
7241 add_AT_loc_list (dw_die_ref die, enum dwarf_attribute attr_kind, dw_loc_list_ref loc_list)
7242 {
7243   dw_attr_node attr;
7244
7245   attr.dw_attr = attr_kind;
7246   attr.dw_attr_val.val_class = dw_val_class_loc_list;
7247   attr.dw_attr_val.v.val_loc_list = loc_list;
7248   add_dwarf_attr (die, &attr);
7249   have_location_lists = true;
7250 }
7251
7252 static inline dw_loc_list_ref
7253 AT_loc_list (dw_attr_ref a)
7254 {
7255   gcc_assert (a && AT_class (a) == dw_val_class_loc_list);
7256   return a->dw_attr_val.v.val_loc_list;
7257 }
7258
7259 static inline dw_loc_list_ref *
7260 AT_loc_list_ptr (dw_attr_ref a)
7261 {
7262   gcc_assert (a && AT_class (a) == dw_val_class_loc_list);
7263   return &a->dw_attr_val.v.val_loc_list;
7264 }
7265
7266 /* Add an address constant attribute value to a DIE.  */
7267
7268 static inline void
7269 add_AT_addr (dw_die_ref die, enum dwarf_attribute attr_kind, rtx addr)
7270 {
7271   dw_attr_node attr;
7272
7273   attr.dw_attr = attr_kind;
7274   attr.dw_attr_val.val_class = dw_val_class_addr;
7275   attr.dw_attr_val.v.val_addr = addr;
7276   add_dwarf_attr (die, &attr);
7277 }
7278
7279 /* Get the RTX from to an address DIE attribute.  */
7280
7281 static inline rtx
7282 AT_addr (dw_attr_ref a)
7283 {
7284   gcc_assert (a && AT_class (a) == dw_val_class_addr);
7285   return a->dw_attr_val.v.val_addr;
7286 }
7287
7288 /* Add a file attribute value to a DIE.  */
7289
7290 static inline void
7291 add_AT_file (dw_die_ref die, enum dwarf_attribute attr_kind,
7292              struct dwarf_file_data *fd)
7293 {
7294   dw_attr_node attr;
7295
7296   attr.dw_attr = attr_kind;
7297   attr.dw_attr_val.val_class = dw_val_class_file;
7298   attr.dw_attr_val.v.val_file = fd;
7299   add_dwarf_attr (die, &attr);
7300 }
7301
7302 /* Get the dwarf_file_data from a file DIE attribute.  */
7303
7304 static inline struct dwarf_file_data *
7305 AT_file (dw_attr_ref a)
7306 {
7307   gcc_assert (a && AT_class (a) == dw_val_class_file);
7308   return a->dw_attr_val.v.val_file;
7309 }
7310
7311 /* Add a label identifier attribute value to a DIE.  */
7312
7313 static inline void
7314 add_AT_lbl_id (dw_die_ref die, enum dwarf_attribute attr_kind, const char *lbl_id)
7315 {
7316   dw_attr_node attr;
7317
7318   attr.dw_attr = attr_kind;
7319   attr.dw_attr_val.val_class = dw_val_class_lbl_id;
7320   attr.dw_attr_val.v.val_lbl_id = xstrdup (lbl_id);
7321   add_dwarf_attr (die, &attr);
7322 }
7323
7324 /* Add a section offset attribute value to a DIE, an offset into the
7325    debug_line section.  */
7326
7327 static inline void
7328 add_AT_lineptr (dw_die_ref die, enum dwarf_attribute attr_kind,
7329                 const char *label)
7330 {
7331   dw_attr_node attr;
7332
7333   attr.dw_attr = attr_kind;
7334   attr.dw_attr_val.val_class = dw_val_class_lineptr;
7335   attr.dw_attr_val.v.val_lbl_id = xstrdup (label);
7336   add_dwarf_attr (die, &attr);
7337 }
7338
7339 /* Add a section offset attribute value to a DIE, an offset into the
7340    debug_macinfo section.  */
7341
7342 static inline void
7343 add_AT_macptr (dw_die_ref die, enum dwarf_attribute attr_kind,
7344                const char *label)
7345 {
7346   dw_attr_node attr;
7347
7348   attr.dw_attr = attr_kind;
7349   attr.dw_attr_val.val_class = dw_val_class_macptr;
7350   attr.dw_attr_val.v.val_lbl_id = xstrdup (label);
7351   add_dwarf_attr (die, &attr);
7352 }
7353
7354 /* Add an offset attribute value to a DIE.  */
7355
7356 static inline void
7357 add_AT_offset (dw_die_ref die, enum dwarf_attribute attr_kind,
7358                unsigned HOST_WIDE_INT offset)
7359 {
7360   dw_attr_node attr;
7361
7362   attr.dw_attr = attr_kind;
7363   attr.dw_attr_val.val_class = dw_val_class_offset;
7364   attr.dw_attr_val.v.val_offset = offset;
7365   add_dwarf_attr (die, &attr);
7366 }
7367
7368 /* Add an range_list attribute value to a DIE.  */
7369
7370 static void
7371 add_AT_range_list (dw_die_ref die, enum dwarf_attribute attr_kind,
7372                    long unsigned int offset)
7373 {
7374   dw_attr_node attr;
7375
7376   attr.dw_attr = attr_kind;
7377   attr.dw_attr_val.val_class = dw_val_class_range_list;
7378   attr.dw_attr_val.v.val_offset = offset;
7379   add_dwarf_attr (die, &attr);
7380 }
7381
7382 static inline const char *
7383 AT_lbl (dw_attr_ref a)
7384 {
7385   gcc_assert (a && (AT_class (a) == dw_val_class_lbl_id
7386                     || AT_class (a) == dw_val_class_lineptr
7387                     || AT_class (a) == dw_val_class_macptr));
7388   return a->dw_attr_val.v.val_lbl_id;
7389 }
7390
7391 /* Get the attribute of type attr_kind.  */
7392
7393 static dw_attr_ref
7394 get_AT (dw_die_ref die, enum dwarf_attribute attr_kind)
7395 {
7396   dw_attr_ref a;
7397   unsigned ix;
7398   dw_die_ref spec = NULL;
7399
7400   if (! die)
7401     return NULL;
7402
7403   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
7404     if (a->dw_attr == attr_kind)
7405       return a;
7406     else if (a->dw_attr == DW_AT_specification
7407              || a->dw_attr == DW_AT_abstract_origin)
7408       spec = AT_ref (a);
7409
7410   if (spec)
7411     return get_AT (spec, attr_kind);
7412
7413   return NULL;
7414 }
7415
7416 /* Return the "low pc" attribute value, typically associated with a subprogram
7417    DIE.  Return null if the "low pc" attribute is either not present, or if it
7418    cannot be represented as an assembler label identifier.  */
7419
7420 static inline const char *
7421 get_AT_low_pc (dw_die_ref die)
7422 {
7423   dw_attr_ref a = get_AT (die, DW_AT_low_pc);
7424
7425   return a ? AT_lbl (a) : NULL;
7426 }
7427
7428 /* Return the "high pc" attribute value, typically associated with a subprogram
7429    DIE.  Return null if the "high pc" attribute is either not present, or if it
7430    cannot be represented as an assembler label identifier.  */
7431
7432 static inline const char *
7433 get_AT_hi_pc (dw_die_ref die)
7434 {
7435   dw_attr_ref a = get_AT (die, DW_AT_high_pc);
7436
7437   return a ? AT_lbl (a) : NULL;
7438 }
7439
7440 /* Return the value of the string attribute designated by ATTR_KIND, or
7441    NULL if it is not present.  */
7442
7443 static inline const char *
7444 get_AT_string (dw_die_ref die, enum dwarf_attribute attr_kind)
7445 {
7446   dw_attr_ref a = get_AT (die, attr_kind);
7447
7448   return a ? AT_string (a) : NULL;
7449 }
7450
7451 /* Return the value of the flag attribute designated by ATTR_KIND, or -1
7452    if it is not present.  */
7453
7454 static inline int
7455 get_AT_flag (dw_die_ref die, enum dwarf_attribute attr_kind)
7456 {
7457   dw_attr_ref a = get_AT (die, attr_kind);
7458
7459   return a ? AT_flag (a) : 0;
7460 }
7461
7462 /* Return the value of the unsigned attribute designated by ATTR_KIND, or 0
7463    if it is not present.  */
7464
7465 static inline unsigned
7466 get_AT_unsigned (dw_die_ref die, enum dwarf_attribute attr_kind)
7467 {
7468   dw_attr_ref a = get_AT (die, attr_kind);
7469
7470   return a ? AT_unsigned (a) : 0;
7471 }
7472
7473 static inline dw_die_ref
7474 get_AT_ref (dw_die_ref die, enum dwarf_attribute attr_kind)
7475 {
7476   dw_attr_ref a = get_AT (die, attr_kind);
7477
7478   return a ? AT_ref (a) : NULL;
7479 }
7480
7481 static inline struct dwarf_file_data *
7482 get_AT_file (dw_die_ref die, enum dwarf_attribute attr_kind)
7483 {
7484   dw_attr_ref a = get_AT (die, attr_kind);
7485
7486   return a ? AT_file (a) : NULL;
7487 }
7488
7489 /* Return TRUE if the language is C++.  */
7490
7491 static inline bool
7492 is_cxx (void)
7493 {
7494   unsigned int lang = get_AT_unsigned (comp_unit_die, DW_AT_language);
7495
7496   return lang == DW_LANG_C_plus_plus || lang == DW_LANG_ObjC_plus_plus;
7497 }
7498
7499 /* Return TRUE if the language is Fortran.  */
7500
7501 static inline bool
7502 is_fortran (void)
7503 {
7504   unsigned int lang = get_AT_unsigned (comp_unit_die, DW_AT_language);
7505
7506   return (lang == DW_LANG_Fortran77
7507           || lang == DW_LANG_Fortran90
7508           || lang == DW_LANG_Fortran95);
7509 }
7510
7511 /* Return TRUE if the language is Ada.  */
7512
7513 static inline bool
7514 is_ada (void)
7515 {
7516   unsigned int lang = get_AT_unsigned (comp_unit_die, DW_AT_language);
7517
7518   return lang == DW_LANG_Ada95 || lang == DW_LANG_Ada83;
7519 }
7520
7521 /* Remove the specified attribute if present.  */
7522
7523 static void
7524 remove_AT (dw_die_ref die, enum dwarf_attribute attr_kind)
7525 {
7526   dw_attr_ref a;
7527   unsigned ix;
7528
7529   if (! die)
7530     return;
7531
7532   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
7533     if (a->dw_attr == attr_kind)
7534       {
7535         if (AT_class (a) == dw_val_class_str)
7536           if (a->dw_attr_val.v.val_str->refcount)
7537             a->dw_attr_val.v.val_str->refcount--;
7538
7539         /* VEC_ordered_remove should help reduce the number of abbrevs
7540            that are needed.  */
7541         VEC_ordered_remove (dw_attr_node, die->die_attr, ix);
7542         return;
7543       }
7544 }
7545
7546 /* Remove CHILD from its parent.  PREV must have the property that
7547    PREV->DIE_SIB == CHILD.  Does not alter CHILD.  */
7548
7549 static void
7550 remove_child_with_prev (dw_die_ref child, dw_die_ref prev)
7551 {
7552   gcc_assert (child->die_parent == prev->die_parent);
7553   gcc_assert (prev->die_sib == child);
7554   if (prev == child)
7555     {
7556       gcc_assert (child->die_parent->die_child == child);
7557       prev = NULL;
7558     }
7559   else
7560     prev->die_sib = child->die_sib;
7561   if (child->die_parent->die_child == child)
7562     child->die_parent->die_child = prev;
7563 }
7564
7565 /* Replace OLD_CHILD with NEW_CHILD.  PREV must have the property that
7566    PREV->DIE_SIB == OLD_CHILD.  Does not alter OLD_CHILD.  */
7567
7568 static void
7569 replace_child (dw_die_ref old_child, dw_die_ref new_child, dw_die_ref prev)
7570 {
7571   dw_die_ref parent = old_child->die_parent;
7572
7573   gcc_assert (parent == prev->die_parent);
7574   gcc_assert (prev->die_sib == old_child);
7575
7576   new_child->die_parent = parent;
7577   if (prev == old_child)
7578     {
7579       gcc_assert (parent->die_child == old_child);
7580       new_child->die_sib = new_child;
7581     }
7582   else
7583     {
7584       prev->die_sib = new_child;
7585       new_child->die_sib = old_child->die_sib;
7586     }
7587   if (old_child->die_parent->die_child == old_child)
7588     old_child->die_parent->die_child = new_child;
7589 }
7590
7591 /* Move all children from OLD_PARENT to NEW_PARENT.  */
7592
7593 static void
7594 move_all_children (dw_die_ref old_parent, dw_die_ref new_parent)
7595 {
7596   dw_die_ref c;
7597   new_parent->die_child = old_parent->die_child;
7598   old_parent->die_child = NULL;
7599   FOR_EACH_CHILD (new_parent, c, c->die_parent = new_parent);
7600 }
7601
7602 /* Remove child DIE whose die_tag is TAG.  Do nothing if no child
7603    matches TAG.  */
7604
7605 static void
7606 remove_child_TAG (dw_die_ref die, enum dwarf_tag tag)
7607 {
7608   dw_die_ref c;
7609
7610   c = die->die_child;
7611   if (c) do {
7612     dw_die_ref prev = c;
7613     c = c->die_sib;
7614     while (c->die_tag == tag)
7615       {
7616         remove_child_with_prev (c, prev);
7617         /* Might have removed every child.  */
7618         if (c == c->die_sib)
7619           return;
7620         c = c->die_sib;
7621       }
7622   } while (c != die->die_child);
7623 }
7624
7625 /* Add a CHILD_DIE as the last child of DIE.  */
7626
7627 static void
7628 add_child_die (dw_die_ref die, dw_die_ref child_die)
7629 {
7630   /* FIXME this should probably be an assert.  */
7631   if (! die || ! child_die)
7632     return;
7633   gcc_assert (die != child_die);
7634
7635   child_die->die_parent = die;
7636   if (die->die_child)
7637     {
7638       child_die->die_sib = die->die_child->die_sib;
7639       die->die_child->die_sib = child_die;
7640     }
7641   else
7642     child_die->die_sib = child_die;
7643   die->die_child = child_die;
7644 }
7645
7646 /* Move CHILD, which must be a child of PARENT or the DIE for which PARENT
7647    is the specification, to the end of PARENT's list of children.
7648    This is done by removing and re-adding it.  */
7649
7650 static void
7651 splice_child_die (dw_die_ref parent, dw_die_ref child)
7652 {
7653   dw_die_ref p;
7654
7655   /* We want the declaration DIE from inside the class, not the
7656      specification DIE at toplevel.  */
7657   if (child->die_parent != parent)
7658     {
7659       dw_die_ref tmp = get_AT_ref (child, DW_AT_specification);
7660
7661       if (tmp)
7662         child = tmp;
7663     }
7664
7665   gcc_assert (child->die_parent == parent
7666               || (child->die_parent
7667                   == get_AT_ref (parent, DW_AT_specification)));
7668
7669   for (p = child->die_parent->die_child; ; p = p->die_sib)
7670     if (p->die_sib == child)
7671       {
7672         remove_child_with_prev (child, p);
7673         break;
7674       }
7675
7676   add_child_die (parent, child);
7677 }
7678
7679 /* Return a pointer to a newly created DIE node.  */
7680
7681 static inline dw_die_ref
7682 new_die (enum dwarf_tag tag_value, dw_die_ref parent_die, tree t)
7683 {
7684   dw_die_ref die = GGC_CNEW (die_node);
7685
7686   die->die_tag = tag_value;
7687
7688   if (parent_die != NULL)
7689     add_child_die (parent_die, die);
7690   else
7691     {
7692       limbo_die_node *limbo_node;
7693
7694       limbo_node = GGC_CNEW (limbo_die_node);
7695       limbo_node->die = die;
7696       limbo_node->created_for = t;
7697       limbo_node->next = limbo_die_list;
7698       limbo_die_list = limbo_node;
7699     }
7700
7701   return die;
7702 }
7703
7704 /* Return the DIE associated with the given type specifier.  */
7705
7706 static inline dw_die_ref
7707 lookup_type_die (tree type)
7708 {
7709   return TYPE_SYMTAB_DIE (type);
7710 }
7711
7712 /* Equate a DIE to a given type specifier.  */
7713
7714 static inline void
7715 equate_type_number_to_die (tree type, dw_die_ref type_die)
7716 {
7717   TYPE_SYMTAB_DIE (type) = type_die;
7718 }
7719
7720 /* Returns a hash value for X (which really is a die_struct).  */
7721
7722 static hashval_t
7723 decl_die_table_hash (const void *x)
7724 {
7725   return (hashval_t) ((const_dw_die_ref) x)->decl_id;
7726 }
7727
7728 /* Return nonzero if decl_id of die_struct X is the same as UID of decl *Y.  */
7729
7730 static int
7731 decl_die_table_eq (const void *x, const void *y)
7732 {
7733   return (((const_dw_die_ref) x)->decl_id == DECL_UID ((const_tree) y));
7734 }
7735
7736 /* Return the DIE associated with a given declaration.  */
7737
7738 static inline dw_die_ref
7739 lookup_decl_die (tree decl)
7740 {
7741   return (dw_die_ref) htab_find_with_hash (decl_die_table, decl, DECL_UID (decl));
7742 }
7743
7744 /* Returns a hash value for X (which really is a var_loc_list).  */
7745
7746 static hashval_t
7747 decl_loc_table_hash (const void *x)
7748 {
7749   return (hashval_t) ((const var_loc_list *) x)->decl_id;
7750 }
7751
7752 /* Return nonzero if decl_id of var_loc_list X is the same as
7753    UID of decl *Y.  */
7754
7755 static int
7756 decl_loc_table_eq (const void *x, const void *y)
7757 {
7758   return (((const var_loc_list *) x)->decl_id == DECL_UID ((const_tree) y));
7759 }
7760
7761 /* Return the var_loc list associated with a given declaration.  */
7762
7763 static inline var_loc_list *
7764 lookup_decl_loc (const_tree decl)
7765 {
7766   if (!decl_loc_table)
7767     return NULL;
7768   return (var_loc_list *)
7769     htab_find_with_hash (decl_loc_table, decl, DECL_UID (decl));
7770 }
7771
7772 /* Equate a DIE to a particular declaration.  */
7773
7774 static void
7775 equate_decl_number_to_die (tree decl, dw_die_ref decl_die)
7776 {
7777   unsigned int decl_id = DECL_UID (decl);
7778   void **slot;
7779
7780   slot = htab_find_slot_with_hash (decl_die_table, decl, decl_id, INSERT);
7781   *slot = decl_die;
7782   decl_die->decl_id = decl_id;
7783 }
7784
7785 /* Return how many bits covers PIECE EXPR_LIST.  */
7786
7787 static int
7788 decl_piece_bitsize (rtx piece)
7789 {
7790   int ret = (int) GET_MODE (piece);
7791   if (ret)
7792     return ret;
7793   gcc_assert (GET_CODE (XEXP (piece, 0)) == CONCAT
7794               && CONST_INT_P (XEXP (XEXP (piece, 0), 0)));
7795   return INTVAL (XEXP (XEXP (piece, 0), 0));
7796 }
7797
7798 /* Return pointer to the location of location note in PIECE EXPR_LIST.  */
7799
7800 static rtx *
7801 decl_piece_varloc_ptr (rtx piece)
7802 {
7803   if ((int) GET_MODE (piece))
7804     return &XEXP (piece, 0);
7805   else
7806     return &XEXP (XEXP (piece, 0), 1);
7807 }
7808
7809 /* Create an EXPR_LIST for location note LOC_NOTE covering BITSIZE bits.
7810    Next is the chain of following piece nodes.  */
7811
7812 static rtx
7813 decl_piece_node (rtx loc_note, HOST_WIDE_INT bitsize, rtx next)
7814 {
7815   if (bitsize <= (int) MAX_MACHINE_MODE)
7816     return alloc_EXPR_LIST (bitsize, loc_note, next);
7817   else
7818     return alloc_EXPR_LIST (0, gen_rtx_CONCAT (VOIDmode,
7819                                                GEN_INT (bitsize),
7820                                                loc_note), next);
7821 }
7822
7823 /* Return rtx that should be stored into loc field for
7824    LOC_NOTE and BITPOS/BITSIZE.  */
7825
7826 static rtx
7827 construct_piece_list (rtx loc_note, HOST_WIDE_INT bitpos,
7828                       HOST_WIDE_INT bitsize)
7829 {
7830   if (bitsize != -1)
7831     {
7832       loc_note = decl_piece_node (loc_note, bitsize, NULL_RTX);
7833       if (bitpos != 0)
7834         loc_note = decl_piece_node (NULL_RTX, bitpos, loc_note);
7835     }
7836   return loc_note;
7837 }
7838
7839 /* This function either modifies location piece list *DEST in
7840    place (if SRC and INNER is NULL), or copies location piece list
7841    *SRC to *DEST while modifying it.  Location BITPOS is modified
7842    to contain LOC_NOTE, any pieces overlapping it are removed resp.
7843    not copied and if needed some padding around it is added.
7844    When modifying in place, DEST should point to EXPR_LIST where
7845    earlier pieces cover PIECE_BITPOS bits, when copying SRC points
7846    to the start of the whole list and INNER points to the EXPR_LIST
7847    where earlier pieces cover PIECE_BITPOS bits.  */
7848
7849 static void
7850 adjust_piece_list (rtx *dest, rtx *src, rtx *inner,
7851                    HOST_WIDE_INT bitpos, HOST_WIDE_INT piece_bitpos,
7852                    HOST_WIDE_INT bitsize, rtx loc_note)
7853 {
7854   int diff;
7855   bool copy = inner != NULL;
7856
7857   if (copy)
7858     {
7859       /* First copy all nodes preceeding the current bitpos.  */
7860       while (src != inner)
7861         {
7862           *dest = decl_piece_node (*decl_piece_varloc_ptr (*src),
7863                                    decl_piece_bitsize (*src), NULL_RTX);
7864           dest = &XEXP (*dest, 1);
7865           src = &XEXP (*src, 1);
7866         }
7867     }
7868   /* Add padding if needed.  */
7869   if (bitpos != piece_bitpos)
7870     {
7871       *dest = decl_piece_node (NULL_RTX, bitpos - piece_bitpos,
7872                                copy ? NULL_RTX : *dest);
7873       dest = &XEXP (*dest, 1);
7874     }
7875   else if (*dest && decl_piece_bitsize (*dest) == bitsize)
7876     {
7877       gcc_assert (!copy);
7878       /* A piece with correct bitpos and bitsize already exist,
7879          just update the location for it and return.  */
7880       *decl_piece_varloc_ptr (*dest) = loc_note;
7881       return;
7882     }
7883   /* Add the piece that changed.  */
7884   *dest = decl_piece_node (loc_note, bitsize, copy ? NULL_RTX : *dest);
7885   dest = &XEXP (*dest, 1);
7886   /* Skip over pieces that overlap it.  */
7887   diff = bitpos - piece_bitpos + bitsize;
7888   if (!copy)
7889     src = dest;
7890   while (diff > 0 && *src)
7891     {
7892       rtx piece = *src;
7893       diff -= decl_piece_bitsize (piece);
7894       if (copy)
7895         src = &XEXP (piece, 1);
7896       else
7897         {
7898           *src = XEXP (piece, 1);
7899           free_EXPR_LIST_node (piece);
7900         }
7901     }
7902   /* Add padding if needed.  */
7903   if (diff < 0 && *src)
7904     {
7905       if (!copy)
7906         dest = src;
7907       *dest = decl_piece_node (NULL_RTX, -diff, copy ? NULL_RTX : *dest);
7908       dest = &XEXP (*dest, 1);
7909     }
7910   if (!copy)
7911     return;
7912   /* Finally copy all nodes following it.  */
7913   while (*src)
7914     {
7915       *dest = decl_piece_node (*decl_piece_varloc_ptr (*src),
7916                                decl_piece_bitsize (*src), NULL_RTX);
7917       dest = &XEXP (*dest, 1);
7918       src = &XEXP (*src, 1);
7919     }
7920 }
7921
7922 /* Add a variable location node to the linked list for DECL.  */
7923
7924 static struct var_loc_node *
7925 add_var_loc_to_decl (tree decl, rtx loc_note, const char *label)
7926 {
7927   unsigned int decl_id;
7928   var_loc_list *temp;
7929   void **slot;
7930   struct var_loc_node *loc = NULL;
7931   HOST_WIDE_INT bitsize = -1, bitpos = -1;
7932
7933   if (DECL_DEBUG_EXPR_IS_FROM (decl))
7934     {
7935       tree realdecl = DECL_DEBUG_EXPR (decl);
7936       if (realdecl && handled_component_p (realdecl))
7937         {
7938           HOST_WIDE_INT maxsize;
7939           tree innerdecl;
7940           innerdecl
7941             = get_ref_base_and_extent (realdecl, &bitpos, &bitsize, &maxsize);
7942           if (!DECL_P (innerdecl)
7943               || DECL_IGNORED_P (innerdecl)
7944               || TREE_STATIC (innerdecl)
7945               || bitsize <= 0
7946               || bitpos + bitsize > 256
7947               || bitsize != maxsize)
7948             return NULL;
7949           decl = innerdecl;
7950         }
7951     }
7952
7953   decl_id = DECL_UID (decl);
7954   slot = htab_find_slot_with_hash (decl_loc_table, decl, decl_id, INSERT);
7955   if (*slot == NULL)
7956     {
7957       temp = GGC_CNEW (var_loc_list);
7958       temp->decl_id = decl_id;
7959       *slot = temp;
7960     }
7961   else
7962     temp = (var_loc_list *) *slot;
7963
7964   if (temp->last)
7965     {
7966       struct var_loc_node *last = temp->last, *unused = NULL;
7967       rtx *piece_loc = NULL, last_loc_note;
7968       int piece_bitpos = 0;
7969       if (last->next)
7970         {
7971           last = last->next;
7972           gcc_assert (last->next == NULL);
7973         }
7974       if (bitsize != -1 && GET_CODE (last->loc) == EXPR_LIST)
7975         {
7976           piece_loc = &last->loc;
7977           do
7978             {
7979               int cur_bitsize = decl_piece_bitsize (*piece_loc);
7980               if (piece_bitpos + cur_bitsize > bitpos)
7981                 break;
7982               piece_bitpos += cur_bitsize;
7983               piece_loc = &XEXP (*piece_loc, 1);
7984             }
7985           while (*piece_loc);
7986         }
7987       /* TEMP->LAST here is either pointer to the last but one or
7988          last element in the chained list, LAST is pointer to the
7989          last element.  */
7990       if (label && strcmp (last->label, label) == 0)
7991         {
7992           /* For SRA optimized variables if there weren't any real
7993              insns since last note, just modify the last node.  */
7994           if (piece_loc != NULL)
7995             {
7996               adjust_piece_list (piece_loc, NULL, NULL,
7997                                  bitpos, piece_bitpos, bitsize, loc_note);
7998               return NULL;
7999             }
8000           /* If the last note doesn't cover any instructions, remove it.  */
8001           if (temp->last != last)
8002             {
8003               temp->last->next = NULL;
8004               unused = last;
8005               last = temp->last;
8006               gcc_assert (strcmp (last->label, label) != 0);
8007             }
8008           else
8009             {
8010               gcc_assert (temp->first == temp->last);
8011               memset (temp->last, '\0', sizeof (*temp->last));
8012               temp->last->loc = construct_piece_list (loc_note, bitpos, bitsize);
8013               return temp->last;
8014             }
8015         }
8016       if (bitsize == -1 && NOTE_P (last->loc))
8017         last_loc_note = last->loc;
8018       else if (piece_loc != NULL
8019                && *piece_loc != NULL_RTX
8020                && piece_bitpos == bitpos
8021                && decl_piece_bitsize (*piece_loc) == bitsize)
8022         last_loc_note = *decl_piece_varloc_ptr (*piece_loc);
8023       else
8024         last_loc_note = NULL_RTX;
8025       /* If the current location is the same as the end of the list,
8026          and either both or neither of the locations is uninitialized,
8027          we have nothing to do.  */
8028       if (last_loc_note == NULL_RTX
8029           || (!rtx_equal_p (NOTE_VAR_LOCATION_LOC (last_loc_note),
8030                             NOTE_VAR_LOCATION_LOC (loc_note)))
8031           || ((NOTE_VAR_LOCATION_STATUS (last_loc_note)
8032                != NOTE_VAR_LOCATION_STATUS (loc_note))
8033               && ((NOTE_VAR_LOCATION_STATUS (last_loc_note)
8034                    == VAR_INIT_STATUS_UNINITIALIZED)
8035                   || (NOTE_VAR_LOCATION_STATUS (loc_note)
8036                       == VAR_INIT_STATUS_UNINITIALIZED))))
8037         {
8038           /* Add LOC to the end of list and update LAST.  If the last
8039              element of the list has been removed above, reuse its
8040              memory for the new node, otherwise allocate a new one.  */
8041           if (unused)
8042             {
8043               loc = unused;
8044               memset (loc, '\0', sizeof (*loc));
8045             }
8046           else
8047             loc = GGC_CNEW (struct var_loc_node);
8048           if (bitsize == -1 || piece_loc == NULL)
8049             loc->loc = construct_piece_list (loc_note, bitpos, bitsize);
8050           else
8051             adjust_piece_list (&loc->loc, &last->loc, piece_loc,
8052                                bitpos, piece_bitpos, bitsize, loc_note);
8053           last->next = loc;
8054           /* Ensure TEMP->LAST will point either to the new last but one
8055              element of the chain, or to the last element in it.  */
8056           if (last != temp->last)
8057             temp->last = last;
8058         }
8059       else if (unused)
8060         ggc_free (unused);
8061     }
8062   else
8063     {
8064       loc = GGC_CNEW (struct var_loc_node);
8065       temp->first = loc;
8066       temp->last = loc;
8067       loc->loc = construct_piece_list (loc_note, bitpos, bitsize);
8068     }
8069   return loc;
8070 }
8071 \f
8072 /* Keep track of the number of spaces used to indent the
8073    output of the debugging routines that print the structure of
8074    the DIE internal representation.  */
8075 static int print_indent;
8076
8077 /* Indent the line the number of spaces given by print_indent.  */
8078
8079 static inline void
8080 print_spaces (FILE *outfile)
8081 {
8082   fprintf (outfile, "%*s", print_indent, "");
8083 }
8084
8085 /* Print a type signature in hex.  */
8086
8087 static inline void
8088 print_signature (FILE *outfile, char *sig)
8089 {
8090   int i;
8091
8092   for (i = 0; i < DWARF_TYPE_SIGNATURE_SIZE; i++)
8093     fprintf (outfile, "%02x", sig[i] & 0xff);
8094 }
8095
8096 /* Print the information associated with a given DIE, and its children.
8097    This routine is a debugging aid only.  */
8098
8099 static void
8100 print_die (dw_die_ref die, FILE *outfile)
8101 {
8102   dw_attr_ref a;
8103   dw_die_ref c;
8104   unsigned ix;
8105
8106   print_spaces (outfile);
8107   fprintf (outfile, "DIE %4ld: %s\n",
8108            die->die_offset, dwarf_tag_name (die->die_tag));
8109   print_spaces (outfile);
8110   fprintf (outfile, "  abbrev id: %lu", die->die_abbrev);
8111   fprintf (outfile, " offset: %ld\n", die->die_offset);
8112   if (dwarf_version >= 4 && die->die_id.die_type_node)
8113     {
8114       print_spaces (outfile);
8115       fprintf (outfile, "  signature: ");
8116       print_signature (outfile, die->die_id.die_type_node->signature);
8117       fprintf (outfile, "\n");
8118     }
8119
8120   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
8121     {
8122       print_spaces (outfile);
8123       fprintf (outfile, "  %s: ", dwarf_attr_name (a->dw_attr));
8124
8125       switch (AT_class (a))
8126         {
8127         case dw_val_class_addr:
8128           fprintf (outfile, "address");
8129           break;
8130         case dw_val_class_offset:
8131           fprintf (outfile, "offset");
8132           break;
8133         case dw_val_class_loc:
8134           fprintf (outfile, "location descriptor");
8135           break;
8136         case dw_val_class_loc_list:
8137           fprintf (outfile, "location list -> label:%s",
8138                    AT_loc_list (a)->ll_symbol);
8139           break;
8140         case dw_val_class_range_list:
8141           fprintf (outfile, "range list");
8142           break;
8143         case dw_val_class_const:
8144           fprintf (outfile, HOST_WIDE_INT_PRINT_DEC, AT_int (a));
8145           break;
8146         case dw_val_class_unsigned_const:
8147           fprintf (outfile, HOST_WIDE_INT_PRINT_UNSIGNED, AT_unsigned (a));
8148           break;
8149         case dw_val_class_const_double:
8150           fprintf (outfile, "constant ("HOST_WIDE_INT_PRINT_DEC","\
8151                             HOST_WIDE_INT_PRINT_UNSIGNED")",
8152                    a->dw_attr_val.v.val_double.high,
8153                    a->dw_attr_val.v.val_double.low);
8154           break;
8155         case dw_val_class_vec:
8156           fprintf (outfile, "floating-point or vector constant");
8157           break;
8158         case dw_val_class_flag:
8159           fprintf (outfile, "%u", AT_flag (a));
8160           break;
8161         case dw_val_class_die_ref:
8162           if (AT_ref (a) != NULL)
8163             {
8164               if (dwarf_version >= 4 && AT_ref (a)->die_id.die_type_node)
8165                 {
8166                   fprintf (outfile, "die -> signature: ");
8167                   print_signature (outfile,
8168                                    AT_ref (a)->die_id.die_type_node->signature);
8169                 }
8170               else if (dwarf_version < 4 && AT_ref (a)->die_id.die_symbol)
8171                 fprintf (outfile, "die -> label: %s",
8172                          AT_ref (a)->die_id.die_symbol);
8173               else
8174                 fprintf (outfile, "die -> %ld", AT_ref (a)->die_offset);
8175             }
8176           else
8177             fprintf (outfile, "die -> <null>");
8178           break;
8179         case dw_val_class_lbl_id:
8180         case dw_val_class_lineptr:
8181         case dw_val_class_macptr:
8182           fprintf (outfile, "label: %s", AT_lbl (a));
8183           break;
8184         case dw_val_class_str:
8185           if (AT_string (a) != NULL)
8186             fprintf (outfile, "\"%s\"", AT_string (a));
8187           else
8188             fprintf (outfile, "<null>");
8189           break;
8190         case dw_val_class_file:
8191           fprintf (outfile, "\"%s\" (%d)", AT_file (a)->filename,
8192                    AT_file (a)->emitted_number);
8193           break;
8194         case dw_val_class_data8:
8195           {
8196             int i;
8197
8198             for (i = 0; i < 8; i++)
8199               fprintf (outfile, "%02x", a->dw_attr_val.v.val_data8[i]);
8200             break;
8201           }
8202         default:
8203           break;
8204         }
8205
8206       fprintf (outfile, "\n");
8207     }
8208
8209   if (die->die_child != NULL)
8210     {
8211       print_indent += 4;
8212       FOR_EACH_CHILD (die, c, print_die (c, outfile));
8213       print_indent -= 4;
8214     }
8215   if (print_indent == 0)
8216     fprintf (outfile, "\n");
8217 }
8218
8219 /* Print the contents of the source code line number correspondence table.
8220    This routine is a debugging aid only.  */
8221
8222 static void
8223 print_dwarf_line_table (FILE *outfile)
8224 {
8225   unsigned i;
8226   dw_line_info_ref line_info;
8227
8228   fprintf (outfile, "\n\nDWARF source line information\n");
8229   for (i = 1; i < line_info_table_in_use; i++)
8230     {
8231       line_info = &line_info_table[i];
8232       fprintf (outfile, "%5d: %4ld %6ld\n", i,
8233                line_info->dw_file_num,
8234                line_info->dw_line_num);
8235     }
8236
8237   fprintf (outfile, "\n\n");
8238 }
8239
8240 /* Print the information collected for a given DIE.  */
8241
8242 void
8243 debug_dwarf_die (dw_die_ref die)
8244 {
8245   print_die (die, stderr);
8246 }
8247
8248 /* Print all DWARF information collected for the compilation unit.
8249    This routine is a debugging aid only.  */
8250
8251 void
8252 debug_dwarf (void)
8253 {
8254   print_indent = 0;
8255   print_die (comp_unit_die, stderr);
8256   if (! DWARF2_ASM_LINE_DEBUG_INFO)
8257     print_dwarf_line_table (stderr);
8258 }
8259 \f
8260 /* Start a new compilation unit DIE for an include file.  OLD_UNIT is the CU
8261    for the enclosing include file, if any.  BINCL_DIE is the DW_TAG_GNU_BINCL
8262    DIE that marks the start of the DIEs for this include file.  */
8263
8264 static dw_die_ref
8265 push_new_compile_unit (dw_die_ref old_unit, dw_die_ref bincl_die)
8266 {
8267   const char *filename = get_AT_string (bincl_die, DW_AT_name);
8268   dw_die_ref new_unit = gen_compile_unit_die (filename);
8269
8270   new_unit->die_sib = old_unit;
8271   return new_unit;
8272 }
8273
8274 /* Close an include-file CU and reopen the enclosing one.  */
8275
8276 static dw_die_ref
8277 pop_compile_unit (dw_die_ref old_unit)
8278 {
8279   dw_die_ref new_unit = old_unit->die_sib;
8280
8281   old_unit->die_sib = NULL;
8282   return new_unit;
8283 }
8284
8285 #define CHECKSUM(FOO) md5_process_bytes (&(FOO), sizeof (FOO), ctx)
8286 #define CHECKSUM_STRING(FOO) md5_process_bytes ((FOO), strlen (FOO), ctx)
8287
8288 /* Calculate the checksum of a location expression.  */
8289
8290 static inline void
8291 loc_checksum (dw_loc_descr_ref loc, struct md5_ctx *ctx)
8292 {
8293   int tem;
8294
8295   tem = (loc->dtprel << 8) | ((unsigned int) loc->dw_loc_opc);
8296   CHECKSUM (tem);
8297   CHECKSUM (loc->dw_loc_oprnd1);
8298   CHECKSUM (loc->dw_loc_oprnd2);
8299 }
8300
8301 /* Calculate the checksum of an attribute.  */
8302
8303 static void
8304 attr_checksum (dw_attr_ref at, struct md5_ctx *ctx, int *mark)
8305 {
8306   dw_loc_descr_ref loc;
8307   rtx r;
8308
8309   CHECKSUM (at->dw_attr);
8310
8311   /* We don't care that this was compiled with a different compiler
8312      snapshot; if the output is the same, that's what matters.  */
8313   if (at->dw_attr == DW_AT_producer)
8314     return;
8315
8316   switch (AT_class (at))
8317     {
8318     case dw_val_class_const:
8319       CHECKSUM (at->dw_attr_val.v.val_int);
8320       break;
8321     case dw_val_class_unsigned_const:
8322       CHECKSUM (at->dw_attr_val.v.val_unsigned);
8323       break;
8324     case dw_val_class_const_double:
8325       CHECKSUM (at->dw_attr_val.v.val_double);
8326       break;
8327     case dw_val_class_vec:
8328       CHECKSUM (at->dw_attr_val.v.val_vec);
8329       break;
8330     case dw_val_class_flag:
8331       CHECKSUM (at->dw_attr_val.v.val_flag);
8332       break;
8333     case dw_val_class_str:
8334       CHECKSUM_STRING (AT_string (at));
8335       break;
8336
8337     case dw_val_class_addr:
8338       r = AT_addr (at);
8339       gcc_assert (GET_CODE (r) == SYMBOL_REF);
8340       CHECKSUM_STRING (XSTR (r, 0));
8341       break;
8342
8343     case dw_val_class_offset:
8344       CHECKSUM (at->dw_attr_val.v.val_offset);
8345       break;
8346
8347     case dw_val_class_loc:
8348       for (loc = AT_loc (at); loc; loc = loc->dw_loc_next)
8349         loc_checksum (loc, ctx);
8350       break;
8351
8352     case dw_val_class_die_ref:
8353       die_checksum (AT_ref (at), ctx, mark);
8354       break;
8355
8356     case dw_val_class_fde_ref:
8357     case dw_val_class_lbl_id:
8358     case dw_val_class_lineptr:
8359     case dw_val_class_macptr:
8360       break;
8361
8362     case dw_val_class_file:
8363       CHECKSUM_STRING (AT_file (at)->filename);
8364       break;
8365
8366     case dw_val_class_data8:
8367       CHECKSUM (at->dw_attr_val.v.val_data8);
8368       break;
8369
8370     default:
8371       break;
8372     }
8373 }
8374
8375 /* Calculate the checksum of a DIE.  */
8376
8377 static void
8378 die_checksum (dw_die_ref die, struct md5_ctx *ctx, int *mark)
8379 {
8380   dw_die_ref c;
8381   dw_attr_ref a;
8382   unsigned ix;
8383
8384   /* To avoid infinite recursion.  */
8385   if (die->die_mark)
8386     {
8387       CHECKSUM (die->die_mark);
8388       return;
8389     }
8390   die->die_mark = ++(*mark);
8391
8392   CHECKSUM (die->die_tag);
8393
8394   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
8395     attr_checksum (a, ctx, mark);
8396
8397   FOR_EACH_CHILD (die, c, die_checksum (c, ctx, mark));
8398 }
8399
8400 #undef CHECKSUM
8401 #undef CHECKSUM_STRING
8402
8403 /* For DWARF-4 types, include the trailing NULL when checksumming strings.  */
8404 #define CHECKSUM(FOO) md5_process_bytes (&(FOO), sizeof (FOO), ctx)
8405 #define CHECKSUM_STRING(FOO) md5_process_bytes ((FOO), strlen (FOO) + 1, ctx)
8406 #define CHECKSUM_SLEB128(FOO) checksum_sleb128 ((FOO), ctx)
8407 #define CHECKSUM_ULEB128(FOO) checksum_uleb128 ((FOO), ctx)
8408 #define CHECKSUM_ATTR(FOO) \
8409   if (FOO) attr_checksum_ordered (die->die_tag, (FOO), ctx, mark)
8410
8411 /* Calculate the checksum of a number in signed LEB128 format.  */
8412
8413 static void
8414 checksum_sleb128 (HOST_WIDE_INT value, struct md5_ctx *ctx)
8415 {
8416   unsigned char byte;
8417   bool more;
8418
8419   while (1)
8420     {
8421       byte = (value & 0x7f);
8422       value >>= 7;
8423       more = !((value == 0 && (byte & 0x40) == 0)
8424                 || (value == -1 && (byte & 0x40) != 0));
8425       if (more)
8426         byte |= 0x80;
8427       CHECKSUM (byte);
8428       if (!more)
8429         break;
8430     }
8431 }
8432
8433 /* Calculate the checksum of a number in unsigned LEB128 format.  */
8434
8435 static void
8436 checksum_uleb128 (unsigned HOST_WIDE_INT value, struct md5_ctx *ctx)
8437 {
8438   while (1)
8439     {
8440       unsigned char byte = (value & 0x7f);
8441       value >>= 7;
8442       if (value != 0)
8443         /* More bytes to follow.  */
8444         byte |= 0x80;
8445       CHECKSUM (byte);
8446       if (value == 0)
8447         break;
8448     }
8449 }
8450
8451 /* Checksum the context of the DIE.  This adds the names of any
8452    surrounding namespaces or structures to the checksum.  */
8453
8454 static void
8455 checksum_die_context (dw_die_ref die, struct md5_ctx *ctx)
8456 {
8457   const char *name;
8458   dw_die_ref spec;
8459   int tag = die->die_tag;
8460
8461   if (tag != DW_TAG_namespace
8462       && tag != DW_TAG_structure_type
8463       && tag != DW_TAG_class_type)
8464     return;
8465
8466   name = get_AT_string (die, DW_AT_name);
8467
8468   spec = get_AT_ref (die, DW_AT_specification);
8469   if (spec != NULL)
8470     die = spec;
8471
8472   if (die->die_parent != NULL)
8473     checksum_die_context (die->die_parent, ctx);
8474
8475   CHECKSUM_ULEB128 ('C');
8476   CHECKSUM_ULEB128 (tag);
8477   if (name != NULL)
8478     CHECKSUM_STRING (name);
8479 }
8480
8481 /* Calculate the checksum of a location expression.  */
8482
8483 static inline void
8484 loc_checksum_ordered (dw_loc_descr_ref loc, struct md5_ctx *ctx)
8485 {
8486   /* Special case for lone DW_OP_plus_uconst: checksum as if the location
8487      were emitted as a DW_FORM_sdata instead of a location expression.  */
8488   if (loc->dw_loc_opc == DW_OP_plus_uconst && loc->dw_loc_next == NULL)
8489     {
8490       CHECKSUM_ULEB128 (DW_FORM_sdata);
8491       CHECKSUM_SLEB128 ((HOST_WIDE_INT) loc->dw_loc_oprnd1.v.val_unsigned);
8492       return;
8493     }
8494
8495   /* Otherwise, just checksum the raw location expression.  */
8496   while (loc != NULL)
8497     {
8498       CHECKSUM_ULEB128 (loc->dw_loc_opc);
8499       CHECKSUM (loc->dw_loc_oprnd1);
8500       CHECKSUM (loc->dw_loc_oprnd2);
8501       loc = loc->dw_loc_next;
8502     }
8503 }
8504
8505 /* Calculate the checksum of an attribute.  */
8506
8507 static void
8508 attr_checksum_ordered (enum dwarf_tag tag, dw_attr_ref at,
8509                        struct md5_ctx *ctx, int *mark)
8510 {
8511   dw_loc_descr_ref loc;
8512   rtx r;
8513
8514   if (AT_class (at) == dw_val_class_die_ref)
8515     {
8516       dw_die_ref target_die = AT_ref (at);
8517
8518       /* For pointer and reference types, we checksum only the (qualified)
8519          name of the target type (if there is a name).  For friend entries,
8520          we checksum only the (qualified) name of the target type or function.
8521          This allows the checksum to remain the same whether the target type
8522          is complete or not.  */
8523       if ((at->dw_attr == DW_AT_type
8524            && (tag == DW_TAG_pointer_type
8525                || tag == DW_TAG_reference_type
8526                || tag == DW_TAG_rvalue_reference_type
8527                || tag == DW_TAG_ptr_to_member_type))
8528           || (at->dw_attr == DW_AT_friend
8529               && tag == DW_TAG_friend))
8530         {
8531           dw_attr_ref name_attr = get_AT (target_die, DW_AT_name);
8532
8533           if (name_attr != NULL)
8534             {
8535               dw_die_ref decl = get_AT_ref (target_die, DW_AT_specification);
8536
8537               if (decl == NULL)
8538                 decl = target_die;
8539               CHECKSUM_ULEB128 ('N');
8540               CHECKSUM_ULEB128 (at->dw_attr);
8541               if (decl->die_parent != NULL)
8542                 checksum_die_context (decl->die_parent, ctx);
8543               CHECKSUM_ULEB128 ('E');
8544               CHECKSUM_STRING (AT_string (name_attr));
8545               return;
8546             }
8547         }
8548
8549       /* For all other references to another DIE, we check to see if the
8550          target DIE has already been visited.  If it has, we emit a
8551          backward reference; if not, we descend recursively.  */
8552       if (target_die->die_mark > 0)
8553         {
8554           CHECKSUM_ULEB128 ('R');
8555           CHECKSUM_ULEB128 (at->dw_attr);
8556           CHECKSUM_ULEB128 (target_die->die_mark);
8557         }
8558       else
8559         {
8560           dw_die_ref decl = get_AT_ref (target_die, DW_AT_specification);
8561
8562           if (decl == NULL)
8563             decl = target_die;
8564           target_die->die_mark = ++(*mark);
8565           CHECKSUM_ULEB128 ('T');
8566           CHECKSUM_ULEB128 (at->dw_attr);
8567           if (decl->die_parent != NULL)
8568             checksum_die_context (decl->die_parent, ctx);
8569           die_checksum_ordered (target_die, ctx, mark);
8570         }
8571       return;
8572     }
8573
8574   CHECKSUM_ULEB128 ('A');
8575   CHECKSUM_ULEB128 (at->dw_attr);
8576
8577   switch (AT_class (at))
8578     {
8579     case dw_val_class_const:
8580       CHECKSUM_ULEB128 (DW_FORM_sdata);
8581       CHECKSUM_SLEB128 (at->dw_attr_val.v.val_int);
8582       break;
8583
8584     case dw_val_class_unsigned_const:
8585       CHECKSUM_ULEB128 (DW_FORM_sdata);
8586       CHECKSUM_SLEB128 ((int) at->dw_attr_val.v.val_unsigned);
8587       break;
8588
8589     case dw_val_class_const_double:
8590       CHECKSUM_ULEB128 (DW_FORM_block);
8591       CHECKSUM_ULEB128 (sizeof (at->dw_attr_val.v.val_double));
8592       CHECKSUM (at->dw_attr_val.v.val_double);
8593       break;
8594
8595     case dw_val_class_vec:
8596       CHECKSUM_ULEB128 (DW_FORM_block);
8597       CHECKSUM_ULEB128 (sizeof (at->dw_attr_val.v.val_vec));
8598       CHECKSUM (at->dw_attr_val.v.val_vec);
8599       break;
8600
8601     case dw_val_class_flag:
8602       CHECKSUM_ULEB128 (DW_FORM_flag);
8603       CHECKSUM_ULEB128 (at->dw_attr_val.v.val_flag ? 1 : 0);
8604       break;
8605
8606     case dw_val_class_str:
8607       CHECKSUM_ULEB128 (DW_FORM_string);
8608       CHECKSUM_STRING (AT_string (at));
8609       break;
8610
8611     case dw_val_class_addr:
8612       r = AT_addr (at);
8613       gcc_assert (GET_CODE (r) == SYMBOL_REF);
8614       CHECKSUM_ULEB128 (DW_FORM_string);
8615       CHECKSUM_STRING (XSTR (r, 0));
8616       break;
8617
8618     case dw_val_class_offset:
8619       CHECKSUM_ULEB128 (DW_FORM_sdata);
8620       CHECKSUM_ULEB128 (at->dw_attr_val.v.val_offset);
8621       break;
8622
8623     case dw_val_class_loc:
8624       for (loc = AT_loc (at); loc; loc = loc->dw_loc_next)
8625         loc_checksum_ordered (loc, ctx);
8626       break;
8627
8628     case dw_val_class_fde_ref:
8629     case dw_val_class_lbl_id:
8630     case dw_val_class_lineptr:
8631     case dw_val_class_macptr:
8632       break;
8633
8634     case dw_val_class_file:
8635       CHECKSUM_ULEB128 (DW_FORM_string);
8636       CHECKSUM_STRING (AT_file (at)->filename);
8637       break;
8638
8639     case dw_val_class_data8:
8640       CHECKSUM (at->dw_attr_val.v.val_data8);
8641       break;
8642
8643     default:
8644       break;
8645     }
8646 }
8647
8648 struct checksum_attributes
8649 {
8650   dw_attr_ref at_name;
8651   dw_attr_ref at_type;
8652   dw_attr_ref at_friend;
8653   dw_attr_ref at_accessibility;
8654   dw_attr_ref at_address_class;
8655   dw_attr_ref at_allocated;
8656   dw_attr_ref at_artificial;
8657   dw_attr_ref at_associated;
8658   dw_attr_ref at_binary_scale;
8659   dw_attr_ref at_bit_offset;
8660   dw_attr_ref at_bit_size;
8661   dw_attr_ref at_bit_stride;
8662   dw_attr_ref at_byte_size;
8663   dw_attr_ref at_byte_stride;
8664   dw_attr_ref at_const_value;
8665   dw_attr_ref at_containing_type;
8666   dw_attr_ref at_count;
8667   dw_attr_ref at_data_location;
8668   dw_attr_ref at_data_member_location;
8669   dw_attr_ref at_decimal_scale;
8670   dw_attr_ref at_decimal_sign;
8671   dw_attr_ref at_default_value;
8672   dw_attr_ref at_digit_count;
8673   dw_attr_ref at_discr;
8674   dw_attr_ref at_discr_list;
8675   dw_attr_ref at_discr_value;
8676   dw_attr_ref at_encoding;
8677   dw_attr_ref at_endianity;
8678   dw_attr_ref at_explicit;
8679   dw_attr_ref at_is_optional;
8680   dw_attr_ref at_location;
8681   dw_attr_ref at_lower_bound;
8682   dw_attr_ref at_mutable;
8683   dw_attr_ref at_ordering;
8684   dw_attr_ref at_picture_string;
8685   dw_attr_ref at_prototyped;
8686   dw_attr_ref at_small;
8687   dw_attr_ref at_segment;
8688   dw_attr_ref at_string_length;
8689   dw_attr_ref at_threads_scaled;
8690   dw_attr_ref at_upper_bound;
8691   dw_attr_ref at_use_location;
8692   dw_attr_ref at_use_UTF8;
8693   dw_attr_ref at_variable_parameter;
8694   dw_attr_ref at_virtuality;
8695   dw_attr_ref at_visibility;
8696   dw_attr_ref at_vtable_elem_location;
8697 };
8698
8699 /* Collect the attributes that we will want to use for the checksum.  */
8700
8701 static void
8702 collect_checksum_attributes (struct checksum_attributes *attrs, dw_die_ref die)
8703 {
8704   dw_attr_ref a;
8705   unsigned ix;
8706
8707   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
8708     {
8709       switch (a->dw_attr)
8710         {
8711         case DW_AT_name:
8712           attrs->at_name = a;
8713           break;
8714         case DW_AT_type:
8715           attrs->at_type = a;
8716           break;
8717         case DW_AT_friend:
8718           attrs->at_friend = a;
8719           break;
8720         case DW_AT_accessibility:
8721           attrs->at_accessibility = a;
8722           break;
8723         case DW_AT_address_class:
8724           attrs->at_address_class = a;
8725           break;
8726         case DW_AT_allocated:
8727           attrs->at_allocated = a;
8728           break;
8729         case DW_AT_artificial:
8730           attrs->at_artificial = a;
8731           break;
8732         case DW_AT_associated:
8733           attrs->at_associated = a;
8734           break;
8735         case DW_AT_binary_scale:
8736           attrs->at_binary_scale = a;
8737           break;
8738         case DW_AT_bit_offset:
8739           attrs->at_bit_offset = a;
8740           break;
8741         case DW_AT_bit_size:
8742           attrs->at_bit_size = a;
8743           break;
8744         case DW_AT_bit_stride:
8745           attrs->at_bit_stride = a;
8746           break;
8747         case DW_AT_byte_size:
8748           attrs->at_byte_size = a;
8749           break;
8750         case DW_AT_byte_stride:
8751           attrs->at_byte_stride = a;
8752           break;
8753         case DW_AT_const_value:
8754           attrs->at_const_value = a;
8755           break;
8756         case DW_AT_containing_type:
8757           attrs->at_containing_type = a;
8758           break;
8759         case DW_AT_count:
8760           attrs->at_count = a;
8761           break;
8762         case DW_AT_data_location:
8763           attrs->at_data_location = a;
8764           break;
8765         case DW_AT_data_member_location:
8766           attrs->at_data_member_location = a;
8767           break;
8768         case DW_AT_decimal_scale:
8769           attrs->at_decimal_scale = a;
8770           break;
8771         case DW_AT_decimal_sign:
8772           attrs->at_decimal_sign = a;
8773           break;
8774         case DW_AT_default_value:
8775           attrs->at_default_value = a;
8776           break;
8777         case DW_AT_digit_count:
8778           attrs->at_digit_count = a;
8779           break;
8780         case DW_AT_discr:
8781           attrs->at_discr = a;
8782           break;
8783         case DW_AT_discr_list:
8784           attrs->at_discr_list = a;
8785           break;
8786         case DW_AT_discr_value:
8787           attrs->at_discr_value = a;
8788           break;
8789         case DW_AT_encoding:
8790           attrs->at_encoding = a;
8791           break;
8792         case DW_AT_endianity:
8793           attrs->at_endianity = a;
8794           break;
8795         case DW_AT_explicit:
8796           attrs->at_explicit = a;
8797           break;
8798         case DW_AT_is_optional:
8799           attrs->at_is_optional = a;
8800           break;
8801         case DW_AT_location:
8802           attrs->at_location = a;
8803           break;
8804         case DW_AT_lower_bound:
8805           attrs->at_lower_bound = a;
8806           break;
8807         case DW_AT_mutable:
8808           attrs->at_mutable = a;
8809           break;
8810         case DW_AT_ordering:
8811           attrs->at_ordering = a;
8812           break;
8813         case DW_AT_picture_string:
8814           attrs->at_picture_string = a;
8815           break;
8816         case DW_AT_prototyped:
8817           attrs->at_prototyped = a;
8818           break;
8819         case DW_AT_small:
8820           attrs->at_small = a;
8821           break;
8822         case DW_AT_segment:
8823           attrs->at_segment = a;
8824           break;
8825         case DW_AT_string_length:
8826           attrs->at_string_length = a;
8827           break;
8828         case DW_AT_threads_scaled:
8829           attrs->at_threads_scaled = a;
8830           break;
8831         case DW_AT_upper_bound:
8832           attrs->at_upper_bound = a;
8833           break;
8834         case DW_AT_use_location:
8835           attrs->at_use_location = a;
8836           break;
8837         case DW_AT_use_UTF8:
8838           attrs->at_use_UTF8 = a;
8839           break;
8840         case DW_AT_variable_parameter:
8841           attrs->at_variable_parameter = a;
8842           break;
8843         case DW_AT_virtuality:
8844           attrs->at_virtuality = a;
8845           break;
8846         case DW_AT_visibility:
8847           attrs->at_visibility = a;
8848           break;
8849         case DW_AT_vtable_elem_location:
8850           attrs->at_vtable_elem_location = a;
8851           break;
8852         default:
8853           break;
8854         }
8855     }
8856 }
8857
8858 /* Calculate the checksum of a DIE, using an ordered subset of attributes.  */
8859
8860 static void
8861 die_checksum_ordered (dw_die_ref die, struct md5_ctx *ctx, int *mark)
8862 {
8863   dw_die_ref c;
8864   dw_die_ref decl;
8865   struct checksum_attributes attrs;
8866
8867   CHECKSUM_ULEB128 ('D');
8868   CHECKSUM_ULEB128 (die->die_tag);
8869
8870   memset (&attrs, 0, sizeof (attrs));
8871
8872   decl = get_AT_ref (die, DW_AT_specification);
8873   if (decl != NULL)
8874     collect_checksum_attributes (&attrs, decl);
8875   collect_checksum_attributes (&attrs, die);
8876
8877   CHECKSUM_ATTR (attrs.at_name);
8878   CHECKSUM_ATTR (attrs.at_accessibility);
8879   CHECKSUM_ATTR (attrs.at_address_class);
8880   CHECKSUM_ATTR (attrs.at_allocated);
8881   CHECKSUM_ATTR (attrs.at_artificial);
8882   CHECKSUM_ATTR (attrs.at_associated);
8883   CHECKSUM_ATTR (attrs.at_binary_scale);
8884   CHECKSUM_ATTR (attrs.at_bit_offset);
8885   CHECKSUM_ATTR (attrs.at_bit_size);
8886   CHECKSUM_ATTR (attrs.at_bit_stride);
8887   CHECKSUM_ATTR (attrs.at_byte_size);
8888   CHECKSUM_ATTR (attrs.at_byte_stride);
8889   CHECKSUM_ATTR (attrs.at_const_value);
8890   CHECKSUM_ATTR (attrs.at_containing_type);
8891   CHECKSUM_ATTR (attrs.at_count);
8892   CHECKSUM_ATTR (attrs.at_data_location);
8893   CHECKSUM_ATTR (attrs.at_data_member_location);
8894   CHECKSUM_ATTR (attrs.at_decimal_scale);
8895   CHECKSUM_ATTR (attrs.at_decimal_sign);
8896   CHECKSUM_ATTR (attrs.at_default_value);
8897   CHECKSUM_ATTR (attrs.at_digit_count);
8898   CHECKSUM_ATTR (attrs.at_discr);
8899   CHECKSUM_ATTR (attrs.at_discr_list);
8900   CHECKSUM_ATTR (attrs.at_discr_value);
8901   CHECKSUM_ATTR (attrs.at_encoding);
8902   CHECKSUM_ATTR (attrs.at_endianity);
8903   CHECKSUM_ATTR (attrs.at_explicit);
8904   CHECKSUM_ATTR (attrs.at_is_optional);
8905   CHECKSUM_ATTR (attrs.at_location);
8906   CHECKSUM_ATTR (attrs.at_lower_bound);
8907   CHECKSUM_ATTR (attrs.at_mutable);
8908   CHECKSUM_ATTR (attrs.at_ordering);
8909   CHECKSUM_ATTR (attrs.at_picture_string);
8910   CHECKSUM_ATTR (attrs.at_prototyped);
8911   CHECKSUM_ATTR (attrs.at_small);
8912   CHECKSUM_ATTR (attrs.at_segment);
8913   CHECKSUM_ATTR (attrs.at_string_length);
8914   CHECKSUM_ATTR (attrs.at_threads_scaled);
8915   CHECKSUM_ATTR (attrs.at_upper_bound);
8916   CHECKSUM_ATTR (attrs.at_use_location);
8917   CHECKSUM_ATTR (attrs.at_use_UTF8);
8918   CHECKSUM_ATTR (attrs.at_variable_parameter);
8919   CHECKSUM_ATTR (attrs.at_virtuality);
8920   CHECKSUM_ATTR (attrs.at_visibility);
8921   CHECKSUM_ATTR (attrs.at_vtable_elem_location);
8922   CHECKSUM_ATTR (attrs.at_type);
8923   CHECKSUM_ATTR (attrs.at_friend);
8924
8925   /* Checksum the child DIEs, except for nested types and member functions.  */
8926   c = die->die_child;
8927   if (c) do {
8928     dw_attr_ref name_attr;
8929
8930     c = c->die_sib;
8931     name_attr = get_AT (c, DW_AT_name);
8932     if ((is_type_die (c) || c->die_tag == DW_TAG_subprogram)
8933         && name_attr != NULL)
8934       {
8935         CHECKSUM_ULEB128 ('S');
8936         CHECKSUM_ULEB128 (c->die_tag);
8937         CHECKSUM_STRING (AT_string (name_attr));
8938       }
8939     else
8940       {
8941         /* Mark this DIE so it gets processed when unmarking.  */
8942         if (c->die_mark == 0)
8943           c->die_mark = -1;
8944         die_checksum_ordered (c, ctx, mark);
8945       }
8946   } while (c != die->die_child);
8947
8948   CHECKSUM_ULEB128 (0);
8949 }
8950
8951 #undef CHECKSUM
8952 #undef CHECKSUM_STRING
8953 #undef CHECKSUM_ATTR
8954 #undef CHECKSUM_LEB128
8955 #undef CHECKSUM_ULEB128
8956
8957 /* Generate the type signature for DIE.  This is computed by generating an
8958    MD5 checksum over the DIE's tag, its relevant attributes, and its
8959    children.  Attributes that are references to other DIEs are processed
8960    by recursion, using the MARK field to prevent infinite recursion.
8961    If the DIE is nested inside a namespace or another type, we also
8962    need to include that context in the signature.  The lower 64 bits
8963    of the resulting MD5 checksum comprise the signature.  */
8964
8965 static void
8966 generate_type_signature (dw_die_ref die, comdat_type_node *type_node)
8967 {
8968   int mark;
8969   const char *name;
8970   unsigned char checksum[16];
8971   struct md5_ctx ctx;
8972   dw_die_ref decl;
8973
8974   name = get_AT_string (die, DW_AT_name);
8975   decl = get_AT_ref (die, DW_AT_specification);
8976
8977   /* First, compute a signature for just the type name (and its surrounding
8978      context, if any.  This is stored in the type unit DIE for link-time
8979      ODR (one-definition rule) checking.  */
8980
8981   if (is_cxx() && name != NULL)
8982     {
8983       md5_init_ctx (&ctx);
8984
8985       /* Checksum the names of surrounding namespaces and structures.  */
8986       if (decl != NULL && decl->die_parent != NULL)
8987         checksum_die_context (decl->die_parent, &ctx);
8988
8989       md5_process_bytes (&die->die_tag, sizeof (die->die_tag), &ctx);
8990       md5_process_bytes (name, strlen (name) + 1, &ctx);
8991       md5_finish_ctx (&ctx, checksum);
8992
8993       add_AT_data8 (type_node->root_die, DW_AT_GNU_odr_signature, &checksum[8]);
8994     }
8995
8996   /* Next, compute the complete type signature.  */
8997
8998   md5_init_ctx (&ctx);
8999   mark = 1;
9000   die->die_mark = mark;
9001
9002   /* Checksum the names of surrounding namespaces and structures.  */
9003   if (decl != NULL && decl->die_parent != NULL)
9004     checksum_die_context (decl->die_parent, &ctx);
9005
9006   /* Checksum the DIE and its children.  */
9007   die_checksum_ordered (die, &ctx, &mark);
9008   unmark_all_dies (die);
9009   md5_finish_ctx (&ctx, checksum);
9010
9011   /* Store the signature in the type node and link the type DIE and the
9012      type node together.  */
9013   memcpy (type_node->signature, &checksum[16 - DWARF_TYPE_SIGNATURE_SIZE],
9014           DWARF_TYPE_SIGNATURE_SIZE);
9015   die->die_id.die_type_node = type_node;
9016   type_node->type_die = die;
9017
9018   /* If the DIE is a specification, link its declaration to the type node
9019      as well.  */
9020   if (decl != NULL)
9021     decl->die_id.die_type_node = type_node;
9022 }
9023
9024 /* Do the location expressions look same?  */
9025 static inline int
9026 same_loc_p (dw_loc_descr_ref loc1, dw_loc_descr_ref loc2, int *mark)
9027 {
9028   return loc1->dw_loc_opc == loc2->dw_loc_opc
9029          && same_dw_val_p (&loc1->dw_loc_oprnd1, &loc2->dw_loc_oprnd1, mark)
9030          && same_dw_val_p (&loc1->dw_loc_oprnd2, &loc2->dw_loc_oprnd2, mark);
9031 }
9032
9033 /* Do the values look the same?  */
9034 static int
9035 same_dw_val_p (const dw_val_node *v1, const dw_val_node *v2, int *mark)
9036 {
9037   dw_loc_descr_ref loc1, loc2;
9038   rtx r1, r2;
9039
9040   if (v1->val_class != v2->val_class)
9041     return 0;
9042
9043   switch (v1->val_class)
9044     {
9045     case dw_val_class_const:
9046       return v1->v.val_int == v2->v.val_int;
9047     case dw_val_class_unsigned_const:
9048       return v1->v.val_unsigned == v2->v.val_unsigned;
9049     case dw_val_class_const_double:
9050       return v1->v.val_double.high == v2->v.val_double.high
9051              && v1->v.val_double.low == v2->v.val_double.low;
9052     case dw_val_class_vec:
9053       if (v1->v.val_vec.length != v2->v.val_vec.length
9054           || v1->v.val_vec.elt_size != v2->v.val_vec.elt_size)
9055         return 0;
9056       if (memcmp (v1->v.val_vec.array, v2->v.val_vec.array,
9057                   v1->v.val_vec.length * v1->v.val_vec.elt_size))
9058         return 0;
9059       return 1;
9060     case dw_val_class_flag:
9061       return v1->v.val_flag == v2->v.val_flag;
9062     case dw_val_class_str:
9063       return !strcmp(v1->v.val_str->str, v2->v.val_str->str);
9064
9065     case dw_val_class_addr:
9066       r1 = v1->v.val_addr;
9067       r2 = v2->v.val_addr;
9068       if (GET_CODE (r1) != GET_CODE (r2))
9069         return 0;
9070       return !rtx_equal_p (r1, r2);
9071
9072     case dw_val_class_offset:
9073       return v1->v.val_offset == v2->v.val_offset;
9074
9075     case dw_val_class_loc:
9076       for (loc1 = v1->v.val_loc, loc2 = v2->v.val_loc;
9077            loc1 && loc2;
9078            loc1 = loc1->dw_loc_next, loc2 = loc2->dw_loc_next)
9079         if (!same_loc_p (loc1, loc2, mark))
9080           return 0;
9081       return !loc1 && !loc2;
9082
9083     case dw_val_class_die_ref:
9084       return same_die_p (v1->v.val_die_ref.die, v2->v.val_die_ref.die, mark);
9085
9086     case dw_val_class_fde_ref:
9087     case dw_val_class_lbl_id:
9088     case dw_val_class_lineptr:
9089     case dw_val_class_macptr:
9090       return 1;
9091
9092     case dw_val_class_file:
9093       return v1->v.val_file == v2->v.val_file;
9094
9095     case dw_val_class_data8:
9096       return !memcmp (v1->v.val_data8, v2->v.val_data8, 8);
9097
9098     default:
9099       return 1;
9100     }
9101 }
9102
9103 /* Do the attributes look the same?  */
9104
9105 static int
9106 same_attr_p (dw_attr_ref at1, dw_attr_ref at2, int *mark)
9107 {
9108   if (at1->dw_attr != at2->dw_attr)
9109     return 0;
9110
9111   /* We don't care that this was compiled with a different compiler
9112      snapshot; if the output is the same, that's what matters. */
9113   if (at1->dw_attr == DW_AT_producer)
9114     return 1;
9115
9116   return same_dw_val_p (&at1->dw_attr_val, &at2->dw_attr_val, mark);
9117 }
9118
9119 /* Do the dies look the same?  */
9120
9121 static int
9122 same_die_p (dw_die_ref die1, dw_die_ref die2, int *mark)
9123 {
9124   dw_die_ref c1, c2;
9125   dw_attr_ref a1;
9126   unsigned ix;
9127
9128   /* To avoid infinite recursion.  */
9129   if (die1->die_mark)
9130     return die1->die_mark == die2->die_mark;
9131   die1->die_mark = die2->die_mark = ++(*mark);
9132
9133   if (die1->die_tag != die2->die_tag)
9134     return 0;
9135
9136   if (VEC_length (dw_attr_node, die1->die_attr)
9137       != VEC_length (dw_attr_node, die2->die_attr))
9138     return 0;
9139
9140   for (ix = 0; VEC_iterate (dw_attr_node, die1->die_attr, ix, a1); ix++)
9141     if (!same_attr_p (a1, VEC_index (dw_attr_node, die2->die_attr, ix), mark))
9142       return 0;
9143
9144   c1 = die1->die_child;
9145   c2 = die2->die_child;
9146   if (! c1)
9147     {
9148       if (c2)
9149         return 0;
9150     }
9151   else
9152     for (;;)
9153       {
9154         if (!same_die_p (c1, c2, mark))
9155           return 0;
9156         c1 = c1->die_sib;
9157         c2 = c2->die_sib;
9158         if (c1 == die1->die_child)
9159           {
9160             if (c2 == die2->die_child)
9161               break;
9162             else
9163               return 0;
9164           }
9165     }
9166
9167   return 1;
9168 }
9169
9170 /* Do the dies look the same?  Wrapper around same_die_p.  */
9171
9172 static int
9173 same_die_p_wrap (dw_die_ref die1, dw_die_ref die2)
9174 {
9175   int mark = 0;
9176   int ret = same_die_p (die1, die2, &mark);
9177
9178   unmark_all_dies (die1);
9179   unmark_all_dies (die2);
9180
9181   return ret;
9182 }
9183
9184 /* The prefix to attach to symbols on DIEs in the current comdat debug
9185    info section.  */
9186 static char *comdat_symbol_id;
9187
9188 /* The index of the current symbol within the current comdat CU.  */
9189 static unsigned int comdat_symbol_number;
9190
9191 /* Calculate the MD5 checksum of the compilation unit DIE UNIT_DIE and its
9192    children, and set comdat_symbol_id accordingly.  */
9193
9194 static void
9195 compute_section_prefix (dw_die_ref unit_die)
9196 {
9197   const char *die_name = get_AT_string (unit_die, DW_AT_name);
9198   const char *base = die_name ? lbasename (die_name) : "anonymous";
9199   char *name = XALLOCAVEC (char, strlen (base) + 64);
9200   char *p;
9201   int i, mark;
9202   unsigned char checksum[16];
9203   struct md5_ctx ctx;
9204
9205   /* Compute the checksum of the DIE, then append part of it as hex digits to
9206      the name filename of the unit.  */
9207
9208   md5_init_ctx (&ctx);
9209   mark = 0;
9210   die_checksum (unit_die, &ctx, &mark);
9211   unmark_all_dies (unit_die);
9212   md5_finish_ctx (&ctx, checksum);
9213
9214   sprintf (name, "%s.", base);
9215   clean_symbol_name (name);
9216
9217   p = name + strlen (name);
9218   for (i = 0; i < 4; i++)
9219     {
9220       sprintf (p, "%.2x", checksum[i]);
9221       p += 2;
9222     }
9223
9224   comdat_symbol_id = unit_die->die_id.die_symbol = xstrdup (name);
9225   comdat_symbol_number = 0;
9226 }
9227
9228 /* Returns nonzero if DIE represents a type, in the sense of TYPE_P.  */
9229
9230 static int
9231 is_type_die (dw_die_ref die)
9232 {
9233   switch (die->die_tag)
9234     {
9235     case DW_TAG_array_type:
9236     case DW_TAG_class_type:
9237     case DW_TAG_interface_type:
9238     case DW_TAG_enumeration_type:
9239     case DW_TAG_pointer_type:
9240     case DW_TAG_reference_type:
9241     case DW_TAG_rvalue_reference_type:
9242     case DW_TAG_string_type:
9243     case DW_TAG_structure_type:
9244     case DW_TAG_subroutine_type:
9245     case DW_TAG_union_type:
9246     case DW_TAG_ptr_to_member_type:
9247     case DW_TAG_set_type:
9248     case DW_TAG_subrange_type:
9249     case DW_TAG_base_type:
9250     case DW_TAG_const_type:
9251     case DW_TAG_file_type:
9252     case DW_TAG_packed_type:
9253     case DW_TAG_volatile_type:
9254     case DW_TAG_typedef:
9255       return 1;
9256     default:
9257       return 0;
9258     }
9259 }
9260
9261 /* Returns 1 iff C is the sort of DIE that should go into a COMDAT CU.
9262    Basically, we want to choose the bits that are likely to be shared between
9263    compilations (types) and leave out the bits that are specific to individual
9264    compilations (functions).  */
9265
9266 static int
9267 is_comdat_die (dw_die_ref c)
9268 {
9269   /* I think we want to leave base types and __vtbl_ptr_type in the main CU, as
9270      we do for stabs.  The advantage is a greater likelihood of sharing between
9271      objects that don't include headers in the same order (and therefore would
9272      put the base types in a different comdat).  jason 8/28/00 */
9273
9274   if (c->die_tag == DW_TAG_base_type)
9275     return 0;
9276
9277   if (c->die_tag == DW_TAG_pointer_type
9278       || c->die_tag == DW_TAG_reference_type
9279       || c->die_tag == DW_TAG_rvalue_reference_type
9280       || c->die_tag == DW_TAG_const_type
9281       || c->die_tag == DW_TAG_volatile_type)
9282     {
9283       dw_die_ref t = get_AT_ref (c, DW_AT_type);
9284
9285       return t ? is_comdat_die (t) : 0;
9286     }
9287
9288   return is_type_die (c);
9289 }
9290
9291 /* Returns 1 iff C is the sort of DIE that might be referred to from another
9292    compilation unit.  */
9293
9294 static int
9295 is_symbol_die (dw_die_ref c)
9296 {
9297   return (is_type_die (c)
9298           || is_declaration_die (c)
9299           || c->die_tag == DW_TAG_namespace
9300           || c->die_tag == DW_TAG_module);
9301 }
9302
9303 static char *
9304 gen_internal_sym (const char *prefix)
9305 {
9306   char buf[256];
9307
9308   ASM_GENERATE_INTERNAL_LABEL (buf, prefix, label_num++);
9309   return xstrdup (buf);
9310 }
9311
9312 /* Assign symbols to all worthy DIEs under DIE.  */
9313
9314 static void
9315 assign_symbol_names (dw_die_ref die)
9316 {
9317   dw_die_ref c;
9318
9319   if (is_symbol_die (die))
9320     {
9321       if (comdat_symbol_id)
9322         {
9323           char *p = XALLOCAVEC (char, strlen (comdat_symbol_id) + 64);
9324
9325           sprintf (p, "%s.%s.%x", DIE_LABEL_PREFIX,
9326                    comdat_symbol_id, comdat_symbol_number++);
9327           die->die_id.die_symbol = xstrdup (p);
9328         }
9329       else
9330         die->die_id.die_symbol = gen_internal_sym ("LDIE");
9331     }
9332
9333   FOR_EACH_CHILD (die, c, assign_symbol_names (c));
9334 }
9335
9336 struct cu_hash_table_entry
9337 {
9338   dw_die_ref cu;
9339   unsigned min_comdat_num, max_comdat_num;
9340   struct cu_hash_table_entry *next;
9341 };
9342
9343 /* Routines to manipulate hash table of CUs.  */
9344 static hashval_t
9345 htab_cu_hash (const void *of)
9346 {
9347   const struct cu_hash_table_entry *const entry =
9348     (const struct cu_hash_table_entry *) of;
9349
9350   return htab_hash_string (entry->cu->die_id.die_symbol);
9351 }
9352
9353 static int
9354 htab_cu_eq (const void *of1, const void *of2)
9355 {
9356   const struct cu_hash_table_entry *const entry1 =
9357     (const struct cu_hash_table_entry *) of1;
9358   const struct die_struct *const entry2 = (const struct die_struct *) of2;
9359
9360   return !strcmp (entry1->cu->die_id.die_symbol, entry2->die_id.die_symbol);
9361 }
9362
9363 static void
9364 htab_cu_del (void *what)
9365 {
9366   struct cu_hash_table_entry *next,
9367     *entry = (struct cu_hash_table_entry *) what;
9368
9369   while (entry)
9370     {
9371       next = entry->next;
9372       free (entry);
9373       entry = next;
9374     }
9375 }
9376
9377 /* Check whether we have already seen this CU and set up SYM_NUM
9378    accordingly.  */
9379 static int
9380 check_duplicate_cu (dw_die_ref cu, htab_t htable, unsigned int *sym_num)
9381 {
9382   struct cu_hash_table_entry dummy;
9383   struct cu_hash_table_entry **slot, *entry, *last = &dummy;
9384
9385   dummy.max_comdat_num = 0;
9386
9387   slot = (struct cu_hash_table_entry **)
9388     htab_find_slot_with_hash (htable, cu, htab_hash_string (cu->die_id.die_symbol),
9389         INSERT);
9390   entry = *slot;
9391
9392   for (; entry; last = entry, entry = entry->next)
9393     {
9394       if (same_die_p_wrap (cu, entry->cu))
9395         break;
9396     }
9397
9398   if (entry)
9399     {
9400       *sym_num = entry->min_comdat_num;
9401       return 1;
9402     }
9403
9404   entry = XCNEW (struct cu_hash_table_entry);
9405   entry->cu = cu;
9406   entry->min_comdat_num = *sym_num = last->max_comdat_num;
9407   entry->next = *slot;
9408   *slot = entry;
9409
9410   return 0;
9411 }
9412
9413 /* Record SYM_NUM to record of CU in HTABLE.  */
9414 static void
9415 record_comdat_symbol_number (dw_die_ref cu, htab_t htable, unsigned int sym_num)
9416 {
9417   struct cu_hash_table_entry **slot, *entry;
9418
9419   slot = (struct cu_hash_table_entry **)
9420     htab_find_slot_with_hash (htable, cu, htab_hash_string (cu->die_id.die_symbol),
9421         NO_INSERT);
9422   entry = *slot;
9423
9424   entry->max_comdat_num = sym_num;
9425 }
9426
9427 /* Traverse the DIE (which is always comp_unit_die), and set up
9428    additional compilation units for each of the include files we see
9429    bracketed by BINCL/EINCL.  */
9430
9431 static void
9432 break_out_includes (dw_die_ref die)
9433 {
9434   dw_die_ref c;
9435   dw_die_ref unit = NULL;
9436   limbo_die_node *node, **pnode;
9437   htab_t cu_hash_table;
9438
9439   c = die->die_child;
9440   if (c) do {
9441     dw_die_ref prev = c;
9442     c = c->die_sib;
9443     while (c->die_tag == DW_TAG_GNU_BINCL || c->die_tag == DW_TAG_GNU_EINCL
9444            || (unit && is_comdat_die (c)))
9445       {
9446         dw_die_ref next = c->die_sib;
9447
9448         /* This DIE is for a secondary CU; remove it from the main one.  */
9449         remove_child_with_prev (c, prev);
9450
9451         if (c->die_tag == DW_TAG_GNU_BINCL)
9452           unit = push_new_compile_unit (unit, c);
9453         else if (c->die_tag == DW_TAG_GNU_EINCL)
9454           unit = pop_compile_unit (unit);
9455         else
9456           add_child_die (unit, c);
9457         c = next;
9458         if (c == die->die_child)
9459           break;
9460       }
9461   } while (c != die->die_child);
9462
9463 #if 0
9464   /* We can only use this in debugging, since the frontend doesn't check
9465      to make sure that we leave every include file we enter.  */
9466   gcc_assert (!unit);
9467 #endif
9468
9469   assign_symbol_names (die);
9470   cu_hash_table = htab_create (10, htab_cu_hash, htab_cu_eq, htab_cu_del);
9471   for (node = limbo_die_list, pnode = &limbo_die_list;
9472        node;
9473        node = node->next)
9474     {
9475       int is_dupl;
9476
9477       compute_section_prefix (node->die);
9478       is_dupl = check_duplicate_cu (node->die, cu_hash_table,
9479                         &comdat_symbol_number);
9480       assign_symbol_names (node->die);
9481       if (is_dupl)
9482         *pnode = node->next;
9483       else
9484         {
9485           pnode = &node->next;
9486           record_comdat_symbol_number (node->die, cu_hash_table,
9487                 comdat_symbol_number);
9488         }
9489     }
9490   htab_delete (cu_hash_table);
9491 }
9492
9493 /* Return non-zero if this DIE is a declaration.  */
9494
9495 static int
9496 is_declaration_die (dw_die_ref die)
9497 {
9498   dw_attr_ref a;
9499   unsigned ix;
9500
9501   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
9502     if (a->dw_attr == DW_AT_declaration)
9503       return 1;
9504
9505   return 0;
9506 }
9507
9508 /* Return non-zero if this is a type DIE that should be moved to a
9509    COMDAT .debug_types section.  */
9510
9511 static int
9512 should_move_die_to_comdat (dw_die_ref die)
9513 {
9514   switch (die->die_tag)
9515     {
9516     case DW_TAG_class_type:
9517     case DW_TAG_structure_type:
9518     case DW_TAG_enumeration_type:
9519     case DW_TAG_union_type:
9520       /* Don't move declarations or inlined instances.  */
9521       if (is_declaration_die (die) || get_AT (die, DW_AT_abstract_origin))
9522         return 0;
9523       return 1;
9524     case DW_TAG_array_type:
9525     case DW_TAG_interface_type:
9526     case DW_TAG_pointer_type:
9527     case DW_TAG_reference_type:
9528     case DW_TAG_rvalue_reference_type:
9529     case DW_TAG_string_type:
9530     case DW_TAG_subroutine_type:
9531     case DW_TAG_ptr_to_member_type:
9532     case DW_TAG_set_type:
9533     case DW_TAG_subrange_type:
9534     case DW_TAG_base_type:
9535     case DW_TAG_const_type:
9536     case DW_TAG_file_type:
9537     case DW_TAG_packed_type:
9538     case DW_TAG_volatile_type:
9539     case DW_TAG_typedef:
9540     default:
9541       return 0;
9542     }
9543 }
9544
9545 /* Make a clone of DIE.  */
9546
9547 static dw_die_ref
9548 clone_die (dw_die_ref die)
9549 {
9550   dw_die_ref clone;
9551   dw_attr_ref a;
9552   unsigned ix;
9553
9554   clone = GGC_CNEW (die_node);
9555   clone->die_tag = die->die_tag;
9556
9557   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
9558     add_dwarf_attr (clone, a);
9559
9560   return clone;
9561 }
9562
9563 /* Make a clone of the tree rooted at DIE.  */
9564
9565 static dw_die_ref
9566 clone_tree (dw_die_ref die)
9567 {
9568   dw_die_ref c;
9569   dw_die_ref clone = clone_die (die);
9570
9571   FOR_EACH_CHILD (die, c, add_child_die (clone, clone_tree(c)));
9572
9573   return clone;
9574 }
9575
9576 /* Make a clone of DIE as a declaration.  */
9577
9578 static dw_die_ref
9579 clone_as_declaration (dw_die_ref die)
9580 {
9581   dw_die_ref clone;
9582   dw_die_ref decl;
9583   dw_attr_ref a;
9584   unsigned ix;
9585
9586   /* If the DIE is already a declaration, just clone it.  */
9587   if (is_declaration_die (die))
9588     return clone_die (die);
9589
9590   /* If the DIE is a specification, just clone its declaration DIE.  */
9591   decl = get_AT_ref (die, DW_AT_specification);
9592   if (decl != NULL)
9593     return clone_die (decl);
9594
9595   clone = GGC_CNEW (die_node);
9596   clone->die_tag = die->die_tag;
9597
9598   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
9599     {
9600       /* We don't want to copy over all attributes.
9601          For example we don't want DW_AT_byte_size because otherwise we will no
9602          longer have a declaration and GDB will treat it as a definition.  */
9603
9604       switch (a->dw_attr)
9605         {
9606         case DW_AT_artificial:
9607         case DW_AT_containing_type:
9608         case DW_AT_external:
9609         case DW_AT_name:
9610         case DW_AT_type:
9611         case DW_AT_virtuality:
9612         case DW_AT_linkage_name:
9613         case DW_AT_MIPS_linkage_name:
9614           add_dwarf_attr (clone, a);
9615           break;
9616         case DW_AT_byte_size:
9617         default:
9618           break;
9619         }
9620     }
9621
9622   if (die->die_id.die_type_node)
9623     add_AT_die_ref (clone, DW_AT_signature, die);
9624
9625   add_AT_flag (clone, DW_AT_declaration, 1);
9626   return clone;
9627 }
9628
9629 /* Copy the declaration context to the new compile unit DIE.  This includes
9630    any surrounding namespace or type declarations.  If the DIE has an
9631    AT_specification attribute, it also includes attributes and children
9632    attached to the specification.  */
9633
9634 static void
9635 copy_declaration_context (dw_die_ref unit, dw_die_ref die)
9636 {
9637   dw_die_ref decl;
9638   dw_die_ref new_decl;
9639
9640   decl = get_AT_ref (die, DW_AT_specification);
9641   if (decl == NULL)
9642     decl = die;
9643   else
9644     {
9645       unsigned ix;
9646       dw_die_ref c;
9647       dw_attr_ref a;
9648
9649       /* Copy the type node pointer from the new DIE to the original
9650          declaration DIE so we can forward references later.  */
9651       decl->die_id.die_type_node = die->die_id.die_type_node;
9652
9653       remove_AT (die, DW_AT_specification);
9654
9655       for (ix = 0; VEC_iterate (dw_attr_node, decl->die_attr, ix, a); ix++)
9656         {
9657           if (a->dw_attr != DW_AT_name
9658               && a->dw_attr != DW_AT_declaration
9659               && a->dw_attr != DW_AT_external)
9660             add_dwarf_attr (die, a);
9661         }
9662
9663       FOR_EACH_CHILD (decl, c, add_child_die (die, clone_tree(c)));
9664     }
9665
9666   if (decl->die_parent != NULL
9667       && decl->die_parent->die_tag != DW_TAG_compile_unit
9668       && decl->die_parent->die_tag != DW_TAG_type_unit)
9669     {
9670       new_decl = copy_ancestor_tree (unit, decl, NULL);
9671       if (new_decl != NULL)
9672         {
9673           remove_AT (new_decl, DW_AT_signature);
9674           add_AT_specification (die, new_decl);
9675         }
9676     }
9677 }
9678
9679 /* Generate the skeleton ancestor tree for the given NODE, then clone
9680    the DIE and add the clone into the tree.  */
9681
9682 static void
9683 generate_skeleton_ancestor_tree (skeleton_chain_node *node)
9684 {
9685   if (node->new_die != NULL)
9686     return;
9687
9688   node->new_die = clone_as_declaration (node->old_die);
9689
9690   if (node->parent != NULL)
9691     {
9692       generate_skeleton_ancestor_tree (node->parent);
9693       add_child_die (node->parent->new_die, node->new_die);
9694     }
9695 }
9696
9697 /* Generate a skeleton tree of DIEs containing any declarations that are
9698    found in the original tree.  We traverse the tree looking for declaration
9699    DIEs, and construct the skeleton from the bottom up whenever we find one.  */
9700
9701 static void
9702 generate_skeleton_bottom_up (skeleton_chain_node *parent)
9703 {
9704   skeleton_chain_node node;
9705   dw_die_ref c;
9706   dw_die_ref first;
9707   dw_die_ref prev = NULL;
9708   dw_die_ref next = NULL;
9709
9710   node.parent = parent;
9711
9712   first = c = parent->old_die->die_child;
9713   if (c)
9714     next = c->die_sib;
9715   if (c) do {
9716     if (prev == NULL || prev->die_sib == c)
9717       prev = c;
9718     c = next;
9719     next = (c == first ? NULL : c->die_sib);
9720     node.old_die = c;
9721     node.new_die = NULL;
9722     if (is_declaration_die (c))
9723       {
9724         /* Clone the existing DIE, move the original to the skeleton
9725            tree (which is in the main CU), and put the clone, with
9726            all the original's children, where the original came from.  */
9727         dw_die_ref clone = clone_die (c);
9728         move_all_children (c, clone);
9729
9730         replace_child (c, clone, prev);
9731         generate_skeleton_ancestor_tree (parent);
9732         add_child_die (parent->new_die, c);
9733         node.new_die = c;
9734         c = clone;
9735       }
9736     generate_skeleton_bottom_up (&node);
9737   } while (next != NULL);
9738 }
9739
9740 /* Wrapper function for generate_skeleton_bottom_up.  */
9741
9742 static dw_die_ref
9743 generate_skeleton (dw_die_ref die)
9744 {
9745   skeleton_chain_node node;
9746
9747   node.old_die = die;
9748   node.new_die = NULL;
9749   node.parent = NULL;
9750
9751   /* If this type definition is nested inside another type,
9752      always leave at least a declaration in its place.  */
9753   if (die->die_parent != NULL && is_type_die (die->die_parent))
9754     node.new_die = clone_as_declaration (die);
9755
9756   generate_skeleton_bottom_up (&node);
9757   return node.new_die;
9758 }
9759
9760 /* Remove the DIE from its parent, possibly replacing it with a cloned
9761    declaration.  The original DIE will be moved to a new compile unit
9762    so that existing references to it follow it to the new location.  If
9763    any of the original DIE's descendants is a declaration, we need to
9764    replace the original DIE with a skeleton tree and move the
9765    declarations back into the skeleton tree.  */
9766
9767 static dw_die_ref
9768 remove_child_or_replace_with_skeleton (dw_die_ref child, dw_die_ref prev)
9769 {
9770   dw_die_ref skeleton;
9771
9772   skeleton = generate_skeleton (child);
9773   if (skeleton == NULL)
9774     remove_child_with_prev (child, prev);
9775   else
9776     {
9777       skeleton->die_id.die_type_node = child->die_id.die_type_node;
9778       replace_child (child, skeleton, prev);
9779     }
9780
9781   return skeleton;
9782 }
9783
9784 /* Traverse the DIE and set up additional .debug_types sections for each
9785    type worthy of being placed in a COMDAT section.  */
9786
9787 static void
9788 break_out_comdat_types (dw_die_ref die)
9789 {
9790   dw_die_ref c;
9791   dw_die_ref first;
9792   dw_die_ref prev = NULL;
9793   dw_die_ref next = NULL;
9794   dw_die_ref unit = NULL;
9795
9796   first = c = die->die_child;
9797   if (c)
9798     next = c->die_sib;
9799   if (c) do {
9800     if (prev == NULL || prev->die_sib == c)
9801       prev = c;
9802     c = next;
9803     next = (c == first ? NULL : c->die_sib);
9804     if (should_move_die_to_comdat (c))
9805       {
9806         dw_die_ref replacement;
9807         comdat_type_node_ref type_node;
9808
9809         /* Create a new type unit DIE as the root for the new tree, and
9810            add it to the list of comdat types.  */
9811         unit = new_die (DW_TAG_type_unit, NULL, NULL);
9812         add_AT_unsigned (unit, DW_AT_language,
9813                          get_AT_unsigned (comp_unit_die, DW_AT_language));
9814         type_node = GGC_CNEW (comdat_type_node);
9815         type_node->root_die = unit;
9816         type_node->next = comdat_type_list;
9817         comdat_type_list = type_node;
9818
9819         /* Generate the type signature.  */
9820         generate_type_signature (c, type_node);
9821
9822         /* Copy the declaration context, attributes, and children of the
9823            declaration into the new compile unit DIE.  */
9824         copy_declaration_context (unit, c);
9825
9826         /* Remove this DIE from the main CU.  */
9827         replacement = remove_child_or_replace_with_skeleton (c, prev);
9828
9829         /* Break out nested types into their own type units.  */
9830         break_out_comdat_types (c);
9831
9832         /* Add the DIE to the new compunit.  */
9833         add_child_die (unit, c);
9834
9835         if (replacement != NULL)
9836           c = replacement;
9837       }
9838     else if (c->die_tag == DW_TAG_namespace
9839              || c->die_tag == DW_TAG_class_type
9840              || c->die_tag == DW_TAG_structure_type
9841              || c->die_tag == DW_TAG_union_type)
9842       {
9843         /* Look for nested types that can be broken out.  */
9844         break_out_comdat_types (c);
9845       }
9846   } while (next != NULL);
9847 }
9848
9849 /* Structure to map a DIE in one CU to its copy in a comdat type unit.  */
9850
9851 struct decl_table_entry
9852 {
9853   dw_die_ref orig;
9854   dw_die_ref copy;
9855 };
9856
9857 /* Routines to manipulate hash table of copied declarations.  */
9858
9859 static hashval_t
9860 htab_decl_hash (const void *of)
9861 {
9862   const struct decl_table_entry *const entry =
9863     (const struct decl_table_entry *) of;
9864
9865   return htab_hash_pointer (entry->orig);
9866 }
9867
9868 static int
9869 htab_decl_eq (const void *of1, const void *of2)
9870 {
9871   const struct decl_table_entry *const entry1 =
9872     (const struct decl_table_entry *) of1;
9873   const struct die_struct *const entry2 = (const struct die_struct *) of2;
9874
9875   return entry1->orig == entry2;
9876 }
9877
9878 static void
9879 htab_decl_del (void *what)
9880 {
9881   struct decl_table_entry *entry = (struct decl_table_entry *) what;
9882
9883   free (entry);
9884 }
9885
9886 /* Copy DIE and its ancestors, up to, but not including, the compile unit
9887    or type unit entry, to a new tree.  Adds the new tree to UNIT and returns
9888    a pointer to the copy of DIE.  If DECL_TABLE is provided, it is used
9889    to check if the ancestor has already been copied into UNIT.  */
9890
9891 static dw_die_ref
9892 copy_ancestor_tree (dw_die_ref unit, dw_die_ref die, htab_t decl_table)
9893 {
9894   dw_die_ref parent = die->die_parent;
9895   dw_die_ref new_parent = unit;
9896   dw_die_ref copy;
9897   void **slot = NULL;
9898   struct decl_table_entry *entry = NULL;
9899
9900   if (decl_table)
9901     {
9902       /* Check if the entry has already been copied to UNIT.  */
9903       slot = htab_find_slot_with_hash (decl_table, die,
9904                                        htab_hash_pointer (die), INSERT);
9905       if (*slot != HTAB_EMPTY_ENTRY)
9906         {
9907           entry = (struct decl_table_entry *) *slot;
9908           return entry->copy;
9909         }
9910
9911       /* Record in DECL_TABLE that DIE has been copied to UNIT.  */
9912       entry = XCNEW (struct decl_table_entry);
9913       entry->orig = die;
9914       entry->copy = NULL;
9915       *slot = entry;
9916     }
9917
9918   if (parent != NULL)
9919     {
9920       dw_die_ref spec = get_AT_ref (parent, DW_AT_specification);
9921       if (spec != NULL)
9922         parent = spec;
9923       if (parent->die_tag != DW_TAG_compile_unit
9924           && parent->die_tag != DW_TAG_type_unit)
9925         new_parent = copy_ancestor_tree (unit, parent, decl_table);
9926     }
9927
9928   copy = clone_as_declaration (die);
9929   add_child_die (new_parent, copy);
9930
9931   if (decl_table != NULL)
9932     {
9933       /* Make sure the copy is marked as part of the type unit.  */
9934       copy->die_mark = 1;
9935       /* Record the pointer to the copy.  */
9936       entry->copy = copy;
9937     }
9938
9939   return copy;
9940 }
9941
9942 /* Walk the DIE and its children, looking for references to incomplete
9943    or trivial types that are unmarked (i.e., that are not in the current
9944    type_unit).  */
9945
9946 static void
9947 copy_decls_walk (dw_die_ref unit, dw_die_ref die, htab_t decl_table)
9948 {
9949   dw_die_ref c;
9950   dw_attr_ref a;
9951   unsigned ix;
9952
9953   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
9954     {
9955       if (AT_class (a) == dw_val_class_die_ref)
9956         {
9957           dw_die_ref targ = AT_ref (a);
9958           comdat_type_node_ref type_node = targ->die_id.die_type_node;
9959           void **slot;
9960           struct decl_table_entry *entry;
9961
9962           if (targ->die_mark != 0 || type_node != NULL)
9963             continue;
9964
9965           slot = htab_find_slot_with_hash (decl_table, targ,
9966                                            htab_hash_pointer (targ), INSERT);
9967
9968           if (*slot != HTAB_EMPTY_ENTRY)
9969             {
9970               /* TARG has already been copied, so we just need to
9971                  modify the reference to point to the copy.  */
9972               entry = (struct decl_table_entry *) *slot;
9973               a->dw_attr_val.v.val_die_ref.die = entry->copy;
9974             }
9975           else
9976             {
9977               dw_die_ref parent = unit;
9978               dw_die_ref copy = clone_tree (targ);
9979
9980               /* Make sure the cloned tree is marked as part of the
9981                  type unit.  */
9982               mark_dies (copy);
9983
9984               /* Record in DECL_TABLE that TARG has been copied.
9985                  Need to do this now, before the recursive call,
9986                  because DECL_TABLE may be expanded and SLOT
9987                  would no longer be a valid pointer.  */
9988               entry = XCNEW (struct decl_table_entry);
9989               entry->orig = targ;
9990               entry->copy = copy;
9991               *slot = entry;
9992
9993               /* If TARG has surrounding context, copy its ancestor tree
9994                  into the new type unit.  */
9995               if (targ->die_parent != NULL
9996                   && targ->die_parent->die_tag != DW_TAG_compile_unit
9997                   && targ->die_parent->die_tag != DW_TAG_type_unit)
9998                 parent = copy_ancestor_tree (unit, targ->die_parent,
9999                                              decl_table);
10000
10001               add_child_die (parent, copy);
10002               a->dw_attr_val.v.val_die_ref.die = copy;
10003
10004               /* Make sure the newly-copied DIE is walked.  If it was
10005                  installed in a previously-added context, it won't
10006                  get visited otherwise.  */
10007               if (parent != unit)
10008                 copy_decls_walk (unit, parent, decl_table);
10009             }
10010         }
10011     }
10012
10013   FOR_EACH_CHILD (die, c, copy_decls_walk (unit, c, decl_table));
10014 }
10015
10016 /* Copy declarations for "unworthy" types into the new comdat section.
10017    Incomplete types, modified types, and certain other types aren't broken
10018    out into comdat sections of their own, so they don't have a signature,
10019    and we need to copy the declaration into the same section so that we
10020    don't have an external reference.  */
10021
10022 static void
10023 copy_decls_for_unworthy_types (dw_die_ref unit)
10024 {
10025   htab_t decl_table;
10026
10027   mark_dies (unit);
10028   decl_table = htab_create (10, htab_decl_hash, htab_decl_eq, htab_decl_del);
10029   copy_decls_walk (unit, unit, decl_table);
10030   htab_delete (decl_table);
10031   unmark_dies (unit);
10032 }
10033
10034 /* Traverse the DIE and add a sibling attribute if it may have the
10035    effect of speeding up access to siblings.  To save some space,
10036    avoid generating sibling attributes for DIE's without children.  */
10037
10038 static void
10039 add_sibling_attributes (dw_die_ref die)
10040 {
10041   dw_die_ref c;
10042
10043   if (! die->die_child)
10044     return;
10045
10046   if (die->die_parent && die != die->die_parent->die_child)
10047     add_AT_die_ref (die, DW_AT_sibling, die->die_sib);
10048
10049   FOR_EACH_CHILD (die, c, add_sibling_attributes (c));
10050 }
10051
10052 /* Output all location lists for the DIE and its children.  */
10053
10054 static void
10055 output_location_lists (dw_die_ref die)
10056 {
10057   dw_die_ref c;
10058   dw_attr_ref a;
10059   unsigned ix;
10060
10061   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
10062     if (AT_class (a) == dw_val_class_loc_list)
10063       output_loc_list (AT_loc_list (a));
10064
10065   FOR_EACH_CHILD (die, c, output_location_lists (c));
10066 }
10067
10068 /* The format of each DIE (and its attribute value pairs) is encoded in an
10069    abbreviation table.  This routine builds the abbreviation table and assigns
10070    a unique abbreviation id for each abbreviation entry.  The children of each
10071    die are visited recursively.  */
10072
10073 static void
10074 build_abbrev_table (dw_die_ref die)
10075 {
10076   unsigned long abbrev_id;
10077   unsigned int n_alloc;
10078   dw_die_ref c;
10079   dw_attr_ref a;
10080   unsigned ix;
10081
10082   /* Scan the DIE references, and mark as external any that refer to
10083      DIEs from other CUs (i.e. those which are not marked).  */
10084   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
10085     if (AT_class (a) == dw_val_class_die_ref
10086         && AT_ref (a)->die_mark == 0)
10087       {
10088         gcc_assert (dwarf_version >= 4 || AT_ref (a)->die_id.die_symbol);
10089         set_AT_ref_external (a, 1);
10090       }
10091
10092   for (abbrev_id = 1; abbrev_id < abbrev_die_table_in_use; ++abbrev_id)
10093     {
10094       dw_die_ref abbrev = abbrev_die_table[abbrev_id];
10095       dw_attr_ref die_a, abbrev_a;
10096       unsigned ix;
10097       bool ok = true;
10098
10099       if (abbrev->die_tag != die->die_tag)
10100         continue;
10101       if ((abbrev->die_child != NULL) != (die->die_child != NULL))
10102         continue;
10103
10104       if (VEC_length (dw_attr_node, abbrev->die_attr)
10105           != VEC_length (dw_attr_node, die->die_attr))
10106         continue;
10107
10108       for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, die_a); ix++)
10109         {
10110           abbrev_a = VEC_index (dw_attr_node, abbrev->die_attr, ix);
10111           if ((abbrev_a->dw_attr != die_a->dw_attr)
10112               || (value_format (abbrev_a) != value_format (die_a)))
10113             {
10114               ok = false;
10115               break;
10116             }
10117         }
10118       if (ok)
10119         break;
10120     }
10121
10122   if (abbrev_id >= abbrev_die_table_in_use)
10123     {
10124       if (abbrev_die_table_in_use >= abbrev_die_table_allocated)
10125         {
10126           n_alloc = abbrev_die_table_allocated + ABBREV_DIE_TABLE_INCREMENT;
10127           abbrev_die_table = GGC_RESIZEVEC (dw_die_ref, abbrev_die_table,
10128                                             n_alloc);
10129
10130           memset (&abbrev_die_table[abbrev_die_table_allocated], 0,
10131                  (n_alloc - abbrev_die_table_allocated) * sizeof (dw_die_ref));
10132           abbrev_die_table_allocated = n_alloc;
10133         }
10134
10135       ++abbrev_die_table_in_use;
10136       abbrev_die_table[abbrev_id] = die;
10137     }
10138
10139   die->die_abbrev = abbrev_id;
10140   FOR_EACH_CHILD (die, c, build_abbrev_table (c));
10141 }
10142 \f
10143 /* Return the power-of-two number of bytes necessary to represent VALUE.  */
10144
10145 static int
10146 constant_size (unsigned HOST_WIDE_INT value)
10147 {
10148   int log;
10149
10150   if (value == 0)
10151     log = 0;
10152   else
10153     log = floor_log2 (value);
10154
10155   log = log / 8;
10156   log = 1 << (floor_log2 (log) + 1);
10157
10158   return log;
10159 }
10160
10161 /* Return the size of a DIE as it is represented in the
10162    .debug_info section.  */
10163
10164 static unsigned long
10165 size_of_die (dw_die_ref die)
10166 {
10167   unsigned long size = 0;
10168   dw_attr_ref a;
10169   unsigned ix;
10170
10171   size += size_of_uleb128 (die->die_abbrev);
10172   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
10173     {
10174       switch (AT_class (a))
10175         {
10176         case dw_val_class_addr:
10177           size += DWARF2_ADDR_SIZE;
10178           break;
10179         case dw_val_class_offset:
10180           size += DWARF_OFFSET_SIZE;
10181           break;
10182         case dw_val_class_loc:
10183           {
10184             unsigned long lsize = size_of_locs (AT_loc (a));
10185
10186             /* Block length.  */
10187             if (dwarf_version >= 4)
10188               size += size_of_uleb128 (lsize);
10189             else
10190               size += constant_size (lsize);
10191             size += lsize;
10192           }
10193           break;
10194         case dw_val_class_loc_list:
10195           size += DWARF_OFFSET_SIZE;
10196           break;
10197         case dw_val_class_range_list:
10198           size += DWARF_OFFSET_SIZE;
10199           break;
10200         case dw_val_class_const:
10201           size += size_of_sleb128 (AT_int (a));
10202           break;
10203         case dw_val_class_unsigned_const:
10204           size += constant_size (AT_unsigned (a));
10205           break;
10206         case dw_val_class_const_double:
10207           size += 2 * HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR;
10208           if (HOST_BITS_PER_WIDE_INT >= 64)
10209             size++; /* block */
10210           break;
10211         case dw_val_class_vec:
10212           size += constant_size (a->dw_attr_val.v.val_vec.length
10213                                  * a->dw_attr_val.v.val_vec.elt_size)
10214                   + a->dw_attr_val.v.val_vec.length
10215                     * a->dw_attr_val.v.val_vec.elt_size; /* block */
10216           break;
10217         case dw_val_class_flag:
10218           if (dwarf_version >= 4)
10219             /* Currently all add_AT_flag calls pass in 1 as last argument,
10220                so DW_FORM_flag_present can be used.  If that ever changes,
10221                we'll need to use DW_FORM_flag and have some optimization
10222                in build_abbrev_table that will change those to
10223                DW_FORM_flag_present if it is set to 1 in all DIEs using
10224                the same abbrev entry.  */
10225             gcc_assert (a->dw_attr_val.v.val_flag == 1);
10226           else
10227             size += 1;
10228           break;
10229         case dw_val_class_die_ref:
10230           if (AT_ref_external (a))
10231             {
10232               /* In DWARF4, we use DW_FORM_sig8; for earlier versions
10233                  we use DW_FORM_ref_addr.  In DWARF2, DW_FORM_ref_addr
10234                  is sized by target address length, whereas in DWARF3
10235                  it's always sized as an offset.  */
10236               if (dwarf_version >= 4)
10237                 size += DWARF_TYPE_SIGNATURE_SIZE;
10238               else if (dwarf_version == 2)
10239                 size += DWARF2_ADDR_SIZE;
10240               else
10241                 size += DWARF_OFFSET_SIZE;
10242             }
10243           else
10244             size += DWARF_OFFSET_SIZE;
10245           break;
10246         case dw_val_class_fde_ref:
10247           size += DWARF_OFFSET_SIZE;
10248           break;
10249         case dw_val_class_lbl_id:
10250           size += DWARF2_ADDR_SIZE;
10251           break;
10252         case dw_val_class_lineptr:
10253         case dw_val_class_macptr:
10254           size += DWARF_OFFSET_SIZE;
10255           break;
10256         case dw_val_class_str:
10257           if (AT_string_form (a) == DW_FORM_strp)
10258             size += DWARF_OFFSET_SIZE;
10259           else
10260             size += strlen (a->dw_attr_val.v.val_str->str) + 1;
10261           break;
10262         case dw_val_class_file:
10263           size += constant_size (maybe_emit_file (a->dw_attr_val.v.val_file));
10264           break;
10265         case dw_val_class_data8:
10266           size += 8;
10267           break;
10268         default:
10269           gcc_unreachable ();
10270         }
10271     }
10272
10273   return size;
10274 }
10275
10276 /* Size the debugging information associated with a given DIE.  Visits the
10277    DIE's children recursively.  Updates the global variable next_die_offset, on
10278    each time through.  Uses the current value of next_die_offset to update the
10279    die_offset field in each DIE.  */
10280
10281 static void
10282 calc_die_sizes (dw_die_ref die)
10283 {
10284   dw_die_ref c;
10285
10286   die->die_offset = next_die_offset;
10287   next_die_offset += size_of_die (die);
10288
10289   FOR_EACH_CHILD (die, c, calc_die_sizes (c));
10290
10291   if (die->die_child != NULL)
10292     /* Count the null byte used to terminate sibling lists.  */
10293     next_die_offset += 1;
10294 }
10295
10296 /* Set the marks for a die and its children.  We do this so
10297    that we know whether or not a reference needs to use FORM_ref_addr; only
10298    DIEs in the same CU will be marked.  We used to clear out the offset
10299    and use that as the flag, but ran into ordering problems.  */
10300
10301 static void
10302 mark_dies (dw_die_ref die)
10303 {
10304   dw_die_ref c;
10305
10306   gcc_assert (!die->die_mark);
10307
10308   die->die_mark = 1;
10309   FOR_EACH_CHILD (die, c, mark_dies (c));
10310 }
10311
10312 /* Clear the marks for a die and its children.  */
10313
10314 static void
10315 unmark_dies (dw_die_ref die)
10316 {
10317   dw_die_ref c;
10318
10319   if (dwarf_version < 4)
10320     gcc_assert (die->die_mark);
10321
10322   die->die_mark = 0;
10323   FOR_EACH_CHILD (die, c, unmark_dies (c));
10324 }
10325
10326 /* Clear the marks for a die, its children and referred dies.  */
10327
10328 static void
10329 unmark_all_dies (dw_die_ref die)
10330 {
10331   dw_die_ref c;
10332   dw_attr_ref a;
10333   unsigned ix;
10334
10335   if (!die->die_mark)
10336     return;
10337   die->die_mark = 0;
10338
10339   FOR_EACH_CHILD (die, c, unmark_all_dies (c));
10340
10341   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
10342     if (AT_class (a) == dw_val_class_die_ref)
10343       unmark_all_dies (AT_ref (a));
10344 }
10345
10346 /* Return the size of the .debug_pubnames or .debug_pubtypes table
10347    generated for the compilation unit.  */
10348
10349 static unsigned long
10350 size_of_pubnames (VEC (pubname_entry, gc) * names)
10351 {
10352   unsigned long size;
10353   unsigned i;
10354   pubname_ref p;
10355
10356   size = DWARF_PUBNAMES_HEADER_SIZE;
10357   for (i = 0; VEC_iterate (pubname_entry, names, i, p); i++)
10358     if (names != pubtype_table
10359         || p->die->die_offset != 0
10360         || !flag_eliminate_unused_debug_types)
10361       size += strlen (p->name) + DWARF_OFFSET_SIZE + 1;
10362
10363   size += DWARF_OFFSET_SIZE;
10364   return size;
10365 }
10366
10367 /* Return the size of the information in the .debug_aranges section.  */
10368
10369 static unsigned long
10370 size_of_aranges (void)
10371 {
10372   unsigned long size;
10373
10374   size = DWARF_ARANGES_HEADER_SIZE;
10375
10376   /* Count the address/length pair for this compilation unit.  */
10377   if (text_section_used)
10378     size += 2 * DWARF2_ADDR_SIZE;
10379   if (cold_text_section_used)
10380     size += 2 * DWARF2_ADDR_SIZE;
10381   size += 2 * DWARF2_ADDR_SIZE * arange_table_in_use;
10382
10383   /* Count the two zero words used to terminated the address range table.  */
10384   size += 2 * DWARF2_ADDR_SIZE;
10385   return size;
10386 }
10387 \f
10388 /* Select the encoding of an attribute value.  */
10389
10390 static enum dwarf_form
10391 value_format (dw_attr_ref a)
10392 {
10393   switch (a->dw_attr_val.val_class)
10394     {
10395     case dw_val_class_addr:
10396       /* Only very few attributes allow DW_FORM_addr.  */
10397       switch (a->dw_attr)
10398         {
10399         case DW_AT_low_pc:
10400         case DW_AT_high_pc:
10401         case DW_AT_entry_pc:
10402         case DW_AT_trampoline:
10403           return DW_FORM_addr;
10404         default:
10405           break;
10406         }
10407       switch (DWARF2_ADDR_SIZE)
10408         {
10409         case 1:
10410           return DW_FORM_data1;
10411         case 2:
10412           return DW_FORM_data2;
10413         case 4:
10414           return DW_FORM_data4;
10415         case 8:
10416           return DW_FORM_data8;
10417         default:
10418           gcc_unreachable ();
10419         }
10420     case dw_val_class_range_list:
10421     case dw_val_class_loc_list:
10422       if (dwarf_version >= 4)
10423         return DW_FORM_sec_offset;
10424       /* FALLTHRU */
10425     case dw_val_class_offset:
10426       switch (DWARF_OFFSET_SIZE)
10427         {
10428         case 4:
10429           return DW_FORM_data4;
10430         case 8:
10431           return DW_FORM_data8;
10432         default:
10433           gcc_unreachable ();
10434         }
10435     case dw_val_class_loc:
10436       if (dwarf_version >= 4)
10437         return DW_FORM_exprloc;
10438       switch (constant_size (size_of_locs (AT_loc (a))))
10439         {
10440         case 1:
10441           return DW_FORM_block1;
10442         case 2:
10443           return DW_FORM_block2;
10444         default:
10445           gcc_unreachable ();
10446         }
10447     case dw_val_class_const:
10448       return DW_FORM_sdata;
10449     case dw_val_class_unsigned_const:
10450       switch (constant_size (AT_unsigned (a)))
10451         {
10452         case 1:
10453           return DW_FORM_data1;
10454         case 2:
10455           return DW_FORM_data2;
10456         case 4:
10457           return DW_FORM_data4;
10458         case 8:
10459           return DW_FORM_data8;
10460         default:
10461           gcc_unreachable ();
10462         }
10463     case dw_val_class_const_double:
10464       switch (HOST_BITS_PER_WIDE_INT)
10465         {
10466         case 8:
10467           return DW_FORM_data2;
10468         case 16:
10469           return DW_FORM_data4;
10470         case 32:
10471           return DW_FORM_data8;
10472         case 64:
10473         default:
10474           return DW_FORM_block1;
10475         }
10476     case dw_val_class_vec:
10477       switch (constant_size (a->dw_attr_val.v.val_vec.length
10478                              * a->dw_attr_val.v.val_vec.elt_size))
10479         {
10480         case 1:
10481           return DW_FORM_block1;
10482         case 2:
10483           return DW_FORM_block2;
10484         case 4:
10485           return DW_FORM_block4;
10486         default:
10487           gcc_unreachable ();
10488         }
10489     case dw_val_class_flag:
10490       if (dwarf_version >= 4)
10491         {
10492           /* Currently all add_AT_flag calls pass in 1 as last argument,
10493              so DW_FORM_flag_present can be used.  If that ever changes,
10494              we'll need to use DW_FORM_flag and have some optimization
10495              in build_abbrev_table that will change those to
10496              DW_FORM_flag_present if it is set to 1 in all DIEs using
10497              the same abbrev entry.  */
10498           gcc_assert (a->dw_attr_val.v.val_flag == 1);
10499           return DW_FORM_flag_present;
10500         }
10501       return DW_FORM_flag;
10502     case dw_val_class_die_ref:
10503       if (AT_ref_external (a))
10504         return dwarf_version >= 4 ? DW_FORM_sig8 : DW_FORM_ref_addr;
10505       else
10506         return DW_FORM_ref;
10507     case dw_val_class_fde_ref:
10508       return DW_FORM_data;
10509     case dw_val_class_lbl_id:
10510       return DW_FORM_addr;
10511     case dw_val_class_lineptr:
10512     case dw_val_class_macptr:
10513       return dwarf_version >= 4 ? DW_FORM_sec_offset : DW_FORM_data;
10514     case dw_val_class_str:
10515       return AT_string_form (a);
10516     case dw_val_class_file:
10517       switch (constant_size (maybe_emit_file (a->dw_attr_val.v.val_file)))
10518         {
10519         case 1:
10520           return DW_FORM_data1;
10521         case 2:
10522           return DW_FORM_data2;
10523         case 4:
10524           return DW_FORM_data4;
10525         default:
10526           gcc_unreachable ();
10527         }
10528
10529     case dw_val_class_data8:
10530       return DW_FORM_data8;
10531
10532     default:
10533       gcc_unreachable ();
10534     }
10535 }
10536
10537 /* Output the encoding of an attribute value.  */
10538
10539 static void
10540 output_value_format (dw_attr_ref a)
10541 {
10542   enum dwarf_form form = value_format (a);
10543
10544   dw2_asm_output_data_uleb128 (form, "(%s)", dwarf_form_name (form));
10545 }
10546
10547 /* Output the .debug_abbrev section which defines the DIE abbreviation
10548    table.  */
10549
10550 static void
10551 output_abbrev_section (void)
10552 {
10553   unsigned long abbrev_id;
10554
10555   for (abbrev_id = 1; abbrev_id < abbrev_die_table_in_use; ++abbrev_id)
10556     {
10557       dw_die_ref abbrev = abbrev_die_table[abbrev_id];
10558       unsigned ix;
10559       dw_attr_ref a_attr;
10560
10561       dw2_asm_output_data_uleb128 (abbrev_id, "(abbrev code)");
10562       dw2_asm_output_data_uleb128 (abbrev->die_tag, "(TAG: %s)",
10563                                    dwarf_tag_name (abbrev->die_tag));
10564
10565       if (abbrev->die_child != NULL)
10566         dw2_asm_output_data (1, DW_children_yes, "DW_children_yes");
10567       else
10568         dw2_asm_output_data (1, DW_children_no, "DW_children_no");
10569
10570       for (ix = 0; VEC_iterate (dw_attr_node, abbrev->die_attr, ix, a_attr);
10571            ix++)
10572         {
10573           dw2_asm_output_data_uleb128 (a_attr->dw_attr, "(%s)",
10574                                        dwarf_attr_name (a_attr->dw_attr));
10575           output_value_format (a_attr);
10576         }
10577
10578       dw2_asm_output_data (1, 0, NULL);
10579       dw2_asm_output_data (1, 0, NULL);
10580     }
10581
10582   /* Terminate the table.  */
10583   dw2_asm_output_data (1, 0, NULL);
10584 }
10585
10586 /* Output a symbol we can use to refer to this DIE from another CU.  */
10587
10588 static inline void
10589 output_die_symbol (dw_die_ref die)
10590 {
10591   char *sym = die->die_id.die_symbol;
10592
10593   if (sym == 0)
10594     return;
10595
10596   if (strncmp (sym, DIE_LABEL_PREFIX, sizeof (DIE_LABEL_PREFIX) - 1) == 0)
10597     /* We make these global, not weak; if the target doesn't support
10598        .linkonce, it doesn't support combining the sections, so debugging
10599        will break.  */
10600     targetm.asm_out.globalize_label (asm_out_file, sym);
10601
10602   ASM_OUTPUT_LABEL (asm_out_file, sym);
10603 }
10604
10605 /* Return a new location list, given the begin and end range, and the
10606    expression.  */
10607
10608 static inline dw_loc_list_ref
10609 new_loc_list (dw_loc_descr_ref expr, const char *begin, const char *end,
10610               const char *section)
10611 {
10612   dw_loc_list_ref retlist = GGC_CNEW (dw_loc_list_node);
10613
10614   retlist->begin = begin;
10615   retlist->end = end;
10616   retlist->expr = expr;
10617   retlist->section = section;
10618
10619   return retlist;
10620 }
10621
10622 /* Generate a new internal symbol for this location list node, if it
10623    hasn't got one yet.  */
10624
10625 static inline void
10626 gen_llsym (dw_loc_list_ref list)
10627 {
10628   gcc_assert (!list->ll_symbol);
10629   list->ll_symbol = gen_internal_sym ("LLST");
10630 }
10631
10632 /* Output the location list given to us.  */
10633
10634 static void
10635 output_loc_list (dw_loc_list_ref list_head)
10636 {
10637   dw_loc_list_ref curr = list_head;
10638
10639   ASM_OUTPUT_LABEL (asm_out_file, list_head->ll_symbol);
10640
10641   /* Walk the location list, and output each range + expression.  */
10642   for (curr = list_head; curr != NULL; curr = curr->dw_loc_next)
10643     {
10644       unsigned long size;
10645       /* Don't output an entry that starts and ends at the same address.  */
10646       if (strcmp (curr->begin, curr->end) == 0)
10647         continue;
10648       if (!have_multiple_function_sections)
10649         {
10650           dw2_asm_output_delta (DWARF2_ADDR_SIZE, curr->begin, curr->section,
10651                                 "Location list begin address (%s)",
10652                                 list_head->ll_symbol);
10653           dw2_asm_output_delta (DWARF2_ADDR_SIZE, curr->end, curr->section,
10654                                 "Location list end address (%s)",
10655                                 list_head->ll_symbol);
10656         }
10657       else
10658         {
10659           dw2_asm_output_addr (DWARF2_ADDR_SIZE, curr->begin,
10660                                "Location list begin address (%s)",
10661                                list_head->ll_symbol);
10662           dw2_asm_output_addr (DWARF2_ADDR_SIZE, curr->end,
10663                                "Location list end address (%s)",
10664                                list_head->ll_symbol);
10665         }
10666       size = size_of_locs (curr->expr);
10667
10668       /* Output the block length for this list of location operations.  */
10669       gcc_assert (size <= 0xffff);
10670       dw2_asm_output_data (2, size, "%s", "Location expression size");
10671
10672       output_loc_sequence (curr->expr);
10673     }
10674
10675   dw2_asm_output_data (DWARF2_ADDR_SIZE, 0,
10676                        "Location list terminator begin (%s)",
10677                        list_head->ll_symbol);
10678   dw2_asm_output_data (DWARF2_ADDR_SIZE, 0,
10679                        "Location list terminator end (%s)",
10680                        list_head->ll_symbol);
10681 }
10682
10683 /* Output a type signature.  */
10684
10685 static inline void
10686 output_signature (const char *sig, const char *name)
10687 {
10688   int i;
10689
10690   for (i = 0; i < DWARF_TYPE_SIGNATURE_SIZE; i++)
10691     dw2_asm_output_data (1, sig[i], i == 0 ? "%s" : NULL, name);
10692 }
10693
10694 /* Output the DIE and its attributes.  Called recursively to generate
10695    the definitions of each child DIE.  */
10696
10697 static void
10698 output_die (dw_die_ref die)
10699 {
10700   dw_attr_ref a;
10701   dw_die_ref c;
10702   unsigned long size;
10703   unsigned ix;
10704
10705   /* If someone in another CU might refer to us, set up a symbol for
10706      them to point to.  */
10707   if (dwarf_version < 4 && die->die_id.die_symbol)
10708     output_die_symbol (die);
10709
10710   dw2_asm_output_data_uleb128 (die->die_abbrev, "(DIE (%#lx) %s)",
10711                                (unsigned long)die->die_offset,
10712                                dwarf_tag_name (die->die_tag));
10713
10714   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
10715     {
10716       const char *name = dwarf_attr_name (a->dw_attr);
10717
10718       switch (AT_class (a))
10719         {
10720         case dw_val_class_addr:
10721           dw2_asm_output_addr_rtx (DWARF2_ADDR_SIZE, AT_addr (a), "%s", name);
10722           break;
10723
10724         case dw_val_class_offset:
10725           dw2_asm_output_data (DWARF_OFFSET_SIZE, a->dw_attr_val.v.val_offset,
10726                                "%s", name);
10727           break;
10728
10729         case dw_val_class_range_list:
10730           {
10731             char *p = strchr (ranges_section_label, '\0');
10732
10733             sprintf (p, "+" HOST_WIDE_INT_PRINT_HEX,
10734                      a->dw_attr_val.v.val_offset);
10735             dw2_asm_output_offset (DWARF_OFFSET_SIZE, ranges_section_label,
10736                                    debug_ranges_section, "%s", name);
10737             *p = '\0';
10738           }
10739           break;
10740
10741         case dw_val_class_loc:
10742           size = size_of_locs (AT_loc (a));
10743
10744           /* Output the block length for this list of location operations.  */
10745           if (dwarf_version >= 4)
10746             dw2_asm_output_data_uleb128 (size, "%s", name);
10747           else
10748             dw2_asm_output_data (constant_size (size), size, "%s", name);
10749
10750           output_loc_sequence (AT_loc (a));
10751           break;
10752
10753         case dw_val_class_const:
10754           /* ??? It would be slightly more efficient to use a scheme like is
10755              used for unsigned constants below, but gdb 4.x does not sign
10756              extend.  Gdb 5.x does sign extend.  */
10757           dw2_asm_output_data_sleb128 (AT_int (a), "%s", name);
10758           break;
10759
10760         case dw_val_class_unsigned_const:
10761           dw2_asm_output_data (constant_size (AT_unsigned (a)),
10762                                AT_unsigned (a), "%s", name);
10763           break;
10764
10765         case dw_val_class_const_double:
10766           {
10767             unsigned HOST_WIDE_INT first, second;
10768
10769             if (HOST_BITS_PER_WIDE_INT >= 64)
10770               dw2_asm_output_data (1,
10771                                    2 * HOST_BITS_PER_WIDE_INT
10772                                    / HOST_BITS_PER_CHAR,
10773                                    NULL);
10774
10775             if (WORDS_BIG_ENDIAN)
10776               {
10777                 first = a->dw_attr_val.v.val_double.high;
10778                 second = a->dw_attr_val.v.val_double.low;
10779               }
10780             else
10781               {
10782                 first = a->dw_attr_val.v.val_double.low;
10783                 second = a->dw_attr_val.v.val_double.high;
10784               }
10785
10786             dw2_asm_output_data (HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR,
10787                                  first, name);
10788             dw2_asm_output_data (HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR,
10789                                  second, NULL);
10790           }
10791           break;
10792
10793         case dw_val_class_vec:
10794           {
10795             unsigned int elt_size = a->dw_attr_val.v.val_vec.elt_size;
10796             unsigned int len = a->dw_attr_val.v.val_vec.length;
10797             unsigned int i;
10798             unsigned char *p;
10799
10800             dw2_asm_output_data (constant_size (len * elt_size),
10801                                  len * elt_size, "%s", name);
10802             if (elt_size > sizeof (HOST_WIDE_INT))
10803               {
10804                 elt_size /= 2;
10805                 len *= 2;
10806               }
10807             for (i = 0, p = a->dw_attr_val.v.val_vec.array;
10808                  i < len;
10809                  i++, p += elt_size)
10810               dw2_asm_output_data (elt_size, extract_int (p, elt_size),
10811                                    "fp or vector constant word %u", i);
10812             break;
10813           }
10814
10815         case dw_val_class_flag:
10816           if (dwarf_version >= 4)
10817             {
10818               /* Currently all add_AT_flag calls pass in 1 as last argument,
10819                  so DW_FORM_flag_present can be used.  If that ever changes,
10820                  we'll need to use DW_FORM_flag and have some optimization
10821                  in build_abbrev_table that will change those to
10822                  DW_FORM_flag_present if it is set to 1 in all DIEs using
10823                  the same abbrev entry.  */
10824               gcc_assert (AT_flag (a) == 1);
10825               if (flag_debug_asm)
10826                 fprintf (asm_out_file, "\t\t\t%s %s\n",
10827                          ASM_COMMENT_START, name);
10828               break;
10829             }
10830           dw2_asm_output_data (1, AT_flag (a), "%s", name);
10831           break;
10832
10833         case dw_val_class_loc_list:
10834           {
10835             char *sym = AT_loc_list (a)->ll_symbol;
10836
10837             gcc_assert (sym);
10838             dw2_asm_output_offset (DWARF_OFFSET_SIZE, sym, debug_loc_section,
10839                                    "%s", name);
10840           }
10841           break;
10842
10843         case dw_val_class_die_ref:
10844           if (AT_ref_external (a))
10845             {
10846               if (dwarf_version >= 4)
10847                 {
10848                   comdat_type_node_ref type_node =
10849                     AT_ref (a)->die_id.die_type_node;
10850
10851                   gcc_assert (type_node);
10852                   output_signature (type_node->signature, name);
10853                 }
10854               else
10855                 {
10856                   char *sym = AT_ref (a)->die_id.die_symbol;
10857                   int size;
10858
10859                   gcc_assert (sym);
10860                   /* In DWARF2, DW_FORM_ref_addr is sized by target address
10861                      length, whereas in DWARF3 it's always sized as an
10862                      offset.  */
10863                   if (dwarf_version == 2)
10864                     size = DWARF2_ADDR_SIZE;
10865                   else
10866                     size = DWARF_OFFSET_SIZE;
10867                   dw2_asm_output_offset (size, sym, debug_info_section, "%s",
10868                                          name);
10869                 }
10870             }
10871           else
10872             {
10873               gcc_assert (AT_ref (a)->die_offset);
10874               dw2_asm_output_data (DWARF_OFFSET_SIZE, AT_ref (a)->die_offset,
10875                                    "%s", name);
10876             }
10877           break;
10878
10879         case dw_val_class_fde_ref:
10880           {
10881             char l1[20];
10882
10883             ASM_GENERATE_INTERNAL_LABEL (l1, FDE_LABEL,
10884                                          a->dw_attr_val.v.val_fde_index * 2);
10885             dw2_asm_output_offset (DWARF_OFFSET_SIZE, l1, debug_frame_section,
10886                                    "%s", name);
10887           }
10888           break;
10889
10890         case dw_val_class_lbl_id:
10891           dw2_asm_output_addr (DWARF2_ADDR_SIZE, AT_lbl (a), "%s", name);
10892           break;
10893
10894         case dw_val_class_lineptr:
10895           dw2_asm_output_offset (DWARF_OFFSET_SIZE, AT_lbl (a),
10896                                  debug_line_section, "%s", name);
10897           break;
10898
10899         case dw_val_class_macptr:
10900           dw2_asm_output_offset (DWARF_OFFSET_SIZE, AT_lbl (a),
10901                                  debug_macinfo_section, "%s", name);
10902           break;
10903
10904         case dw_val_class_str:
10905           if (AT_string_form (a) == DW_FORM_strp)
10906             dw2_asm_output_offset (DWARF_OFFSET_SIZE,
10907                                    a->dw_attr_val.v.val_str->label,
10908                                    debug_str_section,
10909                                    "%s: \"%s\"", name, AT_string (a));
10910           else
10911             dw2_asm_output_nstring (AT_string (a), -1, "%s", name);
10912           break;
10913
10914         case dw_val_class_file:
10915           {
10916             int f = maybe_emit_file (a->dw_attr_val.v.val_file);
10917
10918             dw2_asm_output_data (constant_size (f), f, "%s (%s)", name,
10919                                  a->dw_attr_val.v.val_file->filename);
10920             break;
10921           }
10922
10923         case dw_val_class_data8:
10924           {
10925             int i;
10926
10927             for (i = 0; i < 8; i++)
10928               dw2_asm_output_data (1, a->dw_attr_val.v.val_data8[i],
10929                                    i == 0 ? "%s" : NULL, name);
10930             break;
10931           }
10932
10933         default:
10934           gcc_unreachable ();
10935         }
10936     }
10937
10938   FOR_EACH_CHILD (die, c, output_die (c));
10939
10940   /* Add null byte to terminate sibling list.  */
10941   if (die->die_child != NULL)
10942     dw2_asm_output_data (1, 0, "end of children of DIE %#lx",
10943                          (unsigned long) die->die_offset);
10944 }
10945
10946 /* Output the compilation unit that appears at the beginning of the
10947    .debug_info section, and precedes the DIE descriptions.  */
10948
10949 static void
10950 output_compilation_unit_header (void)
10951 {
10952   int ver = dwarf_version;
10953
10954   if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
10955     dw2_asm_output_data (4, 0xffffffff,
10956       "Initial length escape value indicating 64-bit DWARF extension");
10957   dw2_asm_output_data (DWARF_OFFSET_SIZE,
10958                        next_die_offset - DWARF_INITIAL_LENGTH_SIZE,
10959                        "Length of Compilation Unit Info");
10960   dw2_asm_output_data (2, ver, "DWARF version number");
10961   dw2_asm_output_offset (DWARF_OFFSET_SIZE, abbrev_section_label,
10962                          debug_abbrev_section,
10963                          "Offset Into Abbrev. Section");
10964   dw2_asm_output_data (1, DWARF2_ADDR_SIZE, "Pointer Size (in bytes)");
10965 }
10966
10967 /* Output the compilation unit DIE and its children.  */
10968
10969 static void
10970 output_comp_unit (dw_die_ref die, int output_if_empty)
10971 {
10972   const char *secname;
10973   char *oldsym, *tmp;
10974
10975   /* Unless we are outputting main CU, we may throw away empty ones.  */
10976   if (!output_if_empty && die->die_child == NULL)
10977     return;
10978
10979   /* Even if there are no children of this DIE, we must output the information
10980      about the compilation unit.  Otherwise, on an empty translation unit, we
10981      will generate a present, but empty, .debug_info section.  IRIX 6.5 `nm'
10982      will then complain when examining the file.  First mark all the DIEs in
10983      this CU so we know which get local refs.  */
10984   mark_dies (die);
10985
10986   build_abbrev_table (die);
10987
10988   /* Initialize the beginning DIE offset - and calculate sizes/offsets.  */
10989   next_die_offset = DWARF_COMPILE_UNIT_HEADER_SIZE;
10990   calc_die_sizes (die);
10991
10992   oldsym = die->die_id.die_symbol;
10993   if (oldsym)
10994     {
10995       tmp = XALLOCAVEC (char, strlen (oldsym) + 24);
10996
10997       sprintf (tmp, ".gnu.linkonce.wi.%s", oldsym);
10998       secname = tmp;
10999       die->die_id.die_symbol = NULL;
11000       switch_to_section (get_section (secname, SECTION_DEBUG, NULL));
11001     }
11002   else
11003     switch_to_section (debug_info_section);
11004
11005   /* Output debugging information.  */
11006   output_compilation_unit_header ();
11007   output_die (die);
11008
11009   /* Leave the marks on the main CU, so we can check them in
11010      output_pubnames.  */
11011   if (oldsym)
11012     {
11013       unmark_dies (die);
11014       die->die_id.die_symbol = oldsym;
11015     }
11016 }
11017
11018 /* Output a comdat type unit DIE and its children.  */
11019
11020 static void
11021 output_comdat_type_unit (comdat_type_node *node)
11022 {
11023   const char *secname;
11024   char *tmp;
11025   int i;
11026 #if defined (OBJECT_FORMAT_ELF)
11027   tree comdat_key;
11028 #endif
11029
11030   /* First mark all the DIEs in this CU so we know which get local refs.  */
11031   mark_dies (node->root_die);
11032
11033   build_abbrev_table (node->root_die);
11034
11035   /* Initialize the beginning DIE offset - and calculate sizes/offsets.  */
11036   next_die_offset = DWARF_COMDAT_TYPE_UNIT_HEADER_SIZE;
11037   calc_die_sizes (node->root_die);
11038
11039 #if defined (OBJECT_FORMAT_ELF)
11040   secname = ".debug_types";
11041   tmp = XALLOCAVEC (char, 4 + DWARF_TYPE_SIGNATURE_SIZE * 2);
11042   sprintf (tmp, "wt.");
11043   for (i = 0; i < DWARF_TYPE_SIGNATURE_SIZE; i++)
11044     sprintf (tmp + 3 + i * 2, "%02x", node->signature[i] & 0xff);
11045   comdat_key = get_identifier (tmp);
11046   targetm.asm_out.named_section (secname,
11047                                  SECTION_DEBUG | SECTION_LINKONCE,
11048                                  comdat_key);
11049 #else
11050   tmp = XALLOCAVEC (char, 18 + DWARF_TYPE_SIGNATURE_SIZE * 2);
11051   sprintf (tmp, ".gnu.linkonce.wt.");
11052   for (i = 0; i < DWARF_TYPE_SIGNATURE_SIZE; i++)
11053     sprintf (tmp + 17 + i * 2, "%02x", node->signature[i] & 0xff);
11054   secname = tmp;
11055   switch_to_section (get_section (secname, SECTION_DEBUG, NULL));
11056 #endif
11057
11058   /* Output debugging information.  */
11059   output_compilation_unit_header ();
11060   output_signature (node->signature, "Type Signature");
11061   dw2_asm_output_data (DWARF_OFFSET_SIZE, node->type_die->die_offset,
11062                        "Offset to Type DIE");
11063   output_die (node->root_die);
11064
11065   unmark_dies (node->root_die);
11066 }
11067
11068 /* Return the DWARF2/3 pubname associated with a decl.  */
11069
11070 static const char *
11071 dwarf2_name (tree decl, int scope)
11072 {
11073   return lang_hooks.dwarf_name (decl, scope ? 1 : 0);
11074 }
11075
11076 /* Add a new entry to .debug_pubnames if appropriate.  */
11077
11078 static void
11079 add_pubname_string (const char *str, dw_die_ref die)
11080 {
11081   pubname_entry e;
11082
11083   e.die = die;
11084   e.name = xstrdup (str);
11085   VEC_safe_push (pubname_entry, gc, pubname_table, &e);
11086 }
11087
11088 static void
11089 add_pubname (tree decl, dw_die_ref die)
11090 {
11091   if (TREE_PUBLIC (decl))
11092     {
11093       const char *name = dwarf2_name (decl, 1);
11094       if (name)
11095         add_pubname_string (name, die);
11096     }
11097 }
11098
11099 /* Add a new entry to .debug_pubtypes if appropriate.  */
11100
11101 static void
11102 add_pubtype (tree decl, dw_die_ref die)
11103 {
11104   pubname_entry e;
11105
11106   e.name = NULL;
11107   if ((TREE_PUBLIC (decl)
11108        || die->die_parent == comp_unit_die)
11109       && (die->die_tag == DW_TAG_typedef || COMPLETE_TYPE_P (decl)))
11110     {
11111       e.die = die;
11112       if (TYPE_P (decl))
11113         {
11114           if (TYPE_NAME (decl))
11115             {
11116               if (TREE_CODE (TYPE_NAME (decl)) == IDENTIFIER_NODE)
11117                 e.name = IDENTIFIER_POINTER (TYPE_NAME (decl));
11118               else if (TREE_CODE (TYPE_NAME (decl)) == TYPE_DECL
11119                        && DECL_NAME (TYPE_NAME (decl)))
11120                 e.name = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (decl)));
11121               else
11122                e.name = xstrdup ((const char *) get_AT_string (die, DW_AT_name));
11123             }
11124         }
11125       else
11126         {
11127           e.name = dwarf2_name (decl, 1);
11128           if (e.name)
11129             e.name = xstrdup (e.name);
11130         }
11131
11132       /* If we don't have a name for the type, there's no point in adding
11133          it to the table.  */
11134       if (e.name && e.name[0] != '\0')
11135         VEC_safe_push (pubname_entry, gc, pubtype_table, &e);
11136     }
11137 }
11138
11139 /* Output the public names table used to speed up access to externally
11140    visible names; or the public types table used to find type definitions.  */
11141
11142 static void
11143 output_pubnames (VEC (pubname_entry, gc) * names)
11144 {
11145   unsigned i;
11146   unsigned long pubnames_length = size_of_pubnames (names);
11147   pubname_ref pub;
11148
11149   if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
11150     dw2_asm_output_data (4, 0xffffffff,
11151       "Initial length escape value indicating 64-bit DWARF extension");
11152   if (names == pubname_table)
11153     dw2_asm_output_data (DWARF_OFFSET_SIZE, pubnames_length,
11154                          "Length of Public Names Info");
11155   else
11156     dw2_asm_output_data (DWARF_OFFSET_SIZE, pubnames_length,
11157                          "Length of Public Type Names Info");
11158   /* Version number for pubnames/pubtypes is still 2, even in DWARF3.  */
11159   dw2_asm_output_data (2, 2, "DWARF Version");
11160   dw2_asm_output_offset (DWARF_OFFSET_SIZE, debug_info_section_label,
11161                          debug_info_section,
11162                          "Offset of Compilation Unit Info");
11163   dw2_asm_output_data (DWARF_OFFSET_SIZE, next_die_offset,
11164                        "Compilation Unit Length");
11165
11166   for (i = 0; VEC_iterate (pubname_entry, names, i, pub); i++)
11167     {
11168       /* We shouldn't see pubnames for DIEs outside of the main CU.  */
11169       if (names == pubname_table)
11170         gcc_assert (pub->die->die_mark);
11171
11172       if (names != pubtype_table
11173           || pub->die->die_offset != 0
11174           || !flag_eliminate_unused_debug_types)
11175         {
11176           dw2_asm_output_data (DWARF_OFFSET_SIZE, pub->die->die_offset,
11177                                "DIE offset");
11178
11179           dw2_asm_output_nstring (pub->name, -1, "external name");
11180         }
11181     }
11182
11183   dw2_asm_output_data (DWARF_OFFSET_SIZE, 0, NULL);
11184 }
11185
11186 /* Add a new entry to .debug_aranges if appropriate.  */
11187
11188 static void
11189 add_arange (tree decl, dw_die_ref die)
11190 {
11191   if (! DECL_SECTION_NAME (decl))
11192     return;
11193
11194   if (arange_table_in_use == arange_table_allocated)
11195     {
11196       arange_table_allocated += ARANGE_TABLE_INCREMENT;
11197       arange_table = GGC_RESIZEVEC (dw_die_ref, arange_table,
11198                                     arange_table_allocated);
11199       memset (arange_table + arange_table_in_use, 0,
11200               ARANGE_TABLE_INCREMENT * sizeof (dw_die_ref));
11201     }
11202
11203   arange_table[arange_table_in_use++] = die;
11204 }
11205
11206 /* Output the information that goes into the .debug_aranges table.
11207    Namely, define the beginning and ending address range of the
11208    text section generated for this compilation unit.  */
11209
11210 static void
11211 output_aranges (void)
11212 {
11213   unsigned i;
11214   unsigned long aranges_length = size_of_aranges ();
11215
11216   if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
11217     dw2_asm_output_data (4, 0xffffffff,
11218       "Initial length escape value indicating 64-bit DWARF extension");
11219   dw2_asm_output_data (DWARF_OFFSET_SIZE, aranges_length,
11220                        "Length of Address Ranges Info");
11221   /* Version number for aranges is still 2, even in DWARF3.  */
11222   dw2_asm_output_data (2, 2, "DWARF Version");
11223   dw2_asm_output_offset (DWARF_OFFSET_SIZE, debug_info_section_label,
11224                          debug_info_section,
11225                          "Offset of Compilation Unit Info");
11226   dw2_asm_output_data (1, DWARF2_ADDR_SIZE, "Size of Address");
11227   dw2_asm_output_data (1, 0, "Size of Segment Descriptor");
11228
11229   /* We need to align to twice the pointer size here.  */
11230   if (DWARF_ARANGES_PAD_SIZE)
11231     {
11232       /* Pad using a 2 byte words so that padding is correct for any
11233          pointer size.  */
11234       dw2_asm_output_data (2, 0, "Pad to %d byte boundary",
11235                            2 * DWARF2_ADDR_SIZE);
11236       for (i = 2; i < (unsigned) DWARF_ARANGES_PAD_SIZE; i += 2)
11237         dw2_asm_output_data (2, 0, NULL);
11238     }
11239
11240   /* It is necessary not to output these entries if the sections were
11241      not used; if the sections were not used, the length will be 0 and
11242      the address may end up as 0 if the section is discarded by ld
11243      --gc-sections, leaving an invalid (0, 0) entry that can be
11244      confused with the terminator.  */
11245   if (text_section_used)
11246     {
11247       dw2_asm_output_addr (DWARF2_ADDR_SIZE, text_section_label, "Address");
11248       dw2_asm_output_delta (DWARF2_ADDR_SIZE, text_end_label,
11249                             text_section_label, "Length");
11250     }
11251   if (cold_text_section_used)
11252     {
11253       dw2_asm_output_addr (DWARF2_ADDR_SIZE, cold_text_section_label,
11254                            "Address");
11255       dw2_asm_output_delta (DWARF2_ADDR_SIZE, cold_end_label,
11256                             cold_text_section_label, "Length");
11257     }
11258
11259   for (i = 0; i < arange_table_in_use; i++)
11260     {
11261       dw_die_ref die = arange_table[i];
11262
11263       /* We shouldn't see aranges for DIEs outside of the main CU.  */
11264       gcc_assert (die->die_mark);
11265
11266       if (die->die_tag == DW_TAG_subprogram)
11267         {
11268           dw2_asm_output_addr (DWARF2_ADDR_SIZE, get_AT_low_pc (die),
11269                                "Address");
11270           dw2_asm_output_delta (DWARF2_ADDR_SIZE, get_AT_hi_pc (die),
11271                                 get_AT_low_pc (die), "Length");
11272         }
11273       else
11274         {
11275           /* A static variable; extract the symbol from DW_AT_location.
11276              Note that this code isn't currently hit, as we only emit
11277              aranges for functions (jason 9/23/99).  */
11278           dw_attr_ref a = get_AT (die, DW_AT_location);
11279           dw_loc_descr_ref loc;
11280
11281           gcc_assert (a && AT_class (a) == dw_val_class_loc);
11282
11283           loc = AT_loc (a);
11284           gcc_assert (loc->dw_loc_opc == DW_OP_addr);
11285
11286           dw2_asm_output_addr_rtx (DWARF2_ADDR_SIZE,
11287                                    loc->dw_loc_oprnd1.v.val_addr, "Address");
11288           dw2_asm_output_data (DWARF2_ADDR_SIZE,
11289                                get_AT_unsigned (die, DW_AT_byte_size),
11290                                "Length");
11291         }
11292     }
11293
11294   /* Output the terminator words.  */
11295   dw2_asm_output_data (DWARF2_ADDR_SIZE, 0, NULL);
11296   dw2_asm_output_data (DWARF2_ADDR_SIZE, 0, NULL);
11297 }
11298
11299 /* Add a new entry to .debug_ranges.  Return the offset at which it
11300    was placed.  */
11301
11302 static unsigned int
11303 add_ranges_num (int num)
11304 {
11305   unsigned int in_use = ranges_table_in_use;
11306
11307   if (in_use == ranges_table_allocated)
11308     {
11309       ranges_table_allocated += RANGES_TABLE_INCREMENT;
11310       ranges_table = GGC_RESIZEVEC (struct dw_ranges_struct, ranges_table,
11311                                     ranges_table_allocated);
11312       memset (ranges_table + ranges_table_in_use, 0,
11313               RANGES_TABLE_INCREMENT * sizeof (struct dw_ranges_struct));
11314     }
11315
11316   ranges_table[in_use].num = num;
11317   ranges_table_in_use = in_use + 1;
11318
11319   return in_use * 2 * DWARF2_ADDR_SIZE;
11320 }
11321
11322 /* Add a new entry to .debug_ranges corresponding to a block, or a
11323    range terminator if BLOCK is NULL.  */
11324
11325 static unsigned int
11326 add_ranges (const_tree block)
11327 {
11328   return add_ranges_num (block ? BLOCK_NUMBER (block) : 0);
11329 }
11330
11331 /* Add a new entry to .debug_ranges corresponding to a pair of
11332    labels.  */
11333
11334 static void
11335 add_ranges_by_labels (dw_die_ref die, const char *begin, const char *end,
11336                       bool *added)
11337 {
11338   unsigned int in_use = ranges_by_label_in_use;
11339   unsigned int offset;
11340
11341   if (in_use == ranges_by_label_allocated)
11342     {
11343       ranges_by_label_allocated += RANGES_TABLE_INCREMENT;
11344       ranges_by_label = GGC_RESIZEVEC (struct dw_ranges_by_label_struct,
11345                                        ranges_by_label,
11346                                        ranges_by_label_allocated);
11347       memset (ranges_by_label + ranges_by_label_in_use, 0,
11348               RANGES_TABLE_INCREMENT
11349               * sizeof (struct dw_ranges_by_label_struct));
11350     }
11351
11352   ranges_by_label[in_use].begin = begin;
11353   ranges_by_label[in_use].end = end;
11354   ranges_by_label_in_use = in_use + 1;
11355
11356   offset = add_ranges_num (-(int)in_use - 1);
11357   if (!*added)
11358     {
11359       add_AT_range_list (die, DW_AT_ranges, offset);
11360       *added = true;
11361     }
11362 }
11363
11364 static void
11365 output_ranges (void)
11366 {
11367   unsigned i;
11368   static const char *const start_fmt = "Offset %#x";
11369   const char *fmt = start_fmt;
11370
11371   for (i = 0; i < ranges_table_in_use; i++)
11372     {
11373       int block_num = ranges_table[i].num;
11374
11375       if (block_num > 0)
11376         {
11377           char blabel[MAX_ARTIFICIAL_LABEL_BYTES];
11378           char elabel[MAX_ARTIFICIAL_LABEL_BYTES];
11379
11380           ASM_GENERATE_INTERNAL_LABEL (blabel, BLOCK_BEGIN_LABEL, block_num);
11381           ASM_GENERATE_INTERNAL_LABEL (elabel, BLOCK_END_LABEL, block_num);
11382
11383           /* If all code is in the text section, then the compilation
11384              unit base address defaults to DW_AT_low_pc, which is the
11385              base of the text section.  */
11386           if (!have_multiple_function_sections)
11387             {
11388               dw2_asm_output_delta (DWARF2_ADDR_SIZE, blabel,
11389                                     text_section_label,
11390                                     fmt, i * 2 * DWARF2_ADDR_SIZE);
11391               dw2_asm_output_delta (DWARF2_ADDR_SIZE, elabel,
11392                                     text_section_label, NULL);
11393             }
11394
11395           /* Otherwise, the compilation unit base address is zero,
11396              which allows us to use absolute addresses, and not worry
11397              about whether the target supports cross-section
11398              arithmetic.  */
11399           else
11400             {
11401               dw2_asm_output_addr (DWARF2_ADDR_SIZE, blabel,
11402                                    fmt, i * 2 * DWARF2_ADDR_SIZE);
11403               dw2_asm_output_addr (DWARF2_ADDR_SIZE, elabel, NULL);
11404             }
11405
11406           fmt = NULL;
11407         }
11408
11409       /* Negative block_num stands for an index into ranges_by_label.  */
11410       else if (block_num < 0)
11411         {
11412           int lab_idx = - block_num - 1;
11413
11414           if (!have_multiple_function_sections)
11415             {
11416               gcc_unreachable ();
11417 #if 0
11418               /* If we ever use add_ranges_by_labels () for a single
11419                  function section, all we have to do is to take out
11420                  the #if 0 above.  */
11421               dw2_asm_output_delta (DWARF2_ADDR_SIZE,
11422                                     ranges_by_label[lab_idx].begin,
11423                                     text_section_label,
11424                                     fmt, i * 2 * DWARF2_ADDR_SIZE);
11425               dw2_asm_output_delta (DWARF2_ADDR_SIZE,
11426                                     ranges_by_label[lab_idx].end,
11427                                     text_section_label, NULL);
11428 #endif
11429             }
11430           else
11431             {
11432               dw2_asm_output_addr (DWARF2_ADDR_SIZE,
11433                                    ranges_by_label[lab_idx].begin,
11434                                    fmt, i * 2 * DWARF2_ADDR_SIZE);
11435               dw2_asm_output_addr (DWARF2_ADDR_SIZE,
11436                                    ranges_by_label[lab_idx].end,
11437                                    NULL);
11438             }
11439         }
11440       else
11441         {
11442           dw2_asm_output_data (DWARF2_ADDR_SIZE, 0, NULL);
11443           dw2_asm_output_data (DWARF2_ADDR_SIZE, 0, NULL);
11444           fmt = start_fmt;
11445         }
11446     }
11447 }
11448
11449 /* Data structure containing information about input files.  */
11450 struct file_info
11451 {
11452   const char *path;     /* Complete file name.  */
11453   const char *fname;    /* File name part.  */
11454   int length;           /* Length of entire string.  */
11455   struct dwarf_file_data * file_idx;    /* Index in input file table.  */
11456   int dir_idx;          /* Index in directory table.  */
11457 };
11458
11459 /* Data structure containing information about directories with source
11460    files.  */
11461 struct dir_info
11462 {
11463   const char *path;     /* Path including directory name.  */
11464   int length;           /* Path length.  */
11465   int prefix;           /* Index of directory entry which is a prefix.  */
11466   int count;            /* Number of files in this directory.  */
11467   int dir_idx;          /* Index of directory used as base.  */
11468 };
11469
11470 /* Callback function for file_info comparison.  We sort by looking at
11471    the directories in the path.  */
11472
11473 static int
11474 file_info_cmp (const void *p1, const void *p2)
11475 {
11476   const struct file_info *const s1 = (const struct file_info *) p1;
11477   const struct file_info *const s2 = (const struct file_info *) p2;
11478   const unsigned char *cp1;
11479   const unsigned char *cp2;
11480
11481   /* Take care of file names without directories.  We need to make sure that
11482      we return consistent values to qsort since some will get confused if
11483      we return the same value when identical operands are passed in opposite
11484      orders.  So if neither has a directory, return 0 and otherwise return
11485      1 or -1 depending on which one has the directory.  */
11486   if ((s1->path == s1->fname || s2->path == s2->fname))
11487     return (s2->path == s2->fname) - (s1->path == s1->fname);
11488
11489   cp1 = (const unsigned char *) s1->path;
11490   cp2 = (const unsigned char *) s2->path;
11491
11492   while (1)
11493     {
11494       ++cp1;
11495       ++cp2;
11496       /* Reached the end of the first path?  If so, handle like above.  */
11497       if ((cp1 == (const unsigned char *) s1->fname)
11498           || (cp2 == (const unsigned char *) s2->fname))
11499         return ((cp2 == (const unsigned char *) s2->fname)
11500                 - (cp1 == (const unsigned char *) s1->fname));
11501
11502       /* Character of current path component the same?  */
11503       else if (*cp1 != *cp2)
11504         return *cp1 - *cp2;
11505     }
11506 }
11507
11508 struct file_name_acquire_data
11509 {
11510   struct file_info *files;
11511   int used_files;
11512   int max_files;
11513 };
11514
11515 /* Traversal function for the hash table.  */
11516
11517 static int
11518 file_name_acquire (void ** slot, void *data)
11519 {
11520   struct file_name_acquire_data *fnad = (struct file_name_acquire_data *) data;
11521   struct dwarf_file_data *d = (struct dwarf_file_data *) *slot;
11522   struct file_info *fi;
11523   const char *f;
11524
11525   gcc_assert (fnad->max_files >= d->emitted_number);
11526
11527   if (! d->emitted_number)
11528     return 1;
11529
11530   gcc_assert (fnad->max_files != fnad->used_files);
11531
11532   fi = fnad->files + fnad->used_files++;
11533
11534   /* Skip all leading "./".  */
11535   f = d->filename;
11536   while (f[0] == '.' && IS_DIR_SEPARATOR (f[1]))
11537     f += 2;
11538
11539   /* Create a new array entry.  */
11540   fi->path = f;
11541   fi->length = strlen (f);
11542   fi->file_idx = d;
11543
11544   /* Search for the file name part.  */
11545   f = strrchr (f, DIR_SEPARATOR);
11546 #if defined (DIR_SEPARATOR_2)
11547   {
11548     char *g = strrchr (fi->path, DIR_SEPARATOR_2);
11549
11550     if (g != NULL)
11551       {
11552         if (f == NULL || f < g)
11553           f = g;
11554       }
11555   }
11556 #endif
11557
11558   fi->fname = f == NULL ? fi->path : f + 1;
11559   return 1;
11560 }
11561
11562 /* Output the directory table and the file name table.  We try to minimize
11563    the total amount of memory needed.  A heuristic is used to avoid large
11564    slowdowns with many input files.  */
11565
11566 static void
11567 output_file_names (void)
11568 {
11569   struct file_name_acquire_data fnad;
11570   int numfiles;
11571   struct file_info *files;
11572   struct dir_info *dirs;
11573   int *saved;
11574   int *savehere;
11575   int *backmap;
11576   int ndirs;
11577   int idx_offset;
11578   int i;
11579
11580   if (!last_emitted_file)
11581     {
11582       dw2_asm_output_data (1, 0, "End directory table");
11583       dw2_asm_output_data (1, 0, "End file name table");
11584       return;
11585     }
11586
11587   numfiles = last_emitted_file->emitted_number;
11588
11589   /* Allocate the various arrays we need.  */
11590   files = XALLOCAVEC (struct file_info, numfiles);
11591   dirs = XALLOCAVEC (struct dir_info, numfiles);
11592
11593   fnad.files = files;
11594   fnad.used_files = 0;
11595   fnad.max_files = numfiles;
11596   htab_traverse (file_table, file_name_acquire, &fnad);
11597   gcc_assert (fnad.used_files == fnad.max_files);
11598
11599   qsort (files, numfiles, sizeof (files[0]), file_info_cmp);
11600
11601   /* Find all the different directories used.  */
11602   dirs[0].path = files[0].path;
11603   dirs[0].length = files[0].fname - files[0].path;
11604   dirs[0].prefix = -1;
11605   dirs[0].count = 1;
11606   dirs[0].dir_idx = 0;
11607   files[0].dir_idx = 0;
11608   ndirs = 1;
11609
11610   for (i = 1; i < numfiles; i++)
11611     if (files[i].fname - files[i].path == dirs[ndirs - 1].length
11612         && memcmp (dirs[ndirs - 1].path, files[i].path,
11613                    dirs[ndirs - 1].length) == 0)
11614       {
11615         /* Same directory as last entry.  */
11616         files[i].dir_idx = ndirs - 1;
11617         ++dirs[ndirs - 1].count;
11618       }
11619     else
11620       {
11621         int j;
11622
11623         /* This is a new directory.  */
11624         dirs[ndirs].path = files[i].path;
11625         dirs[ndirs].length = files[i].fname - files[i].path;
11626         dirs[ndirs].count = 1;
11627         dirs[ndirs].dir_idx = ndirs;
11628         files[i].dir_idx = ndirs;
11629
11630         /* Search for a prefix.  */
11631         dirs[ndirs].prefix = -1;
11632         for (j = 0; j < ndirs; j++)
11633           if (dirs[j].length < dirs[ndirs].length
11634               && dirs[j].length > 1
11635               && (dirs[ndirs].prefix == -1
11636                   || dirs[j].length > dirs[dirs[ndirs].prefix].length)
11637               && memcmp (dirs[j].path, dirs[ndirs].path, dirs[j].length) == 0)
11638             dirs[ndirs].prefix = j;
11639
11640         ++ndirs;
11641       }
11642
11643   /* Now to the actual work.  We have to find a subset of the directories which
11644      allow expressing the file name using references to the directory table
11645      with the least amount of characters.  We do not do an exhaustive search
11646      where we would have to check out every combination of every single
11647      possible prefix.  Instead we use a heuristic which provides nearly optimal
11648      results in most cases and never is much off.  */
11649   saved = XALLOCAVEC (int, ndirs);
11650   savehere = XALLOCAVEC (int, ndirs);
11651
11652   memset (saved, '\0', ndirs * sizeof (saved[0]));
11653   for (i = 0; i < ndirs; i++)
11654     {
11655       int j;
11656       int total;
11657
11658       /* We can always save some space for the current directory.  But this
11659          does not mean it will be enough to justify adding the directory.  */
11660       savehere[i] = dirs[i].length;
11661       total = (savehere[i] - saved[i]) * dirs[i].count;
11662
11663       for (j = i + 1; j < ndirs; j++)
11664         {
11665           savehere[j] = 0;
11666           if (saved[j] < dirs[i].length)
11667             {
11668               /* Determine whether the dirs[i] path is a prefix of the
11669                  dirs[j] path.  */
11670               int k;
11671
11672               k = dirs[j].prefix;
11673               while (k != -1 && k != (int) i)
11674                 k = dirs[k].prefix;
11675
11676               if (k == (int) i)
11677                 {
11678                   /* Yes it is.  We can possibly save some memory by
11679                      writing the filenames in dirs[j] relative to
11680                      dirs[i].  */
11681                   savehere[j] = dirs[i].length;
11682                   total += (savehere[j] - saved[j]) * dirs[j].count;
11683                 }
11684             }
11685         }
11686
11687       /* Check whether we can save enough to justify adding the dirs[i]
11688          directory.  */
11689       if (total > dirs[i].length + 1)
11690         {
11691           /* It's worthwhile adding.  */
11692           for (j = i; j < ndirs; j++)
11693             if (savehere[j] > 0)
11694               {
11695                 /* Remember how much we saved for this directory so far.  */
11696                 saved[j] = savehere[j];
11697
11698                 /* Remember the prefix directory.  */
11699                 dirs[j].dir_idx = i;
11700               }
11701         }
11702     }
11703
11704   /* Emit the directory name table.  */
11705   idx_offset = dirs[0].length > 0 ? 1 : 0;
11706   for (i = 1 - idx_offset; i < ndirs; i++)
11707     dw2_asm_output_nstring (dirs[i].path,
11708                             dirs[i].length
11709                              - !DWARF2_DIR_SHOULD_END_WITH_SEPARATOR,
11710                             "Directory Entry: %#x", i + idx_offset);
11711
11712   dw2_asm_output_data (1, 0, "End directory table");
11713
11714   /* We have to emit them in the order of emitted_number since that's
11715      used in the debug info generation.  To do this efficiently we
11716      generate a back-mapping of the indices first.  */
11717   backmap = XALLOCAVEC (int, numfiles);
11718   for (i = 0; i < numfiles; i++)
11719     backmap[files[i].file_idx->emitted_number - 1] = i;
11720
11721   /* Now write all the file names.  */
11722   for (i = 0; i < numfiles; i++)
11723     {
11724       int file_idx = backmap[i];
11725       int dir_idx = dirs[files[file_idx].dir_idx].dir_idx;
11726
11727 #ifdef VMS_DEBUGGING_INFO
11728 #define MAX_VMS_VERSION_LEN 6 /* ";32768" */
11729
11730       /* Setting these fields can lead to debugger miscomparisons,
11731          but VMS Debug requires them to be set correctly.  */
11732
11733       int ver;
11734       long long cdt;
11735       long siz;
11736       int maxfilelen = strlen (files[file_idx].path)
11737                                + dirs[dir_idx].length
11738                                + MAX_VMS_VERSION_LEN + 1;
11739       char *filebuf = XALLOCAVEC (char, maxfilelen);
11740
11741       vms_file_stats_name (files[file_idx].path, 0, 0, 0, &ver);
11742       snprintf (filebuf, maxfilelen, "%s;%d",
11743                 files[file_idx].path + dirs[dir_idx].length, ver);
11744
11745       dw2_asm_output_nstring
11746         (filebuf, -1, "File Entry: %#x", (unsigned) i + 1);
11747
11748       /* Include directory index.  */
11749       dw2_asm_output_data_uleb128 (dir_idx + idx_offset, NULL);
11750
11751       /* Modification time.  */
11752       dw2_asm_output_data_uleb128
11753         ((vms_file_stats_name (files[file_idx].path, &cdt, 0, 0, 0) == 0)
11754           ? cdt : 0,
11755          NULL);
11756
11757       /* File length in bytes.  */
11758       dw2_asm_output_data_uleb128
11759         ((vms_file_stats_name (files[file_idx].path, 0, &siz, 0, 0) == 0)
11760           ? siz : 0,
11761          NULL);
11762 #else
11763       dw2_asm_output_nstring (files[file_idx].path + dirs[dir_idx].length, -1,
11764                               "File Entry: %#x", (unsigned) i + 1);
11765
11766       /* Include directory index.  */
11767       dw2_asm_output_data_uleb128 (dir_idx + idx_offset, NULL);
11768
11769       /* Modification time.  */
11770       dw2_asm_output_data_uleb128 (0, NULL);
11771
11772       /* File length in bytes.  */
11773       dw2_asm_output_data_uleb128 (0, NULL);
11774 #endif
11775     }
11776
11777   dw2_asm_output_data (1, 0, "End file name table");
11778 }
11779
11780
11781 /* Output the source line number correspondence information.  This
11782    information goes into the .debug_line section.  */
11783
11784 static void
11785 output_line_info (void)
11786 {
11787   char l1[20], l2[20], p1[20], p2[20];
11788   char line_label[MAX_ARTIFICIAL_LABEL_BYTES];
11789   char prev_line_label[MAX_ARTIFICIAL_LABEL_BYTES];
11790   unsigned opc;
11791   unsigned n_op_args;
11792   unsigned long lt_index;
11793   unsigned long current_line;
11794   long line_offset;
11795   long line_delta;
11796   unsigned long current_file;
11797   unsigned long function;
11798   int ver = dwarf_version;
11799
11800   ASM_GENERATE_INTERNAL_LABEL (l1, LINE_NUMBER_BEGIN_LABEL, 0);
11801   ASM_GENERATE_INTERNAL_LABEL (l2, LINE_NUMBER_END_LABEL, 0);
11802   ASM_GENERATE_INTERNAL_LABEL (p1, LN_PROLOG_AS_LABEL, 0);
11803   ASM_GENERATE_INTERNAL_LABEL (p2, LN_PROLOG_END_LABEL, 0);
11804
11805   if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
11806     dw2_asm_output_data (4, 0xffffffff,
11807       "Initial length escape value indicating 64-bit DWARF extension");
11808   dw2_asm_output_delta (DWARF_OFFSET_SIZE, l2, l1,
11809                         "Length of Source Line Info");
11810   ASM_OUTPUT_LABEL (asm_out_file, l1);
11811
11812   dw2_asm_output_data (2, ver, "DWARF Version");
11813   dw2_asm_output_delta (DWARF_OFFSET_SIZE, p2, p1, "Prolog Length");
11814   ASM_OUTPUT_LABEL (asm_out_file, p1);
11815
11816   /* Define the architecture-dependent minimum instruction length (in
11817    bytes).  In this implementation of DWARF, this field is used for
11818    information purposes only.  Since GCC generates assembly language,
11819    we have no a priori knowledge of how many instruction bytes are
11820    generated for each source line, and therefore can use only the
11821    DW_LNE_set_address and DW_LNS_fixed_advance_pc line information
11822    commands.  Accordingly, we fix this as `1', which is "correct
11823    enough" for all architectures, and don't let the target override.  */
11824   dw2_asm_output_data (1, 1,
11825                        "Minimum Instruction Length");
11826
11827   if (ver >= 4)
11828     dw2_asm_output_data (1, DWARF_LINE_DEFAULT_MAX_OPS_PER_INSN,
11829                          "Maximum Operations Per Instruction");
11830   dw2_asm_output_data (1, DWARF_LINE_DEFAULT_IS_STMT_START,
11831                        "Default is_stmt_start flag");
11832   dw2_asm_output_data (1, DWARF_LINE_BASE,
11833                        "Line Base Value (Special Opcodes)");
11834   dw2_asm_output_data (1, DWARF_LINE_RANGE,
11835                        "Line Range Value (Special Opcodes)");
11836   dw2_asm_output_data (1, DWARF_LINE_OPCODE_BASE,
11837                        "Special Opcode Base");
11838
11839   for (opc = 1; opc < DWARF_LINE_OPCODE_BASE; opc++)
11840     {
11841       switch (opc)
11842         {
11843         case DW_LNS_advance_pc:
11844         case DW_LNS_advance_line:
11845         case DW_LNS_set_file:
11846         case DW_LNS_set_column:
11847         case DW_LNS_fixed_advance_pc:
11848           n_op_args = 1;
11849           break;
11850         default:
11851           n_op_args = 0;
11852           break;
11853         }
11854
11855       dw2_asm_output_data (1, n_op_args, "opcode: %#x has %d args",
11856                            opc, n_op_args);
11857     }
11858
11859   /* Write out the information about the files we use.  */
11860   output_file_names ();
11861   ASM_OUTPUT_LABEL (asm_out_file, p2);
11862
11863   /* We used to set the address register to the first location in the text
11864      section here, but that didn't accomplish anything since we already
11865      have a line note for the opening brace of the first function.  */
11866
11867   /* Generate the line number to PC correspondence table, encoded as
11868      a series of state machine operations.  */
11869   current_file = 1;
11870   current_line = 1;
11871
11872   if (cfun && in_cold_section_p)
11873     strcpy (prev_line_label, crtl->subsections.cold_section_label);
11874   else
11875     strcpy (prev_line_label, text_section_label);
11876   for (lt_index = 1; lt_index < line_info_table_in_use; ++lt_index)
11877     {
11878       dw_line_info_ref line_info = &line_info_table[lt_index];
11879
11880 #if 0
11881       /* Disable this optimization for now; GDB wants to see two line notes
11882          at the beginning of a function so it can find the end of the
11883          prologue.  */
11884
11885       /* Don't emit anything for redundant notes.  Just updating the
11886          address doesn't accomplish anything, because we already assume
11887          that anything after the last address is this line.  */
11888       if (line_info->dw_line_num == current_line
11889           && line_info->dw_file_num == current_file)
11890         continue;
11891 #endif
11892
11893       /* Emit debug info for the address of the current line.
11894
11895          Unfortunately, we have little choice here currently, and must always
11896          use the most general form.  GCC does not know the address delta
11897          itself, so we can't use DW_LNS_advance_pc.  Many ports do have length
11898          attributes which will give an upper bound on the address range.  We
11899          could perhaps use length attributes to determine when it is safe to
11900          use DW_LNS_fixed_advance_pc.  */
11901
11902       ASM_GENERATE_INTERNAL_LABEL (line_label, LINE_CODE_LABEL, lt_index);
11903       if (0)
11904         {
11905           /* This can handle deltas up to 0xffff.  This takes 3 bytes.  */
11906           dw2_asm_output_data (1, DW_LNS_fixed_advance_pc,
11907                                "DW_LNS_fixed_advance_pc");
11908           dw2_asm_output_delta (2, line_label, prev_line_label, NULL);
11909         }
11910       else
11911         {
11912           /* This can handle any delta.  This takes
11913              4+DWARF2_ADDR_SIZE bytes.  */
11914           dw2_asm_output_data (1, 0, "DW_LNE_set_address");
11915           dw2_asm_output_data_uleb128 (1 + DWARF2_ADDR_SIZE, NULL);
11916           dw2_asm_output_data (1, DW_LNE_set_address, NULL);
11917           dw2_asm_output_addr (DWARF2_ADDR_SIZE, line_label, NULL);
11918         }
11919
11920       strcpy (prev_line_label, line_label);
11921
11922       /* Emit debug info for the source file of the current line, if
11923          different from the previous line.  */
11924       if (line_info->dw_file_num != current_file)
11925         {
11926           current_file = line_info->dw_file_num;
11927           dw2_asm_output_data (1, DW_LNS_set_file, "DW_LNS_set_file");
11928           dw2_asm_output_data_uleb128 (current_file, "%lu", current_file);
11929         }
11930
11931       /* Emit debug info for the current line number, choosing the encoding
11932          that uses the least amount of space.  */
11933       if (line_info->dw_line_num != current_line)
11934         {
11935           line_offset = line_info->dw_line_num - current_line;
11936           line_delta = line_offset - DWARF_LINE_BASE;
11937           current_line = line_info->dw_line_num;
11938           if (line_delta >= 0 && line_delta < (DWARF_LINE_RANGE - 1))
11939             /* This can handle deltas from -10 to 234, using the current
11940                definitions of DWARF_LINE_BASE and DWARF_LINE_RANGE.  This
11941                takes 1 byte.  */
11942             dw2_asm_output_data (1, DWARF_LINE_OPCODE_BASE + line_delta,
11943                                  "line %lu", current_line);
11944           else
11945             {
11946               /* This can handle any delta.  This takes at least 4 bytes,
11947                  depending on the value being encoded.  */
11948               dw2_asm_output_data (1, DW_LNS_advance_line,
11949                                    "advance to line %lu", current_line);
11950               dw2_asm_output_data_sleb128 (line_offset, NULL);
11951               dw2_asm_output_data (1, DW_LNS_copy, "DW_LNS_copy");
11952             }
11953         }
11954       else
11955         /* We still need to start a new row, so output a copy insn.  */
11956         dw2_asm_output_data (1, DW_LNS_copy, "DW_LNS_copy");
11957     }
11958
11959   /* Emit debug info for the address of the end of the function.  */
11960   if (0)
11961     {
11962       dw2_asm_output_data (1, DW_LNS_fixed_advance_pc,
11963                            "DW_LNS_fixed_advance_pc");
11964       dw2_asm_output_delta (2, text_end_label, prev_line_label, NULL);
11965     }
11966   else
11967     {
11968       dw2_asm_output_data (1, 0, "DW_LNE_set_address");
11969       dw2_asm_output_data_uleb128 (1 + DWARF2_ADDR_SIZE, NULL);
11970       dw2_asm_output_data (1, DW_LNE_set_address, NULL);
11971       dw2_asm_output_addr (DWARF2_ADDR_SIZE, text_end_label, NULL);
11972     }
11973
11974   dw2_asm_output_data (1, 0, "DW_LNE_end_sequence");
11975   dw2_asm_output_data_uleb128 (1, NULL);
11976   dw2_asm_output_data (1, DW_LNE_end_sequence, NULL);
11977
11978   function = 0;
11979   current_file = 1;
11980   current_line = 1;
11981   for (lt_index = 0; lt_index < separate_line_info_table_in_use;)
11982     {
11983       dw_separate_line_info_ref line_info
11984         = &separate_line_info_table[lt_index];
11985
11986 #if 0
11987       /* Don't emit anything for redundant notes.  */
11988       if (line_info->dw_line_num == current_line
11989           && line_info->dw_file_num == current_file
11990           && line_info->function == function)
11991         goto cont;
11992 #endif
11993
11994       /* Emit debug info for the address of the current line.  If this is
11995          a new function, or the first line of a function, then we need
11996          to handle it differently.  */
11997       ASM_GENERATE_INTERNAL_LABEL (line_label, SEPARATE_LINE_CODE_LABEL,
11998                                    lt_index);
11999       if (function != line_info->function)
12000         {
12001           function = line_info->function;
12002
12003           /* Set the address register to the first line in the function.  */
12004           dw2_asm_output_data (1, 0, "DW_LNE_set_address");
12005           dw2_asm_output_data_uleb128 (1 + DWARF2_ADDR_SIZE, NULL);
12006           dw2_asm_output_data (1, DW_LNE_set_address, NULL);
12007           dw2_asm_output_addr (DWARF2_ADDR_SIZE, line_label, NULL);
12008         }
12009       else
12010         {
12011           /* ??? See the DW_LNS_advance_pc comment above.  */
12012           if (0)
12013             {
12014               dw2_asm_output_data (1, DW_LNS_fixed_advance_pc,
12015                                    "DW_LNS_fixed_advance_pc");
12016               dw2_asm_output_delta (2, line_label, prev_line_label, NULL);
12017             }
12018           else
12019             {
12020               dw2_asm_output_data (1, 0, "DW_LNE_set_address");
12021               dw2_asm_output_data_uleb128 (1 + DWARF2_ADDR_SIZE, NULL);
12022               dw2_asm_output_data (1, DW_LNE_set_address, NULL);
12023               dw2_asm_output_addr (DWARF2_ADDR_SIZE, line_label, NULL);
12024             }
12025         }
12026
12027       strcpy (prev_line_label, line_label);
12028
12029       /* Emit debug info for the source file of the current line, if
12030          different from the previous line.  */
12031       if (line_info->dw_file_num != current_file)
12032         {
12033           current_file = line_info->dw_file_num;
12034           dw2_asm_output_data (1, DW_LNS_set_file, "DW_LNS_set_file");
12035           dw2_asm_output_data_uleb128 (current_file, "%lu", current_file);
12036         }
12037
12038       /* Emit debug info for the current line number, choosing the encoding
12039          that uses the least amount of space.  */
12040       if (line_info->dw_line_num != current_line)
12041         {
12042           line_offset = line_info->dw_line_num - current_line;
12043           line_delta = line_offset - DWARF_LINE_BASE;
12044           current_line = line_info->dw_line_num;
12045           if (line_delta >= 0 && line_delta < (DWARF_LINE_RANGE - 1))
12046             dw2_asm_output_data (1, DWARF_LINE_OPCODE_BASE + line_delta,
12047                                  "line %lu", current_line);
12048           else
12049             {
12050               dw2_asm_output_data (1, DW_LNS_advance_line,
12051                                    "advance to line %lu", current_line);
12052               dw2_asm_output_data_sleb128 (line_offset, NULL);
12053               dw2_asm_output_data (1, DW_LNS_copy, "DW_LNS_copy");
12054             }
12055         }
12056       else
12057         dw2_asm_output_data (1, DW_LNS_copy, "DW_LNS_copy");
12058
12059 #if 0
12060     cont:
12061 #endif
12062
12063       lt_index++;
12064
12065       /* If we're done with a function, end its sequence.  */
12066       if (lt_index == separate_line_info_table_in_use
12067           || separate_line_info_table[lt_index].function != function)
12068         {
12069           current_file = 1;
12070           current_line = 1;
12071
12072           /* Emit debug info for the address of the end of the function.  */
12073           ASM_GENERATE_INTERNAL_LABEL (line_label, FUNC_END_LABEL, function);
12074           if (0)
12075             {
12076               dw2_asm_output_data (1, DW_LNS_fixed_advance_pc,
12077                                    "DW_LNS_fixed_advance_pc");
12078               dw2_asm_output_delta (2, line_label, prev_line_label, NULL);
12079             }
12080           else
12081             {
12082               dw2_asm_output_data (1, 0, "DW_LNE_set_address");
12083               dw2_asm_output_data_uleb128 (1 + DWARF2_ADDR_SIZE, NULL);
12084               dw2_asm_output_data (1, DW_LNE_set_address, NULL);
12085               dw2_asm_output_addr (DWARF2_ADDR_SIZE, line_label, NULL);
12086             }
12087
12088           /* Output the marker for the end of this sequence.  */
12089           dw2_asm_output_data (1, 0, "DW_LNE_end_sequence");
12090           dw2_asm_output_data_uleb128 (1, NULL);
12091           dw2_asm_output_data (1, DW_LNE_end_sequence, NULL);
12092         }
12093     }
12094
12095   /* Output the marker for the end of the line number info.  */
12096   ASM_OUTPUT_LABEL (asm_out_file, l2);
12097 }
12098
12099 /* Return the size of the .debug_dcall table for the compilation unit.  */
12100
12101 static unsigned long
12102 size_of_dcall_table (void)
12103 {
12104   unsigned long size;
12105   unsigned int i;
12106   dcall_entry *p;
12107   tree last_poc_decl = NULL;
12108
12109   /* Header:  version + debug info section pointer + pointer size.  */
12110   size = 2 + DWARF_OFFSET_SIZE + 1;
12111
12112   /* Each entry:  code label + DIE offset.  */
12113   for (i = 0; VEC_iterate (dcall_entry, dcall_table, i, p); i++)
12114     {
12115       gcc_assert (p->targ_die != NULL);
12116       /* Insert a "from" entry when the point-of-call DIE offset changes.  */
12117       if (p->poc_decl != last_poc_decl)
12118         {
12119           dw_die_ref poc_die = lookup_decl_die (p->poc_decl);
12120           gcc_assert (poc_die);
12121           last_poc_decl = p->poc_decl;
12122           if (poc_die)
12123             size += (DWARF_OFFSET_SIZE
12124                      + size_of_uleb128 (poc_die->die_offset));
12125         }
12126       size += DWARF_OFFSET_SIZE + size_of_uleb128 (p->targ_die->die_offset);
12127     }
12128
12129   return size;
12130 }
12131
12132 /* Output the direct call table used to disambiguate PC values when
12133    identical function have been merged.  */
12134
12135 static void
12136 output_dcall_table (void)
12137 {
12138   unsigned i;
12139   unsigned long dcall_length = size_of_dcall_table ();
12140   dcall_entry *p;
12141   char poc_label[MAX_ARTIFICIAL_LABEL_BYTES];
12142   tree last_poc_decl = NULL;
12143
12144   if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
12145     dw2_asm_output_data (4, 0xffffffff,
12146       "Initial length escape value indicating 64-bit DWARF extension");
12147   dw2_asm_output_data (DWARF_OFFSET_SIZE, dcall_length,
12148                        "Length of Direct Call Table");
12149   dw2_asm_output_data (2, 4, "Version number");
12150   dw2_asm_output_offset (DWARF_OFFSET_SIZE, debug_info_section_label,
12151                          debug_info_section,
12152                          "Offset of Compilation Unit Info");
12153   dw2_asm_output_data (1, DWARF2_ADDR_SIZE, "Pointer Size (in bytes)");
12154
12155   for (i = 0; VEC_iterate (dcall_entry, dcall_table, i, p); i++)
12156     {
12157       /* Insert a "from" entry when the point-of-call DIE offset changes.  */
12158       if (p->poc_decl != last_poc_decl)
12159         {
12160           dw_die_ref poc_die = lookup_decl_die (p->poc_decl);
12161           last_poc_decl = p->poc_decl;
12162           if (poc_die)
12163             {
12164               dw2_asm_output_data (DWARF_OFFSET_SIZE, 0, "New caller");
12165               dw2_asm_output_data_uleb128 (poc_die->die_offset,
12166                                            "Caller DIE offset");
12167             }
12168         }
12169       ASM_GENERATE_INTERNAL_LABEL (poc_label, "LPOC", p->poc_label_num);
12170       dw2_asm_output_addr (DWARF_OFFSET_SIZE, poc_label, "Point of call");
12171       dw2_asm_output_data_uleb128 (p->targ_die->die_offset,
12172                                    "Callee DIE offset");
12173     }
12174 }
12175 \f
12176 /* Return the size of the .debug_vcall table for the compilation unit.  */
12177
12178 static unsigned long
12179 size_of_vcall_table (void)
12180 {
12181   unsigned long size;
12182   unsigned int i;
12183   vcall_entry *p;
12184
12185   /* Header:  version + pointer size.  */
12186   size = 2 + 1;
12187
12188   /* Each entry:  code label + vtable slot index.  */
12189   for (i = 0; VEC_iterate (vcall_entry, vcall_table, i, p); i++)
12190     size += DWARF_OFFSET_SIZE + size_of_uleb128 (p->vtable_slot);
12191
12192   return size;
12193 }
12194
12195 /* Output the virtual call table used to disambiguate PC values when
12196    identical function have been merged.  */
12197
12198 static void
12199 output_vcall_table (void)
12200 {
12201   unsigned i;
12202   unsigned long vcall_length = size_of_vcall_table ();
12203   vcall_entry *p;
12204   char poc_label[MAX_ARTIFICIAL_LABEL_BYTES];
12205
12206   if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
12207     dw2_asm_output_data (4, 0xffffffff,
12208       "Initial length escape value indicating 64-bit DWARF extension");
12209   dw2_asm_output_data (DWARF_OFFSET_SIZE, vcall_length,
12210                        "Length of Virtual Call Table");
12211   dw2_asm_output_data (2, 4, "Version number");
12212   dw2_asm_output_data (1, DWARF2_ADDR_SIZE, "Pointer Size (in bytes)");
12213
12214   for (i = 0; VEC_iterate (vcall_entry, vcall_table, i, p); i++)
12215     {
12216       ASM_GENERATE_INTERNAL_LABEL (poc_label, "LPOC", p->poc_label_num);
12217       dw2_asm_output_addr (DWARF_OFFSET_SIZE, poc_label, "Point of call");
12218       dw2_asm_output_data_uleb128 (p->vtable_slot, "Vtable slot");
12219     }
12220 }
12221 \f
12222 /* Given a pointer to a tree node for some base type, return a pointer to
12223    a DIE that describes the given type.
12224
12225    This routine must only be called for GCC type nodes that correspond to
12226    Dwarf base (fundamental) types.  */
12227
12228 static dw_die_ref
12229 base_type_die (tree type)
12230 {
12231   dw_die_ref base_type_result;
12232   enum dwarf_type encoding;
12233
12234   if (TREE_CODE (type) == ERROR_MARK || TREE_CODE (type) == VOID_TYPE)
12235     return 0;
12236
12237   /* If this is a subtype that should not be emitted as a subrange type,
12238      use the base type.  See subrange_type_for_debug_p.  */
12239   if (TREE_CODE (type) == INTEGER_TYPE && TREE_TYPE (type) != NULL_TREE)
12240     type = TREE_TYPE (type);
12241
12242   switch (TREE_CODE (type))
12243     {
12244     case INTEGER_TYPE:
12245       if (TYPE_STRING_FLAG (type))
12246         {
12247           if (TYPE_UNSIGNED (type))
12248             encoding = DW_ATE_unsigned_char;
12249           else
12250             encoding = DW_ATE_signed_char;
12251         }
12252       else if (TYPE_UNSIGNED (type))
12253         encoding = DW_ATE_unsigned;
12254       else
12255         encoding = DW_ATE_signed;
12256       break;
12257
12258     case REAL_TYPE:
12259       if (DECIMAL_FLOAT_MODE_P (TYPE_MODE (type)))
12260         {
12261           if (dwarf_version >= 3 || !dwarf_strict)
12262             encoding = DW_ATE_decimal_float;
12263           else
12264             encoding = DW_ATE_lo_user;
12265         }
12266       else
12267         encoding = DW_ATE_float;
12268       break;
12269
12270     case FIXED_POINT_TYPE:
12271       if (!(dwarf_version >= 3 || !dwarf_strict))
12272         encoding = DW_ATE_lo_user;
12273       else if (TYPE_UNSIGNED (type))
12274         encoding = DW_ATE_unsigned_fixed;
12275       else
12276         encoding = DW_ATE_signed_fixed;
12277       break;
12278
12279       /* Dwarf2 doesn't know anything about complex ints, so use
12280          a user defined type for it.  */
12281     case COMPLEX_TYPE:
12282       if (TREE_CODE (TREE_TYPE (type)) == REAL_TYPE)
12283         encoding = DW_ATE_complex_float;
12284       else
12285         encoding = DW_ATE_lo_user;
12286       break;
12287
12288     case BOOLEAN_TYPE:
12289       /* GNU FORTRAN/Ada/C++ BOOLEAN type.  */
12290       encoding = DW_ATE_boolean;
12291       break;
12292
12293     default:
12294       /* No other TREE_CODEs are Dwarf fundamental types.  */
12295       gcc_unreachable ();
12296     }
12297
12298   base_type_result = new_die (DW_TAG_base_type, comp_unit_die, type);
12299
12300   add_AT_unsigned (base_type_result, DW_AT_byte_size,
12301                    int_size_in_bytes (type));
12302   add_AT_unsigned (base_type_result, DW_AT_encoding, encoding);
12303
12304   return base_type_result;
12305 }
12306
12307 /* Given a pointer to an arbitrary ..._TYPE tree node, return nonzero if the
12308    given input type is a Dwarf "fundamental" type.  Otherwise return null.  */
12309
12310 static inline int
12311 is_base_type (tree type)
12312 {
12313   switch (TREE_CODE (type))
12314     {
12315     case ERROR_MARK:
12316     case VOID_TYPE:
12317     case INTEGER_TYPE:
12318     case REAL_TYPE:
12319     case FIXED_POINT_TYPE:
12320     case COMPLEX_TYPE:
12321     case BOOLEAN_TYPE:
12322       return 1;
12323
12324     case ARRAY_TYPE:
12325     case RECORD_TYPE:
12326     case UNION_TYPE:
12327     case QUAL_UNION_TYPE:
12328     case ENUMERAL_TYPE:
12329     case FUNCTION_TYPE:
12330     case METHOD_TYPE:
12331     case POINTER_TYPE:
12332     case REFERENCE_TYPE:
12333     case OFFSET_TYPE:
12334     case LANG_TYPE:
12335     case VECTOR_TYPE:
12336       return 0;
12337
12338     default:
12339       gcc_unreachable ();
12340     }
12341
12342   return 0;
12343 }
12344
12345 /* Given a pointer to a tree node, assumed to be some kind of a ..._TYPE
12346    node, return the size in bits for the type if it is a constant, or else
12347    return the alignment for the type if the type's size is not constant, or
12348    else return BITS_PER_WORD if the type actually turns out to be an
12349    ERROR_MARK node.  */
12350
12351 static inline unsigned HOST_WIDE_INT
12352 simple_type_size_in_bits (const_tree type)
12353 {
12354   if (TREE_CODE (type) == ERROR_MARK)
12355     return BITS_PER_WORD;
12356   else if (TYPE_SIZE (type) == NULL_TREE)
12357     return 0;
12358   else if (host_integerp (TYPE_SIZE (type), 1))
12359     return tree_low_cst (TYPE_SIZE (type), 1);
12360   else
12361     return TYPE_ALIGN (type);
12362 }
12363
12364 /* Similarly, but return a double_int instead of UHWI.  */
12365
12366 static inline double_int
12367 double_int_type_size_in_bits (const_tree type)
12368 {
12369   if (TREE_CODE (type) == ERROR_MARK)
12370     return uhwi_to_double_int (BITS_PER_WORD);
12371   else if (TYPE_SIZE (type) == NULL_TREE)
12372     return double_int_zero;
12373   else if (TREE_CODE (TYPE_SIZE (type)) == INTEGER_CST)
12374     return tree_to_double_int (TYPE_SIZE (type));
12375   else
12376     return uhwi_to_double_int (TYPE_ALIGN (type));
12377 }
12378
12379 /*  Given a pointer to a tree node for a subrange type, return a pointer
12380     to a DIE that describes the given type.  */
12381
12382 static dw_die_ref
12383 subrange_type_die (tree type, tree low, tree high, dw_die_ref context_die)
12384 {
12385   dw_die_ref subrange_die;
12386   const HOST_WIDE_INT size_in_bytes = int_size_in_bytes (type);
12387
12388   if (context_die == NULL)
12389     context_die = comp_unit_die;
12390
12391   subrange_die = new_die (DW_TAG_subrange_type, context_die, type);
12392
12393   if (int_size_in_bytes (TREE_TYPE (type)) != size_in_bytes)
12394     {
12395       /* The size of the subrange type and its base type do not match,
12396          so we need to generate a size attribute for the subrange type.  */
12397       add_AT_unsigned (subrange_die, DW_AT_byte_size, size_in_bytes);
12398     }
12399
12400   if (low)
12401     add_bound_info (subrange_die, DW_AT_lower_bound, low);
12402   if (high)
12403     add_bound_info (subrange_die, DW_AT_upper_bound, high);
12404
12405   return subrange_die;
12406 }
12407
12408 /* Given a pointer to an arbitrary ..._TYPE tree node, return a debugging
12409    entry that chains various modifiers in front of the given type.  */
12410
12411 static dw_die_ref
12412 modified_type_die (tree type, int is_const_type, int is_volatile_type,
12413                    dw_die_ref context_die)
12414 {
12415   enum tree_code code = TREE_CODE (type);
12416   dw_die_ref mod_type_die;
12417   dw_die_ref sub_die = NULL;
12418   tree item_type = NULL;
12419   tree qualified_type;
12420   tree name, low, high;
12421
12422   if (code == ERROR_MARK)
12423     return NULL;
12424
12425   /* See if we already have the appropriately qualified variant of
12426      this type.  */
12427   qualified_type
12428     = get_qualified_type (type,
12429                           ((is_const_type ? TYPE_QUAL_CONST : 0)
12430                            | (is_volatile_type ? TYPE_QUAL_VOLATILE : 0)));
12431
12432   if (qualified_type == sizetype
12433       && TYPE_NAME (qualified_type)
12434       && TREE_CODE (TYPE_NAME (qualified_type)) == TYPE_DECL)
12435     {
12436 #ifdef ENABLE_CHECKING
12437       gcc_assert (TREE_CODE (TREE_TYPE (TYPE_NAME (qualified_type)))
12438                   == INTEGER_TYPE
12439                   && TYPE_PRECISION (TREE_TYPE (TYPE_NAME (qualified_type)))
12440                      == TYPE_PRECISION (qualified_type)
12441                   && TYPE_UNSIGNED (TREE_TYPE (TYPE_NAME (qualified_type)))
12442                      == TYPE_UNSIGNED (qualified_type));
12443 #endif
12444       qualified_type = TREE_TYPE (TYPE_NAME (qualified_type));
12445     }
12446
12447   /* If we do, then we can just use its DIE, if it exists.  */
12448   if (qualified_type)
12449     {
12450       mod_type_die = lookup_type_die (qualified_type);
12451       if (mod_type_die)
12452         return mod_type_die;
12453     }
12454
12455   name = qualified_type ? TYPE_NAME (qualified_type) : NULL;
12456
12457   /* Handle C typedef types.  */
12458   if (name && TREE_CODE (name) == TYPE_DECL && DECL_ORIGINAL_TYPE (name)
12459       && !DECL_ARTIFICIAL (name))
12460     {
12461       tree dtype = TREE_TYPE (name);
12462
12463       if (qualified_type == dtype)
12464         {
12465           /* For a named type, use the typedef.  */
12466           gen_type_die (qualified_type, context_die);
12467           return lookup_type_die (qualified_type);
12468         }
12469       else if (is_const_type < TYPE_READONLY (dtype)
12470                || is_volatile_type < TYPE_VOLATILE (dtype)
12471                || (is_const_type <= TYPE_READONLY (dtype)
12472                    && is_volatile_type <= TYPE_VOLATILE (dtype)
12473                    && DECL_ORIGINAL_TYPE (name) != type))
12474         /* cv-unqualified version of named type.  Just use the unnamed
12475            type to which it refers.  */
12476         return modified_type_die (DECL_ORIGINAL_TYPE (name),
12477                                   is_const_type, is_volatile_type,
12478                                   context_die);
12479       /* Else cv-qualified version of named type; fall through.  */
12480     }
12481
12482   if (is_const_type)
12483     {
12484       mod_type_die = new_die (DW_TAG_const_type, comp_unit_die, type);
12485       sub_die = modified_type_die (type, 0, is_volatile_type, context_die);
12486     }
12487   else if (is_volatile_type)
12488     {
12489       mod_type_die = new_die (DW_TAG_volatile_type, comp_unit_die, type);
12490       sub_die = modified_type_die (type, 0, 0, context_die);
12491     }
12492   else if (code == POINTER_TYPE)
12493     {
12494       mod_type_die = new_die (DW_TAG_pointer_type, comp_unit_die, type);
12495       add_AT_unsigned (mod_type_die, DW_AT_byte_size,
12496                        simple_type_size_in_bits (type) / BITS_PER_UNIT);
12497       item_type = TREE_TYPE (type);
12498       if (!ADDR_SPACE_GENERIC_P (TYPE_ADDR_SPACE (item_type)))
12499         add_AT_unsigned (mod_type_die, DW_AT_address_class,
12500                          TYPE_ADDR_SPACE (item_type));
12501     }
12502   else if (code == REFERENCE_TYPE)
12503     {
12504       if (TYPE_REF_IS_RVALUE (type) && dwarf_version >= 4)
12505         mod_type_die = new_die (DW_TAG_rvalue_reference_type, comp_unit_die,
12506                                 type);
12507       else
12508         mod_type_die = new_die (DW_TAG_reference_type, comp_unit_die, type);
12509       add_AT_unsigned (mod_type_die, DW_AT_byte_size,
12510                        simple_type_size_in_bits (type) / BITS_PER_UNIT);
12511       item_type = TREE_TYPE (type);
12512       if (!ADDR_SPACE_GENERIC_P (TYPE_ADDR_SPACE (item_type)))
12513         add_AT_unsigned (mod_type_die, DW_AT_address_class,
12514                          TYPE_ADDR_SPACE (item_type));
12515     }
12516   else if (code == INTEGER_TYPE
12517            && TREE_TYPE (type) != NULL_TREE
12518            && subrange_type_for_debug_p (type, &low, &high))
12519     {
12520       mod_type_die = subrange_type_die (type, low, high, context_die);
12521       item_type = TREE_TYPE (type);
12522     }
12523   else if (is_base_type (type))
12524     mod_type_die = base_type_die (type);
12525   else
12526     {
12527       gen_type_die (type, context_die);
12528
12529       /* We have to get the type_main_variant here (and pass that to the
12530          `lookup_type_die' routine) because the ..._TYPE node we have
12531          might simply be a *copy* of some original type node (where the
12532          copy was created to help us keep track of typedef names) and
12533          that copy might have a different TYPE_UID from the original
12534          ..._TYPE node.  */
12535       if (TREE_CODE (type) != VECTOR_TYPE)
12536         return lookup_type_die (type_main_variant (type));
12537       else
12538         /* Vectors have the debugging information in the type,
12539            not the main variant.  */
12540         return lookup_type_die (type);
12541     }
12542
12543   /* Builtin types don't have a DECL_ORIGINAL_TYPE.  For those,
12544      don't output a DW_TAG_typedef, since there isn't one in the
12545      user's program; just attach a DW_AT_name to the type.
12546      Don't attach a DW_AT_name to DW_TAG_const_type or DW_TAG_volatile_type
12547      if the base type already has the same name.  */
12548   if (name
12549       && ((TREE_CODE (name) != TYPE_DECL
12550            && (qualified_type == TYPE_MAIN_VARIANT (type)
12551                || (!is_const_type && !is_volatile_type)))
12552           || (TREE_CODE (name) == TYPE_DECL
12553               && TREE_TYPE (name) == qualified_type
12554               && DECL_NAME (name))))
12555     {
12556       if (TREE_CODE (name) == TYPE_DECL)
12557         /* Could just call add_name_and_src_coords_attributes here,
12558            but since this is a builtin type it doesn't have any
12559            useful source coordinates anyway.  */
12560         name = DECL_NAME (name);
12561       add_name_attribute (mod_type_die, IDENTIFIER_POINTER (name));
12562     }
12563   /* This probably indicates a bug.  */
12564   else if (mod_type_die && mod_type_die->die_tag == DW_TAG_base_type)
12565     add_name_attribute (mod_type_die, "__unknown__");
12566
12567   if (qualified_type)
12568     equate_type_number_to_die (qualified_type, mod_type_die);
12569
12570   if (item_type)
12571     /* We must do this after the equate_type_number_to_die call, in case
12572        this is a recursive type.  This ensures that the modified_type_die
12573        recursion will terminate even if the type is recursive.  Recursive
12574        types are possible in Ada.  */
12575     sub_die = modified_type_die (item_type,
12576                                  TYPE_READONLY (item_type),
12577                                  TYPE_VOLATILE (item_type),
12578                                  context_die);
12579
12580   if (sub_die != NULL)
12581     add_AT_die_ref (mod_type_die, DW_AT_type, sub_die);
12582
12583   return mod_type_die;
12584 }
12585
12586 /* Generate DIEs for the generic parameters of T.
12587    T must be either a generic type or a generic function.
12588    See http://gcc.gnu.org/wiki/TemplateParmsDwarf for more.  */
12589
12590 static void
12591 gen_generic_params_dies (tree t)
12592 {
12593   tree parms, args;
12594   int parms_num, i;
12595   dw_die_ref die = NULL;
12596
12597   if (!t || (TYPE_P (t) && !COMPLETE_TYPE_P (t)))
12598     return;
12599
12600   if (TYPE_P (t))
12601     die = lookup_type_die (t);
12602   else if (DECL_P (t))
12603     die = lookup_decl_die (t);
12604
12605   gcc_assert (die);
12606
12607   parms = lang_hooks.get_innermost_generic_parms (t);
12608   if (!parms)
12609     /* T has no generic parameter. It means T is neither a generic type
12610        or function. End of story.  */
12611     return;
12612
12613   parms_num = TREE_VEC_LENGTH (parms);
12614   args = lang_hooks.get_innermost_generic_args (t);
12615   for (i = 0; i < parms_num; i++)
12616     {
12617       tree parm, arg, arg_pack_elems;
12618
12619       parm = TREE_VEC_ELT (parms, i);
12620       arg = TREE_VEC_ELT (args, i);
12621       arg_pack_elems = lang_hooks.types.get_argument_pack_elems (arg);
12622       gcc_assert (parm && TREE_VALUE (parm) && arg);
12623
12624       if (parm && TREE_VALUE (parm) && arg)
12625         {
12626           /* If PARM represents a template parameter pack,
12627              emit a DW_TAG_GNU_template_parameter_pack DIE, followed
12628              by DW_TAG_template_*_parameter DIEs for the argument
12629              pack elements of ARG. Note that ARG would then be
12630              an argument pack.  */
12631           if (arg_pack_elems)
12632             template_parameter_pack_die (TREE_VALUE (parm),
12633                                          arg_pack_elems,
12634                                          die);
12635           else
12636             generic_parameter_die (TREE_VALUE (parm), arg,
12637                                    true /* Emit DW_AT_name */, die);
12638         }
12639     }
12640 }
12641
12642 /* Create and return a DIE for PARM which should be
12643    the representation of a generic type parameter.
12644    For instance, in the C++ front end, PARM would be a template parameter.
12645    ARG is the argument to PARM.
12646    EMIT_NAME_P if tree, the DIE will have DW_AT_name attribute set to the
12647    name of the PARM.
12648    PARENT_DIE is the parent DIE which the new created DIE should be added to,
12649    as a child node.  */
12650
12651 static dw_die_ref
12652 generic_parameter_die (tree parm, tree arg,
12653                        bool emit_name_p,
12654                        dw_die_ref parent_die)
12655 {
12656   dw_die_ref tmpl_die = NULL;
12657   const char *name = NULL;
12658
12659   if (!parm || !DECL_NAME (parm) || !arg)
12660     return NULL;
12661
12662   /* We support non-type generic parameters and arguments,
12663      type generic parameters and arguments, as well as
12664      generic generic parameters (a.k.a. template template parameters in C++)
12665      and arguments.  */
12666   if (TREE_CODE (parm) == PARM_DECL)
12667     /* PARM is a nontype generic parameter  */
12668     tmpl_die = new_die (DW_TAG_template_value_param, parent_die, parm);
12669   else if (TREE_CODE (parm) == TYPE_DECL)
12670     /* PARM is a type generic parameter.  */
12671     tmpl_die = new_die (DW_TAG_template_type_param, parent_die, parm);
12672   else if (lang_hooks.decls.generic_generic_parameter_decl_p (parm))
12673     /* PARM is a generic generic parameter.
12674        Its DIE is a GNU extension. It shall have a
12675        DW_AT_name attribute to represent the name of the template template
12676        parameter, and a DW_AT_GNU_template_name attribute to represent the
12677        name of the template template argument.  */
12678     tmpl_die = new_die (DW_TAG_GNU_template_template_param,
12679                         parent_die, parm);
12680   else
12681     gcc_unreachable ();
12682
12683   if (tmpl_die)
12684     {
12685       tree tmpl_type;
12686
12687       /* If PARM is a generic parameter pack, it means we are
12688          emitting debug info for a template argument pack element.
12689          In other terms, ARG is a template argument pack element.
12690          In that case, we don't emit any DW_AT_name attribute for
12691          the die.  */
12692       if (emit_name_p)
12693         {
12694           name = IDENTIFIER_POINTER (DECL_NAME (parm));
12695           gcc_assert (name);
12696           add_AT_string (tmpl_die, DW_AT_name, name);
12697         }
12698
12699       if (!lang_hooks.decls.generic_generic_parameter_decl_p (parm))
12700         {
12701           /* DWARF3, 5.6.8 says if PARM is a non-type generic parameter
12702              TMPL_DIE should have a child DW_AT_type attribute that is set
12703              to the type of the argument to PARM, which is ARG.
12704              If PARM is a type generic parameter, TMPL_DIE should have a
12705              child DW_AT_type that is set to ARG.  */
12706           tmpl_type = TYPE_P (arg) ? arg : TREE_TYPE (arg);
12707           add_type_attribute (tmpl_die, tmpl_type, 0,
12708                               TREE_THIS_VOLATILE (tmpl_type),
12709                               parent_die);
12710         }
12711       else
12712         {
12713           /* So TMPL_DIE is a DIE representing a
12714              a generic generic template parameter, a.k.a template template
12715              parameter in C++ and arg is a template.  */
12716
12717           /* The DW_AT_GNU_template_name attribute of the DIE must be set
12718              to the name of the argument.  */
12719           name = dwarf2_name (TYPE_P (arg) ? TYPE_NAME (arg) : arg, 1);
12720           if (name)
12721             add_AT_string (tmpl_die, DW_AT_GNU_template_name, name);
12722         }
12723
12724       if (TREE_CODE (parm) == PARM_DECL)
12725         /* So PARM is a non-type generic parameter.
12726            DWARF3 5.6.8 says we must set a DW_AT_const_value child
12727            attribute of TMPL_DIE which value represents the value
12728            of ARG.
12729            We must be careful here:
12730            The value of ARG might reference some function decls.
12731            We might currently be emitting debug info for a generic
12732            type and types are emitted before function decls, we don't
12733            know if the function decls referenced by ARG will actually be
12734            emitted after cgraph computations.
12735            So must defer the generation of the DW_AT_const_value to
12736            after cgraph is ready.  */
12737         append_entry_to_tmpl_value_parm_die_table (tmpl_die, arg);
12738     }
12739
12740   return tmpl_die;
12741 }
12742
12743 /* Generate and return a  DW_TAG_GNU_template_parameter_pack DIE representing.
12744    PARM_PACK must be a template parameter pack. The returned DIE
12745    will be child DIE of PARENT_DIE.  */
12746
12747 static dw_die_ref
12748 template_parameter_pack_die (tree parm_pack,
12749                              tree parm_pack_args,
12750                              dw_die_ref parent_die)
12751 {
12752   dw_die_ref die;
12753   int j;
12754
12755   gcc_assert (parent_die && parm_pack);
12756
12757   die = new_die (DW_TAG_GNU_template_parameter_pack, parent_die, parm_pack);
12758   add_name_and_src_coords_attributes (die, parm_pack);
12759   for (j = 0; j < TREE_VEC_LENGTH (parm_pack_args); j++)
12760     generic_parameter_die (parm_pack,
12761                            TREE_VEC_ELT (parm_pack_args, j),
12762                            false /* Don't emit DW_AT_name */,
12763                            die);
12764   return die;
12765 }
12766
12767 /* Given a pointer to an arbitrary ..._TYPE tree node, return true if it is
12768    an enumerated type.  */
12769
12770 static inline int
12771 type_is_enum (const_tree type)
12772 {
12773   return TREE_CODE (type) == ENUMERAL_TYPE;
12774 }
12775
12776 /* Return the DBX register number described by a given RTL node.  */
12777
12778 static unsigned int
12779 dbx_reg_number (const_rtx rtl)
12780 {
12781   unsigned regno = REGNO (rtl);
12782
12783   gcc_assert (regno < FIRST_PSEUDO_REGISTER);
12784
12785 #ifdef LEAF_REG_REMAP
12786   if (current_function_uses_only_leaf_regs)
12787     {
12788       int leaf_reg = LEAF_REG_REMAP (regno);
12789       if (leaf_reg != -1)
12790         regno = (unsigned) leaf_reg;
12791     }
12792 #endif
12793
12794   return DBX_REGISTER_NUMBER (regno);
12795 }
12796
12797 /* Optionally add a DW_OP_piece term to a location description expression.
12798    DW_OP_piece is only added if the location description expression already
12799    doesn't end with DW_OP_piece.  */
12800
12801 static void
12802 add_loc_descr_op_piece (dw_loc_descr_ref *list_head, int size)
12803 {
12804   dw_loc_descr_ref loc;
12805
12806   if (*list_head != NULL)
12807     {
12808       /* Find the end of the chain.  */
12809       for (loc = *list_head; loc->dw_loc_next != NULL; loc = loc->dw_loc_next)
12810         ;
12811
12812       if (loc->dw_loc_opc != DW_OP_piece)
12813         loc->dw_loc_next = new_loc_descr (DW_OP_piece, size, 0);
12814     }
12815 }
12816
12817 /* Return a location descriptor that designates a machine register or
12818    zero if there is none.  */
12819
12820 static dw_loc_descr_ref
12821 reg_loc_descriptor (rtx rtl, enum var_init_status initialized)
12822 {
12823   rtx regs;
12824
12825   if (REGNO (rtl) >= FIRST_PSEUDO_REGISTER)
12826     return 0;
12827
12828   regs = targetm.dwarf_register_span (rtl);
12829
12830   if (hard_regno_nregs[REGNO (rtl)][GET_MODE (rtl)] > 1 || regs)
12831     return multiple_reg_loc_descriptor (rtl, regs, initialized);
12832   else
12833     return one_reg_loc_descriptor (dbx_reg_number (rtl), initialized);
12834 }
12835
12836 /* Return a location descriptor that designates a machine register for
12837    a given hard register number.  */
12838
12839 static dw_loc_descr_ref
12840 one_reg_loc_descriptor (unsigned int regno, enum var_init_status initialized)
12841 {
12842   dw_loc_descr_ref reg_loc_descr;
12843
12844   if (regno <= 31)
12845     reg_loc_descr
12846       = new_loc_descr ((enum dwarf_location_atom) (DW_OP_reg0 + regno), 0, 0);
12847   else
12848     reg_loc_descr = new_loc_descr (DW_OP_regx, regno, 0);
12849
12850   if (initialized == VAR_INIT_STATUS_UNINITIALIZED)
12851     add_loc_descr (&reg_loc_descr, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
12852
12853   return reg_loc_descr;
12854 }
12855
12856 /* Given an RTL of a register, return a location descriptor that
12857    designates a value that spans more than one register.  */
12858
12859 static dw_loc_descr_ref
12860 multiple_reg_loc_descriptor (rtx rtl, rtx regs,
12861                              enum var_init_status initialized)
12862 {
12863   int nregs, size, i;
12864   unsigned reg;
12865   dw_loc_descr_ref loc_result = NULL;
12866
12867   reg = REGNO (rtl);
12868 #ifdef LEAF_REG_REMAP
12869   if (current_function_uses_only_leaf_regs)
12870     {
12871       int leaf_reg = LEAF_REG_REMAP (reg);
12872       if (leaf_reg != -1)
12873         reg = (unsigned) leaf_reg;
12874     }
12875 #endif
12876   gcc_assert ((unsigned) DBX_REGISTER_NUMBER (reg) == dbx_reg_number (rtl));
12877   nregs = hard_regno_nregs[REGNO (rtl)][GET_MODE (rtl)];
12878
12879   /* Simple, contiguous registers.  */
12880   if (regs == NULL_RTX)
12881     {
12882       size = GET_MODE_SIZE (GET_MODE (rtl)) / nregs;
12883
12884       loc_result = NULL;
12885       while (nregs--)
12886         {
12887           dw_loc_descr_ref t;
12888
12889           t = one_reg_loc_descriptor (DBX_REGISTER_NUMBER (reg),
12890                                       VAR_INIT_STATUS_INITIALIZED);
12891           add_loc_descr (&loc_result, t);
12892           add_loc_descr_op_piece (&loc_result, size);
12893           ++reg;
12894         }
12895       return loc_result;
12896     }
12897
12898   /* Now onto stupid register sets in non contiguous locations.  */
12899
12900   gcc_assert (GET_CODE (regs) == PARALLEL);
12901
12902   size = GET_MODE_SIZE (GET_MODE (XVECEXP (regs, 0, 0)));
12903   loc_result = NULL;
12904
12905   for (i = 0; i < XVECLEN (regs, 0); ++i)
12906     {
12907       dw_loc_descr_ref t;
12908
12909       t = one_reg_loc_descriptor (REGNO (XVECEXP (regs, 0, i)),
12910                                   VAR_INIT_STATUS_INITIALIZED);
12911       add_loc_descr (&loc_result, t);
12912       size = GET_MODE_SIZE (GET_MODE (XVECEXP (regs, 0, 0)));
12913       add_loc_descr_op_piece (&loc_result, size);
12914     }
12915
12916   if (loc_result && initialized == VAR_INIT_STATUS_UNINITIALIZED)
12917     add_loc_descr (&loc_result, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
12918   return loc_result;
12919 }
12920
12921 #endif /* DWARF2_DEBUGGING_INFO */
12922
12923 #if defined (DWARF2_DEBUGGING_INFO) || defined (DWARF2_UNWIND_INFO)
12924
12925 /* Return a location descriptor that designates a constant.  */
12926
12927 static dw_loc_descr_ref
12928 int_loc_descriptor (HOST_WIDE_INT i)
12929 {
12930   enum dwarf_location_atom op;
12931
12932   /* Pick the smallest representation of a constant, rather than just
12933      defaulting to the LEB encoding.  */
12934   if (i >= 0)
12935     {
12936       if (i <= 31)
12937         op = (enum dwarf_location_atom) (DW_OP_lit0 + i);
12938       else if (i <= 0xff)
12939         op = DW_OP_const1u;
12940       else if (i <= 0xffff)
12941         op = DW_OP_const2u;
12942       else if (HOST_BITS_PER_WIDE_INT == 32
12943                || i <= 0xffffffff)
12944         op = DW_OP_const4u;
12945       else
12946         op = DW_OP_constu;
12947     }
12948   else
12949     {
12950       if (i >= -0x80)
12951         op = DW_OP_const1s;
12952       else if (i >= -0x8000)
12953         op = DW_OP_const2s;
12954       else if (HOST_BITS_PER_WIDE_INT == 32
12955                || i >= -0x80000000)
12956         op = DW_OP_const4s;
12957       else
12958         op = DW_OP_consts;
12959     }
12960
12961   return new_loc_descr (op, i, 0);
12962 }
12963 #endif
12964
12965 #ifdef DWARF2_DEBUGGING_INFO
12966 /* Return loc description representing "address" of integer value.
12967    This can appear only as toplevel expression.  */
12968
12969 static dw_loc_descr_ref
12970 address_of_int_loc_descriptor (int size, HOST_WIDE_INT i)
12971 {
12972   int litsize;
12973   dw_loc_descr_ref loc_result = NULL;
12974
12975   if (!(dwarf_version >= 4 || !dwarf_strict))
12976     return NULL;
12977
12978   if (i >= 0)
12979     {
12980       if (i <= 31)
12981         litsize = 1;
12982       else if (i <= 0xff)
12983         litsize = 2;
12984       else if (i <= 0xffff)
12985         litsize = 3;
12986       else if (HOST_BITS_PER_WIDE_INT == 32
12987                || i <= 0xffffffff)
12988         litsize = 5;
12989       else
12990         litsize = 1 + size_of_uleb128 ((unsigned HOST_WIDE_INT) i);
12991     }
12992   else
12993     {
12994       if (i >= -0x80)
12995         litsize = 2;
12996       else if (i >= -0x8000)
12997         litsize = 3;
12998       else if (HOST_BITS_PER_WIDE_INT == 32
12999                || i >= -0x80000000)
13000         litsize = 5;
13001       else
13002         litsize = 1 + size_of_sleb128 (i);
13003     }
13004   /* Determine if DW_OP_stack_value or DW_OP_implicit_value
13005      is more compact.  For DW_OP_stack_value we need:
13006      litsize + 1 (DW_OP_stack_value)
13007      and for DW_OP_implicit_value:
13008      1 (DW_OP_implicit_value) + 1 (length) + size.  */
13009   if ((int) DWARF2_ADDR_SIZE >= size && litsize + 1 <= 1 + 1 + size)
13010     {
13011       loc_result = int_loc_descriptor (i);
13012       add_loc_descr (&loc_result,
13013                      new_loc_descr (DW_OP_stack_value, 0, 0));
13014       return loc_result;
13015     }
13016
13017   loc_result = new_loc_descr (DW_OP_implicit_value,
13018                               size, 0);
13019   loc_result->dw_loc_oprnd2.val_class = dw_val_class_const;
13020   loc_result->dw_loc_oprnd2.v.val_int = i;
13021   return loc_result;
13022 }
13023
13024 /* Return a location descriptor that designates a base+offset location.  */
13025
13026 static dw_loc_descr_ref
13027 based_loc_descr (rtx reg, HOST_WIDE_INT offset,
13028                  enum var_init_status initialized)
13029 {
13030   unsigned int regno;
13031   dw_loc_descr_ref result;
13032   dw_fde_ref fde = current_fde ();
13033
13034   /* We only use "frame base" when we're sure we're talking about the
13035      post-prologue local stack frame.  We do this by *not* running
13036      register elimination until this point, and recognizing the special
13037      argument pointer and soft frame pointer rtx's.  */
13038   if (reg == arg_pointer_rtx || reg == frame_pointer_rtx)
13039     {
13040       rtx elim = eliminate_regs (reg, VOIDmode, NULL_RTX);
13041
13042       if (elim != reg)
13043         {
13044           if (GET_CODE (elim) == PLUS)
13045             {
13046               offset += INTVAL (XEXP (elim, 1));
13047               elim = XEXP (elim, 0);
13048             }
13049           gcc_assert ((SUPPORTS_STACK_ALIGNMENT
13050                        && (elim == hard_frame_pointer_rtx
13051                            || elim == stack_pointer_rtx))
13052                       || elim == (frame_pointer_needed
13053                                   ? hard_frame_pointer_rtx
13054                                   : stack_pointer_rtx));
13055
13056           /* If drap register is used to align stack, use frame
13057              pointer + offset to access stack variables.  If stack
13058              is aligned without drap, use stack pointer + offset to
13059              access stack variables.  */
13060           if (crtl->stack_realign_tried
13061               && reg == frame_pointer_rtx)
13062             {
13063               int base_reg
13064                 = DWARF_FRAME_REGNUM ((fde && fde->drap_reg != INVALID_REGNUM)
13065                                       ? HARD_FRAME_POINTER_REGNUM
13066                                       : STACK_POINTER_REGNUM);
13067               return new_reg_loc_descr (base_reg, offset);
13068             }
13069
13070           offset += frame_pointer_fb_offset;
13071           return new_loc_descr (DW_OP_fbreg, offset, 0);
13072         }
13073     }
13074   else if (!optimize
13075            && fde
13076            && (fde->drap_reg == REGNO (reg)
13077                || fde->vdrap_reg == REGNO (reg)))
13078     {
13079       /* Use cfa+offset to represent the location of arguments passed
13080          on the stack when drap is used to align stack.
13081          Only do this when not optimizing, for optimized code var-tracking
13082          is supposed to track where the arguments live and the register
13083          used as vdrap or drap in some spot might be used for something
13084          else in other part of the routine.  */
13085       return new_loc_descr (DW_OP_fbreg, offset, 0);
13086     }
13087
13088   regno = dbx_reg_number (reg);
13089   if (regno <= 31)
13090     result = new_loc_descr ((enum dwarf_location_atom) (DW_OP_breg0 + regno),
13091                             offset, 0);
13092   else
13093     result = new_loc_descr (DW_OP_bregx, regno, offset);
13094
13095   if (initialized == VAR_INIT_STATUS_UNINITIALIZED)
13096     add_loc_descr (&result, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
13097
13098   return result;
13099 }
13100
13101 /* Return true if this RTL expression describes a base+offset calculation.  */
13102
13103 static inline int
13104 is_based_loc (const_rtx rtl)
13105 {
13106   return (GET_CODE (rtl) == PLUS
13107           && ((REG_P (XEXP (rtl, 0))
13108                && REGNO (XEXP (rtl, 0)) < FIRST_PSEUDO_REGISTER
13109                && CONST_INT_P (XEXP (rtl, 1)))));
13110 }
13111
13112 /* Try to handle TLS MEMs, for which mem_loc_descriptor on XEXP (mem, 0)
13113    failed.  */
13114
13115 static dw_loc_descr_ref
13116 tls_mem_loc_descriptor (rtx mem)
13117 {
13118   tree base;
13119   dw_loc_descr_ref loc_result;
13120
13121   if (MEM_EXPR (mem) == NULL_TREE || MEM_OFFSET (mem) == NULL_RTX)
13122     return NULL;
13123
13124   base = get_base_address (MEM_EXPR (mem));
13125   if (base == NULL
13126       || TREE_CODE (base) != VAR_DECL
13127       || !DECL_THREAD_LOCAL_P (base))
13128     return NULL;
13129
13130   loc_result = loc_descriptor_from_tree (MEM_EXPR (mem), 1);
13131   if (loc_result == NULL)
13132     return NULL;
13133
13134   if (INTVAL (MEM_OFFSET (mem)))
13135     loc_descr_plus_const (&loc_result, INTVAL (MEM_OFFSET (mem)));
13136
13137   return loc_result;
13138 }
13139
13140 /* Output debug info about reason why we failed to expand expression as dwarf
13141    expression.  */
13142
13143 static void
13144 expansion_failed (tree expr, rtx rtl, char const *reason)
13145 {
13146   if (dump_file && (dump_flags & TDF_DETAILS))
13147     {
13148       fprintf (dump_file, "Failed to expand as dwarf: ");
13149       if (expr)
13150         print_generic_expr (dump_file, expr, dump_flags);
13151       if (rtl)
13152         {
13153           fprintf (dump_file, "\n");
13154           print_rtl (dump_file, rtl);
13155         }
13156       fprintf (dump_file, "\nReason: %s\n", reason);
13157     }
13158 }
13159
13160 /* Helper function for const_ok_for_output, called either directly
13161    or via for_each_rtx.  */
13162
13163 static int
13164 const_ok_for_output_1 (rtx *rtlp, void *data ATTRIBUTE_UNUSED)
13165 {
13166   rtx rtl = *rtlp;
13167
13168   if (GET_CODE (rtl) == UNSPEC)
13169     {
13170       /* If delegitimize_address couldn't do anything with the UNSPEC, assume
13171          we can't express it in the debug info.  */
13172 #ifdef ENABLE_CHECKING
13173       inform (current_function_decl
13174               ? DECL_SOURCE_LOCATION (current_function_decl)
13175               : UNKNOWN_LOCATION,
13176               "non-delegitimized UNSPEC %d found in variable location",
13177               XINT (rtl, 1));
13178 #endif
13179       expansion_failed (NULL_TREE, rtl,
13180                         "UNSPEC hasn't been delegitimized.\n");
13181       return 1;
13182     }
13183
13184   if (GET_CODE (rtl) != SYMBOL_REF)
13185     return 0;
13186
13187   if (CONSTANT_POOL_ADDRESS_P (rtl))
13188     {
13189       bool marked;
13190       get_pool_constant_mark (rtl, &marked);
13191       /* If all references to this pool constant were optimized away,
13192          it was not output and thus we can't represent it.  */
13193       if (!marked)
13194         {
13195           expansion_failed (NULL_TREE, rtl,
13196                             "Constant was removed from constant pool.\n");
13197           return 1;
13198         }
13199     }
13200
13201   if (SYMBOL_REF_TLS_MODEL (rtl) != TLS_MODEL_NONE)
13202     return 1;
13203
13204   /* Avoid references to external symbols in debug info, on several targets
13205      the linker might even refuse to link when linking a shared library,
13206      and in many other cases the relocations for .debug_info/.debug_loc are
13207      dropped, so the address becomes zero anyway.  Hidden symbols, guaranteed
13208      to be defined within the same shared library or executable are fine.  */
13209   if (SYMBOL_REF_EXTERNAL_P (rtl))
13210     {
13211       tree decl = SYMBOL_REF_DECL (rtl);
13212
13213       if (decl == NULL || !targetm.binds_local_p (decl))
13214         {
13215           expansion_failed (NULL_TREE, rtl,
13216                             "Symbol not defined in current TU.\n");
13217           return 1;
13218         }
13219     }
13220
13221   return 0;
13222 }
13223
13224 /* Return true if constant RTL can be emitted in DW_OP_addr or
13225    DW_AT_const_value.  TLS SYMBOL_REFs, external SYMBOL_REFs or
13226    non-marked constant pool SYMBOL_REFs can't be referenced in it.  */
13227
13228 static bool
13229 const_ok_for_output (rtx rtl)
13230 {
13231   if (GET_CODE (rtl) == SYMBOL_REF)
13232     return const_ok_for_output_1 (&rtl, NULL) == 0;
13233
13234   if (GET_CODE (rtl) == CONST)
13235     return for_each_rtx (&XEXP (rtl, 0), const_ok_for_output_1, NULL) == 0;
13236
13237   return true;
13238 }
13239
13240 /* The following routine converts the RTL for a variable or parameter
13241    (resident in memory) into an equivalent Dwarf representation of a
13242    mechanism for getting the address of that same variable onto the top of a
13243    hypothetical "address evaluation" stack.
13244
13245    When creating memory location descriptors, we are effectively transforming
13246    the RTL for a memory-resident object into its Dwarf postfix expression
13247    equivalent.  This routine recursively descends an RTL tree, turning
13248    it into Dwarf postfix code as it goes.
13249
13250    MODE is the mode of the memory reference, needed to handle some
13251    autoincrement addressing modes.
13252
13253    CAN_USE_FBREG is a flag whether we can use DW_AT_frame_base in the
13254    location list for RTL.
13255
13256    Return 0 if we can't represent the location.  */
13257
13258 static dw_loc_descr_ref
13259 mem_loc_descriptor (rtx rtl, enum machine_mode mode,
13260                     enum var_init_status initialized)
13261 {
13262   dw_loc_descr_ref mem_loc_result = NULL;
13263   enum dwarf_location_atom op;
13264   dw_loc_descr_ref op0, op1;
13265
13266   /* Note that for a dynamically sized array, the location we will generate a
13267      description of here will be the lowest numbered location which is
13268      actually within the array.  That's *not* necessarily the same as the
13269      zeroth element of the array.  */
13270
13271   rtl = targetm.delegitimize_address (rtl);
13272
13273   switch (GET_CODE (rtl))
13274     {
13275     case POST_INC:
13276     case POST_DEC:
13277     case POST_MODIFY:
13278       return mem_loc_descriptor (XEXP (rtl, 0), mode, initialized);
13279
13280     case SUBREG:
13281       /* The case of a subreg may arise when we have a local (register)
13282          variable or a formal (register) parameter which doesn't quite fill
13283          up an entire register.  For now, just assume that it is
13284          legitimate to make the Dwarf info refer to the whole register which
13285          contains the given subreg.  */
13286       if (!subreg_lowpart_p (rtl))
13287         break;
13288       rtl = SUBREG_REG (rtl);
13289       if (GET_MODE_SIZE (GET_MODE (rtl)) > DWARF2_ADDR_SIZE)
13290         break;
13291       if (GET_MODE_CLASS (GET_MODE (rtl)) != MODE_INT)
13292         break;
13293       mem_loc_result = mem_loc_descriptor (rtl, mode, initialized);
13294       break;
13295
13296     case REG:
13297       /* Whenever a register number forms a part of the description of the
13298          method for calculating the (dynamic) address of a memory resident
13299          object, DWARF rules require the register number be referred to as
13300          a "base register".  This distinction is not based in any way upon
13301          what category of register the hardware believes the given register
13302          belongs to.  This is strictly DWARF terminology we're dealing with
13303          here. Note that in cases where the location of a memory-resident
13304          data object could be expressed as: OP_ADD (OP_BASEREG (basereg),
13305          OP_CONST (0)) the actual DWARF location descriptor that we generate
13306          may just be OP_BASEREG (basereg).  This may look deceptively like
13307          the object in question was allocated to a register (rather than in
13308          memory) so DWARF consumers need to be aware of the subtle
13309          distinction between OP_REG and OP_BASEREG.  */
13310       if (REGNO (rtl) < FIRST_PSEUDO_REGISTER)
13311         mem_loc_result = based_loc_descr (rtl, 0, VAR_INIT_STATUS_INITIALIZED);
13312       else if (stack_realign_drap
13313                && crtl->drap_reg
13314                && crtl->args.internal_arg_pointer == rtl
13315                && REGNO (crtl->drap_reg) < FIRST_PSEUDO_REGISTER)
13316         {
13317           /* If RTL is internal_arg_pointer, which has been optimized
13318              out, use DRAP instead.  */
13319           mem_loc_result = based_loc_descr (crtl->drap_reg, 0,
13320                                             VAR_INIT_STATUS_INITIALIZED);
13321         }
13322       break;
13323
13324     case SIGN_EXTEND:
13325     case ZERO_EXTEND:
13326       op0 = mem_loc_descriptor (XEXP (rtl, 0), mode,
13327                                 VAR_INIT_STATUS_INITIALIZED);
13328       if (op0 == 0)
13329         break;
13330       else
13331         {
13332           int shift = DWARF2_ADDR_SIZE
13333                       - GET_MODE_SIZE (GET_MODE (XEXP (rtl, 0)));
13334           shift *= BITS_PER_UNIT;
13335           if (GET_CODE (rtl) == SIGN_EXTEND)
13336             op = DW_OP_shra;
13337           else
13338             op = DW_OP_shr;
13339           mem_loc_result = op0;
13340           add_loc_descr (&mem_loc_result, int_loc_descriptor (shift));
13341           add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_shl, 0, 0));
13342           add_loc_descr (&mem_loc_result, int_loc_descriptor (shift));
13343           add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0));
13344         }
13345       break;
13346
13347     case MEM:
13348       mem_loc_result = mem_loc_descriptor (XEXP (rtl, 0), GET_MODE (rtl),
13349                                            VAR_INIT_STATUS_INITIALIZED);
13350       if (mem_loc_result == NULL)
13351         mem_loc_result = tls_mem_loc_descriptor (rtl);
13352       if (mem_loc_result != 0)
13353         {
13354           if (GET_MODE_SIZE (GET_MODE (rtl)) > DWARF2_ADDR_SIZE)
13355             {
13356               expansion_failed (NULL_TREE, rtl, "DWARF address size mismatch");
13357               return 0;
13358             }
13359           else if (GET_MODE_SIZE (GET_MODE (rtl)) == DWARF2_ADDR_SIZE)
13360             add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_deref, 0, 0));
13361           else
13362             add_loc_descr (&mem_loc_result,
13363                            new_loc_descr (DW_OP_deref_size,
13364                                           GET_MODE_SIZE (GET_MODE (rtl)), 0));
13365         }
13366       else
13367         {
13368           rtx new_rtl = avoid_constant_pool_reference (rtl);
13369           if (new_rtl != rtl)
13370             return mem_loc_descriptor (new_rtl, mode, initialized);
13371         }
13372       break;
13373
13374     case LO_SUM:
13375          rtl = XEXP (rtl, 1);
13376
13377       /* ... fall through ...  */
13378
13379     case LABEL_REF:
13380       /* Some ports can transform a symbol ref into a label ref, because
13381          the symbol ref is too far away and has to be dumped into a constant
13382          pool.  */
13383     case CONST:
13384     case SYMBOL_REF:
13385       if (GET_CODE (rtl) == SYMBOL_REF
13386           && SYMBOL_REF_TLS_MODEL (rtl) != TLS_MODEL_NONE)
13387         {
13388           dw_loc_descr_ref temp;
13389
13390           /* If this is not defined, we have no way to emit the data.  */
13391           if (!targetm.have_tls || !targetm.asm_out.output_dwarf_dtprel)
13392             break;
13393
13394           temp = new_loc_descr (DW_OP_addr, 0, 0);
13395           temp->dw_loc_oprnd1.val_class = dw_val_class_addr;
13396           temp->dw_loc_oprnd1.v.val_addr = rtl;
13397           temp->dtprel = true;
13398
13399           mem_loc_result = new_loc_descr (DW_OP_GNU_push_tls_address, 0, 0);
13400           add_loc_descr (&mem_loc_result, temp);
13401
13402           break;
13403         }
13404
13405       if (!const_ok_for_output (rtl))
13406         break;
13407
13408     symref:
13409       mem_loc_result = new_loc_descr (DW_OP_addr, 0, 0);
13410       mem_loc_result->dw_loc_oprnd1.val_class = dw_val_class_addr;
13411       mem_loc_result->dw_loc_oprnd1.v.val_addr = rtl;
13412       VEC_safe_push (rtx, gc, used_rtx_array, rtl);
13413       break;
13414
13415     case CONCAT:
13416     case CONCATN:
13417     case VAR_LOCATION:
13418       expansion_failed (NULL_TREE, rtl,
13419                         "CONCAT/CONCATN/VAR_LOCATION is handled only by loc_descriptor");
13420       return 0;
13421
13422     case PRE_MODIFY:
13423       /* Extract the PLUS expression nested inside and fall into
13424          PLUS code below.  */
13425       rtl = XEXP (rtl, 1);
13426       goto plus;
13427
13428     case PRE_INC:
13429     case PRE_DEC:
13430       /* Turn these into a PLUS expression and fall into the PLUS code
13431          below.  */
13432       rtl = gen_rtx_PLUS (word_mode, XEXP (rtl, 0),
13433                           GEN_INT (GET_CODE (rtl) == PRE_INC
13434                                    ? GET_MODE_UNIT_SIZE (mode)
13435                                    : -GET_MODE_UNIT_SIZE (mode)));
13436
13437       /* ... fall through ...  */
13438
13439     case PLUS:
13440     plus:
13441       if (is_based_loc (rtl))
13442         mem_loc_result = based_loc_descr (XEXP (rtl, 0),
13443                                           INTVAL (XEXP (rtl, 1)),
13444                                           VAR_INIT_STATUS_INITIALIZED);
13445       else
13446         {
13447           mem_loc_result = mem_loc_descriptor (XEXP (rtl, 0), mode,
13448                                                VAR_INIT_STATUS_INITIALIZED);
13449           if (mem_loc_result == 0)
13450             break;
13451
13452           if (CONST_INT_P (XEXP (rtl, 1)))
13453             loc_descr_plus_const (&mem_loc_result, INTVAL (XEXP (rtl, 1)));
13454           else
13455             {
13456               dw_loc_descr_ref mem_loc_result2
13457                 = mem_loc_descriptor (XEXP (rtl, 1), mode,
13458                                       VAR_INIT_STATUS_INITIALIZED);
13459               if (mem_loc_result2 == 0)
13460                 break;
13461               add_loc_descr (&mem_loc_result, mem_loc_result2);
13462               add_loc_descr (&mem_loc_result,
13463                              new_loc_descr (DW_OP_plus, 0, 0));
13464             }
13465         }
13466       break;
13467
13468     /* If a pseudo-reg is optimized away, it is possible for it to
13469        be replaced with a MEM containing a multiply or shift.  */
13470     case MINUS:
13471       op = DW_OP_minus;
13472       goto do_binop;
13473
13474     case MULT:
13475       op = DW_OP_mul;
13476       goto do_binop;
13477
13478     case DIV:
13479       op = DW_OP_div;
13480       goto do_binop;
13481
13482     case UMOD:
13483       op = DW_OP_mod;
13484       goto do_binop;
13485
13486     case ASHIFT:
13487       op = DW_OP_shl;
13488       goto do_binop;
13489
13490     case ASHIFTRT:
13491       op = DW_OP_shra;
13492       goto do_binop;
13493
13494     case LSHIFTRT:
13495       op = DW_OP_shr;
13496       goto do_binop;
13497
13498     case AND:
13499       op = DW_OP_and;
13500       goto do_binop;
13501
13502     case IOR:
13503       op = DW_OP_or;
13504       goto do_binop;
13505
13506     case XOR:
13507       op = DW_OP_xor;
13508       goto do_binop;
13509
13510     do_binop:
13511       op0 = mem_loc_descriptor (XEXP (rtl, 0), mode,
13512                                 VAR_INIT_STATUS_INITIALIZED);
13513       op1 = mem_loc_descriptor (XEXP (rtl, 1), mode,
13514                                 VAR_INIT_STATUS_INITIALIZED);
13515
13516       if (op0 == 0 || op1 == 0)
13517         break;
13518
13519       mem_loc_result = op0;
13520       add_loc_descr (&mem_loc_result, op1);
13521       add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0));
13522       break;
13523
13524     case MOD:
13525       op0 = mem_loc_descriptor (XEXP (rtl, 0), mode,
13526                                 VAR_INIT_STATUS_INITIALIZED);
13527       op1 = mem_loc_descriptor (XEXP (rtl, 1), mode,
13528                                 VAR_INIT_STATUS_INITIALIZED);
13529
13530       if (op0 == 0 || op1 == 0)
13531         break;
13532
13533       mem_loc_result = op0;
13534       add_loc_descr (&mem_loc_result, op1);
13535       add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_over, 0, 0));
13536       add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_over, 0, 0));
13537       add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_div, 0, 0));
13538       add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_mul, 0, 0));
13539       add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_minus, 0, 0));
13540       break;
13541
13542     case NOT:
13543       op = DW_OP_not;
13544       goto do_unop;
13545
13546     case ABS:
13547       op = DW_OP_abs;
13548       goto do_unop;
13549
13550     case NEG:
13551       op = DW_OP_neg;
13552       goto do_unop;
13553
13554     do_unop:
13555       op0 = mem_loc_descriptor (XEXP (rtl, 0), mode,
13556                                 VAR_INIT_STATUS_INITIALIZED);
13557
13558       if (op0 == 0)
13559         break;
13560
13561       mem_loc_result = op0;
13562       add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0));
13563       break;
13564
13565     case CONST_INT:
13566       mem_loc_result = int_loc_descriptor (INTVAL (rtl));
13567       break;
13568
13569     case EQ:
13570       op = DW_OP_eq;
13571       goto do_scompare;
13572
13573     case GE:
13574       op = DW_OP_ge;
13575       goto do_scompare;
13576
13577     case GT:
13578       op = DW_OP_gt;
13579       goto do_scompare;
13580
13581     case LE:
13582       op = DW_OP_le;
13583       goto do_scompare;
13584
13585     case LT:
13586       op = DW_OP_lt;
13587       goto do_scompare;
13588
13589     case NE:
13590       op = DW_OP_ne;
13591       goto do_scompare;
13592
13593     do_scompare:
13594       if (GET_MODE_SIZE (GET_MODE (XEXP (rtl, 0))) > DWARF2_ADDR_SIZE
13595           || GET_MODE_SIZE (GET_MODE (XEXP (rtl, 1))) > DWARF2_ADDR_SIZE)
13596         break;
13597       else
13598         {
13599           enum machine_mode op_mode = GET_MODE (XEXP (rtl, 0));
13600
13601           if (op_mode == VOIDmode)
13602             op_mode = GET_MODE (XEXP (rtl, 1));
13603           if (op_mode != VOIDmode && GET_MODE_CLASS (op_mode) != MODE_INT)
13604             break;
13605
13606           op0 = mem_loc_descriptor (XEXP (rtl, 0), mode,
13607                                     VAR_INIT_STATUS_INITIALIZED);
13608           op1 = mem_loc_descriptor (XEXP (rtl, 1), mode,
13609                                     VAR_INIT_STATUS_INITIALIZED);
13610
13611           if (op0 == 0 || op1 == 0)
13612             break;
13613
13614           if (op_mode != VOIDmode
13615               && GET_MODE_SIZE (op_mode) < DWARF2_ADDR_SIZE)
13616             {
13617               int shift = DWARF2_ADDR_SIZE - GET_MODE_SIZE (op_mode);
13618               shift *= BITS_PER_UNIT;
13619               /* For eq/ne, if the operands are known to be zero-extended,
13620                  there is no need to do the fancy shifting up.  */
13621               if (op == DW_OP_eq || op == DW_OP_ne)
13622                 {
13623                   dw_loc_descr_ref last0, last1;
13624                   for (last0 = op0;
13625                        last0->dw_loc_next != NULL;
13626                        last0 = last0->dw_loc_next)
13627                     ;
13628                   for (last1 = op1;
13629                        last1->dw_loc_next != NULL;
13630                        last1 = last1->dw_loc_next)
13631                     ;
13632                   /* deref_size zero extends, and for constants we can check
13633                      whether they are zero extended or not.  */
13634                   if (((last0->dw_loc_opc == DW_OP_deref_size
13635                         && last0->dw_loc_oprnd1.v.val_int
13636                            <= GET_MODE_SIZE (op_mode))
13637                        || (CONST_INT_P (XEXP (rtl, 0))
13638                             && (unsigned HOST_WIDE_INT) INTVAL (XEXP (rtl, 0))
13639                                == (INTVAL (XEXP (rtl, 0))
13640                                    & GET_MODE_MASK (op_mode))))
13641                       && ((last1->dw_loc_opc == DW_OP_deref_size
13642                            && last1->dw_loc_oprnd1.v.val_int
13643                               <= GET_MODE_SIZE (op_mode))
13644                           || (CONST_INT_P (XEXP (rtl, 1))
13645                               && (unsigned HOST_WIDE_INT)
13646                                  INTVAL (XEXP (rtl, 1))
13647                                  == (INTVAL (XEXP (rtl, 1))
13648                                      & GET_MODE_MASK (op_mode)))))
13649                     goto do_compare;
13650                 }
13651               add_loc_descr (&op0, int_loc_descriptor (shift));
13652               add_loc_descr (&op0, new_loc_descr (DW_OP_shl, 0, 0));
13653               if (CONST_INT_P (XEXP (rtl, 1)))
13654                 op1 = int_loc_descriptor (INTVAL (XEXP (rtl, 1)) << shift);
13655               else
13656                 {
13657                   add_loc_descr (&op1, int_loc_descriptor (shift));
13658                   add_loc_descr (&op1, new_loc_descr (DW_OP_shl, 0, 0));
13659                 }
13660             }
13661         }
13662
13663     do_compare:
13664       mem_loc_result = op0;
13665       add_loc_descr (&mem_loc_result, op1);
13666       add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0));
13667       if (STORE_FLAG_VALUE != 1)
13668         {
13669           add_loc_descr (&mem_loc_result,
13670                          int_loc_descriptor (STORE_FLAG_VALUE));
13671           add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_mul, 0, 0));
13672         }
13673       break;
13674
13675     case GEU:
13676       op = DW_OP_ge;
13677       goto do_ucompare;
13678
13679     case GTU:
13680       op = DW_OP_gt;
13681       goto do_ucompare;
13682
13683     case LEU:
13684       op = DW_OP_le;
13685       goto do_ucompare;
13686
13687     case LTU:
13688       op = DW_OP_lt;
13689       goto do_ucompare;
13690
13691     do_ucompare:
13692       if (GET_MODE_SIZE (GET_MODE (XEXP (rtl, 0))) > DWARF2_ADDR_SIZE
13693           || GET_MODE_SIZE (GET_MODE (XEXP (rtl, 1))) > DWARF2_ADDR_SIZE)
13694         break;
13695       else
13696         {
13697           enum machine_mode op_mode = GET_MODE (XEXP (rtl, 0));
13698
13699           if (op_mode == VOIDmode)
13700             op_mode = GET_MODE (XEXP (rtl, 1));
13701           if (op_mode != VOIDmode && GET_MODE_CLASS (op_mode) != MODE_INT)
13702             break;
13703
13704           op0 = mem_loc_descriptor (XEXP (rtl, 0), mode,
13705                                     VAR_INIT_STATUS_INITIALIZED);
13706           op1 = mem_loc_descriptor (XEXP (rtl, 1), mode,
13707                                     VAR_INIT_STATUS_INITIALIZED);
13708
13709           if (op0 == 0 || op1 == 0)
13710             break;
13711
13712           if (op_mode != VOIDmode
13713               && GET_MODE_SIZE (op_mode) < DWARF2_ADDR_SIZE)
13714             {
13715               HOST_WIDE_INT mask = GET_MODE_MASK (op_mode);
13716               dw_loc_descr_ref last0, last1;
13717               for (last0 = op0;
13718                    last0->dw_loc_next != NULL;
13719                    last0 = last0->dw_loc_next)
13720                 ;
13721               for (last1 = op1;
13722                    last1->dw_loc_next != NULL;
13723                    last1 = last1->dw_loc_next)
13724                 ;
13725               if (CONST_INT_P (XEXP (rtl, 0)))
13726                 op0 = int_loc_descriptor (INTVAL (XEXP (rtl, 0)) & mask);
13727               /* deref_size zero extends, so no need to mask it again.  */
13728               else if (last0->dw_loc_opc != DW_OP_deref_size
13729                        || last0->dw_loc_oprnd1.v.val_int
13730                           > GET_MODE_SIZE (op_mode))
13731                 {
13732                   add_loc_descr (&op0, int_loc_descriptor (mask));
13733                   add_loc_descr (&op0, new_loc_descr (DW_OP_and, 0, 0));
13734                 }
13735               if (CONST_INT_P (XEXP (rtl, 1)))
13736                 op1 = int_loc_descriptor (INTVAL (XEXP (rtl, 1)) & mask);
13737               /* deref_size zero extends, so no need to mask it again.  */
13738               else if (last1->dw_loc_opc != DW_OP_deref_size
13739                        || last1->dw_loc_oprnd1.v.val_int
13740                           > GET_MODE_SIZE (op_mode))
13741                 {
13742                   add_loc_descr (&op1, int_loc_descriptor (mask));
13743                   add_loc_descr (&op1, new_loc_descr (DW_OP_and, 0, 0));
13744                 }
13745             }
13746           else
13747             {
13748               HOST_WIDE_INT bias = 1;
13749               bias <<= (DWARF2_ADDR_SIZE * BITS_PER_UNIT - 1);
13750               add_loc_descr (&op0, new_loc_descr (DW_OP_plus_uconst, bias, 0));
13751               if (CONST_INT_P (XEXP (rtl, 1)))
13752                 op1 = int_loc_descriptor ((unsigned HOST_WIDE_INT) bias
13753                                           + INTVAL (XEXP (rtl, 1)));
13754               else
13755                 add_loc_descr (&op1, new_loc_descr (DW_OP_plus_uconst,
13756                                                     bias, 0));
13757             }
13758         }
13759       goto do_compare;
13760
13761     case SMIN:
13762     case SMAX:
13763     case UMIN:
13764     case UMAX:
13765       if (GET_MODE_CLASS (GET_MODE (XEXP (rtl, 0))) != MODE_INT
13766           || GET_MODE_SIZE (GET_MODE (XEXP (rtl, 0))) > DWARF2_ADDR_SIZE
13767           || GET_MODE (XEXP (rtl, 0)) != GET_MODE (XEXP (rtl, 1)))
13768         break;
13769
13770       op0 = mem_loc_descriptor (XEXP (rtl, 0), mode,
13771                                 VAR_INIT_STATUS_INITIALIZED);
13772       op1 = mem_loc_descriptor (XEXP (rtl, 1), mode,
13773                                 VAR_INIT_STATUS_INITIALIZED);
13774
13775       if (op0 == 0 || op1 == 0)
13776         break;
13777
13778       add_loc_descr (&op0, new_loc_descr (DW_OP_dup, 0, 0));
13779       add_loc_descr (&op1, new_loc_descr (DW_OP_swap, 0, 0));
13780       add_loc_descr (&op1, new_loc_descr (DW_OP_over, 0, 0));
13781       if (GET_CODE (rtl) == UMIN || GET_CODE (rtl) == UMAX)
13782         {
13783           if (GET_MODE_SIZE (GET_MODE (XEXP (rtl, 0))) < DWARF2_ADDR_SIZE)
13784             {
13785               HOST_WIDE_INT mask = GET_MODE_MASK (GET_MODE (XEXP (rtl, 0)));
13786               add_loc_descr (&op0, int_loc_descriptor (mask));
13787               add_loc_descr (&op0, new_loc_descr (DW_OP_and, 0, 0));
13788               add_loc_descr (&op1, int_loc_descriptor (mask));
13789               add_loc_descr (&op1, new_loc_descr (DW_OP_and, 0, 0));
13790             }
13791           else
13792             {
13793               HOST_WIDE_INT bias = 1;
13794               bias <<= (DWARF2_ADDR_SIZE * BITS_PER_UNIT - 1);
13795               add_loc_descr (&op0, new_loc_descr (DW_OP_plus_uconst, bias, 0));
13796               add_loc_descr (&op1, new_loc_descr (DW_OP_plus_uconst, bias, 0));
13797             }
13798         }
13799       else if (GET_MODE_SIZE (GET_MODE (XEXP (rtl, 0))) < DWARF2_ADDR_SIZE)
13800         {
13801           int shift = DWARF2_ADDR_SIZE
13802                       - GET_MODE_SIZE (GET_MODE (XEXP (rtl, 0)));
13803           shift *= BITS_PER_UNIT;
13804           add_loc_descr (&op0, int_loc_descriptor (shift));
13805           add_loc_descr (&op0, new_loc_descr (DW_OP_shl, 0, 0));
13806           add_loc_descr (&op1, int_loc_descriptor (shift));
13807           add_loc_descr (&op1, new_loc_descr (DW_OP_shl, 0, 0));
13808         }
13809
13810       if (GET_CODE (rtl) == SMIN || GET_CODE (rtl) == UMIN)
13811         op = DW_OP_lt;
13812       else
13813         op = DW_OP_gt;
13814       mem_loc_result = op0;
13815       add_loc_descr (&mem_loc_result, op1);
13816       add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0));
13817       {
13818         dw_loc_descr_ref bra_node, drop_node;
13819
13820         bra_node = new_loc_descr (DW_OP_bra, 0, 0);
13821         add_loc_descr (&mem_loc_result, bra_node);
13822         add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_swap, 0, 0));
13823         drop_node = new_loc_descr (DW_OP_drop, 0, 0);
13824         add_loc_descr (&mem_loc_result, drop_node);
13825         bra_node->dw_loc_oprnd1.val_class = dw_val_class_loc;
13826         bra_node->dw_loc_oprnd1.v.val_loc = drop_node;
13827       }
13828       break;
13829
13830     case ZERO_EXTRACT:
13831     case SIGN_EXTRACT:
13832       if (CONST_INT_P (XEXP (rtl, 1))
13833           && CONST_INT_P (XEXP (rtl, 2))
13834           && ((unsigned) INTVAL (XEXP (rtl, 1))
13835               + (unsigned) INTVAL (XEXP (rtl, 2))
13836               <= GET_MODE_BITSIZE (GET_MODE (rtl)))
13837           && GET_MODE_BITSIZE (GET_MODE (rtl)) <= DWARF2_ADDR_SIZE
13838           && GET_MODE_BITSIZE (GET_MODE (XEXP (rtl, 0))) <= DWARF2_ADDR_SIZE)
13839         {
13840           int shift, size;
13841           op0 = mem_loc_descriptor (XEXP (rtl, 0), mode,
13842                                     VAR_INIT_STATUS_INITIALIZED);
13843           if (op0 == 0)
13844             break;
13845           if (GET_CODE (rtl) == SIGN_EXTRACT)
13846             op = DW_OP_shra;
13847           else
13848             op = DW_OP_shr;
13849           mem_loc_result = op0;
13850           size = INTVAL (XEXP (rtl, 1));
13851           shift = INTVAL (XEXP (rtl, 2));
13852           if (BITS_BIG_ENDIAN)
13853             shift = GET_MODE_BITSIZE (GET_MODE (XEXP (rtl, 0)))
13854                     - shift - size;
13855           if (shift + size != (int) DWARF2_ADDR_SIZE)
13856             {
13857               add_loc_descr (&mem_loc_result,
13858                              int_loc_descriptor (DWARF2_ADDR_SIZE
13859                                                  - shift - size));
13860               add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_shl, 0, 0));
13861             }
13862           if (size != (int) DWARF2_ADDR_SIZE)
13863             {
13864               add_loc_descr (&mem_loc_result,
13865                              int_loc_descriptor (DWARF2_ADDR_SIZE - size));
13866               add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0));
13867             }
13868         }
13869       break;
13870
13871     case COMPARE:
13872     case IF_THEN_ELSE:
13873     case ROTATE:
13874     case ROTATERT:
13875     case TRUNCATE:
13876       /* In theory, we could implement the above.  */
13877       /* DWARF cannot represent the unsigned compare operations
13878          natively.  */
13879     case SS_MULT:
13880     case US_MULT:
13881     case SS_DIV:
13882     case US_DIV:
13883     case SS_PLUS:
13884     case US_PLUS:
13885     case SS_MINUS:
13886     case US_MINUS:
13887     case SS_NEG:
13888     case US_NEG:
13889     case SS_ABS:
13890     case SS_ASHIFT:
13891     case US_ASHIFT:
13892     case SS_TRUNCATE:
13893     case US_TRUNCATE:
13894     case UDIV:
13895     case UNORDERED:
13896     case ORDERED:
13897     case UNEQ:
13898     case UNGE:
13899     case UNGT:
13900     case UNLE:
13901     case UNLT:
13902     case LTGT:
13903     case FLOAT_EXTEND:
13904     case FLOAT_TRUNCATE:
13905     case FLOAT:
13906     case UNSIGNED_FLOAT:
13907     case FIX:
13908     case UNSIGNED_FIX:
13909     case FRACT_CONVERT:
13910     case UNSIGNED_FRACT_CONVERT:
13911     case SAT_FRACT:
13912     case UNSIGNED_SAT_FRACT:
13913     case SQRT:
13914     case BSWAP:
13915     case FFS:
13916     case CLZ:
13917     case CTZ:
13918     case POPCOUNT:
13919     case PARITY:
13920     case ASM_OPERANDS:
13921     case VEC_MERGE:
13922     case VEC_SELECT:
13923     case VEC_CONCAT:
13924     case VEC_DUPLICATE:
13925     case UNSPEC:
13926     case HIGH:
13927       /* If delegitimize_address couldn't do anything with the UNSPEC, we
13928          can't express it in the debug info.  This can happen e.g. with some
13929          TLS UNSPECs.  */
13930       break;
13931
13932     case CONST_STRING:
13933       resolve_one_addr (&rtl, NULL);
13934       goto symref;
13935
13936     default:
13937 #ifdef ENABLE_CHECKING
13938       print_rtl (stderr, rtl);
13939       gcc_unreachable ();
13940 #else
13941       break;
13942 #endif
13943     }
13944
13945   if (mem_loc_result && initialized == VAR_INIT_STATUS_UNINITIALIZED)
13946     add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
13947
13948   return mem_loc_result;
13949 }
13950
13951 /* Return a descriptor that describes the concatenation of two locations.
13952    This is typically a complex variable.  */
13953
13954 static dw_loc_descr_ref
13955 concat_loc_descriptor (rtx x0, rtx x1, enum var_init_status initialized)
13956 {
13957   dw_loc_descr_ref cc_loc_result = NULL;
13958   dw_loc_descr_ref x0_ref
13959     = loc_descriptor (x0, VOIDmode, VAR_INIT_STATUS_INITIALIZED);
13960   dw_loc_descr_ref x1_ref
13961     = loc_descriptor (x1, VOIDmode, VAR_INIT_STATUS_INITIALIZED);
13962
13963   if (x0_ref == 0 || x1_ref == 0)
13964     return 0;
13965
13966   cc_loc_result = x0_ref;
13967   add_loc_descr_op_piece (&cc_loc_result, GET_MODE_SIZE (GET_MODE (x0)));
13968
13969   add_loc_descr (&cc_loc_result, x1_ref);
13970   add_loc_descr_op_piece (&cc_loc_result, GET_MODE_SIZE (GET_MODE (x1)));
13971
13972   if (initialized == VAR_INIT_STATUS_UNINITIALIZED)
13973     add_loc_descr (&cc_loc_result, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
13974
13975   return cc_loc_result;
13976 }
13977
13978 /* Return a descriptor that describes the concatenation of N
13979    locations.  */
13980
13981 static dw_loc_descr_ref
13982 concatn_loc_descriptor (rtx concatn, enum var_init_status initialized)
13983 {
13984   unsigned int i;
13985   dw_loc_descr_ref cc_loc_result = NULL;
13986   unsigned int n = XVECLEN (concatn, 0);
13987
13988   for (i = 0; i < n; ++i)
13989     {
13990       dw_loc_descr_ref ref;
13991       rtx x = XVECEXP (concatn, 0, i);
13992
13993       ref = loc_descriptor (x, VOIDmode, VAR_INIT_STATUS_INITIALIZED);
13994       if (ref == NULL)
13995         return NULL;
13996
13997       add_loc_descr (&cc_loc_result, ref);
13998       add_loc_descr_op_piece (&cc_loc_result, GET_MODE_SIZE (GET_MODE (x)));
13999     }
14000
14001   if (cc_loc_result && initialized == VAR_INIT_STATUS_UNINITIALIZED)
14002     add_loc_descr (&cc_loc_result, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
14003
14004   return cc_loc_result;
14005 }
14006
14007 /* Output a proper Dwarf location descriptor for a variable or parameter
14008    which is either allocated in a register or in a memory location.  For a
14009    register, we just generate an OP_REG and the register number.  For a
14010    memory location we provide a Dwarf postfix expression describing how to
14011    generate the (dynamic) address of the object onto the address stack.
14012
14013    MODE is mode of the decl if this loc_descriptor is going to be used in
14014    .debug_loc section where DW_OP_stack_value and DW_OP_implicit_value are
14015    allowed, VOIDmode otherwise.
14016
14017    If we don't know how to describe it, return 0.  */
14018
14019 static dw_loc_descr_ref
14020 loc_descriptor (rtx rtl, enum machine_mode mode,
14021                 enum var_init_status initialized)
14022 {
14023   dw_loc_descr_ref loc_result = NULL;
14024
14025   switch (GET_CODE (rtl))
14026     {
14027     case SUBREG:
14028       /* The case of a subreg may arise when we have a local (register)
14029          variable or a formal (register) parameter which doesn't quite fill
14030          up an entire register.  For now, just assume that it is
14031          legitimate to make the Dwarf info refer to the whole register which
14032          contains the given subreg.  */
14033       loc_result = loc_descriptor (SUBREG_REG (rtl), mode, initialized);
14034       break;
14035
14036     case REG:
14037       loc_result = reg_loc_descriptor (rtl, initialized);
14038       break;
14039
14040     case SIGN_EXTEND:
14041     case ZERO_EXTEND:
14042       loc_result = loc_descriptor (XEXP (rtl, 0), mode, initialized);
14043       break;
14044
14045     case MEM:
14046       loc_result = mem_loc_descriptor (XEXP (rtl, 0), GET_MODE (rtl),
14047                                        initialized);
14048       if (loc_result == NULL)
14049         loc_result = tls_mem_loc_descriptor (rtl);
14050       if (loc_result == NULL)
14051         {
14052           rtx new_rtl = avoid_constant_pool_reference (rtl);
14053           if (new_rtl != rtl)
14054             loc_result = loc_descriptor (new_rtl, mode, initialized);
14055         }
14056       break;
14057
14058     case CONCAT:
14059       loc_result = concat_loc_descriptor (XEXP (rtl, 0), XEXP (rtl, 1),
14060                                           initialized);
14061       break;
14062
14063     case CONCATN:
14064       loc_result = concatn_loc_descriptor (rtl, initialized);
14065       break;
14066
14067     case VAR_LOCATION:
14068       /* Single part.  */
14069       if (GET_CODE (PAT_VAR_LOCATION_LOC (rtl)) != PARALLEL)
14070         {
14071           rtx loc = PAT_VAR_LOCATION_LOC (rtl);
14072           if (GET_CODE (loc) == EXPR_LIST)
14073             loc = XEXP (loc, 0);
14074           loc_result = loc_descriptor (loc, mode, initialized);
14075           break;
14076         }
14077
14078       rtl = XEXP (rtl, 1);
14079       /* FALLTHRU */
14080
14081     case PARALLEL:
14082       {
14083         rtvec par_elems = XVEC (rtl, 0);
14084         int num_elem = GET_NUM_ELEM (par_elems);
14085         enum machine_mode mode;
14086         int i;
14087
14088         /* Create the first one, so we have something to add to.  */
14089         loc_result = loc_descriptor (XEXP (RTVEC_ELT (par_elems, 0), 0),
14090                                      VOIDmode, initialized);
14091         if (loc_result == NULL)
14092           return NULL;
14093         mode = GET_MODE (XEXP (RTVEC_ELT (par_elems, 0), 0));
14094         add_loc_descr_op_piece (&loc_result, GET_MODE_SIZE (mode));
14095         for (i = 1; i < num_elem; i++)
14096           {
14097             dw_loc_descr_ref temp;
14098
14099             temp = loc_descriptor (XEXP (RTVEC_ELT (par_elems, i), 0),
14100                                    VOIDmode, initialized);
14101             if (temp == NULL)
14102               return NULL;
14103             add_loc_descr (&loc_result, temp);
14104             mode = GET_MODE (XEXP (RTVEC_ELT (par_elems, i), 0));
14105             add_loc_descr_op_piece (&loc_result, GET_MODE_SIZE (mode));
14106           }
14107       }
14108       break;
14109
14110     case CONST_INT:
14111       if (mode != VOIDmode && mode != BLKmode)
14112         loc_result = address_of_int_loc_descriptor (GET_MODE_SIZE (mode),
14113                                                     INTVAL (rtl));
14114       break;
14115
14116     case CONST_DOUBLE:
14117       if (mode == VOIDmode)
14118         mode = GET_MODE (rtl);
14119
14120       if (mode != VOIDmode && (dwarf_version >= 4 || !dwarf_strict))
14121         {
14122           gcc_assert (mode == GET_MODE (rtl) || VOIDmode == GET_MODE (rtl));
14123
14124           /* Note that a CONST_DOUBLE rtx could represent either an integer
14125              or a floating-point constant.  A CONST_DOUBLE is used whenever
14126              the constant requires more than one word in order to be
14127              adequately represented.  We output CONST_DOUBLEs as blocks.  */
14128           loc_result = new_loc_descr (DW_OP_implicit_value,
14129                                       GET_MODE_SIZE (mode), 0);
14130           if (SCALAR_FLOAT_MODE_P (mode))
14131             {
14132               unsigned int length = GET_MODE_SIZE (mode);
14133               unsigned char *array = GGC_NEWVEC (unsigned char, length);
14134
14135               insert_float (rtl, array);
14136               loc_result->dw_loc_oprnd2.val_class = dw_val_class_vec;
14137               loc_result->dw_loc_oprnd2.v.val_vec.length = length / 4;
14138               loc_result->dw_loc_oprnd2.v.val_vec.elt_size = 4;
14139               loc_result->dw_loc_oprnd2.v.val_vec.array = array;
14140             }
14141           else
14142             {
14143               loc_result->dw_loc_oprnd2.val_class = dw_val_class_const_double;
14144               loc_result->dw_loc_oprnd2.v.val_double
14145                 = rtx_to_double_int (rtl);
14146             }
14147         }
14148       break;
14149
14150     case CONST_VECTOR:
14151       if (mode == VOIDmode)
14152         mode = GET_MODE (rtl);
14153
14154       if (mode != VOIDmode && (dwarf_version >= 4 || !dwarf_strict))
14155         {
14156           unsigned int elt_size = GET_MODE_UNIT_SIZE (GET_MODE (rtl));
14157           unsigned int length = CONST_VECTOR_NUNITS (rtl);
14158           unsigned char *array = GGC_NEWVEC (unsigned char, length * elt_size);
14159           unsigned int i;
14160           unsigned char *p;
14161
14162           gcc_assert (mode == GET_MODE (rtl) || VOIDmode == GET_MODE (rtl));
14163           switch (GET_MODE_CLASS (mode))
14164             {
14165             case MODE_VECTOR_INT:
14166               for (i = 0, p = array; i < length; i++, p += elt_size)
14167                 {
14168                   rtx elt = CONST_VECTOR_ELT (rtl, i);
14169                   double_int val = rtx_to_double_int (elt);
14170
14171                   if (elt_size <= sizeof (HOST_WIDE_INT))
14172                     insert_int (double_int_to_shwi (val), elt_size, p);
14173                   else
14174                     {
14175                       gcc_assert (elt_size == 2 * sizeof (HOST_WIDE_INT));
14176                       insert_double (val, p);
14177                     }
14178                 }
14179               break;
14180
14181             case MODE_VECTOR_FLOAT:
14182               for (i = 0, p = array; i < length; i++, p += elt_size)
14183                 {
14184                   rtx elt = CONST_VECTOR_ELT (rtl, i);
14185                   insert_float (elt, p);
14186                 }
14187               break;
14188
14189             default:
14190               gcc_unreachable ();
14191             }
14192
14193           loc_result = new_loc_descr (DW_OP_implicit_value,
14194                                       length * elt_size, 0);
14195           loc_result->dw_loc_oprnd2.val_class = dw_val_class_vec;
14196           loc_result->dw_loc_oprnd2.v.val_vec.length = length;
14197           loc_result->dw_loc_oprnd2.v.val_vec.elt_size = elt_size;
14198           loc_result->dw_loc_oprnd2.v.val_vec.array = array;
14199         }
14200       break;
14201
14202     case CONST:
14203       if (mode == VOIDmode
14204           || GET_CODE (XEXP (rtl, 0)) == CONST_INT
14205           || GET_CODE (XEXP (rtl, 0)) == CONST_DOUBLE
14206           || GET_CODE (XEXP (rtl, 0)) == CONST_VECTOR)
14207         {
14208           loc_result = loc_descriptor (XEXP (rtl, 0), mode, initialized);
14209           break;
14210         }
14211       /* FALLTHROUGH */
14212     case SYMBOL_REF:
14213       if (!const_ok_for_output (rtl))
14214         break;
14215     case LABEL_REF:
14216       if (mode != VOIDmode && GET_MODE_SIZE (mode) == DWARF2_ADDR_SIZE
14217           && (dwarf_version >= 4 || !dwarf_strict))
14218         {
14219           loc_result = new_loc_descr (DW_OP_addr, 0, 0);
14220           loc_result->dw_loc_oprnd1.val_class = dw_val_class_addr;
14221           loc_result->dw_loc_oprnd1.v.val_addr = rtl;
14222           add_loc_descr (&loc_result, new_loc_descr (DW_OP_stack_value, 0, 0));
14223           VEC_safe_push (rtx, gc, used_rtx_array, rtl);
14224         }
14225       break;
14226
14227     default:
14228       if (GET_MODE_CLASS (mode) == MODE_INT && GET_MODE (rtl) == mode
14229           && GET_MODE_SIZE (GET_MODE (rtl)) <= DWARF2_ADDR_SIZE
14230           && (dwarf_version >= 4 || !dwarf_strict))
14231         {
14232           /* Value expression.  */
14233           loc_result = mem_loc_descriptor (rtl, VOIDmode, initialized);
14234           if (loc_result)
14235             add_loc_descr (&loc_result,
14236                            new_loc_descr (DW_OP_stack_value, 0, 0));
14237         }
14238       break;
14239     }
14240
14241   return loc_result;
14242 }
14243
14244 /* We need to figure out what section we should use as the base for the
14245    address ranges where a given location is valid.
14246    1. If this particular DECL has a section associated with it, use that.
14247    2. If this function has a section associated with it, use that.
14248    3. Otherwise, use the text section.
14249    XXX: If you split a variable across multiple sections, we won't notice.  */
14250
14251 static const char *
14252 secname_for_decl (const_tree decl)
14253 {
14254   const char *secname;
14255
14256   if (VAR_OR_FUNCTION_DECL_P (decl) && DECL_SECTION_NAME (decl))
14257     {
14258       tree sectree = DECL_SECTION_NAME (decl);
14259       secname = TREE_STRING_POINTER (sectree);
14260     }
14261   else if (current_function_decl && DECL_SECTION_NAME (current_function_decl))
14262     {
14263       tree sectree = DECL_SECTION_NAME (current_function_decl);
14264       secname = TREE_STRING_POINTER (sectree);
14265     }
14266   else if (cfun && in_cold_section_p)
14267     secname = crtl->subsections.cold_section_label;
14268   else
14269     secname = text_section_label;
14270
14271   return secname;
14272 }
14273
14274 /* Return true when DECL_BY_REFERENCE is defined and set for DECL.  */
14275
14276 static bool
14277 decl_by_reference_p (tree decl)
14278 {
14279   return ((TREE_CODE (decl) == PARM_DECL || TREE_CODE (decl) == RESULT_DECL
14280            || TREE_CODE (decl) == VAR_DECL)
14281           && DECL_BY_REFERENCE (decl));
14282 }
14283
14284 /* Helper function for dw_loc_list.  Compute proper Dwarf location descriptor
14285    for VARLOC.  */
14286
14287 static dw_loc_descr_ref
14288 dw_loc_list_1 (tree loc, rtx varloc, int want_address,
14289                enum var_init_status initialized)
14290 {
14291   int have_address = 0;
14292   dw_loc_descr_ref descr;
14293   enum machine_mode mode;
14294
14295   if (want_address != 2)
14296     {
14297       gcc_assert (GET_CODE (varloc) == VAR_LOCATION);
14298       /* Single part.  */
14299       if (GET_CODE (PAT_VAR_LOCATION_LOC (varloc)) != PARALLEL)
14300         {
14301           varloc = PAT_VAR_LOCATION_LOC (varloc);
14302           if (GET_CODE (varloc) == EXPR_LIST)
14303             varloc = XEXP (varloc, 0);
14304           mode = GET_MODE (varloc);
14305           if (MEM_P (varloc))
14306             {
14307               rtx addr = XEXP (varloc, 0);
14308               descr = mem_loc_descriptor (addr, mode, initialized);
14309               if (descr)
14310                 have_address = 1;
14311               else
14312                 {
14313                   rtx x = avoid_constant_pool_reference (varloc);
14314                   if (x != varloc)
14315                     descr = mem_loc_descriptor (x, mode, initialized);
14316                 }
14317             }
14318           else
14319             descr = mem_loc_descriptor (varloc, mode, initialized);
14320         }
14321       else
14322         return 0;
14323     }
14324   else
14325     {
14326       if (GET_CODE (varloc) == VAR_LOCATION)
14327         mode = DECL_MODE (PAT_VAR_LOCATION_DECL (varloc));
14328       else
14329         mode = DECL_MODE (loc);
14330       descr = loc_descriptor (varloc, mode, initialized);
14331       have_address = 1;
14332     }
14333
14334   if (!descr)
14335     return 0;
14336
14337   if (want_address == 2 && !have_address
14338       && (dwarf_version >= 4 || !dwarf_strict))
14339     {
14340       if (int_size_in_bytes (TREE_TYPE (loc)) > DWARF2_ADDR_SIZE)
14341         {
14342           expansion_failed (loc, NULL_RTX,
14343                             "DWARF address size mismatch");
14344           return 0;
14345         }
14346       add_loc_descr (&descr, new_loc_descr (DW_OP_stack_value, 0, 0));
14347       have_address = 1;
14348     }
14349   /* Show if we can't fill the request for an address.  */
14350   if (want_address && !have_address)
14351     {
14352       expansion_failed (loc, NULL_RTX,
14353                         "Want address and only have value");
14354       return 0;
14355     }
14356
14357   /* If we've got an address and don't want one, dereference.  */
14358   if (!want_address && have_address)
14359     {
14360       HOST_WIDE_INT size = int_size_in_bytes (TREE_TYPE (loc));
14361       enum dwarf_location_atom op;
14362
14363       if (size > DWARF2_ADDR_SIZE || size == -1)
14364         {
14365           expansion_failed (loc, NULL_RTX,
14366                             "DWARF address size mismatch");
14367           return 0;
14368         }
14369       else if (size == DWARF2_ADDR_SIZE)
14370         op = DW_OP_deref;
14371       else
14372         op = DW_OP_deref_size;
14373
14374       add_loc_descr (&descr, new_loc_descr (op, size, 0));
14375     }
14376
14377   return descr;
14378 }
14379
14380 /* Create a DW_OP_piece or DW_OP_bit_piece for bitsize, or return NULL
14381    if it is not possible.  */
14382
14383 static dw_loc_descr_ref
14384 new_loc_descr_op_bit_piece (HOST_WIDE_INT bitsize, HOST_WIDE_INT offset)
14385 {
14386   if ((bitsize % BITS_PER_UNIT) == 0 && offset == 0)
14387     return new_loc_descr (DW_OP_piece, bitsize / BITS_PER_UNIT, 0);
14388   else if (dwarf_version >= 3 || !dwarf_strict)
14389     return new_loc_descr (DW_OP_bit_piece, bitsize, offset);
14390   else
14391     return NULL;
14392 }
14393
14394 /* Helper function for dw_loc_list.  Compute proper Dwarf location descriptor
14395    for VAR_LOC_NOTE for variable DECL that has been optimized by SRA.  */
14396
14397 static dw_loc_descr_ref
14398 dw_sra_loc_expr (tree decl, rtx loc)
14399 {
14400   rtx p;
14401   unsigned int padsize = 0;
14402   dw_loc_descr_ref descr, *descr_tail;
14403   unsigned HOST_WIDE_INT decl_size;
14404   rtx varloc;
14405   enum var_init_status initialized;
14406
14407   if (DECL_SIZE (decl) == NULL
14408       || !host_integerp (DECL_SIZE (decl), 1))
14409     return NULL;
14410
14411   decl_size = tree_low_cst (DECL_SIZE (decl), 1);
14412   descr = NULL;
14413   descr_tail = &descr;
14414
14415   for (p = loc; p; p = XEXP (p, 1))
14416     {
14417       unsigned int bitsize = decl_piece_bitsize (p);
14418       rtx loc_note = *decl_piece_varloc_ptr (p);
14419       dw_loc_descr_ref cur_descr;
14420       dw_loc_descr_ref *tail, last = NULL;
14421       unsigned int opsize = 0;
14422
14423       if (loc_note == NULL_RTX
14424           || NOTE_VAR_LOCATION_LOC (loc_note) == NULL_RTX)
14425         {
14426           padsize += bitsize;
14427           continue;
14428         }
14429       initialized = NOTE_VAR_LOCATION_STATUS (loc_note);
14430       varloc = NOTE_VAR_LOCATION (loc_note);
14431       cur_descr = dw_loc_list_1 (decl, varloc, 2, initialized);
14432       if (cur_descr == NULL)
14433         {
14434           padsize += bitsize;
14435           continue;
14436         }
14437
14438       /* Check that cur_descr either doesn't use
14439          DW_OP_*piece operations, or their sum is equal
14440          to bitsize.  Otherwise we can't embed it.  */
14441       for (tail = &cur_descr; *tail != NULL;
14442            tail = &(*tail)->dw_loc_next)
14443         if ((*tail)->dw_loc_opc == DW_OP_piece)
14444           {
14445             opsize += (*tail)->dw_loc_oprnd1.v.val_unsigned
14446                       * BITS_PER_UNIT;
14447             last = *tail;
14448           }
14449         else if ((*tail)->dw_loc_opc == DW_OP_bit_piece)
14450           {
14451             opsize += (*tail)->dw_loc_oprnd1.v.val_unsigned;
14452             last = *tail;
14453           }
14454
14455       if (last != NULL && opsize != bitsize)
14456         {
14457           padsize += bitsize;
14458           continue;
14459         }
14460
14461       /* If there is a hole, add DW_OP_*piece after empty DWARF
14462          expression, which means that those bits are optimized out.  */
14463       if (padsize)
14464         {
14465           if (padsize > decl_size)
14466             return NULL;
14467           decl_size -= padsize;
14468           *descr_tail = new_loc_descr_op_bit_piece (padsize, 0);
14469           if (*descr_tail == NULL)
14470             return NULL;
14471           descr_tail = &(*descr_tail)->dw_loc_next;
14472           padsize = 0;
14473         }
14474       *descr_tail = cur_descr;
14475       descr_tail = tail;
14476       if (bitsize > decl_size)
14477         return NULL;
14478       decl_size -= bitsize;
14479       if (last == NULL)
14480         {
14481           HOST_WIDE_INT offset = 0;
14482           if (GET_CODE (varloc) == VAR_LOCATION
14483               && GET_CODE (PAT_VAR_LOCATION_LOC (varloc)) != PARALLEL)
14484             {
14485               varloc = PAT_VAR_LOCATION_LOC (varloc);
14486               if (GET_CODE (varloc) == EXPR_LIST)
14487                 varloc = XEXP (varloc, 0);
14488             }
14489           do 
14490             {
14491               if (GET_CODE (varloc) == CONST
14492                   || GET_CODE (varloc) == SIGN_EXTEND
14493                   || GET_CODE (varloc) == ZERO_EXTEND)
14494                 varloc = XEXP (varloc, 0);
14495               else if (GET_CODE (varloc) == SUBREG)
14496                 varloc = SUBREG_REG (varloc);
14497               else
14498                 break;
14499             }
14500           while (1);
14501           /* DW_OP_bit_size offset should be zero for register
14502              or implicit location descriptions and empty location
14503              descriptions, but for memory addresses needs big endian
14504              adjustment.  */
14505           if (MEM_P (varloc))
14506             {
14507               unsigned HOST_WIDE_INT memsize
14508                 = INTVAL (MEM_SIZE (varloc)) * BITS_PER_UNIT;
14509               if (memsize != bitsize)
14510                 {
14511                   if (BYTES_BIG_ENDIAN != WORDS_BIG_ENDIAN
14512                       && (memsize > BITS_PER_WORD || bitsize > BITS_PER_WORD))
14513                     return NULL;
14514                   if (memsize < bitsize)
14515                     return NULL;
14516                   if (BITS_BIG_ENDIAN)
14517                     offset = memsize - bitsize;
14518                 }
14519             }
14520
14521           *descr_tail = new_loc_descr_op_bit_piece (bitsize, offset);
14522           if (*descr_tail == NULL)
14523             return NULL;
14524           descr_tail = &(*descr_tail)->dw_loc_next;
14525         }
14526     }
14527
14528   /* If there were any non-empty expressions, add padding till the end of
14529      the decl.  */
14530   if (descr != NULL && decl_size != 0)
14531     {
14532       *descr_tail = new_loc_descr_op_bit_piece (decl_size, 0);
14533       if (*descr_tail == NULL)
14534         return NULL;
14535     }
14536   return descr;
14537 }
14538
14539 /* Return the dwarf representation of the location list LOC_LIST of
14540    DECL.  WANT_ADDRESS has the same meaning as in loc_list_from_tree
14541    function.  */
14542
14543 static dw_loc_list_ref
14544 dw_loc_list (var_loc_list *loc_list, tree decl, int want_address)
14545 {
14546   const char *endname, *secname;
14547   rtx varloc;
14548   enum var_init_status initialized;
14549   struct var_loc_node *node;
14550   dw_loc_descr_ref descr;
14551   char label_id[MAX_ARTIFICIAL_LABEL_BYTES];
14552   dw_loc_list_ref list = NULL;
14553   dw_loc_list_ref *listp = &list;
14554
14555   /* Now that we know what section we are using for a base,
14556      actually construct the list of locations.
14557      The first location information is what is passed to the
14558      function that creates the location list, and the remaining
14559      locations just get added on to that list.
14560      Note that we only know the start address for a location
14561      (IE location changes), so to build the range, we use
14562      the range [current location start, next location start].
14563      This means we have to special case the last node, and generate
14564      a range of [last location start, end of function label].  */
14565
14566   secname = secname_for_decl (decl);
14567
14568   for (node = loc_list->first; node; node = node->next)
14569     if (GET_CODE (node->loc) == EXPR_LIST
14570         || NOTE_VAR_LOCATION_LOC (node->loc) != NULL_RTX)
14571       {
14572         if (GET_CODE (node->loc) == EXPR_LIST)
14573           {
14574             /* This requires DW_OP_{,bit_}piece, which is not usable
14575                inside DWARF expressions.  */
14576             if (want_address != 2)
14577               continue;
14578             descr = dw_sra_loc_expr (decl, node->loc);
14579             if (descr == NULL)
14580               continue;
14581           }
14582         else
14583           {
14584             initialized = NOTE_VAR_LOCATION_STATUS (node->loc);
14585             varloc = NOTE_VAR_LOCATION (node->loc);
14586             descr = dw_loc_list_1 (decl, varloc, want_address, initialized);
14587           }
14588         if (descr)
14589           {
14590             /* The variable has a location between NODE->LABEL and
14591                NODE->NEXT->LABEL.  */
14592             if (node->next)
14593               endname = node->next->label;
14594             /* If the variable has a location at the last label
14595                it keeps its location until the end of function.  */
14596             else if (!current_function_decl)
14597               endname = text_end_label;
14598             else
14599               {
14600                 ASM_GENERATE_INTERNAL_LABEL (label_id, FUNC_END_LABEL,
14601                                              current_function_funcdef_no);
14602                 endname = ggc_strdup (label_id);
14603               }
14604
14605             *listp = new_loc_list (descr, node->label, endname, secname);
14606             listp = &(*listp)->dw_loc_next;
14607           }
14608       }
14609
14610   /* Try to avoid the overhead of a location list emitting a location
14611      expression instead, but only if we didn't have more than one
14612      location entry in the first place.  If some entries were not
14613      representable, we don't want to pretend a single entry that was
14614      applies to the entire scope in which the variable is
14615      available.  */
14616   if (list && loc_list->first->next)
14617     gen_llsym (list);
14618
14619   return list;
14620 }
14621
14622 /* Return if the loc_list has only single element and thus can be represented
14623    as location description.   */
14624
14625 static bool
14626 single_element_loc_list_p (dw_loc_list_ref list)
14627 {
14628   gcc_assert (!list->dw_loc_next || list->ll_symbol);
14629   return !list->ll_symbol;
14630 }
14631
14632 /* To each location in list LIST add loc descr REF.  */
14633
14634 static void
14635 add_loc_descr_to_each (dw_loc_list_ref list, dw_loc_descr_ref ref)
14636 {
14637   dw_loc_descr_ref copy;
14638   add_loc_descr (&list->expr, ref);
14639   list = list->dw_loc_next;
14640   while (list)
14641     {
14642       copy = GGC_CNEW (dw_loc_descr_node);
14643       memcpy (copy, ref, sizeof (dw_loc_descr_node));
14644       add_loc_descr (&list->expr, copy);
14645       while (copy->dw_loc_next)
14646         {
14647           dw_loc_descr_ref new_copy = GGC_CNEW (dw_loc_descr_node);
14648           memcpy (new_copy, copy->dw_loc_next, sizeof (dw_loc_descr_node));
14649           copy->dw_loc_next = new_copy;
14650           copy = new_copy;
14651         }
14652       list = list->dw_loc_next;
14653     }
14654 }
14655
14656 /* Given two lists RET and LIST
14657    produce location list that is result of adding expression in LIST
14658    to expression in RET on each possition in program.
14659    Might be destructive on both RET and LIST.
14660
14661    TODO: We handle only simple cases of RET or LIST having at most one
14662    element. General case would inolve sorting the lists in program order
14663    and merging them that will need some additional work.
14664    Adding that will improve quality of debug info especially for SRA-ed
14665    structures.  */
14666
14667 static void
14668 add_loc_list (dw_loc_list_ref *ret, dw_loc_list_ref list)
14669 {
14670   if (!list)
14671     return;
14672   if (!*ret)
14673     {
14674       *ret = list;
14675       return;
14676     }
14677   if (!list->dw_loc_next)
14678     {
14679       add_loc_descr_to_each (*ret, list->expr);
14680       return;
14681     }
14682   if (!(*ret)->dw_loc_next)
14683     {
14684       add_loc_descr_to_each (list, (*ret)->expr);
14685       *ret = list;
14686       return;
14687     }
14688   expansion_failed (NULL_TREE, NULL_RTX,
14689                     "Don't know how to merge two non-trivial"
14690                     " location lists.\n");
14691   *ret = NULL;
14692   return;
14693 }
14694
14695 /* LOC is constant expression.  Try a luck, look it up in constant
14696    pool and return its loc_descr of its address.  */
14697
14698 static dw_loc_descr_ref
14699 cst_pool_loc_descr (tree loc)
14700 {
14701   /* Get an RTL for this, if something has been emitted.  */
14702   rtx rtl = lookup_constant_def (loc);
14703   enum machine_mode mode;
14704
14705   if (!rtl || !MEM_P (rtl))
14706     {
14707       gcc_assert (!rtl);
14708       return 0;
14709     }
14710   gcc_assert (GET_CODE (XEXP (rtl, 0)) == SYMBOL_REF);
14711
14712   /* TODO: We might get more coverage if we was actually delaying expansion
14713      of all expressions till end of compilation when constant pools are fully
14714      populated.  */
14715   if (!TREE_ASM_WRITTEN (SYMBOL_REF_DECL (XEXP (rtl, 0))))
14716     {
14717       expansion_failed (loc, NULL_RTX,
14718                         "CST value in contant pool but not marked.");
14719       return 0;
14720     }
14721   mode = GET_MODE (rtl);
14722   rtl = XEXP (rtl, 0);
14723   return mem_loc_descriptor (rtl, mode, VAR_INIT_STATUS_INITIALIZED);
14724 }
14725
14726 /* Return dw_loc_list representing address of addr_expr LOC
14727    by looking for innder INDIRECT_REF expression and turing it
14728    into simple arithmetics.  */
14729
14730 static dw_loc_list_ref
14731 loc_list_for_address_of_addr_expr_of_indirect_ref (tree loc, bool toplev)
14732 {
14733   tree obj, offset;
14734   HOST_WIDE_INT bitsize, bitpos, bytepos;
14735   enum machine_mode mode;
14736   int volatilep;
14737   int unsignedp = TYPE_UNSIGNED (TREE_TYPE (loc));
14738   dw_loc_list_ref list_ret = NULL, list_ret1 = NULL;
14739
14740   obj = get_inner_reference (TREE_OPERAND (loc, 0),
14741                              &bitsize, &bitpos, &offset, &mode,
14742                              &unsignedp, &volatilep, false);
14743   STRIP_NOPS (obj);
14744   if (bitpos % BITS_PER_UNIT)
14745     {
14746       expansion_failed (loc, NULL_RTX, "bitfield access");
14747       return 0;
14748     }
14749   if (!INDIRECT_REF_P (obj))
14750     {
14751       expansion_failed (obj,
14752                         NULL_RTX, "no indirect ref in inner refrence");
14753       return 0;
14754     }
14755   if (!offset && !bitpos)
14756     list_ret = loc_list_from_tree (TREE_OPERAND (obj, 0), toplev ? 2 : 1);
14757   else if (toplev
14758            && int_size_in_bytes (TREE_TYPE (loc)) <= DWARF2_ADDR_SIZE
14759            && (dwarf_version >= 4 || !dwarf_strict))
14760     {
14761       list_ret = loc_list_from_tree (TREE_OPERAND (obj, 0), 0);
14762       if (!list_ret)
14763         return 0;
14764       if (offset)
14765         {
14766           /* Variable offset.  */
14767           list_ret1 = loc_list_from_tree (offset, 0);
14768           if (list_ret1 == 0)
14769             return 0;
14770           add_loc_list (&list_ret, list_ret1);
14771           if (!list_ret)
14772             return 0;
14773           add_loc_descr_to_each (list_ret,
14774                                  new_loc_descr (DW_OP_plus, 0, 0));
14775         }
14776       bytepos = bitpos / BITS_PER_UNIT;
14777       if (bytepos > 0)
14778         add_loc_descr_to_each (list_ret,
14779                                new_loc_descr (DW_OP_plus_uconst,
14780                                               bytepos, 0));
14781       else if (bytepos < 0)
14782         loc_list_plus_const (list_ret, bytepos);
14783       add_loc_descr_to_each (list_ret,
14784                              new_loc_descr (DW_OP_stack_value, 0, 0));
14785     }
14786   return list_ret;
14787 }
14788
14789
14790 /* Generate Dwarf location list representing LOC.
14791    If WANT_ADDRESS is false, expression computing LOC will be computed
14792    If WANT_ADDRESS is 1, expression computing address of LOC will be returned
14793    if WANT_ADDRESS is 2, expression computing address useable in location
14794      will be returned (i.e. DW_OP_reg can be used
14795      to refer to register values).  */
14796
14797 static dw_loc_list_ref
14798 loc_list_from_tree (tree loc, int want_address)
14799 {
14800   dw_loc_descr_ref ret = NULL, ret1 = NULL;
14801   dw_loc_list_ref list_ret = NULL, list_ret1 = NULL;
14802   int have_address = 0;
14803   enum dwarf_location_atom op;
14804
14805   /* ??? Most of the time we do not take proper care for sign/zero
14806      extending the values properly.  Hopefully this won't be a real
14807      problem...  */
14808
14809   switch (TREE_CODE (loc))
14810     {
14811     case ERROR_MARK:
14812       expansion_failed (loc, NULL_RTX, "ERROR_MARK");
14813       return 0;
14814
14815     case PLACEHOLDER_EXPR:
14816       /* This case involves extracting fields from an object to determine the
14817          position of other fields.  We don't try to encode this here.  The
14818          only user of this is Ada, which encodes the needed information using
14819          the names of types.  */
14820       expansion_failed (loc, NULL_RTX, "PLACEHOLDER_EXPR");
14821       return 0;
14822
14823     case CALL_EXPR:
14824       expansion_failed (loc, NULL_RTX, "CALL_EXPR");
14825       /* There are no opcodes for these operations.  */
14826       return 0;
14827
14828     case PREINCREMENT_EXPR:
14829     case PREDECREMENT_EXPR:
14830     case POSTINCREMENT_EXPR:
14831     case POSTDECREMENT_EXPR:
14832       expansion_failed (loc, NULL_RTX, "PRE/POST INDCREMENT/DECREMENT");
14833       /* There are no opcodes for these operations.  */
14834       return 0;
14835
14836     case ADDR_EXPR:
14837       /* If we already want an address, see if there is INDIRECT_REF inside
14838          e.g. for &this->field.  */
14839       if (want_address)
14840         {
14841           list_ret = loc_list_for_address_of_addr_expr_of_indirect_ref
14842                        (loc, want_address == 2);
14843           if (list_ret)
14844             have_address = 1;
14845           else if (decl_address_ip_invariant_p (TREE_OPERAND (loc, 0))
14846                    && (ret = cst_pool_loc_descr (loc)))
14847             have_address = 1;
14848         }
14849         /* Otherwise, process the argument and look for the address.  */
14850       if (!list_ret && !ret)
14851         list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 1);
14852       else
14853         {
14854           if (want_address)
14855             expansion_failed (loc, NULL_RTX, "need address of ADDR_EXPR");
14856           return NULL;
14857         }
14858       break;
14859
14860     case VAR_DECL:
14861       if (DECL_THREAD_LOCAL_P (loc))
14862         {
14863           rtx rtl;
14864           enum dwarf_location_atom first_op;
14865           enum dwarf_location_atom second_op;
14866           bool dtprel = false;
14867
14868           if (targetm.have_tls)
14869             {
14870               /* If this is not defined, we have no way to emit the
14871                  data.  */
14872               if (!targetm.asm_out.output_dwarf_dtprel)
14873                 return 0;
14874
14875                /* The way DW_OP_GNU_push_tls_address is specified, we
14876                   can only look up addresses of objects in the current
14877                   module.  */
14878               if (DECL_EXTERNAL (loc) && !targetm.binds_local_p (loc))
14879                 return 0;
14880               first_op = DW_OP_addr;
14881               dtprel = true;
14882               second_op = DW_OP_GNU_push_tls_address;
14883             }
14884           else
14885             {
14886               if (!targetm.emutls.debug_form_tls_address
14887                   || !(dwarf_version >= 3 || !dwarf_strict))
14888                 return 0;
14889               loc = emutls_decl (loc);
14890               first_op = DW_OP_addr;
14891               second_op = DW_OP_form_tls_address;
14892             }
14893
14894           rtl = rtl_for_decl_location (loc);
14895           if (rtl == NULL_RTX)
14896             return 0;
14897
14898           if (!MEM_P (rtl))
14899             return 0;
14900           rtl = XEXP (rtl, 0);
14901           if (! CONSTANT_P (rtl))
14902             return 0;
14903
14904           ret = new_loc_descr (first_op, 0, 0);
14905           ret->dw_loc_oprnd1.val_class = dw_val_class_addr;
14906           ret->dw_loc_oprnd1.v.val_addr = rtl;
14907           ret->dtprel = dtprel;
14908
14909           ret1 = new_loc_descr (second_op, 0, 0);
14910           add_loc_descr (&ret, ret1);
14911
14912           have_address = 1;
14913           break;
14914         }
14915       /* FALLTHRU */
14916
14917     case PARM_DECL:
14918       if (DECL_HAS_VALUE_EXPR_P (loc))
14919         return loc_list_from_tree (DECL_VALUE_EXPR (loc),
14920                                    want_address);
14921       /* FALLTHRU */
14922
14923     case RESULT_DECL:
14924     case FUNCTION_DECL:
14925       {
14926         rtx rtl;
14927         var_loc_list *loc_list = lookup_decl_loc (loc);
14928
14929         if (loc_list && loc_list->first)
14930           {
14931             list_ret = dw_loc_list (loc_list, loc, want_address);
14932             have_address = want_address != 0;
14933             break;
14934           }
14935         rtl = rtl_for_decl_location (loc);
14936         if (rtl == NULL_RTX)
14937           {
14938             expansion_failed (loc, NULL_RTX, "DECL has no RTL");
14939             return 0;
14940           }
14941         else if (CONST_INT_P (rtl))
14942           {
14943             HOST_WIDE_INT val = INTVAL (rtl);
14944             if (TYPE_UNSIGNED (TREE_TYPE (loc)))
14945               val &= GET_MODE_MASK (DECL_MODE (loc));
14946             ret = int_loc_descriptor (val);
14947           }
14948         else if (GET_CODE (rtl) == CONST_STRING)
14949           {
14950             expansion_failed (loc, NULL_RTX, "CONST_STRING");
14951             return 0;
14952           }
14953         else if (CONSTANT_P (rtl) && const_ok_for_output (rtl))
14954           {
14955             ret = new_loc_descr (DW_OP_addr, 0, 0);
14956             ret->dw_loc_oprnd1.val_class = dw_val_class_addr;
14957             ret->dw_loc_oprnd1.v.val_addr = rtl;
14958           }
14959         else
14960           {
14961             enum machine_mode mode;
14962
14963             /* Certain constructs can only be represented at top-level.  */
14964             if (want_address == 2)
14965               {
14966                 ret = loc_descriptor (rtl, VOIDmode,
14967                                       VAR_INIT_STATUS_INITIALIZED);
14968                 have_address = 1;
14969               }
14970             else
14971               {
14972                 mode = GET_MODE (rtl);
14973                 if (MEM_P (rtl))
14974                   {
14975                     rtl = XEXP (rtl, 0);
14976                     have_address = 1;
14977                   }
14978                 ret = mem_loc_descriptor (rtl, mode, VAR_INIT_STATUS_INITIALIZED);
14979               }
14980             if (!ret)
14981               expansion_failed (loc, rtl,
14982                                 "failed to produce loc descriptor for rtl");
14983           }
14984       }
14985       break;
14986
14987     case INDIRECT_REF:
14988     case ALIGN_INDIRECT_REF:
14989     case MISALIGNED_INDIRECT_REF:
14990       list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 0);
14991       have_address = 1;
14992       break;
14993
14994     case COMPOUND_EXPR:
14995       return loc_list_from_tree (TREE_OPERAND (loc, 1), want_address);
14996
14997     CASE_CONVERT:
14998     case VIEW_CONVERT_EXPR:
14999     case SAVE_EXPR:
15000     case MODIFY_EXPR:
15001       return loc_list_from_tree (TREE_OPERAND (loc, 0), want_address);
15002
15003     case COMPONENT_REF:
15004     case BIT_FIELD_REF:
15005     case ARRAY_REF:
15006     case ARRAY_RANGE_REF:
15007     case REALPART_EXPR:
15008     case IMAGPART_EXPR:
15009       {
15010         tree obj, offset;
15011         HOST_WIDE_INT bitsize, bitpos, bytepos;
15012         enum machine_mode mode;
15013         int volatilep;
15014         int unsignedp = TYPE_UNSIGNED (TREE_TYPE (loc));
15015
15016         obj = get_inner_reference (loc, &bitsize, &bitpos, &offset, &mode,
15017                                    &unsignedp, &volatilep, false);
15018
15019         gcc_assert (obj != loc);
15020
15021         list_ret = loc_list_from_tree (obj,
15022                                        want_address == 2
15023                                        && !bitpos && !offset ? 2 : 1);
15024         /* TODO: We can extract value of the small expression via shifting even
15025            for nonzero bitpos.  */
15026         if (list_ret == 0)
15027           return 0;
15028         if (bitpos % BITS_PER_UNIT != 0 || bitsize % BITS_PER_UNIT != 0)
15029           {
15030             expansion_failed (loc, NULL_RTX,
15031                               "bitfield access");
15032             return 0;
15033           }
15034
15035         if (offset != NULL_TREE)
15036           {
15037             /* Variable offset.  */
15038             list_ret1 = loc_list_from_tree (offset, 0);
15039             if (list_ret1 == 0)
15040               return 0;
15041             add_loc_list (&list_ret, list_ret1);
15042             if (!list_ret)
15043               return 0;
15044             add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_plus, 0, 0));
15045           }
15046
15047         bytepos = bitpos / BITS_PER_UNIT;
15048         if (bytepos > 0)
15049           add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_plus_uconst, bytepos, 0));
15050         else if (bytepos < 0)
15051           loc_list_plus_const (list_ret, bytepos);
15052
15053         have_address = 1;
15054         break;
15055       }
15056
15057     case INTEGER_CST:
15058       if ((want_address || !host_integerp (loc, 0))
15059           && (ret = cst_pool_loc_descr (loc)))
15060         have_address = 1;
15061       else if (want_address == 2
15062                && host_integerp (loc, 0)
15063                && (ret = address_of_int_loc_descriptor
15064                            (int_size_in_bytes (TREE_TYPE (loc)),
15065                             tree_low_cst (loc, 0))))
15066         have_address = 1;
15067       else if (host_integerp (loc, 0))
15068         ret = int_loc_descriptor (tree_low_cst (loc, 0));
15069       else
15070         {
15071           expansion_failed (loc, NULL_RTX,
15072                             "Integer operand is not host integer");
15073           return 0;
15074         }
15075       break;
15076
15077     case CONSTRUCTOR:
15078     case REAL_CST:
15079     case STRING_CST:
15080     case COMPLEX_CST:
15081       if ((ret = cst_pool_loc_descr (loc)))
15082         have_address = 1;
15083       else
15084       /* We can construct small constants here using int_loc_descriptor.  */
15085         expansion_failed (loc, NULL_RTX,
15086                           "constructor or constant not in constant pool");
15087       break;
15088
15089     case TRUTH_AND_EXPR:
15090     case TRUTH_ANDIF_EXPR:
15091     case BIT_AND_EXPR:
15092       op = DW_OP_and;
15093       goto do_binop;
15094
15095     case TRUTH_XOR_EXPR:
15096     case BIT_XOR_EXPR:
15097       op = DW_OP_xor;
15098       goto do_binop;
15099
15100     case TRUTH_OR_EXPR:
15101     case TRUTH_ORIF_EXPR:
15102     case BIT_IOR_EXPR:
15103       op = DW_OP_or;
15104       goto do_binop;
15105
15106     case FLOOR_DIV_EXPR:
15107     case CEIL_DIV_EXPR:
15108     case ROUND_DIV_EXPR:
15109     case TRUNC_DIV_EXPR:
15110       if (TYPE_UNSIGNED (TREE_TYPE (loc)))
15111         return 0;
15112       op = DW_OP_div;
15113       goto do_binop;
15114
15115     case MINUS_EXPR:
15116       op = DW_OP_minus;
15117       goto do_binop;
15118
15119     case FLOOR_MOD_EXPR:
15120     case CEIL_MOD_EXPR:
15121     case ROUND_MOD_EXPR:
15122     case TRUNC_MOD_EXPR:
15123       if (TYPE_UNSIGNED (TREE_TYPE (loc)))
15124         {
15125           op = DW_OP_mod;
15126           goto do_binop;
15127         }
15128       list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 0);
15129       list_ret1 = loc_list_from_tree (TREE_OPERAND (loc, 1), 0);
15130       if (list_ret == 0 || list_ret1 == 0)
15131         return 0;
15132
15133       add_loc_list (&list_ret, list_ret1);
15134       if (list_ret == 0)
15135         return 0;
15136       add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_over, 0, 0));
15137       add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_over, 0, 0));
15138       add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_div, 0, 0));
15139       add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_mul, 0, 0));
15140       add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_minus, 0, 0));
15141       break;
15142
15143     case MULT_EXPR:
15144       op = DW_OP_mul;
15145       goto do_binop;
15146
15147     case LSHIFT_EXPR:
15148       op = DW_OP_shl;
15149       goto do_binop;
15150
15151     case RSHIFT_EXPR:
15152       op = (TYPE_UNSIGNED (TREE_TYPE (loc)) ? DW_OP_shr : DW_OP_shra);
15153       goto do_binop;
15154
15155     case POINTER_PLUS_EXPR:
15156     case PLUS_EXPR:
15157       if (host_integerp (TREE_OPERAND (loc, 1), 0))
15158         {
15159           list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 0);
15160           if (list_ret == 0)
15161             return 0;
15162
15163           loc_list_plus_const (list_ret, tree_low_cst (TREE_OPERAND (loc, 1), 0));
15164           break;
15165         }
15166
15167       op = DW_OP_plus;
15168       goto do_binop;
15169
15170     case LE_EXPR:
15171       if (TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (loc, 0))))
15172         return 0;
15173
15174       op = DW_OP_le;
15175       goto do_binop;
15176
15177     case GE_EXPR:
15178       if (TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (loc, 0))))
15179         return 0;
15180
15181       op = DW_OP_ge;
15182       goto do_binop;
15183
15184     case LT_EXPR:
15185       if (TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (loc, 0))))
15186         return 0;
15187
15188       op = DW_OP_lt;
15189       goto do_binop;
15190
15191     case GT_EXPR:
15192       if (TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (loc, 0))))
15193         return 0;
15194
15195       op = DW_OP_gt;
15196       goto do_binop;
15197
15198     case EQ_EXPR:
15199       op = DW_OP_eq;
15200       goto do_binop;
15201
15202     case NE_EXPR:
15203       op = DW_OP_ne;
15204       goto do_binop;
15205
15206     do_binop:
15207       list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 0);
15208       list_ret1 = loc_list_from_tree (TREE_OPERAND (loc, 1), 0);
15209       if (list_ret == 0 || list_ret1 == 0)
15210         return 0;
15211
15212       add_loc_list (&list_ret, list_ret1);
15213       if (list_ret == 0)
15214         return 0;
15215       add_loc_descr_to_each (list_ret, new_loc_descr (op, 0, 0));
15216       break;
15217
15218     case TRUTH_NOT_EXPR:
15219     case BIT_NOT_EXPR:
15220       op = DW_OP_not;
15221       goto do_unop;
15222
15223     case ABS_EXPR:
15224       op = DW_OP_abs;
15225       goto do_unop;
15226
15227     case NEGATE_EXPR:
15228       op = DW_OP_neg;
15229       goto do_unop;
15230
15231     do_unop:
15232       list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 0);
15233       if (list_ret == 0)
15234         return 0;
15235
15236       add_loc_descr_to_each (list_ret, new_loc_descr (op, 0, 0));
15237       break;
15238
15239     case MIN_EXPR:
15240     case MAX_EXPR:
15241       {
15242         const enum tree_code code =
15243           TREE_CODE (loc) == MIN_EXPR ? GT_EXPR : LT_EXPR;
15244
15245         loc = build3 (COND_EXPR, TREE_TYPE (loc),
15246                       build2 (code, integer_type_node,
15247                               TREE_OPERAND (loc, 0), TREE_OPERAND (loc, 1)),
15248                       TREE_OPERAND (loc, 1), TREE_OPERAND (loc, 0));
15249       }
15250
15251       /* ... fall through ...  */
15252
15253     case COND_EXPR:
15254       {
15255         dw_loc_descr_ref lhs
15256           = loc_descriptor_from_tree (TREE_OPERAND (loc, 1), 0);
15257         dw_loc_list_ref rhs
15258           = loc_list_from_tree (TREE_OPERAND (loc, 2), 0);
15259         dw_loc_descr_ref bra_node, jump_node, tmp;
15260
15261         list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 0);
15262         if (list_ret == 0 || lhs == 0 || rhs == 0)
15263           return 0;
15264
15265         bra_node = new_loc_descr (DW_OP_bra, 0, 0);
15266         add_loc_descr_to_each (list_ret, bra_node);
15267
15268         add_loc_list (&list_ret, rhs);
15269         jump_node = new_loc_descr (DW_OP_skip, 0, 0);
15270         add_loc_descr_to_each (list_ret, jump_node);
15271
15272         add_loc_descr_to_each (list_ret, lhs);
15273         bra_node->dw_loc_oprnd1.val_class = dw_val_class_loc;
15274         bra_node->dw_loc_oprnd1.v.val_loc = lhs;
15275
15276         /* ??? Need a node to point the skip at.  Use a nop.  */
15277         tmp = new_loc_descr (DW_OP_nop, 0, 0);
15278         add_loc_descr_to_each (list_ret, tmp);
15279         jump_node->dw_loc_oprnd1.val_class = dw_val_class_loc;
15280         jump_node->dw_loc_oprnd1.v.val_loc = tmp;
15281       }
15282       break;
15283
15284     case FIX_TRUNC_EXPR:
15285       return 0;
15286
15287     default:
15288       /* Leave front-end specific codes as simply unknown.  This comes
15289          up, for instance, with the C STMT_EXPR.  */
15290       if ((unsigned int) TREE_CODE (loc)
15291           >= (unsigned int) LAST_AND_UNUSED_TREE_CODE)
15292         {
15293           expansion_failed (loc, NULL_RTX,
15294                             "language specific tree node");
15295           return 0;
15296         }
15297
15298 #ifdef ENABLE_CHECKING
15299       /* Otherwise this is a generic code; we should just lists all of
15300          these explicitly.  We forgot one.  */
15301       gcc_unreachable ();
15302 #else
15303       /* In a release build, we want to degrade gracefully: better to
15304          generate incomplete debugging information than to crash.  */
15305       return NULL;
15306 #endif
15307     }
15308
15309   if (!ret && !list_ret)
15310     return 0;
15311
15312   if (want_address == 2 && !have_address
15313       && (dwarf_version >= 4 || !dwarf_strict))
15314     {
15315       if (int_size_in_bytes (TREE_TYPE (loc)) > DWARF2_ADDR_SIZE)
15316         {
15317           expansion_failed (loc, NULL_RTX,
15318                             "DWARF address size mismatch");
15319           return 0;
15320         }
15321       if (ret)
15322         add_loc_descr (&ret, new_loc_descr (DW_OP_stack_value, 0, 0));
15323       else
15324         add_loc_descr_to_each (list_ret,
15325                                new_loc_descr (DW_OP_stack_value, 0, 0));
15326       have_address = 1;
15327     }
15328   /* Show if we can't fill the request for an address.  */
15329   if (want_address && !have_address)
15330     {
15331       expansion_failed (loc, NULL_RTX,
15332                         "Want address and only have value");
15333       return 0;
15334     }
15335
15336   gcc_assert (!ret || !list_ret);
15337
15338   /* If we've got an address and don't want one, dereference.  */
15339   if (!want_address && have_address)
15340     {
15341       HOST_WIDE_INT size = int_size_in_bytes (TREE_TYPE (loc));
15342
15343       if (size > DWARF2_ADDR_SIZE || size == -1)
15344         {
15345           expansion_failed (loc, NULL_RTX,
15346                             "DWARF address size mismatch");
15347           return 0;
15348         }
15349       else if (size == DWARF2_ADDR_SIZE)
15350         op = DW_OP_deref;
15351       else
15352         op = DW_OP_deref_size;
15353
15354       if (ret)
15355         add_loc_descr (&ret, new_loc_descr (op, size, 0));
15356       else
15357         add_loc_descr_to_each (list_ret, new_loc_descr (op, size, 0));
15358     }
15359   if (ret)
15360     list_ret = new_loc_list (ret, NULL, NULL, NULL);
15361
15362   return list_ret;
15363 }
15364
15365 /* Same as above but return only single location expression.  */
15366 static dw_loc_descr_ref
15367 loc_descriptor_from_tree (tree loc, int want_address)
15368 {
15369   dw_loc_list_ref ret = loc_list_from_tree (loc, want_address);
15370   if (!ret)
15371     return NULL;
15372   if (ret->dw_loc_next)
15373     {
15374       expansion_failed (loc, NULL_RTX,
15375                         "Location list where only loc descriptor needed");
15376       return NULL;
15377     }
15378   return ret->expr;
15379 }
15380
15381 /* Given a value, round it up to the lowest multiple of `boundary'
15382    which is not less than the value itself.  */
15383
15384 static inline HOST_WIDE_INT
15385 ceiling (HOST_WIDE_INT value, unsigned int boundary)
15386 {
15387   return (((value + boundary - 1) / boundary) * boundary);
15388 }
15389
15390 /* Given a pointer to what is assumed to be a FIELD_DECL node, return a
15391    pointer to the declared type for the relevant field variable, or return
15392    `integer_type_node' if the given node turns out to be an
15393    ERROR_MARK node.  */
15394
15395 static inline tree
15396 field_type (const_tree decl)
15397 {
15398   tree type;
15399
15400   if (TREE_CODE (decl) == ERROR_MARK)
15401     return integer_type_node;
15402
15403   type = DECL_BIT_FIELD_TYPE (decl);
15404   if (type == NULL_TREE)
15405     type = TREE_TYPE (decl);
15406
15407   return type;
15408 }
15409
15410 /* Given a pointer to a tree node, return the alignment in bits for
15411    it, or else return BITS_PER_WORD if the node actually turns out to
15412    be an ERROR_MARK node.  */
15413
15414 static inline unsigned
15415 simple_type_align_in_bits (const_tree type)
15416 {
15417   return (TREE_CODE (type) != ERROR_MARK) ? TYPE_ALIGN (type) : BITS_PER_WORD;
15418 }
15419
15420 static inline unsigned
15421 simple_decl_align_in_bits (const_tree decl)
15422 {
15423   return (TREE_CODE (decl) != ERROR_MARK) ? DECL_ALIGN (decl) : BITS_PER_WORD;
15424 }
15425
15426 /* Return the result of rounding T up to ALIGN.  */
15427
15428 static inline double_int
15429 round_up_to_align (double_int t, unsigned int align)
15430 {
15431   double_int alignd = uhwi_to_double_int (align);
15432   t = double_int_add (t, alignd);
15433   t = double_int_add (t, double_int_minus_one);
15434   t = double_int_div (t, alignd, true, TRUNC_DIV_EXPR);
15435   t = double_int_mul (t, alignd);
15436   return t;
15437 }
15438
15439 /* Given a pointer to a FIELD_DECL, compute and return the byte offset of the
15440    lowest addressed byte of the "containing object" for the given FIELD_DECL,
15441    or return 0 if we are unable to determine what that offset is, either
15442    because the argument turns out to be a pointer to an ERROR_MARK node, or
15443    because the offset is actually variable.  (We can't handle the latter case
15444    just yet).  */
15445
15446 static HOST_WIDE_INT
15447 field_byte_offset (const_tree decl)
15448 {
15449   double_int object_offset_in_bits;
15450   double_int object_offset_in_bytes;
15451   double_int bitpos_int;
15452
15453   if (TREE_CODE (decl) == ERROR_MARK)
15454     return 0;
15455
15456   gcc_assert (TREE_CODE (decl) == FIELD_DECL);
15457
15458   /* We cannot yet cope with fields whose positions are variable, so
15459      for now, when we see such things, we simply return 0.  Someday, we may
15460      be able to handle such cases, but it will be damn difficult.  */
15461   if (TREE_CODE (bit_position (decl)) != INTEGER_CST)
15462     return 0;
15463
15464   bitpos_int = tree_to_double_int (bit_position (decl));
15465
15466 #ifdef PCC_BITFIELD_TYPE_MATTERS
15467   if (PCC_BITFIELD_TYPE_MATTERS)
15468     {
15469       tree type;
15470       tree field_size_tree;
15471       double_int deepest_bitpos;
15472       double_int field_size_in_bits;
15473       unsigned int type_align_in_bits;
15474       unsigned int decl_align_in_bits;
15475       double_int type_size_in_bits;
15476
15477       type = field_type (decl);
15478       type_size_in_bits = double_int_type_size_in_bits (type);
15479       type_align_in_bits = simple_type_align_in_bits (type);
15480
15481       field_size_tree = DECL_SIZE (decl);
15482
15483       /* The size could be unspecified if there was an error, or for
15484          a flexible array member.  */
15485       if (!field_size_tree)
15486         field_size_tree = bitsize_zero_node;
15487
15488       /* If the size of the field is not constant, use the type size.  */
15489       if (TREE_CODE (field_size_tree) == INTEGER_CST)
15490         field_size_in_bits = tree_to_double_int (field_size_tree);
15491       else
15492         field_size_in_bits = type_size_in_bits;
15493
15494       decl_align_in_bits = simple_decl_align_in_bits (decl);
15495
15496       /* The GCC front-end doesn't make any attempt to keep track of the
15497          starting bit offset (relative to the start of the containing
15498          structure type) of the hypothetical "containing object" for a
15499          bit-field.  Thus, when computing the byte offset value for the
15500          start of the "containing object" of a bit-field, we must deduce
15501          this information on our own. This can be rather tricky to do in
15502          some cases.  For example, handling the following structure type
15503          definition when compiling for an i386/i486 target (which only
15504          aligns long long's to 32-bit boundaries) can be very tricky:
15505
15506          struct S { int field1; long long field2:31; };
15507
15508          Fortunately, there is a simple rule-of-thumb which can be used
15509          in such cases.  When compiling for an i386/i486, GCC will
15510          allocate 8 bytes for the structure shown above.  It decides to
15511          do this based upon one simple rule for bit-field allocation.
15512          GCC allocates each "containing object" for each bit-field at
15513          the first (i.e. lowest addressed) legitimate alignment boundary
15514          (based upon the required minimum alignment for the declared
15515          type of the field) which it can possibly use, subject to the
15516          condition that there is still enough available space remaining
15517          in the containing object (when allocated at the selected point)
15518          to fully accommodate all of the bits of the bit-field itself.
15519
15520          This simple rule makes it obvious why GCC allocates 8 bytes for
15521          each object of the structure type shown above.  When looking
15522          for a place to allocate the "containing object" for `field2',
15523          the compiler simply tries to allocate a 64-bit "containing
15524          object" at each successive 32-bit boundary (starting at zero)
15525          until it finds a place to allocate that 64- bit field such that
15526          at least 31 contiguous (and previously unallocated) bits remain
15527          within that selected 64 bit field.  (As it turns out, for the
15528          example above, the compiler finds it is OK to allocate the
15529          "containing object" 64-bit field at bit-offset zero within the
15530          structure type.)
15531
15532          Here we attempt to work backwards from the limited set of facts
15533          we're given, and we try to deduce from those facts, where GCC
15534          must have believed that the containing object started (within
15535          the structure type). The value we deduce is then used (by the
15536          callers of this routine) to generate DW_AT_location and
15537          DW_AT_bit_offset attributes for fields (both bit-fields and, in
15538          the case of DW_AT_location, regular fields as well).  */
15539
15540       /* Figure out the bit-distance from the start of the structure to
15541          the "deepest" bit of the bit-field.  */
15542       deepest_bitpos = double_int_add (bitpos_int, field_size_in_bits);
15543
15544       /* This is the tricky part.  Use some fancy footwork to deduce
15545          where the lowest addressed bit of the containing object must
15546          be.  */
15547       object_offset_in_bits
15548         = double_int_add (deepest_bitpos, double_int_neg (type_size_in_bits));
15549
15550       /* Round up to type_align by default.  This works best for
15551          bitfields.  */
15552       object_offset_in_bits
15553         = round_up_to_align (object_offset_in_bits, type_align_in_bits);
15554
15555       if (double_int_ucmp (object_offset_in_bits, bitpos_int) > 0)
15556         {
15557           object_offset_in_bits
15558             = double_int_add (deepest_bitpos,
15559                               double_int_neg (type_size_in_bits));
15560
15561           /* Round up to decl_align instead.  */
15562           object_offset_in_bits
15563             = round_up_to_align (object_offset_in_bits, decl_align_in_bits);
15564         }
15565     }
15566   else
15567 #endif
15568     object_offset_in_bits = bitpos_int;
15569
15570   object_offset_in_bytes
15571     = double_int_div (object_offset_in_bits,
15572                       uhwi_to_double_int (BITS_PER_UNIT), true,
15573                       TRUNC_DIV_EXPR);
15574   return double_int_to_shwi (object_offset_in_bytes);
15575 }
15576 \f
15577 /* The following routines define various Dwarf attributes and any data
15578    associated with them.  */
15579
15580 /* Add a location description attribute value to a DIE.
15581
15582    This emits location attributes suitable for whole variables and
15583    whole parameters.  Note that the location attributes for struct fields are
15584    generated by the routine `data_member_location_attribute' below.  */
15585
15586 static inline void
15587 add_AT_location_description (dw_die_ref die, enum dwarf_attribute attr_kind,
15588                              dw_loc_list_ref descr)
15589 {
15590   if (descr == 0)
15591     return;
15592   if (single_element_loc_list_p (descr))
15593     add_AT_loc (die, attr_kind, descr->expr);
15594   else
15595     add_AT_loc_list (die, attr_kind, descr);
15596 }
15597
15598 /* Attach the specialized form of location attribute used for data members of
15599    struct and union types.  In the special case of a FIELD_DECL node which
15600    represents a bit-field, the "offset" part of this special location
15601    descriptor must indicate the distance in bytes from the lowest-addressed
15602    byte of the containing struct or union type to the lowest-addressed byte of
15603    the "containing object" for the bit-field.  (See the `field_byte_offset'
15604    function above).
15605
15606    For any given bit-field, the "containing object" is a hypothetical object
15607    (of some integral or enum type) within which the given bit-field lives.  The
15608    type of this hypothetical "containing object" is always the same as the
15609    declared type of the individual bit-field itself (for GCC anyway... the
15610    DWARF spec doesn't actually mandate this).  Note that it is the size (in
15611    bytes) of the hypothetical "containing object" which will be given in the
15612    DW_AT_byte_size attribute for this bit-field.  (See the
15613    `byte_size_attribute' function below.)  It is also used when calculating the
15614    value of the DW_AT_bit_offset attribute.  (See the `bit_offset_attribute'
15615    function below.)  */
15616
15617 static void
15618 add_data_member_location_attribute (dw_die_ref die, tree decl)
15619 {
15620   HOST_WIDE_INT offset;
15621   dw_loc_descr_ref loc_descr = 0;
15622
15623   if (TREE_CODE (decl) == TREE_BINFO)
15624     {
15625       /* We're working on the TAG_inheritance for a base class.  */
15626       if (BINFO_VIRTUAL_P (decl) && is_cxx ())
15627         {
15628           /* For C++ virtual bases we can't just use BINFO_OFFSET, as they
15629              aren't at a fixed offset from all (sub)objects of the same
15630              type.  We need to extract the appropriate offset from our
15631              vtable.  The following dwarf expression means
15632
15633                BaseAddr = ObAddr + *((*ObAddr) - Offset)
15634
15635              This is specific to the V3 ABI, of course.  */
15636
15637           dw_loc_descr_ref tmp;
15638
15639           /* Make a copy of the object address.  */
15640           tmp = new_loc_descr (DW_OP_dup, 0, 0);
15641           add_loc_descr (&loc_descr, tmp);
15642
15643           /* Extract the vtable address.  */
15644           tmp = new_loc_descr (DW_OP_deref, 0, 0);
15645           add_loc_descr (&loc_descr, tmp);
15646
15647           /* Calculate the address of the offset.  */
15648           offset = tree_low_cst (BINFO_VPTR_FIELD (decl), 0);
15649           gcc_assert (offset < 0);
15650
15651           tmp = int_loc_descriptor (-offset);
15652           add_loc_descr (&loc_descr, tmp);
15653           tmp = new_loc_descr (DW_OP_minus, 0, 0);
15654           add_loc_descr (&loc_descr, tmp);
15655
15656           /* Extract the offset.  */
15657           tmp = new_loc_descr (DW_OP_deref, 0, 0);
15658           add_loc_descr (&loc_descr, tmp);
15659
15660           /* Add it to the object address.  */
15661           tmp = new_loc_descr (DW_OP_plus, 0, 0);
15662           add_loc_descr (&loc_descr, tmp);
15663         }
15664       else
15665         offset = tree_low_cst (BINFO_OFFSET (decl), 0);
15666     }
15667   else
15668     offset = field_byte_offset (decl);
15669
15670   if (! loc_descr)
15671     {
15672       if (dwarf_version > 2)
15673         {
15674           /* Don't need to output a location expression, just the constant. */
15675           add_AT_int (die, DW_AT_data_member_location, offset);
15676           return;
15677         }
15678       else
15679         {
15680           enum dwarf_location_atom op;
15681
15682           /* The DWARF2 standard says that we should assume that the structure
15683              address is already on the stack, so we can specify a structure
15684              field address by using DW_OP_plus_uconst.  */
15685
15686 #ifdef MIPS_DEBUGGING_INFO
15687           /* ??? The SGI dwarf reader does not handle the DW_OP_plus_uconst
15688              operator correctly.  It works only if we leave the offset on the
15689              stack.  */
15690           op = DW_OP_constu;
15691 #else
15692           op = DW_OP_plus_uconst;
15693 #endif
15694
15695           loc_descr = new_loc_descr (op, offset, 0);
15696         }
15697     }
15698
15699   add_AT_loc (die, DW_AT_data_member_location, loc_descr);
15700 }
15701
15702 /* Writes integer values to dw_vec_const array.  */
15703
15704 static void
15705 insert_int (HOST_WIDE_INT val, unsigned int size, unsigned char *dest)
15706 {
15707   while (size != 0)
15708     {
15709       *dest++ = val & 0xff;
15710       val >>= 8;
15711       --size;
15712     }
15713 }
15714
15715 /* Reads integers from dw_vec_const array.  Inverse of insert_int.  */
15716
15717 static HOST_WIDE_INT
15718 extract_int (const unsigned char *src, unsigned int size)
15719 {
15720   HOST_WIDE_INT val = 0;
15721
15722   src += size;
15723   while (size != 0)
15724     {
15725       val <<= 8;
15726       val |= *--src & 0xff;
15727       --size;
15728     }
15729   return val;
15730 }
15731
15732 /* Writes double_int values to dw_vec_const array.  */
15733
15734 static void
15735 insert_double (double_int val, unsigned char *dest)
15736 {
15737   unsigned char *p0 = dest;
15738   unsigned char *p1 = dest + sizeof (HOST_WIDE_INT);
15739
15740   if (WORDS_BIG_ENDIAN)
15741     {
15742       p0 = p1;
15743       p1 = dest;
15744     }
15745
15746   insert_int ((HOST_WIDE_INT) val.low, sizeof (HOST_WIDE_INT), p0);
15747   insert_int ((HOST_WIDE_INT) val.high, sizeof (HOST_WIDE_INT), p1);
15748 }
15749
15750 /* Writes floating point values to dw_vec_const array.  */
15751
15752 static void
15753 insert_float (const_rtx rtl, unsigned char *array)
15754 {
15755   REAL_VALUE_TYPE rv;
15756   long val[4];
15757   int i;
15758
15759   REAL_VALUE_FROM_CONST_DOUBLE (rv, rtl);
15760   real_to_target (val, &rv, GET_MODE (rtl));
15761
15762   /* real_to_target puts 32-bit pieces in each long.  Pack them.  */
15763   for (i = 0; i < GET_MODE_SIZE (GET_MODE (rtl)) / 4; i++)
15764     {
15765       insert_int (val[i], 4, array);
15766       array += 4;
15767     }
15768 }
15769
15770 /* Attach a DW_AT_const_value attribute for a variable or a parameter which
15771    does not have a "location" either in memory or in a register.  These
15772    things can arise in GNU C when a constant is passed as an actual parameter
15773    to an inlined function.  They can also arise in C++ where declared
15774    constants do not necessarily get memory "homes".  */
15775
15776 static bool
15777 add_const_value_attribute (dw_die_ref die, rtx rtl)
15778 {
15779   switch (GET_CODE (rtl))
15780     {
15781     case CONST_INT:
15782       {
15783         HOST_WIDE_INT val = INTVAL (rtl);
15784
15785         if (val < 0)
15786           add_AT_int (die, DW_AT_const_value, val);
15787         else
15788           add_AT_unsigned (die, DW_AT_const_value, (unsigned HOST_WIDE_INT) val);
15789       }
15790       return true;
15791
15792     case CONST_DOUBLE:
15793       /* Note that a CONST_DOUBLE rtx could represent either an integer or a
15794          floating-point constant.  A CONST_DOUBLE is used whenever the
15795          constant requires more than one word in order to be adequately
15796          represented.  */
15797       {
15798         enum machine_mode mode = GET_MODE (rtl);
15799
15800         if (SCALAR_FLOAT_MODE_P (mode))
15801           {
15802             unsigned int length = GET_MODE_SIZE (mode);
15803             unsigned char *array = GGC_NEWVEC (unsigned char, length);
15804
15805             insert_float (rtl, array);
15806             add_AT_vec (die, DW_AT_const_value, length / 4, 4, array);
15807           }
15808         else
15809           add_AT_double (die, DW_AT_const_value,
15810                          CONST_DOUBLE_HIGH (rtl), CONST_DOUBLE_LOW (rtl));
15811       }
15812       return true;
15813
15814     case CONST_VECTOR:
15815       {
15816         enum machine_mode mode = GET_MODE (rtl);
15817         unsigned int elt_size = GET_MODE_UNIT_SIZE (mode);
15818         unsigned int length = CONST_VECTOR_NUNITS (rtl);
15819         unsigned char *array = GGC_NEWVEC (unsigned char, length * elt_size);
15820         unsigned int i;
15821         unsigned char *p;
15822
15823         switch (GET_MODE_CLASS (mode))
15824           {
15825           case MODE_VECTOR_INT:
15826             for (i = 0, p = array; i < length; i++, p += elt_size)
15827               {
15828                 rtx elt = CONST_VECTOR_ELT (rtl, i);
15829                 double_int val = rtx_to_double_int (elt);
15830
15831                 if (elt_size <= sizeof (HOST_WIDE_INT))
15832                   insert_int (double_int_to_shwi (val), elt_size, p);
15833                 else
15834                   {
15835                     gcc_assert (elt_size == 2 * sizeof (HOST_WIDE_INT));
15836                     insert_double (val, p);
15837                   }
15838               }
15839             break;
15840
15841           case MODE_VECTOR_FLOAT:
15842             for (i = 0, p = array; i < length; i++, p += elt_size)
15843               {
15844                 rtx elt = CONST_VECTOR_ELT (rtl, i);
15845                 insert_float (elt, p);
15846               }
15847             break;
15848
15849           default:
15850             gcc_unreachable ();
15851           }
15852
15853         add_AT_vec (die, DW_AT_const_value, length, elt_size, array);
15854       }
15855       return true;
15856
15857     case CONST_STRING:
15858       if (dwarf_version >= 4 || !dwarf_strict)
15859         {
15860           dw_loc_descr_ref loc_result;
15861           resolve_one_addr (&rtl, NULL);
15862         rtl_addr:
15863           loc_result = new_loc_descr (DW_OP_addr, 0, 0);
15864           loc_result->dw_loc_oprnd1.val_class = dw_val_class_addr;
15865           loc_result->dw_loc_oprnd1.v.val_addr = rtl;
15866           add_loc_descr (&loc_result, new_loc_descr (DW_OP_stack_value, 0, 0));
15867           add_AT_loc (die, DW_AT_location, loc_result);
15868           VEC_safe_push (rtx, gc, used_rtx_array, rtl);
15869           return true;
15870         }
15871       return false;
15872
15873     case CONST:
15874       if (CONSTANT_P (XEXP (rtl, 0)))
15875         return add_const_value_attribute (die, XEXP (rtl, 0));
15876       /* FALLTHROUGH */
15877     case SYMBOL_REF:
15878       if (!const_ok_for_output (rtl))
15879         return false;
15880     case LABEL_REF:
15881       if (dwarf_version >= 4 || !dwarf_strict)
15882         goto rtl_addr;
15883       return false;
15884
15885     case PLUS:
15886       /* In cases where an inlined instance of an inline function is passed
15887          the address of an `auto' variable (which is local to the caller) we
15888          can get a situation where the DECL_RTL of the artificial local
15889          variable (for the inlining) which acts as a stand-in for the
15890          corresponding formal parameter (of the inline function) will look
15891          like (plus:SI (reg:SI FRAME_PTR) (const_int ...)).  This is not
15892          exactly a compile-time constant expression, but it isn't the address
15893          of the (artificial) local variable either.  Rather, it represents the
15894          *value* which the artificial local variable always has during its
15895          lifetime.  We currently have no way to represent such quasi-constant
15896          values in Dwarf, so for now we just punt and generate nothing.  */
15897       return false;
15898
15899     case HIGH:
15900     case CONST_FIXED:
15901       return false;
15902
15903     case MEM:
15904       if (GET_CODE (XEXP (rtl, 0)) == CONST_STRING
15905           && MEM_READONLY_P (rtl)
15906           && GET_MODE (rtl) == BLKmode)
15907         {
15908           add_AT_string (die, DW_AT_const_value, XSTR (XEXP (rtl, 0), 0));
15909           return true;
15910         }
15911       return false;
15912
15913     default:
15914       /* No other kinds of rtx should be possible here.  */
15915       gcc_unreachable ();
15916     }
15917   return false;
15918 }
15919
15920 /* Determine whether the evaluation of EXPR references any variables
15921    or functions which aren't otherwise used (and therefore may not be
15922    output).  */
15923 static tree
15924 reference_to_unused (tree * tp, int * walk_subtrees,
15925                      void * data ATTRIBUTE_UNUSED)
15926 {
15927   if (! EXPR_P (*tp) && ! CONSTANT_CLASS_P (*tp))
15928     *walk_subtrees = 0;
15929
15930   if (DECL_P (*tp) && ! TREE_PUBLIC (*tp) && ! TREE_USED (*tp)
15931       && ! TREE_ASM_WRITTEN (*tp))
15932     return *tp;
15933   /* ???  The C++ FE emits debug information for using decls, so
15934      putting gcc_unreachable here falls over.  See PR31899.  For now
15935      be conservative.  */
15936   else if (!cgraph_global_info_ready
15937            && (TREE_CODE (*tp) == VAR_DECL || TREE_CODE (*tp) == FUNCTION_DECL))
15938     return *tp;
15939   else if (TREE_CODE (*tp) == VAR_DECL)
15940     {
15941       struct varpool_node *node = varpool_node (*tp);
15942       if (!node->needed)
15943         return *tp;
15944     }
15945   else if (TREE_CODE (*tp) == FUNCTION_DECL
15946            && (!DECL_EXTERNAL (*tp) || DECL_DECLARED_INLINE_P (*tp)))
15947     {
15948       /* The call graph machinery must have finished analyzing,
15949          optimizing and gimplifying the CU by now.
15950          So if *TP has no call graph node associated
15951          to it, it means *TP will not be emitted.  */
15952       if (!cgraph_get_node (*tp))
15953         return *tp;
15954     }
15955   else if (TREE_CODE (*tp) == STRING_CST && !TREE_ASM_WRITTEN (*tp))
15956     return *tp;
15957
15958   return NULL_TREE;
15959 }
15960
15961 /* Generate an RTL constant from a decl initializer INIT with decl type TYPE,
15962    for use in a later add_const_value_attribute call.  */
15963
15964 static rtx
15965 rtl_for_decl_init (tree init, tree type)
15966 {
15967   rtx rtl = NULL_RTX;
15968
15969   /* If a variable is initialized with a string constant without embedded
15970      zeros, build CONST_STRING.  */
15971   if (TREE_CODE (init) == STRING_CST && TREE_CODE (type) == ARRAY_TYPE)
15972     {
15973       tree enttype = TREE_TYPE (type);
15974       tree domain = TYPE_DOMAIN (type);
15975       enum machine_mode mode = TYPE_MODE (enttype);
15976
15977       if (GET_MODE_CLASS (mode) == MODE_INT && GET_MODE_SIZE (mode) == 1
15978           && domain
15979           && integer_zerop (TYPE_MIN_VALUE (domain))
15980           && compare_tree_int (TYPE_MAX_VALUE (domain),
15981                                TREE_STRING_LENGTH (init) - 1) == 0
15982           && ((size_t) TREE_STRING_LENGTH (init)
15983               == strlen (TREE_STRING_POINTER (init)) + 1))
15984         {
15985           rtl = gen_rtx_CONST_STRING (VOIDmode,
15986                                       ggc_strdup (TREE_STRING_POINTER (init)));
15987           rtl = gen_rtx_MEM (BLKmode, rtl);
15988           MEM_READONLY_P (rtl) = 1;
15989         }
15990     }
15991   /* Other aggregates, and complex values, could be represented using
15992      CONCAT: FIXME!  */
15993   else if (AGGREGATE_TYPE_P (type) || TREE_CODE (type) == COMPLEX_TYPE)
15994     ;
15995   /* Vectors only work if their mode is supported by the target.
15996      FIXME: generic vectors ought to work too.  */
15997   else if (TREE_CODE (type) == VECTOR_TYPE && TYPE_MODE (type) == BLKmode)
15998     ;
15999   /* If the initializer is something that we know will expand into an
16000      immediate RTL constant, expand it now.  We must be careful not to
16001      reference variables which won't be output.  */
16002   else if (initializer_constant_valid_p (init, type)
16003            && ! walk_tree (&init, reference_to_unused, NULL, NULL))
16004     {
16005       /* Convert vector CONSTRUCTOR initializers to VECTOR_CST if
16006          possible.  */
16007       if (TREE_CODE (type) == VECTOR_TYPE)
16008         switch (TREE_CODE (init))
16009           {
16010           case VECTOR_CST:
16011             break;
16012           case CONSTRUCTOR:
16013             if (TREE_CONSTANT (init))
16014               {
16015                 VEC(constructor_elt,gc) *elts = CONSTRUCTOR_ELTS (init);
16016                 bool constant_p = true;
16017                 tree value;
16018                 unsigned HOST_WIDE_INT ix;
16019
16020                 /* Even when ctor is constant, it might contain non-*_CST
16021                    elements (e.g. { 1.0/0.0 - 1.0/0.0, 0.0 }) and those don't
16022                    belong into VECTOR_CST nodes.  */
16023                 FOR_EACH_CONSTRUCTOR_VALUE (elts, ix, value)
16024                   if (!CONSTANT_CLASS_P (value))
16025                     {
16026                       constant_p = false;
16027                       break;
16028                     }
16029
16030                 if (constant_p)
16031                   {
16032                     init = build_vector_from_ctor (type, elts);
16033                     break;
16034                   }
16035               }
16036             /* FALLTHRU */
16037
16038           default:
16039             return NULL;
16040           }
16041
16042       rtl = expand_expr (init, NULL_RTX, VOIDmode, EXPAND_INITIALIZER);
16043
16044       /* If expand_expr returns a MEM, it wasn't immediate.  */
16045       gcc_assert (!rtl || !MEM_P (rtl));
16046     }
16047
16048   return rtl;
16049 }
16050
16051 /* Generate RTL for the variable DECL to represent its location.  */
16052
16053 static rtx
16054 rtl_for_decl_location (tree decl)
16055 {
16056   rtx rtl;
16057
16058   /* Here we have to decide where we are going to say the parameter "lives"
16059      (as far as the debugger is concerned).  We only have a couple of
16060      choices.  GCC provides us with DECL_RTL and with DECL_INCOMING_RTL.
16061
16062      DECL_RTL normally indicates where the parameter lives during most of the
16063      activation of the function.  If optimization is enabled however, this
16064      could be either NULL or else a pseudo-reg.  Both of those cases indicate
16065      that the parameter doesn't really live anywhere (as far as the code
16066      generation parts of GCC are concerned) during most of the function's
16067      activation.  That will happen (for example) if the parameter is never
16068      referenced within the function.
16069
16070      We could just generate a location descriptor here for all non-NULL
16071      non-pseudo values of DECL_RTL and ignore all of the rest, but we can be
16072      a little nicer than that if we also consider DECL_INCOMING_RTL in cases
16073      where DECL_RTL is NULL or is a pseudo-reg.
16074
16075      Note however that we can only get away with using DECL_INCOMING_RTL as
16076      a backup substitute for DECL_RTL in certain limited cases.  In cases
16077      where DECL_ARG_TYPE (decl) indicates the same type as TREE_TYPE (decl),
16078      we can be sure that the parameter was passed using the same type as it is
16079      declared to have within the function, and that its DECL_INCOMING_RTL
16080      points us to a place where a value of that type is passed.
16081
16082      In cases where DECL_ARG_TYPE (decl) and TREE_TYPE (decl) are different,
16083      we cannot (in general) use DECL_INCOMING_RTL as a substitute for DECL_RTL
16084      because in these cases DECL_INCOMING_RTL points us to a value of some
16085      type which is *different* from the type of the parameter itself.  Thus,
16086      if we tried to use DECL_INCOMING_RTL to generate a location attribute in
16087      such cases, the debugger would end up (for example) trying to fetch a
16088      `float' from a place which actually contains the first part of a
16089      `double'.  That would lead to really incorrect and confusing
16090      output at debug-time.
16091
16092      So, in general, we *do not* use DECL_INCOMING_RTL as a backup for DECL_RTL
16093      in cases where DECL_ARG_TYPE (decl) != TREE_TYPE (decl).  There
16094      are a couple of exceptions however.  On little-endian machines we can
16095      get away with using DECL_INCOMING_RTL even when DECL_ARG_TYPE (decl) is
16096      not the same as TREE_TYPE (decl), but only when DECL_ARG_TYPE (decl) is
16097      an integral type that is smaller than TREE_TYPE (decl). These cases arise
16098      when (on a little-endian machine) a non-prototyped function has a
16099      parameter declared to be of type `short' or `char'.  In such cases,
16100      TREE_TYPE (decl) will be `short' or `char', DECL_ARG_TYPE (decl) will
16101      be `int', and DECL_INCOMING_RTL will point to the lowest-order byte of the
16102      passed `int' value.  If the debugger then uses that address to fetch
16103      a `short' or a `char' (on a little-endian machine) the result will be
16104      the correct data, so we allow for such exceptional cases below.
16105
16106      Note that our goal here is to describe the place where the given formal
16107      parameter lives during most of the function's activation (i.e. between the
16108      end of the prologue and the start of the epilogue).  We'll do that as best
16109      as we can. Note however that if the given formal parameter is modified
16110      sometime during the execution of the function, then a stack backtrace (at
16111      debug-time) will show the function as having been called with the *new*
16112      value rather than the value which was originally passed in.  This happens
16113      rarely enough that it is not a major problem, but it *is* a problem, and
16114      I'd like to fix it.
16115
16116      A future version of dwarf2out.c may generate two additional attributes for
16117      any given DW_TAG_formal_parameter DIE which will describe the "passed
16118      type" and the "passed location" for the given formal parameter in addition
16119      to the attributes we now generate to indicate the "declared type" and the
16120      "active location" for each parameter.  This additional set of attributes
16121      could be used by debuggers for stack backtraces. Separately, note that
16122      sometimes DECL_RTL can be NULL and DECL_INCOMING_RTL can be NULL also.
16123      This happens (for example) for inlined-instances of inline function formal
16124      parameters which are never referenced.  This really shouldn't be
16125      happening.  All PARM_DECL nodes should get valid non-NULL
16126      DECL_INCOMING_RTL values.  FIXME.  */
16127
16128   /* Use DECL_RTL as the "location" unless we find something better.  */
16129   rtl = DECL_RTL_IF_SET (decl);
16130
16131   /* When generating abstract instances, ignore everything except
16132      constants, symbols living in memory, and symbols living in
16133      fixed registers.  */
16134   if (! reload_completed)
16135     {
16136       if (rtl
16137           && (CONSTANT_P (rtl)
16138               || (MEM_P (rtl)
16139                   && CONSTANT_P (XEXP (rtl, 0)))
16140               || (REG_P (rtl)
16141                   && TREE_CODE (decl) == VAR_DECL
16142                   && TREE_STATIC (decl))))
16143         {
16144           rtl = targetm.delegitimize_address (rtl);
16145           return rtl;
16146         }
16147       rtl = NULL_RTX;
16148     }
16149   else if (TREE_CODE (decl) == PARM_DECL)
16150     {
16151       if (rtl == NULL_RTX || is_pseudo_reg (rtl))
16152         {
16153           tree declared_type = TREE_TYPE (decl);
16154           tree passed_type = DECL_ARG_TYPE (decl);
16155           enum machine_mode dmode = TYPE_MODE (declared_type);
16156           enum machine_mode pmode = TYPE_MODE (passed_type);
16157
16158           /* This decl represents a formal parameter which was optimized out.
16159              Note that DECL_INCOMING_RTL may be NULL in here, but we handle
16160              all cases where (rtl == NULL_RTX) just below.  */
16161           if (dmode == pmode)
16162             rtl = DECL_INCOMING_RTL (decl);
16163           else if (SCALAR_INT_MODE_P (dmode)
16164                    && GET_MODE_SIZE (dmode) <= GET_MODE_SIZE (pmode)
16165                    && DECL_INCOMING_RTL (decl))
16166             {
16167               rtx inc = DECL_INCOMING_RTL (decl);
16168               if (REG_P (inc))
16169                 rtl = inc;
16170               else if (MEM_P (inc))
16171                 {
16172                   if (BYTES_BIG_ENDIAN)
16173                     rtl = adjust_address_nv (inc, dmode,
16174                                              GET_MODE_SIZE (pmode)
16175                                              - GET_MODE_SIZE (dmode));
16176                   else
16177                     rtl = inc;
16178                 }
16179             }
16180         }
16181
16182       /* If the parm was passed in registers, but lives on the stack, then
16183          make a big endian correction if the mode of the type of the
16184          parameter is not the same as the mode of the rtl.  */
16185       /* ??? This is the same series of checks that are made in dbxout.c before
16186          we reach the big endian correction code there.  It isn't clear if all
16187          of these checks are necessary here, but keeping them all is the safe
16188          thing to do.  */
16189       else if (MEM_P (rtl)
16190                && XEXP (rtl, 0) != const0_rtx
16191                && ! CONSTANT_P (XEXP (rtl, 0))
16192                /* Not passed in memory.  */
16193                && !MEM_P (DECL_INCOMING_RTL (decl))
16194                /* Not passed by invisible reference.  */
16195                && (!REG_P (XEXP (rtl, 0))
16196                    || REGNO (XEXP (rtl, 0)) == HARD_FRAME_POINTER_REGNUM
16197                    || REGNO (XEXP (rtl, 0)) == STACK_POINTER_REGNUM
16198 #if ARG_POINTER_REGNUM != HARD_FRAME_POINTER_REGNUM
16199                    || REGNO (XEXP (rtl, 0)) == ARG_POINTER_REGNUM
16200 #endif
16201                      )
16202                /* Big endian correction check.  */
16203                && BYTES_BIG_ENDIAN
16204                && TYPE_MODE (TREE_TYPE (decl)) != GET_MODE (rtl)
16205                && (GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (decl)))
16206                    < UNITS_PER_WORD))
16207         {
16208           int offset = (UNITS_PER_WORD
16209                         - GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (decl))));
16210
16211           rtl = gen_rtx_MEM (TYPE_MODE (TREE_TYPE (decl)),
16212                              plus_constant (XEXP (rtl, 0), offset));
16213         }
16214     }
16215   else if (TREE_CODE (decl) == VAR_DECL
16216            && rtl
16217            && MEM_P (rtl)
16218            && GET_MODE (rtl) != TYPE_MODE (TREE_TYPE (decl))
16219            && BYTES_BIG_ENDIAN)
16220     {
16221       int rsize = GET_MODE_SIZE (GET_MODE (rtl));
16222       int dsize = GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (decl)));
16223
16224       /* If a variable is declared "register" yet is smaller than
16225          a register, then if we store the variable to memory, it
16226          looks like we're storing a register-sized value, when in
16227          fact we are not.  We need to adjust the offset of the
16228          storage location to reflect the actual value's bytes,
16229          else gdb will not be able to display it.  */
16230       if (rsize > dsize)
16231         rtl = gen_rtx_MEM (TYPE_MODE (TREE_TYPE (decl)),
16232                            plus_constant (XEXP (rtl, 0), rsize-dsize));
16233     }
16234
16235   /* A variable with no DECL_RTL but a DECL_INITIAL is a compile-time constant,
16236      and will have been substituted directly into all expressions that use it.
16237      C does not have such a concept, but C++ and other languages do.  */
16238   if (!rtl && TREE_CODE (decl) == VAR_DECL && DECL_INITIAL (decl))
16239     rtl = rtl_for_decl_init (DECL_INITIAL (decl), TREE_TYPE (decl));
16240
16241   if (rtl)
16242     rtl = targetm.delegitimize_address (rtl);
16243
16244   /* If we don't look past the constant pool, we risk emitting a
16245      reference to a constant pool entry that isn't referenced from
16246      code, and thus is not emitted.  */
16247   if (rtl)
16248     rtl = avoid_constant_pool_reference (rtl);
16249
16250   /* Try harder to get a rtl.  If this symbol ends up not being emitted
16251      in the current CU, resolve_addr will remove the expression referencing
16252      it.  */
16253   if (rtl == NULL_RTX
16254       && TREE_CODE (decl) == VAR_DECL
16255       && !DECL_EXTERNAL (decl)
16256       && TREE_STATIC (decl)
16257       && DECL_NAME (decl)
16258       && !DECL_HARD_REGISTER (decl)
16259       && DECL_MODE (decl) != VOIDmode)
16260     {
16261       rtl = make_decl_rtl_for_debug (decl);
16262       if (!MEM_P (rtl)
16263           || GET_CODE (XEXP (rtl, 0)) != SYMBOL_REF
16264           || SYMBOL_REF_DECL (XEXP (rtl, 0)) != decl)
16265         rtl = NULL_RTX;
16266     }
16267
16268   return rtl;
16269 }
16270
16271 /* Check whether decl is a Fortran COMMON symbol.  If not, NULL_TREE is
16272    returned.  If so, the decl for the COMMON block is returned, and the
16273    value is the offset into the common block for the symbol.  */
16274
16275 static tree
16276 fortran_common (tree decl, HOST_WIDE_INT *value)
16277 {
16278   tree val_expr, cvar;
16279   enum machine_mode mode;
16280   HOST_WIDE_INT bitsize, bitpos;
16281   tree offset;
16282   int volatilep = 0, unsignedp = 0;
16283
16284   /* If the decl isn't a VAR_DECL, or if it isn't static, or if
16285      it does not have a value (the offset into the common area), or if it
16286      is thread local (as opposed to global) then it isn't common, and shouldn't
16287      be handled as such.  */
16288   if (TREE_CODE (decl) != VAR_DECL
16289       || !TREE_STATIC (decl)
16290       || !DECL_HAS_VALUE_EXPR_P (decl)
16291       || !is_fortran ())
16292     return NULL_TREE;
16293
16294   val_expr = DECL_VALUE_EXPR (decl);
16295   if (TREE_CODE (val_expr) != COMPONENT_REF)
16296     return NULL_TREE;
16297
16298   cvar = get_inner_reference (val_expr, &bitsize, &bitpos, &offset,
16299                               &mode, &unsignedp, &volatilep, true);
16300
16301   if (cvar == NULL_TREE
16302       || TREE_CODE (cvar) != VAR_DECL
16303       || DECL_ARTIFICIAL (cvar)
16304       || !TREE_PUBLIC (cvar))
16305     return NULL_TREE;
16306
16307   *value = 0;
16308   if (offset != NULL)
16309     {
16310       if (!host_integerp (offset, 0))
16311         return NULL_TREE;
16312       *value = tree_low_cst (offset, 0);
16313     }
16314   if (bitpos != 0)
16315     *value += bitpos / BITS_PER_UNIT;
16316
16317   return cvar;
16318 }
16319
16320 /* Generate *either* a DW_AT_location attribute or else a DW_AT_const_value
16321    data attribute for a variable or a parameter.  We generate the
16322    DW_AT_const_value attribute only in those cases where the given variable
16323    or parameter does not have a true "location" either in memory or in a
16324    register.  This can happen (for example) when a constant is passed as an
16325    actual argument in a call to an inline function.  (It's possible that
16326    these things can crop up in other ways also.)  Note that one type of
16327    constant value which can be passed into an inlined function is a constant
16328    pointer.  This can happen for example if an actual argument in an inlined
16329    function call evaluates to a compile-time constant address.  */
16330
16331 static bool
16332 add_location_or_const_value_attribute (dw_die_ref die, tree decl,
16333                                        enum dwarf_attribute attr)
16334 {
16335   rtx rtl;
16336   dw_loc_list_ref list;
16337   var_loc_list *loc_list;
16338
16339   if (TREE_CODE (decl) == ERROR_MARK)
16340     return false;
16341
16342   gcc_assert (TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == PARM_DECL
16343               || TREE_CODE (decl) == RESULT_DECL);
16344
16345   /* Try to get some constant RTL for this decl, and use that as the value of
16346      the location.  */
16347
16348   rtl = rtl_for_decl_location (decl);
16349   if (rtl && (CONSTANT_P (rtl) || GET_CODE (rtl) == CONST_STRING)
16350       && add_const_value_attribute (die, rtl))
16351     return true;
16352
16353   /* See if we have single element location list that is equivalent to
16354      a constant value.  That way we are better to use add_const_value_attribute
16355      rather than expanding constant value equivalent.  */
16356   loc_list = lookup_decl_loc (decl);
16357   if (loc_list
16358       && loc_list->first
16359       && loc_list->first->next == NULL
16360       && NOTE_P (loc_list->first->loc)
16361       && NOTE_VAR_LOCATION (loc_list->first->loc)
16362       && NOTE_VAR_LOCATION_LOC (loc_list->first->loc))
16363     {
16364       struct var_loc_node *node;
16365
16366       node = loc_list->first;
16367       rtl = NOTE_VAR_LOCATION_LOC (node->loc);
16368       if (GET_CODE (rtl) == EXPR_LIST)
16369         rtl = XEXP (rtl, 0);
16370       if ((CONSTANT_P (rtl) || GET_CODE (rtl) == CONST_STRING)
16371           && add_const_value_attribute (die, rtl))
16372          return true;
16373     }
16374   list = loc_list_from_tree (decl, decl_by_reference_p (decl) ? 0 : 2);
16375   if (list)
16376     {
16377       add_AT_location_description (die, attr, list);
16378       return true;
16379     }
16380   /* None of that worked, so it must not really have a location;
16381      try adding a constant value attribute from the DECL_INITIAL.  */
16382   return tree_add_const_value_attribute_for_decl (die, decl);
16383 }
16384
16385 /* Add VARIABLE and DIE into deferred locations list.  */
16386
16387 static void
16388 defer_location (tree variable, dw_die_ref die)
16389 {
16390   deferred_locations entry;
16391   entry.variable = variable;
16392   entry.die = die;
16393   VEC_safe_push (deferred_locations, gc, deferred_locations_list, &entry);
16394 }
16395
16396 /* Helper function for tree_add_const_value_attribute.  Natively encode
16397    initializer INIT into an array.  Return true if successful.  */
16398
16399 static bool
16400 native_encode_initializer (tree init, unsigned char *array, int size)
16401 {
16402   tree type;
16403
16404   if (init == NULL_TREE)
16405     return false;
16406
16407   STRIP_NOPS (init);
16408   switch (TREE_CODE (init))
16409     {
16410     case STRING_CST:
16411       type = TREE_TYPE (init);
16412       if (TREE_CODE (type) == ARRAY_TYPE)
16413         {
16414           tree enttype = TREE_TYPE (type);
16415           enum machine_mode mode = TYPE_MODE (enttype);
16416
16417           if (GET_MODE_CLASS (mode) != MODE_INT || GET_MODE_SIZE (mode) != 1)
16418             return false;
16419           if (int_size_in_bytes (type) != size)
16420             return false;
16421           if (size > TREE_STRING_LENGTH (init))
16422             {
16423               memcpy (array, TREE_STRING_POINTER (init),
16424                       TREE_STRING_LENGTH (init));
16425               memset (array + TREE_STRING_LENGTH (init),
16426                       '\0', size - TREE_STRING_LENGTH (init));
16427             }
16428           else
16429             memcpy (array, TREE_STRING_POINTER (init), size);
16430           return true;
16431         }
16432       return false;
16433     case CONSTRUCTOR:
16434       type = TREE_TYPE (init);
16435       if (int_size_in_bytes (type) != size)
16436         return false;
16437       if (TREE_CODE (type) == ARRAY_TYPE)
16438         {
16439           HOST_WIDE_INT min_index;
16440           unsigned HOST_WIDE_INT cnt;
16441           int curpos = 0, fieldsize;
16442           constructor_elt *ce;
16443
16444           if (TYPE_DOMAIN (type) == NULL_TREE
16445               || !host_integerp (TYPE_MIN_VALUE (TYPE_DOMAIN (type)), 0))
16446             return false;
16447
16448           fieldsize = int_size_in_bytes (TREE_TYPE (type));
16449           if (fieldsize <= 0)
16450             return false;
16451
16452           min_index = tree_low_cst (TYPE_MIN_VALUE (TYPE_DOMAIN (type)), 0);
16453           memset (array, '\0', size);
16454           for (cnt = 0;
16455                VEC_iterate (constructor_elt, CONSTRUCTOR_ELTS (init), cnt, ce);
16456                cnt++)
16457             {
16458               tree val = ce->value;
16459               tree index = ce->index;
16460               int pos = curpos;
16461               if (index && TREE_CODE (index) == RANGE_EXPR)
16462                 pos = (tree_low_cst (TREE_OPERAND (index, 0), 0) - min_index)
16463                       * fieldsize;
16464               else if (index)
16465                 pos = (tree_low_cst (index, 0) - min_index) * fieldsize;
16466
16467               if (val)
16468                 {
16469                   STRIP_NOPS (val);
16470                   if (!native_encode_initializer (val, array + pos, fieldsize))
16471                     return false;
16472                 }
16473               curpos = pos + fieldsize;
16474               if (index && TREE_CODE (index) == RANGE_EXPR)
16475                 {
16476                   int count = tree_low_cst (TREE_OPERAND (index, 1), 0)
16477                               - tree_low_cst (TREE_OPERAND (index, 0), 0);
16478                   while (count > 0)
16479                     {
16480                       if (val)
16481                         memcpy (array + curpos, array + pos, fieldsize);
16482                       curpos += fieldsize;
16483                     }
16484                 }
16485               gcc_assert (curpos <= size);
16486             }
16487           return true;
16488         }
16489       else if (TREE_CODE (type) == RECORD_TYPE
16490                || TREE_CODE (type) == UNION_TYPE)
16491         {
16492           tree field = NULL_TREE;
16493           unsigned HOST_WIDE_INT cnt;
16494           constructor_elt *ce;
16495
16496           if (int_size_in_bytes (type) != size)
16497             return false;
16498
16499           if (TREE_CODE (type) == RECORD_TYPE)
16500             field = TYPE_FIELDS (type);
16501
16502           for (cnt = 0;
16503                VEC_iterate (constructor_elt, CONSTRUCTOR_ELTS (init), cnt, ce);
16504                cnt++, field = field ? TREE_CHAIN (field) : 0)
16505             {
16506               tree val = ce->value;
16507               int pos, fieldsize;
16508
16509               if (ce->index != 0)
16510                 field = ce->index;
16511
16512               if (val)
16513                 STRIP_NOPS (val);
16514
16515               if (field == NULL_TREE || DECL_BIT_FIELD (field))
16516                 return false;
16517
16518               if (TREE_CODE (TREE_TYPE (field)) == ARRAY_TYPE
16519                   && TYPE_DOMAIN (TREE_TYPE (field))
16520                   && ! TYPE_MAX_VALUE (TYPE_DOMAIN (TREE_TYPE (field))))
16521                 return false;
16522               else if (DECL_SIZE_UNIT (field) == NULL_TREE
16523                        || !host_integerp (DECL_SIZE_UNIT (field), 0))
16524                 return false;
16525               fieldsize = tree_low_cst (DECL_SIZE_UNIT (field), 0);
16526               pos = int_byte_position (field);
16527               gcc_assert (pos + fieldsize <= size);
16528               if (val
16529                   && !native_encode_initializer (val, array + pos, fieldsize))
16530                 return false;
16531             }
16532           return true;
16533         }
16534       return false;
16535     case VIEW_CONVERT_EXPR:
16536     case NON_LVALUE_EXPR:
16537       return native_encode_initializer (TREE_OPERAND (init, 0), array, size);
16538     default:
16539       return native_encode_expr (init, array, size) == size;
16540     }
16541 }
16542
16543 /* Attach a DW_AT_const_value attribute to DIE. The value of the
16544    attribute is the const value T.  */
16545
16546 static bool
16547 tree_add_const_value_attribute (dw_die_ref die, tree t)
16548 {
16549   tree init;
16550   tree type = TREE_TYPE (t);
16551   rtx rtl;
16552
16553   if (!t || !TREE_TYPE (t) || TREE_TYPE (t) == error_mark_node)
16554     return false;
16555
16556   init = t;
16557   gcc_assert (!DECL_P (init));
16558
16559   rtl = rtl_for_decl_init (init, type);
16560   if (rtl)
16561     return add_const_value_attribute (die, rtl);
16562   /* If the host and target are sane, try harder.  */
16563   else if (CHAR_BIT == 8 && BITS_PER_UNIT == 8
16564            && initializer_constant_valid_p (init, type))
16565     {
16566       HOST_WIDE_INT size = int_size_in_bytes (TREE_TYPE (init));
16567       if (size > 0 && (int) size == size)
16568         {
16569           unsigned char *array = GGC_CNEWVEC (unsigned char, size);
16570
16571           if (native_encode_initializer (init, array, size))
16572             {
16573               add_AT_vec (die, DW_AT_const_value, size, 1, array);
16574               return true;
16575             }
16576         }
16577     }
16578   return false;
16579 }
16580
16581 /* Attach a DW_AT_const_value attribute to VAR_DIE. The value of the
16582    attribute is the const value of T, where T is an integral constant
16583    variable with static storage duration
16584    (so it can't be a PARM_DECL or a RESULT_DECL).  */
16585
16586 static bool
16587 tree_add_const_value_attribute_for_decl (dw_die_ref var_die, tree decl)
16588 {
16589
16590   if (!decl
16591       || (TREE_CODE (decl) != VAR_DECL
16592           && TREE_CODE (decl) != CONST_DECL))
16593     return false;
16594
16595     if (TREE_READONLY (decl)
16596         && ! TREE_THIS_VOLATILE (decl)
16597         && DECL_INITIAL (decl))
16598       /* OK */;
16599     else
16600       return false;
16601
16602   /* Don't add DW_AT_const_value if abstract origin already has one.  */
16603   if (get_AT (var_die, DW_AT_const_value))
16604     return false;
16605
16606   return tree_add_const_value_attribute (var_die, DECL_INITIAL (decl));
16607 }
16608
16609 /* Convert the CFI instructions for the current function into a
16610    location list.  This is used for DW_AT_frame_base when we targeting
16611    a dwarf2 consumer that does not support the dwarf3
16612    DW_OP_call_frame_cfa.  OFFSET is a constant to be added to all CFA
16613    expressions.  */
16614
16615 static dw_loc_list_ref
16616 convert_cfa_to_fb_loc_list (HOST_WIDE_INT offset)
16617 {
16618   dw_fde_ref fde;
16619   dw_loc_list_ref list, *list_tail;
16620   dw_cfi_ref cfi;
16621   dw_cfa_location last_cfa, next_cfa;
16622   const char *start_label, *last_label, *section;
16623   dw_cfa_location remember;
16624
16625   fde = current_fde ();
16626   gcc_assert (fde != NULL);
16627
16628   section = secname_for_decl (current_function_decl);
16629   list_tail = &list;
16630   list = NULL;
16631
16632   memset (&next_cfa, 0, sizeof (next_cfa));
16633   next_cfa.reg = INVALID_REGNUM;
16634   remember = next_cfa;
16635
16636   start_label = fde->dw_fde_begin;
16637
16638   /* ??? Bald assumption that the CIE opcode list does not contain
16639      advance opcodes.  */
16640   for (cfi = cie_cfi_head; cfi; cfi = cfi->dw_cfi_next)
16641     lookup_cfa_1 (cfi, &next_cfa, &remember);
16642
16643   last_cfa = next_cfa;
16644   last_label = start_label;
16645
16646   for (cfi = fde->dw_fde_cfi; cfi; cfi = cfi->dw_cfi_next)
16647     switch (cfi->dw_cfi_opc)
16648       {
16649       case DW_CFA_set_loc:
16650       case DW_CFA_advance_loc1:
16651       case DW_CFA_advance_loc2:
16652       case DW_CFA_advance_loc4:
16653         if (!cfa_equal_p (&last_cfa, &next_cfa))
16654           {
16655             *list_tail = new_loc_list (build_cfa_loc (&last_cfa, offset),
16656                                        start_label, last_label, section);
16657
16658             list_tail = &(*list_tail)->dw_loc_next;
16659             last_cfa = next_cfa;
16660             start_label = last_label;
16661           }
16662         last_label = cfi->dw_cfi_oprnd1.dw_cfi_addr;
16663         break;
16664
16665       case DW_CFA_advance_loc:
16666         /* The encoding is complex enough that we should never emit this.  */
16667         gcc_unreachable ();
16668
16669       default:
16670         lookup_cfa_1 (cfi, &next_cfa, &remember);
16671         break;
16672       }
16673
16674   if (!cfa_equal_p (&last_cfa, &next_cfa))
16675     {
16676       *list_tail = new_loc_list (build_cfa_loc (&last_cfa, offset),
16677                                  start_label, last_label, section);
16678       list_tail = &(*list_tail)->dw_loc_next;
16679       start_label = last_label;
16680     }
16681
16682   *list_tail = new_loc_list (build_cfa_loc (&next_cfa, offset),
16683                              start_label, fde->dw_fde_end, section);
16684
16685   if (list && list->dw_loc_next)
16686     gen_llsym (list);
16687
16688   return list;
16689 }
16690
16691 /* Compute a displacement from the "steady-state frame pointer" to the
16692    frame base (often the same as the CFA), and store it in
16693    frame_pointer_fb_offset.  OFFSET is added to the displacement
16694    before the latter is negated.  */
16695
16696 static void
16697 compute_frame_pointer_to_fb_displacement (HOST_WIDE_INT offset)
16698 {
16699   rtx reg, elim;
16700
16701 #ifdef FRAME_POINTER_CFA_OFFSET
16702   reg = frame_pointer_rtx;
16703   offset += FRAME_POINTER_CFA_OFFSET (current_function_decl);
16704 #else
16705   reg = arg_pointer_rtx;
16706   offset += ARG_POINTER_CFA_OFFSET (current_function_decl);
16707 #endif
16708
16709   elim = eliminate_regs (reg, VOIDmode, NULL_RTX);
16710   if (GET_CODE (elim) == PLUS)
16711     {
16712       offset += INTVAL (XEXP (elim, 1));
16713       elim = XEXP (elim, 0);
16714     }
16715
16716   gcc_assert ((SUPPORTS_STACK_ALIGNMENT
16717                && (elim == hard_frame_pointer_rtx
16718                    || elim == stack_pointer_rtx))
16719               || elim == (frame_pointer_needed
16720                           ? hard_frame_pointer_rtx
16721                           : stack_pointer_rtx));
16722
16723   frame_pointer_fb_offset = -offset;
16724 }
16725
16726 /* Generate a DW_AT_name attribute given some string value to be included as
16727    the value of the attribute.  */
16728
16729 static void
16730 add_name_attribute (dw_die_ref die, const char *name_string)
16731 {
16732   if (name_string != NULL && *name_string != 0)
16733     {
16734       if (demangle_name_func)
16735         name_string = (*demangle_name_func) (name_string);
16736
16737       add_AT_string (die, DW_AT_name, name_string);
16738     }
16739 }
16740
16741 /* Generate a DW_AT_comp_dir attribute for DIE.  */
16742
16743 static void
16744 add_comp_dir_attribute (dw_die_ref die)
16745 {
16746   const char *wd = get_src_pwd ();
16747   char *wd1;
16748
16749   if (wd == NULL)
16750     return;
16751
16752   if (DWARF2_DIR_SHOULD_END_WITH_SEPARATOR)
16753     {
16754       int wdlen;
16755
16756       wdlen = strlen (wd);
16757       wd1 = GGC_NEWVEC (char, wdlen + 2);
16758       strcpy (wd1, wd);
16759       wd1 [wdlen] = DIR_SEPARATOR;
16760       wd1 [wdlen + 1] = 0;
16761       wd = wd1;
16762     }
16763
16764     add_AT_string (die, DW_AT_comp_dir, remap_debug_filename (wd));
16765 }
16766
16767 /* Return the default for DW_AT_lower_bound, or -1 if there is not any
16768    default.  */
16769
16770 static int
16771 lower_bound_default (void)
16772 {
16773   switch (get_AT_unsigned (comp_unit_die, DW_AT_language))
16774     {
16775     case DW_LANG_C:
16776     case DW_LANG_C89:
16777     case DW_LANG_C99:
16778     case DW_LANG_C_plus_plus:
16779     case DW_LANG_ObjC:
16780     case DW_LANG_ObjC_plus_plus:
16781     case DW_LANG_Java:
16782       return 0;
16783     case DW_LANG_Fortran77:
16784     case DW_LANG_Fortran90:
16785     case DW_LANG_Fortran95:
16786       return 1;
16787     case DW_LANG_UPC:
16788     case DW_LANG_D:
16789     case DW_LANG_Python:
16790       return dwarf_version >= 4 ? 0 : -1;
16791     case DW_LANG_Ada95:
16792     case DW_LANG_Ada83:
16793     case DW_LANG_Cobol74:
16794     case DW_LANG_Cobol85:
16795     case DW_LANG_Pascal83:
16796     case DW_LANG_Modula2:
16797     case DW_LANG_PLI:
16798       return dwarf_version >= 4 ? 1 : -1;
16799     default:
16800       return -1;
16801     }
16802 }
16803
16804 /* Given a tree node describing an array bound (either lower or upper) output
16805    a representation for that bound.  */
16806
16807 static void
16808 add_bound_info (dw_die_ref subrange_die, enum dwarf_attribute bound_attr, tree bound)
16809 {
16810   switch (TREE_CODE (bound))
16811     {
16812     case ERROR_MARK:
16813       return;
16814
16815     /* All fixed-bounds are represented by INTEGER_CST nodes.  */
16816     case INTEGER_CST:
16817       {
16818         unsigned int prec = simple_type_size_in_bits (TREE_TYPE (bound));
16819         int dflt;
16820
16821         /* Use the default if possible.  */
16822         if (bound_attr == DW_AT_lower_bound
16823             && host_integerp (bound, 0)
16824             && (dflt = lower_bound_default ()) != -1
16825             && tree_low_cst (bound, 0) == dflt)
16826           ;
16827
16828         /* Otherwise represent the bound as an unsigned value with the
16829            precision of its type.  The precision and signedness of the
16830            type will be necessary to re-interpret it unambiguously.  */
16831         else if (prec < HOST_BITS_PER_WIDE_INT)
16832           {
16833             unsigned HOST_WIDE_INT mask
16834               = ((unsigned HOST_WIDE_INT) 1 << prec) - 1;
16835             add_AT_unsigned (subrange_die, bound_attr,
16836                              TREE_INT_CST_LOW (bound) & mask);
16837           }
16838         else if (prec == HOST_BITS_PER_WIDE_INT
16839                  || TREE_INT_CST_HIGH (bound) == 0)
16840           add_AT_unsigned (subrange_die, bound_attr,
16841                            TREE_INT_CST_LOW (bound));
16842         else
16843           add_AT_double (subrange_die, bound_attr, TREE_INT_CST_HIGH (bound),
16844                          TREE_INT_CST_LOW (bound));
16845       }
16846       break;
16847
16848     CASE_CONVERT:
16849     case VIEW_CONVERT_EXPR:
16850       add_bound_info (subrange_die, bound_attr, TREE_OPERAND (bound, 0));
16851       break;
16852
16853     case SAVE_EXPR:
16854       break;
16855
16856     case VAR_DECL:
16857     case PARM_DECL:
16858     case RESULT_DECL:
16859       {
16860         dw_die_ref decl_die = lookup_decl_die (bound);
16861
16862         /* ??? Can this happen, or should the variable have been bound
16863            first?  Probably it can, since I imagine that we try to create
16864            the types of parameters in the order in which they exist in
16865            the list, and won't have created a forward reference to a
16866            later parameter.  */
16867         if (decl_die != NULL)
16868           {
16869             add_AT_die_ref (subrange_die, bound_attr, decl_die);
16870             break;
16871           }
16872       }
16873       /* FALLTHRU */
16874
16875     default:
16876       {
16877         /* Otherwise try to create a stack operation procedure to
16878            evaluate the value of the array bound.  */
16879
16880         dw_die_ref ctx, decl_die;
16881         dw_loc_list_ref list;
16882
16883         list = loc_list_from_tree (bound, 2);
16884         if (list == NULL || single_element_loc_list_p (list))
16885           {
16886             /* If DW_AT_*bound is not a reference nor constant, it is
16887                a DWARF expression rather than location description.
16888                For that loc_list_from_tree (bound, 0) is needed.
16889                If that fails to give a single element list,
16890                fall back to outputting this as a reference anyway.  */
16891             dw_loc_list_ref list2 = loc_list_from_tree (bound, 0);
16892             if (list2 && single_element_loc_list_p (list2))
16893               {
16894                 add_AT_loc (subrange_die, bound_attr, list2->expr);
16895                 break;
16896               }
16897           }
16898         if (list == NULL)
16899           break;
16900
16901         if (current_function_decl == 0)
16902           ctx = comp_unit_die;
16903         else
16904           ctx = lookup_decl_die (current_function_decl);
16905
16906         decl_die = new_die (DW_TAG_variable, ctx, bound);
16907         add_AT_flag (decl_die, DW_AT_artificial, 1);
16908         add_type_attribute (decl_die, TREE_TYPE (bound), 1, 0, ctx);
16909         add_AT_location_description (decl_die, DW_AT_location, list);
16910         add_AT_die_ref (subrange_die, bound_attr, decl_die);
16911         break;
16912       }
16913     }
16914 }
16915
16916 /* Add subscript info to TYPE_DIE, describing an array TYPE, collapsing
16917    possibly nested array subscripts in a flat sequence if COLLAPSE_P is true.
16918    Note that the block of subscript information for an array type also
16919    includes information about the element type of the given array type.  */
16920
16921 static void
16922 add_subscript_info (dw_die_ref type_die, tree type, bool collapse_p)
16923 {
16924   unsigned dimension_number;
16925   tree lower, upper;
16926   dw_die_ref subrange_die;
16927
16928   for (dimension_number = 0;
16929        TREE_CODE (type) == ARRAY_TYPE && (dimension_number == 0 || collapse_p);
16930        type = TREE_TYPE (type), dimension_number++)
16931     {
16932       tree domain = TYPE_DOMAIN (type);
16933
16934       if (TYPE_STRING_FLAG (type) && is_fortran () && dimension_number > 0)
16935         break;
16936
16937       /* Arrays come in three flavors: Unspecified bounds, fixed bounds,
16938          and (in GNU C only) variable bounds.  Handle all three forms
16939          here.  */
16940       subrange_die = new_die (DW_TAG_subrange_type, type_die, NULL);
16941       if (domain)
16942         {
16943           /* We have an array type with specified bounds.  */
16944           lower = TYPE_MIN_VALUE (domain);
16945           upper = TYPE_MAX_VALUE (domain);
16946
16947           /* Define the index type.  */
16948           if (TREE_TYPE (domain))
16949             {
16950               /* ??? This is probably an Ada unnamed subrange type.  Ignore the
16951                  TREE_TYPE field.  We can't emit debug info for this
16952                  because it is an unnamed integral type.  */
16953               if (TREE_CODE (domain) == INTEGER_TYPE
16954                   && TYPE_NAME (domain) == NULL_TREE
16955                   && TREE_CODE (TREE_TYPE (domain)) == INTEGER_TYPE
16956                   && TYPE_NAME (TREE_TYPE (domain)) == NULL_TREE)
16957                 ;
16958               else
16959                 add_type_attribute (subrange_die, TREE_TYPE (domain), 0, 0,
16960                                     type_die);
16961             }
16962
16963           /* ??? If upper is NULL, the array has unspecified length,
16964              but it does have a lower bound.  This happens with Fortran
16965                dimension arr(N:*)
16966              Since the debugger is definitely going to need to know N
16967              to produce useful results, go ahead and output the lower
16968              bound solo, and hope the debugger can cope.  */
16969
16970           add_bound_info (subrange_die, DW_AT_lower_bound, lower);
16971           if (upper)
16972             add_bound_info (subrange_die, DW_AT_upper_bound, upper);
16973         }
16974
16975       /* Otherwise we have an array type with an unspecified length.  The
16976          DWARF-2 spec does not say how to handle this; let's just leave out the
16977          bounds.  */
16978     }
16979 }
16980
16981 static void
16982 add_byte_size_attribute (dw_die_ref die, tree tree_node)
16983 {
16984   unsigned size;
16985
16986   switch (TREE_CODE (tree_node))
16987     {
16988     case ERROR_MARK:
16989       size = 0;
16990       break;
16991     case ENUMERAL_TYPE:
16992     case RECORD_TYPE:
16993     case UNION_TYPE:
16994     case QUAL_UNION_TYPE:
16995       size = int_size_in_bytes (tree_node);
16996       break;
16997     case FIELD_DECL:
16998       /* For a data member of a struct or union, the DW_AT_byte_size is
16999          generally given as the number of bytes normally allocated for an
17000          object of the *declared* type of the member itself.  This is true
17001          even for bit-fields.  */
17002       size = simple_type_size_in_bits (field_type (tree_node)) / BITS_PER_UNIT;
17003       break;
17004     default:
17005       gcc_unreachable ();
17006     }
17007
17008   /* Note that `size' might be -1 when we get to this point.  If it is, that
17009      indicates that the byte size of the entity in question is variable.  We
17010      have no good way of expressing this fact in Dwarf at the present time,
17011      so just let the -1 pass on through.  */
17012   add_AT_unsigned (die, DW_AT_byte_size, size);
17013 }
17014
17015 /* For a FIELD_DECL node which represents a bit-field, output an attribute
17016    which specifies the distance in bits from the highest order bit of the
17017    "containing object" for the bit-field to the highest order bit of the
17018    bit-field itself.
17019
17020    For any given bit-field, the "containing object" is a hypothetical object
17021    (of some integral or enum type) within which the given bit-field lives.  The
17022    type of this hypothetical "containing object" is always the same as the
17023    declared type of the individual bit-field itself.  The determination of the
17024    exact location of the "containing object" for a bit-field is rather
17025    complicated.  It's handled by the `field_byte_offset' function (above).
17026
17027    Note that it is the size (in bytes) of the hypothetical "containing object"
17028    which will be given in the DW_AT_byte_size attribute for this bit-field.
17029    (See `byte_size_attribute' above).  */
17030
17031 static inline void
17032 add_bit_offset_attribute (dw_die_ref die, tree decl)
17033 {
17034   HOST_WIDE_INT object_offset_in_bytes = field_byte_offset (decl);
17035   tree type = DECL_BIT_FIELD_TYPE (decl);
17036   HOST_WIDE_INT bitpos_int;
17037   HOST_WIDE_INT highest_order_object_bit_offset;
17038   HOST_WIDE_INT highest_order_field_bit_offset;
17039   HOST_WIDE_INT unsigned bit_offset;
17040
17041   /* Must be a field and a bit field.  */
17042   gcc_assert (type && TREE_CODE (decl) == FIELD_DECL);
17043
17044   /* We can't yet handle bit-fields whose offsets are variable, so if we
17045      encounter such things, just return without generating any attribute
17046      whatsoever.  Likewise for variable or too large size.  */
17047   if (! host_integerp (bit_position (decl), 0)
17048       || ! host_integerp (DECL_SIZE (decl), 1))
17049     return;
17050
17051   bitpos_int = int_bit_position (decl);
17052
17053   /* Note that the bit offset is always the distance (in bits) from the
17054      highest-order bit of the "containing object" to the highest-order bit of
17055      the bit-field itself.  Since the "high-order end" of any object or field
17056      is different on big-endian and little-endian machines, the computation
17057      below must take account of these differences.  */
17058   highest_order_object_bit_offset = object_offset_in_bytes * BITS_PER_UNIT;
17059   highest_order_field_bit_offset = bitpos_int;
17060
17061   if (! BYTES_BIG_ENDIAN)
17062     {
17063       highest_order_field_bit_offset += tree_low_cst (DECL_SIZE (decl), 0);
17064       highest_order_object_bit_offset += simple_type_size_in_bits (type);
17065     }
17066
17067   bit_offset
17068     = (! BYTES_BIG_ENDIAN
17069        ? highest_order_object_bit_offset - highest_order_field_bit_offset
17070        : highest_order_field_bit_offset - highest_order_object_bit_offset);
17071
17072   add_AT_unsigned (die, DW_AT_bit_offset, bit_offset);
17073 }
17074
17075 /* For a FIELD_DECL node which represents a bit field, output an attribute
17076    which specifies the length in bits of the given field.  */
17077
17078 static inline void
17079 add_bit_size_attribute (dw_die_ref die, tree decl)
17080 {
17081   /* Must be a field and a bit field.  */
17082   gcc_assert (TREE_CODE (decl) == FIELD_DECL
17083               && DECL_BIT_FIELD_TYPE (decl));
17084
17085   if (host_integerp (DECL_SIZE (decl), 1))
17086     add_AT_unsigned (die, DW_AT_bit_size, tree_low_cst (DECL_SIZE (decl), 1));
17087 }
17088
17089 /* If the compiled language is ANSI C, then add a 'prototyped'
17090    attribute, if arg types are given for the parameters of a function.  */
17091
17092 static inline void
17093 add_prototyped_attribute (dw_die_ref die, tree func_type)
17094 {
17095   if (get_AT_unsigned (comp_unit_die, DW_AT_language) == DW_LANG_C89
17096       && TYPE_ARG_TYPES (func_type) != NULL)
17097     add_AT_flag (die, DW_AT_prototyped, 1);
17098 }
17099
17100 /* Add an 'abstract_origin' attribute below a given DIE.  The DIE is found
17101    by looking in either the type declaration or object declaration
17102    equate table.  */
17103
17104 static inline dw_die_ref
17105 add_abstract_origin_attribute (dw_die_ref die, tree origin)
17106 {
17107   dw_die_ref origin_die = NULL;
17108
17109   if (TREE_CODE (origin) != FUNCTION_DECL)
17110     {
17111       /* We may have gotten separated from the block for the inlined
17112          function, if we're in an exception handler or some such; make
17113          sure that the abstract function has been written out.
17114
17115          Doing this for nested functions is wrong, however; functions are
17116          distinct units, and our context might not even be inline.  */
17117       tree fn = origin;
17118
17119       if (TYPE_P (fn))
17120         fn = TYPE_STUB_DECL (fn);
17121
17122       fn = decl_function_context (fn);
17123       if (fn)
17124         dwarf2out_abstract_function (fn);
17125     }
17126
17127   if (DECL_P (origin))
17128     origin_die = lookup_decl_die (origin);
17129   else if (TYPE_P (origin))
17130     origin_die = lookup_type_die (origin);
17131
17132   /* XXX: Functions that are never lowered don't always have correct block
17133      trees (in the case of java, they simply have no block tree, in some other
17134      languages).  For these functions, there is nothing we can really do to
17135      output correct debug info for inlined functions in all cases.  Rather
17136      than die, we'll just produce deficient debug info now, in that we will
17137      have variables without a proper abstract origin.  In the future, when all
17138      functions are lowered, we should re-add a gcc_assert (origin_die)
17139      here.  */
17140
17141   if (origin_die)
17142     add_AT_die_ref (die, DW_AT_abstract_origin, origin_die);
17143   return origin_die;
17144 }
17145
17146 /* We do not currently support the pure_virtual attribute.  */
17147
17148 static inline void
17149 add_pure_or_virtual_attribute (dw_die_ref die, tree func_decl)
17150 {
17151   if (DECL_VINDEX (func_decl))
17152     {
17153       add_AT_unsigned (die, DW_AT_virtuality, DW_VIRTUALITY_virtual);
17154
17155       if (host_integerp (DECL_VINDEX (func_decl), 0))
17156         add_AT_loc (die, DW_AT_vtable_elem_location,
17157                     new_loc_descr (DW_OP_constu,
17158                                    tree_low_cst (DECL_VINDEX (func_decl), 0),
17159                                    0));
17160
17161       /* GNU extension: Record what type this method came from originally.  */
17162       if (debug_info_level > DINFO_LEVEL_TERSE
17163           && DECL_CONTEXT (func_decl))
17164         add_AT_die_ref (die, DW_AT_containing_type,
17165                         lookup_type_die (DECL_CONTEXT (func_decl)));
17166     }
17167 }
17168 \f
17169 /* Add source coordinate attributes for the given decl.  */
17170
17171 static void
17172 add_src_coords_attributes (dw_die_ref die, tree decl)
17173 {
17174   expanded_location s = expand_location (DECL_SOURCE_LOCATION (decl));
17175
17176   add_AT_file (die, DW_AT_decl_file, lookup_filename (s.file));
17177   add_AT_unsigned (die, DW_AT_decl_line, s.line);
17178 }
17179
17180 /* Add a DW_AT_name attribute and source coordinate attribute for the
17181    given decl, but only if it actually has a name.  */
17182
17183 static void
17184 add_name_and_src_coords_attributes (dw_die_ref die, tree decl)
17185 {
17186   tree decl_name;
17187
17188   decl_name = DECL_NAME (decl);
17189   if (decl_name != NULL && IDENTIFIER_POINTER (decl_name) != NULL)
17190     {
17191       const char *name = dwarf2_name (decl, 0);
17192       if (name)
17193         add_name_attribute (die, name);
17194       if (! DECL_ARTIFICIAL (decl))
17195         add_src_coords_attributes (die, decl);
17196
17197       if ((TREE_CODE (decl) == FUNCTION_DECL || TREE_CODE (decl) == VAR_DECL)
17198           && TREE_PUBLIC (decl)
17199           && !DECL_ABSTRACT (decl)
17200           && !(TREE_CODE (decl) == VAR_DECL && DECL_REGISTER (decl)))
17201         {
17202           /* Defer until we have an assembler name set.  */
17203           if (!DECL_ASSEMBLER_NAME_SET_P (decl))
17204             {
17205               limbo_die_node *asm_name;
17206
17207               asm_name = GGC_CNEW (limbo_die_node);
17208               asm_name->die = die;
17209               asm_name->created_for = decl;
17210               asm_name->next = deferred_asm_name;
17211               deferred_asm_name = asm_name;
17212             }
17213           else if (DECL_ASSEMBLER_NAME (decl) != DECL_NAME (decl))
17214             add_AT_string (die, AT_linkage_name,
17215                            IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl)));
17216         }
17217     }
17218
17219 #ifdef VMS_DEBUGGING_INFO
17220   /* Get the function's name, as described by its RTL.  This may be different
17221      from the DECL_NAME name used in the source file.  */
17222   if (TREE_CODE (decl) == FUNCTION_DECL && TREE_ASM_WRITTEN (decl))
17223     {
17224       add_AT_addr (die, DW_AT_VMS_rtnbeg_pd_address,
17225                    XEXP (DECL_RTL (decl), 0));
17226       VEC_safe_push (rtx, gc, used_rtx_array, XEXP (DECL_RTL (decl), 0));
17227     }
17228 #endif
17229 }
17230
17231 /* Push a new declaration scope.  */
17232
17233 static void
17234 push_decl_scope (tree scope)
17235 {
17236   VEC_safe_push (tree, gc, decl_scope_table, scope);
17237 }
17238
17239 /* Pop a declaration scope.  */
17240
17241 static inline void
17242 pop_decl_scope (void)
17243 {
17244   VEC_pop (tree, decl_scope_table);
17245 }
17246
17247 /* Return the DIE for the scope that immediately contains this type.
17248    Non-named types get global scope.  Named types nested in other
17249    types get their containing scope if it's open, or global scope
17250    otherwise.  All other types (i.e. function-local named types) get
17251    the current active scope.  */
17252
17253 static dw_die_ref
17254 scope_die_for (tree t, dw_die_ref context_die)
17255 {
17256   dw_die_ref scope_die = NULL;
17257   tree containing_scope;
17258   int i;
17259
17260   /* Non-types always go in the current scope.  */
17261   gcc_assert (TYPE_P (t));
17262
17263   containing_scope = TYPE_CONTEXT (t);
17264
17265   /* Use the containing namespace if it was passed in (for a declaration).  */
17266   if (containing_scope && TREE_CODE (containing_scope) == NAMESPACE_DECL)
17267     {
17268       if (context_die == lookup_decl_die (containing_scope))
17269         /* OK */;
17270       else
17271         containing_scope = NULL_TREE;
17272     }
17273
17274   /* Ignore function type "scopes" from the C frontend.  They mean that
17275      a tagged type is local to a parmlist of a function declarator, but
17276      that isn't useful to DWARF.  */
17277   if (containing_scope && TREE_CODE (containing_scope) == FUNCTION_TYPE)
17278     containing_scope = NULL_TREE;
17279
17280   if (containing_scope == NULL_TREE)
17281     scope_die = comp_unit_die;
17282   else if (TYPE_P (containing_scope))
17283     {
17284       /* For types, we can just look up the appropriate DIE.  But
17285          first we check to see if we're in the middle of emitting it
17286          so we know where the new DIE should go.  */
17287       for (i = VEC_length (tree, decl_scope_table) - 1; i >= 0; --i)
17288         if (VEC_index (tree, decl_scope_table, i) == containing_scope)
17289           break;
17290
17291       if (i < 0)
17292         {
17293           gcc_assert (debug_info_level <= DINFO_LEVEL_TERSE
17294                       || TREE_ASM_WRITTEN (containing_scope));
17295
17296           /* If none of the current dies are suitable, we get file scope.  */
17297           scope_die = comp_unit_die;
17298         }
17299       else
17300         scope_die = lookup_type_die (containing_scope);
17301     }
17302   else
17303     scope_die = context_die;
17304
17305   return scope_die;
17306 }
17307
17308 /* Returns nonzero if CONTEXT_DIE is internal to a function.  */
17309
17310 static inline int
17311 local_scope_p (dw_die_ref context_die)
17312 {
17313   for (; context_die; context_die = context_die->die_parent)
17314     if (context_die->die_tag == DW_TAG_inlined_subroutine
17315         || context_die->die_tag == DW_TAG_subprogram)
17316       return 1;
17317
17318   return 0;
17319 }
17320
17321 /* Returns nonzero if CONTEXT_DIE is a class.  */
17322
17323 static inline int
17324 class_scope_p (dw_die_ref context_die)
17325 {
17326   return (context_die
17327           && (context_die->die_tag == DW_TAG_structure_type
17328               || context_die->die_tag == DW_TAG_class_type
17329               || context_die->die_tag == DW_TAG_interface_type
17330               || context_die->die_tag == DW_TAG_union_type));
17331 }
17332
17333 /* Returns nonzero if CONTEXT_DIE is a class or namespace, for deciding
17334    whether or not to treat a DIE in this context as a declaration.  */
17335
17336 static inline int
17337 class_or_namespace_scope_p (dw_die_ref context_die)
17338 {
17339   return (class_scope_p (context_die)
17340           || (context_die && context_die->die_tag == DW_TAG_namespace));
17341 }
17342
17343 /* Many forms of DIEs require a "type description" attribute.  This
17344    routine locates the proper "type descriptor" die for the type given
17345    by 'type', and adds a DW_AT_type attribute below the given die.  */
17346
17347 static void
17348 add_type_attribute (dw_die_ref object_die, tree type, int decl_const,
17349                     int decl_volatile, dw_die_ref context_die)
17350 {
17351   enum tree_code code  = TREE_CODE (type);
17352   dw_die_ref type_die  = NULL;
17353
17354   /* ??? If this type is an unnamed subrange type of an integral, floating-point
17355      or fixed-point type, use the inner type.  This is because we have no
17356      support for unnamed types in base_type_die.  This can happen if this is
17357      an Ada subrange type.  Correct solution is emit a subrange type die.  */
17358   if ((code == INTEGER_TYPE || code == REAL_TYPE || code == FIXED_POINT_TYPE)
17359       && TREE_TYPE (type) != 0 && TYPE_NAME (type) == 0)
17360     type = TREE_TYPE (type), code = TREE_CODE (type);
17361
17362   if (code == ERROR_MARK
17363       /* Handle a special case.  For functions whose return type is void, we
17364          generate *no* type attribute.  (Note that no object may have type
17365          `void', so this only applies to function return types).  */
17366       || code == VOID_TYPE)
17367     return;
17368
17369   type_die = modified_type_die (type,
17370                                 decl_const || TYPE_READONLY (type),
17371                                 decl_volatile || TYPE_VOLATILE (type),
17372                                 context_die);
17373
17374   if (type_die != NULL)
17375     add_AT_die_ref (object_die, DW_AT_type, type_die);
17376 }
17377
17378 /* Given an object die, add the calling convention attribute for the
17379    function call type.  */
17380 static void
17381 add_calling_convention_attribute (dw_die_ref subr_die, tree decl)
17382 {
17383   enum dwarf_calling_convention value = DW_CC_normal;
17384
17385   value = ((enum dwarf_calling_convention)
17386            targetm.dwarf_calling_convention (TREE_TYPE (decl)));
17387
17388   /* DWARF doesn't provide a way to identify a program's source-level
17389      entry point.  DW_AT_calling_convention attributes are only meant
17390      to describe functions' calling conventions.  However, lacking a
17391      better way to signal the Fortran main program, we use this for the
17392      time being, following existing custom.  */
17393   if (is_fortran ()
17394       && !strcmp (IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl)), "MAIN__"))
17395     value = DW_CC_program;
17396
17397   /* Only add the attribute if the backend requests it, and
17398      is not DW_CC_normal.  */
17399   if (value && (value != DW_CC_normal))
17400     add_AT_unsigned (subr_die, DW_AT_calling_convention, value);
17401 }
17402
17403 /* Given a tree pointer to a struct, class, union, or enum type node, return
17404    a pointer to the (string) tag name for the given type, or zero if the type
17405    was declared without a tag.  */
17406
17407 static const char *
17408 type_tag (const_tree type)
17409 {
17410   const char *name = 0;
17411
17412   if (TYPE_NAME (type) != 0)
17413     {
17414       tree t = 0;
17415
17416       /* Find the IDENTIFIER_NODE for the type name.  */
17417       if (TREE_CODE (TYPE_NAME (type)) == IDENTIFIER_NODE)
17418         t = TYPE_NAME (type);
17419
17420       /* The g++ front end makes the TYPE_NAME of *each* tagged type point to
17421          a TYPE_DECL node, regardless of whether or not a `typedef' was
17422          involved.  */
17423       else if (TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
17424                && ! DECL_IGNORED_P (TYPE_NAME (type)))
17425         {
17426           /* We want to be extra verbose.  Don't call dwarf_name if
17427              DECL_NAME isn't set.  The default hook for decl_printable_name
17428              doesn't like that, and in this context it's correct to return
17429              0, instead of "<anonymous>" or the like.  */
17430           if (DECL_NAME (TYPE_NAME (type)))
17431             name = lang_hooks.dwarf_name (TYPE_NAME (type), 2);
17432         }
17433
17434       /* Now get the name as a string, or invent one.  */
17435       if (!name && t != 0)
17436         name = IDENTIFIER_POINTER (t);
17437     }
17438
17439   return (name == 0 || *name == '\0') ? 0 : name;
17440 }
17441
17442 /* Return the type associated with a data member, make a special check
17443    for bit field types.  */
17444
17445 static inline tree
17446 member_declared_type (const_tree member)
17447 {
17448   return (DECL_BIT_FIELD_TYPE (member)
17449           ? DECL_BIT_FIELD_TYPE (member) : TREE_TYPE (member));
17450 }
17451
17452 /* Get the decl's label, as described by its RTL. This may be different
17453    from the DECL_NAME name used in the source file.  */
17454
17455 #if 0
17456 static const char *
17457 decl_start_label (tree decl)
17458 {
17459   rtx x;
17460   const char *fnname;
17461
17462   x = DECL_RTL (decl);
17463   gcc_assert (MEM_P (x));
17464
17465   x = XEXP (x, 0);
17466   gcc_assert (GET_CODE (x) == SYMBOL_REF);
17467
17468   fnname = XSTR (x, 0);
17469   return fnname;
17470 }
17471 #endif
17472 \f
17473 /* These routines generate the internal representation of the DIE's for
17474    the compilation unit.  Debugging information is collected by walking
17475    the declaration trees passed in from dwarf2out_decl().  */
17476
17477 static void
17478 gen_array_type_die (tree type, dw_die_ref context_die)
17479 {
17480   dw_die_ref scope_die = scope_die_for (type, context_die);
17481   dw_die_ref array_die;
17482
17483   /* GNU compilers represent multidimensional array types as sequences of one
17484      dimensional array types whose element types are themselves array types.
17485      We sometimes squish that down to a single array_type DIE with multiple
17486      subscripts in the Dwarf debugging info.  The draft Dwarf specification
17487      say that we are allowed to do this kind of compression in C, because
17488      there is no difference between an array of arrays and a multidimensional
17489      array.  We don't do this for Ada to remain as close as possible to the
17490      actual representation, which is especially important against the language
17491      flexibilty wrt arrays of variable size.  */
17492
17493   bool collapse_nested_arrays = !is_ada ();
17494   tree element_type;
17495
17496   /* Emit DW_TAG_string_type for Fortran character types (with kind 1 only, as
17497      DW_TAG_string_type doesn't have DW_AT_type attribute).  */
17498   if (TYPE_STRING_FLAG (type)
17499       && TREE_CODE (type) == ARRAY_TYPE
17500       && is_fortran ()
17501       && TYPE_MODE (TREE_TYPE (type)) == TYPE_MODE (char_type_node))
17502     {
17503       HOST_WIDE_INT size;
17504
17505       array_die = new_die (DW_TAG_string_type, scope_die, type);
17506       add_name_attribute (array_die, type_tag (type));
17507       equate_type_number_to_die (type, array_die);
17508       size = int_size_in_bytes (type);
17509       if (size >= 0)
17510         add_AT_unsigned (array_die, DW_AT_byte_size, size);
17511       else if (TYPE_DOMAIN (type) != NULL_TREE
17512                && TYPE_MAX_VALUE (TYPE_DOMAIN (type)) != NULL_TREE
17513                && DECL_P (TYPE_MAX_VALUE (TYPE_DOMAIN (type))))
17514         {
17515           tree szdecl = TYPE_MAX_VALUE (TYPE_DOMAIN (type));
17516           dw_loc_list_ref loc = loc_list_from_tree (szdecl, 2);
17517
17518           size = int_size_in_bytes (TREE_TYPE (szdecl));
17519           if (loc && size > 0)
17520             {
17521               add_AT_location_description (array_die, DW_AT_string_length, loc);
17522               if (size != DWARF2_ADDR_SIZE)
17523                 add_AT_unsigned (array_die, DW_AT_byte_size, size);
17524             }
17525         }
17526       return;
17527     }
17528
17529   /* ??? The SGI dwarf reader fails for array of array of enum types
17530      (e.g. const enum machine_mode insn_operand_mode[2][10]) unless the inner
17531      array type comes before the outer array type.  We thus call gen_type_die
17532      before we new_die and must prevent nested array types collapsing for this
17533      target.  */
17534
17535 #ifdef MIPS_DEBUGGING_INFO
17536   gen_type_die (TREE_TYPE (type), context_die);
17537   collapse_nested_arrays = false;
17538 #endif
17539
17540   array_die = new_die (DW_TAG_array_type, scope_die, type);
17541   add_name_attribute (array_die, type_tag (type));
17542   equate_type_number_to_die (type, array_die);
17543
17544   if (TREE_CODE (type) == VECTOR_TYPE)
17545     {
17546       /* The frontend feeds us a representation for the vector as a struct
17547          containing an array.  Pull out the array type.  */
17548       type = TREE_TYPE (TYPE_FIELDS (TYPE_DEBUG_REPRESENTATION_TYPE (type)));
17549       add_AT_flag (array_die, DW_AT_GNU_vector, 1);
17550     }
17551
17552   /* For Fortran multidimensional arrays use DW_ORD_col_major ordering.  */
17553   if (is_fortran ()
17554       && TREE_CODE (type) == ARRAY_TYPE
17555       && TREE_CODE (TREE_TYPE (type)) == ARRAY_TYPE
17556       && !TYPE_STRING_FLAG (TREE_TYPE (type)))
17557     add_AT_unsigned (array_die, DW_AT_ordering, DW_ORD_col_major);
17558
17559 #if 0
17560   /* We default the array ordering.  SDB will probably do
17561      the right things even if DW_AT_ordering is not present.  It's not even
17562      an issue until we start to get into multidimensional arrays anyway.  If
17563      SDB is ever caught doing the Wrong Thing for multi-dimensional arrays,
17564      then we'll have to put the DW_AT_ordering attribute back in.  (But if
17565      and when we find out that we need to put these in, we will only do so
17566      for multidimensional arrays.  */
17567   add_AT_unsigned (array_die, DW_AT_ordering, DW_ORD_row_major);
17568 #endif
17569
17570 #ifdef MIPS_DEBUGGING_INFO
17571   /* The SGI compilers handle arrays of unknown bound by setting
17572      AT_declaration and not emitting any subrange DIEs.  */
17573   if (! TYPE_DOMAIN (type))
17574     add_AT_flag (array_die, DW_AT_declaration, 1);
17575   else
17576 #endif
17577     add_subscript_info (array_die, type, collapse_nested_arrays);
17578
17579   /* Add representation of the type of the elements of this array type and
17580      emit the corresponding DIE if we haven't done it already.  */
17581   element_type = TREE_TYPE (type);
17582   if (collapse_nested_arrays)
17583     while (TREE_CODE (element_type) == ARRAY_TYPE)
17584       {
17585         if (TYPE_STRING_FLAG (element_type) && is_fortran ())
17586           break;
17587         element_type = TREE_TYPE (element_type);
17588       }
17589
17590 #ifndef MIPS_DEBUGGING_INFO
17591   gen_type_die (element_type, context_die);
17592 #endif
17593
17594   add_type_attribute (array_die, element_type, 0, 0, context_die);
17595
17596   if (get_AT (array_die, DW_AT_name))
17597     add_pubtype (type, array_die);
17598 }
17599
17600 static dw_loc_descr_ref
17601 descr_info_loc (tree val, tree base_decl)
17602 {
17603   HOST_WIDE_INT size;
17604   dw_loc_descr_ref loc, loc2;
17605   enum dwarf_location_atom op;
17606
17607   if (val == base_decl)
17608     return new_loc_descr (DW_OP_push_object_address, 0, 0);
17609
17610   switch (TREE_CODE (val))
17611     {
17612     CASE_CONVERT:
17613       return descr_info_loc (TREE_OPERAND (val, 0), base_decl);
17614     case VAR_DECL:
17615       return loc_descriptor_from_tree (val, 0);
17616     case INTEGER_CST:
17617       if (host_integerp (val, 0))
17618         return int_loc_descriptor (tree_low_cst (val, 0));
17619       break;
17620     case INDIRECT_REF:
17621       size = int_size_in_bytes (TREE_TYPE (val));
17622       if (size < 0)
17623         break;
17624       loc = descr_info_loc (TREE_OPERAND (val, 0), base_decl);
17625       if (!loc)
17626         break;
17627       if (size == DWARF2_ADDR_SIZE)
17628         add_loc_descr (&loc, new_loc_descr (DW_OP_deref, 0, 0));
17629       else
17630         add_loc_descr (&loc, new_loc_descr (DW_OP_deref_size, size, 0));
17631       return loc;
17632     case POINTER_PLUS_EXPR:
17633     case PLUS_EXPR:
17634       if (host_integerp (TREE_OPERAND (val, 1), 1)
17635           && (unsigned HOST_WIDE_INT) tree_low_cst (TREE_OPERAND (val, 1), 1)
17636              < 16384)
17637         {
17638           loc = descr_info_loc (TREE_OPERAND (val, 0), base_decl);
17639           if (!loc)
17640             break;
17641           loc_descr_plus_const (&loc, tree_low_cst (TREE_OPERAND (val, 1), 0));
17642         }
17643       else
17644         {
17645           op = DW_OP_plus;
17646         do_binop:
17647           loc = descr_info_loc (TREE_OPERAND (val, 0), base_decl);
17648           if (!loc)
17649             break;
17650           loc2 = descr_info_loc (TREE_OPERAND (val, 1), base_decl);
17651           if (!loc2)
17652             break;
17653           add_loc_descr (&loc, loc2);
17654           add_loc_descr (&loc2, new_loc_descr (op, 0, 0));
17655         }
17656       return loc;
17657     case MINUS_EXPR:
17658       op = DW_OP_minus;
17659       goto do_binop;
17660     case MULT_EXPR:
17661       op = DW_OP_mul;
17662       goto do_binop;
17663     case EQ_EXPR:
17664       op = DW_OP_eq;
17665       goto do_binop;
17666     case NE_EXPR:
17667       op = DW_OP_ne;
17668       goto do_binop;
17669     default:
17670       break;
17671     }
17672   return NULL;
17673 }
17674
17675 static void
17676 add_descr_info_field (dw_die_ref die, enum dwarf_attribute attr,
17677                       tree val, tree base_decl)
17678 {
17679   dw_loc_descr_ref loc;
17680
17681   if (host_integerp (val, 0))
17682     {
17683       add_AT_unsigned (die, attr, tree_low_cst (val, 0));
17684       return;
17685     }
17686
17687   loc = descr_info_loc (val, base_decl);
17688   if (!loc)
17689     return;
17690
17691   add_AT_loc (die, attr, loc);
17692 }
17693
17694 /* This routine generates DIE for array with hidden descriptor, details
17695    are filled into *info by a langhook.  */
17696
17697 static void
17698 gen_descr_array_type_die (tree type, struct array_descr_info *info,
17699                           dw_die_ref context_die)
17700 {
17701   dw_die_ref scope_die = scope_die_for (type, context_die);
17702   dw_die_ref array_die;
17703   int dim;
17704
17705   array_die = new_die (DW_TAG_array_type, scope_die, type);
17706   add_name_attribute (array_die, type_tag (type));
17707   equate_type_number_to_die (type, array_die);
17708
17709   /* For Fortran multidimensional arrays use DW_ORD_col_major ordering.  */
17710   if (is_fortran ()
17711       && info->ndimensions >= 2)
17712     add_AT_unsigned (array_die, DW_AT_ordering, DW_ORD_col_major);
17713
17714   if (info->data_location)
17715     add_descr_info_field (array_die, DW_AT_data_location, info->data_location,
17716                           info->base_decl);
17717   if (info->associated)
17718     add_descr_info_field (array_die, DW_AT_associated, info->associated,
17719                           info->base_decl);
17720   if (info->allocated)
17721     add_descr_info_field (array_die, DW_AT_allocated, info->allocated,
17722                           info->base_decl);
17723
17724   for (dim = 0; dim < info->ndimensions; dim++)
17725     {
17726       dw_die_ref subrange_die
17727         = new_die (DW_TAG_subrange_type, array_die, NULL);
17728
17729       if (info->dimen[dim].lower_bound)
17730         {
17731           /* If it is the default value, omit it.  */
17732           int dflt;
17733
17734           if (host_integerp (info->dimen[dim].lower_bound, 0)
17735               && (dflt = lower_bound_default ()) != -1
17736               && tree_low_cst (info->dimen[dim].lower_bound, 0) == dflt)
17737             ;
17738           else
17739             add_descr_info_field (subrange_die, DW_AT_lower_bound,
17740                                   info->dimen[dim].lower_bound,
17741                                   info->base_decl);
17742         }
17743       if (info->dimen[dim].upper_bound)
17744         add_descr_info_field (subrange_die, DW_AT_upper_bound,
17745                               info->dimen[dim].upper_bound,
17746                               info->base_decl);
17747       if (info->dimen[dim].stride)
17748         add_descr_info_field (subrange_die, DW_AT_byte_stride,
17749                               info->dimen[dim].stride,
17750                               info->base_decl);
17751     }
17752
17753   gen_type_die (info->element_type, context_die);
17754   add_type_attribute (array_die, info->element_type, 0, 0, context_die);
17755
17756   if (get_AT (array_die, DW_AT_name))
17757     add_pubtype (type, array_die);
17758 }
17759
17760 #if 0
17761 static void
17762 gen_entry_point_die (tree decl, dw_die_ref context_die)
17763 {
17764   tree origin = decl_ultimate_origin (decl);
17765   dw_die_ref decl_die = new_die (DW_TAG_entry_point, context_die, decl);
17766
17767   if (origin != NULL)
17768     add_abstract_origin_attribute (decl_die, origin);
17769   else
17770     {
17771       add_name_and_src_coords_attributes (decl_die, decl);
17772       add_type_attribute (decl_die, TREE_TYPE (TREE_TYPE (decl)),
17773                           0, 0, context_die);
17774     }
17775
17776   if (DECL_ABSTRACT (decl))
17777     equate_decl_number_to_die (decl, decl_die);
17778   else
17779     add_AT_lbl_id (decl_die, DW_AT_low_pc, decl_start_label (decl));
17780 }
17781 #endif
17782
17783 /* Walk through the list of incomplete types again, trying once more to
17784    emit full debugging info for them.  */
17785
17786 static void
17787 retry_incomplete_types (void)
17788 {
17789   int i;
17790
17791   for (i = VEC_length (tree, incomplete_types) - 1; i >= 0; i--)
17792     if (should_emit_struct_debug (VEC_index (tree, incomplete_types, i),
17793                                   DINFO_USAGE_DIR_USE))
17794       gen_type_die (VEC_index (tree, incomplete_types, i), comp_unit_die);
17795 }
17796
17797 /* Determine what tag to use for a record type.  */
17798
17799 static enum dwarf_tag
17800 record_type_tag (tree type)
17801 {
17802   if (! lang_hooks.types.classify_record)
17803     return DW_TAG_structure_type;
17804
17805   switch (lang_hooks.types.classify_record (type))
17806     {
17807     case RECORD_IS_STRUCT:
17808       return DW_TAG_structure_type;
17809
17810     case RECORD_IS_CLASS:
17811       return DW_TAG_class_type;
17812
17813     case RECORD_IS_INTERFACE:
17814       if (dwarf_version >= 3 || !dwarf_strict)
17815         return DW_TAG_interface_type;
17816       return DW_TAG_structure_type;
17817
17818     default:
17819       gcc_unreachable ();
17820     }
17821 }
17822
17823 /* Generate a DIE to represent an enumeration type.  Note that these DIEs
17824    include all of the information about the enumeration values also. Each
17825    enumerated type name/value is listed as a child of the enumerated type
17826    DIE.  */
17827
17828 static dw_die_ref
17829 gen_enumeration_type_die (tree type, dw_die_ref context_die)
17830 {
17831   dw_die_ref type_die = lookup_type_die (type);
17832
17833   if (type_die == NULL)
17834     {
17835       type_die = new_die (DW_TAG_enumeration_type,
17836                           scope_die_for (type, context_die), type);
17837       equate_type_number_to_die (type, type_die);
17838       add_name_attribute (type_die, type_tag (type));
17839       if ((dwarf_version >= 4 || !dwarf_strict)
17840           && ENUM_IS_SCOPED (type))
17841         add_AT_flag (type_die, DW_AT_enum_class, 1);
17842     }
17843   else if (! TYPE_SIZE (type))
17844     return type_die;
17845   else
17846     remove_AT (type_die, DW_AT_declaration);
17847
17848   /* Handle a GNU C/C++ extension, i.e. incomplete enum types.  If the
17849      given enum type is incomplete, do not generate the DW_AT_byte_size
17850      attribute or the DW_AT_element_list attribute.  */
17851   if (TYPE_SIZE (type))
17852     {
17853       tree link;
17854
17855       TREE_ASM_WRITTEN (type) = 1;
17856       add_byte_size_attribute (type_die, type);
17857       if (TYPE_STUB_DECL (type) != NULL_TREE)
17858         add_src_coords_attributes (type_die, TYPE_STUB_DECL (type));
17859
17860       /* If the first reference to this type was as the return type of an
17861          inline function, then it may not have a parent.  Fix this now.  */
17862       if (type_die->die_parent == NULL)
17863         add_child_die (scope_die_for (type, context_die), type_die);
17864
17865       for (link = TYPE_VALUES (type);
17866            link != NULL; link = TREE_CHAIN (link))
17867         {
17868           dw_die_ref enum_die = new_die (DW_TAG_enumerator, type_die, link);
17869           tree value = TREE_VALUE (link);
17870
17871           add_name_attribute (enum_die,
17872                               IDENTIFIER_POINTER (TREE_PURPOSE (link)));
17873
17874           if (TREE_CODE (value) == CONST_DECL)
17875             value = DECL_INITIAL (value);
17876
17877           if (host_integerp (value, TYPE_UNSIGNED (TREE_TYPE (value))))
17878             /* DWARF2 does not provide a way of indicating whether or
17879                not enumeration constants are signed or unsigned.  GDB
17880                always assumes the values are signed, so we output all
17881                values as if they were signed.  That means that
17882                enumeration constants with very large unsigned values
17883                will appear to have negative values in the debugger.  */
17884             add_AT_int (enum_die, DW_AT_const_value,
17885                         tree_low_cst (value, tree_int_cst_sgn (value) > 0));
17886         }
17887     }
17888   else
17889     add_AT_flag (type_die, DW_AT_declaration, 1);
17890
17891   if (get_AT (type_die, DW_AT_name))
17892     add_pubtype (type, type_die);
17893
17894   return type_die;
17895 }
17896
17897 /* Generate a DIE to represent either a real live formal parameter decl or to
17898    represent just the type of some formal parameter position in some function
17899    type.
17900
17901    Note that this routine is a bit unusual because its argument may be a
17902    ..._DECL node (i.e. either a PARM_DECL or perhaps a VAR_DECL which
17903    represents an inlining of some PARM_DECL) or else some sort of a ..._TYPE
17904    node.  If it's the former then this function is being called to output a
17905    DIE to represent a formal parameter object (or some inlining thereof).  If
17906    it's the latter, then this function is only being called to output a
17907    DW_TAG_formal_parameter DIE to stand as a placeholder for some formal
17908    argument type of some subprogram type.
17909    If EMIT_NAME_P is true, name and source coordinate attributes
17910    are emitted.  */
17911
17912 static dw_die_ref
17913 gen_formal_parameter_die (tree node, tree origin, bool emit_name_p,
17914                           dw_die_ref context_die)
17915 {
17916   tree node_or_origin = node ? node : origin;
17917   tree ultimate_origin;
17918   dw_die_ref parm_die
17919     = new_die (DW_TAG_formal_parameter, context_die, node);
17920
17921   switch (TREE_CODE_CLASS (TREE_CODE (node_or_origin)))
17922     {
17923     case tcc_declaration:
17924       ultimate_origin = decl_ultimate_origin (node_or_origin);
17925       if (node || ultimate_origin)
17926         origin = ultimate_origin;
17927       if (origin != NULL)
17928         add_abstract_origin_attribute (parm_die, origin);
17929       else if (emit_name_p)
17930         add_name_and_src_coords_attributes (parm_die, node);
17931       if (origin == NULL
17932           || (! DECL_ABSTRACT (node_or_origin)
17933               && variably_modified_type_p (TREE_TYPE (node_or_origin),
17934                                            decl_function_context
17935                                                             (node_or_origin))))
17936         {
17937           tree type = TREE_TYPE (node_or_origin);
17938           if (decl_by_reference_p (node_or_origin))
17939             add_type_attribute (parm_die, TREE_TYPE (type), 0, 0,
17940                                 context_die);
17941           else
17942             add_type_attribute (parm_die, type,
17943                                 TREE_READONLY (node_or_origin),
17944                                 TREE_THIS_VOLATILE (node_or_origin),
17945                                 context_die);
17946         }
17947       if (origin == NULL && DECL_ARTIFICIAL (node))
17948         add_AT_flag (parm_die, DW_AT_artificial, 1);
17949
17950       if (node && node != origin)
17951         equate_decl_number_to_die (node, parm_die);
17952       if (! DECL_ABSTRACT (node_or_origin))
17953         add_location_or_const_value_attribute (parm_die, node_or_origin,
17954                                                DW_AT_location);
17955
17956       break;
17957
17958     case tcc_type:
17959       /* We were called with some kind of a ..._TYPE node.  */
17960       add_type_attribute (parm_die, node_or_origin, 0, 0, context_die);
17961       break;
17962
17963     default:
17964       gcc_unreachable ();
17965     }
17966
17967   return parm_die;
17968 }
17969
17970 /* Generate and return a DW_TAG_GNU_formal_parameter_pack. Also generate
17971    children DW_TAG_formal_parameter DIEs representing the arguments of the
17972    parameter pack.
17973
17974    PARM_PACK must be a function parameter pack.
17975    PACK_ARG is the first argument of the parameter pack. Its TREE_CHAIN
17976    must point to the subsequent arguments of the function PACK_ARG belongs to.
17977    SUBR_DIE is the DIE of the function PACK_ARG belongs to.
17978    If NEXT_ARG is non NULL, *NEXT_ARG is set to the function argument
17979    following the last one for which a DIE was generated.  */
17980
17981 static dw_die_ref
17982 gen_formal_parameter_pack_die  (tree parm_pack,
17983                                 tree pack_arg,
17984                                 dw_die_ref subr_die,
17985                                 tree *next_arg)
17986 {
17987   tree arg;
17988   dw_die_ref parm_pack_die;
17989
17990   gcc_assert (parm_pack
17991               && lang_hooks.function_parameter_pack_p (parm_pack)
17992               && subr_die);
17993
17994   parm_pack_die = new_die (DW_TAG_GNU_formal_parameter_pack, subr_die, parm_pack);
17995   add_src_coords_attributes (parm_pack_die, parm_pack);
17996
17997   for (arg = pack_arg; arg; arg = TREE_CHAIN (arg))
17998     {
17999       if (! lang_hooks.decls.function_parm_expanded_from_pack_p (arg,
18000                                                                  parm_pack))
18001         break;
18002       gen_formal_parameter_die (arg, NULL,
18003                                 false /* Don't emit name attribute.  */,
18004                                 parm_pack_die);
18005     }
18006   if (next_arg)
18007     *next_arg = arg;
18008   return parm_pack_die;
18009 }
18010
18011 /* Generate a special type of DIE used as a stand-in for a trailing ellipsis
18012    at the end of an (ANSI prototyped) formal parameters list.  */
18013
18014 static void
18015 gen_unspecified_parameters_die (tree decl_or_type, dw_die_ref context_die)
18016 {
18017   new_die (DW_TAG_unspecified_parameters, context_die, decl_or_type);
18018 }
18019
18020 /* Generate a list of nameless DW_TAG_formal_parameter DIEs (and perhaps a
18021    DW_TAG_unspecified_parameters DIE) to represent the types of the formal
18022    parameters as specified in some function type specification (except for
18023    those which appear as part of a function *definition*).  */
18024
18025 static void
18026 gen_formal_types_die (tree function_or_method_type, dw_die_ref context_die)
18027 {
18028   tree link;
18029   tree formal_type = NULL;
18030   tree first_parm_type;
18031   tree arg;
18032
18033   if (TREE_CODE (function_or_method_type) == FUNCTION_DECL)
18034     {
18035       arg = DECL_ARGUMENTS (function_or_method_type);
18036       function_or_method_type = TREE_TYPE (function_or_method_type);
18037     }
18038   else
18039     arg = NULL_TREE;
18040
18041   first_parm_type = TYPE_ARG_TYPES (function_or_method_type);
18042
18043   /* Make our first pass over the list of formal parameter types and output a
18044      DW_TAG_formal_parameter DIE for each one.  */
18045   for (link = first_parm_type; link; )
18046     {
18047       dw_die_ref parm_die;
18048
18049       formal_type = TREE_VALUE (link);
18050       if (formal_type == void_type_node)
18051         break;
18052
18053       /* Output a (nameless) DIE to represent the formal parameter itself.  */
18054       parm_die = gen_formal_parameter_die (formal_type, NULL,
18055                                            true /* Emit name attribute.  */,
18056                                            context_die);
18057       if ((TREE_CODE (function_or_method_type) == METHOD_TYPE
18058            && link == first_parm_type)
18059           || (arg && DECL_ARTIFICIAL (arg)))
18060         add_AT_flag (parm_die, DW_AT_artificial, 1);
18061
18062       link = TREE_CHAIN (link);
18063       if (arg)
18064         arg = TREE_CHAIN (arg);
18065     }
18066
18067   /* If this function type has an ellipsis, add a
18068      DW_TAG_unspecified_parameters DIE to the end of the parameter list.  */
18069   if (formal_type != void_type_node)
18070     gen_unspecified_parameters_die (function_or_method_type, context_die);
18071
18072   /* Make our second (and final) pass over the list of formal parameter types
18073      and output DIEs to represent those types (as necessary).  */
18074   for (link = TYPE_ARG_TYPES (function_or_method_type);
18075        link && TREE_VALUE (link);
18076        link = TREE_CHAIN (link))
18077     gen_type_die (TREE_VALUE (link), context_die);
18078 }
18079
18080 /* We want to generate the DIE for TYPE so that we can generate the
18081    die for MEMBER, which has been defined; we will need to refer back
18082    to the member declaration nested within TYPE.  If we're trying to
18083    generate minimal debug info for TYPE, processing TYPE won't do the
18084    trick; we need to attach the member declaration by hand.  */
18085
18086 static void
18087 gen_type_die_for_member (tree type, tree member, dw_die_ref context_die)
18088 {
18089   gen_type_die (type, context_die);
18090
18091   /* If we're trying to avoid duplicate debug info, we may not have
18092      emitted the member decl for this function.  Emit it now.  */
18093   if (TYPE_STUB_DECL (type)
18094       && TYPE_DECL_SUPPRESS_DEBUG (TYPE_STUB_DECL (type))
18095       && ! lookup_decl_die (member))
18096     {
18097       dw_die_ref type_die;
18098       gcc_assert (!decl_ultimate_origin (member));
18099
18100       push_decl_scope (type);
18101       type_die = lookup_type_die (type);
18102       if (TREE_CODE (member) == FUNCTION_DECL)
18103         gen_subprogram_die (member, type_die);
18104       else if (TREE_CODE (member) == FIELD_DECL)
18105         {
18106           /* Ignore the nameless fields that are used to skip bits but handle
18107              C++ anonymous unions and structs.  */
18108           if (DECL_NAME (member) != NULL_TREE
18109               || TREE_CODE (TREE_TYPE (member)) == UNION_TYPE
18110               || TREE_CODE (TREE_TYPE (member)) == RECORD_TYPE)
18111             {
18112               gen_type_die (member_declared_type (member), type_die);
18113               gen_field_die (member, type_die);
18114             }
18115         }
18116       else
18117         gen_variable_die (member, NULL_TREE, type_die);
18118
18119       pop_decl_scope ();
18120     }
18121 }
18122
18123 /* Generate the DWARF2 info for the "abstract" instance of a function which we
18124    may later generate inlined and/or out-of-line instances of.  */
18125
18126 static void
18127 dwarf2out_abstract_function (tree decl)
18128 {
18129   dw_die_ref old_die;
18130   tree save_fn;
18131   tree context;
18132   int was_abstract;
18133   htab_t old_decl_loc_table;
18134
18135   /* Make sure we have the actual abstract inline, not a clone.  */
18136   decl = DECL_ORIGIN (decl);
18137
18138   old_die = lookup_decl_die (decl);
18139   if (old_die && get_AT (old_die, DW_AT_inline))
18140     /* We've already generated the abstract instance.  */
18141     return;
18142
18143   /* We can be called while recursively when seeing block defining inlined subroutine
18144      DIE.  Be sure to not clobber the outer location table nor use it or we would
18145      get locations in abstract instantces.  */
18146   old_decl_loc_table = decl_loc_table;
18147   decl_loc_table = NULL;
18148
18149   /* Be sure we've emitted the in-class declaration DIE (if any) first, so
18150      we don't get confused by DECL_ABSTRACT.  */
18151   if (debug_info_level > DINFO_LEVEL_TERSE)
18152     {
18153       context = decl_class_context (decl);
18154       if (context)
18155         gen_type_die_for_member
18156           (context, decl, decl_function_context (decl) ? NULL : comp_unit_die);
18157     }
18158
18159   /* Pretend we've just finished compiling this function.  */
18160   save_fn = current_function_decl;
18161   current_function_decl = decl;
18162   push_cfun (DECL_STRUCT_FUNCTION (decl));
18163
18164   was_abstract = DECL_ABSTRACT (decl);
18165   set_decl_abstract_flags (decl, 1);
18166   dwarf2out_decl (decl);
18167   if (! was_abstract)
18168     set_decl_abstract_flags (decl, 0);
18169
18170   current_function_decl = save_fn;
18171   decl_loc_table = old_decl_loc_table;
18172   pop_cfun ();
18173 }
18174
18175 /* Helper function of premark_used_types() which gets called through
18176    htab_traverse.
18177
18178    Marks the DIE of a given type in *SLOT as perennial, so it never gets
18179    marked as unused by prune_unused_types.  */
18180
18181 static int
18182 premark_used_types_helper (void **slot, void *data ATTRIBUTE_UNUSED)
18183 {
18184   tree type;
18185   dw_die_ref die;
18186
18187   type = (tree) *slot;
18188   die = lookup_type_die (type);
18189   if (die != NULL)
18190     die->die_perennial_p = 1;
18191   return 1;
18192 }
18193
18194 /* Helper function of premark_types_used_by_global_vars which gets called
18195    through htab_traverse.
18196
18197    Marks the DIE of a given type in *SLOT as perennial, so it never gets
18198    marked as unused by prune_unused_types. The DIE of the type is marked
18199    only if the global variable using the type will actually be emitted.  */
18200
18201 static int
18202 premark_types_used_by_global_vars_helper (void **slot,
18203                                           void *data ATTRIBUTE_UNUSED)
18204 {
18205   struct types_used_by_vars_entry *entry;
18206   dw_die_ref die;
18207
18208   entry = (struct types_used_by_vars_entry *) *slot;
18209   gcc_assert (entry->type != NULL
18210               && entry->var_decl != NULL);
18211   die = lookup_type_die (entry->type);
18212   if (die)
18213     {
18214       /* Ask cgraph if the global variable really is to be emitted.
18215          If yes, then we'll keep the DIE of ENTRY->TYPE.  */
18216       struct varpool_node *node = varpool_node (entry->var_decl);
18217       if (node->needed)
18218         {
18219           die->die_perennial_p = 1;
18220           /* Keep the parent DIEs as well.  */
18221           while ((die = die->die_parent) && die->die_perennial_p == 0)
18222             die->die_perennial_p = 1;
18223         }
18224     }
18225   return 1;
18226 }
18227
18228 /* Mark all members of used_types_hash as perennial.  */
18229
18230 static void
18231 premark_used_types (void)
18232 {
18233   if (cfun && cfun->used_types_hash)
18234     htab_traverse (cfun->used_types_hash, premark_used_types_helper, NULL);
18235 }
18236
18237 /* Mark all members of types_used_by_vars_entry as perennial.  */
18238
18239 static void
18240 premark_types_used_by_global_vars (void)
18241 {
18242   if (types_used_by_vars_hash)
18243     htab_traverse (types_used_by_vars_hash,
18244                    premark_types_used_by_global_vars_helper, NULL);
18245 }
18246
18247 /* Generate a DIE to represent a declared function (either file-scope or
18248    block-local).  */
18249
18250 static void
18251 gen_subprogram_die (tree decl, dw_die_ref context_die)
18252 {
18253   char label_id[MAX_ARTIFICIAL_LABEL_BYTES];
18254   tree origin = decl_ultimate_origin (decl);
18255   dw_die_ref subr_die;
18256   tree fn_arg_types;
18257   tree outer_scope;
18258   dw_die_ref old_die = lookup_decl_die (decl);
18259   int declaration = (current_function_decl != decl
18260                      || class_or_namespace_scope_p (context_die));
18261
18262   premark_used_types ();
18263
18264   /* It is possible to have both DECL_ABSTRACT and DECLARATION be true if we
18265      started to generate the abstract instance of an inline, decided to output
18266      its containing class, and proceeded to emit the declaration of the inline
18267      from the member list for the class.  If so, DECLARATION takes priority;
18268      we'll get back to the abstract instance when done with the class.  */
18269
18270   /* The class-scope declaration DIE must be the primary DIE.  */
18271   if (origin && declaration && class_or_namespace_scope_p (context_die))
18272     {
18273       origin = NULL;
18274       gcc_assert (!old_die);
18275     }
18276
18277   /* Now that the C++ front end lazily declares artificial member fns, we
18278      might need to retrofit the declaration into its class.  */
18279   if (!declaration && !origin && !old_die
18280       && DECL_CONTEXT (decl) && TYPE_P (DECL_CONTEXT (decl))
18281       && !class_or_namespace_scope_p (context_die)
18282       && debug_info_level > DINFO_LEVEL_TERSE)
18283     old_die = force_decl_die (decl);
18284
18285   if (origin != NULL)
18286     {
18287       gcc_assert (!declaration || local_scope_p (context_die));
18288
18289       /* Fixup die_parent for the abstract instance of a nested
18290          inline function.  */
18291       if (old_die && old_die->die_parent == NULL)
18292         add_child_die (context_die, old_die);
18293
18294       subr_die = new_die (DW_TAG_subprogram, context_die, decl);
18295       add_abstract_origin_attribute (subr_die, origin);
18296     }
18297   else if (old_die)
18298     {
18299       expanded_location s = expand_location (DECL_SOURCE_LOCATION (decl));
18300       struct dwarf_file_data * file_index = lookup_filename (s.file);
18301
18302       if (!get_AT_flag (old_die, DW_AT_declaration)
18303           /* We can have a normal definition following an inline one in the
18304              case of redefinition of GNU C extern inlines.
18305              It seems reasonable to use AT_specification in this case.  */
18306           && !get_AT (old_die, DW_AT_inline))
18307         {
18308           /* Detect and ignore this case, where we are trying to output
18309              something we have already output.  */
18310           return;
18311         }
18312
18313       /* If the definition comes from the same place as the declaration,
18314          maybe use the old DIE.  We always want the DIE for this function
18315          that has the *_pc attributes to be under comp_unit_die so the
18316          debugger can find it.  We also need to do this for abstract
18317          instances of inlines, since the spec requires the out-of-line copy
18318          to have the same parent.  For local class methods, this doesn't
18319          apply; we just use the old DIE.  */
18320       if ((old_die->die_parent == comp_unit_die || context_die == NULL)
18321           && (DECL_ARTIFICIAL (decl)
18322               || (get_AT_file (old_die, DW_AT_decl_file) == file_index
18323                   && (get_AT_unsigned (old_die, DW_AT_decl_line)
18324                       == (unsigned) s.line))))
18325         {
18326           subr_die = old_die;
18327
18328           /* Clear out the declaration attribute and the formal parameters.
18329              Do not remove all children, because it is possible that this
18330              declaration die was forced using force_decl_die(). In such
18331              cases die that forced declaration die (e.g. TAG_imported_module)
18332              is one of the children that we do not want to remove.  */
18333           remove_AT (subr_die, DW_AT_declaration);
18334           remove_child_TAG (subr_die, DW_TAG_formal_parameter);
18335         }
18336       else
18337         {
18338           subr_die = new_die (DW_TAG_subprogram, context_die, decl);
18339           add_AT_specification (subr_die, old_die);
18340           if (get_AT_file (old_die, DW_AT_decl_file) != file_index)
18341             add_AT_file (subr_die, DW_AT_decl_file, file_index);
18342           if (get_AT_unsigned (old_die, DW_AT_decl_line) != (unsigned) s.line)
18343             add_AT_unsigned (subr_die, DW_AT_decl_line, s.line);
18344         }
18345     }
18346   else
18347     {
18348       subr_die = new_die (DW_TAG_subprogram, context_die, decl);
18349
18350       if (TREE_PUBLIC (decl))
18351         add_AT_flag (subr_die, DW_AT_external, 1);
18352
18353       add_name_and_src_coords_attributes (subr_die, decl);
18354       if (debug_info_level > DINFO_LEVEL_TERSE)
18355         {
18356           add_prototyped_attribute (subr_die, TREE_TYPE (decl));
18357           add_type_attribute (subr_die, TREE_TYPE (TREE_TYPE (decl)),
18358                               0, 0, context_die);
18359         }
18360
18361       add_pure_or_virtual_attribute (subr_die, decl);
18362       if (DECL_ARTIFICIAL (decl))
18363         add_AT_flag (subr_die, DW_AT_artificial, 1);
18364
18365       if (TREE_PROTECTED (decl))
18366         add_AT_unsigned (subr_die, DW_AT_accessibility, DW_ACCESS_protected);
18367       else if (TREE_PRIVATE (decl))
18368         add_AT_unsigned (subr_die, DW_AT_accessibility, DW_ACCESS_private);
18369     }
18370
18371   if (declaration)
18372     {
18373       if (!old_die || !get_AT (old_die, DW_AT_inline))
18374         {
18375           add_AT_flag (subr_die, DW_AT_declaration, 1);
18376
18377           /* If this is an explicit function declaration then generate
18378              a DW_AT_explicit attribute.  */
18379           if (lang_hooks.decls.function_decl_explicit_p (decl)
18380               && (dwarf_version >= 3 || !dwarf_strict))
18381             add_AT_flag (subr_die, DW_AT_explicit, 1);
18382
18383           /* The first time we see a member function, it is in the context of
18384              the class to which it belongs.  We make sure of this by emitting
18385              the class first.  The next time is the definition, which is
18386              handled above.  The two may come from the same source text.
18387
18388              Note that force_decl_die() forces function declaration die. It is
18389              later reused to represent definition.  */
18390           equate_decl_number_to_die (decl, subr_die);
18391         }
18392     }
18393   else if (DECL_ABSTRACT (decl))
18394     {
18395       if (DECL_DECLARED_INLINE_P (decl))
18396         {
18397           if (cgraph_function_possibly_inlined_p (decl))
18398             add_AT_unsigned (subr_die, DW_AT_inline, DW_INL_declared_inlined);
18399           else
18400             add_AT_unsigned (subr_die, DW_AT_inline, DW_INL_declared_not_inlined);
18401         }
18402       else
18403         {
18404           if (cgraph_function_possibly_inlined_p (decl))
18405             add_AT_unsigned (subr_die, DW_AT_inline, DW_INL_inlined);
18406           else
18407             add_AT_unsigned (subr_die, DW_AT_inline, DW_INL_not_inlined);
18408         }
18409
18410       if (DECL_DECLARED_INLINE_P (decl)
18411           && lookup_attribute ("artificial", DECL_ATTRIBUTES (decl)))
18412         add_AT_flag (subr_die, DW_AT_artificial, 1);
18413
18414       equate_decl_number_to_die (decl, subr_die);
18415     }
18416   else if (!DECL_EXTERNAL (decl))
18417     {
18418       HOST_WIDE_INT cfa_fb_offset;
18419
18420       if (!old_die || !get_AT (old_die, DW_AT_inline))
18421         equate_decl_number_to_die (decl, subr_die);
18422
18423       if (!flag_reorder_blocks_and_partition)
18424         {
18425           ASM_GENERATE_INTERNAL_LABEL (label_id, FUNC_BEGIN_LABEL,
18426                                        current_function_funcdef_no);
18427           add_AT_lbl_id (subr_die, DW_AT_low_pc, label_id);
18428           ASM_GENERATE_INTERNAL_LABEL (label_id, FUNC_END_LABEL,
18429                                        current_function_funcdef_no);
18430           add_AT_lbl_id (subr_die, DW_AT_high_pc, label_id);
18431
18432           add_pubname (decl, subr_die);
18433           add_arange (decl, subr_die);
18434         }
18435       else
18436         {  /* Do nothing for now; maybe need to duplicate die, one for
18437               hot section and one for cold section, then use the hot/cold
18438               section begin/end labels to generate the aranges...  */
18439           /*
18440             add_AT_lbl_id (subr_die, DW_AT_low_pc, hot_section_label);
18441             add_AT_lbl_id (subr_die, DW_AT_high_pc, hot_section_end_label);
18442             add_AT_lbl_id (subr_die, DW_AT_lo_user, unlikely_section_label);
18443             add_AT_lbl_id (subr_die, DW_AT_hi_user, cold_section_end_label);
18444
18445             add_pubname (decl, subr_die);
18446             add_arange (decl, subr_die);
18447             add_arange (decl, subr_die);
18448            */
18449         }
18450
18451 #ifdef MIPS_DEBUGGING_INFO
18452       /* Add a reference to the FDE for this routine.  */
18453       add_AT_fde_ref (subr_die, DW_AT_MIPS_fde, current_funcdef_fde);
18454 #endif
18455
18456       cfa_fb_offset = CFA_FRAME_BASE_OFFSET (decl);
18457
18458       /* We define the "frame base" as the function's CFA.  This is more
18459          convenient for several reasons: (1) It's stable across the prologue
18460          and epilogue, which makes it better than just a frame pointer,
18461          (2) With dwarf3, there exists a one-byte encoding that allows us
18462          to reference the .debug_frame data by proxy, but failing that,
18463          (3) We can at least reuse the code inspection and interpretation
18464          code that determines the CFA position at various points in the
18465          function.  */
18466       if (dwarf_version >= 3)
18467         {
18468           dw_loc_descr_ref op = new_loc_descr (DW_OP_call_frame_cfa, 0, 0);
18469           add_AT_loc (subr_die, DW_AT_frame_base, op);
18470         }
18471       else
18472         {
18473           dw_loc_list_ref list = convert_cfa_to_fb_loc_list (cfa_fb_offset);
18474           if (list->dw_loc_next)
18475             add_AT_loc_list (subr_die, DW_AT_frame_base, list);
18476           else
18477             add_AT_loc (subr_die, DW_AT_frame_base, list->expr);
18478         }
18479
18480       /* Compute a displacement from the "steady-state frame pointer" to
18481          the CFA.  The former is what all stack slots and argument slots
18482          will reference in the rtl; the later is what we've told the
18483          debugger about.  We'll need to adjust all frame_base references
18484          by this displacement.  */
18485       compute_frame_pointer_to_fb_displacement (cfa_fb_offset);
18486
18487       if (cfun->static_chain_decl)
18488         add_AT_location_description (subr_die, DW_AT_static_link,
18489                  loc_list_from_tree (cfun->static_chain_decl, 2));
18490     }
18491
18492   /* Generate child dies for template paramaters.  */
18493   if (debug_info_level > DINFO_LEVEL_TERSE)
18494     gen_generic_params_dies (decl);
18495
18496   /* Now output descriptions of the arguments for this function. This gets
18497      (unnecessarily?) complex because of the fact that the DECL_ARGUMENT list
18498      for a FUNCTION_DECL doesn't indicate cases where there was a trailing
18499      `...' at the end of the formal parameter list.  In order to find out if
18500      there was a trailing ellipsis or not, we must instead look at the type
18501      associated with the FUNCTION_DECL.  This will be a node of type
18502      FUNCTION_TYPE. If the chain of type nodes hanging off of this
18503      FUNCTION_TYPE node ends with a void_type_node then there should *not* be
18504      an ellipsis at the end.  */
18505
18506   /* In the case where we are describing a mere function declaration, all we
18507      need to do here (and all we *can* do here) is to describe the *types* of
18508      its formal parameters.  */
18509   if (debug_info_level <= DINFO_LEVEL_TERSE)
18510     ;
18511   else if (declaration)
18512     gen_formal_types_die (decl, subr_die);
18513   else
18514     {
18515       /* Generate DIEs to represent all known formal parameters.  */
18516       tree parm = DECL_ARGUMENTS (decl);
18517       tree generic_decl = lang_hooks.decls.get_generic_function_decl (decl);
18518       tree generic_decl_parm = generic_decl
18519                                 ? DECL_ARGUMENTS (generic_decl)
18520                                 : NULL;
18521
18522       /* Now we want to walk the list of parameters of the function and
18523          emit their relevant DIEs.
18524
18525          We consider the case of DECL being an instance of a generic function
18526          as well as it being a normal function.
18527
18528          If DECL is an instance of a generic function we walk the
18529          parameters of the generic function declaration _and_ the parameters of
18530          DECL itself. This is useful because we want to emit specific DIEs for
18531          function parameter packs and those are declared as part of the
18532          generic function declaration. In that particular case,
18533          the parameter pack yields a DW_TAG_GNU_formal_parameter_pack DIE.
18534          That DIE has children DIEs representing the set of arguments
18535          of the pack. Note that the set of pack arguments can be empty.
18536          In that case, the DW_TAG_GNU_formal_parameter_pack DIE will not have any
18537          children DIE.
18538
18539          Otherwise, we just consider the parameters of DECL.  */
18540       while (generic_decl_parm || parm)
18541         {
18542           if (generic_decl_parm
18543               && lang_hooks.function_parameter_pack_p (generic_decl_parm))
18544             gen_formal_parameter_pack_die (generic_decl_parm,
18545                                            parm, subr_die,
18546                                            &parm);
18547           else if (parm)
18548             {
18549               gen_decl_die (parm, NULL, subr_die);
18550               parm = TREE_CHAIN (parm);
18551             }
18552
18553           if (generic_decl_parm)
18554             generic_decl_parm = TREE_CHAIN (generic_decl_parm);
18555         }
18556
18557       /* Decide whether we need an unspecified_parameters DIE at the end.
18558          There are 2 more cases to do this for: 1) the ansi ... declaration -
18559          this is detectable when the end of the arg list is not a
18560          void_type_node 2) an unprototyped function declaration (not a
18561          definition).  This just means that we have no info about the
18562          parameters at all.  */
18563       fn_arg_types = TYPE_ARG_TYPES (TREE_TYPE (decl));
18564       if (fn_arg_types != NULL)
18565         {
18566           /* This is the prototyped case, check for....  */
18567           if (TREE_VALUE (tree_last (fn_arg_types)) != void_type_node)
18568             gen_unspecified_parameters_die (decl, subr_die);
18569         }
18570       else if (DECL_INITIAL (decl) == NULL_TREE)
18571         gen_unspecified_parameters_die (decl, subr_die);
18572     }
18573
18574   /* Output Dwarf info for all of the stuff within the body of the function
18575      (if it has one - it may be just a declaration).  */
18576   outer_scope = DECL_INITIAL (decl);
18577
18578   /* OUTER_SCOPE is a pointer to the outermost BLOCK node created to represent
18579      a function.  This BLOCK actually represents the outermost binding contour
18580      for the function, i.e. the contour in which the function's formal
18581      parameters and labels get declared. Curiously, it appears that the front
18582      end doesn't actually put the PARM_DECL nodes for the current function onto
18583      the BLOCK_VARS list for this outer scope, but are strung off of the
18584      DECL_ARGUMENTS list for the function instead.
18585
18586      The BLOCK_VARS list for the `outer_scope' does provide us with a list of
18587      the LABEL_DECL nodes for the function however, and we output DWARF info
18588      for those in decls_for_scope.  Just within the `outer_scope' there will be
18589      a BLOCK node representing the function's outermost pair of curly braces,
18590      and any blocks used for the base and member initializers of a C++
18591      constructor function.  */
18592   if (! declaration && TREE_CODE (outer_scope) != ERROR_MARK)
18593     {
18594       /* Emit a DW_TAG_variable DIE for a named return value.  */
18595       if (DECL_NAME (DECL_RESULT (decl)))
18596         gen_decl_die (DECL_RESULT (decl), NULL, subr_die);
18597
18598       current_function_has_inlines = 0;
18599       decls_for_scope (outer_scope, subr_die, 0);
18600
18601 #if 0 && defined (MIPS_DEBUGGING_INFO)
18602       if (current_function_has_inlines)
18603         {
18604           add_AT_flag (subr_die, DW_AT_MIPS_has_inlines, 1);
18605           if (! comp_unit_has_inlines)
18606             {
18607               add_AT_flag (comp_unit_die, DW_AT_MIPS_has_inlines, 1);
18608               comp_unit_has_inlines = 1;
18609             }
18610         }
18611 #endif
18612     }
18613   /* Add the calling convention attribute if requested.  */
18614   add_calling_convention_attribute (subr_die, decl);
18615
18616 }
18617
18618 /* Returns a hash value for X (which really is a die_struct).  */
18619
18620 static hashval_t
18621 common_block_die_table_hash (const void *x)
18622 {
18623   const_dw_die_ref d = (const_dw_die_ref) x;
18624   return (hashval_t) d->decl_id ^ htab_hash_pointer (d->die_parent);
18625 }
18626
18627 /* Return nonzero if decl_id and die_parent of die_struct X is the same
18628    as decl_id and die_parent of die_struct Y.  */
18629
18630 static int
18631 common_block_die_table_eq (const void *x, const void *y)
18632 {
18633   const_dw_die_ref d = (const_dw_die_ref) x;
18634   const_dw_die_ref e = (const_dw_die_ref) y;
18635   return d->decl_id == e->decl_id && d->die_parent == e->die_parent;
18636 }
18637
18638 /* Generate a DIE to represent a declared data object.
18639    Either DECL or ORIGIN must be non-null.  */
18640
18641 static void
18642 gen_variable_die (tree decl, tree origin, dw_die_ref context_die)
18643 {
18644   HOST_WIDE_INT off;
18645   tree com_decl;
18646   tree decl_or_origin = decl ? decl : origin;
18647   tree ultimate_origin;
18648   dw_die_ref var_die;
18649   dw_die_ref old_die = decl ? lookup_decl_die (decl) : NULL;
18650   dw_die_ref origin_die;
18651   bool declaration = (DECL_EXTERNAL (decl_or_origin)
18652                       || class_or_namespace_scope_p (context_die));
18653   bool specialization_p = false;
18654
18655   ultimate_origin = decl_ultimate_origin (decl_or_origin);
18656   if (decl || ultimate_origin)
18657     origin = ultimate_origin;
18658   com_decl = fortran_common (decl_or_origin, &off);
18659
18660   /* Symbol in common gets emitted as a child of the common block, in the form
18661      of a data member.  */
18662   if (com_decl)
18663     {
18664       dw_die_ref com_die;
18665       dw_loc_list_ref loc;
18666       die_node com_die_arg;
18667
18668       var_die = lookup_decl_die (decl_or_origin);
18669       if (var_die)
18670         {
18671           if (get_AT (var_die, DW_AT_location) == NULL)
18672             {
18673               loc = loc_list_from_tree (com_decl, off ? 1 : 2);
18674               if (loc)
18675                 {
18676                   if (off)
18677                     {
18678                       /* Optimize the common case.  */
18679                       if (single_element_loc_list_p (loc)
18680                           && loc->expr->dw_loc_opc == DW_OP_addr
18681                           && loc->expr->dw_loc_next == NULL
18682                           && GET_CODE (loc->expr->dw_loc_oprnd1.v.val_addr)
18683                              == SYMBOL_REF)
18684                         loc->expr->dw_loc_oprnd1.v.val_addr
18685                           = plus_constant (loc->expr->dw_loc_oprnd1.v.val_addr, off);
18686                         else
18687                           loc_list_plus_const (loc, off);
18688                     }
18689                   add_AT_location_description (var_die, DW_AT_location, loc);
18690                   remove_AT (var_die, DW_AT_declaration);
18691                 }
18692             }
18693           return;
18694         }
18695
18696       if (common_block_die_table == NULL)
18697         common_block_die_table
18698           = htab_create_ggc (10, common_block_die_table_hash,
18699                              common_block_die_table_eq, NULL);
18700
18701       com_die_arg.decl_id = DECL_UID (com_decl);
18702       com_die_arg.die_parent = context_die;
18703       com_die = (dw_die_ref) htab_find (common_block_die_table, &com_die_arg);
18704       loc = loc_list_from_tree (com_decl, 2);
18705       if (com_die == NULL)
18706         {
18707           const char *cnam
18708             = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (com_decl));
18709           void **slot;
18710
18711           com_die = new_die (DW_TAG_common_block, context_die, decl);
18712           add_name_and_src_coords_attributes (com_die, com_decl);
18713           if (loc)
18714             {
18715               add_AT_location_description (com_die, DW_AT_location, loc);
18716               /* Avoid sharing the same loc descriptor between
18717                  DW_TAG_common_block and DW_TAG_variable.  */
18718               loc = loc_list_from_tree (com_decl, 2);
18719             }
18720           else if (DECL_EXTERNAL (decl))
18721             add_AT_flag (com_die, DW_AT_declaration, 1);
18722           add_pubname_string (cnam, com_die); /* ??? needed? */
18723           com_die->decl_id = DECL_UID (com_decl);
18724           slot = htab_find_slot (common_block_die_table, com_die, INSERT);
18725           *slot = (void *) com_die;
18726         }
18727       else if (get_AT (com_die, DW_AT_location) == NULL && loc)
18728         {
18729           add_AT_location_description (com_die, DW_AT_location, loc);
18730           loc = loc_list_from_tree (com_decl, 2);
18731           remove_AT (com_die, DW_AT_declaration);
18732         }
18733       var_die = new_die (DW_TAG_variable, com_die, decl);
18734       add_name_and_src_coords_attributes (var_die, decl);
18735       add_type_attribute (var_die, TREE_TYPE (decl), TREE_READONLY (decl),
18736                           TREE_THIS_VOLATILE (decl), context_die);
18737       add_AT_flag (var_die, DW_AT_external, 1);
18738       if (loc)
18739         {
18740           if (off)
18741             {
18742               /* Optimize the common case.  */
18743               if (single_element_loc_list_p (loc)
18744                   && loc->expr->dw_loc_opc == DW_OP_addr
18745                   && loc->expr->dw_loc_next == NULL
18746                   && GET_CODE (loc->expr->dw_loc_oprnd1.v.val_addr) == SYMBOL_REF)
18747                 loc->expr->dw_loc_oprnd1.v.val_addr
18748                   = plus_constant (loc->expr->dw_loc_oprnd1.v.val_addr, off);
18749               else
18750                 loc_list_plus_const (loc, off);
18751             }
18752           add_AT_location_description (var_die, DW_AT_location, loc);
18753         }
18754       else if (DECL_EXTERNAL (decl))
18755         add_AT_flag (var_die, DW_AT_declaration, 1);
18756       equate_decl_number_to_die (decl, var_die);
18757       return;
18758     }
18759
18760   /* If the compiler emitted a definition for the DECL declaration
18761      and if we already emitted a DIE for it, don't emit a second
18762      DIE for it again. Allow re-declarations of DECLs that are
18763      inside functions, though.  */
18764   if (old_die && declaration && !local_scope_p (context_die))
18765     return;
18766
18767   /* For static data members, the declaration in the class is supposed
18768      to have DW_TAG_member tag; the specification should still be
18769      DW_TAG_variable referencing the DW_TAG_member DIE.  */
18770   if (declaration && class_scope_p (context_die))
18771     var_die = new_die (DW_TAG_member, context_die, decl);
18772   else
18773     var_die = new_die (DW_TAG_variable, context_die, decl);
18774
18775   origin_die = NULL;
18776   if (origin != NULL)
18777     origin_die = add_abstract_origin_attribute (var_die, origin);
18778
18779   /* Loop unrolling can create multiple blocks that refer to the same
18780      static variable, so we must test for the DW_AT_declaration flag.
18781
18782      ??? Loop unrolling/reorder_blocks should perhaps be rewritten to
18783      copy decls and set the DECL_ABSTRACT flag on them instead of
18784      sharing them.
18785
18786      ??? Duplicated blocks have been rewritten to use .debug_ranges.
18787
18788      ??? The declare_in_namespace support causes us to get two DIEs for one
18789      variable, both of which are declarations.  We want to avoid considering
18790      one to be a specification, so we must test that this DIE is not a
18791      declaration.  */
18792   else if (old_die && TREE_STATIC (decl) && ! declaration
18793            && get_AT_flag (old_die, DW_AT_declaration) == 1)
18794     {
18795       /* This is a definition of a C++ class level static.  */
18796       add_AT_specification (var_die, old_die);
18797       specialization_p = true;
18798       if (DECL_NAME (decl))
18799         {
18800           expanded_location s = expand_location (DECL_SOURCE_LOCATION (decl));
18801           struct dwarf_file_data * file_index = lookup_filename (s.file);
18802
18803           if (get_AT_file (old_die, DW_AT_decl_file) != file_index)
18804             add_AT_file (var_die, DW_AT_decl_file, file_index);
18805
18806           if (get_AT_unsigned (old_die, DW_AT_decl_line) != (unsigned) s.line)
18807             add_AT_unsigned (var_die, DW_AT_decl_line, s.line);
18808         }
18809     }
18810   else
18811     add_name_and_src_coords_attributes (var_die, decl);
18812
18813   if ((origin == NULL && !specialization_p)
18814       || (origin != NULL
18815           && !DECL_ABSTRACT (decl_or_origin)
18816           && variably_modified_type_p (TREE_TYPE (decl_or_origin),
18817                                        decl_function_context
18818                                                         (decl_or_origin))))
18819     {
18820       tree type = TREE_TYPE (decl_or_origin);
18821
18822       if (decl_by_reference_p (decl_or_origin))
18823         add_type_attribute (var_die, TREE_TYPE (type), 0, 0, context_die);
18824       else
18825         add_type_attribute (var_die, type, TREE_READONLY (decl_or_origin),
18826                             TREE_THIS_VOLATILE (decl_or_origin), context_die);
18827     }
18828
18829   if (origin == NULL && !specialization_p)
18830     {
18831       if (TREE_PUBLIC (decl))
18832         add_AT_flag (var_die, DW_AT_external, 1);
18833
18834       if (DECL_ARTIFICIAL (decl))
18835         add_AT_flag (var_die, DW_AT_artificial, 1);
18836
18837       if (TREE_PROTECTED (decl))
18838         add_AT_unsigned (var_die, DW_AT_accessibility, DW_ACCESS_protected);
18839       else if (TREE_PRIVATE (decl))
18840         add_AT_unsigned (var_die, DW_AT_accessibility, DW_ACCESS_private);
18841     }
18842
18843   if (declaration)
18844     add_AT_flag (var_die, DW_AT_declaration, 1);
18845
18846   if (decl && (DECL_ABSTRACT (decl) || declaration))
18847     equate_decl_number_to_die (decl, var_die);
18848
18849   if (! declaration
18850       && (! DECL_ABSTRACT (decl_or_origin)
18851           /* Local static vars are shared between all clones/inlines,
18852              so emit DW_AT_location on the abstract DIE if DECL_RTL is
18853              already set.  */
18854           || (TREE_CODE (decl_or_origin) == VAR_DECL
18855               && TREE_STATIC (decl_or_origin)
18856               && DECL_RTL_SET_P (decl_or_origin)))
18857       /* When abstract origin already has DW_AT_location attribute, no need
18858          to add it again.  */
18859       && (origin_die == NULL || get_AT (origin_die, DW_AT_location) == NULL))
18860     {
18861       if (TREE_CODE (decl_or_origin) == VAR_DECL && TREE_STATIC (decl_or_origin)
18862           && !TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (decl_or_origin)))
18863         defer_location (decl_or_origin, var_die);
18864       else
18865         add_location_or_const_value_attribute (var_die,
18866                                                decl_or_origin,
18867                                                DW_AT_location);
18868       add_pubname (decl_or_origin, var_die);
18869     }
18870   else
18871     tree_add_const_value_attribute_for_decl (var_die, decl_or_origin);
18872 }
18873
18874 /* Generate a DIE to represent a named constant.  */
18875
18876 static void
18877 gen_const_die (tree decl, dw_die_ref context_die)
18878 {
18879   dw_die_ref const_die;
18880   tree type = TREE_TYPE (decl);
18881
18882   const_die = new_die (DW_TAG_constant, context_die, decl);
18883   add_name_and_src_coords_attributes (const_die, decl);
18884   add_type_attribute (const_die, type, 1, 0, context_die);
18885   if (TREE_PUBLIC (decl))
18886     add_AT_flag (const_die, DW_AT_external, 1);
18887   if (DECL_ARTIFICIAL (decl))
18888     add_AT_flag (const_die, DW_AT_artificial, 1);
18889   tree_add_const_value_attribute_for_decl (const_die, decl);
18890 }
18891
18892 /* Generate a DIE to represent a label identifier.  */
18893
18894 static void
18895 gen_label_die (tree decl, dw_die_ref context_die)
18896 {
18897   tree origin = decl_ultimate_origin (decl);
18898   dw_die_ref lbl_die = new_die (DW_TAG_label, context_die, decl);
18899   rtx insn;
18900   char label[MAX_ARTIFICIAL_LABEL_BYTES];
18901
18902   if (origin != NULL)
18903     add_abstract_origin_attribute (lbl_die, origin);
18904   else
18905     add_name_and_src_coords_attributes (lbl_die, decl);
18906
18907   if (DECL_ABSTRACT (decl))
18908     equate_decl_number_to_die (decl, lbl_die);
18909   else
18910     {
18911       insn = DECL_RTL_IF_SET (decl);
18912
18913       /* Deleted labels are programmer specified labels which have been
18914          eliminated because of various optimizations.  We still emit them
18915          here so that it is possible to put breakpoints on them.  */
18916       if (insn
18917           && (LABEL_P (insn)
18918               || ((NOTE_P (insn)
18919                    && NOTE_KIND (insn) == NOTE_INSN_DELETED_LABEL))))
18920         {
18921           /* When optimization is enabled (via -O) some parts of the compiler
18922              (e.g. jump.c and cse.c) may try to delete CODE_LABEL insns which
18923              represent source-level labels which were explicitly declared by
18924              the user.  This really shouldn't be happening though, so catch
18925              it if it ever does happen.  */
18926           gcc_assert (!INSN_DELETED_P (insn));
18927
18928           ASM_GENERATE_INTERNAL_LABEL (label, "L", CODE_LABEL_NUMBER (insn));
18929           add_AT_lbl_id (lbl_die, DW_AT_low_pc, label);
18930         }
18931     }
18932 }
18933
18934 /* A helper function for gen_inlined_subroutine_die.  Add source coordinate
18935    attributes to the DIE for a block STMT, to describe where the inlined
18936    function was called from.  This is similar to add_src_coords_attributes.  */
18937
18938 static inline void
18939 add_call_src_coords_attributes (tree stmt, dw_die_ref die)
18940 {
18941   expanded_location s = expand_location (BLOCK_SOURCE_LOCATION (stmt));
18942
18943   if (dwarf_version >= 3 || !dwarf_strict)
18944     {
18945       add_AT_file (die, DW_AT_call_file, lookup_filename (s.file));
18946       add_AT_unsigned (die, DW_AT_call_line, s.line);
18947     }
18948 }
18949
18950
18951 /* A helper function for gen_lexical_block_die and gen_inlined_subroutine_die.
18952    Add low_pc and high_pc attributes to the DIE for a block STMT.  */
18953
18954 static inline void
18955 add_high_low_attributes (tree stmt, dw_die_ref die)
18956 {
18957   char label[MAX_ARTIFICIAL_LABEL_BYTES];
18958
18959   if (BLOCK_FRAGMENT_CHAIN (stmt)
18960       && (dwarf_version >= 3 || !dwarf_strict))
18961     {
18962       tree chain;
18963
18964       if (inlined_function_outer_scope_p (stmt))
18965         {
18966           ASM_GENERATE_INTERNAL_LABEL (label, BLOCK_BEGIN_LABEL,
18967                                        BLOCK_NUMBER (stmt));
18968           add_AT_lbl_id (die, DW_AT_entry_pc, label);
18969         }
18970
18971       add_AT_range_list (die, DW_AT_ranges, add_ranges (stmt));
18972
18973       chain = BLOCK_FRAGMENT_CHAIN (stmt);
18974       do
18975         {
18976           add_ranges (chain);
18977           chain = BLOCK_FRAGMENT_CHAIN (chain);
18978         }
18979       while (chain);
18980       add_ranges (NULL);
18981     }
18982   else
18983     {
18984       ASM_GENERATE_INTERNAL_LABEL (label, BLOCK_BEGIN_LABEL,
18985                                    BLOCK_NUMBER (stmt));
18986       add_AT_lbl_id (die, DW_AT_low_pc, label);
18987       ASM_GENERATE_INTERNAL_LABEL (label, BLOCK_END_LABEL,
18988                                    BLOCK_NUMBER (stmt));
18989       add_AT_lbl_id (die, DW_AT_high_pc, label);
18990     }
18991 }
18992
18993 /* Generate a DIE for a lexical block.  */
18994
18995 static void
18996 gen_lexical_block_die (tree stmt, dw_die_ref context_die, int depth)
18997 {
18998   dw_die_ref stmt_die = new_die (DW_TAG_lexical_block, context_die, stmt);
18999
19000   if (! BLOCK_ABSTRACT (stmt) && TREE_ASM_WRITTEN (stmt))
19001     add_high_low_attributes (stmt, stmt_die);
19002
19003   decls_for_scope (stmt, stmt_die, depth);
19004 }
19005
19006 /* Generate a DIE for an inlined subprogram.  */
19007
19008 static void
19009 gen_inlined_subroutine_die (tree stmt, dw_die_ref context_die, int depth)
19010 {
19011   tree decl;
19012
19013   /* The instance of function that is effectively being inlined shall not
19014      be abstract.  */
19015   gcc_assert (! BLOCK_ABSTRACT (stmt));
19016
19017   decl = block_ultimate_origin (stmt);
19018
19019   /* Emit info for the abstract instance first, if we haven't yet.  We
19020      must emit this even if the block is abstract, otherwise when we
19021      emit the block below (or elsewhere), we may end up trying to emit
19022      a die whose origin die hasn't been emitted, and crashing.  */
19023   dwarf2out_abstract_function (decl);
19024
19025   if (! BLOCK_ABSTRACT (stmt))
19026     {
19027       dw_die_ref subr_die
19028         = new_die (DW_TAG_inlined_subroutine, context_die, stmt);
19029
19030       add_abstract_origin_attribute (subr_die, decl);
19031       if (TREE_ASM_WRITTEN (stmt))
19032         add_high_low_attributes (stmt, subr_die);
19033       add_call_src_coords_attributes (stmt, subr_die);
19034
19035       decls_for_scope (stmt, subr_die, depth);
19036       current_function_has_inlines = 1;
19037     }
19038 }
19039
19040 /* Generate a DIE for a field in a record, or structure.  */
19041
19042 static void
19043 gen_field_die (tree decl, dw_die_ref context_die)
19044 {
19045   dw_die_ref decl_die;
19046
19047   if (TREE_TYPE (decl) == error_mark_node)
19048     return;
19049
19050   decl_die = new_die (DW_TAG_member, context_die, decl);
19051   add_name_and_src_coords_attributes (decl_die, decl);
19052   add_type_attribute (decl_die, member_declared_type (decl),
19053                       TREE_READONLY (decl), TREE_THIS_VOLATILE (decl),
19054                       context_die);
19055
19056   if (DECL_BIT_FIELD_TYPE (decl))
19057     {
19058       add_byte_size_attribute (decl_die, decl);
19059       add_bit_size_attribute (decl_die, decl);
19060       add_bit_offset_attribute (decl_die, decl);
19061     }
19062
19063   if (TREE_CODE (DECL_FIELD_CONTEXT (decl)) != UNION_TYPE)
19064     add_data_member_location_attribute (decl_die, decl);
19065
19066   if (DECL_ARTIFICIAL (decl))
19067     add_AT_flag (decl_die, DW_AT_artificial, 1);
19068
19069   if (TREE_PROTECTED (decl))
19070     add_AT_unsigned (decl_die, DW_AT_accessibility, DW_ACCESS_protected);
19071   else if (TREE_PRIVATE (decl))
19072     add_AT_unsigned (decl_die, DW_AT_accessibility, DW_ACCESS_private);
19073
19074   /* Equate decl number to die, so that we can look up this decl later on.  */
19075   equate_decl_number_to_die (decl, decl_die);
19076 }
19077
19078 #if 0
19079 /* Don't generate either pointer_type DIEs or reference_type DIEs here.
19080    Use modified_type_die instead.
19081    We keep this code here just in case these types of DIEs may be needed to
19082    represent certain things in other languages (e.g. Pascal) someday.  */
19083
19084 static void
19085 gen_pointer_type_die (tree type, dw_die_ref context_die)
19086 {
19087   dw_die_ref ptr_die
19088     = new_die (DW_TAG_pointer_type, scope_die_for (type, context_die), type);
19089
19090   equate_type_number_to_die (type, ptr_die);
19091   add_type_attribute (ptr_die, TREE_TYPE (type), 0, 0, context_die);
19092   add_AT_unsigned (mod_type_die, DW_AT_byte_size, PTR_SIZE);
19093 }
19094
19095 /* Don't generate either pointer_type DIEs or reference_type DIEs here.
19096    Use modified_type_die instead.
19097    We keep this code here just in case these types of DIEs may be needed to
19098    represent certain things in other languages (e.g. Pascal) someday.  */
19099
19100 static void
19101 gen_reference_type_die (tree type, dw_die_ref context_die)
19102 {
19103   dw_die_ref ref_die, scope_die = scope_die_for (type, context_die);
19104
19105   if (TYPE_REF_IS_RVALUE (type) && dwarf_version >= 4)
19106     ref_die = new_die (DW_TAG_rvalue_reference_type, scope_die, type);
19107   else
19108     ref_die = new_die (DW_TAG_reference_type, scope_die, type);
19109
19110   equate_type_number_to_die (type, ref_die);
19111   add_type_attribute (ref_die, TREE_TYPE (type), 0, 0, context_die);
19112   add_AT_unsigned (mod_type_die, DW_AT_byte_size, PTR_SIZE);
19113 }
19114 #endif
19115
19116 /* Generate a DIE for a pointer to a member type.  */
19117
19118 static void
19119 gen_ptr_to_mbr_type_die (tree type, dw_die_ref context_die)
19120 {
19121   dw_die_ref ptr_die
19122     = new_die (DW_TAG_ptr_to_member_type,
19123                scope_die_for (type, context_die), type);
19124
19125   equate_type_number_to_die (type, ptr_die);
19126   add_AT_die_ref (ptr_die, DW_AT_containing_type,
19127                   lookup_type_die (TYPE_OFFSET_BASETYPE (type)));
19128   add_type_attribute (ptr_die, TREE_TYPE (type), 0, 0, context_die);
19129 }
19130
19131 /* Generate the DIE for the compilation unit.  */
19132
19133 static dw_die_ref
19134 gen_compile_unit_die (const char *filename)
19135 {
19136   dw_die_ref die;
19137   char producer[250];
19138   const char *language_string = lang_hooks.name;
19139   int language;
19140
19141   die = new_die (DW_TAG_compile_unit, NULL, NULL);
19142
19143   if (filename)
19144     {
19145       add_name_attribute (die, filename);
19146       /* Don't add cwd for <built-in>.  */
19147       if (!IS_ABSOLUTE_PATH (filename) && filename[0] != '<')
19148         add_comp_dir_attribute (die);
19149     }
19150
19151   sprintf (producer, "%s %s", language_string, version_string);
19152
19153 #ifdef MIPS_DEBUGGING_INFO
19154   /* The MIPS/SGI compilers place the 'cc' command line options in the producer
19155      string.  The SGI debugger looks for -g, -g1, -g2, or -g3; if they do
19156      not appear in the producer string, the debugger reaches the conclusion
19157      that the object file is stripped and has no debugging information.
19158      To get the MIPS/SGI debugger to believe that there is debugging
19159      information in the object file, we add a -g to the producer string.  */
19160   if (debug_info_level > DINFO_LEVEL_TERSE)
19161     strcat (producer, " -g");
19162 #endif
19163
19164   add_AT_string (die, DW_AT_producer, producer);
19165
19166   language = DW_LANG_C89;
19167   if (strcmp (language_string, "GNU C++") == 0)
19168     language = DW_LANG_C_plus_plus;
19169   else if (strcmp (language_string, "GNU F77") == 0)
19170     language = DW_LANG_Fortran77;
19171   else if (strcmp (language_string, "GNU Pascal") == 0)
19172     language = DW_LANG_Pascal83;
19173   else if (dwarf_version >= 3 || !dwarf_strict)
19174     {
19175       if (strcmp (language_string, "GNU Ada") == 0)
19176         language = DW_LANG_Ada95;
19177       else if (strcmp (language_string, "GNU Fortran") == 0)
19178         language = DW_LANG_Fortran95;
19179       else if (strcmp (language_string, "GNU Java") == 0)
19180         language = DW_LANG_Java;
19181       else if (strcmp (language_string, "GNU Objective-C") == 0)
19182         language = DW_LANG_ObjC;
19183       else if (strcmp (language_string, "GNU Objective-C++") == 0)
19184         language = DW_LANG_ObjC_plus_plus;
19185     }
19186
19187   add_AT_unsigned (die, DW_AT_language, language);
19188
19189   switch (language)
19190     {
19191     case DW_LANG_Fortran77:
19192     case DW_LANG_Fortran90:
19193     case DW_LANG_Fortran95:
19194       /* Fortran has case insensitive identifiers and the front-end
19195          lowercases everything.  */
19196       add_AT_unsigned (die, DW_AT_identifier_case, DW_ID_down_case);
19197       break;
19198     default:
19199       /* The default DW_ID_case_sensitive doesn't need to be specified.  */
19200       break;
19201     }
19202   return die;
19203 }
19204
19205 /* Generate the DIE for a base class.  */
19206
19207 static void
19208 gen_inheritance_die (tree binfo, tree access, dw_die_ref context_die)
19209 {
19210   dw_die_ref die = new_die (DW_TAG_inheritance, context_die, binfo);
19211
19212   add_type_attribute (die, BINFO_TYPE (binfo), 0, 0, context_die);
19213   add_data_member_location_attribute (die, binfo);
19214
19215   if (BINFO_VIRTUAL_P (binfo))
19216     add_AT_unsigned (die, DW_AT_virtuality, DW_VIRTUALITY_virtual);
19217
19218   if (access == access_public_node)
19219     add_AT_unsigned (die, DW_AT_accessibility, DW_ACCESS_public);
19220   else if (access == access_protected_node)
19221     add_AT_unsigned (die, DW_AT_accessibility, DW_ACCESS_protected);
19222 }
19223
19224 /* Generate a DIE for a class member.  */
19225
19226 static void
19227 gen_member_die (tree type, dw_die_ref context_die)
19228 {
19229   tree member;
19230   tree binfo = TYPE_BINFO (type);
19231   dw_die_ref child;
19232
19233   /* If this is not an incomplete type, output descriptions of each of its
19234      members. Note that as we output the DIEs necessary to represent the
19235      members of this record or union type, we will also be trying to output
19236      DIEs to represent the *types* of those members. However the `type'
19237      function (above) will specifically avoid generating type DIEs for member
19238      types *within* the list of member DIEs for this (containing) type except
19239      for those types (of members) which are explicitly marked as also being
19240      members of this (containing) type themselves.  The g++ front- end can
19241      force any given type to be treated as a member of some other (containing)
19242      type by setting the TYPE_CONTEXT of the given (member) type to point to
19243      the TREE node representing the appropriate (containing) type.  */
19244
19245   /* First output info about the base classes.  */
19246   if (binfo)
19247     {
19248       VEC(tree,gc) *accesses = BINFO_BASE_ACCESSES (binfo);
19249       int i;
19250       tree base;
19251
19252       for (i = 0; BINFO_BASE_ITERATE (binfo, i, base); i++)
19253         gen_inheritance_die (base,
19254                              (accesses ? VEC_index (tree, accesses, i)
19255                               : access_public_node), context_die);
19256     }
19257
19258   /* Now output info about the data members and type members.  */
19259   for (member = TYPE_FIELDS (type); member; member = TREE_CHAIN (member))
19260     {
19261       /* If we thought we were generating minimal debug info for TYPE
19262          and then changed our minds, some of the member declarations
19263          may have already been defined.  Don't define them again, but
19264          do put them in the right order.  */
19265
19266       child = lookup_decl_die (member);
19267       if (child)
19268         splice_child_die (context_die, child);
19269       else
19270         gen_decl_die (member, NULL, context_die);
19271     }
19272
19273   /* Now output info about the function members (if any).  */
19274   for (member = TYPE_METHODS (type); member; member = TREE_CHAIN (member))
19275     {
19276       /* Don't include clones in the member list.  */
19277       if (DECL_ABSTRACT_ORIGIN (member))
19278         continue;
19279
19280       child = lookup_decl_die (member);
19281       if (child)
19282         splice_child_die (context_die, child);
19283       else
19284         gen_decl_die (member, NULL, context_die);
19285     }
19286 }
19287
19288 /* Generate a DIE for a structure or union type.  If TYPE_DECL_SUPPRESS_DEBUG
19289    is set, we pretend that the type was never defined, so we only get the
19290    member DIEs needed by later specification DIEs.  */
19291
19292 static void
19293 gen_struct_or_union_type_die (tree type, dw_die_ref context_die,
19294                                 enum debug_info_usage usage)
19295 {
19296   dw_die_ref type_die = lookup_type_die (type);
19297   dw_die_ref scope_die = 0;
19298   int nested = 0;
19299   int complete = (TYPE_SIZE (type)
19300                   && (! TYPE_STUB_DECL (type)
19301                       || ! TYPE_DECL_SUPPRESS_DEBUG (TYPE_STUB_DECL (type))));
19302   int ns_decl = (context_die && context_die->die_tag == DW_TAG_namespace);
19303   complete = complete && should_emit_struct_debug (type, usage);
19304
19305   if (type_die && ! complete)
19306     return;
19307
19308   if (TYPE_CONTEXT (type) != NULL_TREE
19309       && (AGGREGATE_TYPE_P (TYPE_CONTEXT (type))
19310           || TREE_CODE (TYPE_CONTEXT (type)) == NAMESPACE_DECL))
19311     nested = 1;
19312
19313   scope_die = scope_die_for (type, context_die);
19314
19315   if (! type_die || (nested && scope_die == comp_unit_die))
19316     /* First occurrence of type or toplevel definition of nested class.  */
19317     {
19318       dw_die_ref old_die = type_die;
19319
19320       type_die = new_die (TREE_CODE (type) == RECORD_TYPE
19321                           ? record_type_tag (type) : DW_TAG_union_type,
19322                           scope_die, type);
19323       equate_type_number_to_die (type, type_die);
19324       if (old_die)
19325         add_AT_specification (type_die, old_die);
19326       else
19327         add_name_attribute (type_die, type_tag (type));
19328     }
19329   else
19330     remove_AT (type_die, DW_AT_declaration);
19331
19332   /* Generate child dies for template paramaters.  */
19333   if (debug_info_level > DINFO_LEVEL_TERSE
19334       && COMPLETE_TYPE_P (type))
19335     gen_generic_params_dies (type);
19336
19337   /* If this type has been completed, then give it a byte_size attribute and
19338      then give a list of members.  */
19339   if (complete && !ns_decl)
19340     {
19341       /* Prevent infinite recursion in cases where the type of some member of
19342          this type is expressed in terms of this type itself.  */
19343       TREE_ASM_WRITTEN (type) = 1;
19344       add_byte_size_attribute (type_die, type);
19345       if (TYPE_STUB_DECL (type) != NULL_TREE)
19346         add_src_coords_attributes (type_die, TYPE_STUB_DECL (type));
19347
19348       /* If the first reference to this type was as the return type of an
19349          inline function, then it may not have a parent.  Fix this now.  */
19350       if (type_die->die_parent == NULL)
19351         add_child_die (scope_die, type_die);
19352
19353       push_decl_scope (type);
19354       gen_member_die (type, type_die);
19355       pop_decl_scope ();
19356
19357       /* GNU extension: Record what type our vtable lives in.  */
19358       if (TYPE_VFIELD (type))
19359         {
19360           tree vtype = DECL_FCONTEXT (TYPE_VFIELD (type));
19361
19362           gen_type_die (vtype, context_die);
19363           add_AT_die_ref (type_die, DW_AT_containing_type,
19364                           lookup_type_die (vtype));
19365         }
19366     }
19367   else
19368     {
19369       add_AT_flag (type_die, DW_AT_declaration, 1);
19370
19371       /* We don't need to do this for function-local types.  */
19372       if (TYPE_STUB_DECL (type)
19373           && ! decl_function_context (TYPE_STUB_DECL (type)))
19374         VEC_safe_push (tree, gc, incomplete_types, type);
19375     }
19376
19377   if (get_AT (type_die, DW_AT_name))
19378     add_pubtype (type, type_die);
19379 }
19380
19381 /* Generate a DIE for a subroutine _type_.  */
19382
19383 static void
19384 gen_subroutine_type_die (tree type, dw_die_ref context_die)
19385 {
19386   tree return_type = TREE_TYPE (type);
19387   dw_die_ref subr_die
19388     = new_die (DW_TAG_subroutine_type,
19389                scope_die_for (type, context_die), type);
19390
19391   equate_type_number_to_die (type, subr_die);
19392   add_prototyped_attribute (subr_die, type);
19393   add_type_attribute (subr_die, return_type, 0, 0, context_die);
19394   gen_formal_types_die (type, subr_die);
19395
19396   if (get_AT (subr_die, DW_AT_name))
19397     add_pubtype (type, subr_die);
19398 }
19399
19400 /* Generate a DIE for a type definition.  */
19401
19402 static void
19403 gen_typedef_die (tree decl, dw_die_ref context_die)
19404 {
19405   dw_die_ref type_die;
19406   tree origin;
19407
19408   if (TREE_ASM_WRITTEN (decl))
19409     return;
19410
19411   TREE_ASM_WRITTEN (decl) = 1;
19412   type_die = new_die (DW_TAG_typedef, context_die, decl);
19413   origin = decl_ultimate_origin (decl);
19414   if (origin != NULL)
19415     add_abstract_origin_attribute (type_die, origin);
19416   else
19417     {
19418       tree type;
19419
19420       add_name_and_src_coords_attributes (type_die, decl);
19421       if (DECL_ORIGINAL_TYPE (decl))
19422         {
19423           type = DECL_ORIGINAL_TYPE (decl);
19424
19425           gcc_assert (type != TREE_TYPE (decl));
19426           equate_type_number_to_die (TREE_TYPE (decl), type_die);
19427         }
19428       else
19429         type = TREE_TYPE (decl);
19430
19431       add_type_attribute (type_die, type, TREE_READONLY (decl),
19432                           TREE_THIS_VOLATILE (decl), context_die);
19433     }
19434
19435   if (DECL_ABSTRACT (decl))
19436     equate_decl_number_to_die (decl, type_die);
19437
19438   if (get_AT (type_die, DW_AT_name))
19439     add_pubtype (decl, type_die);
19440 }
19441
19442 /* Generate a type description DIE.  */
19443
19444 static void
19445 gen_type_die_with_usage (tree type, dw_die_ref context_die,
19446                                 enum debug_info_usage usage)
19447 {
19448   int need_pop;
19449   struct array_descr_info info;
19450
19451   if (type == NULL_TREE || type == error_mark_node)
19452     return;
19453
19454   /* If TYPE is a typedef type variant, let's generate debug info
19455      for the parent typedef which TYPE is a type of.  */
19456   if (TYPE_NAME (type) && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
19457       && DECL_ORIGINAL_TYPE (TYPE_NAME (type)))
19458     {
19459       if (TREE_ASM_WRITTEN (type))
19460         return;
19461
19462       /* Prevent broken recursion; we can't hand off to the same type.  */
19463       gcc_assert (DECL_ORIGINAL_TYPE (TYPE_NAME (type)) != type);
19464
19465       /* Use the DIE of the containing namespace as the parent DIE of
19466          the type description DIE we want to generate.  */
19467       if (DECL_CONTEXT (TYPE_NAME (type))
19468           && TREE_CODE (DECL_CONTEXT (TYPE_NAME (type))) == NAMESPACE_DECL)
19469         context_die = get_context_die (DECL_CONTEXT (TYPE_NAME (type)));
19470
19471       TREE_ASM_WRITTEN (type) = 1;
19472       gen_decl_die (TYPE_NAME (type), NULL, context_die);
19473       return;
19474     }
19475
19476   /* If this is an array type with hidden descriptor, handle it first.  */
19477   if (!TREE_ASM_WRITTEN (type)
19478       && lang_hooks.types.get_array_descr_info
19479       && lang_hooks.types.get_array_descr_info (type, &info)
19480       && (dwarf_version >= 3 || !dwarf_strict))
19481     {
19482       gen_descr_array_type_die (type, &info, context_die);
19483       TREE_ASM_WRITTEN (type) = 1;
19484       return;
19485     }
19486
19487   /* We are going to output a DIE to represent the unqualified version
19488      of this type (i.e. without any const or volatile qualifiers) so
19489      get the main variant (i.e. the unqualified version) of this type
19490      now.  (Vectors are special because the debugging info is in the
19491      cloned type itself).  */
19492   if (TREE_CODE (type) != VECTOR_TYPE)
19493     type = type_main_variant (type);
19494
19495   if (TREE_ASM_WRITTEN (type))
19496     return;
19497
19498   switch (TREE_CODE (type))
19499     {
19500     case ERROR_MARK:
19501       break;
19502
19503     case POINTER_TYPE:
19504     case REFERENCE_TYPE:
19505       /* We must set TREE_ASM_WRITTEN in case this is a recursive type.  This
19506          ensures that the gen_type_die recursion will terminate even if the
19507          type is recursive.  Recursive types are possible in Ada.  */
19508       /* ??? We could perhaps do this for all types before the switch
19509          statement.  */
19510       TREE_ASM_WRITTEN (type) = 1;
19511
19512       /* For these types, all that is required is that we output a DIE (or a
19513          set of DIEs) to represent the "basis" type.  */
19514       gen_type_die_with_usage (TREE_TYPE (type), context_die,
19515                                 DINFO_USAGE_IND_USE);
19516       break;
19517
19518     case OFFSET_TYPE:
19519       /* This code is used for C++ pointer-to-data-member types.
19520          Output a description of the relevant class type.  */
19521       gen_type_die_with_usage (TYPE_OFFSET_BASETYPE (type), context_die,
19522                                         DINFO_USAGE_IND_USE);
19523
19524       /* Output a description of the type of the object pointed to.  */
19525       gen_type_die_with_usage (TREE_TYPE (type), context_die,
19526                                         DINFO_USAGE_IND_USE);
19527
19528       /* Now output a DIE to represent this pointer-to-data-member type
19529          itself.  */
19530       gen_ptr_to_mbr_type_die (type, context_die);
19531       break;
19532
19533     case FUNCTION_TYPE:
19534       /* Force out return type (in case it wasn't forced out already).  */
19535       gen_type_die_with_usage (TREE_TYPE (type), context_die,
19536                                         DINFO_USAGE_DIR_USE);
19537       gen_subroutine_type_die (type, context_die);
19538       break;
19539
19540     case METHOD_TYPE:
19541       /* Force out return type (in case it wasn't forced out already).  */
19542       gen_type_die_with_usage (TREE_TYPE (type), context_die,
19543                                         DINFO_USAGE_DIR_USE);
19544       gen_subroutine_type_die (type, context_die);
19545       break;
19546
19547     case ARRAY_TYPE:
19548       gen_array_type_die (type, context_die);
19549       break;
19550
19551     case VECTOR_TYPE:
19552       gen_array_type_die (type, context_die);
19553       break;
19554
19555     case ENUMERAL_TYPE:
19556     case RECORD_TYPE:
19557     case UNION_TYPE:
19558     case QUAL_UNION_TYPE:
19559       /* If this is a nested type whose containing class hasn't been written
19560          out yet, writing it out will cover this one, too.  This does not apply
19561          to instantiations of member class templates; they need to be added to
19562          the containing class as they are generated.  FIXME: This hurts the
19563          idea of combining type decls from multiple TUs, since we can't predict
19564          what set of template instantiations we'll get.  */
19565       if (TYPE_CONTEXT (type)
19566           && AGGREGATE_TYPE_P (TYPE_CONTEXT (type))
19567           && ! TREE_ASM_WRITTEN (TYPE_CONTEXT (type)))
19568         {
19569           gen_type_die_with_usage (TYPE_CONTEXT (type), context_die, usage);
19570
19571           if (TREE_ASM_WRITTEN (type))
19572             return;
19573
19574           /* If that failed, attach ourselves to the stub.  */
19575           push_decl_scope (TYPE_CONTEXT (type));
19576           context_die = lookup_type_die (TYPE_CONTEXT (type));
19577           need_pop = 1;
19578         }
19579       else if (TYPE_CONTEXT (type) != NULL_TREE
19580                && (TREE_CODE (TYPE_CONTEXT (type)) == FUNCTION_DECL))
19581         {
19582           /* If this type is local to a function that hasn't been written
19583              out yet, use a NULL context for now; it will be fixed up in
19584              decls_for_scope.  */
19585           context_die = lookup_decl_die (TYPE_CONTEXT (type));
19586           need_pop = 0;
19587         }
19588       else
19589         {
19590           context_die = declare_in_namespace (type, context_die);
19591           need_pop = 0;
19592         }
19593
19594       if (TREE_CODE (type) == ENUMERAL_TYPE)
19595         {
19596           /* This might have been written out by the call to
19597              declare_in_namespace.  */
19598           if (!TREE_ASM_WRITTEN (type))
19599             gen_enumeration_type_die (type, context_die);
19600         }
19601       else
19602         gen_struct_or_union_type_die (type, context_die, usage);
19603
19604       if (need_pop)
19605         pop_decl_scope ();
19606
19607       /* Don't set TREE_ASM_WRITTEN on an incomplete struct; we want to fix
19608          it up if it is ever completed.  gen_*_type_die will set it for us
19609          when appropriate.  */
19610       return;
19611
19612     case VOID_TYPE:
19613     case INTEGER_TYPE:
19614     case REAL_TYPE:
19615     case FIXED_POINT_TYPE:
19616     case COMPLEX_TYPE:
19617     case BOOLEAN_TYPE:
19618       /* No DIEs needed for fundamental types.  */
19619       break;
19620
19621     case LANG_TYPE:
19622       /* Just use DW_TAG_unspecified_type.  */
19623       {
19624         dw_die_ref type_die = lookup_type_die (type);
19625         if (type_die == NULL)
19626           {
19627             tree name = TYPE_NAME (type);
19628             if (TREE_CODE (name) == TYPE_DECL)
19629               name = DECL_NAME (name);
19630             type_die = new_die (DW_TAG_unspecified_type, comp_unit_die, type);
19631             add_name_attribute (type_die, IDENTIFIER_POINTER (name));
19632             equate_type_number_to_die (type, type_die);
19633           }
19634       }
19635       break;
19636
19637     default:
19638       gcc_unreachable ();
19639     }
19640
19641   TREE_ASM_WRITTEN (type) = 1;
19642 }
19643
19644 static void
19645 gen_type_die (tree type, dw_die_ref context_die)
19646 {
19647   gen_type_die_with_usage (type, context_die, DINFO_USAGE_DIR_USE);
19648 }
19649
19650 /* Generate a DW_TAG_lexical_block DIE followed by DIEs to represent all of the
19651    things which are local to the given block.  */
19652
19653 static void
19654 gen_block_die (tree stmt, dw_die_ref context_die, int depth)
19655 {
19656   int must_output_die = 0;
19657   bool inlined_func;
19658
19659   /* Ignore blocks that are NULL.  */
19660   if (stmt == NULL_TREE)
19661     return;
19662
19663   inlined_func = inlined_function_outer_scope_p (stmt);
19664
19665   /* If the block is one fragment of a non-contiguous block, do not
19666      process the variables, since they will have been done by the
19667      origin block.  Do process subblocks.  */
19668   if (BLOCK_FRAGMENT_ORIGIN (stmt))
19669     {
19670       tree sub;
19671
19672       for (sub = BLOCK_SUBBLOCKS (stmt); sub; sub = BLOCK_CHAIN (sub))
19673         gen_block_die (sub, context_die, depth + 1);
19674
19675       return;
19676     }
19677
19678   /* Determine if we need to output any Dwarf DIEs at all to represent this
19679      block.  */
19680   if (inlined_func)
19681     /* The outer scopes for inlinings *must* always be represented.  We
19682        generate DW_TAG_inlined_subroutine DIEs for them.  (See below.) */
19683     must_output_die = 1;
19684   else
19685     {
19686       /* Determine if this block directly contains any "significant"
19687          local declarations which we will need to output DIEs for.  */
19688       if (debug_info_level > DINFO_LEVEL_TERSE)
19689         /* We are not in terse mode so *any* local declaration counts
19690            as being a "significant" one.  */
19691         must_output_die = ((BLOCK_VARS (stmt) != NULL
19692                             || BLOCK_NUM_NONLOCALIZED_VARS (stmt))
19693                            && (TREE_USED (stmt)
19694                                || TREE_ASM_WRITTEN (stmt)
19695                                || BLOCK_ABSTRACT (stmt)));
19696       else if ((TREE_USED (stmt)
19697                 || TREE_ASM_WRITTEN (stmt)
19698                 || BLOCK_ABSTRACT (stmt))
19699                && !dwarf2out_ignore_block (stmt))
19700         must_output_die = 1;
19701     }
19702
19703   /* It would be a waste of space to generate a Dwarf DW_TAG_lexical_block
19704      DIE for any block which contains no significant local declarations at
19705      all.  Rather, in such cases we just call `decls_for_scope' so that any
19706      needed Dwarf info for any sub-blocks will get properly generated. Note
19707      that in terse mode, our definition of what constitutes a "significant"
19708      local declaration gets restricted to include only inlined function
19709      instances and local (nested) function definitions.  */
19710   if (must_output_die)
19711     {
19712       if (inlined_func)
19713         {
19714           /* If STMT block is abstract, that means we have been called
19715              indirectly from dwarf2out_abstract_function.
19716              That function rightfully marks the descendent blocks (of
19717              the abstract function it is dealing with) as being abstract,
19718              precisely to prevent us from emitting any
19719              DW_TAG_inlined_subroutine DIE as a descendent
19720              of an abstract function instance. So in that case, we should
19721              not call gen_inlined_subroutine_die.
19722
19723              Later though, when cgraph asks dwarf2out to emit info
19724              for the concrete instance of the function decl into which
19725              the concrete instance of STMT got inlined, the later will lead
19726              to the generation of a DW_TAG_inlined_subroutine DIE.  */
19727           if (! BLOCK_ABSTRACT (stmt))
19728             gen_inlined_subroutine_die (stmt, context_die, depth);
19729         }
19730       else
19731         gen_lexical_block_die (stmt, context_die, depth);
19732     }
19733   else
19734     decls_for_scope (stmt, context_die, depth);
19735 }
19736
19737 /* Process variable DECL (or variable with origin ORIGIN) within
19738    block STMT and add it to CONTEXT_DIE.  */
19739 static void
19740 process_scope_var (tree stmt, tree decl, tree origin, dw_die_ref context_die)
19741 {
19742   dw_die_ref die;
19743   tree decl_or_origin = decl ? decl : origin;
19744
19745   if (TREE_CODE (decl_or_origin) == FUNCTION_DECL)
19746     die = lookup_decl_die (decl_or_origin);
19747   else if (TREE_CODE (decl_or_origin) == TYPE_DECL
19748            && TYPE_DECL_IS_STUB (decl_or_origin))
19749     die = lookup_type_die (TREE_TYPE (decl_or_origin));
19750   else
19751     die = NULL;
19752
19753   if (die != NULL && die->die_parent == NULL)
19754     add_child_die (context_die, die);
19755   else if (TREE_CODE (decl_or_origin) == IMPORTED_DECL)
19756     dwarf2out_imported_module_or_decl_1 (decl_or_origin, DECL_NAME (decl_or_origin),
19757                                          stmt, context_die);
19758   else
19759     gen_decl_die (decl, origin, context_die);
19760 }
19761
19762 /* Generate all of the decls declared within a given scope and (recursively)
19763    all of its sub-blocks.  */
19764
19765 static void
19766 decls_for_scope (tree stmt, dw_die_ref context_die, int depth)
19767 {
19768   tree decl;
19769   unsigned int i;
19770   tree subblocks;
19771
19772   /* Ignore NULL blocks.  */
19773   if (stmt == NULL_TREE)
19774     return;
19775
19776   /* Output the DIEs to represent all of the data objects and typedefs
19777      declared directly within this block but not within any nested
19778      sub-blocks.  Also, nested function and tag DIEs have been
19779      generated with a parent of NULL; fix that up now.  */
19780   for (decl = BLOCK_VARS (stmt); decl != NULL; decl = TREE_CHAIN (decl))
19781     process_scope_var (stmt, decl, NULL_TREE, context_die);
19782   for (i = 0; i < BLOCK_NUM_NONLOCALIZED_VARS (stmt); i++)
19783     process_scope_var (stmt, NULL, BLOCK_NONLOCALIZED_VAR (stmt, i),
19784                        context_die);
19785
19786   /* If we're at -g1, we're not interested in subblocks.  */
19787   if (debug_info_level <= DINFO_LEVEL_TERSE)
19788     return;
19789
19790   /* Output the DIEs to represent all sub-blocks (and the items declared
19791      therein) of this block.  */
19792   for (subblocks = BLOCK_SUBBLOCKS (stmt);
19793        subblocks != NULL;
19794        subblocks = BLOCK_CHAIN (subblocks))
19795     gen_block_die (subblocks, context_die, depth + 1);
19796 }
19797
19798 /* Is this a typedef we can avoid emitting?  */
19799
19800 static inline int
19801 is_redundant_typedef (const_tree decl)
19802 {
19803   if (TYPE_DECL_IS_STUB (decl))
19804     return 1;
19805
19806   if (DECL_ARTIFICIAL (decl)
19807       && DECL_CONTEXT (decl)
19808       && is_tagged_type (DECL_CONTEXT (decl))
19809       && TREE_CODE (TYPE_NAME (DECL_CONTEXT (decl))) == TYPE_DECL
19810       && DECL_NAME (decl) == DECL_NAME (TYPE_NAME (DECL_CONTEXT (decl))))
19811     /* Also ignore the artificial member typedef for the class name.  */
19812     return 1;
19813
19814   return 0;
19815 }
19816
19817 /* Returns the DIE for a context.  */
19818
19819 static inline dw_die_ref
19820 get_context_die (tree context)
19821 {
19822   if (context)
19823     {
19824       /* Find die that represents this context.  */
19825       if (TYPE_P (context))
19826         return force_type_die (TYPE_MAIN_VARIANT (context));
19827       else
19828         return force_decl_die (context);
19829     }
19830   return comp_unit_die;
19831 }
19832
19833 /* Returns the DIE for decl.  A DIE will always be returned.  */
19834
19835 static dw_die_ref
19836 force_decl_die (tree decl)
19837 {
19838   dw_die_ref decl_die;
19839   unsigned saved_external_flag;
19840   tree save_fn = NULL_TREE;
19841   decl_die = lookup_decl_die (decl);
19842   if (!decl_die)
19843     {
19844       dw_die_ref context_die = get_context_die (DECL_CONTEXT (decl));
19845
19846       decl_die = lookup_decl_die (decl);
19847       if (decl_die)
19848         return decl_die;
19849
19850       switch (TREE_CODE (decl))
19851         {
19852         case FUNCTION_DECL:
19853           /* Clear current_function_decl, so that gen_subprogram_die thinks
19854              that this is a declaration. At this point, we just want to force
19855              declaration die.  */
19856           save_fn = current_function_decl;
19857           current_function_decl = NULL_TREE;
19858           gen_subprogram_die (decl, context_die);
19859           current_function_decl = save_fn;
19860           break;
19861
19862         case VAR_DECL:
19863           /* Set external flag to force declaration die. Restore it after
19864            gen_decl_die() call.  */
19865           saved_external_flag = DECL_EXTERNAL (decl);
19866           DECL_EXTERNAL (decl) = 1;
19867           gen_decl_die (decl, NULL, context_die);
19868           DECL_EXTERNAL (decl) = saved_external_flag;
19869           break;
19870
19871         case NAMESPACE_DECL:
19872           if (dwarf_version >= 3 || !dwarf_strict)
19873             dwarf2out_decl (decl);
19874           else
19875             /* DWARF2 has neither DW_TAG_module, nor DW_TAG_namespace.  */
19876             decl_die = comp_unit_die;
19877           break;
19878
19879         default:
19880           gcc_unreachable ();
19881         }
19882
19883       /* We should be able to find the DIE now.  */
19884       if (!decl_die)
19885         decl_die = lookup_decl_die (decl);
19886       gcc_assert (decl_die);
19887     }
19888
19889   return decl_die;
19890 }
19891
19892 /* Returns the DIE for TYPE, that must not be a base type.  A DIE is
19893    always returned.  */
19894
19895 static dw_die_ref
19896 force_type_die (tree type)
19897 {
19898   dw_die_ref type_die;
19899
19900   type_die = lookup_type_die (type);
19901   if (!type_die)
19902     {
19903       dw_die_ref context_die = get_context_die (TYPE_CONTEXT (type));
19904
19905       type_die = modified_type_die (type, TYPE_READONLY (type),
19906                                     TYPE_VOLATILE (type), context_die);
19907       gcc_assert (type_die);
19908     }
19909   return type_die;
19910 }
19911
19912 /* Force out any required namespaces to be able to output DECL,
19913    and return the new context_die for it, if it's changed.  */
19914
19915 static dw_die_ref
19916 setup_namespace_context (tree thing, dw_die_ref context_die)
19917 {
19918   tree context = (DECL_P (thing)
19919                   ? DECL_CONTEXT (thing) : TYPE_CONTEXT (thing));
19920   if (context && TREE_CODE (context) == NAMESPACE_DECL)
19921     /* Force out the namespace.  */
19922     context_die = force_decl_die (context);
19923
19924   return context_die;
19925 }
19926
19927 /* Emit a declaration DIE for THING (which is either a DECL or a tagged
19928    type) within its namespace, if appropriate.
19929
19930    For compatibility with older debuggers, namespace DIEs only contain
19931    declarations; all definitions are emitted at CU scope.  */
19932
19933 static dw_die_ref
19934 declare_in_namespace (tree thing, dw_die_ref context_die)
19935 {
19936   dw_die_ref ns_context;
19937
19938   if (debug_info_level <= DINFO_LEVEL_TERSE)
19939     return context_die;
19940
19941   /* If this decl is from an inlined function, then don't try to emit it in its
19942      namespace, as we will get confused.  It would have already been emitted
19943      when the abstract instance of the inline function was emitted anyways.  */
19944   if (DECL_P (thing) && DECL_ABSTRACT_ORIGIN (thing))
19945     return context_die;
19946
19947   ns_context = setup_namespace_context (thing, context_die);
19948
19949   if (ns_context != context_die)
19950     {
19951       if (is_fortran ())
19952         return ns_context;
19953       if (DECL_P (thing))
19954         gen_decl_die (thing, NULL, ns_context);
19955       else
19956         gen_type_die (thing, ns_context);
19957     }
19958   return context_die;
19959 }
19960
19961 /* Generate a DIE for a namespace or namespace alias.  */
19962
19963 static void
19964 gen_namespace_die (tree decl, dw_die_ref context_die)
19965 {
19966   dw_die_ref namespace_die;
19967
19968   /* Namespace aliases have a DECL_ABSTRACT_ORIGIN of the namespace
19969      they are an alias of.  */
19970   if (DECL_ABSTRACT_ORIGIN (decl) == NULL)
19971     {
19972       /* Output a real namespace or module.  */
19973       context_die = setup_namespace_context (decl, comp_unit_die);
19974       namespace_die = new_die (is_fortran ()
19975                                ? DW_TAG_module : DW_TAG_namespace,
19976                                context_die, decl);
19977       /* For Fortran modules defined in different CU don't add src coords.  */
19978       if (namespace_die->die_tag == DW_TAG_module && DECL_EXTERNAL (decl))
19979         {
19980           const char *name = dwarf2_name (decl, 0);
19981           if (name)
19982             add_name_attribute (namespace_die, name);
19983         }
19984       else
19985         add_name_and_src_coords_attributes (namespace_die, decl);
19986       if (DECL_EXTERNAL (decl))
19987         add_AT_flag (namespace_die, DW_AT_declaration, 1);
19988       equate_decl_number_to_die (decl, namespace_die);
19989     }
19990   else
19991     {
19992       /* Output a namespace alias.  */
19993
19994       /* Force out the namespace we are an alias of, if necessary.  */
19995       dw_die_ref origin_die
19996         = force_decl_die (DECL_ABSTRACT_ORIGIN (decl));
19997
19998       if (DECL_CONTEXT (decl) == NULL_TREE
19999           || TREE_CODE (DECL_CONTEXT (decl)) == NAMESPACE_DECL)
20000         context_die = setup_namespace_context (decl, comp_unit_die);
20001       /* Now create the namespace alias DIE.  */
20002       namespace_die = new_die (DW_TAG_imported_declaration, context_die, decl);
20003       add_name_and_src_coords_attributes (namespace_die, decl);
20004       add_AT_die_ref (namespace_die, DW_AT_import, origin_die);
20005       equate_decl_number_to_die (decl, namespace_die);
20006     }
20007 }
20008
20009 /* Generate Dwarf debug information for a decl described by DECL.  */
20010
20011 static void
20012 gen_decl_die (tree decl, tree origin, dw_die_ref context_die)
20013 {
20014   tree decl_or_origin = decl ? decl : origin;
20015   tree class_origin = NULL, ultimate_origin;
20016
20017   if (DECL_P (decl_or_origin) && DECL_IGNORED_P (decl_or_origin))
20018     return;
20019
20020   switch (TREE_CODE (decl_or_origin))
20021     {
20022     case ERROR_MARK:
20023       break;
20024
20025     case CONST_DECL:
20026       if (!is_fortran ())
20027         {
20028           /* The individual enumerators of an enum type get output when we output
20029              the Dwarf representation of the relevant enum type itself.  */
20030           break;
20031         }
20032
20033       /* Emit its type.  */
20034       gen_type_die (TREE_TYPE (decl), context_die);
20035
20036       /* And its containing namespace.  */
20037       context_die = declare_in_namespace (decl, context_die);
20038
20039       gen_const_die (decl, context_die);
20040       break;
20041
20042     case FUNCTION_DECL:
20043       /* Don't output any DIEs to represent mere function declarations,
20044          unless they are class members or explicit block externs.  */
20045       if (DECL_INITIAL (decl_or_origin) == NULL_TREE
20046           && DECL_CONTEXT (decl_or_origin) == NULL_TREE
20047           && (current_function_decl == NULL_TREE
20048               || DECL_ARTIFICIAL (decl_or_origin)))
20049         break;
20050
20051 #if 0
20052       /* FIXME */
20053       /* This doesn't work because the C frontend sets DECL_ABSTRACT_ORIGIN
20054          on local redeclarations of global functions.  That seems broken.  */
20055       if (current_function_decl != decl)
20056         /* This is only a declaration.  */;
20057 #endif
20058
20059       /* If we're emitting a clone, emit info for the abstract instance.  */
20060       if (origin || DECL_ORIGIN (decl) != decl)
20061         dwarf2out_abstract_function (origin
20062                                      ? DECL_ORIGIN (origin)
20063                                      : DECL_ABSTRACT_ORIGIN (decl));
20064
20065       /* If we're emitting an out-of-line copy of an inline function,
20066          emit info for the abstract instance and set up to refer to it.  */
20067       else if (cgraph_function_possibly_inlined_p (decl)
20068                && ! DECL_ABSTRACT (decl)
20069                && ! class_or_namespace_scope_p (context_die)
20070                /* dwarf2out_abstract_function won't emit a die if this is just
20071                   a declaration.  We must avoid setting DECL_ABSTRACT_ORIGIN in
20072                   that case, because that works only if we have a die.  */
20073                && DECL_INITIAL (decl) != NULL_TREE)
20074         {
20075           dwarf2out_abstract_function (decl);
20076           set_decl_origin_self (decl);
20077         }
20078
20079       /* Otherwise we're emitting the primary DIE for this decl.  */
20080       else if (debug_info_level > DINFO_LEVEL_TERSE)
20081         {
20082           /* Before we describe the FUNCTION_DECL itself, make sure that we
20083              have described its return type.  */
20084           gen_type_die (TREE_TYPE (TREE_TYPE (decl)), context_die);
20085
20086           /* And its virtual context.  */
20087           if (DECL_VINDEX (decl) != NULL_TREE)
20088             gen_type_die (DECL_CONTEXT (decl), context_die);
20089
20090           /* And its containing type.  */
20091           if (!origin)
20092             origin = decl_class_context (decl);
20093           if (origin != NULL_TREE)
20094             gen_type_die_for_member (origin, decl, context_die);
20095
20096           /* And its containing namespace.  */
20097           context_die = declare_in_namespace (decl, context_die);
20098         }
20099
20100       /* Now output a DIE to represent the function itself.  */
20101       if (decl)
20102         gen_subprogram_die (decl, context_die);
20103       break;
20104
20105     case TYPE_DECL:
20106       /* If we are in terse mode, don't generate any DIEs to represent any
20107          actual typedefs.  */
20108       if (debug_info_level <= DINFO_LEVEL_TERSE)
20109         break;
20110
20111       /* In the special case of a TYPE_DECL node representing the declaration
20112          of some type tag, if the given TYPE_DECL is marked as having been
20113          instantiated from some other (original) TYPE_DECL node (e.g. one which
20114          was generated within the original definition of an inline function) we
20115          used to generate a special (abbreviated) DW_TAG_structure_type,
20116          DW_TAG_union_type, or DW_TAG_enumeration_type DIE here.  But nothing
20117          should be actually referencing those DIEs, as variable DIEs with that
20118          type would be emitted already in the abstract origin, so it was always
20119          removed during unused type prunning.  Don't add anything in this
20120          case.  */
20121       if (TYPE_DECL_IS_STUB (decl) && decl_ultimate_origin (decl) != NULL_TREE)
20122         break;
20123
20124       if (is_redundant_typedef (decl))
20125         gen_type_die (TREE_TYPE (decl), context_die);
20126       else
20127         /* Output a DIE to represent the typedef itself.  */
20128         gen_typedef_die (decl, context_die);
20129       break;
20130
20131     case LABEL_DECL:
20132       if (debug_info_level >= DINFO_LEVEL_NORMAL)
20133         gen_label_die (decl, context_die);
20134       break;
20135
20136     case VAR_DECL:
20137     case RESULT_DECL:
20138       /* If we are in terse mode, don't generate any DIEs to represent any
20139          variable declarations or definitions.  */
20140       if (debug_info_level <= DINFO_LEVEL_TERSE)
20141         break;
20142
20143       /* Output any DIEs that are needed to specify the type of this data
20144          object.  */
20145       if (decl_by_reference_p (decl_or_origin))
20146         gen_type_die (TREE_TYPE (TREE_TYPE (decl_or_origin)), context_die);
20147       else
20148         gen_type_die (TREE_TYPE (decl_or_origin), context_die);
20149
20150       /* And its containing type.  */
20151       class_origin = decl_class_context (decl_or_origin);
20152       if (class_origin != NULL_TREE)
20153         gen_type_die_for_member (class_origin, decl_or_origin, context_die);
20154
20155       /* And its containing namespace.  */
20156       context_die = declare_in_namespace (decl_or_origin, context_die);
20157
20158       /* Now output the DIE to represent the data object itself.  This gets
20159          complicated because of the possibility that the VAR_DECL really
20160          represents an inlined instance of a formal parameter for an inline
20161          function.  */
20162       ultimate_origin = decl_ultimate_origin (decl_or_origin);
20163       if (ultimate_origin != NULL_TREE
20164           && TREE_CODE (ultimate_origin) == PARM_DECL)
20165         gen_formal_parameter_die (decl, origin,
20166                                   true /* Emit name attribute.  */,
20167                                   context_die);
20168       else
20169         gen_variable_die (decl, origin, context_die);
20170       break;
20171
20172     case FIELD_DECL:
20173       /* Ignore the nameless fields that are used to skip bits but handle C++
20174          anonymous unions and structs.  */
20175       if (DECL_NAME (decl) != NULL_TREE
20176           || TREE_CODE (TREE_TYPE (decl)) == UNION_TYPE
20177           || TREE_CODE (TREE_TYPE (decl)) == RECORD_TYPE)
20178         {
20179           gen_type_die (member_declared_type (decl), context_die);
20180           gen_field_die (decl, context_die);
20181         }
20182       break;
20183
20184     case PARM_DECL:
20185       if (DECL_BY_REFERENCE (decl_or_origin))
20186         gen_type_die (TREE_TYPE (TREE_TYPE (decl_or_origin)), context_die);
20187       else
20188         gen_type_die (TREE_TYPE (decl_or_origin), context_die);
20189       gen_formal_parameter_die (decl, origin,
20190                                 true /* Emit name attribute.  */,
20191                                 context_die);
20192       break;
20193
20194     case NAMESPACE_DECL:
20195     case IMPORTED_DECL:
20196       if (dwarf_version >= 3 || !dwarf_strict)
20197         gen_namespace_die (decl, context_die);
20198       break;
20199
20200     default:
20201       /* Probably some frontend-internal decl.  Assume we don't care.  */
20202       gcc_assert ((int)TREE_CODE (decl) > NUM_TREE_CODES);
20203       break;
20204     }
20205 }
20206 \f
20207 /* Output debug information for global decl DECL.  Called from toplev.c after
20208    compilation proper has finished.  */
20209
20210 static void
20211 dwarf2out_global_decl (tree decl)
20212 {
20213   /* Output DWARF2 information for file-scope tentative data object
20214      declarations, file-scope (extern) function declarations (which
20215      had no corresponding body) and file-scope tagged type declarations
20216      and definitions which have not yet been forced out.  */
20217   if (TREE_CODE (decl) != FUNCTION_DECL || !DECL_INITIAL (decl))
20218     dwarf2out_decl (decl);
20219 }
20220
20221 /* Output debug information for type decl DECL.  Called from toplev.c
20222    and from language front ends (to record built-in types).  */
20223 static void
20224 dwarf2out_type_decl (tree decl, int local)
20225 {
20226   if (!local)
20227     dwarf2out_decl (decl);
20228 }
20229
20230 /* Output debug information for imported module or decl DECL.
20231    NAME is non-NULL name in the lexical block if the decl has been renamed.
20232    LEXICAL_BLOCK is the lexical block (which TREE_CODE is a BLOCK)
20233    that DECL belongs to.
20234    LEXICAL_BLOCK_DIE is the DIE of LEXICAL_BLOCK.  */
20235 static void
20236 dwarf2out_imported_module_or_decl_1 (tree decl,
20237                                      tree name,
20238                                      tree lexical_block,
20239                                      dw_die_ref lexical_block_die)
20240 {
20241   expanded_location xloc;
20242   dw_die_ref imported_die = NULL;
20243   dw_die_ref at_import_die;
20244
20245   if (TREE_CODE (decl) == IMPORTED_DECL)
20246     {
20247       xloc = expand_location (DECL_SOURCE_LOCATION (decl));
20248       decl = IMPORTED_DECL_ASSOCIATED_DECL (decl);
20249       gcc_assert (decl);
20250     }
20251   else
20252     xloc = expand_location (input_location);
20253
20254   if (TREE_CODE (decl) == TYPE_DECL || TREE_CODE (decl) == CONST_DECL)
20255     {
20256       at_import_die = force_type_die (TREE_TYPE (decl));
20257       /* For namespace N { typedef void T; } using N::T; base_type_die
20258          returns NULL, but DW_TAG_imported_declaration requires
20259          the DW_AT_import tag.  Force creation of DW_TAG_typedef.  */
20260       if (!at_import_die)
20261         {
20262           gcc_assert (TREE_CODE (decl) == TYPE_DECL);
20263           gen_typedef_die (decl, get_context_die (DECL_CONTEXT (decl)));
20264           at_import_die = lookup_type_die (TREE_TYPE (decl));
20265           gcc_assert (at_import_die);
20266         }
20267     }
20268   else
20269     {
20270       at_import_die = lookup_decl_die (decl);
20271       if (!at_import_die)
20272         {
20273           /* If we're trying to avoid duplicate debug info, we may not have
20274              emitted the member decl for this field.  Emit it now.  */
20275           if (TREE_CODE (decl) == FIELD_DECL)
20276             {
20277               tree type = DECL_CONTEXT (decl);
20278
20279               if (TYPE_CONTEXT (type)
20280                   && TYPE_P (TYPE_CONTEXT (type))
20281                   && !should_emit_struct_debug (TYPE_CONTEXT (type),
20282                                                 DINFO_USAGE_DIR_USE))
20283                 return;
20284               gen_type_die_for_member (type, decl,
20285                                        get_context_die (TYPE_CONTEXT (type)));
20286             }
20287           at_import_die = force_decl_die (decl);
20288         }
20289     }
20290
20291   if (TREE_CODE (decl) == NAMESPACE_DECL)
20292     {
20293       if (dwarf_version >= 3 || !dwarf_strict)
20294         imported_die = new_die (DW_TAG_imported_module,
20295                                 lexical_block_die,
20296                                 lexical_block);
20297       else
20298         return;
20299     }
20300   else
20301     imported_die = new_die (DW_TAG_imported_declaration,
20302                             lexical_block_die,
20303                             lexical_block);
20304
20305   add_AT_file (imported_die, DW_AT_decl_file, lookup_filename (xloc.file));
20306   add_AT_unsigned (imported_die, DW_AT_decl_line, xloc.line);
20307   if (name)
20308     add_AT_string (imported_die, DW_AT_name,
20309                    IDENTIFIER_POINTER (name));
20310   add_AT_die_ref (imported_die, DW_AT_import, at_import_die);
20311 }
20312
20313 /* Output debug information for imported module or decl DECL.
20314    NAME is non-NULL name in context if the decl has been renamed.
20315    CHILD is true if decl is one of the renamed decls as part of
20316    importing whole module.  */
20317
20318 static void
20319 dwarf2out_imported_module_or_decl (tree decl, tree name, tree context,
20320                                    bool child)
20321 {
20322   /* dw_die_ref at_import_die;  */
20323   dw_die_ref scope_die;
20324
20325   if (debug_info_level <= DINFO_LEVEL_TERSE)
20326     return;
20327
20328   gcc_assert (decl);
20329
20330   /* To emit DW_TAG_imported_module or DW_TAG_imported_decl, we need two DIEs.
20331      We need decl DIE for reference and scope die. First, get DIE for the decl
20332      itself.  */
20333
20334   /* Get the scope die for decl context. Use comp_unit_die for global module
20335      or decl. If die is not found for non globals, force new die.  */
20336   if (context
20337       && TYPE_P (context)
20338       && !should_emit_struct_debug (context, DINFO_USAGE_DIR_USE))
20339     return;
20340
20341   if (!(dwarf_version >= 3 || !dwarf_strict))
20342     return;
20343
20344   scope_die = get_context_die (context);
20345
20346   if (child)
20347     {
20348       gcc_assert (scope_die->die_child);
20349       gcc_assert (scope_die->die_child->die_tag == DW_TAG_imported_module);
20350       gcc_assert (TREE_CODE (decl) != NAMESPACE_DECL);
20351       scope_die = scope_die->die_child;
20352     }
20353
20354   /* OK, now we have DIEs for decl as well as scope. Emit imported die.  */
20355   dwarf2out_imported_module_or_decl_1 (decl, name, context, scope_die);
20356
20357 }
20358
20359 /* Write the debugging output for DECL.  */
20360
20361 void
20362 dwarf2out_decl (tree decl)
20363 {
20364   dw_die_ref context_die = comp_unit_die;
20365
20366   switch (TREE_CODE (decl))
20367     {
20368     case ERROR_MARK:
20369       return;
20370
20371     case FUNCTION_DECL:
20372       /* What we would really like to do here is to filter out all mere
20373          file-scope declarations of file-scope functions which are never
20374          referenced later within this translation unit (and keep all of ones
20375          that *are* referenced later on) but we aren't clairvoyant, so we have
20376          no idea which functions will be referenced in the future (i.e. later
20377          on within the current translation unit). So here we just ignore all
20378          file-scope function declarations which are not also definitions.  If
20379          and when the debugger needs to know something about these functions,
20380          it will have to hunt around and find the DWARF information associated
20381          with the definition of the function.
20382
20383          We can't just check DECL_EXTERNAL to find out which FUNCTION_DECL
20384          nodes represent definitions and which ones represent mere
20385          declarations.  We have to check DECL_INITIAL instead. That's because
20386          the C front-end supports some weird semantics for "extern inline"
20387          function definitions.  These can get inlined within the current
20388          translation unit (and thus, we need to generate Dwarf info for their
20389          abstract instances so that the Dwarf info for the concrete inlined
20390          instances can have something to refer to) but the compiler never
20391          generates any out-of-lines instances of such things (despite the fact
20392          that they *are* definitions).
20393
20394          The important point is that the C front-end marks these "extern
20395          inline" functions as DECL_EXTERNAL, but we need to generate DWARF for
20396          them anyway. Note that the C++ front-end also plays some similar games
20397          for inline function definitions appearing within include files which
20398          also contain `#pragma interface' pragmas.  */
20399       if (DECL_INITIAL (decl) == NULL_TREE)
20400         return;
20401
20402       /* If we're a nested function, initially use a parent of NULL; if we're
20403          a plain function, this will be fixed up in decls_for_scope.  If
20404          we're a method, it will be ignored, since we already have a DIE.  */
20405       if (decl_function_context (decl)
20406           /* But if we're in terse mode, we don't care about scope.  */
20407           && debug_info_level > DINFO_LEVEL_TERSE)
20408         context_die = NULL;
20409       break;
20410
20411     case VAR_DECL:
20412       /* Ignore this VAR_DECL if it refers to a file-scope extern data object
20413          declaration and if the declaration was never even referenced from
20414          within this entire compilation unit.  We suppress these DIEs in
20415          order to save space in the .debug section (by eliminating entries
20416          which are probably useless).  Note that we must not suppress
20417          block-local extern declarations (whether used or not) because that
20418          would screw-up the debugger's name lookup mechanism and cause it to
20419          miss things which really ought to be in scope at a given point.  */
20420       if (DECL_EXTERNAL (decl) && !TREE_USED (decl))
20421         return;
20422
20423       /* For local statics lookup proper context die.  */
20424       if (TREE_STATIC (decl) && decl_function_context (decl))
20425         context_die = lookup_decl_die (DECL_CONTEXT (decl));
20426
20427       /* If we are in terse mode, don't generate any DIEs to represent any
20428          variable declarations or definitions.  */
20429       if (debug_info_level <= DINFO_LEVEL_TERSE)
20430         return;
20431       break;
20432
20433     case CONST_DECL:
20434       if (debug_info_level <= DINFO_LEVEL_TERSE)
20435         return;
20436       if (!is_fortran ())
20437         return;
20438       if (TREE_STATIC (decl) && decl_function_context (decl))
20439         context_die = lookup_decl_die (DECL_CONTEXT (decl));
20440       break;
20441
20442     case NAMESPACE_DECL:
20443     case IMPORTED_DECL:
20444       if (debug_info_level <= DINFO_LEVEL_TERSE)
20445         return;
20446       if (lookup_decl_die (decl) != NULL)
20447         return;
20448       break;
20449
20450     case TYPE_DECL:
20451       /* Don't emit stubs for types unless they are needed by other DIEs.  */
20452       if (TYPE_DECL_SUPPRESS_DEBUG (decl))
20453         return;
20454
20455       /* Don't bother trying to generate any DIEs to represent any of the
20456          normal built-in types for the language we are compiling.  */
20457       if (DECL_IS_BUILTIN (decl))
20458         {
20459           /* OK, we need to generate one for `bool' so GDB knows what type
20460              comparisons have.  */
20461           if (is_cxx ()
20462               && TREE_CODE (TREE_TYPE (decl)) == BOOLEAN_TYPE
20463               && ! DECL_IGNORED_P (decl))
20464             modified_type_die (TREE_TYPE (decl), 0, 0, NULL);
20465
20466           return;
20467         }
20468
20469       /* If we are in terse mode, don't generate any DIEs for types.  */
20470       if (debug_info_level <= DINFO_LEVEL_TERSE)
20471         return;
20472
20473       /* If we're a function-scope tag, initially use a parent of NULL;
20474          this will be fixed up in decls_for_scope.  */
20475       if (decl_function_context (decl))
20476         context_die = NULL;
20477
20478       break;
20479
20480     default:
20481       return;
20482     }
20483
20484   gen_decl_die (decl, NULL, context_die);
20485 }
20486
20487 /* Write the debugging output for DECL.  */
20488
20489 static void
20490 dwarf2out_function_decl (tree decl)
20491 {
20492   dwarf2out_decl (decl);
20493
20494   htab_empty (decl_loc_table);
20495 }
20496
20497 /* Output a marker (i.e. a label) for the beginning of the generated code for
20498    a lexical block.  */
20499
20500 static void
20501 dwarf2out_begin_block (unsigned int line ATTRIBUTE_UNUSED,
20502                        unsigned int blocknum)
20503 {
20504   switch_to_section (current_function_section ());
20505   ASM_OUTPUT_DEBUG_LABEL (asm_out_file, BLOCK_BEGIN_LABEL, blocknum);
20506 }
20507
20508 /* Output a marker (i.e. a label) for the end of the generated code for a
20509    lexical block.  */
20510
20511 static void
20512 dwarf2out_end_block (unsigned int line ATTRIBUTE_UNUSED, unsigned int blocknum)
20513 {
20514   switch_to_section (current_function_section ());
20515   ASM_OUTPUT_DEBUG_LABEL (asm_out_file, BLOCK_END_LABEL, blocknum);
20516 }
20517
20518 /* Returns nonzero if it is appropriate not to emit any debugging
20519    information for BLOCK, because it doesn't contain any instructions.
20520
20521    Don't allow this for blocks with nested functions or local classes
20522    as we would end up with orphans, and in the presence of scheduling
20523    we may end up calling them anyway.  */
20524
20525 static bool
20526 dwarf2out_ignore_block (const_tree block)
20527 {
20528   tree decl;
20529   unsigned int i;
20530
20531   for (decl = BLOCK_VARS (block); decl; decl = TREE_CHAIN (decl))
20532     if (TREE_CODE (decl) == FUNCTION_DECL
20533         || (TREE_CODE (decl) == TYPE_DECL && TYPE_DECL_IS_STUB (decl)))
20534       return 0;
20535   for (i = 0; i < BLOCK_NUM_NONLOCALIZED_VARS (block); i++)
20536     {
20537       decl = BLOCK_NONLOCALIZED_VAR (block, i);
20538       if (TREE_CODE (decl) == FUNCTION_DECL
20539           || (TREE_CODE (decl) == TYPE_DECL && TYPE_DECL_IS_STUB (decl)))
20540       return 0;
20541     }
20542
20543   return 1;
20544 }
20545
20546 /* Hash table routines for file_hash.  */
20547
20548 static int
20549 file_table_eq (const void *p1_p, const void *p2_p)
20550 {
20551   const struct dwarf_file_data *const p1 =
20552     (const struct dwarf_file_data *) p1_p;
20553   const char *const p2 = (const char *) p2_p;
20554   return strcmp (p1->filename, p2) == 0;
20555 }
20556
20557 static hashval_t
20558 file_table_hash (const void *p_p)
20559 {
20560   const struct dwarf_file_data *const p = (const struct dwarf_file_data *) p_p;
20561   return htab_hash_string (p->filename);
20562 }
20563
20564 /* Lookup FILE_NAME (in the list of filenames that we know about here in
20565    dwarf2out.c) and return its "index".  The index of each (known) filename is
20566    just a unique number which is associated with only that one filename.  We
20567    need such numbers for the sake of generating labels (in the .debug_sfnames
20568    section) and references to those files numbers (in the .debug_srcinfo
20569    and.debug_macinfo sections).  If the filename given as an argument is not
20570    found in our current list, add it to the list and assign it the next
20571    available unique index number.  In order to speed up searches, we remember
20572    the index of the filename was looked up last.  This handles the majority of
20573    all searches.  */
20574
20575 static struct dwarf_file_data *
20576 lookup_filename (const char *file_name)
20577 {
20578   void ** slot;
20579   struct dwarf_file_data * created;
20580
20581   /* Check to see if the file name that was searched on the previous
20582      call matches this file name.  If so, return the index.  */
20583   if (file_table_last_lookup
20584       && (file_name == file_table_last_lookup->filename
20585           || strcmp (file_table_last_lookup->filename, file_name) == 0))
20586     return file_table_last_lookup;
20587
20588   /* Didn't match the previous lookup, search the table.  */
20589   slot = htab_find_slot_with_hash (file_table, file_name,
20590                                    htab_hash_string (file_name), INSERT);
20591   if (*slot)
20592     return (struct dwarf_file_data *) *slot;
20593
20594   created = GGC_NEW (struct dwarf_file_data);
20595   created->filename = file_name;
20596   created->emitted_number = 0;
20597   *slot = created;
20598   return created;
20599 }
20600
20601 /* If the assembler will construct the file table, then translate the compiler
20602    internal file table number into the assembler file table number, and emit
20603    a .file directive if we haven't already emitted one yet.  The file table
20604    numbers are different because we prune debug info for unused variables and
20605    types, which may include filenames.  */
20606
20607 static int
20608 maybe_emit_file (struct dwarf_file_data * fd)
20609 {
20610   if (! fd->emitted_number)
20611     {
20612       if (last_emitted_file)
20613         fd->emitted_number = last_emitted_file->emitted_number + 1;
20614       else
20615         fd->emitted_number = 1;
20616       last_emitted_file = fd;
20617
20618       if (DWARF2_ASM_LINE_DEBUG_INFO)
20619         {
20620           fprintf (asm_out_file, "\t.file %u ", fd->emitted_number);
20621           output_quoted_string (asm_out_file,
20622                                 remap_debug_filename (fd->filename));
20623           fputc ('\n', asm_out_file);
20624         }
20625     }
20626
20627   return fd->emitted_number;
20628 }
20629
20630 /* Schedule generation of a DW_AT_const_value attribute to DIE.
20631    That generation should happen after function debug info has been
20632    generated. The value of the attribute is the constant value of ARG.  */
20633
20634 static void
20635 append_entry_to_tmpl_value_parm_die_table (dw_die_ref die, tree arg)
20636 {
20637   die_arg_entry entry;
20638
20639   if (!die || !arg)
20640     return;
20641
20642   if (!tmpl_value_parm_die_table)
20643     tmpl_value_parm_die_table
20644       = VEC_alloc (die_arg_entry, gc, 32);
20645
20646   entry.die = die;
20647   entry.arg = arg;
20648   VEC_safe_push (die_arg_entry, gc,
20649                  tmpl_value_parm_die_table,
20650                  &entry);
20651 }
20652
20653 /* Add a DW_AT_const_value attribute to DIEs that were scheduled
20654    by append_entry_to_tmpl_value_parm_die_table. This function must
20655    be called after function DIEs have been generated.  */
20656
20657 static void
20658 gen_remaining_tmpl_value_param_die_attribute (void)
20659 {
20660   if (tmpl_value_parm_die_table)
20661     {
20662       unsigned i;
20663       die_arg_entry *e;
20664
20665       for (i = 0;
20666            VEC_iterate (die_arg_entry, tmpl_value_parm_die_table, i, e);
20667            i++)
20668         tree_add_const_value_attribute (e->die, e->arg);
20669     }
20670 }
20671
20672
20673 /* Replace DW_AT_name for the decl with name.  */
20674
20675 static void
20676 dwarf2out_set_name (tree decl, tree name)
20677 {
20678   dw_die_ref die;
20679   dw_attr_ref attr;
20680   const char *dname;
20681
20682   die = TYPE_SYMTAB_DIE (decl);
20683   if (!die)
20684     return;
20685
20686   dname = dwarf2_name (name, 0);
20687   if (!dname)
20688     return;
20689
20690   attr = get_AT (die, DW_AT_name);
20691   if (attr)
20692     {
20693       struct indirect_string_node *node;
20694
20695       node = find_AT_string (dname);
20696       /* replace the string.  */
20697       attr->dw_attr_val.v.val_str = node;
20698     }
20699
20700   else
20701     add_name_attribute (die, dname);
20702 }
20703
20704 /* Called by the final INSN scan whenever we see a direct function call.
20705    Make an entry into the direct call table, recording the point of call
20706    and a reference to the target function's debug entry.  */
20707
20708 static void
20709 dwarf2out_direct_call (tree targ)
20710 {
20711   dcall_entry e;
20712   tree origin = decl_ultimate_origin (targ);
20713
20714   /* If this is a clone, use the abstract origin as the target.  */
20715   if (origin)
20716     targ = origin;
20717
20718   e.poc_label_num = poc_label_num++;
20719   e.poc_decl = current_function_decl;
20720   e.targ_die = force_decl_die (targ);
20721   VEC_safe_push (dcall_entry, gc, dcall_table, &e);
20722
20723   /* Drop a label at the return point to mark the point of call.  */
20724   ASM_OUTPUT_DEBUG_LABEL (asm_out_file, "LPOC", e.poc_label_num);
20725 }
20726
20727 /* Returns a hash value for X (which really is a struct vcall_insn).  */
20728
20729 static hashval_t
20730 vcall_insn_table_hash (const void *x)
20731 {
20732   return (hashval_t) ((const struct vcall_insn *) x)->insn_uid;
20733 }
20734
20735 /* Return nonzero if insn_uid of struct vcall_insn *X is the same as
20736    insnd_uid of *Y.  */
20737
20738 static int
20739 vcall_insn_table_eq (const void *x, const void *y)
20740 {
20741   return (((const struct vcall_insn *) x)->insn_uid
20742           == ((const struct vcall_insn *) y)->insn_uid);
20743 }
20744
20745 /* Associate VTABLE_SLOT with INSN_UID in the VCALL_INSN_TABLE.  */
20746
20747 static void
20748 store_vcall_insn (unsigned int vtable_slot, int insn_uid)
20749 {
20750   struct vcall_insn *item = GGC_NEW (struct vcall_insn);
20751   struct vcall_insn **slot;
20752
20753   gcc_assert (item);
20754   item->insn_uid = insn_uid;
20755   item->vtable_slot = vtable_slot;
20756   slot = (struct vcall_insn **)
20757       htab_find_slot_with_hash (vcall_insn_table, &item,
20758                                 (hashval_t) insn_uid, INSERT);
20759   *slot = item;
20760 }
20761
20762 /* Return the VTABLE_SLOT associated with INSN_UID.  */
20763
20764 static unsigned int
20765 lookup_vcall_insn (unsigned int insn_uid)
20766 {
20767   struct vcall_insn item;
20768   struct vcall_insn *p;
20769
20770   item.insn_uid = insn_uid;
20771   item.vtable_slot = 0;
20772   p = (struct vcall_insn *) htab_find_with_hash (vcall_insn_table,
20773                                                  (void *) &item,
20774                                                  (hashval_t) insn_uid);
20775   if (p == NULL)
20776     return (unsigned int) -1;
20777   return p->vtable_slot;
20778 }
20779
20780
20781 /* Called when lowering indirect calls to RTL.  We make a note of INSN_UID
20782    and the OBJ_TYPE_REF_TOKEN from ADDR.  For C++ virtual calls, the token
20783    is the vtable slot index that we will need to put in the virtual call
20784    table later.  */
20785
20786 static void
20787 dwarf2out_virtual_call_token (tree addr, int insn_uid)
20788 {
20789   if (is_cxx() && TREE_CODE (addr) == OBJ_TYPE_REF)
20790     {
20791       tree token = OBJ_TYPE_REF_TOKEN (addr);
20792       if (TREE_CODE (token) == INTEGER_CST)
20793         store_vcall_insn (TREE_INT_CST_LOW (token), insn_uid);
20794     }
20795 }
20796
20797 /* Called when scheduling RTL, when a CALL_INSN is split.  Copies the
20798    OBJ_TYPE_REF_TOKEN previously associated with OLD_INSN and associates it
20799    with NEW_INSN.  */
20800
20801 static void
20802 dwarf2out_copy_call_info (rtx old_insn, rtx new_insn)
20803 {
20804   unsigned int vtable_slot = lookup_vcall_insn (INSN_UID (old_insn));
20805
20806   if (vtable_slot != (unsigned int) -1)
20807     store_vcall_insn (vtable_slot, INSN_UID (new_insn));
20808 }
20809
20810 /* Called by the final INSN scan whenever we see a virtual function call.
20811    Make an entry into the virtual call table, recording the point of call
20812    and the slot index of the vtable entry used to call the virtual member
20813    function.  The slot index was associated with the INSN_UID during the
20814    lowering to RTL.  */
20815
20816 static void
20817 dwarf2out_virtual_call (int insn_uid)
20818 {
20819   unsigned int vtable_slot = lookup_vcall_insn (insn_uid);
20820   vcall_entry e;
20821
20822   if (vtable_slot == (unsigned int) -1)
20823     return;
20824
20825   e.poc_label_num = poc_label_num++;
20826   e.vtable_slot = vtable_slot;
20827   VEC_safe_push (vcall_entry, gc, vcall_table, &e);
20828
20829   /* Drop a label at the return point to mark the point of call.  */
20830   ASM_OUTPUT_DEBUG_LABEL (asm_out_file, "LPOC", e.poc_label_num);
20831 }
20832
20833 /* Called by the final INSN scan whenever we see a var location.  We
20834    use it to drop labels in the right places, and throw the location in
20835    our lookup table.  */
20836
20837 static void
20838 dwarf2out_var_location (rtx loc_note)
20839 {
20840   char loclabel[MAX_ARTIFICIAL_LABEL_BYTES + 2];
20841   struct var_loc_node *newloc;
20842   rtx next_real;
20843   static const char *last_label;
20844   static const char *last_postcall_label;
20845   static bool last_in_cold_section_p;
20846   tree decl;
20847
20848   if (!DECL_P (NOTE_VAR_LOCATION_DECL (loc_note)))
20849     return;
20850
20851   next_real = next_real_insn (loc_note);
20852   /* If there are no instructions which would be affected by this note,
20853      don't do anything.  */
20854   if (next_real == NULL_RTX)
20855     return;
20856
20857   /* If there were any real insns between note we processed last time
20858      and this note (or if it is the first note), clear
20859      last_{,postcall_}label so that they are not reused this time.  */
20860   if (last_var_location_insn == NULL_RTX
20861       || last_var_location_insn != next_real
20862       || last_in_cold_section_p != in_cold_section_p)
20863     {
20864       last_label = NULL;
20865       last_postcall_label = NULL;
20866     }
20867
20868   decl = NOTE_VAR_LOCATION_DECL (loc_note);
20869   newloc = add_var_loc_to_decl (decl, loc_note,
20870                                 NOTE_DURING_CALL_P (loc_note)
20871                                 ? last_postcall_label : last_label);
20872   if (newloc == NULL)
20873     return;
20874
20875   /* If there were no real insns between note we processed last time
20876      and this note, use the label we emitted last time.  Otherwise
20877      create a new label and emit it.  */
20878   if (last_label == NULL)
20879     {
20880       ASM_GENERATE_INTERNAL_LABEL (loclabel, "LVL", loclabel_num);
20881       ASM_OUTPUT_DEBUG_LABEL (asm_out_file, "LVL", loclabel_num);
20882       loclabel_num++;
20883       last_label = ggc_strdup (loclabel);
20884     }
20885
20886   if (!NOTE_DURING_CALL_P (loc_note))
20887     newloc->label = last_label;
20888   else
20889     {
20890       if (!last_postcall_label)
20891         {
20892           sprintf (loclabel, "%s-1", last_label);
20893           last_postcall_label = ggc_strdup (loclabel);
20894         }
20895       newloc->label = last_postcall_label;
20896     }
20897
20898   last_var_location_insn = next_real;
20899   last_in_cold_section_p = in_cold_section_p;
20900 }
20901
20902 /* We need to reset the locations at the beginning of each
20903    function. We can't do this in the end_function hook, because the
20904    declarations that use the locations won't have been output when
20905    that hook is called.  Also compute have_multiple_function_sections here.  */
20906
20907 static void
20908 dwarf2out_begin_function (tree fun)
20909 {
20910   if (function_section (fun) != text_section)
20911     have_multiple_function_sections = true;
20912
20913   dwarf2out_note_section_used ();
20914 }
20915
20916 /* Output a label to mark the beginning of a source code line entry
20917    and record information relating to this source line, in
20918    'line_info_table' for later output of the .debug_line section.  */
20919
20920 static void
20921 dwarf2out_source_line (unsigned int line, const char *filename,
20922                        int discriminator, bool is_stmt)
20923 {
20924   static bool last_is_stmt = true;
20925
20926   if (debug_info_level >= DINFO_LEVEL_NORMAL
20927       && line != 0)
20928     {
20929       int file_num = maybe_emit_file (lookup_filename (filename));
20930
20931       switch_to_section (current_function_section ());
20932
20933       /* If requested, emit something human-readable.  */
20934       if (flag_debug_asm)
20935         fprintf (asm_out_file, "\t%s %s:%d\n", ASM_COMMENT_START,
20936                  filename, line);
20937
20938       if (DWARF2_ASM_LINE_DEBUG_INFO)
20939         {
20940           /* Emit the .loc directive understood by GNU as.  */
20941           fprintf (asm_out_file, "\t.loc %d %d 0", file_num, line);
20942           if (is_stmt != last_is_stmt)
20943             {
20944               fprintf (asm_out_file, " is_stmt %d", is_stmt ? 1 : 0);
20945               last_is_stmt = is_stmt;
20946             }
20947           if (SUPPORTS_DISCRIMINATOR && discriminator != 0)
20948             fprintf (asm_out_file, " discriminator %d", discriminator);
20949           fputc ('\n', asm_out_file);
20950
20951           /* Indicate that line number info exists.  */
20952           line_info_table_in_use++;
20953         }
20954       else if (function_section (current_function_decl) != text_section)
20955         {
20956           dw_separate_line_info_ref line_info;
20957           targetm.asm_out.internal_label (asm_out_file,
20958                                           SEPARATE_LINE_CODE_LABEL,
20959                                           separate_line_info_table_in_use);
20960
20961           /* Expand the line info table if necessary.  */
20962           if (separate_line_info_table_in_use
20963               == separate_line_info_table_allocated)
20964             {
20965               separate_line_info_table_allocated += LINE_INFO_TABLE_INCREMENT;
20966               separate_line_info_table
20967                 = GGC_RESIZEVEC (dw_separate_line_info_entry,
20968                                  separate_line_info_table,
20969                                  separate_line_info_table_allocated);
20970               memset (separate_line_info_table
20971                        + separate_line_info_table_in_use,
20972                       0,
20973                       (LINE_INFO_TABLE_INCREMENT
20974                        * sizeof (dw_separate_line_info_entry)));
20975             }
20976
20977           /* Add the new entry at the end of the line_info_table.  */
20978           line_info
20979             = &separate_line_info_table[separate_line_info_table_in_use++];
20980           line_info->dw_file_num = file_num;
20981           line_info->dw_line_num = line;
20982           line_info->function = current_function_funcdef_no;
20983         }
20984       else
20985         {
20986           dw_line_info_ref line_info;
20987
20988           targetm.asm_out.internal_label (asm_out_file, LINE_CODE_LABEL,
20989                                      line_info_table_in_use);
20990
20991           /* Expand the line info table if necessary.  */
20992           if (line_info_table_in_use == line_info_table_allocated)
20993             {
20994               line_info_table_allocated += LINE_INFO_TABLE_INCREMENT;
20995               line_info_table
20996                 = GGC_RESIZEVEC (dw_line_info_entry, line_info_table,
20997                                  line_info_table_allocated);
20998               memset (line_info_table + line_info_table_in_use, 0,
20999                       LINE_INFO_TABLE_INCREMENT * sizeof (dw_line_info_entry));
21000             }
21001
21002           /* Add the new entry at the end of the line_info_table.  */
21003           line_info = &line_info_table[line_info_table_in_use++];
21004           line_info->dw_file_num = file_num;
21005           line_info->dw_line_num = line;
21006         }
21007     }
21008 }
21009
21010 /* Record the beginning of a new source file.  */
21011
21012 static void
21013 dwarf2out_start_source_file (unsigned int lineno, const char *filename)
21014 {
21015   if (flag_eliminate_dwarf2_dups && dwarf_version < 4)
21016     {
21017       /* Record the beginning of the file for break_out_includes.  */
21018       dw_die_ref bincl_die;
21019
21020       bincl_die = new_die (DW_TAG_GNU_BINCL, comp_unit_die, NULL);
21021       add_AT_string (bincl_die, DW_AT_name, remap_debug_filename (filename));
21022     }
21023
21024   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
21025     {
21026       int file_num = maybe_emit_file (lookup_filename (filename));
21027
21028       switch_to_section (debug_macinfo_section);
21029       dw2_asm_output_data (1, DW_MACINFO_start_file, "Start new file");
21030       dw2_asm_output_data_uleb128 (lineno, "Included from line number %d",
21031                                    lineno);
21032
21033       dw2_asm_output_data_uleb128 (file_num, "file %s", filename);
21034     }
21035 }
21036
21037 /* Record the end of a source file.  */
21038
21039 static void
21040 dwarf2out_end_source_file (unsigned int lineno ATTRIBUTE_UNUSED)
21041 {
21042   if (flag_eliminate_dwarf2_dups && dwarf_version < 4)
21043     /* Record the end of the file for break_out_includes.  */
21044     new_die (DW_TAG_GNU_EINCL, comp_unit_die, NULL);
21045
21046   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
21047     {
21048       switch_to_section (debug_macinfo_section);
21049       dw2_asm_output_data (1, DW_MACINFO_end_file, "End file");
21050     }
21051 }
21052
21053 /* Called from debug_define in toplev.c.  The `buffer' parameter contains
21054    the tail part of the directive line, i.e. the part which is past the
21055    initial whitespace, #, whitespace, directive-name, whitespace part.  */
21056
21057 static void
21058 dwarf2out_define (unsigned int lineno ATTRIBUTE_UNUSED,
21059                   const char *buffer ATTRIBUTE_UNUSED)
21060 {
21061   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
21062     {
21063       switch_to_section (debug_macinfo_section);
21064       dw2_asm_output_data (1, DW_MACINFO_define, "Define macro");
21065       dw2_asm_output_data_uleb128 (lineno, "At line number %d", lineno);
21066       dw2_asm_output_nstring (buffer, -1, "The macro");
21067     }
21068 }
21069
21070 /* Called from debug_undef in toplev.c.  The `buffer' parameter contains
21071    the tail part of the directive line, i.e. the part which is past the
21072    initial whitespace, #, whitespace, directive-name, whitespace part.  */
21073
21074 static void
21075 dwarf2out_undef (unsigned int lineno ATTRIBUTE_UNUSED,
21076                  const char *buffer ATTRIBUTE_UNUSED)
21077 {
21078   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
21079     {
21080       switch_to_section (debug_macinfo_section);
21081       dw2_asm_output_data (1, DW_MACINFO_undef, "Undefine macro");
21082       dw2_asm_output_data_uleb128 (lineno, "At line number %d", lineno);
21083       dw2_asm_output_nstring (buffer, -1, "The macro");
21084     }
21085 }
21086
21087 /* Set up for Dwarf output at the start of compilation.  */
21088
21089 static void
21090 dwarf2out_init (const char *filename ATTRIBUTE_UNUSED)
21091 {
21092   /* Allocate the file_table.  */
21093   file_table = htab_create_ggc (50, file_table_hash,
21094                                 file_table_eq, NULL);
21095
21096   /* Allocate the decl_die_table.  */
21097   decl_die_table = htab_create_ggc (10, decl_die_table_hash,
21098                                     decl_die_table_eq, NULL);
21099
21100   /* Allocate the decl_loc_table.  */
21101   decl_loc_table = htab_create_ggc (10, decl_loc_table_hash,
21102                                     decl_loc_table_eq, NULL);
21103
21104   /* Allocate the initial hunk of the decl_scope_table.  */
21105   decl_scope_table = VEC_alloc (tree, gc, 256);
21106
21107   /* Allocate the initial hunk of the abbrev_die_table.  */
21108   abbrev_die_table = GGC_CNEWVEC (dw_die_ref, ABBREV_DIE_TABLE_INCREMENT);
21109   abbrev_die_table_allocated = ABBREV_DIE_TABLE_INCREMENT;
21110   /* Zero-th entry is allocated, but unused.  */
21111   abbrev_die_table_in_use = 1;
21112
21113   /* Allocate the initial hunk of the line_info_table.  */
21114   line_info_table = GGC_CNEWVEC (dw_line_info_entry, LINE_INFO_TABLE_INCREMENT);
21115   line_info_table_allocated = LINE_INFO_TABLE_INCREMENT;
21116
21117   /* Zero-th entry is allocated, but unused.  */
21118   line_info_table_in_use = 1;
21119
21120   /* Allocate the pubtypes and pubnames vectors.  */
21121   pubname_table = VEC_alloc (pubname_entry, gc, 32);
21122   pubtype_table = VEC_alloc (pubname_entry, gc, 32);
21123
21124   /* Allocate the table that maps insn UIDs to vtable slot indexes.  */
21125   vcall_insn_table = htab_create_ggc (10, vcall_insn_table_hash,
21126                                       vcall_insn_table_eq, NULL);
21127
21128   /* Generate the initial DIE for the .debug section.  Note that the (string)
21129      value given in the DW_AT_name attribute of the DW_TAG_compile_unit DIE
21130      will (typically) be a relative pathname and that this pathname should be
21131      taken as being relative to the directory from which the compiler was
21132      invoked when the given (base) source file was compiled.  We will fill
21133      in this value in dwarf2out_finish.  */
21134   comp_unit_die = gen_compile_unit_die (NULL);
21135
21136   incomplete_types = VEC_alloc (tree, gc, 64);
21137
21138   used_rtx_array = VEC_alloc (rtx, gc, 32);
21139
21140   debug_info_section = get_section (DEBUG_INFO_SECTION,
21141                                     SECTION_DEBUG, NULL);
21142   debug_abbrev_section = get_section (DEBUG_ABBREV_SECTION,
21143                                       SECTION_DEBUG, NULL);
21144   debug_aranges_section = get_section (DEBUG_ARANGES_SECTION,
21145                                        SECTION_DEBUG, NULL);
21146   debug_macinfo_section = get_section (DEBUG_MACINFO_SECTION,
21147                                        SECTION_DEBUG, NULL);
21148   debug_line_section = get_section (DEBUG_LINE_SECTION,
21149                                     SECTION_DEBUG, NULL);
21150   debug_loc_section = get_section (DEBUG_LOC_SECTION,
21151                                    SECTION_DEBUG, NULL);
21152   debug_pubnames_section = get_section (DEBUG_PUBNAMES_SECTION,
21153                                         SECTION_DEBUG, NULL);
21154   debug_pubtypes_section = get_section (DEBUG_PUBTYPES_SECTION,
21155                                         SECTION_DEBUG, NULL);
21156   debug_dcall_section = get_section (DEBUG_DCALL_SECTION,
21157                                      SECTION_DEBUG, NULL);
21158   debug_vcall_section = get_section (DEBUG_VCALL_SECTION,
21159                                      SECTION_DEBUG, NULL);
21160   debug_str_section = get_section (DEBUG_STR_SECTION,
21161                                    DEBUG_STR_SECTION_FLAGS, NULL);
21162   debug_ranges_section = get_section (DEBUG_RANGES_SECTION,
21163                                       SECTION_DEBUG, NULL);
21164   debug_frame_section = get_section (DEBUG_FRAME_SECTION,
21165                                      SECTION_DEBUG, NULL);
21166
21167   ASM_GENERATE_INTERNAL_LABEL (text_end_label, TEXT_END_LABEL, 0);
21168   ASM_GENERATE_INTERNAL_LABEL (abbrev_section_label,
21169                                DEBUG_ABBREV_SECTION_LABEL, 0);
21170   ASM_GENERATE_INTERNAL_LABEL (text_section_label, TEXT_SECTION_LABEL, 0);
21171   ASM_GENERATE_INTERNAL_LABEL (cold_text_section_label,
21172                                COLD_TEXT_SECTION_LABEL, 0);
21173   ASM_GENERATE_INTERNAL_LABEL (cold_end_label, COLD_END_LABEL, 0);
21174
21175   ASM_GENERATE_INTERNAL_LABEL (debug_info_section_label,
21176                                DEBUG_INFO_SECTION_LABEL, 0);
21177   ASM_GENERATE_INTERNAL_LABEL (debug_line_section_label,
21178                                DEBUG_LINE_SECTION_LABEL, 0);
21179   ASM_GENERATE_INTERNAL_LABEL (ranges_section_label,
21180                                DEBUG_RANGES_SECTION_LABEL, 0);
21181   switch_to_section (debug_abbrev_section);
21182   ASM_OUTPUT_LABEL (asm_out_file, abbrev_section_label);
21183   switch_to_section (debug_info_section);
21184   ASM_OUTPUT_LABEL (asm_out_file, debug_info_section_label);
21185   switch_to_section (debug_line_section);
21186   ASM_OUTPUT_LABEL (asm_out_file, debug_line_section_label);
21187
21188   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
21189     {
21190       switch_to_section (debug_macinfo_section);
21191       ASM_GENERATE_INTERNAL_LABEL (macinfo_section_label,
21192                                    DEBUG_MACINFO_SECTION_LABEL, 0);
21193       ASM_OUTPUT_LABEL (asm_out_file, macinfo_section_label);
21194     }
21195
21196   switch_to_section (text_section);
21197   ASM_OUTPUT_LABEL (asm_out_file, text_section_label);
21198   if (flag_reorder_blocks_and_partition)
21199     {
21200       cold_text_section = unlikely_text_section ();
21201       switch_to_section (cold_text_section);
21202       ASM_OUTPUT_LABEL (asm_out_file, cold_text_section_label);
21203     }
21204
21205 }
21206
21207 /* Called before cgraph_optimize starts outputtting functions, variables
21208    and toplevel asms into assembly.  */
21209
21210 static void
21211 dwarf2out_assembly_start (void)
21212 {
21213   if (HAVE_GAS_CFI_SECTIONS_DIRECTIVE && dwarf2out_do_cfi_asm ())
21214     {
21215 #ifndef TARGET_UNWIND_INFO
21216       if (USING_SJLJ_EXCEPTIONS || (!flag_unwind_tables && !flag_exceptions))
21217 #endif
21218         fprintf (asm_out_file, "\t.cfi_sections\t.debug_frame\n");
21219     }
21220 }
21221
21222 /* A helper function for dwarf2out_finish called through
21223    htab_traverse.  Emit one queued .debug_str string.  */
21224
21225 static int
21226 output_indirect_string (void **h, void *v ATTRIBUTE_UNUSED)
21227 {
21228   struct indirect_string_node *node = (struct indirect_string_node *) *h;
21229
21230   if (node->label && node->refcount)
21231     {
21232       switch_to_section (debug_str_section);
21233       ASM_OUTPUT_LABEL (asm_out_file, node->label);
21234       assemble_string (node->str, strlen (node->str) + 1);
21235     }
21236
21237   return 1;
21238 }
21239
21240 #if ENABLE_ASSERT_CHECKING
21241 /* Verify that all marks are clear.  */
21242
21243 static void
21244 verify_marks_clear (dw_die_ref die)
21245 {
21246   dw_die_ref c;
21247
21248   gcc_assert (! die->die_mark);
21249   FOR_EACH_CHILD (die, c, verify_marks_clear (c));
21250 }
21251 #endif /* ENABLE_ASSERT_CHECKING */
21252
21253 /* Clear the marks for a die and its children.
21254    Be cool if the mark isn't set.  */
21255
21256 static void
21257 prune_unmark_dies (dw_die_ref die)
21258 {
21259   dw_die_ref c;
21260
21261   if (die->die_mark)
21262     die->die_mark = 0;
21263   FOR_EACH_CHILD (die, c, prune_unmark_dies (c));
21264 }
21265
21266 /* Given DIE that we're marking as used, find any other dies
21267    it references as attributes and mark them as used.  */
21268
21269 static void
21270 prune_unused_types_walk_attribs (dw_die_ref die)
21271 {
21272   dw_attr_ref a;
21273   unsigned ix;
21274
21275   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
21276     {
21277       if (a->dw_attr_val.val_class == dw_val_class_die_ref)
21278         {
21279           /* A reference to another DIE.
21280              Make sure that it will get emitted.
21281              If it was broken out into a comdat group, don't follow it.  */
21282           if (dwarf_version < 4
21283               || a->dw_attr == DW_AT_specification
21284               || a->dw_attr_val.v.val_die_ref.die->die_id.die_type_node == NULL)
21285             prune_unused_types_mark (a->dw_attr_val.v.val_die_ref.die, 1);
21286         }
21287       /* Set the string's refcount to 0 so that prune_unused_types_mark
21288          accounts properly for it.  */
21289       if (AT_class (a) == dw_val_class_str)
21290         a->dw_attr_val.v.val_str->refcount = 0;
21291     }
21292 }
21293
21294
21295 /* Mark DIE as being used.  If DOKIDS is true, then walk down
21296    to DIE's children.  */
21297
21298 static void
21299 prune_unused_types_mark (dw_die_ref die, int dokids)
21300 {
21301   dw_die_ref c;
21302
21303   if (die->die_mark == 0)
21304     {
21305       /* We haven't done this node yet.  Mark it as used.  */
21306       die->die_mark = 1;
21307
21308       /* We also have to mark its parents as used.
21309          (But we don't want to mark our parents' kids due to this.)  */
21310       if (die->die_parent)
21311         prune_unused_types_mark (die->die_parent, 0);
21312
21313       /* Mark any referenced nodes.  */
21314       prune_unused_types_walk_attribs (die);
21315
21316       /* If this node is a specification,
21317          also mark the definition, if it exists.  */
21318       if (get_AT_flag (die, DW_AT_declaration) && die->die_definition)
21319         prune_unused_types_mark (die->die_definition, 1);
21320     }
21321
21322   if (dokids && die->die_mark != 2)
21323     {
21324       /* We need to walk the children, but haven't done so yet.
21325          Remember that we've walked the kids.  */
21326       die->die_mark = 2;
21327
21328       /* If this is an array type, we need to make sure our
21329          kids get marked, even if they're types.  If we're
21330          breaking out types into comdat sections, do this
21331          for all type definitions.  */
21332       if (die->die_tag == DW_TAG_array_type
21333           || (dwarf_version >= 4
21334               && is_type_die (die) && ! is_declaration_die (die)))
21335         FOR_EACH_CHILD (die, c, prune_unused_types_mark (c, 1));
21336       else
21337         FOR_EACH_CHILD (die, c, prune_unused_types_walk (c));
21338     }
21339 }
21340
21341 /* For local classes, look if any static member functions were emitted
21342    and if so, mark them.  */
21343
21344 static void
21345 prune_unused_types_walk_local_classes (dw_die_ref die)
21346 {
21347   dw_die_ref c;
21348
21349   if (die->die_mark == 2)
21350     return;
21351
21352   switch (die->die_tag)
21353     {
21354     case DW_TAG_structure_type:
21355     case DW_TAG_union_type:
21356     case DW_TAG_class_type:
21357       break;
21358
21359     case DW_TAG_subprogram:
21360       if (!get_AT_flag (die, DW_AT_declaration)
21361           || die->die_definition != NULL)
21362         prune_unused_types_mark (die, 1);
21363       return;
21364
21365     default:
21366       return;
21367     }
21368
21369   /* Mark children.  */
21370   FOR_EACH_CHILD (die, c, prune_unused_types_walk_local_classes (c));
21371 }
21372
21373 /* Walk the tree DIE and mark types that we actually use.  */
21374
21375 static void
21376 prune_unused_types_walk (dw_die_ref die)
21377 {
21378   dw_die_ref c;
21379
21380   /* Don't do anything if this node is already marked and
21381      children have been marked as well.  */
21382   if (die->die_mark == 2)
21383     return;
21384
21385   switch (die->die_tag)
21386     {
21387     case DW_TAG_structure_type:
21388     case DW_TAG_union_type:
21389     case DW_TAG_class_type:
21390       if (die->die_perennial_p)
21391         break;
21392
21393       for (c = die->die_parent; c; c = c->die_parent)
21394         if (c->die_tag == DW_TAG_subprogram)
21395           break;
21396
21397       /* Finding used static member functions inside of classes
21398          is needed just for local classes, because for other classes
21399          static member function DIEs with DW_AT_specification
21400          are emitted outside of the DW_TAG_*_type.  If we ever change
21401          it, we'd need to call this even for non-local classes.  */
21402       if (c)
21403         prune_unused_types_walk_local_classes (die);
21404
21405       /* It's a type node --- don't mark it.  */
21406       return;
21407
21408     case DW_TAG_const_type:
21409     case DW_TAG_packed_type:
21410     case DW_TAG_pointer_type:
21411     case DW_TAG_reference_type:
21412     case DW_TAG_rvalue_reference_type:
21413     case DW_TAG_volatile_type:
21414     case DW_TAG_typedef:
21415     case DW_TAG_array_type:
21416     case DW_TAG_interface_type:
21417     case DW_TAG_friend:
21418     case DW_TAG_variant_part:
21419     case DW_TAG_enumeration_type:
21420     case DW_TAG_subroutine_type:
21421     case DW_TAG_string_type:
21422     case DW_TAG_set_type:
21423     case DW_TAG_subrange_type:
21424     case DW_TAG_ptr_to_member_type:
21425     case DW_TAG_file_type:
21426       if (die->die_perennial_p)
21427         break;
21428
21429       /* It's a type node --- don't mark it.  */
21430       return;
21431
21432     default:
21433       /* Mark everything else.  */
21434       break;
21435   }
21436
21437   if (die->die_mark == 0)
21438     {
21439       die->die_mark = 1;
21440
21441       /* Now, mark any dies referenced from here.  */
21442       prune_unused_types_walk_attribs (die);
21443     }
21444
21445   die->die_mark = 2;
21446
21447   /* Mark children.  */
21448   FOR_EACH_CHILD (die, c, prune_unused_types_walk (c));
21449 }
21450
21451 /* Increment the string counts on strings referred to from DIE's
21452    attributes.  */
21453
21454 static void
21455 prune_unused_types_update_strings (dw_die_ref die)
21456 {
21457   dw_attr_ref a;
21458   unsigned ix;
21459
21460   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
21461     if (AT_class (a) == dw_val_class_str)
21462       {
21463         struct indirect_string_node *s = a->dw_attr_val.v.val_str;
21464         s->refcount++;
21465         /* Avoid unnecessarily putting strings that are used less than
21466            twice in the hash table.  */
21467         if (s->refcount
21468             == ((DEBUG_STR_SECTION_FLAGS & SECTION_MERGE) ? 1 : 2))
21469           {
21470             void ** slot;
21471             slot = htab_find_slot_with_hash (debug_str_hash, s->str,
21472                                              htab_hash_string (s->str),
21473                                              INSERT);
21474             gcc_assert (*slot == NULL);
21475             *slot = s;
21476           }
21477       }
21478 }
21479
21480 /* Remove from the tree DIE any dies that aren't marked.  */
21481
21482 static void
21483 prune_unused_types_prune (dw_die_ref die)
21484 {
21485   dw_die_ref c;
21486
21487   gcc_assert (die->die_mark);
21488   prune_unused_types_update_strings (die);
21489
21490   if (! die->die_child)
21491     return;
21492
21493   c = die->die_child;
21494   do {
21495     dw_die_ref prev = c;
21496     for (c = c->die_sib; ! c->die_mark; c = c->die_sib)
21497       if (c == die->die_child)
21498         {
21499           /* No marked children between 'prev' and the end of the list.  */
21500           if (prev == c)
21501             /* No marked children at all.  */
21502             die->die_child = NULL;
21503           else
21504             {
21505               prev->die_sib = c->die_sib;
21506               die->die_child = prev;
21507             }
21508           return;
21509         }
21510
21511     if (c != prev->die_sib)
21512       prev->die_sib = c;
21513     prune_unused_types_prune (c);
21514   } while (c != die->die_child);
21515 }
21516
21517 /* A helper function for dwarf2out_finish called through
21518    htab_traverse.  Clear .debug_str strings that we haven't already
21519    decided to emit.  */
21520
21521 static int
21522 prune_indirect_string (void **h, void *v ATTRIBUTE_UNUSED)
21523 {
21524   struct indirect_string_node *node = (struct indirect_string_node *) *h;
21525
21526   if (!node->label || !node->refcount)
21527     htab_clear_slot (debug_str_hash, h);
21528
21529   return 1;
21530 }
21531
21532 /* Remove dies representing declarations that we never use.  */
21533
21534 static void
21535 prune_unused_types (void)
21536 {
21537   unsigned int i;
21538   limbo_die_node *node;
21539   comdat_type_node *ctnode;
21540   pubname_ref pub;
21541   dcall_entry *dcall;
21542
21543 #if ENABLE_ASSERT_CHECKING
21544   /* All the marks should already be clear.  */
21545   verify_marks_clear (comp_unit_die);
21546   for (node = limbo_die_list; node; node = node->next)
21547     verify_marks_clear (node->die);
21548   for (ctnode = comdat_type_list; ctnode; ctnode = ctnode->next)
21549     verify_marks_clear (ctnode->root_die);
21550 #endif /* ENABLE_ASSERT_CHECKING */
21551
21552   /* Mark types that are used in global variables.  */
21553   premark_types_used_by_global_vars ();
21554
21555   /* Set the mark on nodes that are actually used.  */
21556   prune_unused_types_walk (comp_unit_die);
21557   for (node = limbo_die_list; node; node = node->next)
21558     prune_unused_types_walk (node->die);
21559   for (ctnode = comdat_type_list; ctnode; ctnode = ctnode->next)
21560     {
21561       prune_unused_types_walk (ctnode->root_die);
21562       prune_unused_types_mark (ctnode->type_die, 1);
21563     }
21564
21565   /* Also set the mark on nodes referenced from the
21566      pubname_table or arange_table.  */
21567   for (i = 0; VEC_iterate (pubname_entry, pubname_table, i, pub); i++)
21568     prune_unused_types_mark (pub->die, 1);
21569   for (i = 0; i < arange_table_in_use; i++)
21570     prune_unused_types_mark (arange_table[i], 1);
21571
21572   /* Mark nodes referenced from the direct call table.  */
21573   for (i = 0; VEC_iterate (dcall_entry, dcall_table, i, dcall); i++)
21574     prune_unused_types_mark (dcall->targ_die, 1);
21575
21576   /* Get rid of nodes that aren't marked; and update the string counts.  */
21577   if (debug_str_hash && debug_str_hash_forced)
21578     htab_traverse (debug_str_hash, prune_indirect_string, NULL);
21579   else if (debug_str_hash)
21580     htab_empty (debug_str_hash);
21581   prune_unused_types_prune (comp_unit_die);
21582   for (node = limbo_die_list; node; node = node->next)
21583     prune_unused_types_prune (node->die);
21584   for (ctnode = comdat_type_list; ctnode; ctnode = ctnode->next)
21585     prune_unused_types_prune (ctnode->root_die);
21586
21587   /* Leave the marks clear.  */
21588   prune_unmark_dies (comp_unit_die);
21589   for (node = limbo_die_list; node; node = node->next)
21590     prune_unmark_dies (node->die);
21591   for (ctnode = comdat_type_list; ctnode; ctnode = ctnode->next)
21592     prune_unmark_dies (ctnode->root_die);
21593 }
21594
21595 /* Set the parameter to true if there are any relative pathnames in
21596    the file table.  */
21597 static int
21598 file_table_relative_p (void ** slot, void *param)
21599 {
21600   bool *p = (bool *) param;
21601   struct dwarf_file_data *d = (struct dwarf_file_data *) *slot;
21602   if (!IS_ABSOLUTE_PATH (d->filename))
21603     {
21604       *p = true;
21605       return 0;
21606     }
21607   return 1;
21608 }
21609
21610 /* Routines to manipulate hash table of comdat type units.  */
21611
21612 static hashval_t
21613 htab_ct_hash (const void *of)
21614 {
21615   hashval_t h;
21616   const comdat_type_node *const type_node = (const comdat_type_node *) of;
21617
21618   memcpy (&h, type_node->signature, sizeof (h));
21619   return h;
21620 }
21621
21622 static int
21623 htab_ct_eq (const void *of1, const void *of2)
21624 {
21625   const comdat_type_node *const type_node_1 = (const comdat_type_node *) of1;
21626   const comdat_type_node *const type_node_2 = (const comdat_type_node *) of2;
21627
21628   return (! memcmp (type_node_1->signature, type_node_2->signature,
21629                     DWARF_TYPE_SIGNATURE_SIZE));
21630 }
21631
21632 /* Move a DW_AT_{,MIPS_}linkage_name attribute just added to dw_die_ref
21633    to the location it would have been added, should we know its
21634    DECL_ASSEMBLER_NAME when we added other attributes.  This will
21635    probably improve compactness of debug info, removing equivalent
21636    abbrevs, and hide any differences caused by deferring the
21637    computation of the assembler name, triggered by e.g. PCH.  */
21638
21639 static inline void
21640 move_linkage_attr (dw_die_ref die)
21641 {
21642   unsigned ix = VEC_length (dw_attr_node, die->die_attr);
21643   dw_attr_node linkage = *VEC_index (dw_attr_node, die->die_attr, ix - 1);
21644
21645   gcc_assert (linkage.dw_attr == AT_linkage_name);
21646
21647   while (--ix > 0)
21648     {
21649       dw_attr_node *prev = VEC_index (dw_attr_node, die->die_attr, ix - 1);
21650
21651       if (prev->dw_attr == DW_AT_decl_line || prev->dw_attr == DW_AT_name)
21652         break;
21653     }
21654
21655   if (ix != VEC_length (dw_attr_node, die->die_attr) - 1)
21656     {
21657       VEC_pop (dw_attr_node, die->die_attr);
21658       VEC_quick_insert (dw_attr_node, die->die_attr, ix, &linkage);
21659     }
21660 }
21661
21662 /* Helper function for resolve_addr, attempt to resolve
21663    one CONST_STRING, return non-zero if not successful.  Similarly verify that
21664    SYMBOL_REFs refer to variables emitted in the current CU.  */
21665
21666 static int
21667 resolve_one_addr (rtx *addr, void *data ATTRIBUTE_UNUSED)
21668 {
21669   rtx rtl = *addr;
21670
21671   if (GET_CODE (rtl) == CONST_STRING)
21672     {
21673       size_t len = strlen (XSTR (rtl, 0)) + 1;
21674       tree t = build_string (len, XSTR (rtl, 0));
21675       tree tlen = build_int_cst (NULL_TREE, len - 1);
21676       TREE_TYPE (t)
21677         = build_array_type (char_type_node, build_index_type (tlen));
21678       rtl = lookup_constant_def (t);
21679       if (!rtl || !MEM_P (rtl))
21680         return 1;
21681       rtl = XEXP (rtl, 0);
21682       VEC_safe_push (rtx, gc, used_rtx_array, rtl);
21683       *addr = rtl;
21684       return 0;
21685     }
21686
21687   if (GET_CODE (rtl) == SYMBOL_REF
21688       && SYMBOL_REF_DECL (rtl)
21689       && !TREE_ASM_WRITTEN (SYMBOL_REF_DECL (rtl)))
21690     return 1;
21691
21692   if (GET_CODE (rtl) == CONST
21693       && for_each_rtx (&XEXP (rtl, 0), resolve_one_addr, NULL))
21694     return 1;
21695
21696   return 0;
21697 }
21698
21699 /* Helper function for resolve_addr, handle one location
21700    expression, return false if at least one CONST_STRING or SYMBOL_REF in
21701    the location list couldn't be resolved.  */
21702
21703 static bool
21704 resolve_addr_in_expr (dw_loc_descr_ref loc)
21705 {
21706   for (; loc; loc = loc->dw_loc_next)
21707     if ((loc->dw_loc_opc == DW_OP_addr
21708          && resolve_one_addr (&loc->dw_loc_oprnd1.v.val_addr, NULL))
21709         || (loc->dw_loc_opc == DW_OP_implicit_value
21710             && loc->dw_loc_oprnd2.val_class == dw_val_class_addr
21711             && resolve_one_addr (&loc->dw_loc_oprnd2.v.val_addr, NULL)))
21712       return false;
21713   return true;
21714 }
21715
21716 /* Resolve DW_OP_addr and DW_AT_const_value CONST_STRING arguments to
21717    an address in .rodata section if the string literal is emitted there,
21718    or remove the containing location list or replace DW_AT_const_value
21719    with DW_AT_location and empty location expression, if it isn't found
21720    in .rodata.  Similarly for SYMBOL_REFs, keep only those that refer
21721    to something that has been emitted in the current CU.  */
21722
21723 static void
21724 resolve_addr (dw_die_ref die)
21725 {
21726   dw_die_ref c;
21727   dw_attr_ref a;
21728   dw_loc_list_ref *curr;
21729   unsigned ix;
21730
21731   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
21732     switch (AT_class (a))
21733       {
21734       case dw_val_class_loc_list:
21735         curr = AT_loc_list_ptr (a);
21736         while (*curr)
21737           {
21738             if (!resolve_addr_in_expr ((*curr)->expr))
21739               {
21740                 dw_loc_list_ref next = (*curr)->dw_loc_next;
21741                 if (next && (*curr)->ll_symbol)
21742                   {
21743                     gcc_assert (!next->ll_symbol);
21744                     next->ll_symbol = (*curr)->ll_symbol;
21745                   }
21746                 *curr = next;
21747               }
21748             else
21749               curr = &(*curr)->dw_loc_next;
21750           }
21751         if (!AT_loc_list (a))
21752           {
21753             remove_AT (die, a->dw_attr);
21754             ix--;
21755           }
21756         break;
21757       case dw_val_class_loc:
21758         if (!resolve_addr_in_expr (AT_loc (a)))
21759           {
21760             remove_AT (die, a->dw_attr);
21761             ix--;
21762           }
21763         break;
21764       case dw_val_class_addr:
21765         if (a->dw_attr == DW_AT_const_value
21766             && resolve_one_addr (&a->dw_attr_val.v.val_addr, NULL))
21767           {
21768             remove_AT (die, a->dw_attr);
21769             ix--;
21770           }
21771         break;
21772       default:
21773         break;
21774       }
21775
21776   FOR_EACH_CHILD (die, c, resolve_addr (c));
21777 }
21778
21779 /* Output stuff that dwarf requires at the end of every file,
21780    and generate the DWARF-2 debugging info.  */
21781
21782 static void
21783 dwarf2out_finish (const char *filename)
21784 {
21785   limbo_die_node *node, *next_node;
21786   comdat_type_node *ctnode;
21787   htab_t comdat_type_table;
21788   dw_die_ref die = 0;
21789   unsigned int i;
21790
21791   gen_remaining_tmpl_value_param_die_attribute ();
21792
21793   /* Add the name for the main input file now.  We delayed this from
21794      dwarf2out_init to avoid complications with PCH.  */
21795   add_name_attribute (comp_unit_die, remap_debug_filename (filename));
21796   if (!IS_ABSOLUTE_PATH (filename))
21797     add_comp_dir_attribute (comp_unit_die);
21798   else if (get_AT (comp_unit_die, DW_AT_comp_dir) == NULL)
21799     {
21800       bool p = false;
21801       htab_traverse (file_table, file_table_relative_p, &p);
21802       if (p)
21803         add_comp_dir_attribute (comp_unit_die);
21804     }
21805
21806   for (i = 0; i < VEC_length (deferred_locations, deferred_locations_list); i++)
21807     {
21808       add_location_or_const_value_attribute (
21809         VEC_index (deferred_locations, deferred_locations_list, i)->die,
21810         VEC_index (deferred_locations, deferred_locations_list, i)->variable,
21811         DW_AT_location);
21812     }
21813
21814   /* Traverse the limbo die list, and add parent/child links.  The only
21815      dies without parents that should be here are concrete instances of
21816      inline functions, and the comp_unit_die.  We can ignore the comp_unit_die.
21817      For concrete instances, we can get the parent die from the abstract
21818      instance.  */
21819   for (node = limbo_die_list; node; node = next_node)
21820     {
21821       next_node = node->next;
21822       die = node->die;
21823
21824       if (die->die_parent == NULL)
21825         {
21826           dw_die_ref origin = get_AT_ref (die, DW_AT_abstract_origin);
21827
21828           if (origin)
21829             add_child_die (origin->die_parent, die);
21830           else if (die == comp_unit_die)
21831             ;
21832           else if (seen_error ())
21833             /* It's OK to be confused by errors in the input.  */
21834             add_child_die (comp_unit_die, die);
21835           else
21836             {
21837               /* In certain situations, the lexical block containing a
21838                  nested function can be optimized away, which results
21839                  in the nested function die being orphaned.  Likewise
21840                  with the return type of that nested function.  Force
21841                  this to be a child of the containing function.
21842
21843                  It may happen that even the containing function got fully
21844                  inlined and optimized out.  In that case we are lost and
21845                  assign the empty child.  This should not be big issue as
21846                  the function is likely unreachable too.  */
21847               tree context = NULL_TREE;
21848
21849               gcc_assert (node->created_for);
21850
21851               if (DECL_P (node->created_for))
21852                 context = DECL_CONTEXT (node->created_for);
21853               else if (TYPE_P (node->created_for))
21854                 context = TYPE_CONTEXT (node->created_for);
21855
21856               gcc_assert (context
21857                           && (TREE_CODE (context) == FUNCTION_DECL
21858                               || TREE_CODE (context) == NAMESPACE_DECL));
21859
21860               origin = lookup_decl_die (context);
21861               if (origin)
21862                 add_child_die (origin, die);
21863               else
21864                 add_child_die (comp_unit_die, die);
21865             }
21866         }
21867     }
21868
21869   limbo_die_list = NULL;
21870
21871   resolve_addr (comp_unit_die);
21872
21873   for (node = deferred_asm_name; node; node = node->next)
21874     {
21875       tree decl = node->created_for;
21876       if (DECL_ASSEMBLER_NAME (decl) != DECL_NAME (decl))
21877         {
21878           add_AT_string (node->die, AT_linkage_name,
21879                          IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl)));
21880           move_linkage_attr (node->die);
21881         }
21882     }
21883
21884   deferred_asm_name = NULL;
21885
21886   /* Walk through the list of incomplete types again, trying once more to
21887      emit full debugging info for them.  */
21888   retry_incomplete_types ();
21889
21890   if (flag_eliminate_unused_debug_types)
21891     prune_unused_types ();
21892
21893   /* Generate separate CUs for each of the include files we've seen.
21894      They will go into limbo_die_list.  */
21895   if (flag_eliminate_dwarf2_dups && dwarf_version < 4)
21896     break_out_includes (comp_unit_die);
21897
21898   /* Generate separate COMDAT sections for type DIEs. */
21899   if (dwarf_version >= 4)
21900     {
21901       break_out_comdat_types (comp_unit_die);
21902
21903       /* Each new type_unit DIE was added to the limbo die list when created.
21904          Since these have all been added to comdat_type_list, clear the
21905          limbo die list.  */
21906       limbo_die_list = NULL;
21907
21908       /* For each new comdat type unit, copy declarations for incomplete
21909          types to make the new unit self-contained (i.e., no direct
21910          references to the main compile unit).  */
21911       for (ctnode = comdat_type_list; ctnode != NULL; ctnode = ctnode->next)
21912         copy_decls_for_unworthy_types (ctnode->root_die);
21913       copy_decls_for_unworthy_types (comp_unit_die);
21914
21915       /* In the process of copying declarations from one unit to another,
21916          we may have left some declarations behind that are no longer
21917          referenced.  Prune them.  */
21918       prune_unused_types ();
21919     }
21920
21921   /* Traverse the DIE's and add add sibling attributes to those DIE's
21922      that have children.  */
21923   add_sibling_attributes (comp_unit_die);
21924   for (node = limbo_die_list; node; node = node->next)
21925     add_sibling_attributes (node->die);
21926   for (ctnode = comdat_type_list; ctnode != NULL; ctnode = ctnode->next)
21927     add_sibling_attributes (ctnode->root_die);
21928
21929   /* Output a terminator label for the .text section.  */
21930   switch_to_section (text_section);
21931   targetm.asm_out.internal_label (asm_out_file, TEXT_END_LABEL, 0);
21932   if (flag_reorder_blocks_and_partition)
21933     {
21934       switch_to_section (unlikely_text_section ());
21935       targetm.asm_out.internal_label (asm_out_file, COLD_END_LABEL, 0);
21936     }
21937
21938   /* We can only use the low/high_pc attributes if all of the code was
21939      in .text.  */
21940   if (!have_multiple_function_sections
21941       || !(dwarf_version >= 3 || !dwarf_strict))
21942     {
21943       add_AT_lbl_id (comp_unit_die, DW_AT_low_pc, text_section_label);
21944       add_AT_lbl_id (comp_unit_die, DW_AT_high_pc, text_end_label);
21945     }
21946
21947   else
21948     {
21949       unsigned fde_idx = 0;
21950       bool range_list_added = false;
21951
21952       /* We need to give .debug_loc and .debug_ranges an appropriate
21953          "base address".  Use zero so that these addresses become
21954          absolute.  Historically, we've emitted the unexpected
21955          DW_AT_entry_pc instead of DW_AT_low_pc for this purpose.
21956          Emit both to give time for other tools to adapt.  */
21957       add_AT_addr (comp_unit_die, DW_AT_low_pc, const0_rtx);
21958       add_AT_addr (comp_unit_die, DW_AT_entry_pc, const0_rtx);
21959
21960       if (text_section_used)
21961         add_ranges_by_labels (comp_unit_die, text_section_label,
21962                               text_end_label, &range_list_added);
21963       if (flag_reorder_blocks_and_partition && cold_text_section_used)
21964         add_ranges_by_labels (comp_unit_die, cold_text_section_label,
21965                               cold_end_label, &range_list_added);
21966
21967       for (fde_idx = 0; fde_idx < fde_table_in_use; fde_idx++)
21968         {
21969           dw_fde_ref fde = &fde_table[fde_idx];
21970
21971           if (fde->dw_fde_switched_sections)
21972             {
21973               if (!fde->in_std_section)
21974                 add_ranges_by_labels (comp_unit_die,
21975                                       fde->dw_fde_hot_section_label,
21976                                       fde->dw_fde_hot_section_end_label,
21977                                       &range_list_added);
21978               if (!fde->cold_in_std_section)
21979                 add_ranges_by_labels (comp_unit_die,
21980                                       fde->dw_fde_unlikely_section_label,
21981                                       fde->dw_fde_unlikely_section_end_label,
21982                                       &range_list_added);
21983             }
21984           else if (!fde->in_std_section)
21985             add_ranges_by_labels (comp_unit_die, fde->dw_fde_begin,
21986                                   fde->dw_fde_end, &range_list_added);
21987         }
21988
21989       if (range_list_added)
21990         add_ranges (NULL);
21991     }
21992
21993   /* Output location list section if necessary.  */
21994   if (have_location_lists)
21995     {
21996       /* Output the location lists info.  */
21997       switch_to_section (debug_loc_section);
21998       ASM_GENERATE_INTERNAL_LABEL (loc_section_label,
21999                                    DEBUG_LOC_SECTION_LABEL, 0);
22000       ASM_OUTPUT_LABEL (asm_out_file, loc_section_label);
22001       output_location_lists (die);
22002     }
22003
22004   if (debug_info_level >= DINFO_LEVEL_NORMAL)
22005     add_AT_lineptr (comp_unit_die, DW_AT_stmt_list,
22006                     debug_line_section_label);
22007
22008   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
22009     add_AT_macptr (comp_unit_die, DW_AT_macro_info, macinfo_section_label);
22010
22011   /* Output all of the compilation units.  We put the main one last so that
22012      the offsets are available to output_pubnames.  */
22013   for (node = limbo_die_list; node; node = node->next)
22014     output_comp_unit (node->die, 0);
22015
22016   comdat_type_table = htab_create (100, htab_ct_hash, htab_ct_eq, NULL);
22017   for (ctnode = comdat_type_list; ctnode != NULL; ctnode = ctnode->next)
22018     {
22019       void **slot = htab_find_slot (comdat_type_table, ctnode, INSERT);
22020
22021       /* Don't output duplicate types.  */
22022       if (*slot != HTAB_EMPTY_ENTRY)
22023         continue;
22024
22025       /* Add a pointer to the line table for the main compilation unit
22026          so that the debugger can make sense of DW_AT_decl_file
22027          attributes.  */
22028       if (debug_info_level >= DINFO_LEVEL_NORMAL)
22029         add_AT_lineptr (ctnode->root_die, DW_AT_stmt_list,
22030                         debug_line_section_label);
22031
22032       output_comdat_type_unit (ctnode);
22033       *slot = ctnode;
22034     }
22035   htab_delete (comdat_type_table);
22036
22037   /* Output the main compilation unit if non-empty or if .debug_macinfo
22038      has been emitted.  */
22039   output_comp_unit (comp_unit_die, debug_info_level >= DINFO_LEVEL_VERBOSE);
22040
22041   /* Output the abbreviation table.  */
22042   switch_to_section (debug_abbrev_section);
22043   output_abbrev_section ();
22044
22045   /* Output public names table if necessary.  */
22046   if (!VEC_empty (pubname_entry, pubname_table))
22047     {
22048       switch_to_section (debug_pubnames_section);
22049       output_pubnames (pubname_table);
22050     }
22051
22052   /* Output public types table if necessary.  */
22053   /* ??? Only defined by DWARF3, but emitted by Darwin for DWARF2.
22054      It shouldn't hurt to emit it always, since pure DWARF2 consumers
22055      simply won't look for the section.  */
22056   if (!VEC_empty (pubname_entry, pubtype_table))
22057     {
22058       switch_to_section (debug_pubtypes_section);
22059       output_pubnames (pubtype_table);
22060     }
22061
22062   /* Output direct and virtual call tables if necessary.  */
22063   if (!VEC_empty (dcall_entry, dcall_table))
22064     {
22065       switch_to_section (debug_dcall_section);
22066       output_dcall_table ();
22067     }
22068   if (!VEC_empty (vcall_entry, vcall_table))
22069     {
22070       switch_to_section (debug_vcall_section);
22071       output_vcall_table ();
22072     }
22073
22074   /* Output the address range information.  We only put functions in the arange
22075      table, so don't write it out if we don't have any.  */
22076   if (fde_table_in_use)
22077     {
22078       switch_to_section (debug_aranges_section);
22079       output_aranges ();
22080     }
22081
22082   /* Output ranges section if necessary.  */
22083   if (ranges_table_in_use)
22084     {
22085       switch_to_section (debug_ranges_section);
22086       ASM_OUTPUT_LABEL (asm_out_file, ranges_section_label);
22087       output_ranges ();
22088     }
22089
22090   /* Output the source line correspondence table.  We must do this
22091      even if there is no line information.  Otherwise, on an empty
22092      translation unit, we will generate a present, but empty,
22093      .debug_info section.  IRIX 6.5 `nm' will then complain when
22094      examining the file.  This is done late so that any filenames
22095      used by the debug_info section are marked as 'used'.  */
22096   if (! DWARF2_ASM_LINE_DEBUG_INFO)
22097     {
22098       switch_to_section (debug_line_section);
22099       output_line_info ();
22100     }
22101
22102   /* Have to end the macro section.  */
22103   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
22104     {
22105       switch_to_section (debug_macinfo_section);
22106       dw2_asm_output_data (1, 0, "End compilation unit");
22107     }
22108
22109   /* If we emitted any DW_FORM_strp form attribute, output the string
22110      table too.  */
22111   if (debug_str_hash)
22112     htab_traverse (debug_str_hash, output_indirect_string, NULL);
22113 }
22114 #else
22115
22116 /* This should never be used, but its address is needed for comparisons.  */
22117 const struct gcc_debug_hooks dwarf2_debug_hooks =
22118 {
22119   0,            /* init */
22120   0,            /* finish */
22121   0,            /* assembly_start */
22122   0,            /* define */
22123   0,            /* undef */
22124   0,            /* start_source_file */
22125   0,            /* end_source_file */
22126   0,            /* begin_block */
22127   0,            /* end_block */
22128   0,            /* ignore_block */
22129   0,            /* source_line */
22130   0,            /* begin_prologue */
22131   0,            /* end_prologue */
22132   0,            /* end_epilogue */
22133   0,            /* begin_function */
22134   0,            /* end_function */
22135   0,            /* function_decl */
22136   0,            /* global_decl */
22137   0,            /* type_decl */
22138   0,            /* imported_module_or_decl */
22139   0,            /* deferred_inline_function */
22140   0,            /* outlining_inline_function */
22141   0,            /* label */
22142   0,            /* handle_pch */
22143   0,            /* var_location */
22144   0,            /* switch_text_section */
22145   0,            /* direct_call */
22146   0,            /* virtual_call_token */
22147   0,            /* copy_call_info */
22148   0,            /* virtual_call */
22149   0,            /* set_name */
22150   0             /* start_end_main_source_file */
22151 };
22152
22153 #endif /* DWARF2_DEBUGGING_INFO */
22154
22155 #include "gt-dwarf2out.h"