OSDN Git Service

2010-06-09 Martin Jambor <mjambor@suse.cz>
[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   HOST_WIDE_INT stack_realignment;
309   unsigned funcdef_number;
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_alloc_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_alloc_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_alloc_cleared_vec_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_alloc_cleared_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 bool is_naming_typedef_decl (const_tree);
6206 static inline dw_die_ref get_context_die (tree);
6207 static void gen_namespace_die (tree, dw_die_ref);
6208 static void gen_decl_die (tree, tree, dw_die_ref);
6209 static dw_die_ref force_decl_die (tree);
6210 static dw_die_ref force_type_die (tree);
6211 static dw_die_ref setup_namespace_context (tree, dw_die_ref);
6212 static dw_die_ref declare_in_namespace (tree, dw_die_ref);
6213 static struct dwarf_file_data * lookup_filename (const char *);
6214 static void retry_incomplete_types (void);
6215 static void gen_type_die_for_member (tree, tree, dw_die_ref);
6216 static void gen_generic_params_dies (tree);
6217 static void gen_tagged_type_die (tree, dw_die_ref, enum debug_info_usage);
6218 static void gen_type_die_with_usage (tree, dw_die_ref, enum debug_info_usage);
6219 static void splice_child_die (dw_die_ref, dw_die_ref);
6220 static int file_info_cmp (const void *, const void *);
6221 static dw_loc_list_ref new_loc_list (dw_loc_descr_ref, const char *,
6222                                      const char *, const char *);
6223 static void output_loc_list (dw_loc_list_ref);
6224 static char *gen_internal_sym (const char *);
6225
6226 static void prune_unmark_dies (dw_die_ref);
6227 static void prune_unused_types_mark (dw_die_ref, int);
6228 static void prune_unused_types_walk (dw_die_ref);
6229 static void prune_unused_types_walk_attribs (dw_die_ref);
6230 static void prune_unused_types_prune (dw_die_ref);
6231 static void prune_unused_types (void);
6232 static int maybe_emit_file (struct dwarf_file_data *fd);
6233 static void append_entry_to_tmpl_value_parm_die_table (dw_die_ref, tree);
6234 static void gen_remaining_tmpl_value_param_die_attribute (void);
6235
6236 /* Section names used to hold DWARF debugging information.  */
6237 #ifndef DEBUG_INFO_SECTION
6238 #define DEBUG_INFO_SECTION      ".debug_info"
6239 #endif
6240 #ifndef DEBUG_ABBREV_SECTION
6241 #define DEBUG_ABBREV_SECTION    ".debug_abbrev"
6242 #endif
6243 #ifndef DEBUG_ARANGES_SECTION
6244 #define DEBUG_ARANGES_SECTION   ".debug_aranges"
6245 #endif
6246 #ifndef DEBUG_MACINFO_SECTION
6247 #define DEBUG_MACINFO_SECTION   ".debug_macinfo"
6248 #endif
6249 #ifndef DEBUG_LINE_SECTION
6250 #define DEBUG_LINE_SECTION      ".debug_line"
6251 #endif
6252 #ifndef DEBUG_LOC_SECTION
6253 #define DEBUG_LOC_SECTION       ".debug_loc"
6254 #endif
6255 #ifndef DEBUG_PUBNAMES_SECTION
6256 #define DEBUG_PUBNAMES_SECTION  ".debug_pubnames"
6257 #endif
6258 #ifndef DEBUG_PUBTYPES_SECTION
6259 #define DEBUG_PUBTYPES_SECTION  ".debug_pubtypes"
6260 #endif
6261 #ifndef DEBUG_DCALL_SECTION
6262 #define DEBUG_DCALL_SECTION     ".debug_dcall"
6263 #endif
6264 #ifndef DEBUG_VCALL_SECTION
6265 #define DEBUG_VCALL_SECTION     ".debug_vcall"
6266 #endif
6267 #ifndef DEBUG_STR_SECTION
6268 #define DEBUG_STR_SECTION       ".debug_str"
6269 #endif
6270 #ifndef DEBUG_RANGES_SECTION
6271 #define DEBUG_RANGES_SECTION    ".debug_ranges"
6272 #endif
6273
6274 /* Standard ELF section names for compiled code and data.  */
6275 #ifndef TEXT_SECTION_NAME
6276 #define TEXT_SECTION_NAME       ".text"
6277 #endif
6278
6279 /* Section flags for .debug_str section.  */
6280 #define DEBUG_STR_SECTION_FLAGS \
6281   (HAVE_GAS_SHF_MERGE && flag_merge_debug_strings               \
6282    ? SECTION_DEBUG | SECTION_MERGE | SECTION_STRINGS | 1        \
6283    : SECTION_DEBUG)
6284
6285 /* Labels we insert at beginning sections we can reference instead of
6286    the section names themselves.  */
6287
6288 #ifndef TEXT_SECTION_LABEL
6289 #define TEXT_SECTION_LABEL              "Ltext"
6290 #endif
6291 #ifndef COLD_TEXT_SECTION_LABEL
6292 #define COLD_TEXT_SECTION_LABEL         "Ltext_cold"
6293 #endif
6294 #ifndef DEBUG_LINE_SECTION_LABEL
6295 #define DEBUG_LINE_SECTION_LABEL        "Ldebug_line"
6296 #endif
6297 #ifndef DEBUG_INFO_SECTION_LABEL
6298 #define DEBUG_INFO_SECTION_LABEL        "Ldebug_info"
6299 #endif
6300 #ifndef DEBUG_ABBREV_SECTION_LABEL
6301 #define DEBUG_ABBREV_SECTION_LABEL      "Ldebug_abbrev"
6302 #endif
6303 #ifndef DEBUG_LOC_SECTION_LABEL
6304 #define DEBUG_LOC_SECTION_LABEL         "Ldebug_loc"
6305 #endif
6306 #ifndef DEBUG_RANGES_SECTION_LABEL
6307 #define DEBUG_RANGES_SECTION_LABEL      "Ldebug_ranges"
6308 #endif
6309 #ifndef DEBUG_MACINFO_SECTION_LABEL
6310 #define DEBUG_MACINFO_SECTION_LABEL     "Ldebug_macinfo"
6311 #endif
6312
6313 /* Mangled name attribute to use.  This used to be a vendor extension
6314    until DWARF 4 standardized it.  */
6315 #define AT_linkage_name \
6316   (dwarf_version >= 4 ? DW_AT_linkage_name : DW_AT_MIPS_linkage_name)
6317
6318
6319 /* Definitions of defaults for formats and names of various special
6320    (artificial) labels which may be generated within this file (when the -g
6321    options is used and DWARF2_DEBUGGING_INFO is in effect.
6322    If necessary, these may be overridden from within the tm.h file, but
6323    typically, overriding these defaults is unnecessary.  */
6324
6325 static char text_end_label[MAX_ARTIFICIAL_LABEL_BYTES];
6326 static char text_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
6327 static char cold_text_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
6328 static char cold_end_label[MAX_ARTIFICIAL_LABEL_BYTES];
6329 static char abbrev_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
6330 static char debug_info_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
6331 static char debug_line_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
6332 static char macinfo_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
6333 static char loc_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
6334 static char ranges_section_label[2 * MAX_ARTIFICIAL_LABEL_BYTES];
6335
6336 #ifndef TEXT_END_LABEL
6337 #define TEXT_END_LABEL          "Letext"
6338 #endif
6339 #ifndef COLD_END_LABEL
6340 #define COLD_END_LABEL          "Letext_cold"
6341 #endif
6342 #ifndef BLOCK_BEGIN_LABEL
6343 #define BLOCK_BEGIN_LABEL       "LBB"
6344 #endif
6345 #ifndef BLOCK_END_LABEL
6346 #define BLOCK_END_LABEL         "LBE"
6347 #endif
6348 #ifndef LINE_CODE_LABEL
6349 #define LINE_CODE_LABEL         "LM"
6350 #endif
6351 #ifndef SEPARATE_LINE_CODE_LABEL
6352 #define SEPARATE_LINE_CODE_LABEL        "LSM"
6353 #endif
6354
6355 \f
6356 /* We allow a language front-end to designate a function that is to be
6357    called to "demangle" any name before it is put into a DIE.  */
6358
6359 static const char *(*demangle_name_func) (const char *);
6360
6361 void
6362 dwarf2out_set_demangle_name_func (const char *(*func) (const char *))
6363 {
6364   demangle_name_func = func;
6365 }
6366
6367 /* Test if rtl node points to a pseudo register.  */
6368
6369 static inline int
6370 is_pseudo_reg (const_rtx rtl)
6371 {
6372   return ((REG_P (rtl) && REGNO (rtl) >= FIRST_PSEUDO_REGISTER)
6373           || (GET_CODE (rtl) == SUBREG
6374               && REGNO (SUBREG_REG (rtl)) >= FIRST_PSEUDO_REGISTER));
6375 }
6376
6377 /* Return a reference to a type, with its const and volatile qualifiers
6378    removed.  */
6379
6380 static inline tree
6381 type_main_variant (tree type)
6382 {
6383   type = TYPE_MAIN_VARIANT (type);
6384
6385   /* ??? There really should be only one main variant among any group of
6386      variants of a given type (and all of the MAIN_VARIANT values for all
6387      members of the group should point to that one type) but sometimes the C
6388      front-end messes this up for array types, so we work around that bug
6389      here.  */
6390   if (TREE_CODE (type) == ARRAY_TYPE)
6391     while (type != TYPE_MAIN_VARIANT (type))
6392       type = TYPE_MAIN_VARIANT (type);
6393
6394   return type;
6395 }
6396
6397 /* Return nonzero if the given type node represents a tagged type.  */
6398
6399 static inline int
6400 is_tagged_type (const_tree type)
6401 {
6402   enum tree_code code = TREE_CODE (type);
6403
6404   return (code == RECORD_TYPE || code == UNION_TYPE
6405           || code == QUAL_UNION_TYPE || code == ENUMERAL_TYPE);
6406 }
6407
6408 /* Convert a DIE tag into its string name.  */
6409
6410 static const char *
6411 dwarf_tag_name (unsigned int tag)
6412 {
6413   switch (tag)
6414     {
6415     case DW_TAG_padding:
6416       return "DW_TAG_padding";
6417     case DW_TAG_array_type:
6418       return "DW_TAG_array_type";
6419     case DW_TAG_class_type:
6420       return "DW_TAG_class_type";
6421     case DW_TAG_entry_point:
6422       return "DW_TAG_entry_point";
6423     case DW_TAG_enumeration_type:
6424       return "DW_TAG_enumeration_type";
6425     case DW_TAG_formal_parameter:
6426       return "DW_TAG_formal_parameter";
6427     case DW_TAG_imported_declaration:
6428       return "DW_TAG_imported_declaration";
6429     case DW_TAG_label:
6430       return "DW_TAG_label";
6431     case DW_TAG_lexical_block:
6432       return "DW_TAG_lexical_block";
6433     case DW_TAG_member:
6434       return "DW_TAG_member";
6435     case DW_TAG_pointer_type:
6436       return "DW_TAG_pointer_type";
6437     case DW_TAG_reference_type:
6438       return "DW_TAG_reference_type";
6439     case DW_TAG_compile_unit:
6440       return "DW_TAG_compile_unit";
6441     case DW_TAG_string_type:
6442       return "DW_TAG_string_type";
6443     case DW_TAG_structure_type:
6444       return "DW_TAG_structure_type";
6445     case DW_TAG_subroutine_type:
6446       return "DW_TAG_subroutine_type";
6447     case DW_TAG_typedef:
6448       return "DW_TAG_typedef";
6449     case DW_TAG_union_type:
6450       return "DW_TAG_union_type";
6451     case DW_TAG_unspecified_parameters:
6452       return "DW_TAG_unspecified_parameters";
6453     case DW_TAG_variant:
6454       return "DW_TAG_variant";
6455     case DW_TAG_common_block:
6456       return "DW_TAG_common_block";
6457     case DW_TAG_common_inclusion:
6458       return "DW_TAG_common_inclusion";
6459     case DW_TAG_inheritance:
6460       return "DW_TAG_inheritance";
6461     case DW_TAG_inlined_subroutine:
6462       return "DW_TAG_inlined_subroutine";
6463     case DW_TAG_module:
6464       return "DW_TAG_module";
6465     case DW_TAG_ptr_to_member_type:
6466       return "DW_TAG_ptr_to_member_type";
6467     case DW_TAG_set_type:
6468       return "DW_TAG_set_type";
6469     case DW_TAG_subrange_type:
6470       return "DW_TAG_subrange_type";
6471     case DW_TAG_with_stmt:
6472       return "DW_TAG_with_stmt";
6473     case DW_TAG_access_declaration:
6474       return "DW_TAG_access_declaration";
6475     case DW_TAG_base_type:
6476       return "DW_TAG_base_type";
6477     case DW_TAG_catch_block:
6478       return "DW_TAG_catch_block";
6479     case DW_TAG_const_type:
6480       return "DW_TAG_const_type";
6481     case DW_TAG_constant:
6482       return "DW_TAG_constant";
6483     case DW_TAG_enumerator:
6484       return "DW_TAG_enumerator";
6485     case DW_TAG_file_type:
6486       return "DW_TAG_file_type";
6487     case DW_TAG_friend:
6488       return "DW_TAG_friend";
6489     case DW_TAG_namelist:
6490       return "DW_TAG_namelist";
6491     case DW_TAG_namelist_item:
6492       return "DW_TAG_namelist_item";
6493     case DW_TAG_packed_type:
6494       return "DW_TAG_packed_type";
6495     case DW_TAG_subprogram:
6496       return "DW_TAG_subprogram";
6497     case DW_TAG_template_type_param:
6498       return "DW_TAG_template_type_param";
6499     case DW_TAG_template_value_param:
6500       return "DW_TAG_template_value_param";
6501     case DW_TAG_thrown_type:
6502       return "DW_TAG_thrown_type";
6503     case DW_TAG_try_block:
6504       return "DW_TAG_try_block";
6505     case DW_TAG_variant_part:
6506       return "DW_TAG_variant_part";
6507     case DW_TAG_variable:
6508       return "DW_TAG_variable";
6509     case DW_TAG_volatile_type:
6510       return "DW_TAG_volatile_type";
6511     case DW_TAG_dwarf_procedure:
6512       return "DW_TAG_dwarf_procedure";
6513     case DW_TAG_restrict_type:
6514       return "DW_TAG_restrict_type";
6515     case DW_TAG_interface_type:
6516       return "DW_TAG_interface_type";
6517     case DW_TAG_namespace:
6518       return "DW_TAG_namespace";
6519     case DW_TAG_imported_module:
6520       return "DW_TAG_imported_module";
6521     case DW_TAG_unspecified_type:
6522       return "DW_TAG_unspecified_type";
6523     case DW_TAG_partial_unit:
6524       return "DW_TAG_partial_unit";
6525     case DW_TAG_imported_unit:
6526       return "DW_TAG_imported_unit";
6527     case DW_TAG_condition:
6528       return "DW_TAG_condition";
6529     case DW_TAG_shared_type:
6530       return "DW_TAG_shared_type";
6531     case DW_TAG_type_unit:
6532       return "DW_TAG_type_unit";
6533     case DW_TAG_rvalue_reference_type:
6534       return "DW_TAG_rvalue_reference_type";
6535     case DW_TAG_template_alias:
6536       return "DW_TAG_template_alias";
6537     case DW_TAG_GNU_template_parameter_pack:
6538       return "DW_TAG_GNU_template_parameter_pack";
6539     case DW_TAG_GNU_formal_parameter_pack:
6540       return "DW_TAG_GNU_formal_parameter_pack";
6541     case DW_TAG_MIPS_loop:
6542       return "DW_TAG_MIPS_loop";
6543     case DW_TAG_format_label:
6544       return "DW_TAG_format_label";
6545     case DW_TAG_function_template:
6546       return "DW_TAG_function_template";
6547     case DW_TAG_class_template:
6548       return "DW_TAG_class_template";
6549     case DW_TAG_GNU_BINCL:
6550       return "DW_TAG_GNU_BINCL";
6551     case DW_TAG_GNU_EINCL:
6552       return "DW_TAG_GNU_EINCL";
6553     case DW_TAG_GNU_template_template_param:
6554       return "DW_TAG_GNU_template_template_param";
6555     default:
6556       return "DW_TAG_<unknown>";
6557     }
6558 }
6559
6560 /* Convert a DWARF attribute code into its string name.  */
6561
6562 static const char *
6563 dwarf_attr_name (unsigned int attr)
6564 {
6565   switch (attr)
6566     {
6567     case DW_AT_sibling:
6568       return "DW_AT_sibling";
6569     case DW_AT_location:
6570       return "DW_AT_location";
6571     case DW_AT_name:
6572       return "DW_AT_name";
6573     case DW_AT_ordering:
6574       return "DW_AT_ordering";
6575     case DW_AT_subscr_data:
6576       return "DW_AT_subscr_data";
6577     case DW_AT_byte_size:
6578       return "DW_AT_byte_size";
6579     case DW_AT_bit_offset:
6580       return "DW_AT_bit_offset";
6581     case DW_AT_bit_size:
6582       return "DW_AT_bit_size";
6583     case DW_AT_element_list:
6584       return "DW_AT_element_list";
6585     case DW_AT_stmt_list:
6586       return "DW_AT_stmt_list";
6587     case DW_AT_low_pc:
6588       return "DW_AT_low_pc";
6589     case DW_AT_high_pc:
6590       return "DW_AT_high_pc";
6591     case DW_AT_language:
6592       return "DW_AT_language";
6593     case DW_AT_member:
6594       return "DW_AT_member";
6595     case DW_AT_discr:
6596       return "DW_AT_discr";
6597     case DW_AT_discr_value:
6598       return "DW_AT_discr_value";
6599     case DW_AT_visibility:
6600       return "DW_AT_visibility";
6601     case DW_AT_import:
6602       return "DW_AT_import";
6603     case DW_AT_string_length:
6604       return "DW_AT_string_length";
6605     case DW_AT_common_reference:
6606       return "DW_AT_common_reference";
6607     case DW_AT_comp_dir:
6608       return "DW_AT_comp_dir";
6609     case DW_AT_const_value:
6610       return "DW_AT_const_value";
6611     case DW_AT_containing_type:
6612       return "DW_AT_containing_type";
6613     case DW_AT_default_value:
6614       return "DW_AT_default_value";
6615     case DW_AT_inline:
6616       return "DW_AT_inline";
6617     case DW_AT_is_optional:
6618       return "DW_AT_is_optional";
6619     case DW_AT_lower_bound:
6620       return "DW_AT_lower_bound";
6621     case DW_AT_producer:
6622       return "DW_AT_producer";
6623     case DW_AT_prototyped:
6624       return "DW_AT_prototyped";
6625     case DW_AT_return_addr:
6626       return "DW_AT_return_addr";
6627     case DW_AT_start_scope:
6628       return "DW_AT_start_scope";
6629     case DW_AT_bit_stride:
6630       return "DW_AT_bit_stride";
6631     case DW_AT_upper_bound:
6632       return "DW_AT_upper_bound";
6633     case DW_AT_abstract_origin:
6634       return "DW_AT_abstract_origin";
6635     case DW_AT_accessibility:
6636       return "DW_AT_accessibility";
6637     case DW_AT_address_class:
6638       return "DW_AT_address_class";
6639     case DW_AT_artificial:
6640       return "DW_AT_artificial";
6641     case DW_AT_base_types:
6642       return "DW_AT_base_types";
6643     case DW_AT_calling_convention:
6644       return "DW_AT_calling_convention";
6645     case DW_AT_count:
6646       return "DW_AT_count";
6647     case DW_AT_data_member_location:
6648       return "DW_AT_data_member_location";
6649     case DW_AT_decl_column:
6650       return "DW_AT_decl_column";
6651     case DW_AT_decl_file:
6652       return "DW_AT_decl_file";
6653     case DW_AT_decl_line:
6654       return "DW_AT_decl_line";
6655     case DW_AT_declaration:
6656       return "DW_AT_declaration";
6657     case DW_AT_discr_list:
6658       return "DW_AT_discr_list";
6659     case DW_AT_encoding:
6660       return "DW_AT_encoding";
6661     case DW_AT_external:
6662       return "DW_AT_external";
6663     case DW_AT_explicit:
6664       return "DW_AT_explicit";
6665     case DW_AT_frame_base:
6666       return "DW_AT_frame_base";
6667     case DW_AT_friend:
6668       return "DW_AT_friend";
6669     case DW_AT_identifier_case:
6670       return "DW_AT_identifier_case";
6671     case DW_AT_macro_info:
6672       return "DW_AT_macro_info";
6673     case DW_AT_namelist_items:
6674       return "DW_AT_namelist_items";
6675     case DW_AT_priority:
6676       return "DW_AT_priority";
6677     case DW_AT_segment:
6678       return "DW_AT_segment";
6679     case DW_AT_specification:
6680       return "DW_AT_specification";
6681     case DW_AT_static_link:
6682       return "DW_AT_static_link";
6683     case DW_AT_type:
6684       return "DW_AT_type";
6685     case DW_AT_use_location:
6686       return "DW_AT_use_location";
6687     case DW_AT_variable_parameter:
6688       return "DW_AT_variable_parameter";
6689     case DW_AT_virtuality:
6690       return "DW_AT_virtuality";
6691     case DW_AT_vtable_elem_location:
6692       return "DW_AT_vtable_elem_location";
6693
6694     case DW_AT_allocated:
6695       return "DW_AT_allocated";
6696     case DW_AT_associated:
6697       return "DW_AT_associated";
6698     case DW_AT_data_location:
6699       return "DW_AT_data_location";
6700     case DW_AT_byte_stride:
6701       return "DW_AT_byte_stride";
6702     case DW_AT_entry_pc:
6703       return "DW_AT_entry_pc";
6704     case DW_AT_use_UTF8:
6705       return "DW_AT_use_UTF8";
6706     case DW_AT_extension:
6707       return "DW_AT_extension";
6708     case DW_AT_ranges:
6709       return "DW_AT_ranges";
6710     case DW_AT_trampoline:
6711       return "DW_AT_trampoline";
6712     case DW_AT_call_column:
6713       return "DW_AT_call_column";
6714     case DW_AT_call_file:
6715       return "DW_AT_call_file";
6716     case DW_AT_call_line:
6717       return "DW_AT_call_line";
6718
6719     case DW_AT_signature:
6720       return "DW_AT_signature";
6721     case DW_AT_main_subprogram:
6722       return "DW_AT_main_subprogram";
6723     case DW_AT_data_bit_offset:
6724       return "DW_AT_data_bit_offset";
6725     case DW_AT_const_expr:
6726       return "DW_AT_const_expr";
6727     case DW_AT_enum_class:
6728       return "DW_AT_enum_class";
6729     case DW_AT_linkage_name:
6730       return "DW_AT_linkage_name";
6731
6732     case DW_AT_MIPS_fde:
6733       return "DW_AT_MIPS_fde";
6734     case DW_AT_MIPS_loop_begin:
6735       return "DW_AT_MIPS_loop_begin";
6736     case DW_AT_MIPS_tail_loop_begin:
6737       return "DW_AT_MIPS_tail_loop_begin";
6738     case DW_AT_MIPS_epilog_begin:
6739       return "DW_AT_MIPS_epilog_begin";
6740     case DW_AT_MIPS_loop_unroll_factor:
6741       return "DW_AT_MIPS_loop_unroll_factor";
6742     case DW_AT_MIPS_software_pipeline_depth:
6743       return "DW_AT_MIPS_software_pipeline_depth";
6744     case DW_AT_MIPS_linkage_name:
6745       return "DW_AT_MIPS_linkage_name";
6746     case DW_AT_MIPS_stride:
6747       return "DW_AT_MIPS_stride";
6748     case DW_AT_MIPS_abstract_name:
6749       return "DW_AT_MIPS_abstract_name";
6750     case DW_AT_MIPS_clone_origin:
6751       return "DW_AT_MIPS_clone_origin";
6752     case DW_AT_MIPS_has_inlines:
6753       return "DW_AT_MIPS_has_inlines";
6754
6755     case DW_AT_sf_names:
6756       return "DW_AT_sf_names";
6757     case DW_AT_src_info:
6758       return "DW_AT_src_info";
6759     case DW_AT_mac_info:
6760       return "DW_AT_mac_info";
6761     case DW_AT_src_coords:
6762       return "DW_AT_src_coords";
6763     case DW_AT_body_begin:
6764       return "DW_AT_body_begin";
6765     case DW_AT_body_end:
6766       return "DW_AT_body_end";
6767     case DW_AT_GNU_vector:
6768       return "DW_AT_GNU_vector";
6769     case DW_AT_GNU_guarded_by:
6770       return "DW_AT_GNU_guarded_by";
6771     case DW_AT_GNU_pt_guarded_by:
6772       return "DW_AT_GNU_pt_guarded_by";
6773     case DW_AT_GNU_guarded:
6774       return "DW_AT_GNU_guarded";
6775     case DW_AT_GNU_pt_guarded:
6776       return "DW_AT_GNU_pt_guarded";
6777     case DW_AT_GNU_locks_excluded:
6778       return "DW_AT_GNU_locks_excluded";
6779     case DW_AT_GNU_exclusive_locks_required:
6780       return "DW_AT_GNU_exclusive_locks_required";
6781     case DW_AT_GNU_shared_locks_required:
6782       return "DW_AT_GNU_shared_locks_required";
6783     case DW_AT_GNU_odr_signature:
6784       return "DW_AT_GNU_odr_signature";
6785     case DW_AT_GNU_template_name:
6786       return "DW_AT_GNU_template_name";
6787
6788     case DW_AT_VMS_rtnbeg_pd_address:
6789       return "DW_AT_VMS_rtnbeg_pd_address";
6790
6791     default:
6792       return "DW_AT_<unknown>";
6793     }
6794 }
6795
6796 /* Convert a DWARF value form code into its string name.  */
6797
6798 static const char *
6799 dwarf_form_name (unsigned int form)
6800 {
6801   switch (form)
6802     {
6803     case DW_FORM_addr:
6804       return "DW_FORM_addr";
6805     case DW_FORM_block2:
6806       return "DW_FORM_block2";
6807     case DW_FORM_block4:
6808       return "DW_FORM_block4";
6809     case DW_FORM_data2:
6810       return "DW_FORM_data2";
6811     case DW_FORM_data4:
6812       return "DW_FORM_data4";
6813     case DW_FORM_data8:
6814       return "DW_FORM_data8";
6815     case DW_FORM_string:
6816       return "DW_FORM_string";
6817     case DW_FORM_block:
6818       return "DW_FORM_block";
6819     case DW_FORM_block1:
6820       return "DW_FORM_block1";
6821     case DW_FORM_data1:
6822       return "DW_FORM_data1";
6823     case DW_FORM_flag:
6824       return "DW_FORM_flag";
6825     case DW_FORM_sdata:
6826       return "DW_FORM_sdata";
6827     case DW_FORM_strp:
6828       return "DW_FORM_strp";
6829     case DW_FORM_udata:
6830       return "DW_FORM_udata";
6831     case DW_FORM_ref_addr:
6832       return "DW_FORM_ref_addr";
6833     case DW_FORM_ref1:
6834       return "DW_FORM_ref1";
6835     case DW_FORM_ref2:
6836       return "DW_FORM_ref2";
6837     case DW_FORM_ref4:
6838       return "DW_FORM_ref4";
6839     case DW_FORM_ref8:
6840       return "DW_FORM_ref8";
6841     case DW_FORM_ref_udata:
6842       return "DW_FORM_ref_udata";
6843     case DW_FORM_indirect:
6844       return "DW_FORM_indirect";
6845     case DW_FORM_sec_offset:
6846       return "DW_FORM_sec_offset";
6847     case DW_FORM_exprloc:
6848       return "DW_FORM_exprloc";
6849     case DW_FORM_flag_present:
6850       return "DW_FORM_flag_present";
6851     case DW_FORM_ref_sig8:
6852       return "DW_FORM_ref_sig8";
6853     default:
6854       return "DW_FORM_<unknown>";
6855     }
6856 }
6857 \f
6858 /* Determine the "ultimate origin" of a decl.  The decl may be an inlined
6859    instance of an inlined instance of a decl which is local to an inline
6860    function, so we have to trace all of the way back through the origin chain
6861    to find out what sort of node actually served as the original seed for the
6862    given block.  */
6863
6864 static tree
6865 decl_ultimate_origin (const_tree decl)
6866 {
6867   if (!CODE_CONTAINS_STRUCT (TREE_CODE (decl), TS_DECL_COMMON))
6868     return NULL_TREE;
6869
6870   /* output_inline_function sets DECL_ABSTRACT_ORIGIN for all the
6871      nodes in the function to point to themselves; ignore that if
6872      we're trying to output the abstract instance of this function.  */
6873   if (DECL_ABSTRACT (decl) && DECL_ABSTRACT_ORIGIN (decl) == decl)
6874     return NULL_TREE;
6875
6876   /* Since the DECL_ABSTRACT_ORIGIN for a DECL is supposed to be the
6877      most distant ancestor, this should never happen.  */
6878   gcc_assert (!DECL_FROM_INLINE (DECL_ORIGIN (decl)));
6879
6880   return DECL_ABSTRACT_ORIGIN (decl);
6881 }
6882
6883 /* Get the class to which DECL belongs, if any.  In g++, the DECL_CONTEXT
6884    of a virtual function may refer to a base class, so we check the 'this'
6885    parameter.  */
6886
6887 static tree
6888 decl_class_context (tree decl)
6889 {
6890   tree context = NULL_TREE;
6891
6892   if (TREE_CODE (decl) != FUNCTION_DECL || ! DECL_VINDEX (decl))
6893     context = DECL_CONTEXT (decl);
6894   else
6895     context = TYPE_MAIN_VARIANT
6896       (TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (TREE_TYPE (decl)))));
6897
6898   if (context && !TYPE_P (context))
6899     context = NULL_TREE;
6900
6901   return context;
6902 }
6903 \f
6904 /* Add an attribute/value pair to a DIE.  */
6905
6906 static inline void
6907 add_dwarf_attr (dw_die_ref die, dw_attr_ref attr)
6908 {
6909   /* Maybe this should be an assert?  */
6910   if (die == NULL)
6911     return;
6912
6913   if (die->die_attr == NULL)
6914     die->die_attr = VEC_alloc (dw_attr_node, gc, 1);
6915   VEC_safe_push (dw_attr_node, gc, die->die_attr, attr);
6916 }
6917
6918 static inline enum dw_val_class
6919 AT_class (dw_attr_ref a)
6920 {
6921   return a->dw_attr_val.val_class;
6922 }
6923
6924 /* Add a flag value attribute to a DIE.  */
6925
6926 static inline void
6927 add_AT_flag (dw_die_ref die, enum dwarf_attribute attr_kind, unsigned int flag)
6928 {
6929   dw_attr_node attr;
6930
6931   attr.dw_attr = attr_kind;
6932   attr.dw_attr_val.val_class = dw_val_class_flag;
6933   attr.dw_attr_val.v.val_flag = flag;
6934   add_dwarf_attr (die, &attr);
6935 }
6936
6937 static inline unsigned
6938 AT_flag (dw_attr_ref a)
6939 {
6940   gcc_assert (a && AT_class (a) == dw_val_class_flag);
6941   return a->dw_attr_val.v.val_flag;
6942 }
6943
6944 /* Add a signed integer attribute value to a DIE.  */
6945
6946 static inline void
6947 add_AT_int (dw_die_ref die, enum dwarf_attribute attr_kind, HOST_WIDE_INT int_val)
6948 {
6949   dw_attr_node attr;
6950
6951   attr.dw_attr = attr_kind;
6952   attr.dw_attr_val.val_class = dw_val_class_const;
6953   attr.dw_attr_val.v.val_int = int_val;
6954   add_dwarf_attr (die, &attr);
6955 }
6956
6957 static inline HOST_WIDE_INT
6958 AT_int (dw_attr_ref a)
6959 {
6960   gcc_assert (a && AT_class (a) == dw_val_class_const);
6961   return a->dw_attr_val.v.val_int;
6962 }
6963
6964 /* Add an unsigned integer attribute value to a DIE.  */
6965
6966 static inline void
6967 add_AT_unsigned (dw_die_ref die, enum dwarf_attribute attr_kind,
6968                  unsigned HOST_WIDE_INT unsigned_val)
6969 {
6970   dw_attr_node attr;
6971
6972   attr.dw_attr = attr_kind;
6973   attr.dw_attr_val.val_class = dw_val_class_unsigned_const;
6974   attr.dw_attr_val.v.val_unsigned = unsigned_val;
6975   add_dwarf_attr (die, &attr);
6976 }
6977
6978 static inline unsigned HOST_WIDE_INT
6979 AT_unsigned (dw_attr_ref a)
6980 {
6981   gcc_assert (a && AT_class (a) == dw_val_class_unsigned_const);
6982   return a->dw_attr_val.v.val_unsigned;
6983 }
6984
6985 /* Add an unsigned double integer attribute value to a DIE.  */
6986
6987 static inline void
6988 add_AT_double (dw_die_ref die, enum dwarf_attribute attr_kind,
6989                HOST_WIDE_INT high, unsigned HOST_WIDE_INT low)
6990 {
6991   dw_attr_node attr;
6992
6993   attr.dw_attr = attr_kind;
6994   attr.dw_attr_val.val_class = dw_val_class_const_double;
6995   attr.dw_attr_val.v.val_double.high = high;
6996   attr.dw_attr_val.v.val_double.low = low;
6997   add_dwarf_attr (die, &attr);
6998 }
6999
7000 /* Add a floating point attribute value to a DIE and return it.  */
7001
7002 static inline void
7003 add_AT_vec (dw_die_ref die, enum dwarf_attribute attr_kind,
7004             unsigned int length, unsigned int elt_size, unsigned char *array)
7005 {
7006   dw_attr_node attr;
7007
7008   attr.dw_attr = attr_kind;
7009   attr.dw_attr_val.val_class = dw_val_class_vec;
7010   attr.dw_attr_val.v.val_vec.length = length;
7011   attr.dw_attr_val.v.val_vec.elt_size = elt_size;
7012   attr.dw_attr_val.v.val_vec.array = array;
7013   add_dwarf_attr (die, &attr);
7014 }
7015
7016 /* Add an 8-byte data attribute value to a DIE.  */
7017
7018 static inline void
7019 add_AT_data8 (dw_die_ref die, enum dwarf_attribute attr_kind,
7020               unsigned char data8[8])
7021 {
7022   dw_attr_node attr;
7023
7024   attr.dw_attr = attr_kind;
7025   attr.dw_attr_val.val_class = dw_val_class_data8;
7026   memcpy (attr.dw_attr_val.v.val_data8, data8, 8);
7027   add_dwarf_attr (die, &attr);
7028 }
7029
7030 /* Hash and equality functions for debug_str_hash.  */
7031
7032 static hashval_t
7033 debug_str_do_hash (const void *x)
7034 {
7035   return htab_hash_string (((const struct indirect_string_node *)x)->str);
7036 }
7037
7038 static int
7039 debug_str_eq (const void *x1, const void *x2)
7040 {
7041   return strcmp ((((const struct indirect_string_node *)x1)->str),
7042                  (const char *)x2) == 0;
7043 }
7044
7045 /* Add STR to the indirect string hash table.  */
7046
7047 static struct indirect_string_node *
7048 find_AT_string (const char *str)
7049 {
7050   struct indirect_string_node *node;
7051   void **slot;
7052
7053   if (! debug_str_hash)
7054     debug_str_hash = htab_create_ggc (10, debug_str_do_hash,
7055                                       debug_str_eq, NULL);
7056
7057   slot = htab_find_slot_with_hash (debug_str_hash, str,
7058                                    htab_hash_string (str), INSERT);
7059   if (*slot == NULL)
7060     {
7061       node = ggc_alloc_cleared_indirect_string_node ();
7062       node->str = ggc_strdup (str);
7063       *slot = node;
7064     }
7065   else
7066     node = (struct indirect_string_node *) *slot;
7067
7068   node->refcount++;
7069   return node;
7070 }
7071
7072 /* Add a string attribute value to a DIE.  */
7073
7074 static inline void
7075 add_AT_string (dw_die_ref die, enum dwarf_attribute attr_kind, const char *str)
7076 {
7077   dw_attr_node attr;
7078   struct indirect_string_node *node;
7079
7080   node = find_AT_string (str);
7081
7082   attr.dw_attr = attr_kind;
7083   attr.dw_attr_val.val_class = dw_val_class_str;
7084   attr.dw_attr_val.v.val_str = node;
7085   add_dwarf_attr (die, &attr);
7086 }
7087
7088 /* Create a label for an indirect string node, ensuring it is going to
7089    be output, unless its reference count goes down to zero.  */
7090
7091 static inline void
7092 gen_label_for_indirect_string (struct indirect_string_node *node)
7093 {
7094   char label[32];
7095
7096   if (node->label)
7097     return;
7098
7099   ASM_GENERATE_INTERNAL_LABEL (label, "LASF", dw2_string_counter);
7100   ++dw2_string_counter;
7101   node->label = xstrdup (label);
7102 }
7103
7104 /* Create a SYMBOL_REF rtx whose value is the initial address of a
7105    debug string STR.  */
7106
7107 static inline rtx
7108 get_debug_string_label (const char *str)
7109 {
7110   struct indirect_string_node *node = find_AT_string (str);
7111
7112   debug_str_hash_forced = true;
7113
7114   gen_label_for_indirect_string (node);
7115
7116   return gen_rtx_SYMBOL_REF (Pmode, node->label);
7117 }
7118
7119 static inline const char *
7120 AT_string (dw_attr_ref a)
7121 {
7122   gcc_assert (a && AT_class (a) == dw_val_class_str);
7123   return a->dw_attr_val.v.val_str->str;
7124 }
7125
7126 /* Find out whether a string should be output inline in DIE
7127    or out-of-line in .debug_str section.  */
7128
7129 static enum dwarf_form
7130 AT_string_form (dw_attr_ref a)
7131 {
7132   struct indirect_string_node *node;
7133   unsigned int len;
7134
7135   gcc_assert (a && AT_class (a) == dw_val_class_str);
7136
7137   node = a->dw_attr_val.v.val_str;
7138   if (node->form)
7139     return node->form;
7140
7141   len = strlen (node->str) + 1;
7142
7143   /* If the string is shorter or equal to the size of the reference, it is
7144      always better to put it inline.  */
7145   if (len <= DWARF_OFFSET_SIZE || node->refcount == 0)
7146     return node->form = DW_FORM_string;
7147
7148   /* If we cannot expect the linker to merge strings in .debug_str
7149      section, only put it into .debug_str if it is worth even in this
7150      single module.  */
7151   if (DWARF2_INDIRECT_STRING_SUPPORT_MISSING_ON_TARGET
7152       || ((debug_str_section->common.flags & SECTION_MERGE) == 0
7153       && (len - DWARF_OFFSET_SIZE) * node->refcount <= len))
7154     return node->form = DW_FORM_string;
7155
7156   gen_label_for_indirect_string (node);
7157
7158   return node->form = DW_FORM_strp;
7159 }
7160
7161 /* Add a DIE reference attribute value to a DIE.  */
7162
7163 static inline void
7164 add_AT_die_ref (dw_die_ref die, enum dwarf_attribute attr_kind, dw_die_ref targ_die)
7165 {
7166   dw_attr_node attr;
7167
7168   attr.dw_attr = attr_kind;
7169   attr.dw_attr_val.val_class = dw_val_class_die_ref;
7170   attr.dw_attr_val.v.val_die_ref.die = targ_die;
7171   attr.dw_attr_val.v.val_die_ref.external = 0;
7172   add_dwarf_attr (die, &attr);
7173 }
7174
7175 /* Add an AT_specification attribute to a DIE, and also make the back
7176    pointer from the specification to the definition.  */
7177
7178 static inline void
7179 add_AT_specification (dw_die_ref die, dw_die_ref targ_die)
7180 {
7181   add_AT_die_ref (die, DW_AT_specification, targ_die);
7182   gcc_assert (!targ_die->die_definition);
7183   targ_die->die_definition = die;
7184 }
7185
7186 static inline dw_die_ref
7187 AT_ref (dw_attr_ref a)
7188 {
7189   gcc_assert (a && AT_class (a) == dw_val_class_die_ref);
7190   return a->dw_attr_val.v.val_die_ref.die;
7191 }
7192
7193 static inline int
7194 AT_ref_external (dw_attr_ref a)
7195 {
7196   if (a && AT_class (a) == dw_val_class_die_ref)
7197     return a->dw_attr_val.v.val_die_ref.external;
7198
7199   return 0;
7200 }
7201
7202 static inline void
7203 set_AT_ref_external (dw_attr_ref a, int i)
7204 {
7205   gcc_assert (a && AT_class (a) == dw_val_class_die_ref);
7206   a->dw_attr_val.v.val_die_ref.external = i;
7207 }
7208
7209 /* Add an FDE reference attribute value to a DIE.  */
7210
7211 static inline void
7212 add_AT_fde_ref (dw_die_ref die, enum dwarf_attribute attr_kind, unsigned int targ_fde)
7213 {
7214   dw_attr_node attr;
7215
7216   attr.dw_attr = attr_kind;
7217   attr.dw_attr_val.val_class = dw_val_class_fde_ref;
7218   attr.dw_attr_val.v.val_fde_index = targ_fde;
7219   add_dwarf_attr (die, &attr);
7220 }
7221
7222 /* Add a location description attribute value to a DIE.  */
7223
7224 static inline void
7225 add_AT_loc (dw_die_ref die, enum dwarf_attribute attr_kind, dw_loc_descr_ref loc)
7226 {
7227   dw_attr_node attr;
7228
7229   attr.dw_attr = attr_kind;
7230   attr.dw_attr_val.val_class = dw_val_class_loc;
7231   attr.dw_attr_val.v.val_loc = loc;
7232   add_dwarf_attr (die, &attr);
7233 }
7234
7235 static inline dw_loc_descr_ref
7236 AT_loc (dw_attr_ref a)
7237 {
7238   gcc_assert (a && AT_class (a) == dw_val_class_loc);
7239   return a->dw_attr_val.v.val_loc;
7240 }
7241
7242 static inline void
7243 add_AT_loc_list (dw_die_ref die, enum dwarf_attribute attr_kind, dw_loc_list_ref loc_list)
7244 {
7245   dw_attr_node attr;
7246
7247   attr.dw_attr = attr_kind;
7248   attr.dw_attr_val.val_class = dw_val_class_loc_list;
7249   attr.dw_attr_val.v.val_loc_list = loc_list;
7250   add_dwarf_attr (die, &attr);
7251   have_location_lists = true;
7252 }
7253
7254 static inline dw_loc_list_ref
7255 AT_loc_list (dw_attr_ref a)
7256 {
7257   gcc_assert (a && AT_class (a) == dw_val_class_loc_list);
7258   return a->dw_attr_val.v.val_loc_list;
7259 }
7260
7261 static inline dw_loc_list_ref *
7262 AT_loc_list_ptr (dw_attr_ref a)
7263 {
7264   gcc_assert (a && AT_class (a) == dw_val_class_loc_list);
7265   return &a->dw_attr_val.v.val_loc_list;
7266 }
7267
7268 /* Add an address constant attribute value to a DIE.  */
7269
7270 static inline void
7271 add_AT_addr (dw_die_ref die, enum dwarf_attribute attr_kind, rtx addr)
7272 {
7273   dw_attr_node attr;
7274
7275   attr.dw_attr = attr_kind;
7276   attr.dw_attr_val.val_class = dw_val_class_addr;
7277   attr.dw_attr_val.v.val_addr = addr;
7278   add_dwarf_attr (die, &attr);
7279 }
7280
7281 /* Get the RTX from to an address DIE attribute.  */
7282
7283 static inline rtx
7284 AT_addr (dw_attr_ref a)
7285 {
7286   gcc_assert (a && AT_class (a) == dw_val_class_addr);
7287   return a->dw_attr_val.v.val_addr;
7288 }
7289
7290 /* Add a file attribute value to a DIE.  */
7291
7292 static inline void
7293 add_AT_file (dw_die_ref die, enum dwarf_attribute attr_kind,
7294              struct dwarf_file_data *fd)
7295 {
7296   dw_attr_node attr;
7297
7298   attr.dw_attr = attr_kind;
7299   attr.dw_attr_val.val_class = dw_val_class_file;
7300   attr.dw_attr_val.v.val_file = fd;
7301   add_dwarf_attr (die, &attr);
7302 }
7303
7304 /* Get the dwarf_file_data from a file DIE attribute.  */
7305
7306 static inline struct dwarf_file_data *
7307 AT_file (dw_attr_ref a)
7308 {
7309   gcc_assert (a && AT_class (a) == dw_val_class_file);
7310   return a->dw_attr_val.v.val_file;
7311 }
7312
7313 /* Add a label identifier attribute value to a DIE.  */
7314
7315 static inline void
7316 add_AT_lbl_id (dw_die_ref die, enum dwarf_attribute attr_kind, const char *lbl_id)
7317 {
7318   dw_attr_node attr;
7319
7320   attr.dw_attr = attr_kind;
7321   attr.dw_attr_val.val_class = dw_val_class_lbl_id;
7322   attr.dw_attr_val.v.val_lbl_id = xstrdup (lbl_id);
7323   add_dwarf_attr (die, &attr);
7324 }
7325
7326 /* Add a section offset attribute value to a DIE, an offset into the
7327    debug_line section.  */
7328
7329 static inline void
7330 add_AT_lineptr (dw_die_ref die, enum dwarf_attribute attr_kind,
7331                 const char *label)
7332 {
7333   dw_attr_node attr;
7334
7335   attr.dw_attr = attr_kind;
7336   attr.dw_attr_val.val_class = dw_val_class_lineptr;
7337   attr.dw_attr_val.v.val_lbl_id = xstrdup (label);
7338   add_dwarf_attr (die, &attr);
7339 }
7340
7341 /* Add a section offset attribute value to a DIE, an offset into the
7342    debug_macinfo section.  */
7343
7344 static inline void
7345 add_AT_macptr (dw_die_ref die, enum dwarf_attribute attr_kind,
7346                const char *label)
7347 {
7348   dw_attr_node attr;
7349
7350   attr.dw_attr = attr_kind;
7351   attr.dw_attr_val.val_class = dw_val_class_macptr;
7352   attr.dw_attr_val.v.val_lbl_id = xstrdup (label);
7353   add_dwarf_attr (die, &attr);
7354 }
7355
7356 /* Add an offset attribute value to a DIE.  */
7357
7358 static inline void
7359 add_AT_offset (dw_die_ref die, enum dwarf_attribute attr_kind,
7360                unsigned HOST_WIDE_INT offset)
7361 {
7362   dw_attr_node attr;
7363
7364   attr.dw_attr = attr_kind;
7365   attr.dw_attr_val.val_class = dw_val_class_offset;
7366   attr.dw_attr_val.v.val_offset = offset;
7367   add_dwarf_attr (die, &attr);
7368 }
7369
7370 /* Add an range_list attribute value to a DIE.  */
7371
7372 static void
7373 add_AT_range_list (dw_die_ref die, enum dwarf_attribute attr_kind,
7374                    long unsigned int offset)
7375 {
7376   dw_attr_node attr;
7377
7378   attr.dw_attr = attr_kind;
7379   attr.dw_attr_val.val_class = dw_val_class_range_list;
7380   attr.dw_attr_val.v.val_offset = offset;
7381   add_dwarf_attr (die, &attr);
7382 }
7383
7384 static inline const char *
7385 AT_lbl (dw_attr_ref a)
7386 {
7387   gcc_assert (a && (AT_class (a) == dw_val_class_lbl_id
7388                     || AT_class (a) == dw_val_class_lineptr
7389                     || AT_class (a) == dw_val_class_macptr));
7390   return a->dw_attr_val.v.val_lbl_id;
7391 }
7392
7393 /* Get the attribute of type attr_kind.  */
7394
7395 static dw_attr_ref
7396 get_AT (dw_die_ref die, enum dwarf_attribute attr_kind)
7397 {
7398   dw_attr_ref a;
7399   unsigned ix;
7400   dw_die_ref spec = NULL;
7401
7402   if (! die)
7403     return NULL;
7404
7405   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
7406     if (a->dw_attr == attr_kind)
7407       return a;
7408     else if (a->dw_attr == DW_AT_specification
7409              || a->dw_attr == DW_AT_abstract_origin)
7410       spec = AT_ref (a);
7411
7412   if (spec)
7413     return get_AT (spec, attr_kind);
7414
7415   return NULL;
7416 }
7417
7418 /* Return the "low pc" attribute value, typically associated with a subprogram
7419    DIE.  Return null if the "low pc" attribute is either not present, or if it
7420    cannot be represented as an assembler label identifier.  */
7421
7422 static inline const char *
7423 get_AT_low_pc (dw_die_ref die)
7424 {
7425   dw_attr_ref a = get_AT (die, DW_AT_low_pc);
7426
7427   return a ? AT_lbl (a) : NULL;
7428 }
7429
7430 /* Return the "high pc" attribute value, typically associated with a subprogram
7431    DIE.  Return null if the "high pc" attribute is either not present, or if it
7432    cannot be represented as an assembler label identifier.  */
7433
7434 static inline const char *
7435 get_AT_hi_pc (dw_die_ref die)
7436 {
7437   dw_attr_ref a = get_AT (die, DW_AT_high_pc);
7438
7439   return a ? AT_lbl (a) : NULL;
7440 }
7441
7442 /* Return the value of the string attribute designated by ATTR_KIND, or
7443    NULL if it is not present.  */
7444
7445 static inline const char *
7446 get_AT_string (dw_die_ref die, enum dwarf_attribute attr_kind)
7447 {
7448   dw_attr_ref a = get_AT (die, attr_kind);
7449
7450   return a ? AT_string (a) : NULL;
7451 }
7452
7453 /* Return the value of the flag attribute designated by ATTR_KIND, or -1
7454    if it is not present.  */
7455
7456 static inline int
7457 get_AT_flag (dw_die_ref die, enum dwarf_attribute attr_kind)
7458 {
7459   dw_attr_ref a = get_AT (die, attr_kind);
7460
7461   return a ? AT_flag (a) : 0;
7462 }
7463
7464 /* Return the value of the unsigned attribute designated by ATTR_KIND, or 0
7465    if it is not present.  */
7466
7467 static inline unsigned
7468 get_AT_unsigned (dw_die_ref die, enum dwarf_attribute attr_kind)
7469 {
7470   dw_attr_ref a = get_AT (die, attr_kind);
7471
7472   return a ? AT_unsigned (a) : 0;
7473 }
7474
7475 static inline dw_die_ref
7476 get_AT_ref (dw_die_ref die, enum dwarf_attribute attr_kind)
7477 {
7478   dw_attr_ref a = get_AT (die, attr_kind);
7479
7480   return a ? AT_ref (a) : NULL;
7481 }
7482
7483 static inline struct dwarf_file_data *
7484 get_AT_file (dw_die_ref die, enum dwarf_attribute attr_kind)
7485 {
7486   dw_attr_ref a = get_AT (die, attr_kind);
7487
7488   return a ? AT_file (a) : NULL;
7489 }
7490
7491 /* Return TRUE if the language is C++.  */
7492
7493 static inline bool
7494 is_cxx (void)
7495 {
7496   unsigned int lang = get_AT_unsigned (comp_unit_die, DW_AT_language);
7497
7498   return lang == DW_LANG_C_plus_plus || lang == DW_LANG_ObjC_plus_plus;
7499 }
7500
7501 /* Return TRUE if the language is Fortran.  */
7502
7503 static inline bool
7504 is_fortran (void)
7505 {
7506   unsigned int lang = get_AT_unsigned (comp_unit_die, DW_AT_language);
7507
7508   return (lang == DW_LANG_Fortran77
7509           || lang == DW_LANG_Fortran90
7510           || lang == DW_LANG_Fortran95);
7511 }
7512
7513 /* Return TRUE if the language is Ada.  */
7514
7515 static inline bool
7516 is_ada (void)
7517 {
7518   unsigned int lang = get_AT_unsigned (comp_unit_die, DW_AT_language);
7519
7520   return lang == DW_LANG_Ada95 || lang == DW_LANG_Ada83;
7521 }
7522
7523 /* Remove the specified attribute if present.  */
7524
7525 static void
7526 remove_AT (dw_die_ref die, enum dwarf_attribute attr_kind)
7527 {
7528   dw_attr_ref a;
7529   unsigned ix;
7530
7531   if (! die)
7532     return;
7533
7534   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
7535     if (a->dw_attr == attr_kind)
7536       {
7537         if (AT_class (a) == dw_val_class_str)
7538           if (a->dw_attr_val.v.val_str->refcount)
7539             a->dw_attr_val.v.val_str->refcount--;
7540
7541         /* VEC_ordered_remove should help reduce the number of abbrevs
7542            that are needed.  */
7543         VEC_ordered_remove (dw_attr_node, die->die_attr, ix);
7544         return;
7545       }
7546 }
7547
7548 /* Remove CHILD from its parent.  PREV must have the property that
7549    PREV->DIE_SIB == CHILD.  Does not alter CHILD.  */
7550
7551 static void
7552 remove_child_with_prev (dw_die_ref child, dw_die_ref prev)
7553 {
7554   gcc_assert (child->die_parent == prev->die_parent);
7555   gcc_assert (prev->die_sib == child);
7556   if (prev == child)
7557     {
7558       gcc_assert (child->die_parent->die_child == child);
7559       prev = NULL;
7560     }
7561   else
7562     prev->die_sib = child->die_sib;
7563   if (child->die_parent->die_child == child)
7564     child->die_parent->die_child = prev;
7565 }
7566
7567 /* Replace OLD_CHILD with NEW_CHILD.  PREV must have the property that
7568    PREV->DIE_SIB == OLD_CHILD.  Does not alter OLD_CHILD.  */
7569
7570 static void
7571 replace_child (dw_die_ref old_child, dw_die_ref new_child, dw_die_ref prev)
7572 {
7573   dw_die_ref parent = old_child->die_parent;
7574
7575   gcc_assert (parent == prev->die_parent);
7576   gcc_assert (prev->die_sib == old_child);
7577
7578   new_child->die_parent = parent;
7579   if (prev == old_child)
7580     {
7581       gcc_assert (parent->die_child == old_child);
7582       new_child->die_sib = new_child;
7583     }
7584   else
7585     {
7586       prev->die_sib = new_child;
7587       new_child->die_sib = old_child->die_sib;
7588     }
7589   if (old_child->die_parent->die_child == old_child)
7590     old_child->die_parent->die_child = new_child;
7591 }
7592
7593 /* Move all children from OLD_PARENT to NEW_PARENT.  */
7594
7595 static void
7596 move_all_children (dw_die_ref old_parent, dw_die_ref new_parent)
7597 {
7598   dw_die_ref c;
7599   new_parent->die_child = old_parent->die_child;
7600   old_parent->die_child = NULL;
7601   FOR_EACH_CHILD (new_parent, c, c->die_parent = new_parent);
7602 }
7603
7604 /* Remove child DIE whose die_tag is TAG.  Do nothing if no child
7605    matches TAG.  */
7606
7607 static void
7608 remove_child_TAG (dw_die_ref die, enum dwarf_tag tag)
7609 {
7610   dw_die_ref c;
7611
7612   c = die->die_child;
7613   if (c) do {
7614     dw_die_ref prev = c;
7615     c = c->die_sib;
7616     while (c->die_tag == tag)
7617       {
7618         remove_child_with_prev (c, prev);
7619         /* Might have removed every child.  */
7620         if (c == c->die_sib)
7621           return;
7622         c = c->die_sib;
7623       }
7624   } while (c != die->die_child);
7625 }
7626
7627 /* Add a CHILD_DIE as the last child of DIE.  */
7628
7629 static void
7630 add_child_die (dw_die_ref die, dw_die_ref child_die)
7631 {
7632   /* FIXME this should probably be an assert.  */
7633   if (! die || ! child_die)
7634     return;
7635   gcc_assert (die != child_die);
7636
7637   child_die->die_parent = die;
7638   if (die->die_child)
7639     {
7640       child_die->die_sib = die->die_child->die_sib;
7641       die->die_child->die_sib = child_die;
7642     }
7643   else
7644     child_die->die_sib = child_die;
7645   die->die_child = child_die;
7646 }
7647
7648 /* Move CHILD, which must be a child of PARENT or the DIE for which PARENT
7649    is the specification, to the end of PARENT's list of children.
7650    This is done by removing and re-adding it.  */
7651
7652 static void
7653 splice_child_die (dw_die_ref parent, dw_die_ref child)
7654 {
7655   dw_die_ref p;
7656
7657   /* We want the declaration DIE from inside the class, not the
7658      specification DIE at toplevel.  */
7659   if (child->die_parent != parent)
7660     {
7661       dw_die_ref tmp = get_AT_ref (child, DW_AT_specification);
7662
7663       if (tmp)
7664         child = tmp;
7665     }
7666
7667   gcc_assert (child->die_parent == parent
7668               || (child->die_parent
7669                   == get_AT_ref (parent, DW_AT_specification)));
7670
7671   for (p = child->die_parent->die_child; ; p = p->die_sib)
7672     if (p->die_sib == child)
7673       {
7674         remove_child_with_prev (child, p);
7675         break;
7676       }
7677
7678   add_child_die (parent, child);
7679 }
7680
7681 /* Return a pointer to a newly created DIE node.  */
7682
7683 static inline dw_die_ref
7684 new_die (enum dwarf_tag tag_value, dw_die_ref parent_die, tree t)
7685 {
7686   dw_die_ref die = ggc_alloc_cleared_die_node ();
7687
7688   die->die_tag = tag_value;
7689
7690   if (parent_die != NULL)
7691     add_child_die (parent_die, die);
7692   else
7693     {
7694       limbo_die_node *limbo_node;
7695
7696       limbo_node = ggc_alloc_cleared_limbo_die_node ();
7697       limbo_node->die = die;
7698       limbo_node->created_for = t;
7699       limbo_node->next = limbo_die_list;
7700       limbo_die_list = limbo_node;
7701     }
7702
7703   return die;
7704 }
7705
7706 /* Return the DIE associated with the given type specifier.  */
7707
7708 static inline dw_die_ref
7709 lookup_type_die (tree type)
7710 {
7711   return TYPE_SYMTAB_DIE (type);
7712 }
7713
7714 /* Equate a DIE to a given type specifier.  */
7715
7716 static inline void
7717 equate_type_number_to_die (tree type, dw_die_ref type_die)
7718 {
7719   TYPE_SYMTAB_DIE (type) = type_die;
7720 }
7721
7722 /* Returns a hash value for X (which really is a die_struct).  */
7723
7724 static hashval_t
7725 decl_die_table_hash (const void *x)
7726 {
7727   return (hashval_t) ((const_dw_die_ref) x)->decl_id;
7728 }
7729
7730 /* Return nonzero if decl_id of die_struct X is the same as UID of decl *Y.  */
7731
7732 static int
7733 decl_die_table_eq (const void *x, const void *y)
7734 {
7735   return (((const_dw_die_ref) x)->decl_id == DECL_UID ((const_tree) y));
7736 }
7737
7738 /* Return the DIE associated with a given declaration.  */
7739
7740 static inline dw_die_ref
7741 lookup_decl_die (tree decl)
7742 {
7743   return (dw_die_ref) htab_find_with_hash (decl_die_table, decl, DECL_UID (decl));
7744 }
7745
7746 /* Returns a hash value for X (which really is a var_loc_list).  */
7747
7748 static hashval_t
7749 decl_loc_table_hash (const void *x)
7750 {
7751   return (hashval_t) ((const var_loc_list *) x)->decl_id;
7752 }
7753
7754 /* Return nonzero if decl_id of var_loc_list X is the same as
7755    UID of decl *Y.  */
7756
7757 static int
7758 decl_loc_table_eq (const void *x, const void *y)
7759 {
7760   return (((const var_loc_list *) x)->decl_id == DECL_UID ((const_tree) y));
7761 }
7762
7763 /* Return the var_loc list associated with a given declaration.  */
7764
7765 static inline var_loc_list *
7766 lookup_decl_loc (const_tree decl)
7767 {
7768   if (!decl_loc_table)
7769     return NULL;
7770   return (var_loc_list *)
7771     htab_find_with_hash (decl_loc_table, decl, DECL_UID (decl));
7772 }
7773
7774 /* Equate a DIE to a particular declaration.  */
7775
7776 static void
7777 equate_decl_number_to_die (tree decl, dw_die_ref decl_die)
7778 {
7779   unsigned int decl_id = DECL_UID (decl);
7780   void **slot;
7781
7782   slot = htab_find_slot_with_hash (decl_die_table, decl, decl_id, INSERT);
7783   *slot = decl_die;
7784   decl_die->decl_id = decl_id;
7785 }
7786
7787 /* Return how many bits covers PIECE EXPR_LIST.  */
7788
7789 static int
7790 decl_piece_bitsize (rtx piece)
7791 {
7792   int ret = (int) GET_MODE (piece);
7793   if (ret)
7794     return ret;
7795   gcc_assert (GET_CODE (XEXP (piece, 0)) == CONCAT
7796               && CONST_INT_P (XEXP (XEXP (piece, 0), 0)));
7797   return INTVAL (XEXP (XEXP (piece, 0), 0));
7798 }
7799
7800 /* Return pointer to the location of location note in PIECE EXPR_LIST.  */
7801
7802 static rtx *
7803 decl_piece_varloc_ptr (rtx piece)
7804 {
7805   if ((int) GET_MODE (piece))
7806     return &XEXP (piece, 0);
7807   else
7808     return &XEXP (XEXP (piece, 0), 1);
7809 }
7810
7811 /* Create an EXPR_LIST for location note LOC_NOTE covering BITSIZE bits.
7812    Next is the chain of following piece nodes.  */
7813
7814 static rtx
7815 decl_piece_node (rtx loc_note, HOST_WIDE_INT bitsize, rtx next)
7816 {
7817   if (bitsize <= (int) MAX_MACHINE_MODE)
7818     return alloc_EXPR_LIST (bitsize, loc_note, next);
7819   else
7820     return alloc_EXPR_LIST (0, gen_rtx_CONCAT (VOIDmode,
7821                                                GEN_INT (bitsize),
7822                                                loc_note), next);
7823 }
7824
7825 /* Return rtx that should be stored into loc field for
7826    LOC_NOTE and BITPOS/BITSIZE.  */
7827
7828 static rtx
7829 construct_piece_list (rtx loc_note, HOST_WIDE_INT bitpos,
7830                       HOST_WIDE_INT bitsize)
7831 {
7832   if (bitsize != -1)
7833     {
7834       loc_note = decl_piece_node (loc_note, bitsize, NULL_RTX);
7835       if (bitpos != 0)
7836         loc_note = decl_piece_node (NULL_RTX, bitpos, loc_note);
7837     }
7838   return loc_note;
7839 }
7840
7841 /* This function either modifies location piece list *DEST in
7842    place (if SRC and INNER is NULL), or copies location piece list
7843    *SRC to *DEST while modifying it.  Location BITPOS is modified
7844    to contain LOC_NOTE, any pieces overlapping it are removed resp.
7845    not copied and if needed some padding around it is added.
7846    When modifying in place, DEST should point to EXPR_LIST where
7847    earlier pieces cover PIECE_BITPOS bits, when copying SRC points
7848    to the start of the whole list and INNER points to the EXPR_LIST
7849    where earlier pieces cover PIECE_BITPOS bits.  */
7850
7851 static void
7852 adjust_piece_list (rtx *dest, rtx *src, rtx *inner,
7853                    HOST_WIDE_INT bitpos, HOST_WIDE_INT piece_bitpos,
7854                    HOST_WIDE_INT bitsize, rtx loc_note)
7855 {
7856   int diff;
7857   bool copy = inner != NULL;
7858
7859   if (copy)
7860     {
7861       /* First copy all nodes preceeding the current bitpos.  */
7862       while (src != inner)
7863         {
7864           *dest = decl_piece_node (*decl_piece_varloc_ptr (*src),
7865                                    decl_piece_bitsize (*src), NULL_RTX);
7866           dest = &XEXP (*dest, 1);
7867           src = &XEXP (*src, 1);
7868         }
7869     }
7870   /* Add padding if needed.  */
7871   if (bitpos != piece_bitpos)
7872     {
7873       *dest = decl_piece_node (NULL_RTX, bitpos - piece_bitpos,
7874                                copy ? NULL_RTX : *dest);
7875       dest = &XEXP (*dest, 1);
7876     }
7877   else if (*dest && decl_piece_bitsize (*dest) == bitsize)
7878     {
7879       gcc_assert (!copy);
7880       /* A piece with correct bitpos and bitsize already exist,
7881          just update the location for it and return.  */
7882       *decl_piece_varloc_ptr (*dest) = loc_note;
7883       return;
7884     }
7885   /* Add the piece that changed.  */
7886   *dest = decl_piece_node (loc_note, bitsize, copy ? NULL_RTX : *dest);
7887   dest = &XEXP (*dest, 1);
7888   /* Skip over pieces that overlap it.  */
7889   diff = bitpos - piece_bitpos + bitsize;
7890   if (!copy)
7891     src = dest;
7892   while (diff > 0 && *src)
7893     {
7894       rtx piece = *src;
7895       diff -= decl_piece_bitsize (piece);
7896       if (copy)
7897         src = &XEXP (piece, 1);
7898       else
7899         {
7900           *src = XEXP (piece, 1);
7901           free_EXPR_LIST_node (piece);
7902         }
7903     }
7904   /* Add padding if needed.  */
7905   if (diff < 0 && *src)
7906     {
7907       if (!copy)
7908         dest = src;
7909       *dest = decl_piece_node (NULL_RTX, -diff, copy ? NULL_RTX : *dest);
7910       dest = &XEXP (*dest, 1);
7911     }
7912   if (!copy)
7913     return;
7914   /* Finally copy all nodes following it.  */
7915   while (*src)
7916     {
7917       *dest = decl_piece_node (*decl_piece_varloc_ptr (*src),
7918                                decl_piece_bitsize (*src), NULL_RTX);
7919       dest = &XEXP (*dest, 1);
7920       src = &XEXP (*src, 1);
7921     }
7922 }
7923
7924 /* Add a variable location node to the linked list for DECL.  */
7925
7926 static struct var_loc_node *
7927 add_var_loc_to_decl (tree decl, rtx loc_note, const char *label)
7928 {
7929   unsigned int decl_id;
7930   var_loc_list *temp;
7931   void **slot;
7932   struct var_loc_node *loc = NULL;
7933   HOST_WIDE_INT bitsize = -1, bitpos = -1;
7934
7935   if (DECL_DEBUG_EXPR_IS_FROM (decl))
7936     {
7937       tree realdecl = DECL_DEBUG_EXPR (decl);
7938       if (realdecl && handled_component_p (realdecl))
7939         {
7940           HOST_WIDE_INT maxsize;
7941           tree innerdecl;
7942           innerdecl
7943             = get_ref_base_and_extent (realdecl, &bitpos, &bitsize, &maxsize);
7944           if (!DECL_P (innerdecl)
7945               || DECL_IGNORED_P (innerdecl)
7946               || TREE_STATIC (innerdecl)
7947               || bitsize <= 0
7948               || bitpos + bitsize > 256
7949               || bitsize != maxsize)
7950             return NULL;
7951           decl = innerdecl;
7952         }
7953     }
7954
7955   decl_id = DECL_UID (decl);
7956   slot = htab_find_slot_with_hash (decl_loc_table, decl, decl_id, INSERT);
7957   if (*slot == NULL)
7958     {
7959       temp = ggc_alloc_cleared_var_loc_list ();
7960       temp->decl_id = decl_id;
7961       *slot = temp;
7962     }
7963   else
7964     temp = (var_loc_list *) *slot;
7965
7966   if (temp->last)
7967     {
7968       struct var_loc_node *last = temp->last, *unused = NULL;
7969       rtx *piece_loc = NULL, last_loc_note;
7970       int piece_bitpos = 0;
7971       if (last->next)
7972         {
7973           last = last->next;
7974           gcc_assert (last->next == NULL);
7975         }
7976       if (bitsize != -1 && GET_CODE (last->loc) == EXPR_LIST)
7977         {
7978           piece_loc = &last->loc;
7979           do
7980             {
7981               int cur_bitsize = decl_piece_bitsize (*piece_loc);
7982               if (piece_bitpos + cur_bitsize > bitpos)
7983                 break;
7984               piece_bitpos += cur_bitsize;
7985               piece_loc = &XEXP (*piece_loc, 1);
7986             }
7987           while (*piece_loc);
7988         }
7989       /* TEMP->LAST here is either pointer to the last but one or
7990          last element in the chained list, LAST is pointer to the
7991          last element.  */
7992       if (label && strcmp (last->label, label) == 0)
7993         {
7994           /* For SRA optimized variables if there weren't any real
7995              insns since last note, just modify the last node.  */
7996           if (piece_loc != NULL)
7997             {
7998               adjust_piece_list (piece_loc, NULL, NULL,
7999                                  bitpos, piece_bitpos, bitsize, loc_note);
8000               return NULL;
8001             }
8002           /* If the last note doesn't cover any instructions, remove it.  */
8003           if (temp->last != last)
8004             {
8005               temp->last->next = NULL;
8006               unused = last;
8007               last = temp->last;
8008               gcc_assert (strcmp (last->label, label) != 0);
8009             }
8010           else
8011             {
8012               gcc_assert (temp->first == temp->last);
8013               memset (temp->last, '\0', sizeof (*temp->last));
8014               temp->last->loc = construct_piece_list (loc_note, bitpos, bitsize);
8015               return temp->last;
8016             }
8017         }
8018       if (bitsize == -1 && NOTE_P (last->loc))
8019         last_loc_note = last->loc;
8020       else if (piece_loc != NULL
8021                && *piece_loc != NULL_RTX
8022                && piece_bitpos == bitpos
8023                && decl_piece_bitsize (*piece_loc) == bitsize)
8024         last_loc_note = *decl_piece_varloc_ptr (*piece_loc);
8025       else
8026         last_loc_note = NULL_RTX;
8027       /* If the current location is the same as the end of the list,
8028          and either both or neither of the locations is uninitialized,
8029          we have nothing to do.  */
8030       if (last_loc_note == NULL_RTX
8031           || (!rtx_equal_p (NOTE_VAR_LOCATION_LOC (last_loc_note),
8032                             NOTE_VAR_LOCATION_LOC (loc_note)))
8033           || ((NOTE_VAR_LOCATION_STATUS (last_loc_note)
8034                != NOTE_VAR_LOCATION_STATUS (loc_note))
8035               && ((NOTE_VAR_LOCATION_STATUS (last_loc_note)
8036                    == VAR_INIT_STATUS_UNINITIALIZED)
8037                   || (NOTE_VAR_LOCATION_STATUS (loc_note)
8038                       == VAR_INIT_STATUS_UNINITIALIZED))))
8039         {
8040           /* Add LOC to the end of list and update LAST.  If the last
8041              element of the list has been removed above, reuse its
8042              memory for the new node, otherwise allocate a new one.  */
8043           if (unused)
8044             {
8045               loc = unused;
8046               memset (loc, '\0', sizeof (*loc));
8047             }
8048           else
8049             loc = ggc_alloc_cleared_var_loc_node ();
8050           if (bitsize == -1 || piece_loc == NULL)
8051             loc->loc = construct_piece_list (loc_note, bitpos, bitsize);
8052           else
8053             adjust_piece_list (&loc->loc, &last->loc, piece_loc,
8054                                bitpos, piece_bitpos, bitsize, loc_note);
8055           last->next = loc;
8056           /* Ensure TEMP->LAST will point either to the new last but one
8057              element of the chain, or to the last element in it.  */
8058           if (last != temp->last)
8059             temp->last = last;
8060         }
8061       else if (unused)
8062         ggc_free (unused);
8063     }
8064   else
8065     {
8066       loc = ggc_alloc_cleared_var_loc_node ();
8067       temp->first = loc;
8068       temp->last = loc;
8069       loc->loc = construct_piece_list (loc_note, bitpos, bitsize);
8070     }
8071   return loc;
8072 }
8073 \f
8074 /* Keep track of the number of spaces used to indent the
8075    output of the debugging routines that print the structure of
8076    the DIE internal representation.  */
8077 static int print_indent;
8078
8079 /* Indent the line the number of spaces given by print_indent.  */
8080
8081 static inline void
8082 print_spaces (FILE *outfile)
8083 {
8084   fprintf (outfile, "%*s", print_indent, "");
8085 }
8086
8087 /* Print a type signature in hex.  */
8088
8089 static inline void
8090 print_signature (FILE *outfile, char *sig)
8091 {
8092   int i;
8093
8094   for (i = 0; i < DWARF_TYPE_SIGNATURE_SIZE; i++)
8095     fprintf (outfile, "%02x", sig[i] & 0xff);
8096 }
8097
8098 /* Print the information associated with a given DIE, and its children.
8099    This routine is a debugging aid only.  */
8100
8101 static void
8102 print_die (dw_die_ref die, FILE *outfile)
8103 {
8104   dw_attr_ref a;
8105   dw_die_ref c;
8106   unsigned ix;
8107
8108   print_spaces (outfile);
8109   fprintf (outfile, "DIE %4ld: %s\n",
8110            die->die_offset, dwarf_tag_name (die->die_tag));
8111   print_spaces (outfile);
8112   fprintf (outfile, "  abbrev id: %lu", die->die_abbrev);
8113   fprintf (outfile, " offset: %ld\n", die->die_offset);
8114   if (dwarf_version >= 4 && die->die_id.die_type_node)
8115     {
8116       print_spaces (outfile);
8117       fprintf (outfile, "  signature: ");
8118       print_signature (outfile, die->die_id.die_type_node->signature);
8119       fprintf (outfile, "\n");
8120     }
8121
8122   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
8123     {
8124       print_spaces (outfile);
8125       fprintf (outfile, "  %s: ", dwarf_attr_name (a->dw_attr));
8126
8127       switch (AT_class (a))
8128         {
8129         case dw_val_class_addr:
8130           fprintf (outfile, "address");
8131           break;
8132         case dw_val_class_offset:
8133           fprintf (outfile, "offset");
8134           break;
8135         case dw_val_class_loc:
8136           fprintf (outfile, "location descriptor");
8137           break;
8138         case dw_val_class_loc_list:
8139           fprintf (outfile, "location list -> label:%s",
8140                    AT_loc_list (a)->ll_symbol);
8141           break;
8142         case dw_val_class_range_list:
8143           fprintf (outfile, "range list");
8144           break;
8145         case dw_val_class_const:
8146           fprintf (outfile, HOST_WIDE_INT_PRINT_DEC, AT_int (a));
8147           break;
8148         case dw_val_class_unsigned_const:
8149           fprintf (outfile, HOST_WIDE_INT_PRINT_UNSIGNED, AT_unsigned (a));
8150           break;
8151         case dw_val_class_const_double:
8152           fprintf (outfile, "constant ("HOST_WIDE_INT_PRINT_DEC","\
8153                             HOST_WIDE_INT_PRINT_UNSIGNED")",
8154                    a->dw_attr_val.v.val_double.high,
8155                    a->dw_attr_val.v.val_double.low);
8156           break;
8157         case dw_val_class_vec:
8158           fprintf (outfile, "floating-point or vector constant");
8159           break;
8160         case dw_val_class_flag:
8161           fprintf (outfile, "%u", AT_flag (a));
8162           break;
8163         case dw_val_class_die_ref:
8164           if (AT_ref (a) != NULL)
8165             {
8166               if (dwarf_version >= 4 && AT_ref (a)->die_id.die_type_node)
8167                 {
8168                   fprintf (outfile, "die -> signature: ");
8169                   print_signature (outfile,
8170                                    AT_ref (a)->die_id.die_type_node->signature);
8171                 }
8172               else if (dwarf_version < 4 && AT_ref (a)->die_id.die_symbol)
8173                 fprintf (outfile, "die -> label: %s",
8174                          AT_ref (a)->die_id.die_symbol);
8175               else
8176                 fprintf (outfile, "die -> %ld", AT_ref (a)->die_offset);
8177             }
8178           else
8179             fprintf (outfile, "die -> <null>");
8180           break;
8181         case dw_val_class_lbl_id:
8182         case dw_val_class_lineptr:
8183         case dw_val_class_macptr:
8184           fprintf (outfile, "label: %s", AT_lbl (a));
8185           break;
8186         case dw_val_class_str:
8187           if (AT_string (a) != NULL)
8188             fprintf (outfile, "\"%s\"", AT_string (a));
8189           else
8190             fprintf (outfile, "<null>");
8191           break;
8192         case dw_val_class_file:
8193           fprintf (outfile, "\"%s\" (%d)", AT_file (a)->filename,
8194                    AT_file (a)->emitted_number);
8195           break;
8196         case dw_val_class_data8:
8197           {
8198             int i;
8199
8200             for (i = 0; i < 8; i++)
8201               fprintf (outfile, "%02x", a->dw_attr_val.v.val_data8[i]);
8202             break;
8203           }
8204         default:
8205           break;
8206         }
8207
8208       fprintf (outfile, "\n");
8209     }
8210
8211   if (die->die_child != NULL)
8212     {
8213       print_indent += 4;
8214       FOR_EACH_CHILD (die, c, print_die (c, outfile));
8215       print_indent -= 4;
8216     }
8217   if (print_indent == 0)
8218     fprintf (outfile, "\n");
8219 }
8220
8221 /* Print the contents of the source code line number correspondence table.
8222    This routine is a debugging aid only.  */
8223
8224 static void
8225 print_dwarf_line_table (FILE *outfile)
8226 {
8227   unsigned i;
8228   dw_line_info_ref line_info;
8229
8230   fprintf (outfile, "\n\nDWARF source line information\n");
8231   for (i = 1; i < line_info_table_in_use; i++)
8232     {
8233       line_info = &line_info_table[i];
8234       fprintf (outfile, "%5d: %4ld %6ld\n", i,
8235                line_info->dw_file_num,
8236                line_info->dw_line_num);
8237     }
8238
8239   fprintf (outfile, "\n\n");
8240 }
8241
8242 /* Print the information collected for a given DIE.  */
8243
8244 DEBUG_FUNCTION void
8245 debug_dwarf_die (dw_die_ref die)
8246 {
8247   print_die (die, stderr);
8248 }
8249
8250 /* Print all DWARF information collected for the compilation unit.
8251    This routine is a debugging aid only.  */
8252
8253 DEBUG_FUNCTION void
8254 debug_dwarf (void)
8255 {
8256   print_indent = 0;
8257   print_die (comp_unit_die, stderr);
8258   if (! DWARF2_ASM_LINE_DEBUG_INFO)
8259     print_dwarf_line_table (stderr);
8260 }
8261 \f
8262 /* Start a new compilation unit DIE for an include file.  OLD_UNIT is the CU
8263    for the enclosing include file, if any.  BINCL_DIE is the DW_TAG_GNU_BINCL
8264    DIE that marks the start of the DIEs for this include file.  */
8265
8266 static dw_die_ref
8267 push_new_compile_unit (dw_die_ref old_unit, dw_die_ref bincl_die)
8268 {
8269   const char *filename = get_AT_string (bincl_die, DW_AT_name);
8270   dw_die_ref new_unit = gen_compile_unit_die (filename);
8271
8272   new_unit->die_sib = old_unit;
8273   return new_unit;
8274 }
8275
8276 /* Close an include-file CU and reopen the enclosing one.  */
8277
8278 static dw_die_ref
8279 pop_compile_unit (dw_die_ref old_unit)
8280 {
8281   dw_die_ref new_unit = old_unit->die_sib;
8282
8283   old_unit->die_sib = NULL;
8284   return new_unit;
8285 }
8286
8287 #define CHECKSUM(FOO) md5_process_bytes (&(FOO), sizeof (FOO), ctx)
8288 #define CHECKSUM_STRING(FOO) md5_process_bytes ((FOO), strlen (FOO), ctx)
8289
8290 /* Calculate the checksum of a location expression.  */
8291
8292 static inline void
8293 loc_checksum (dw_loc_descr_ref loc, struct md5_ctx *ctx)
8294 {
8295   int tem;
8296
8297   tem = (loc->dtprel << 8) | ((unsigned int) loc->dw_loc_opc);
8298   CHECKSUM (tem);
8299   CHECKSUM (loc->dw_loc_oprnd1);
8300   CHECKSUM (loc->dw_loc_oprnd2);
8301 }
8302
8303 /* Calculate the checksum of an attribute.  */
8304
8305 static void
8306 attr_checksum (dw_attr_ref at, struct md5_ctx *ctx, int *mark)
8307 {
8308   dw_loc_descr_ref loc;
8309   rtx r;
8310
8311   CHECKSUM (at->dw_attr);
8312
8313   /* We don't care that this was compiled with a different compiler
8314      snapshot; if the output is the same, that's what matters.  */
8315   if (at->dw_attr == DW_AT_producer)
8316     return;
8317
8318   switch (AT_class (at))
8319     {
8320     case dw_val_class_const:
8321       CHECKSUM (at->dw_attr_val.v.val_int);
8322       break;
8323     case dw_val_class_unsigned_const:
8324       CHECKSUM (at->dw_attr_val.v.val_unsigned);
8325       break;
8326     case dw_val_class_const_double:
8327       CHECKSUM (at->dw_attr_val.v.val_double);
8328       break;
8329     case dw_val_class_vec:
8330       CHECKSUM (at->dw_attr_val.v.val_vec);
8331       break;
8332     case dw_val_class_flag:
8333       CHECKSUM (at->dw_attr_val.v.val_flag);
8334       break;
8335     case dw_val_class_str:
8336       CHECKSUM_STRING (AT_string (at));
8337       break;
8338
8339     case dw_val_class_addr:
8340       r = AT_addr (at);
8341       gcc_assert (GET_CODE (r) == SYMBOL_REF);
8342       CHECKSUM_STRING (XSTR (r, 0));
8343       break;
8344
8345     case dw_val_class_offset:
8346       CHECKSUM (at->dw_attr_val.v.val_offset);
8347       break;
8348
8349     case dw_val_class_loc:
8350       for (loc = AT_loc (at); loc; loc = loc->dw_loc_next)
8351         loc_checksum (loc, ctx);
8352       break;
8353
8354     case dw_val_class_die_ref:
8355       die_checksum (AT_ref (at), ctx, mark);
8356       break;
8357
8358     case dw_val_class_fde_ref:
8359     case dw_val_class_lbl_id:
8360     case dw_val_class_lineptr:
8361     case dw_val_class_macptr:
8362       break;
8363
8364     case dw_val_class_file:
8365       CHECKSUM_STRING (AT_file (at)->filename);
8366       break;
8367
8368     case dw_val_class_data8:
8369       CHECKSUM (at->dw_attr_val.v.val_data8);
8370       break;
8371
8372     default:
8373       break;
8374     }
8375 }
8376
8377 /* Calculate the checksum of a DIE.  */
8378
8379 static void
8380 die_checksum (dw_die_ref die, struct md5_ctx *ctx, int *mark)
8381 {
8382   dw_die_ref c;
8383   dw_attr_ref a;
8384   unsigned ix;
8385
8386   /* To avoid infinite recursion.  */
8387   if (die->die_mark)
8388     {
8389       CHECKSUM (die->die_mark);
8390       return;
8391     }
8392   die->die_mark = ++(*mark);
8393
8394   CHECKSUM (die->die_tag);
8395
8396   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
8397     attr_checksum (a, ctx, mark);
8398
8399   FOR_EACH_CHILD (die, c, die_checksum (c, ctx, mark));
8400 }
8401
8402 #undef CHECKSUM
8403 #undef CHECKSUM_STRING
8404
8405 /* For DWARF-4 types, include the trailing NULL when checksumming strings.  */
8406 #define CHECKSUM(FOO) md5_process_bytes (&(FOO), sizeof (FOO), ctx)
8407 #define CHECKSUM_STRING(FOO) md5_process_bytes ((FOO), strlen (FOO) + 1, ctx)
8408 #define CHECKSUM_SLEB128(FOO) checksum_sleb128 ((FOO), ctx)
8409 #define CHECKSUM_ULEB128(FOO) checksum_uleb128 ((FOO), ctx)
8410 #define CHECKSUM_ATTR(FOO) \
8411   if (FOO) attr_checksum_ordered (die->die_tag, (FOO), ctx, mark)
8412
8413 /* Calculate the checksum of a number in signed LEB128 format.  */
8414
8415 static void
8416 checksum_sleb128 (HOST_WIDE_INT value, struct md5_ctx *ctx)
8417 {
8418   unsigned char byte;
8419   bool more;
8420
8421   while (1)
8422     {
8423       byte = (value & 0x7f);
8424       value >>= 7;
8425       more = !((value == 0 && (byte & 0x40) == 0)
8426                 || (value == -1 && (byte & 0x40) != 0));
8427       if (more)
8428         byte |= 0x80;
8429       CHECKSUM (byte);
8430       if (!more)
8431         break;
8432     }
8433 }
8434
8435 /* Calculate the checksum of a number in unsigned LEB128 format.  */
8436
8437 static void
8438 checksum_uleb128 (unsigned HOST_WIDE_INT value, struct md5_ctx *ctx)
8439 {
8440   while (1)
8441     {
8442       unsigned char byte = (value & 0x7f);
8443       value >>= 7;
8444       if (value != 0)
8445         /* More bytes to follow.  */
8446         byte |= 0x80;
8447       CHECKSUM (byte);
8448       if (value == 0)
8449         break;
8450     }
8451 }
8452
8453 /* Checksum the context of the DIE.  This adds the names of any
8454    surrounding namespaces or structures to the checksum.  */
8455
8456 static void
8457 checksum_die_context (dw_die_ref die, struct md5_ctx *ctx)
8458 {
8459   const char *name;
8460   dw_die_ref spec;
8461   int tag = die->die_tag;
8462
8463   if (tag != DW_TAG_namespace
8464       && tag != DW_TAG_structure_type
8465       && tag != DW_TAG_class_type)
8466     return;
8467
8468   name = get_AT_string (die, DW_AT_name);
8469
8470   spec = get_AT_ref (die, DW_AT_specification);
8471   if (spec != NULL)
8472     die = spec;
8473
8474   if (die->die_parent != NULL)
8475     checksum_die_context (die->die_parent, ctx);
8476
8477   CHECKSUM_ULEB128 ('C');
8478   CHECKSUM_ULEB128 (tag);
8479   if (name != NULL)
8480     CHECKSUM_STRING (name);
8481 }
8482
8483 /* Calculate the checksum of a location expression.  */
8484
8485 static inline void
8486 loc_checksum_ordered (dw_loc_descr_ref loc, struct md5_ctx *ctx)
8487 {
8488   /* Special case for lone DW_OP_plus_uconst: checksum as if the location
8489      were emitted as a DW_FORM_sdata instead of a location expression.  */
8490   if (loc->dw_loc_opc == DW_OP_plus_uconst && loc->dw_loc_next == NULL)
8491     {
8492       CHECKSUM_ULEB128 (DW_FORM_sdata);
8493       CHECKSUM_SLEB128 ((HOST_WIDE_INT) loc->dw_loc_oprnd1.v.val_unsigned);
8494       return;
8495     }
8496
8497   /* Otherwise, just checksum the raw location expression.  */
8498   while (loc != NULL)
8499     {
8500       CHECKSUM_ULEB128 (loc->dw_loc_opc);
8501       CHECKSUM (loc->dw_loc_oprnd1);
8502       CHECKSUM (loc->dw_loc_oprnd2);
8503       loc = loc->dw_loc_next;
8504     }
8505 }
8506
8507 /* Calculate the checksum of an attribute.  */
8508
8509 static void
8510 attr_checksum_ordered (enum dwarf_tag tag, dw_attr_ref at,
8511                        struct md5_ctx *ctx, int *mark)
8512 {
8513   dw_loc_descr_ref loc;
8514   rtx r;
8515
8516   if (AT_class (at) == dw_val_class_die_ref)
8517     {
8518       dw_die_ref target_die = AT_ref (at);
8519
8520       /* For pointer and reference types, we checksum only the (qualified)
8521          name of the target type (if there is a name).  For friend entries,
8522          we checksum only the (qualified) name of the target type or function.
8523          This allows the checksum to remain the same whether the target type
8524          is complete or not.  */
8525       if ((at->dw_attr == DW_AT_type
8526            && (tag == DW_TAG_pointer_type
8527                || tag == DW_TAG_reference_type
8528                || tag == DW_TAG_rvalue_reference_type
8529                || tag == DW_TAG_ptr_to_member_type))
8530           || (at->dw_attr == DW_AT_friend
8531               && tag == DW_TAG_friend))
8532         {
8533           dw_attr_ref name_attr = get_AT (target_die, DW_AT_name);
8534
8535           if (name_attr != NULL)
8536             {
8537               dw_die_ref decl = get_AT_ref (target_die, DW_AT_specification);
8538
8539               if (decl == NULL)
8540                 decl = target_die;
8541               CHECKSUM_ULEB128 ('N');
8542               CHECKSUM_ULEB128 (at->dw_attr);
8543               if (decl->die_parent != NULL)
8544                 checksum_die_context (decl->die_parent, ctx);
8545               CHECKSUM_ULEB128 ('E');
8546               CHECKSUM_STRING (AT_string (name_attr));
8547               return;
8548             }
8549         }
8550
8551       /* For all other references to another DIE, we check to see if the
8552          target DIE has already been visited.  If it has, we emit a
8553          backward reference; if not, we descend recursively.  */
8554       if (target_die->die_mark > 0)
8555         {
8556           CHECKSUM_ULEB128 ('R');
8557           CHECKSUM_ULEB128 (at->dw_attr);
8558           CHECKSUM_ULEB128 (target_die->die_mark);
8559         }
8560       else
8561         {
8562           dw_die_ref decl = get_AT_ref (target_die, DW_AT_specification);
8563
8564           if (decl == NULL)
8565             decl = target_die;
8566           target_die->die_mark = ++(*mark);
8567           CHECKSUM_ULEB128 ('T');
8568           CHECKSUM_ULEB128 (at->dw_attr);
8569           if (decl->die_parent != NULL)
8570             checksum_die_context (decl->die_parent, ctx);
8571           die_checksum_ordered (target_die, ctx, mark);
8572         }
8573       return;
8574     }
8575
8576   CHECKSUM_ULEB128 ('A');
8577   CHECKSUM_ULEB128 (at->dw_attr);
8578
8579   switch (AT_class (at))
8580     {
8581     case dw_val_class_const:
8582       CHECKSUM_ULEB128 (DW_FORM_sdata);
8583       CHECKSUM_SLEB128 (at->dw_attr_val.v.val_int);
8584       break;
8585
8586     case dw_val_class_unsigned_const:
8587       CHECKSUM_ULEB128 (DW_FORM_sdata);
8588       CHECKSUM_SLEB128 ((int) at->dw_attr_val.v.val_unsigned);
8589       break;
8590
8591     case dw_val_class_const_double:
8592       CHECKSUM_ULEB128 (DW_FORM_block);
8593       CHECKSUM_ULEB128 (sizeof (at->dw_attr_val.v.val_double));
8594       CHECKSUM (at->dw_attr_val.v.val_double);
8595       break;
8596
8597     case dw_val_class_vec:
8598       CHECKSUM_ULEB128 (DW_FORM_block);
8599       CHECKSUM_ULEB128 (sizeof (at->dw_attr_val.v.val_vec));
8600       CHECKSUM (at->dw_attr_val.v.val_vec);
8601       break;
8602
8603     case dw_val_class_flag:
8604       CHECKSUM_ULEB128 (DW_FORM_flag);
8605       CHECKSUM_ULEB128 (at->dw_attr_val.v.val_flag ? 1 : 0);
8606       break;
8607
8608     case dw_val_class_str:
8609       CHECKSUM_ULEB128 (DW_FORM_string);
8610       CHECKSUM_STRING (AT_string (at));
8611       break;
8612
8613     case dw_val_class_addr:
8614       r = AT_addr (at);
8615       gcc_assert (GET_CODE (r) == SYMBOL_REF);
8616       CHECKSUM_ULEB128 (DW_FORM_string);
8617       CHECKSUM_STRING (XSTR (r, 0));
8618       break;
8619
8620     case dw_val_class_offset:
8621       CHECKSUM_ULEB128 (DW_FORM_sdata);
8622       CHECKSUM_ULEB128 (at->dw_attr_val.v.val_offset);
8623       break;
8624
8625     case dw_val_class_loc:
8626       for (loc = AT_loc (at); loc; loc = loc->dw_loc_next)
8627         loc_checksum_ordered (loc, ctx);
8628       break;
8629
8630     case dw_val_class_fde_ref:
8631     case dw_val_class_lbl_id:
8632     case dw_val_class_lineptr:
8633     case dw_val_class_macptr:
8634       break;
8635
8636     case dw_val_class_file:
8637       CHECKSUM_ULEB128 (DW_FORM_string);
8638       CHECKSUM_STRING (AT_file (at)->filename);
8639       break;
8640
8641     case dw_val_class_data8:
8642       CHECKSUM (at->dw_attr_val.v.val_data8);
8643       break;
8644
8645     default:
8646       break;
8647     }
8648 }
8649
8650 struct checksum_attributes
8651 {
8652   dw_attr_ref at_name;
8653   dw_attr_ref at_type;
8654   dw_attr_ref at_friend;
8655   dw_attr_ref at_accessibility;
8656   dw_attr_ref at_address_class;
8657   dw_attr_ref at_allocated;
8658   dw_attr_ref at_artificial;
8659   dw_attr_ref at_associated;
8660   dw_attr_ref at_binary_scale;
8661   dw_attr_ref at_bit_offset;
8662   dw_attr_ref at_bit_size;
8663   dw_attr_ref at_bit_stride;
8664   dw_attr_ref at_byte_size;
8665   dw_attr_ref at_byte_stride;
8666   dw_attr_ref at_const_value;
8667   dw_attr_ref at_containing_type;
8668   dw_attr_ref at_count;
8669   dw_attr_ref at_data_location;
8670   dw_attr_ref at_data_member_location;
8671   dw_attr_ref at_decimal_scale;
8672   dw_attr_ref at_decimal_sign;
8673   dw_attr_ref at_default_value;
8674   dw_attr_ref at_digit_count;
8675   dw_attr_ref at_discr;
8676   dw_attr_ref at_discr_list;
8677   dw_attr_ref at_discr_value;
8678   dw_attr_ref at_encoding;
8679   dw_attr_ref at_endianity;
8680   dw_attr_ref at_explicit;
8681   dw_attr_ref at_is_optional;
8682   dw_attr_ref at_location;
8683   dw_attr_ref at_lower_bound;
8684   dw_attr_ref at_mutable;
8685   dw_attr_ref at_ordering;
8686   dw_attr_ref at_picture_string;
8687   dw_attr_ref at_prototyped;
8688   dw_attr_ref at_small;
8689   dw_attr_ref at_segment;
8690   dw_attr_ref at_string_length;
8691   dw_attr_ref at_threads_scaled;
8692   dw_attr_ref at_upper_bound;
8693   dw_attr_ref at_use_location;
8694   dw_attr_ref at_use_UTF8;
8695   dw_attr_ref at_variable_parameter;
8696   dw_attr_ref at_virtuality;
8697   dw_attr_ref at_visibility;
8698   dw_attr_ref at_vtable_elem_location;
8699 };
8700
8701 /* Collect the attributes that we will want to use for the checksum.  */
8702
8703 static void
8704 collect_checksum_attributes (struct checksum_attributes *attrs, dw_die_ref die)
8705 {
8706   dw_attr_ref a;
8707   unsigned ix;
8708
8709   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
8710     {
8711       switch (a->dw_attr)
8712         {
8713         case DW_AT_name:
8714           attrs->at_name = a;
8715           break;
8716         case DW_AT_type:
8717           attrs->at_type = a;
8718           break;
8719         case DW_AT_friend:
8720           attrs->at_friend = a;
8721           break;
8722         case DW_AT_accessibility:
8723           attrs->at_accessibility = a;
8724           break;
8725         case DW_AT_address_class:
8726           attrs->at_address_class = a;
8727           break;
8728         case DW_AT_allocated:
8729           attrs->at_allocated = a;
8730           break;
8731         case DW_AT_artificial:
8732           attrs->at_artificial = a;
8733           break;
8734         case DW_AT_associated:
8735           attrs->at_associated = a;
8736           break;
8737         case DW_AT_binary_scale:
8738           attrs->at_binary_scale = a;
8739           break;
8740         case DW_AT_bit_offset:
8741           attrs->at_bit_offset = a;
8742           break;
8743         case DW_AT_bit_size:
8744           attrs->at_bit_size = a;
8745           break;
8746         case DW_AT_bit_stride:
8747           attrs->at_bit_stride = a;
8748           break;
8749         case DW_AT_byte_size:
8750           attrs->at_byte_size = a;
8751           break;
8752         case DW_AT_byte_stride:
8753           attrs->at_byte_stride = a;
8754           break;
8755         case DW_AT_const_value:
8756           attrs->at_const_value = a;
8757           break;
8758         case DW_AT_containing_type:
8759           attrs->at_containing_type = a;
8760           break;
8761         case DW_AT_count:
8762           attrs->at_count = a;
8763           break;
8764         case DW_AT_data_location:
8765           attrs->at_data_location = a;
8766           break;
8767         case DW_AT_data_member_location:
8768           attrs->at_data_member_location = a;
8769           break;
8770         case DW_AT_decimal_scale:
8771           attrs->at_decimal_scale = a;
8772           break;
8773         case DW_AT_decimal_sign:
8774           attrs->at_decimal_sign = a;
8775           break;
8776         case DW_AT_default_value:
8777           attrs->at_default_value = a;
8778           break;
8779         case DW_AT_digit_count:
8780           attrs->at_digit_count = a;
8781           break;
8782         case DW_AT_discr:
8783           attrs->at_discr = a;
8784           break;
8785         case DW_AT_discr_list:
8786           attrs->at_discr_list = a;
8787           break;
8788         case DW_AT_discr_value:
8789           attrs->at_discr_value = a;
8790           break;
8791         case DW_AT_encoding:
8792           attrs->at_encoding = a;
8793           break;
8794         case DW_AT_endianity:
8795           attrs->at_endianity = a;
8796           break;
8797         case DW_AT_explicit:
8798           attrs->at_explicit = a;
8799           break;
8800         case DW_AT_is_optional:
8801           attrs->at_is_optional = a;
8802           break;
8803         case DW_AT_location:
8804           attrs->at_location = a;
8805           break;
8806         case DW_AT_lower_bound:
8807           attrs->at_lower_bound = a;
8808           break;
8809         case DW_AT_mutable:
8810           attrs->at_mutable = a;
8811           break;
8812         case DW_AT_ordering:
8813           attrs->at_ordering = a;
8814           break;
8815         case DW_AT_picture_string:
8816           attrs->at_picture_string = a;
8817           break;
8818         case DW_AT_prototyped:
8819           attrs->at_prototyped = a;
8820           break;
8821         case DW_AT_small:
8822           attrs->at_small = a;
8823           break;
8824         case DW_AT_segment:
8825           attrs->at_segment = a;
8826           break;
8827         case DW_AT_string_length:
8828           attrs->at_string_length = a;
8829           break;
8830         case DW_AT_threads_scaled:
8831           attrs->at_threads_scaled = a;
8832           break;
8833         case DW_AT_upper_bound:
8834           attrs->at_upper_bound = a;
8835           break;
8836         case DW_AT_use_location:
8837           attrs->at_use_location = a;
8838           break;
8839         case DW_AT_use_UTF8:
8840           attrs->at_use_UTF8 = a;
8841           break;
8842         case DW_AT_variable_parameter:
8843           attrs->at_variable_parameter = a;
8844           break;
8845         case DW_AT_virtuality:
8846           attrs->at_virtuality = a;
8847           break;
8848         case DW_AT_visibility:
8849           attrs->at_visibility = a;
8850           break;
8851         case DW_AT_vtable_elem_location:
8852           attrs->at_vtable_elem_location = a;
8853           break;
8854         default:
8855           break;
8856         }
8857     }
8858 }
8859
8860 /* Calculate the checksum of a DIE, using an ordered subset of attributes.  */
8861
8862 static void
8863 die_checksum_ordered (dw_die_ref die, struct md5_ctx *ctx, int *mark)
8864 {
8865   dw_die_ref c;
8866   dw_die_ref decl;
8867   struct checksum_attributes attrs;
8868
8869   CHECKSUM_ULEB128 ('D');
8870   CHECKSUM_ULEB128 (die->die_tag);
8871
8872   memset (&attrs, 0, sizeof (attrs));
8873
8874   decl = get_AT_ref (die, DW_AT_specification);
8875   if (decl != NULL)
8876     collect_checksum_attributes (&attrs, decl);
8877   collect_checksum_attributes (&attrs, die);
8878
8879   CHECKSUM_ATTR (attrs.at_name);
8880   CHECKSUM_ATTR (attrs.at_accessibility);
8881   CHECKSUM_ATTR (attrs.at_address_class);
8882   CHECKSUM_ATTR (attrs.at_allocated);
8883   CHECKSUM_ATTR (attrs.at_artificial);
8884   CHECKSUM_ATTR (attrs.at_associated);
8885   CHECKSUM_ATTR (attrs.at_binary_scale);
8886   CHECKSUM_ATTR (attrs.at_bit_offset);
8887   CHECKSUM_ATTR (attrs.at_bit_size);
8888   CHECKSUM_ATTR (attrs.at_bit_stride);
8889   CHECKSUM_ATTR (attrs.at_byte_size);
8890   CHECKSUM_ATTR (attrs.at_byte_stride);
8891   CHECKSUM_ATTR (attrs.at_const_value);
8892   CHECKSUM_ATTR (attrs.at_containing_type);
8893   CHECKSUM_ATTR (attrs.at_count);
8894   CHECKSUM_ATTR (attrs.at_data_location);
8895   CHECKSUM_ATTR (attrs.at_data_member_location);
8896   CHECKSUM_ATTR (attrs.at_decimal_scale);
8897   CHECKSUM_ATTR (attrs.at_decimal_sign);
8898   CHECKSUM_ATTR (attrs.at_default_value);
8899   CHECKSUM_ATTR (attrs.at_digit_count);
8900   CHECKSUM_ATTR (attrs.at_discr);
8901   CHECKSUM_ATTR (attrs.at_discr_list);
8902   CHECKSUM_ATTR (attrs.at_discr_value);
8903   CHECKSUM_ATTR (attrs.at_encoding);
8904   CHECKSUM_ATTR (attrs.at_endianity);
8905   CHECKSUM_ATTR (attrs.at_explicit);
8906   CHECKSUM_ATTR (attrs.at_is_optional);
8907   CHECKSUM_ATTR (attrs.at_location);
8908   CHECKSUM_ATTR (attrs.at_lower_bound);
8909   CHECKSUM_ATTR (attrs.at_mutable);
8910   CHECKSUM_ATTR (attrs.at_ordering);
8911   CHECKSUM_ATTR (attrs.at_picture_string);
8912   CHECKSUM_ATTR (attrs.at_prototyped);
8913   CHECKSUM_ATTR (attrs.at_small);
8914   CHECKSUM_ATTR (attrs.at_segment);
8915   CHECKSUM_ATTR (attrs.at_string_length);
8916   CHECKSUM_ATTR (attrs.at_threads_scaled);
8917   CHECKSUM_ATTR (attrs.at_upper_bound);
8918   CHECKSUM_ATTR (attrs.at_use_location);
8919   CHECKSUM_ATTR (attrs.at_use_UTF8);
8920   CHECKSUM_ATTR (attrs.at_variable_parameter);
8921   CHECKSUM_ATTR (attrs.at_virtuality);
8922   CHECKSUM_ATTR (attrs.at_visibility);
8923   CHECKSUM_ATTR (attrs.at_vtable_elem_location);
8924   CHECKSUM_ATTR (attrs.at_type);
8925   CHECKSUM_ATTR (attrs.at_friend);
8926
8927   /* Checksum the child DIEs, except for nested types and member functions.  */
8928   c = die->die_child;
8929   if (c) do {
8930     dw_attr_ref name_attr;
8931
8932     c = c->die_sib;
8933     name_attr = get_AT (c, DW_AT_name);
8934     if ((is_type_die (c) || c->die_tag == DW_TAG_subprogram)
8935         && name_attr != NULL)
8936       {
8937         CHECKSUM_ULEB128 ('S');
8938         CHECKSUM_ULEB128 (c->die_tag);
8939         CHECKSUM_STRING (AT_string (name_attr));
8940       }
8941     else
8942       {
8943         /* Mark this DIE so it gets processed when unmarking.  */
8944         if (c->die_mark == 0)
8945           c->die_mark = -1;
8946         die_checksum_ordered (c, ctx, mark);
8947       }
8948   } while (c != die->die_child);
8949
8950   CHECKSUM_ULEB128 (0);
8951 }
8952
8953 #undef CHECKSUM
8954 #undef CHECKSUM_STRING
8955 #undef CHECKSUM_ATTR
8956 #undef CHECKSUM_LEB128
8957 #undef CHECKSUM_ULEB128
8958
8959 /* Generate the type signature for DIE.  This is computed by generating an
8960    MD5 checksum over the DIE's tag, its relevant attributes, and its
8961    children.  Attributes that are references to other DIEs are processed
8962    by recursion, using the MARK field to prevent infinite recursion.
8963    If the DIE is nested inside a namespace or another type, we also
8964    need to include that context in the signature.  The lower 64 bits
8965    of the resulting MD5 checksum comprise the signature.  */
8966
8967 static void
8968 generate_type_signature (dw_die_ref die, comdat_type_node *type_node)
8969 {
8970   int mark;
8971   const char *name;
8972   unsigned char checksum[16];
8973   struct md5_ctx ctx;
8974   dw_die_ref decl;
8975
8976   name = get_AT_string (die, DW_AT_name);
8977   decl = get_AT_ref (die, DW_AT_specification);
8978
8979   /* First, compute a signature for just the type name (and its surrounding
8980      context, if any.  This is stored in the type unit DIE for link-time
8981      ODR (one-definition rule) checking.  */
8982
8983   if (is_cxx() && name != NULL)
8984     {
8985       md5_init_ctx (&ctx);
8986
8987       /* Checksum the names of surrounding namespaces and structures.  */
8988       if (decl != NULL && decl->die_parent != NULL)
8989         checksum_die_context (decl->die_parent, &ctx);
8990
8991       md5_process_bytes (&die->die_tag, sizeof (die->die_tag), &ctx);
8992       md5_process_bytes (name, strlen (name) + 1, &ctx);
8993       md5_finish_ctx (&ctx, checksum);
8994
8995       add_AT_data8 (type_node->root_die, DW_AT_GNU_odr_signature, &checksum[8]);
8996     }
8997
8998   /* Next, compute the complete type signature.  */
8999
9000   md5_init_ctx (&ctx);
9001   mark = 1;
9002   die->die_mark = mark;
9003
9004   /* Checksum the names of surrounding namespaces and structures.  */
9005   if (decl != NULL && decl->die_parent != NULL)
9006     checksum_die_context (decl->die_parent, &ctx);
9007
9008   /* Checksum the DIE and its children.  */
9009   die_checksum_ordered (die, &ctx, &mark);
9010   unmark_all_dies (die);
9011   md5_finish_ctx (&ctx, checksum);
9012
9013   /* Store the signature in the type node and link the type DIE and the
9014      type node together.  */
9015   memcpy (type_node->signature, &checksum[16 - DWARF_TYPE_SIGNATURE_SIZE],
9016           DWARF_TYPE_SIGNATURE_SIZE);
9017   die->die_id.die_type_node = type_node;
9018   type_node->type_die = die;
9019
9020   /* If the DIE is a specification, link its declaration to the type node
9021      as well.  */
9022   if (decl != NULL)
9023     decl->die_id.die_type_node = type_node;
9024 }
9025
9026 /* Do the location expressions look same?  */
9027 static inline int
9028 same_loc_p (dw_loc_descr_ref loc1, dw_loc_descr_ref loc2, int *mark)
9029 {
9030   return loc1->dw_loc_opc == loc2->dw_loc_opc
9031          && same_dw_val_p (&loc1->dw_loc_oprnd1, &loc2->dw_loc_oprnd1, mark)
9032          && same_dw_val_p (&loc1->dw_loc_oprnd2, &loc2->dw_loc_oprnd2, mark);
9033 }
9034
9035 /* Do the values look the same?  */
9036 static int
9037 same_dw_val_p (const dw_val_node *v1, const dw_val_node *v2, int *mark)
9038 {
9039   dw_loc_descr_ref loc1, loc2;
9040   rtx r1, r2;
9041
9042   if (v1->val_class != v2->val_class)
9043     return 0;
9044
9045   switch (v1->val_class)
9046     {
9047     case dw_val_class_const:
9048       return v1->v.val_int == v2->v.val_int;
9049     case dw_val_class_unsigned_const:
9050       return v1->v.val_unsigned == v2->v.val_unsigned;
9051     case dw_val_class_const_double:
9052       return v1->v.val_double.high == v2->v.val_double.high
9053              && v1->v.val_double.low == v2->v.val_double.low;
9054     case dw_val_class_vec:
9055       if (v1->v.val_vec.length != v2->v.val_vec.length
9056           || v1->v.val_vec.elt_size != v2->v.val_vec.elt_size)
9057         return 0;
9058       if (memcmp (v1->v.val_vec.array, v2->v.val_vec.array,
9059                   v1->v.val_vec.length * v1->v.val_vec.elt_size))
9060         return 0;
9061       return 1;
9062     case dw_val_class_flag:
9063       return v1->v.val_flag == v2->v.val_flag;
9064     case dw_val_class_str:
9065       return !strcmp(v1->v.val_str->str, v2->v.val_str->str);
9066
9067     case dw_val_class_addr:
9068       r1 = v1->v.val_addr;
9069       r2 = v2->v.val_addr;
9070       if (GET_CODE (r1) != GET_CODE (r2))
9071         return 0;
9072       return !rtx_equal_p (r1, r2);
9073
9074     case dw_val_class_offset:
9075       return v1->v.val_offset == v2->v.val_offset;
9076
9077     case dw_val_class_loc:
9078       for (loc1 = v1->v.val_loc, loc2 = v2->v.val_loc;
9079            loc1 && loc2;
9080            loc1 = loc1->dw_loc_next, loc2 = loc2->dw_loc_next)
9081         if (!same_loc_p (loc1, loc2, mark))
9082           return 0;
9083       return !loc1 && !loc2;
9084
9085     case dw_val_class_die_ref:
9086       return same_die_p (v1->v.val_die_ref.die, v2->v.val_die_ref.die, mark);
9087
9088     case dw_val_class_fde_ref:
9089     case dw_val_class_lbl_id:
9090     case dw_val_class_lineptr:
9091     case dw_val_class_macptr:
9092       return 1;
9093
9094     case dw_val_class_file:
9095       return v1->v.val_file == v2->v.val_file;
9096
9097     case dw_val_class_data8:
9098       return !memcmp (v1->v.val_data8, v2->v.val_data8, 8);
9099
9100     default:
9101       return 1;
9102     }
9103 }
9104
9105 /* Do the attributes look the same?  */
9106
9107 static int
9108 same_attr_p (dw_attr_ref at1, dw_attr_ref at2, int *mark)
9109 {
9110   if (at1->dw_attr != at2->dw_attr)
9111     return 0;
9112
9113   /* We don't care that this was compiled with a different compiler
9114      snapshot; if the output is the same, that's what matters. */
9115   if (at1->dw_attr == DW_AT_producer)
9116     return 1;
9117
9118   return same_dw_val_p (&at1->dw_attr_val, &at2->dw_attr_val, mark);
9119 }
9120
9121 /* Do the dies look the same?  */
9122
9123 static int
9124 same_die_p (dw_die_ref die1, dw_die_ref die2, int *mark)
9125 {
9126   dw_die_ref c1, c2;
9127   dw_attr_ref a1;
9128   unsigned ix;
9129
9130   /* To avoid infinite recursion.  */
9131   if (die1->die_mark)
9132     return die1->die_mark == die2->die_mark;
9133   die1->die_mark = die2->die_mark = ++(*mark);
9134
9135   if (die1->die_tag != die2->die_tag)
9136     return 0;
9137
9138   if (VEC_length (dw_attr_node, die1->die_attr)
9139       != VEC_length (dw_attr_node, die2->die_attr))
9140     return 0;
9141
9142   for (ix = 0; VEC_iterate (dw_attr_node, die1->die_attr, ix, a1); ix++)
9143     if (!same_attr_p (a1, VEC_index (dw_attr_node, die2->die_attr, ix), mark))
9144       return 0;
9145
9146   c1 = die1->die_child;
9147   c2 = die2->die_child;
9148   if (! c1)
9149     {
9150       if (c2)
9151         return 0;
9152     }
9153   else
9154     for (;;)
9155       {
9156         if (!same_die_p (c1, c2, mark))
9157           return 0;
9158         c1 = c1->die_sib;
9159         c2 = c2->die_sib;
9160         if (c1 == die1->die_child)
9161           {
9162             if (c2 == die2->die_child)
9163               break;
9164             else
9165               return 0;
9166           }
9167     }
9168
9169   return 1;
9170 }
9171
9172 /* Do the dies look the same?  Wrapper around same_die_p.  */
9173
9174 static int
9175 same_die_p_wrap (dw_die_ref die1, dw_die_ref die2)
9176 {
9177   int mark = 0;
9178   int ret = same_die_p (die1, die2, &mark);
9179
9180   unmark_all_dies (die1);
9181   unmark_all_dies (die2);
9182
9183   return ret;
9184 }
9185
9186 /* The prefix to attach to symbols on DIEs in the current comdat debug
9187    info section.  */
9188 static char *comdat_symbol_id;
9189
9190 /* The index of the current symbol within the current comdat CU.  */
9191 static unsigned int comdat_symbol_number;
9192
9193 /* Calculate the MD5 checksum of the compilation unit DIE UNIT_DIE and its
9194    children, and set comdat_symbol_id accordingly.  */
9195
9196 static void
9197 compute_section_prefix (dw_die_ref unit_die)
9198 {
9199   const char *die_name = get_AT_string (unit_die, DW_AT_name);
9200   const char *base = die_name ? lbasename (die_name) : "anonymous";
9201   char *name = XALLOCAVEC (char, strlen (base) + 64);
9202   char *p;
9203   int i, mark;
9204   unsigned char checksum[16];
9205   struct md5_ctx ctx;
9206
9207   /* Compute the checksum of the DIE, then append part of it as hex digits to
9208      the name filename of the unit.  */
9209
9210   md5_init_ctx (&ctx);
9211   mark = 0;
9212   die_checksum (unit_die, &ctx, &mark);
9213   unmark_all_dies (unit_die);
9214   md5_finish_ctx (&ctx, checksum);
9215
9216   sprintf (name, "%s.", base);
9217   clean_symbol_name (name);
9218
9219   p = name + strlen (name);
9220   for (i = 0; i < 4; i++)
9221     {
9222       sprintf (p, "%.2x", checksum[i]);
9223       p += 2;
9224     }
9225
9226   comdat_symbol_id = unit_die->die_id.die_symbol = xstrdup (name);
9227   comdat_symbol_number = 0;
9228 }
9229
9230 /* Returns nonzero if DIE represents a type, in the sense of TYPE_P.  */
9231
9232 static int
9233 is_type_die (dw_die_ref die)
9234 {
9235   switch (die->die_tag)
9236     {
9237     case DW_TAG_array_type:
9238     case DW_TAG_class_type:
9239     case DW_TAG_interface_type:
9240     case DW_TAG_enumeration_type:
9241     case DW_TAG_pointer_type:
9242     case DW_TAG_reference_type:
9243     case DW_TAG_rvalue_reference_type:
9244     case DW_TAG_string_type:
9245     case DW_TAG_structure_type:
9246     case DW_TAG_subroutine_type:
9247     case DW_TAG_union_type:
9248     case DW_TAG_ptr_to_member_type:
9249     case DW_TAG_set_type:
9250     case DW_TAG_subrange_type:
9251     case DW_TAG_base_type:
9252     case DW_TAG_const_type:
9253     case DW_TAG_file_type:
9254     case DW_TAG_packed_type:
9255     case DW_TAG_volatile_type:
9256     case DW_TAG_typedef:
9257       return 1;
9258     default:
9259       return 0;
9260     }
9261 }
9262
9263 /* Returns 1 iff C is the sort of DIE that should go into a COMDAT CU.
9264    Basically, we want to choose the bits that are likely to be shared between
9265    compilations (types) and leave out the bits that are specific to individual
9266    compilations (functions).  */
9267
9268 static int
9269 is_comdat_die (dw_die_ref c)
9270 {
9271   /* I think we want to leave base types and __vtbl_ptr_type in the main CU, as
9272      we do for stabs.  The advantage is a greater likelihood of sharing between
9273      objects that don't include headers in the same order (and therefore would
9274      put the base types in a different comdat).  jason 8/28/00 */
9275
9276   if (c->die_tag == DW_TAG_base_type)
9277     return 0;
9278
9279   if (c->die_tag == DW_TAG_pointer_type
9280       || c->die_tag == DW_TAG_reference_type
9281       || c->die_tag == DW_TAG_rvalue_reference_type
9282       || c->die_tag == DW_TAG_const_type
9283       || c->die_tag == DW_TAG_volatile_type)
9284     {
9285       dw_die_ref t = get_AT_ref (c, DW_AT_type);
9286
9287       return t ? is_comdat_die (t) : 0;
9288     }
9289
9290   return is_type_die (c);
9291 }
9292
9293 /* Returns 1 iff C is the sort of DIE that might be referred to from another
9294    compilation unit.  */
9295
9296 static int
9297 is_symbol_die (dw_die_ref c)
9298 {
9299   return (is_type_die (c)
9300           || is_declaration_die (c)
9301           || c->die_tag == DW_TAG_namespace
9302           || c->die_tag == DW_TAG_module);
9303 }
9304
9305 static char *
9306 gen_internal_sym (const char *prefix)
9307 {
9308   char buf[256];
9309
9310   ASM_GENERATE_INTERNAL_LABEL (buf, prefix, label_num++);
9311   return xstrdup (buf);
9312 }
9313
9314 /* Assign symbols to all worthy DIEs under DIE.  */
9315
9316 static void
9317 assign_symbol_names (dw_die_ref die)
9318 {
9319   dw_die_ref c;
9320
9321   if (is_symbol_die (die))
9322     {
9323       if (comdat_symbol_id)
9324         {
9325           char *p = XALLOCAVEC (char, strlen (comdat_symbol_id) + 64);
9326
9327           sprintf (p, "%s.%s.%x", DIE_LABEL_PREFIX,
9328                    comdat_symbol_id, comdat_symbol_number++);
9329           die->die_id.die_symbol = xstrdup (p);
9330         }
9331       else
9332         die->die_id.die_symbol = gen_internal_sym ("LDIE");
9333     }
9334
9335   FOR_EACH_CHILD (die, c, assign_symbol_names (c));
9336 }
9337
9338 struct cu_hash_table_entry
9339 {
9340   dw_die_ref cu;
9341   unsigned min_comdat_num, max_comdat_num;
9342   struct cu_hash_table_entry *next;
9343 };
9344
9345 /* Routines to manipulate hash table of CUs.  */
9346 static hashval_t
9347 htab_cu_hash (const void *of)
9348 {
9349   const struct cu_hash_table_entry *const entry =
9350     (const struct cu_hash_table_entry *) of;
9351
9352   return htab_hash_string (entry->cu->die_id.die_symbol);
9353 }
9354
9355 static int
9356 htab_cu_eq (const void *of1, const void *of2)
9357 {
9358   const struct cu_hash_table_entry *const entry1 =
9359     (const struct cu_hash_table_entry *) of1;
9360   const struct die_struct *const entry2 = (const struct die_struct *) of2;
9361
9362   return !strcmp (entry1->cu->die_id.die_symbol, entry2->die_id.die_symbol);
9363 }
9364
9365 static void
9366 htab_cu_del (void *what)
9367 {
9368   struct cu_hash_table_entry *next,
9369     *entry = (struct cu_hash_table_entry *) what;
9370
9371   while (entry)
9372     {
9373       next = entry->next;
9374       free (entry);
9375       entry = next;
9376     }
9377 }
9378
9379 /* Check whether we have already seen this CU and set up SYM_NUM
9380    accordingly.  */
9381 static int
9382 check_duplicate_cu (dw_die_ref cu, htab_t htable, unsigned int *sym_num)
9383 {
9384   struct cu_hash_table_entry dummy;
9385   struct cu_hash_table_entry **slot, *entry, *last = &dummy;
9386
9387   dummy.max_comdat_num = 0;
9388
9389   slot = (struct cu_hash_table_entry **)
9390     htab_find_slot_with_hash (htable, cu, htab_hash_string (cu->die_id.die_symbol),
9391         INSERT);
9392   entry = *slot;
9393
9394   for (; entry; last = entry, entry = entry->next)
9395     {
9396       if (same_die_p_wrap (cu, entry->cu))
9397         break;
9398     }
9399
9400   if (entry)
9401     {
9402       *sym_num = entry->min_comdat_num;
9403       return 1;
9404     }
9405
9406   entry = XCNEW (struct cu_hash_table_entry);
9407   entry->cu = cu;
9408   entry->min_comdat_num = *sym_num = last->max_comdat_num;
9409   entry->next = *slot;
9410   *slot = entry;
9411
9412   return 0;
9413 }
9414
9415 /* Record SYM_NUM to record of CU in HTABLE.  */
9416 static void
9417 record_comdat_symbol_number (dw_die_ref cu, htab_t htable, unsigned int sym_num)
9418 {
9419   struct cu_hash_table_entry **slot, *entry;
9420
9421   slot = (struct cu_hash_table_entry **)
9422     htab_find_slot_with_hash (htable, cu, htab_hash_string (cu->die_id.die_symbol),
9423         NO_INSERT);
9424   entry = *slot;
9425
9426   entry->max_comdat_num = sym_num;
9427 }
9428
9429 /* Traverse the DIE (which is always comp_unit_die), and set up
9430    additional compilation units for each of the include files we see
9431    bracketed by BINCL/EINCL.  */
9432
9433 static void
9434 break_out_includes (dw_die_ref die)
9435 {
9436   dw_die_ref c;
9437   dw_die_ref unit = NULL;
9438   limbo_die_node *node, **pnode;
9439   htab_t cu_hash_table;
9440
9441   c = die->die_child;
9442   if (c) do {
9443     dw_die_ref prev = c;
9444     c = c->die_sib;
9445     while (c->die_tag == DW_TAG_GNU_BINCL || c->die_tag == DW_TAG_GNU_EINCL
9446            || (unit && is_comdat_die (c)))
9447       {
9448         dw_die_ref next = c->die_sib;
9449
9450         /* This DIE is for a secondary CU; remove it from the main one.  */
9451         remove_child_with_prev (c, prev);
9452
9453         if (c->die_tag == DW_TAG_GNU_BINCL)
9454           unit = push_new_compile_unit (unit, c);
9455         else if (c->die_tag == DW_TAG_GNU_EINCL)
9456           unit = pop_compile_unit (unit);
9457         else
9458           add_child_die (unit, c);
9459         c = next;
9460         if (c == die->die_child)
9461           break;
9462       }
9463   } while (c != die->die_child);
9464
9465 #if 0
9466   /* We can only use this in debugging, since the frontend doesn't check
9467      to make sure that we leave every include file we enter.  */
9468   gcc_assert (!unit);
9469 #endif
9470
9471   assign_symbol_names (die);
9472   cu_hash_table = htab_create (10, htab_cu_hash, htab_cu_eq, htab_cu_del);
9473   for (node = limbo_die_list, pnode = &limbo_die_list;
9474        node;
9475        node = node->next)
9476     {
9477       int is_dupl;
9478
9479       compute_section_prefix (node->die);
9480       is_dupl = check_duplicate_cu (node->die, cu_hash_table,
9481                         &comdat_symbol_number);
9482       assign_symbol_names (node->die);
9483       if (is_dupl)
9484         *pnode = node->next;
9485       else
9486         {
9487           pnode = &node->next;
9488           record_comdat_symbol_number (node->die, cu_hash_table,
9489                 comdat_symbol_number);
9490         }
9491     }
9492   htab_delete (cu_hash_table);
9493 }
9494
9495 /* Return non-zero if this DIE is a declaration.  */
9496
9497 static int
9498 is_declaration_die (dw_die_ref die)
9499 {
9500   dw_attr_ref a;
9501   unsigned ix;
9502
9503   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
9504     if (a->dw_attr == DW_AT_declaration)
9505       return 1;
9506
9507   return 0;
9508 }
9509
9510 /* Return non-zero if this is a type DIE that should be moved to a
9511    COMDAT .debug_types section.  */
9512
9513 static int
9514 should_move_die_to_comdat (dw_die_ref die)
9515 {
9516   switch (die->die_tag)
9517     {
9518     case DW_TAG_class_type:
9519     case DW_TAG_structure_type:
9520     case DW_TAG_enumeration_type:
9521     case DW_TAG_union_type:
9522       /* Don't move declarations or inlined instances.  */
9523       if (is_declaration_die (die) || get_AT (die, DW_AT_abstract_origin))
9524         return 0;
9525       return 1;
9526     case DW_TAG_array_type:
9527     case DW_TAG_interface_type:
9528     case DW_TAG_pointer_type:
9529     case DW_TAG_reference_type:
9530     case DW_TAG_rvalue_reference_type:
9531     case DW_TAG_string_type:
9532     case DW_TAG_subroutine_type:
9533     case DW_TAG_ptr_to_member_type:
9534     case DW_TAG_set_type:
9535     case DW_TAG_subrange_type:
9536     case DW_TAG_base_type:
9537     case DW_TAG_const_type:
9538     case DW_TAG_file_type:
9539     case DW_TAG_packed_type:
9540     case DW_TAG_volatile_type:
9541     case DW_TAG_typedef:
9542     default:
9543       return 0;
9544     }
9545 }
9546
9547 /* Make a clone of DIE.  */
9548
9549 static dw_die_ref
9550 clone_die (dw_die_ref die)
9551 {
9552   dw_die_ref clone;
9553   dw_attr_ref a;
9554   unsigned ix;
9555
9556   clone = ggc_alloc_cleared_die_node ();
9557   clone->die_tag = die->die_tag;
9558
9559   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
9560     add_dwarf_attr (clone, a);
9561
9562   return clone;
9563 }
9564
9565 /* Make a clone of the tree rooted at DIE.  */
9566
9567 static dw_die_ref
9568 clone_tree (dw_die_ref die)
9569 {
9570   dw_die_ref c;
9571   dw_die_ref clone = clone_die (die);
9572
9573   FOR_EACH_CHILD (die, c, add_child_die (clone, clone_tree(c)));
9574
9575   return clone;
9576 }
9577
9578 /* Make a clone of DIE as a declaration.  */
9579
9580 static dw_die_ref
9581 clone_as_declaration (dw_die_ref die)
9582 {
9583   dw_die_ref clone;
9584   dw_die_ref decl;
9585   dw_attr_ref a;
9586   unsigned ix;
9587
9588   /* If the DIE is already a declaration, just clone it.  */
9589   if (is_declaration_die (die))
9590     return clone_die (die);
9591
9592   /* If the DIE is a specification, just clone its declaration DIE.  */
9593   decl = get_AT_ref (die, DW_AT_specification);
9594   if (decl != NULL)
9595     return clone_die (decl);
9596
9597   clone = ggc_alloc_cleared_die_node ();
9598   clone->die_tag = die->die_tag;
9599
9600   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
9601     {
9602       /* We don't want to copy over all attributes.
9603          For example we don't want DW_AT_byte_size because otherwise we will no
9604          longer have a declaration and GDB will treat it as a definition.  */
9605
9606       switch (a->dw_attr)
9607         {
9608         case DW_AT_artificial:
9609         case DW_AT_containing_type:
9610         case DW_AT_external:
9611         case DW_AT_name:
9612         case DW_AT_type:
9613         case DW_AT_virtuality:
9614         case DW_AT_linkage_name:
9615         case DW_AT_MIPS_linkage_name:
9616           add_dwarf_attr (clone, a);
9617           break;
9618         case DW_AT_byte_size:
9619         default:
9620           break;
9621         }
9622     }
9623
9624   if (die->die_id.die_type_node)
9625     add_AT_die_ref (clone, DW_AT_signature, die);
9626
9627   add_AT_flag (clone, DW_AT_declaration, 1);
9628   return clone;
9629 }
9630
9631 /* Copy the declaration context to the new compile unit DIE.  This includes
9632    any surrounding namespace or type declarations.  If the DIE has an
9633    AT_specification attribute, it also includes attributes and children
9634    attached to the specification.  */
9635
9636 static void
9637 copy_declaration_context (dw_die_ref unit, dw_die_ref die)
9638 {
9639   dw_die_ref decl;
9640   dw_die_ref new_decl;
9641
9642   decl = get_AT_ref (die, DW_AT_specification);
9643   if (decl == NULL)
9644     decl = die;
9645   else
9646     {
9647       unsigned ix;
9648       dw_die_ref c;
9649       dw_attr_ref a;
9650
9651       /* Copy the type node pointer from the new DIE to the original
9652          declaration DIE so we can forward references later.  */
9653       decl->die_id.die_type_node = die->die_id.die_type_node;
9654
9655       remove_AT (die, DW_AT_specification);
9656
9657       for (ix = 0; VEC_iterate (dw_attr_node, decl->die_attr, ix, a); ix++)
9658         {
9659           if (a->dw_attr != DW_AT_name
9660               && a->dw_attr != DW_AT_declaration
9661               && a->dw_attr != DW_AT_external)
9662             add_dwarf_attr (die, a);
9663         }
9664
9665       FOR_EACH_CHILD (decl, c, add_child_die (die, clone_tree(c)));
9666     }
9667
9668   if (decl->die_parent != NULL
9669       && decl->die_parent->die_tag != DW_TAG_compile_unit
9670       && decl->die_parent->die_tag != DW_TAG_type_unit)
9671     {
9672       new_decl = copy_ancestor_tree (unit, decl, NULL);
9673       if (new_decl != NULL)
9674         {
9675           remove_AT (new_decl, DW_AT_signature);
9676           add_AT_specification (die, new_decl);
9677         }
9678     }
9679 }
9680
9681 /* Generate the skeleton ancestor tree for the given NODE, then clone
9682    the DIE and add the clone into the tree.  */
9683
9684 static void
9685 generate_skeleton_ancestor_tree (skeleton_chain_node *node)
9686 {
9687   if (node->new_die != NULL)
9688     return;
9689
9690   node->new_die = clone_as_declaration (node->old_die);
9691
9692   if (node->parent != NULL)
9693     {
9694       generate_skeleton_ancestor_tree (node->parent);
9695       add_child_die (node->parent->new_die, node->new_die);
9696     }
9697 }
9698
9699 /* Generate a skeleton tree of DIEs containing any declarations that are
9700    found in the original tree.  We traverse the tree looking for declaration
9701    DIEs, and construct the skeleton from the bottom up whenever we find one.  */
9702
9703 static void
9704 generate_skeleton_bottom_up (skeleton_chain_node *parent)
9705 {
9706   skeleton_chain_node node;
9707   dw_die_ref c;
9708   dw_die_ref first;
9709   dw_die_ref prev = NULL;
9710   dw_die_ref next = NULL;
9711
9712   node.parent = parent;
9713
9714   first = c = parent->old_die->die_child;
9715   if (c)
9716     next = c->die_sib;
9717   if (c) do {
9718     if (prev == NULL || prev->die_sib == c)
9719       prev = c;
9720     c = next;
9721     next = (c == first ? NULL : c->die_sib);
9722     node.old_die = c;
9723     node.new_die = NULL;
9724     if (is_declaration_die (c))
9725       {
9726         /* Clone the existing DIE, move the original to the skeleton
9727            tree (which is in the main CU), and put the clone, with
9728            all the original's children, where the original came from.  */
9729         dw_die_ref clone = clone_die (c);
9730         move_all_children (c, clone);
9731
9732         replace_child (c, clone, prev);
9733         generate_skeleton_ancestor_tree (parent);
9734         add_child_die (parent->new_die, c);
9735         node.new_die = c;
9736         c = clone;
9737       }
9738     generate_skeleton_bottom_up (&node);
9739   } while (next != NULL);
9740 }
9741
9742 /* Wrapper function for generate_skeleton_bottom_up.  */
9743
9744 static dw_die_ref
9745 generate_skeleton (dw_die_ref die)
9746 {
9747   skeleton_chain_node node;
9748
9749   node.old_die = die;
9750   node.new_die = NULL;
9751   node.parent = NULL;
9752
9753   /* If this type definition is nested inside another type,
9754      always leave at least a declaration in its place.  */
9755   if (die->die_parent != NULL && is_type_die (die->die_parent))
9756     node.new_die = clone_as_declaration (die);
9757
9758   generate_skeleton_bottom_up (&node);
9759   return node.new_die;
9760 }
9761
9762 /* Remove the DIE from its parent, possibly replacing it with a cloned
9763    declaration.  The original DIE will be moved to a new compile unit
9764    so that existing references to it follow it to the new location.  If
9765    any of the original DIE's descendants is a declaration, we need to
9766    replace the original DIE with a skeleton tree and move the
9767    declarations back into the skeleton tree.  */
9768
9769 static dw_die_ref
9770 remove_child_or_replace_with_skeleton (dw_die_ref child, dw_die_ref prev)
9771 {
9772   dw_die_ref skeleton;
9773
9774   skeleton = generate_skeleton (child);
9775   if (skeleton == NULL)
9776     remove_child_with_prev (child, prev);
9777   else
9778     {
9779       skeleton->die_id.die_type_node = child->die_id.die_type_node;
9780       replace_child (child, skeleton, prev);
9781     }
9782
9783   return skeleton;
9784 }
9785
9786 /* Traverse the DIE and set up additional .debug_types sections for each
9787    type worthy of being placed in a COMDAT section.  */
9788
9789 static void
9790 break_out_comdat_types (dw_die_ref die)
9791 {
9792   dw_die_ref c;
9793   dw_die_ref first;
9794   dw_die_ref prev = NULL;
9795   dw_die_ref next = NULL;
9796   dw_die_ref unit = NULL;
9797
9798   first = c = die->die_child;
9799   if (c)
9800     next = c->die_sib;
9801   if (c) do {
9802     if (prev == NULL || prev->die_sib == c)
9803       prev = c;
9804     c = next;
9805     next = (c == first ? NULL : c->die_sib);
9806     if (should_move_die_to_comdat (c))
9807       {
9808         dw_die_ref replacement;
9809         comdat_type_node_ref type_node;
9810
9811         /* Create a new type unit DIE as the root for the new tree, and
9812            add it to the list of comdat types.  */
9813         unit = new_die (DW_TAG_type_unit, NULL, NULL);
9814         add_AT_unsigned (unit, DW_AT_language,
9815                          get_AT_unsigned (comp_unit_die, DW_AT_language));
9816         type_node = ggc_alloc_cleared_comdat_type_node ();
9817         type_node->root_die = unit;
9818         type_node->next = comdat_type_list;
9819         comdat_type_list = type_node;
9820
9821         /* Generate the type signature.  */
9822         generate_type_signature (c, type_node);
9823
9824         /* Copy the declaration context, attributes, and children of the
9825            declaration into the new compile unit DIE.  */
9826         copy_declaration_context (unit, c);
9827
9828         /* Remove this DIE from the main CU.  */
9829         replacement = remove_child_or_replace_with_skeleton (c, prev);
9830
9831         /* Break out nested types into their own type units.  */
9832         break_out_comdat_types (c);
9833
9834         /* Add the DIE to the new compunit.  */
9835         add_child_die (unit, c);
9836
9837         if (replacement != NULL)
9838           c = replacement;
9839       }
9840     else if (c->die_tag == DW_TAG_namespace
9841              || c->die_tag == DW_TAG_class_type
9842              || c->die_tag == DW_TAG_structure_type
9843              || c->die_tag == DW_TAG_union_type)
9844       {
9845         /* Look for nested types that can be broken out.  */
9846         break_out_comdat_types (c);
9847       }
9848   } while (next != NULL);
9849 }
9850
9851 /* Structure to map a DIE in one CU to its copy in a comdat type unit.  */
9852
9853 struct decl_table_entry
9854 {
9855   dw_die_ref orig;
9856   dw_die_ref copy;
9857 };
9858
9859 /* Routines to manipulate hash table of copied declarations.  */
9860
9861 static hashval_t
9862 htab_decl_hash (const void *of)
9863 {
9864   const struct decl_table_entry *const entry =
9865     (const struct decl_table_entry *) of;
9866
9867   return htab_hash_pointer (entry->orig);
9868 }
9869
9870 static int
9871 htab_decl_eq (const void *of1, const void *of2)
9872 {
9873   const struct decl_table_entry *const entry1 =
9874     (const struct decl_table_entry *) of1;
9875   const struct die_struct *const entry2 = (const struct die_struct *) of2;
9876
9877   return entry1->orig == entry2;
9878 }
9879
9880 static void
9881 htab_decl_del (void *what)
9882 {
9883   struct decl_table_entry *entry = (struct decl_table_entry *) what;
9884
9885   free (entry);
9886 }
9887
9888 /* Copy DIE and its ancestors, up to, but not including, the compile unit
9889    or type unit entry, to a new tree.  Adds the new tree to UNIT and returns
9890    a pointer to the copy of DIE.  If DECL_TABLE is provided, it is used
9891    to check if the ancestor has already been copied into UNIT.  */
9892
9893 static dw_die_ref
9894 copy_ancestor_tree (dw_die_ref unit, dw_die_ref die, htab_t decl_table)
9895 {
9896   dw_die_ref parent = die->die_parent;
9897   dw_die_ref new_parent = unit;
9898   dw_die_ref copy;
9899   void **slot = NULL;
9900   struct decl_table_entry *entry = NULL;
9901
9902   if (decl_table)
9903     {
9904       /* Check if the entry has already been copied to UNIT.  */
9905       slot = htab_find_slot_with_hash (decl_table, die,
9906                                        htab_hash_pointer (die), INSERT);
9907       if (*slot != HTAB_EMPTY_ENTRY)
9908         {
9909           entry = (struct decl_table_entry *) *slot;
9910           return entry->copy;
9911         }
9912
9913       /* Record in DECL_TABLE that DIE has been copied to UNIT.  */
9914       entry = XCNEW (struct decl_table_entry);
9915       entry->orig = die;
9916       entry->copy = NULL;
9917       *slot = entry;
9918     }
9919
9920   if (parent != NULL)
9921     {
9922       dw_die_ref spec = get_AT_ref (parent, DW_AT_specification);
9923       if (spec != NULL)
9924         parent = spec;
9925       if (parent->die_tag != DW_TAG_compile_unit
9926           && parent->die_tag != DW_TAG_type_unit)
9927         new_parent = copy_ancestor_tree (unit, parent, decl_table);
9928     }
9929
9930   copy = clone_as_declaration (die);
9931   add_child_die (new_parent, copy);
9932
9933   if (decl_table != NULL)
9934     {
9935       /* Make sure the copy is marked as part of the type unit.  */
9936       copy->die_mark = 1;
9937       /* Record the pointer to the copy.  */
9938       entry->copy = copy;
9939     }
9940
9941   return copy;
9942 }
9943
9944 /* Walk the DIE and its children, looking for references to incomplete
9945    or trivial types that are unmarked (i.e., that are not in the current
9946    type_unit).  */
9947
9948 static void
9949 copy_decls_walk (dw_die_ref unit, dw_die_ref die, htab_t decl_table)
9950 {
9951   dw_die_ref c;
9952   dw_attr_ref a;
9953   unsigned ix;
9954
9955   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
9956     {
9957       if (AT_class (a) == dw_val_class_die_ref)
9958         {
9959           dw_die_ref targ = AT_ref (a);
9960           comdat_type_node_ref type_node = targ->die_id.die_type_node;
9961           void **slot;
9962           struct decl_table_entry *entry;
9963
9964           if (targ->die_mark != 0 || type_node != NULL)
9965             continue;
9966
9967           slot = htab_find_slot_with_hash (decl_table, targ,
9968                                            htab_hash_pointer (targ), INSERT);
9969
9970           if (*slot != HTAB_EMPTY_ENTRY)
9971             {
9972               /* TARG has already been copied, so we just need to
9973                  modify the reference to point to the copy.  */
9974               entry = (struct decl_table_entry *) *slot;
9975               a->dw_attr_val.v.val_die_ref.die = entry->copy;
9976             }
9977           else
9978             {
9979               dw_die_ref parent = unit;
9980               dw_die_ref copy = clone_tree (targ);
9981
9982               /* Make sure the cloned tree is marked as part of the
9983                  type unit.  */
9984               mark_dies (copy);
9985
9986               /* Record in DECL_TABLE that TARG has been copied.
9987                  Need to do this now, before the recursive call,
9988                  because DECL_TABLE may be expanded and SLOT
9989                  would no longer be a valid pointer.  */
9990               entry = XCNEW (struct decl_table_entry);
9991               entry->orig = targ;
9992               entry->copy = copy;
9993               *slot = entry;
9994
9995               /* If TARG has surrounding context, copy its ancestor tree
9996                  into the new type unit.  */
9997               if (targ->die_parent != NULL
9998                   && targ->die_parent->die_tag != DW_TAG_compile_unit
9999                   && targ->die_parent->die_tag != DW_TAG_type_unit)
10000                 parent = copy_ancestor_tree (unit, targ->die_parent,
10001                                              decl_table);
10002
10003               add_child_die (parent, copy);
10004               a->dw_attr_val.v.val_die_ref.die = copy;
10005
10006               /* Make sure the newly-copied DIE is walked.  If it was
10007                  installed in a previously-added context, it won't
10008                  get visited otherwise.  */
10009               if (parent != unit)
10010                 copy_decls_walk (unit, parent, decl_table);
10011             }
10012         }
10013     }
10014
10015   FOR_EACH_CHILD (die, c, copy_decls_walk (unit, c, decl_table));
10016 }
10017
10018 /* Copy declarations for "unworthy" types into the new comdat section.
10019    Incomplete types, modified types, and certain other types aren't broken
10020    out into comdat sections of their own, so they don't have a signature,
10021    and we need to copy the declaration into the same section so that we
10022    don't have an external reference.  */
10023
10024 static void
10025 copy_decls_for_unworthy_types (dw_die_ref unit)
10026 {
10027   htab_t decl_table;
10028
10029   mark_dies (unit);
10030   decl_table = htab_create (10, htab_decl_hash, htab_decl_eq, htab_decl_del);
10031   copy_decls_walk (unit, unit, decl_table);
10032   htab_delete (decl_table);
10033   unmark_dies (unit);
10034 }
10035
10036 /* Traverse the DIE and add a sibling attribute if it may have the
10037    effect of speeding up access to siblings.  To save some space,
10038    avoid generating sibling attributes for DIE's without children.  */
10039
10040 static void
10041 add_sibling_attributes (dw_die_ref die)
10042 {
10043   dw_die_ref c;
10044
10045   if (! die->die_child)
10046     return;
10047
10048   if (die->die_parent && die != die->die_parent->die_child)
10049     add_AT_die_ref (die, DW_AT_sibling, die->die_sib);
10050
10051   FOR_EACH_CHILD (die, c, add_sibling_attributes (c));
10052 }
10053
10054 /* Output all location lists for the DIE and its children.  */
10055
10056 static void
10057 output_location_lists (dw_die_ref die)
10058 {
10059   dw_die_ref c;
10060   dw_attr_ref a;
10061   unsigned ix;
10062
10063   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
10064     if (AT_class (a) == dw_val_class_loc_list)
10065       output_loc_list (AT_loc_list (a));
10066
10067   FOR_EACH_CHILD (die, c, output_location_lists (c));
10068 }
10069
10070 /* The format of each DIE (and its attribute value pairs) is encoded in an
10071    abbreviation table.  This routine builds the abbreviation table and assigns
10072    a unique abbreviation id for each abbreviation entry.  The children of each
10073    die are visited recursively.  */
10074
10075 static void
10076 build_abbrev_table (dw_die_ref die)
10077 {
10078   unsigned long abbrev_id;
10079   unsigned int n_alloc;
10080   dw_die_ref c;
10081   dw_attr_ref a;
10082   unsigned ix;
10083
10084   /* Scan the DIE references, and mark as external any that refer to
10085      DIEs from other CUs (i.e. those which are not marked).  */
10086   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
10087     if (AT_class (a) == dw_val_class_die_ref
10088         && AT_ref (a)->die_mark == 0)
10089       {
10090         gcc_assert (dwarf_version >= 4 || AT_ref (a)->die_id.die_symbol);
10091         set_AT_ref_external (a, 1);
10092       }
10093
10094   for (abbrev_id = 1; abbrev_id < abbrev_die_table_in_use; ++abbrev_id)
10095     {
10096       dw_die_ref abbrev = abbrev_die_table[abbrev_id];
10097       dw_attr_ref die_a, abbrev_a;
10098       unsigned ix;
10099       bool ok = true;
10100
10101       if (abbrev->die_tag != die->die_tag)
10102         continue;
10103       if ((abbrev->die_child != NULL) != (die->die_child != NULL))
10104         continue;
10105
10106       if (VEC_length (dw_attr_node, abbrev->die_attr)
10107           != VEC_length (dw_attr_node, die->die_attr))
10108         continue;
10109
10110       for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, die_a); ix++)
10111         {
10112           abbrev_a = VEC_index (dw_attr_node, abbrev->die_attr, ix);
10113           if ((abbrev_a->dw_attr != die_a->dw_attr)
10114               || (value_format (abbrev_a) != value_format (die_a)))
10115             {
10116               ok = false;
10117               break;
10118             }
10119         }
10120       if (ok)
10121         break;
10122     }
10123
10124   if (abbrev_id >= abbrev_die_table_in_use)
10125     {
10126       if (abbrev_die_table_in_use >= abbrev_die_table_allocated)
10127         {
10128           n_alloc = abbrev_die_table_allocated + ABBREV_DIE_TABLE_INCREMENT;
10129           abbrev_die_table = GGC_RESIZEVEC (dw_die_ref, abbrev_die_table,
10130                                             n_alloc);
10131
10132           memset (&abbrev_die_table[abbrev_die_table_allocated], 0,
10133                  (n_alloc - abbrev_die_table_allocated) * sizeof (dw_die_ref));
10134           abbrev_die_table_allocated = n_alloc;
10135         }
10136
10137       ++abbrev_die_table_in_use;
10138       abbrev_die_table[abbrev_id] = die;
10139     }
10140
10141   die->die_abbrev = abbrev_id;
10142   FOR_EACH_CHILD (die, c, build_abbrev_table (c));
10143 }
10144 \f
10145 /* Return the power-of-two number of bytes necessary to represent VALUE.  */
10146
10147 static int
10148 constant_size (unsigned HOST_WIDE_INT value)
10149 {
10150   int log;
10151
10152   if (value == 0)
10153     log = 0;
10154   else
10155     log = floor_log2 (value);
10156
10157   log = log / 8;
10158   log = 1 << (floor_log2 (log) + 1);
10159
10160   return log;
10161 }
10162
10163 /* Return the size of a DIE as it is represented in the
10164    .debug_info section.  */
10165
10166 static unsigned long
10167 size_of_die (dw_die_ref die)
10168 {
10169   unsigned long size = 0;
10170   dw_attr_ref a;
10171   unsigned ix;
10172
10173   size += size_of_uleb128 (die->die_abbrev);
10174   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
10175     {
10176       switch (AT_class (a))
10177         {
10178         case dw_val_class_addr:
10179           size += DWARF2_ADDR_SIZE;
10180           break;
10181         case dw_val_class_offset:
10182           size += DWARF_OFFSET_SIZE;
10183           break;
10184         case dw_val_class_loc:
10185           {
10186             unsigned long lsize = size_of_locs (AT_loc (a));
10187
10188             /* Block length.  */
10189             if (dwarf_version >= 4)
10190               size += size_of_uleb128 (lsize);
10191             else
10192               size += constant_size (lsize);
10193             size += lsize;
10194           }
10195           break;
10196         case dw_val_class_loc_list:
10197           size += DWARF_OFFSET_SIZE;
10198           break;
10199         case dw_val_class_range_list:
10200           size += DWARF_OFFSET_SIZE;
10201           break;
10202         case dw_val_class_const:
10203           size += size_of_sleb128 (AT_int (a));
10204           break;
10205         case dw_val_class_unsigned_const:
10206           size += constant_size (AT_unsigned (a));
10207           break;
10208         case dw_val_class_const_double:
10209           size += 2 * HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR;
10210           if (HOST_BITS_PER_WIDE_INT >= 64)
10211             size++; /* block */
10212           break;
10213         case dw_val_class_vec:
10214           size += constant_size (a->dw_attr_val.v.val_vec.length
10215                                  * a->dw_attr_val.v.val_vec.elt_size)
10216                   + a->dw_attr_val.v.val_vec.length
10217                     * a->dw_attr_val.v.val_vec.elt_size; /* block */
10218           break;
10219         case dw_val_class_flag:
10220           if (dwarf_version >= 4)
10221             /* Currently all add_AT_flag calls pass in 1 as last argument,
10222                so DW_FORM_flag_present can be used.  If that ever changes,
10223                we'll need to use DW_FORM_flag and have some optimization
10224                in build_abbrev_table that will change those to
10225                DW_FORM_flag_present if it is set to 1 in all DIEs using
10226                the same abbrev entry.  */
10227             gcc_assert (a->dw_attr_val.v.val_flag == 1);
10228           else
10229             size += 1;
10230           break;
10231         case dw_val_class_die_ref:
10232           if (AT_ref_external (a))
10233             {
10234               /* In DWARF4, we use DW_FORM_sig8; for earlier versions
10235                  we use DW_FORM_ref_addr.  In DWARF2, DW_FORM_ref_addr
10236                  is sized by target address length, whereas in DWARF3
10237                  it's always sized as an offset.  */
10238               if (dwarf_version >= 4)
10239                 size += DWARF_TYPE_SIGNATURE_SIZE;
10240               else if (dwarf_version == 2)
10241                 size += DWARF2_ADDR_SIZE;
10242               else
10243                 size += DWARF_OFFSET_SIZE;
10244             }
10245           else
10246             size += DWARF_OFFSET_SIZE;
10247           break;
10248         case dw_val_class_fde_ref:
10249           size += DWARF_OFFSET_SIZE;
10250           break;
10251         case dw_val_class_lbl_id:
10252           size += DWARF2_ADDR_SIZE;
10253           break;
10254         case dw_val_class_lineptr:
10255         case dw_val_class_macptr:
10256           size += DWARF_OFFSET_SIZE;
10257           break;
10258         case dw_val_class_str:
10259           if (AT_string_form (a) == DW_FORM_strp)
10260             size += DWARF_OFFSET_SIZE;
10261           else
10262             size += strlen (a->dw_attr_val.v.val_str->str) + 1;
10263           break;
10264         case dw_val_class_file:
10265           size += constant_size (maybe_emit_file (a->dw_attr_val.v.val_file));
10266           break;
10267         case dw_val_class_data8:
10268           size += 8;
10269           break;
10270         default:
10271           gcc_unreachable ();
10272         }
10273     }
10274
10275   return size;
10276 }
10277
10278 /* Size the debugging information associated with a given DIE.  Visits the
10279    DIE's children recursively.  Updates the global variable next_die_offset, on
10280    each time through.  Uses the current value of next_die_offset to update the
10281    die_offset field in each DIE.  */
10282
10283 static void
10284 calc_die_sizes (dw_die_ref die)
10285 {
10286   dw_die_ref c;
10287
10288   die->die_offset = next_die_offset;
10289   next_die_offset += size_of_die (die);
10290
10291   FOR_EACH_CHILD (die, c, calc_die_sizes (c));
10292
10293   if (die->die_child != NULL)
10294     /* Count the null byte used to terminate sibling lists.  */
10295     next_die_offset += 1;
10296 }
10297
10298 /* Set the marks for a die and its children.  We do this so
10299    that we know whether or not a reference needs to use FORM_ref_addr; only
10300    DIEs in the same CU will be marked.  We used to clear out the offset
10301    and use that as the flag, but ran into ordering problems.  */
10302
10303 static void
10304 mark_dies (dw_die_ref die)
10305 {
10306   dw_die_ref c;
10307
10308   gcc_assert (!die->die_mark);
10309
10310   die->die_mark = 1;
10311   FOR_EACH_CHILD (die, c, mark_dies (c));
10312 }
10313
10314 /* Clear the marks for a die and its children.  */
10315
10316 static void
10317 unmark_dies (dw_die_ref die)
10318 {
10319   dw_die_ref c;
10320
10321   if (dwarf_version < 4)
10322     gcc_assert (die->die_mark);
10323
10324   die->die_mark = 0;
10325   FOR_EACH_CHILD (die, c, unmark_dies (c));
10326 }
10327
10328 /* Clear the marks for a die, its children and referred dies.  */
10329
10330 static void
10331 unmark_all_dies (dw_die_ref die)
10332 {
10333   dw_die_ref c;
10334   dw_attr_ref a;
10335   unsigned ix;
10336
10337   if (!die->die_mark)
10338     return;
10339   die->die_mark = 0;
10340
10341   FOR_EACH_CHILD (die, c, unmark_all_dies (c));
10342
10343   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
10344     if (AT_class (a) == dw_val_class_die_ref)
10345       unmark_all_dies (AT_ref (a));
10346 }
10347
10348 /* Return the size of the .debug_pubnames or .debug_pubtypes table
10349    generated for the compilation unit.  */
10350
10351 static unsigned long
10352 size_of_pubnames (VEC (pubname_entry, gc) * names)
10353 {
10354   unsigned long size;
10355   unsigned i;
10356   pubname_ref p;
10357
10358   size = DWARF_PUBNAMES_HEADER_SIZE;
10359   for (i = 0; VEC_iterate (pubname_entry, names, i, p); i++)
10360     if (names != pubtype_table
10361         || p->die->die_offset != 0
10362         || !flag_eliminate_unused_debug_types)
10363       size += strlen (p->name) + DWARF_OFFSET_SIZE + 1;
10364
10365   size += DWARF_OFFSET_SIZE;
10366   return size;
10367 }
10368
10369 /* Return the size of the information in the .debug_aranges section.  */
10370
10371 static unsigned long
10372 size_of_aranges (void)
10373 {
10374   unsigned long size;
10375
10376   size = DWARF_ARANGES_HEADER_SIZE;
10377
10378   /* Count the address/length pair for this compilation unit.  */
10379   if (text_section_used)
10380     size += 2 * DWARF2_ADDR_SIZE;
10381   if (cold_text_section_used)
10382     size += 2 * DWARF2_ADDR_SIZE;
10383   size += 2 * DWARF2_ADDR_SIZE * arange_table_in_use;
10384
10385   /* Count the two zero words used to terminated the address range table.  */
10386   size += 2 * DWARF2_ADDR_SIZE;
10387   return size;
10388 }
10389 \f
10390 /* Select the encoding of an attribute value.  */
10391
10392 static enum dwarf_form
10393 value_format (dw_attr_ref a)
10394 {
10395   switch (a->dw_attr_val.val_class)
10396     {
10397     case dw_val_class_addr:
10398       /* Only very few attributes allow DW_FORM_addr.  */
10399       switch (a->dw_attr)
10400         {
10401         case DW_AT_low_pc:
10402         case DW_AT_high_pc:
10403         case DW_AT_entry_pc:
10404         case DW_AT_trampoline:
10405           return DW_FORM_addr;
10406         default:
10407           break;
10408         }
10409       switch (DWARF2_ADDR_SIZE)
10410         {
10411         case 1:
10412           return DW_FORM_data1;
10413         case 2:
10414           return DW_FORM_data2;
10415         case 4:
10416           return DW_FORM_data4;
10417         case 8:
10418           return DW_FORM_data8;
10419         default:
10420           gcc_unreachable ();
10421         }
10422     case dw_val_class_range_list:
10423     case dw_val_class_loc_list:
10424       if (dwarf_version >= 4)
10425         return DW_FORM_sec_offset;
10426       /* FALLTHRU */
10427     case dw_val_class_offset:
10428       switch (DWARF_OFFSET_SIZE)
10429         {
10430         case 4:
10431           return DW_FORM_data4;
10432         case 8:
10433           return DW_FORM_data8;
10434         default:
10435           gcc_unreachable ();
10436         }
10437     case dw_val_class_loc:
10438       if (dwarf_version >= 4)
10439         return DW_FORM_exprloc;
10440       switch (constant_size (size_of_locs (AT_loc (a))))
10441         {
10442         case 1:
10443           return DW_FORM_block1;
10444         case 2:
10445           return DW_FORM_block2;
10446         default:
10447           gcc_unreachable ();
10448         }
10449     case dw_val_class_const:
10450       return DW_FORM_sdata;
10451     case dw_val_class_unsigned_const:
10452       switch (constant_size (AT_unsigned (a)))
10453         {
10454         case 1:
10455           return DW_FORM_data1;
10456         case 2:
10457           return DW_FORM_data2;
10458         case 4:
10459           return DW_FORM_data4;
10460         case 8:
10461           return DW_FORM_data8;
10462         default:
10463           gcc_unreachable ();
10464         }
10465     case dw_val_class_const_double:
10466       switch (HOST_BITS_PER_WIDE_INT)
10467         {
10468         case 8:
10469           return DW_FORM_data2;
10470         case 16:
10471           return DW_FORM_data4;
10472         case 32:
10473           return DW_FORM_data8;
10474         case 64:
10475         default:
10476           return DW_FORM_block1;
10477         }
10478     case dw_val_class_vec:
10479       switch (constant_size (a->dw_attr_val.v.val_vec.length
10480                              * a->dw_attr_val.v.val_vec.elt_size))
10481         {
10482         case 1:
10483           return DW_FORM_block1;
10484         case 2:
10485           return DW_FORM_block2;
10486         case 4:
10487           return DW_FORM_block4;
10488         default:
10489           gcc_unreachable ();
10490         }
10491     case dw_val_class_flag:
10492       if (dwarf_version >= 4)
10493         {
10494           /* Currently all add_AT_flag calls pass in 1 as last argument,
10495              so DW_FORM_flag_present can be used.  If that ever changes,
10496              we'll need to use DW_FORM_flag and have some optimization
10497              in build_abbrev_table that will change those to
10498              DW_FORM_flag_present if it is set to 1 in all DIEs using
10499              the same abbrev entry.  */
10500           gcc_assert (a->dw_attr_val.v.val_flag == 1);
10501           return DW_FORM_flag_present;
10502         }
10503       return DW_FORM_flag;
10504     case dw_val_class_die_ref:
10505       if (AT_ref_external (a))
10506         return dwarf_version >= 4 ? DW_FORM_sig8 : DW_FORM_ref_addr;
10507       else
10508         return DW_FORM_ref;
10509     case dw_val_class_fde_ref:
10510       return DW_FORM_data;
10511     case dw_val_class_lbl_id:
10512       return DW_FORM_addr;
10513     case dw_val_class_lineptr:
10514     case dw_val_class_macptr:
10515       return dwarf_version >= 4 ? DW_FORM_sec_offset : DW_FORM_data;
10516     case dw_val_class_str:
10517       return AT_string_form (a);
10518     case dw_val_class_file:
10519       switch (constant_size (maybe_emit_file (a->dw_attr_val.v.val_file)))
10520         {
10521         case 1:
10522           return DW_FORM_data1;
10523         case 2:
10524           return DW_FORM_data2;
10525         case 4:
10526           return DW_FORM_data4;
10527         default:
10528           gcc_unreachable ();
10529         }
10530
10531     case dw_val_class_data8:
10532       return DW_FORM_data8;
10533
10534     default:
10535       gcc_unreachable ();
10536     }
10537 }
10538
10539 /* Output the encoding of an attribute value.  */
10540
10541 static void
10542 output_value_format (dw_attr_ref a)
10543 {
10544   enum dwarf_form form = value_format (a);
10545
10546   dw2_asm_output_data_uleb128 (form, "(%s)", dwarf_form_name (form));
10547 }
10548
10549 /* Output the .debug_abbrev section which defines the DIE abbreviation
10550    table.  */
10551
10552 static void
10553 output_abbrev_section (void)
10554 {
10555   unsigned long abbrev_id;
10556
10557   for (abbrev_id = 1; abbrev_id < abbrev_die_table_in_use; ++abbrev_id)
10558     {
10559       dw_die_ref abbrev = abbrev_die_table[abbrev_id];
10560       unsigned ix;
10561       dw_attr_ref a_attr;
10562
10563       dw2_asm_output_data_uleb128 (abbrev_id, "(abbrev code)");
10564       dw2_asm_output_data_uleb128 (abbrev->die_tag, "(TAG: %s)",
10565                                    dwarf_tag_name (abbrev->die_tag));
10566
10567       if (abbrev->die_child != NULL)
10568         dw2_asm_output_data (1, DW_children_yes, "DW_children_yes");
10569       else
10570         dw2_asm_output_data (1, DW_children_no, "DW_children_no");
10571
10572       for (ix = 0; VEC_iterate (dw_attr_node, abbrev->die_attr, ix, a_attr);
10573            ix++)
10574         {
10575           dw2_asm_output_data_uleb128 (a_attr->dw_attr, "(%s)",
10576                                        dwarf_attr_name (a_attr->dw_attr));
10577           output_value_format (a_attr);
10578         }
10579
10580       dw2_asm_output_data (1, 0, NULL);
10581       dw2_asm_output_data (1, 0, NULL);
10582     }
10583
10584   /* Terminate the table.  */
10585   dw2_asm_output_data (1, 0, NULL);
10586 }
10587
10588 /* Output a symbol we can use to refer to this DIE from another CU.  */
10589
10590 static inline void
10591 output_die_symbol (dw_die_ref die)
10592 {
10593   char *sym = die->die_id.die_symbol;
10594
10595   if (sym == 0)
10596     return;
10597
10598   if (strncmp (sym, DIE_LABEL_PREFIX, sizeof (DIE_LABEL_PREFIX) - 1) == 0)
10599     /* We make these global, not weak; if the target doesn't support
10600        .linkonce, it doesn't support combining the sections, so debugging
10601        will break.  */
10602     targetm.asm_out.globalize_label (asm_out_file, sym);
10603
10604   ASM_OUTPUT_LABEL (asm_out_file, sym);
10605 }
10606
10607 /* Return a new location list, given the begin and end range, and the
10608    expression.  */
10609
10610 static inline dw_loc_list_ref
10611 new_loc_list (dw_loc_descr_ref expr, const char *begin, const char *end,
10612               const char *section)
10613 {
10614   dw_loc_list_ref retlist = ggc_alloc_cleared_dw_loc_list_node ();
10615
10616   retlist->begin = begin;
10617   retlist->end = end;
10618   retlist->expr = expr;
10619   retlist->section = section;
10620
10621   return retlist;
10622 }
10623
10624 /* Generate a new internal symbol for this location list node, if it
10625    hasn't got one yet.  */
10626
10627 static inline void
10628 gen_llsym (dw_loc_list_ref list)
10629 {
10630   gcc_assert (!list->ll_symbol);
10631   list->ll_symbol = gen_internal_sym ("LLST");
10632 }
10633
10634 /* Output the location list given to us.  */
10635
10636 static void
10637 output_loc_list (dw_loc_list_ref list_head)
10638 {
10639   dw_loc_list_ref curr = list_head;
10640
10641   ASM_OUTPUT_LABEL (asm_out_file, list_head->ll_symbol);
10642
10643   /* Walk the location list, and output each range + expression.  */
10644   for (curr = list_head; curr != NULL; curr = curr->dw_loc_next)
10645     {
10646       unsigned long size;
10647       /* Don't output an entry that starts and ends at the same address.  */
10648       if (strcmp (curr->begin, curr->end) == 0)
10649         continue;
10650       if (!have_multiple_function_sections)
10651         {
10652           dw2_asm_output_delta (DWARF2_ADDR_SIZE, curr->begin, curr->section,
10653                                 "Location list begin address (%s)",
10654                                 list_head->ll_symbol);
10655           dw2_asm_output_delta (DWARF2_ADDR_SIZE, curr->end, curr->section,
10656                                 "Location list end address (%s)",
10657                                 list_head->ll_symbol);
10658         }
10659       else
10660         {
10661           dw2_asm_output_addr (DWARF2_ADDR_SIZE, curr->begin,
10662                                "Location list begin address (%s)",
10663                                list_head->ll_symbol);
10664           dw2_asm_output_addr (DWARF2_ADDR_SIZE, curr->end,
10665                                "Location list end address (%s)",
10666                                list_head->ll_symbol);
10667         }
10668       size = size_of_locs (curr->expr);
10669
10670       /* Output the block length for this list of location operations.  */
10671       gcc_assert (size <= 0xffff);
10672       dw2_asm_output_data (2, size, "%s", "Location expression size");
10673
10674       output_loc_sequence (curr->expr);
10675     }
10676
10677   dw2_asm_output_data (DWARF2_ADDR_SIZE, 0,
10678                        "Location list terminator begin (%s)",
10679                        list_head->ll_symbol);
10680   dw2_asm_output_data (DWARF2_ADDR_SIZE, 0,
10681                        "Location list terminator end (%s)",
10682                        list_head->ll_symbol);
10683 }
10684
10685 /* Output a type signature.  */
10686
10687 static inline void
10688 output_signature (const char *sig, const char *name)
10689 {
10690   int i;
10691
10692   for (i = 0; i < DWARF_TYPE_SIGNATURE_SIZE; i++)
10693     dw2_asm_output_data (1, sig[i], i == 0 ? "%s" : NULL, name);
10694 }
10695
10696 /* Output the DIE and its attributes.  Called recursively to generate
10697    the definitions of each child DIE.  */
10698
10699 static void
10700 output_die (dw_die_ref die)
10701 {
10702   dw_attr_ref a;
10703   dw_die_ref c;
10704   unsigned long size;
10705   unsigned ix;
10706
10707   /* If someone in another CU might refer to us, set up a symbol for
10708      them to point to.  */
10709   if (dwarf_version < 4 && die->die_id.die_symbol)
10710     output_die_symbol (die);
10711
10712   dw2_asm_output_data_uleb128 (die->die_abbrev, "(DIE (%#lx) %s)",
10713                                (unsigned long)die->die_offset,
10714                                dwarf_tag_name (die->die_tag));
10715
10716   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
10717     {
10718       const char *name = dwarf_attr_name (a->dw_attr);
10719
10720       switch (AT_class (a))
10721         {
10722         case dw_val_class_addr:
10723           dw2_asm_output_addr_rtx (DWARF2_ADDR_SIZE, AT_addr (a), "%s", name);
10724           break;
10725
10726         case dw_val_class_offset:
10727           dw2_asm_output_data (DWARF_OFFSET_SIZE, a->dw_attr_val.v.val_offset,
10728                                "%s", name);
10729           break;
10730
10731         case dw_val_class_range_list:
10732           {
10733             char *p = strchr (ranges_section_label, '\0');
10734
10735             sprintf (p, "+" HOST_WIDE_INT_PRINT_HEX,
10736                      a->dw_attr_val.v.val_offset);
10737             dw2_asm_output_offset (DWARF_OFFSET_SIZE, ranges_section_label,
10738                                    debug_ranges_section, "%s", name);
10739             *p = '\0';
10740           }
10741           break;
10742
10743         case dw_val_class_loc:
10744           size = size_of_locs (AT_loc (a));
10745
10746           /* Output the block length for this list of location operations.  */
10747           if (dwarf_version >= 4)
10748             dw2_asm_output_data_uleb128 (size, "%s", name);
10749           else
10750             dw2_asm_output_data (constant_size (size), size, "%s", name);
10751
10752           output_loc_sequence (AT_loc (a));
10753           break;
10754
10755         case dw_val_class_const:
10756           /* ??? It would be slightly more efficient to use a scheme like is
10757              used for unsigned constants below, but gdb 4.x does not sign
10758              extend.  Gdb 5.x does sign extend.  */
10759           dw2_asm_output_data_sleb128 (AT_int (a), "%s", name);
10760           break;
10761
10762         case dw_val_class_unsigned_const:
10763           dw2_asm_output_data (constant_size (AT_unsigned (a)),
10764                                AT_unsigned (a), "%s", name);
10765           break;
10766
10767         case dw_val_class_const_double:
10768           {
10769             unsigned HOST_WIDE_INT first, second;
10770
10771             if (HOST_BITS_PER_WIDE_INT >= 64)
10772               dw2_asm_output_data (1,
10773                                    2 * HOST_BITS_PER_WIDE_INT
10774                                    / HOST_BITS_PER_CHAR,
10775                                    NULL);
10776
10777             if (WORDS_BIG_ENDIAN)
10778               {
10779                 first = a->dw_attr_val.v.val_double.high;
10780                 second = a->dw_attr_val.v.val_double.low;
10781               }
10782             else
10783               {
10784                 first = a->dw_attr_val.v.val_double.low;
10785                 second = a->dw_attr_val.v.val_double.high;
10786               }
10787
10788             dw2_asm_output_data (HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR,
10789                                  first, name);
10790             dw2_asm_output_data (HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR,
10791                                  second, NULL);
10792           }
10793           break;
10794
10795         case dw_val_class_vec:
10796           {
10797             unsigned int elt_size = a->dw_attr_val.v.val_vec.elt_size;
10798             unsigned int len = a->dw_attr_val.v.val_vec.length;
10799             unsigned int i;
10800             unsigned char *p;
10801
10802             dw2_asm_output_data (constant_size (len * elt_size),
10803                                  len * elt_size, "%s", name);
10804             if (elt_size > sizeof (HOST_WIDE_INT))
10805               {
10806                 elt_size /= 2;
10807                 len *= 2;
10808               }
10809             for (i = 0, p = a->dw_attr_val.v.val_vec.array;
10810                  i < len;
10811                  i++, p += elt_size)
10812               dw2_asm_output_data (elt_size, extract_int (p, elt_size),
10813                                    "fp or vector constant word %u", i);
10814             break;
10815           }
10816
10817         case dw_val_class_flag:
10818           if (dwarf_version >= 4)
10819             {
10820               /* Currently all add_AT_flag calls pass in 1 as last argument,
10821                  so DW_FORM_flag_present can be used.  If that ever changes,
10822                  we'll need to use DW_FORM_flag and have some optimization
10823                  in build_abbrev_table that will change those to
10824                  DW_FORM_flag_present if it is set to 1 in all DIEs using
10825                  the same abbrev entry.  */
10826               gcc_assert (AT_flag (a) == 1);
10827               if (flag_debug_asm)
10828                 fprintf (asm_out_file, "\t\t\t%s %s\n",
10829                          ASM_COMMENT_START, name);
10830               break;
10831             }
10832           dw2_asm_output_data (1, AT_flag (a), "%s", name);
10833           break;
10834
10835         case dw_val_class_loc_list:
10836           {
10837             char *sym = AT_loc_list (a)->ll_symbol;
10838
10839             gcc_assert (sym);
10840             dw2_asm_output_offset (DWARF_OFFSET_SIZE, sym, debug_loc_section,
10841                                    "%s", name);
10842           }
10843           break;
10844
10845         case dw_val_class_die_ref:
10846           if (AT_ref_external (a))
10847             {
10848               if (dwarf_version >= 4)
10849                 {
10850                   comdat_type_node_ref type_node =
10851                     AT_ref (a)->die_id.die_type_node;
10852
10853                   gcc_assert (type_node);
10854                   output_signature (type_node->signature, name);
10855                 }
10856               else
10857                 {
10858                   char *sym = AT_ref (a)->die_id.die_symbol;
10859                   int size;
10860
10861                   gcc_assert (sym);
10862                   /* In DWARF2, DW_FORM_ref_addr is sized by target address
10863                      length, whereas in DWARF3 it's always sized as an
10864                      offset.  */
10865                   if (dwarf_version == 2)
10866                     size = DWARF2_ADDR_SIZE;
10867                   else
10868                     size = DWARF_OFFSET_SIZE;
10869                   dw2_asm_output_offset (size, sym, debug_info_section, "%s",
10870                                          name);
10871                 }
10872             }
10873           else
10874             {
10875               gcc_assert (AT_ref (a)->die_offset);
10876               dw2_asm_output_data (DWARF_OFFSET_SIZE, AT_ref (a)->die_offset,
10877                                    "%s", name);
10878             }
10879           break;
10880
10881         case dw_val_class_fde_ref:
10882           {
10883             char l1[20];
10884
10885             ASM_GENERATE_INTERNAL_LABEL (l1, FDE_LABEL,
10886                                          a->dw_attr_val.v.val_fde_index * 2);
10887             dw2_asm_output_offset (DWARF_OFFSET_SIZE, l1, debug_frame_section,
10888                                    "%s", name);
10889           }
10890           break;
10891
10892         case dw_val_class_lbl_id:
10893           dw2_asm_output_addr (DWARF2_ADDR_SIZE, AT_lbl (a), "%s", name);
10894           break;
10895
10896         case dw_val_class_lineptr:
10897           dw2_asm_output_offset (DWARF_OFFSET_SIZE, AT_lbl (a),
10898                                  debug_line_section, "%s", name);
10899           break;
10900
10901         case dw_val_class_macptr:
10902           dw2_asm_output_offset (DWARF_OFFSET_SIZE, AT_lbl (a),
10903                                  debug_macinfo_section, "%s", name);
10904           break;
10905
10906         case dw_val_class_str:
10907           if (AT_string_form (a) == DW_FORM_strp)
10908             dw2_asm_output_offset (DWARF_OFFSET_SIZE,
10909                                    a->dw_attr_val.v.val_str->label,
10910                                    debug_str_section,
10911                                    "%s: \"%s\"", name, AT_string (a));
10912           else
10913             dw2_asm_output_nstring (AT_string (a), -1, "%s", name);
10914           break;
10915
10916         case dw_val_class_file:
10917           {
10918             int f = maybe_emit_file (a->dw_attr_val.v.val_file);
10919
10920             dw2_asm_output_data (constant_size (f), f, "%s (%s)", name,
10921                                  a->dw_attr_val.v.val_file->filename);
10922             break;
10923           }
10924
10925         case dw_val_class_data8:
10926           {
10927             int i;
10928
10929             for (i = 0; i < 8; i++)
10930               dw2_asm_output_data (1, a->dw_attr_val.v.val_data8[i],
10931                                    i == 0 ? "%s" : NULL, name);
10932             break;
10933           }
10934
10935         default:
10936           gcc_unreachable ();
10937         }
10938     }
10939
10940   FOR_EACH_CHILD (die, c, output_die (c));
10941
10942   /* Add null byte to terminate sibling list.  */
10943   if (die->die_child != NULL)
10944     dw2_asm_output_data (1, 0, "end of children of DIE %#lx",
10945                          (unsigned long) die->die_offset);
10946 }
10947
10948 /* Output the compilation unit that appears at the beginning of the
10949    .debug_info section, and precedes the DIE descriptions.  */
10950
10951 static void
10952 output_compilation_unit_header (void)
10953 {
10954   int ver = dwarf_version;
10955
10956   if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
10957     dw2_asm_output_data (4, 0xffffffff,
10958       "Initial length escape value indicating 64-bit DWARF extension");
10959   dw2_asm_output_data (DWARF_OFFSET_SIZE,
10960                        next_die_offset - DWARF_INITIAL_LENGTH_SIZE,
10961                        "Length of Compilation Unit Info");
10962   dw2_asm_output_data (2, ver, "DWARF version number");
10963   dw2_asm_output_offset (DWARF_OFFSET_SIZE, abbrev_section_label,
10964                          debug_abbrev_section,
10965                          "Offset Into Abbrev. Section");
10966   dw2_asm_output_data (1, DWARF2_ADDR_SIZE, "Pointer Size (in bytes)");
10967 }
10968
10969 /* Output the compilation unit DIE and its children.  */
10970
10971 static void
10972 output_comp_unit (dw_die_ref die, int output_if_empty)
10973 {
10974   const char *secname;
10975   char *oldsym, *tmp;
10976
10977   /* Unless we are outputting main CU, we may throw away empty ones.  */
10978   if (!output_if_empty && die->die_child == NULL)
10979     return;
10980
10981   /* Even if there are no children of this DIE, we must output the information
10982      about the compilation unit.  Otherwise, on an empty translation unit, we
10983      will generate a present, but empty, .debug_info section.  IRIX 6.5 `nm'
10984      will then complain when examining the file.  First mark all the DIEs in
10985      this CU so we know which get local refs.  */
10986   mark_dies (die);
10987
10988   build_abbrev_table (die);
10989
10990   /* Initialize the beginning DIE offset - and calculate sizes/offsets.  */
10991   next_die_offset = DWARF_COMPILE_UNIT_HEADER_SIZE;
10992   calc_die_sizes (die);
10993
10994   oldsym = die->die_id.die_symbol;
10995   if (oldsym)
10996     {
10997       tmp = XALLOCAVEC (char, strlen (oldsym) + 24);
10998
10999       sprintf (tmp, ".gnu.linkonce.wi.%s", oldsym);
11000       secname = tmp;
11001       die->die_id.die_symbol = NULL;
11002       switch_to_section (get_section (secname, SECTION_DEBUG, NULL));
11003     }
11004   else
11005     switch_to_section (debug_info_section);
11006
11007   /* Output debugging information.  */
11008   output_compilation_unit_header ();
11009   output_die (die);
11010
11011   /* Leave the marks on the main CU, so we can check them in
11012      output_pubnames.  */
11013   if (oldsym)
11014     {
11015       unmark_dies (die);
11016       die->die_id.die_symbol = oldsym;
11017     }
11018 }
11019
11020 /* Output a comdat type unit DIE and its children.  */
11021
11022 static void
11023 output_comdat_type_unit (comdat_type_node *node)
11024 {
11025   const char *secname;
11026   char *tmp;
11027   int i;
11028 #if defined (OBJECT_FORMAT_ELF)
11029   tree comdat_key;
11030 #endif
11031
11032   /* First mark all the DIEs in this CU so we know which get local refs.  */
11033   mark_dies (node->root_die);
11034
11035   build_abbrev_table (node->root_die);
11036
11037   /* Initialize the beginning DIE offset - and calculate sizes/offsets.  */
11038   next_die_offset = DWARF_COMDAT_TYPE_UNIT_HEADER_SIZE;
11039   calc_die_sizes (node->root_die);
11040
11041 #if defined (OBJECT_FORMAT_ELF)
11042   secname = ".debug_types";
11043   tmp = XALLOCAVEC (char, 4 + DWARF_TYPE_SIGNATURE_SIZE * 2);
11044   sprintf (tmp, "wt.");
11045   for (i = 0; i < DWARF_TYPE_SIGNATURE_SIZE; i++)
11046     sprintf (tmp + 3 + i * 2, "%02x", node->signature[i] & 0xff);
11047   comdat_key = get_identifier (tmp);
11048   targetm.asm_out.named_section (secname,
11049                                  SECTION_DEBUG | SECTION_LINKONCE,
11050                                  comdat_key);
11051 #else
11052   tmp = XALLOCAVEC (char, 18 + DWARF_TYPE_SIGNATURE_SIZE * 2);
11053   sprintf (tmp, ".gnu.linkonce.wt.");
11054   for (i = 0; i < DWARF_TYPE_SIGNATURE_SIZE; i++)
11055     sprintf (tmp + 17 + i * 2, "%02x", node->signature[i] & 0xff);
11056   secname = tmp;
11057   switch_to_section (get_section (secname, SECTION_DEBUG, NULL));
11058 #endif
11059
11060   /* Output debugging information.  */
11061   output_compilation_unit_header ();
11062   output_signature (node->signature, "Type Signature");
11063   dw2_asm_output_data (DWARF_OFFSET_SIZE, node->type_die->die_offset,
11064                        "Offset to Type DIE");
11065   output_die (node->root_die);
11066
11067   unmark_dies (node->root_die);
11068 }
11069
11070 /* Return the DWARF2/3 pubname associated with a decl.  */
11071
11072 static const char *
11073 dwarf2_name (tree decl, int scope)
11074 {
11075   return lang_hooks.dwarf_name (decl, scope ? 1 : 0);
11076 }
11077
11078 /* Add a new entry to .debug_pubnames if appropriate.  */
11079
11080 static void
11081 add_pubname_string (const char *str, dw_die_ref die)
11082 {
11083   pubname_entry e;
11084
11085   e.die = die;
11086   e.name = xstrdup (str);
11087   VEC_safe_push (pubname_entry, gc, pubname_table, &e);
11088 }
11089
11090 static void
11091 add_pubname (tree decl, dw_die_ref die)
11092 {
11093   if (TREE_PUBLIC (decl))
11094     {
11095       const char *name = dwarf2_name (decl, 1);
11096       if (name)
11097         add_pubname_string (name, die);
11098     }
11099 }
11100
11101 /* Add a new entry to .debug_pubtypes if appropriate.  */
11102
11103 static void
11104 add_pubtype (tree decl, dw_die_ref die)
11105 {
11106   pubname_entry e;
11107
11108   e.name = NULL;
11109   if ((TREE_PUBLIC (decl)
11110        || die->die_parent == comp_unit_die)
11111       && (die->die_tag == DW_TAG_typedef || COMPLETE_TYPE_P (decl)))
11112     {
11113       e.die = die;
11114       if (TYPE_P (decl))
11115         {
11116           if (TYPE_NAME (decl))
11117             {
11118               if (TREE_CODE (TYPE_NAME (decl)) == IDENTIFIER_NODE)
11119                 e.name = IDENTIFIER_POINTER (TYPE_NAME (decl));
11120               else if (TREE_CODE (TYPE_NAME (decl)) == TYPE_DECL
11121                        && DECL_NAME (TYPE_NAME (decl)))
11122                 e.name = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (decl)));
11123               else
11124                e.name = xstrdup ((const char *) get_AT_string (die, DW_AT_name));
11125             }
11126         }
11127       else
11128         {
11129           e.name = dwarf2_name (decl, 1);
11130           if (e.name)
11131             e.name = xstrdup (e.name);
11132         }
11133
11134       /* If we don't have a name for the type, there's no point in adding
11135          it to the table.  */
11136       if (e.name && e.name[0] != '\0')
11137         VEC_safe_push (pubname_entry, gc, pubtype_table, &e);
11138     }
11139 }
11140
11141 /* Output the public names table used to speed up access to externally
11142    visible names; or the public types table used to find type definitions.  */
11143
11144 static void
11145 output_pubnames (VEC (pubname_entry, gc) * names)
11146 {
11147   unsigned i;
11148   unsigned long pubnames_length = size_of_pubnames (names);
11149   pubname_ref pub;
11150
11151   if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
11152     dw2_asm_output_data (4, 0xffffffff,
11153       "Initial length escape value indicating 64-bit DWARF extension");
11154   if (names == pubname_table)
11155     dw2_asm_output_data (DWARF_OFFSET_SIZE, pubnames_length,
11156                          "Length of Public Names Info");
11157   else
11158     dw2_asm_output_data (DWARF_OFFSET_SIZE, pubnames_length,
11159                          "Length of Public Type Names Info");
11160   /* Version number for pubnames/pubtypes is still 2, even in DWARF3.  */
11161   dw2_asm_output_data (2, 2, "DWARF Version");
11162   dw2_asm_output_offset (DWARF_OFFSET_SIZE, debug_info_section_label,
11163                          debug_info_section,
11164                          "Offset of Compilation Unit Info");
11165   dw2_asm_output_data (DWARF_OFFSET_SIZE, next_die_offset,
11166                        "Compilation Unit Length");
11167
11168   for (i = 0; VEC_iterate (pubname_entry, names, i, pub); i++)
11169     {
11170       /* We shouldn't see pubnames for DIEs outside of the main CU.  */
11171       if (names == pubname_table)
11172         gcc_assert (pub->die->die_mark);
11173
11174       if (names != pubtype_table
11175           || pub->die->die_offset != 0
11176           || !flag_eliminate_unused_debug_types)
11177         {
11178           dw2_asm_output_data (DWARF_OFFSET_SIZE, pub->die->die_offset,
11179                                "DIE offset");
11180
11181           dw2_asm_output_nstring (pub->name, -1, "external name");
11182         }
11183     }
11184
11185   dw2_asm_output_data (DWARF_OFFSET_SIZE, 0, NULL);
11186 }
11187
11188 /* Add a new entry to .debug_aranges if appropriate.  */
11189
11190 static void
11191 add_arange (tree decl, dw_die_ref die)
11192 {
11193   if (! DECL_SECTION_NAME (decl))
11194     return;
11195
11196   if (arange_table_in_use == arange_table_allocated)
11197     {
11198       arange_table_allocated += ARANGE_TABLE_INCREMENT;
11199       arange_table = GGC_RESIZEVEC (dw_die_ref, arange_table,
11200                                     arange_table_allocated);
11201       memset (arange_table + arange_table_in_use, 0,
11202               ARANGE_TABLE_INCREMENT * sizeof (dw_die_ref));
11203     }
11204
11205   arange_table[arange_table_in_use++] = die;
11206 }
11207
11208 /* Output the information that goes into the .debug_aranges table.
11209    Namely, define the beginning and ending address range of the
11210    text section generated for this compilation unit.  */
11211
11212 static void
11213 output_aranges (void)
11214 {
11215   unsigned i;
11216   unsigned long aranges_length = size_of_aranges ();
11217
11218   if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
11219     dw2_asm_output_data (4, 0xffffffff,
11220       "Initial length escape value indicating 64-bit DWARF extension");
11221   dw2_asm_output_data (DWARF_OFFSET_SIZE, aranges_length,
11222                        "Length of Address Ranges Info");
11223   /* Version number for aranges is still 2, even in DWARF3.  */
11224   dw2_asm_output_data (2, 2, "DWARF Version");
11225   dw2_asm_output_offset (DWARF_OFFSET_SIZE, debug_info_section_label,
11226                          debug_info_section,
11227                          "Offset of Compilation Unit Info");
11228   dw2_asm_output_data (1, DWARF2_ADDR_SIZE, "Size of Address");
11229   dw2_asm_output_data (1, 0, "Size of Segment Descriptor");
11230
11231   /* We need to align to twice the pointer size here.  */
11232   if (DWARF_ARANGES_PAD_SIZE)
11233     {
11234       /* Pad using a 2 byte words so that padding is correct for any
11235          pointer size.  */
11236       dw2_asm_output_data (2, 0, "Pad to %d byte boundary",
11237                            2 * DWARF2_ADDR_SIZE);
11238       for (i = 2; i < (unsigned) DWARF_ARANGES_PAD_SIZE; i += 2)
11239         dw2_asm_output_data (2, 0, NULL);
11240     }
11241
11242   /* It is necessary not to output these entries if the sections were
11243      not used; if the sections were not used, the length will be 0 and
11244      the address may end up as 0 if the section is discarded by ld
11245      --gc-sections, leaving an invalid (0, 0) entry that can be
11246      confused with the terminator.  */
11247   if (text_section_used)
11248     {
11249       dw2_asm_output_addr (DWARF2_ADDR_SIZE, text_section_label, "Address");
11250       dw2_asm_output_delta (DWARF2_ADDR_SIZE, text_end_label,
11251                             text_section_label, "Length");
11252     }
11253   if (cold_text_section_used)
11254     {
11255       dw2_asm_output_addr (DWARF2_ADDR_SIZE, cold_text_section_label,
11256                            "Address");
11257       dw2_asm_output_delta (DWARF2_ADDR_SIZE, cold_end_label,
11258                             cold_text_section_label, "Length");
11259     }
11260
11261   for (i = 0; i < arange_table_in_use; i++)
11262     {
11263       dw_die_ref die = arange_table[i];
11264
11265       /* We shouldn't see aranges for DIEs outside of the main CU.  */
11266       gcc_assert (die->die_mark);
11267
11268       if (die->die_tag == DW_TAG_subprogram)
11269         {
11270           dw2_asm_output_addr (DWARF2_ADDR_SIZE, get_AT_low_pc (die),
11271                                "Address");
11272           dw2_asm_output_delta (DWARF2_ADDR_SIZE, get_AT_hi_pc (die),
11273                                 get_AT_low_pc (die), "Length");
11274         }
11275       else
11276         {
11277           /* A static variable; extract the symbol from DW_AT_location.
11278              Note that this code isn't currently hit, as we only emit
11279              aranges for functions (jason 9/23/99).  */
11280           dw_attr_ref a = get_AT (die, DW_AT_location);
11281           dw_loc_descr_ref loc;
11282
11283           gcc_assert (a && AT_class (a) == dw_val_class_loc);
11284
11285           loc = AT_loc (a);
11286           gcc_assert (loc->dw_loc_opc == DW_OP_addr);
11287
11288           dw2_asm_output_addr_rtx (DWARF2_ADDR_SIZE,
11289                                    loc->dw_loc_oprnd1.v.val_addr, "Address");
11290           dw2_asm_output_data (DWARF2_ADDR_SIZE,
11291                                get_AT_unsigned (die, DW_AT_byte_size),
11292                                "Length");
11293         }
11294     }
11295
11296   /* Output the terminator words.  */
11297   dw2_asm_output_data (DWARF2_ADDR_SIZE, 0, NULL);
11298   dw2_asm_output_data (DWARF2_ADDR_SIZE, 0, NULL);
11299 }
11300
11301 /* Add a new entry to .debug_ranges.  Return the offset at which it
11302    was placed.  */
11303
11304 static unsigned int
11305 add_ranges_num (int num)
11306 {
11307   unsigned int in_use = ranges_table_in_use;
11308
11309   if (in_use == ranges_table_allocated)
11310     {
11311       ranges_table_allocated += RANGES_TABLE_INCREMENT;
11312       ranges_table = GGC_RESIZEVEC (struct dw_ranges_struct, ranges_table,
11313                                     ranges_table_allocated);
11314       memset (ranges_table + ranges_table_in_use, 0,
11315               RANGES_TABLE_INCREMENT * sizeof (struct dw_ranges_struct));
11316     }
11317
11318   ranges_table[in_use].num = num;
11319   ranges_table_in_use = in_use + 1;
11320
11321   return in_use * 2 * DWARF2_ADDR_SIZE;
11322 }
11323
11324 /* Add a new entry to .debug_ranges corresponding to a block, or a
11325    range terminator if BLOCK is NULL.  */
11326
11327 static unsigned int
11328 add_ranges (const_tree block)
11329 {
11330   return add_ranges_num (block ? BLOCK_NUMBER (block) : 0);
11331 }
11332
11333 /* Add a new entry to .debug_ranges corresponding to a pair of
11334    labels.  */
11335
11336 static void
11337 add_ranges_by_labels (dw_die_ref die, const char *begin, const char *end,
11338                       bool *added)
11339 {
11340   unsigned int in_use = ranges_by_label_in_use;
11341   unsigned int offset;
11342
11343   if (in_use == ranges_by_label_allocated)
11344     {
11345       ranges_by_label_allocated += RANGES_TABLE_INCREMENT;
11346       ranges_by_label = GGC_RESIZEVEC (struct dw_ranges_by_label_struct,
11347                                        ranges_by_label,
11348                                        ranges_by_label_allocated);
11349       memset (ranges_by_label + ranges_by_label_in_use, 0,
11350               RANGES_TABLE_INCREMENT
11351               * sizeof (struct dw_ranges_by_label_struct));
11352     }
11353
11354   ranges_by_label[in_use].begin = begin;
11355   ranges_by_label[in_use].end = end;
11356   ranges_by_label_in_use = in_use + 1;
11357
11358   offset = add_ranges_num (-(int)in_use - 1);
11359   if (!*added)
11360     {
11361       add_AT_range_list (die, DW_AT_ranges, offset);
11362       *added = true;
11363     }
11364 }
11365
11366 static void
11367 output_ranges (void)
11368 {
11369   unsigned i;
11370   static const char *const start_fmt = "Offset %#x";
11371   const char *fmt = start_fmt;
11372
11373   for (i = 0; i < ranges_table_in_use; i++)
11374     {
11375       int block_num = ranges_table[i].num;
11376
11377       if (block_num > 0)
11378         {
11379           char blabel[MAX_ARTIFICIAL_LABEL_BYTES];
11380           char elabel[MAX_ARTIFICIAL_LABEL_BYTES];
11381
11382           ASM_GENERATE_INTERNAL_LABEL (blabel, BLOCK_BEGIN_LABEL, block_num);
11383           ASM_GENERATE_INTERNAL_LABEL (elabel, BLOCK_END_LABEL, block_num);
11384
11385           /* If all code is in the text section, then the compilation
11386              unit base address defaults to DW_AT_low_pc, which is the
11387              base of the text section.  */
11388           if (!have_multiple_function_sections)
11389             {
11390               dw2_asm_output_delta (DWARF2_ADDR_SIZE, blabel,
11391                                     text_section_label,
11392                                     fmt, i * 2 * DWARF2_ADDR_SIZE);
11393               dw2_asm_output_delta (DWARF2_ADDR_SIZE, elabel,
11394                                     text_section_label, NULL);
11395             }
11396
11397           /* Otherwise, the compilation unit base address is zero,
11398              which allows us to use absolute addresses, and not worry
11399              about whether the target supports cross-section
11400              arithmetic.  */
11401           else
11402             {
11403               dw2_asm_output_addr (DWARF2_ADDR_SIZE, blabel,
11404                                    fmt, i * 2 * DWARF2_ADDR_SIZE);
11405               dw2_asm_output_addr (DWARF2_ADDR_SIZE, elabel, NULL);
11406             }
11407
11408           fmt = NULL;
11409         }
11410
11411       /* Negative block_num stands for an index into ranges_by_label.  */
11412       else if (block_num < 0)
11413         {
11414           int lab_idx = - block_num - 1;
11415
11416           if (!have_multiple_function_sections)
11417             {
11418               gcc_unreachable ();
11419 #if 0
11420               /* If we ever use add_ranges_by_labels () for a single
11421                  function section, all we have to do is to take out
11422                  the #if 0 above.  */
11423               dw2_asm_output_delta (DWARF2_ADDR_SIZE,
11424                                     ranges_by_label[lab_idx].begin,
11425                                     text_section_label,
11426                                     fmt, i * 2 * DWARF2_ADDR_SIZE);
11427               dw2_asm_output_delta (DWARF2_ADDR_SIZE,
11428                                     ranges_by_label[lab_idx].end,
11429                                     text_section_label, NULL);
11430 #endif
11431             }
11432           else
11433             {
11434               dw2_asm_output_addr (DWARF2_ADDR_SIZE,
11435                                    ranges_by_label[lab_idx].begin,
11436                                    fmt, i * 2 * DWARF2_ADDR_SIZE);
11437               dw2_asm_output_addr (DWARF2_ADDR_SIZE,
11438                                    ranges_by_label[lab_idx].end,
11439                                    NULL);
11440             }
11441         }
11442       else
11443         {
11444           dw2_asm_output_data (DWARF2_ADDR_SIZE, 0, NULL);
11445           dw2_asm_output_data (DWARF2_ADDR_SIZE, 0, NULL);
11446           fmt = start_fmt;
11447         }
11448     }
11449 }
11450
11451 /* Data structure containing information about input files.  */
11452 struct file_info
11453 {
11454   const char *path;     /* Complete file name.  */
11455   const char *fname;    /* File name part.  */
11456   int length;           /* Length of entire string.  */
11457   struct dwarf_file_data * file_idx;    /* Index in input file table.  */
11458   int dir_idx;          /* Index in directory table.  */
11459 };
11460
11461 /* Data structure containing information about directories with source
11462    files.  */
11463 struct dir_info
11464 {
11465   const char *path;     /* Path including directory name.  */
11466   int length;           /* Path length.  */
11467   int prefix;           /* Index of directory entry which is a prefix.  */
11468   int count;            /* Number of files in this directory.  */
11469   int dir_idx;          /* Index of directory used as base.  */
11470 };
11471
11472 /* Callback function for file_info comparison.  We sort by looking at
11473    the directories in the path.  */
11474
11475 static int
11476 file_info_cmp (const void *p1, const void *p2)
11477 {
11478   const struct file_info *const s1 = (const struct file_info *) p1;
11479   const struct file_info *const s2 = (const struct file_info *) p2;
11480   const unsigned char *cp1;
11481   const unsigned char *cp2;
11482
11483   /* Take care of file names without directories.  We need to make sure that
11484      we return consistent values to qsort since some will get confused if
11485      we return the same value when identical operands are passed in opposite
11486      orders.  So if neither has a directory, return 0 and otherwise return
11487      1 or -1 depending on which one has the directory.  */
11488   if ((s1->path == s1->fname || s2->path == s2->fname))
11489     return (s2->path == s2->fname) - (s1->path == s1->fname);
11490
11491   cp1 = (const unsigned char *) s1->path;
11492   cp2 = (const unsigned char *) s2->path;
11493
11494   while (1)
11495     {
11496       ++cp1;
11497       ++cp2;
11498       /* Reached the end of the first path?  If so, handle like above.  */
11499       if ((cp1 == (const unsigned char *) s1->fname)
11500           || (cp2 == (const unsigned char *) s2->fname))
11501         return ((cp2 == (const unsigned char *) s2->fname)
11502                 - (cp1 == (const unsigned char *) s1->fname));
11503
11504       /* Character of current path component the same?  */
11505       else if (*cp1 != *cp2)
11506         return *cp1 - *cp2;
11507     }
11508 }
11509
11510 struct file_name_acquire_data
11511 {
11512   struct file_info *files;
11513   int used_files;
11514   int max_files;
11515 };
11516
11517 /* Traversal function for the hash table.  */
11518
11519 static int
11520 file_name_acquire (void ** slot, void *data)
11521 {
11522   struct file_name_acquire_data *fnad = (struct file_name_acquire_data *) data;
11523   struct dwarf_file_data *d = (struct dwarf_file_data *) *slot;
11524   struct file_info *fi;
11525   const char *f;
11526
11527   gcc_assert (fnad->max_files >= d->emitted_number);
11528
11529   if (! d->emitted_number)
11530     return 1;
11531
11532   gcc_assert (fnad->max_files != fnad->used_files);
11533
11534   fi = fnad->files + fnad->used_files++;
11535
11536   /* Skip all leading "./".  */
11537   f = d->filename;
11538   while (f[0] == '.' && IS_DIR_SEPARATOR (f[1]))
11539     f += 2;
11540
11541   /* Create a new array entry.  */
11542   fi->path = f;
11543   fi->length = strlen (f);
11544   fi->file_idx = d;
11545
11546   /* Search for the file name part.  */
11547   f = strrchr (f, DIR_SEPARATOR);
11548 #if defined (DIR_SEPARATOR_2)
11549   {
11550     char *g = strrchr (fi->path, DIR_SEPARATOR_2);
11551
11552     if (g != NULL)
11553       {
11554         if (f == NULL || f < g)
11555           f = g;
11556       }
11557   }
11558 #endif
11559
11560   fi->fname = f == NULL ? fi->path : f + 1;
11561   return 1;
11562 }
11563
11564 /* Output the directory table and the file name table.  We try to minimize
11565    the total amount of memory needed.  A heuristic is used to avoid large
11566    slowdowns with many input files.  */
11567
11568 static void
11569 output_file_names (void)
11570 {
11571   struct file_name_acquire_data fnad;
11572   int numfiles;
11573   struct file_info *files;
11574   struct dir_info *dirs;
11575   int *saved;
11576   int *savehere;
11577   int *backmap;
11578   int ndirs;
11579   int idx_offset;
11580   int i;
11581
11582   if (!last_emitted_file)
11583     {
11584       dw2_asm_output_data (1, 0, "End directory table");
11585       dw2_asm_output_data (1, 0, "End file name table");
11586       return;
11587     }
11588
11589   numfiles = last_emitted_file->emitted_number;
11590
11591   /* Allocate the various arrays we need.  */
11592   files = XALLOCAVEC (struct file_info, numfiles);
11593   dirs = XALLOCAVEC (struct dir_info, numfiles);
11594
11595   fnad.files = files;
11596   fnad.used_files = 0;
11597   fnad.max_files = numfiles;
11598   htab_traverse (file_table, file_name_acquire, &fnad);
11599   gcc_assert (fnad.used_files == fnad.max_files);
11600
11601   qsort (files, numfiles, sizeof (files[0]), file_info_cmp);
11602
11603   /* Find all the different directories used.  */
11604   dirs[0].path = files[0].path;
11605   dirs[0].length = files[0].fname - files[0].path;
11606   dirs[0].prefix = -1;
11607   dirs[0].count = 1;
11608   dirs[0].dir_idx = 0;
11609   files[0].dir_idx = 0;
11610   ndirs = 1;
11611
11612   for (i = 1; i < numfiles; i++)
11613     if (files[i].fname - files[i].path == dirs[ndirs - 1].length
11614         && memcmp (dirs[ndirs - 1].path, files[i].path,
11615                    dirs[ndirs - 1].length) == 0)
11616       {
11617         /* Same directory as last entry.  */
11618         files[i].dir_idx = ndirs - 1;
11619         ++dirs[ndirs - 1].count;
11620       }
11621     else
11622       {
11623         int j;
11624
11625         /* This is a new directory.  */
11626         dirs[ndirs].path = files[i].path;
11627         dirs[ndirs].length = files[i].fname - files[i].path;
11628         dirs[ndirs].count = 1;
11629         dirs[ndirs].dir_idx = ndirs;
11630         files[i].dir_idx = ndirs;
11631
11632         /* Search for a prefix.  */
11633         dirs[ndirs].prefix = -1;
11634         for (j = 0; j < ndirs; j++)
11635           if (dirs[j].length < dirs[ndirs].length
11636               && dirs[j].length > 1
11637               && (dirs[ndirs].prefix == -1
11638                   || dirs[j].length > dirs[dirs[ndirs].prefix].length)
11639               && memcmp (dirs[j].path, dirs[ndirs].path, dirs[j].length) == 0)
11640             dirs[ndirs].prefix = j;
11641
11642         ++ndirs;
11643       }
11644
11645   /* Now to the actual work.  We have to find a subset of the directories which
11646      allow expressing the file name using references to the directory table
11647      with the least amount of characters.  We do not do an exhaustive search
11648      where we would have to check out every combination of every single
11649      possible prefix.  Instead we use a heuristic which provides nearly optimal
11650      results in most cases and never is much off.  */
11651   saved = XALLOCAVEC (int, ndirs);
11652   savehere = XALLOCAVEC (int, ndirs);
11653
11654   memset (saved, '\0', ndirs * sizeof (saved[0]));
11655   for (i = 0; i < ndirs; i++)
11656     {
11657       int j;
11658       int total;
11659
11660       /* We can always save some space for the current directory.  But this
11661          does not mean it will be enough to justify adding the directory.  */
11662       savehere[i] = dirs[i].length;
11663       total = (savehere[i] - saved[i]) * dirs[i].count;
11664
11665       for (j = i + 1; j < ndirs; j++)
11666         {
11667           savehere[j] = 0;
11668           if (saved[j] < dirs[i].length)
11669             {
11670               /* Determine whether the dirs[i] path is a prefix of the
11671                  dirs[j] path.  */
11672               int k;
11673
11674               k = dirs[j].prefix;
11675               while (k != -1 && k != (int) i)
11676                 k = dirs[k].prefix;
11677
11678               if (k == (int) i)
11679                 {
11680                   /* Yes it is.  We can possibly save some memory by
11681                      writing the filenames in dirs[j] relative to
11682                      dirs[i].  */
11683                   savehere[j] = dirs[i].length;
11684                   total += (savehere[j] - saved[j]) * dirs[j].count;
11685                 }
11686             }
11687         }
11688
11689       /* Check whether we can save enough to justify adding the dirs[i]
11690          directory.  */
11691       if (total > dirs[i].length + 1)
11692         {
11693           /* It's worthwhile adding.  */
11694           for (j = i; j < ndirs; j++)
11695             if (savehere[j] > 0)
11696               {
11697                 /* Remember how much we saved for this directory so far.  */
11698                 saved[j] = savehere[j];
11699
11700                 /* Remember the prefix directory.  */
11701                 dirs[j].dir_idx = i;
11702               }
11703         }
11704     }
11705
11706   /* Emit the directory name table.  */
11707   idx_offset = dirs[0].length > 0 ? 1 : 0;
11708   for (i = 1 - idx_offset; i < ndirs; i++)
11709     dw2_asm_output_nstring (dirs[i].path,
11710                             dirs[i].length
11711                              - !DWARF2_DIR_SHOULD_END_WITH_SEPARATOR,
11712                             "Directory Entry: %#x", i + idx_offset);
11713
11714   dw2_asm_output_data (1, 0, "End directory table");
11715
11716   /* We have to emit them in the order of emitted_number since that's
11717      used in the debug info generation.  To do this efficiently we
11718      generate a back-mapping of the indices first.  */
11719   backmap = XALLOCAVEC (int, numfiles);
11720   for (i = 0; i < numfiles; i++)
11721     backmap[files[i].file_idx->emitted_number - 1] = i;
11722
11723   /* Now write all the file names.  */
11724   for (i = 0; i < numfiles; i++)
11725     {
11726       int file_idx = backmap[i];
11727       int dir_idx = dirs[files[file_idx].dir_idx].dir_idx;
11728
11729 #ifdef VMS_DEBUGGING_INFO
11730 #define MAX_VMS_VERSION_LEN 6 /* ";32768" */
11731
11732       /* Setting these fields can lead to debugger miscomparisons,
11733          but VMS Debug requires them to be set correctly.  */
11734
11735       int ver;
11736       long long cdt;
11737       long siz;
11738       int maxfilelen = strlen (files[file_idx].path)
11739                                + dirs[dir_idx].length
11740                                + MAX_VMS_VERSION_LEN + 1;
11741       char *filebuf = XALLOCAVEC (char, maxfilelen);
11742
11743       vms_file_stats_name (files[file_idx].path, 0, 0, 0, &ver);
11744       snprintf (filebuf, maxfilelen, "%s;%d",
11745                 files[file_idx].path + dirs[dir_idx].length, ver);
11746
11747       dw2_asm_output_nstring
11748         (filebuf, -1, "File Entry: %#x", (unsigned) i + 1);
11749
11750       /* Include directory index.  */
11751       dw2_asm_output_data_uleb128 (dir_idx + idx_offset, NULL);
11752
11753       /* Modification time.  */
11754       dw2_asm_output_data_uleb128
11755         ((vms_file_stats_name (files[file_idx].path, &cdt, 0, 0, 0) == 0)
11756           ? cdt : 0,
11757          NULL);
11758
11759       /* File length in bytes.  */
11760       dw2_asm_output_data_uleb128
11761         ((vms_file_stats_name (files[file_idx].path, 0, &siz, 0, 0) == 0)
11762           ? siz : 0,
11763          NULL);
11764 #else
11765       dw2_asm_output_nstring (files[file_idx].path + dirs[dir_idx].length, -1,
11766                               "File Entry: %#x", (unsigned) i + 1);
11767
11768       /* Include directory index.  */
11769       dw2_asm_output_data_uleb128 (dir_idx + idx_offset, NULL);
11770
11771       /* Modification time.  */
11772       dw2_asm_output_data_uleb128 (0, NULL);
11773
11774       /* File length in bytes.  */
11775       dw2_asm_output_data_uleb128 (0, NULL);
11776 #endif
11777     }
11778
11779   dw2_asm_output_data (1, 0, "End file name table");
11780 }
11781
11782
11783 /* Output the source line number correspondence information.  This
11784    information goes into the .debug_line section.  */
11785
11786 static void
11787 output_line_info (void)
11788 {
11789   char l1[20], l2[20], p1[20], p2[20];
11790   char line_label[MAX_ARTIFICIAL_LABEL_BYTES];
11791   char prev_line_label[MAX_ARTIFICIAL_LABEL_BYTES];
11792   unsigned opc;
11793   unsigned n_op_args;
11794   unsigned long lt_index;
11795   unsigned long current_line;
11796   long line_offset;
11797   long line_delta;
11798   unsigned long current_file;
11799   unsigned long function;
11800   int ver = dwarf_version;
11801
11802   ASM_GENERATE_INTERNAL_LABEL (l1, LINE_NUMBER_BEGIN_LABEL, 0);
11803   ASM_GENERATE_INTERNAL_LABEL (l2, LINE_NUMBER_END_LABEL, 0);
11804   ASM_GENERATE_INTERNAL_LABEL (p1, LN_PROLOG_AS_LABEL, 0);
11805   ASM_GENERATE_INTERNAL_LABEL (p2, LN_PROLOG_END_LABEL, 0);
11806
11807   if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
11808     dw2_asm_output_data (4, 0xffffffff,
11809       "Initial length escape value indicating 64-bit DWARF extension");
11810   dw2_asm_output_delta (DWARF_OFFSET_SIZE, l2, l1,
11811                         "Length of Source Line Info");
11812   ASM_OUTPUT_LABEL (asm_out_file, l1);
11813
11814   dw2_asm_output_data (2, ver, "DWARF Version");
11815   dw2_asm_output_delta (DWARF_OFFSET_SIZE, p2, p1, "Prolog Length");
11816   ASM_OUTPUT_LABEL (asm_out_file, p1);
11817
11818   /* Define the architecture-dependent minimum instruction length (in
11819    bytes).  In this implementation of DWARF, this field is used for
11820    information purposes only.  Since GCC generates assembly language,
11821    we have no a priori knowledge of how many instruction bytes are
11822    generated for each source line, and therefore can use only the
11823    DW_LNE_set_address and DW_LNS_fixed_advance_pc line information
11824    commands.  Accordingly, we fix this as `1', which is "correct
11825    enough" for all architectures, and don't let the target override.  */
11826   dw2_asm_output_data (1, 1,
11827                        "Minimum Instruction Length");
11828
11829   if (ver >= 4)
11830     dw2_asm_output_data (1, DWARF_LINE_DEFAULT_MAX_OPS_PER_INSN,
11831                          "Maximum Operations Per Instruction");
11832   dw2_asm_output_data (1, DWARF_LINE_DEFAULT_IS_STMT_START,
11833                        "Default is_stmt_start flag");
11834   dw2_asm_output_data (1, DWARF_LINE_BASE,
11835                        "Line Base Value (Special Opcodes)");
11836   dw2_asm_output_data (1, DWARF_LINE_RANGE,
11837                        "Line Range Value (Special Opcodes)");
11838   dw2_asm_output_data (1, DWARF_LINE_OPCODE_BASE,
11839                        "Special Opcode Base");
11840
11841   for (opc = 1; opc < DWARF_LINE_OPCODE_BASE; opc++)
11842     {
11843       switch (opc)
11844         {
11845         case DW_LNS_advance_pc:
11846         case DW_LNS_advance_line:
11847         case DW_LNS_set_file:
11848         case DW_LNS_set_column:
11849         case DW_LNS_fixed_advance_pc:
11850           n_op_args = 1;
11851           break;
11852         default:
11853           n_op_args = 0;
11854           break;
11855         }
11856
11857       dw2_asm_output_data (1, n_op_args, "opcode: %#x has %d args",
11858                            opc, n_op_args);
11859     }
11860
11861   /* Write out the information about the files we use.  */
11862   output_file_names ();
11863   ASM_OUTPUT_LABEL (asm_out_file, p2);
11864
11865   /* We used to set the address register to the first location in the text
11866      section here, but that didn't accomplish anything since we already
11867      have a line note for the opening brace of the first function.  */
11868
11869   /* Generate the line number to PC correspondence table, encoded as
11870      a series of state machine operations.  */
11871   current_file = 1;
11872   current_line = 1;
11873
11874   if (cfun && in_cold_section_p)
11875     strcpy (prev_line_label, crtl->subsections.cold_section_label);
11876   else
11877     strcpy (prev_line_label, text_section_label);
11878   for (lt_index = 1; lt_index < line_info_table_in_use; ++lt_index)
11879     {
11880       dw_line_info_ref line_info = &line_info_table[lt_index];
11881
11882 #if 0
11883       /* Disable this optimization for now; GDB wants to see two line notes
11884          at the beginning of a function so it can find the end of the
11885          prologue.  */
11886
11887       /* Don't emit anything for redundant notes.  Just updating the
11888          address doesn't accomplish anything, because we already assume
11889          that anything after the last address is this line.  */
11890       if (line_info->dw_line_num == current_line
11891           && line_info->dw_file_num == current_file)
11892         continue;
11893 #endif
11894
11895       /* Emit debug info for the address of the current line.
11896
11897          Unfortunately, we have little choice here currently, and must always
11898          use the most general form.  GCC does not know the address delta
11899          itself, so we can't use DW_LNS_advance_pc.  Many ports do have length
11900          attributes which will give an upper bound on the address range.  We
11901          could perhaps use length attributes to determine when it is safe to
11902          use DW_LNS_fixed_advance_pc.  */
11903
11904       ASM_GENERATE_INTERNAL_LABEL (line_label, LINE_CODE_LABEL, lt_index);
11905       if (0)
11906         {
11907           /* This can handle deltas up to 0xffff.  This takes 3 bytes.  */
11908           dw2_asm_output_data (1, DW_LNS_fixed_advance_pc,
11909                                "DW_LNS_fixed_advance_pc");
11910           dw2_asm_output_delta (2, line_label, prev_line_label, NULL);
11911         }
11912       else
11913         {
11914           /* This can handle any delta.  This takes
11915              4+DWARF2_ADDR_SIZE bytes.  */
11916           dw2_asm_output_data (1, 0, "DW_LNE_set_address");
11917           dw2_asm_output_data_uleb128 (1 + DWARF2_ADDR_SIZE, NULL);
11918           dw2_asm_output_data (1, DW_LNE_set_address, NULL);
11919           dw2_asm_output_addr (DWARF2_ADDR_SIZE, line_label, NULL);
11920         }
11921
11922       strcpy (prev_line_label, line_label);
11923
11924       /* Emit debug info for the source file of the current line, if
11925          different from the previous line.  */
11926       if (line_info->dw_file_num != current_file)
11927         {
11928           current_file = line_info->dw_file_num;
11929           dw2_asm_output_data (1, DW_LNS_set_file, "DW_LNS_set_file");
11930           dw2_asm_output_data_uleb128 (current_file, "%lu", current_file);
11931         }
11932
11933       /* Emit debug info for the current line number, choosing the encoding
11934          that uses the least amount of space.  */
11935       if (line_info->dw_line_num != current_line)
11936         {
11937           line_offset = line_info->dw_line_num - current_line;
11938           line_delta = line_offset - DWARF_LINE_BASE;
11939           current_line = line_info->dw_line_num;
11940           if (line_delta >= 0 && line_delta < (DWARF_LINE_RANGE - 1))
11941             /* This can handle deltas from -10 to 234, using the current
11942                definitions of DWARF_LINE_BASE and DWARF_LINE_RANGE.  This
11943                takes 1 byte.  */
11944             dw2_asm_output_data (1, DWARF_LINE_OPCODE_BASE + line_delta,
11945                                  "line %lu", current_line);
11946           else
11947             {
11948               /* This can handle any delta.  This takes at least 4 bytes,
11949                  depending on the value being encoded.  */
11950               dw2_asm_output_data (1, DW_LNS_advance_line,
11951                                    "advance to line %lu", current_line);
11952               dw2_asm_output_data_sleb128 (line_offset, NULL);
11953               dw2_asm_output_data (1, DW_LNS_copy, "DW_LNS_copy");
11954             }
11955         }
11956       else
11957         /* We still need to start a new row, so output a copy insn.  */
11958         dw2_asm_output_data (1, DW_LNS_copy, "DW_LNS_copy");
11959     }
11960
11961   /* Emit debug info for the address of the end of the function.  */
11962   if (0)
11963     {
11964       dw2_asm_output_data (1, DW_LNS_fixed_advance_pc,
11965                            "DW_LNS_fixed_advance_pc");
11966       dw2_asm_output_delta (2, text_end_label, prev_line_label, NULL);
11967     }
11968   else
11969     {
11970       dw2_asm_output_data (1, 0, "DW_LNE_set_address");
11971       dw2_asm_output_data_uleb128 (1 + DWARF2_ADDR_SIZE, NULL);
11972       dw2_asm_output_data (1, DW_LNE_set_address, NULL);
11973       dw2_asm_output_addr (DWARF2_ADDR_SIZE, text_end_label, NULL);
11974     }
11975
11976   dw2_asm_output_data (1, 0, "DW_LNE_end_sequence");
11977   dw2_asm_output_data_uleb128 (1, NULL);
11978   dw2_asm_output_data (1, DW_LNE_end_sequence, NULL);
11979
11980   function = 0;
11981   current_file = 1;
11982   current_line = 1;
11983   for (lt_index = 0; lt_index < separate_line_info_table_in_use;)
11984     {
11985       dw_separate_line_info_ref line_info
11986         = &separate_line_info_table[lt_index];
11987
11988 #if 0
11989       /* Don't emit anything for redundant notes.  */
11990       if (line_info->dw_line_num == current_line
11991           && line_info->dw_file_num == current_file
11992           && line_info->function == function)
11993         goto cont;
11994 #endif
11995
11996       /* Emit debug info for the address of the current line.  If this is
11997          a new function, or the first line of a function, then we need
11998          to handle it differently.  */
11999       ASM_GENERATE_INTERNAL_LABEL (line_label, SEPARATE_LINE_CODE_LABEL,
12000                                    lt_index);
12001       if (function != line_info->function)
12002         {
12003           function = line_info->function;
12004
12005           /* Set the address register to the first line in the function.  */
12006           dw2_asm_output_data (1, 0, "DW_LNE_set_address");
12007           dw2_asm_output_data_uleb128 (1 + DWARF2_ADDR_SIZE, NULL);
12008           dw2_asm_output_data (1, DW_LNE_set_address, NULL);
12009           dw2_asm_output_addr (DWARF2_ADDR_SIZE, line_label, NULL);
12010         }
12011       else
12012         {
12013           /* ??? See the DW_LNS_advance_pc comment above.  */
12014           if (0)
12015             {
12016               dw2_asm_output_data (1, DW_LNS_fixed_advance_pc,
12017                                    "DW_LNS_fixed_advance_pc");
12018               dw2_asm_output_delta (2, line_label, prev_line_label, NULL);
12019             }
12020           else
12021             {
12022               dw2_asm_output_data (1, 0, "DW_LNE_set_address");
12023               dw2_asm_output_data_uleb128 (1 + DWARF2_ADDR_SIZE, NULL);
12024               dw2_asm_output_data (1, DW_LNE_set_address, NULL);
12025               dw2_asm_output_addr (DWARF2_ADDR_SIZE, line_label, NULL);
12026             }
12027         }
12028
12029       strcpy (prev_line_label, line_label);
12030
12031       /* Emit debug info for the source file of the current line, if
12032          different from the previous line.  */
12033       if (line_info->dw_file_num != current_file)
12034         {
12035           current_file = line_info->dw_file_num;
12036           dw2_asm_output_data (1, DW_LNS_set_file, "DW_LNS_set_file");
12037           dw2_asm_output_data_uleb128 (current_file, "%lu", current_file);
12038         }
12039
12040       /* Emit debug info for the current line number, choosing the encoding
12041          that uses the least amount of space.  */
12042       if (line_info->dw_line_num != current_line)
12043         {
12044           line_offset = line_info->dw_line_num - current_line;
12045           line_delta = line_offset - DWARF_LINE_BASE;
12046           current_line = line_info->dw_line_num;
12047           if (line_delta >= 0 && line_delta < (DWARF_LINE_RANGE - 1))
12048             dw2_asm_output_data (1, DWARF_LINE_OPCODE_BASE + line_delta,
12049                                  "line %lu", current_line);
12050           else
12051             {
12052               dw2_asm_output_data (1, DW_LNS_advance_line,
12053                                    "advance to line %lu", current_line);
12054               dw2_asm_output_data_sleb128 (line_offset, NULL);
12055               dw2_asm_output_data (1, DW_LNS_copy, "DW_LNS_copy");
12056             }
12057         }
12058       else
12059         dw2_asm_output_data (1, DW_LNS_copy, "DW_LNS_copy");
12060
12061 #if 0
12062     cont:
12063 #endif
12064
12065       lt_index++;
12066
12067       /* If we're done with a function, end its sequence.  */
12068       if (lt_index == separate_line_info_table_in_use
12069           || separate_line_info_table[lt_index].function != function)
12070         {
12071           current_file = 1;
12072           current_line = 1;
12073
12074           /* Emit debug info for the address of the end of the function.  */
12075           ASM_GENERATE_INTERNAL_LABEL (line_label, FUNC_END_LABEL, function);
12076           if (0)
12077             {
12078               dw2_asm_output_data (1, DW_LNS_fixed_advance_pc,
12079                                    "DW_LNS_fixed_advance_pc");
12080               dw2_asm_output_delta (2, line_label, prev_line_label, NULL);
12081             }
12082           else
12083             {
12084               dw2_asm_output_data (1, 0, "DW_LNE_set_address");
12085               dw2_asm_output_data_uleb128 (1 + DWARF2_ADDR_SIZE, NULL);
12086               dw2_asm_output_data (1, DW_LNE_set_address, NULL);
12087               dw2_asm_output_addr (DWARF2_ADDR_SIZE, line_label, NULL);
12088             }
12089
12090           /* Output the marker for the end of this sequence.  */
12091           dw2_asm_output_data (1, 0, "DW_LNE_end_sequence");
12092           dw2_asm_output_data_uleb128 (1, NULL);
12093           dw2_asm_output_data (1, DW_LNE_end_sequence, NULL);
12094         }
12095     }
12096
12097   /* Output the marker for the end of the line number info.  */
12098   ASM_OUTPUT_LABEL (asm_out_file, l2);
12099 }
12100
12101 /* Return the size of the .debug_dcall table for the compilation unit.  */
12102
12103 static unsigned long
12104 size_of_dcall_table (void)
12105 {
12106   unsigned long size;
12107   unsigned int i;
12108   dcall_entry *p;
12109   tree last_poc_decl = NULL;
12110
12111   /* Header:  version + debug info section pointer + pointer size.  */
12112   size = 2 + DWARF_OFFSET_SIZE + 1;
12113
12114   /* Each entry:  code label + DIE offset.  */
12115   for (i = 0; VEC_iterate (dcall_entry, dcall_table, i, p); i++)
12116     {
12117       gcc_assert (p->targ_die != NULL);
12118       /* Insert a "from" entry when the point-of-call DIE offset changes.  */
12119       if (p->poc_decl != last_poc_decl)
12120         {
12121           dw_die_ref poc_die = lookup_decl_die (p->poc_decl);
12122           gcc_assert (poc_die);
12123           last_poc_decl = p->poc_decl;
12124           if (poc_die)
12125             size += (DWARF_OFFSET_SIZE
12126                      + size_of_uleb128 (poc_die->die_offset));
12127         }
12128       size += DWARF_OFFSET_SIZE + size_of_uleb128 (p->targ_die->die_offset);
12129     }
12130
12131   return size;
12132 }
12133
12134 /* Output the direct call table used to disambiguate PC values when
12135    identical function have been merged.  */
12136
12137 static void
12138 output_dcall_table (void)
12139 {
12140   unsigned i;
12141   unsigned long dcall_length = size_of_dcall_table ();
12142   dcall_entry *p;
12143   char poc_label[MAX_ARTIFICIAL_LABEL_BYTES];
12144   tree last_poc_decl = NULL;
12145
12146   if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
12147     dw2_asm_output_data (4, 0xffffffff,
12148       "Initial length escape value indicating 64-bit DWARF extension");
12149   dw2_asm_output_data (DWARF_OFFSET_SIZE, dcall_length,
12150                        "Length of Direct Call Table");
12151   dw2_asm_output_data (2, 4, "Version number");
12152   dw2_asm_output_offset (DWARF_OFFSET_SIZE, debug_info_section_label,
12153                          debug_info_section,
12154                          "Offset of Compilation Unit Info");
12155   dw2_asm_output_data (1, DWARF2_ADDR_SIZE, "Pointer Size (in bytes)");
12156
12157   for (i = 0; VEC_iterate (dcall_entry, dcall_table, i, p); i++)
12158     {
12159       /* Insert a "from" entry when the point-of-call DIE offset changes.  */
12160       if (p->poc_decl != last_poc_decl)
12161         {
12162           dw_die_ref poc_die = lookup_decl_die (p->poc_decl);
12163           last_poc_decl = p->poc_decl;
12164           if (poc_die)
12165             {
12166               dw2_asm_output_data (DWARF_OFFSET_SIZE, 0, "New caller");
12167               dw2_asm_output_data_uleb128 (poc_die->die_offset,
12168                                            "Caller DIE offset");
12169             }
12170         }
12171       ASM_GENERATE_INTERNAL_LABEL (poc_label, "LPOC", p->poc_label_num);
12172       dw2_asm_output_addr (DWARF_OFFSET_SIZE, poc_label, "Point of call");
12173       dw2_asm_output_data_uleb128 (p->targ_die->die_offset,
12174                                    "Callee DIE offset");
12175     }
12176 }
12177 \f
12178 /* Return the size of the .debug_vcall table for the compilation unit.  */
12179
12180 static unsigned long
12181 size_of_vcall_table (void)
12182 {
12183   unsigned long size;
12184   unsigned int i;
12185   vcall_entry *p;
12186
12187   /* Header:  version + pointer size.  */
12188   size = 2 + 1;
12189
12190   /* Each entry:  code label + vtable slot index.  */
12191   for (i = 0; VEC_iterate (vcall_entry, vcall_table, i, p); i++)
12192     size += DWARF_OFFSET_SIZE + size_of_uleb128 (p->vtable_slot);
12193
12194   return size;
12195 }
12196
12197 /* Output the virtual call table used to disambiguate PC values when
12198    identical function have been merged.  */
12199
12200 static void
12201 output_vcall_table (void)
12202 {
12203   unsigned i;
12204   unsigned long vcall_length = size_of_vcall_table ();
12205   vcall_entry *p;
12206   char poc_label[MAX_ARTIFICIAL_LABEL_BYTES];
12207
12208   if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
12209     dw2_asm_output_data (4, 0xffffffff,
12210       "Initial length escape value indicating 64-bit DWARF extension");
12211   dw2_asm_output_data (DWARF_OFFSET_SIZE, vcall_length,
12212                        "Length of Virtual Call Table");
12213   dw2_asm_output_data (2, 4, "Version number");
12214   dw2_asm_output_data (1, DWARF2_ADDR_SIZE, "Pointer Size (in bytes)");
12215
12216   for (i = 0; VEC_iterate (vcall_entry, vcall_table, i, p); i++)
12217     {
12218       ASM_GENERATE_INTERNAL_LABEL (poc_label, "LPOC", p->poc_label_num);
12219       dw2_asm_output_addr (DWARF_OFFSET_SIZE, poc_label, "Point of call");
12220       dw2_asm_output_data_uleb128 (p->vtable_slot, "Vtable slot");
12221     }
12222 }
12223 \f
12224 /* Given a pointer to a tree node for some base type, return a pointer to
12225    a DIE that describes the given type.
12226
12227    This routine must only be called for GCC type nodes that correspond to
12228    Dwarf base (fundamental) types.  */
12229
12230 static dw_die_ref
12231 base_type_die (tree type)
12232 {
12233   dw_die_ref base_type_result;
12234   enum dwarf_type encoding;
12235
12236   if (TREE_CODE (type) == ERROR_MARK || TREE_CODE (type) == VOID_TYPE)
12237     return 0;
12238
12239   /* If this is a subtype that should not be emitted as a subrange type,
12240      use the base type.  See subrange_type_for_debug_p.  */
12241   if (TREE_CODE (type) == INTEGER_TYPE && TREE_TYPE (type) != NULL_TREE)
12242     type = TREE_TYPE (type);
12243
12244   switch (TREE_CODE (type))
12245     {
12246     case INTEGER_TYPE:
12247       if (TYPE_STRING_FLAG (type))
12248         {
12249           if (TYPE_UNSIGNED (type))
12250             encoding = DW_ATE_unsigned_char;
12251           else
12252             encoding = DW_ATE_signed_char;
12253         }
12254       else if (TYPE_UNSIGNED (type))
12255         encoding = DW_ATE_unsigned;
12256       else
12257         encoding = DW_ATE_signed;
12258       break;
12259
12260     case REAL_TYPE:
12261       if (DECIMAL_FLOAT_MODE_P (TYPE_MODE (type)))
12262         {
12263           if (dwarf_version >= 3 || !dwarf_strict)
12264             encoding = DW_ATE_decimal_float;
12265           else
12266             encoding = DW_ATE_lo_user;
12267         }
12268       else
12269         encoding = DW_ATE_float;
12270       break;
12271
12272     case FIXED_POINT_TYPE:
12273       if (!(dwarf_version >= 3 || !dwarf_strict))
12274         encoding = DW_ATE_lo_user;
12275       else if (TYPE_UNSIGNED (type))
12276         encoding = DW_ATE_unsigned_fixed;
12277       else
12278         encoding = DW_ATE_signed_fixed;
12279       break;
12280
12281       /* Dwarf2 doesn't know anything about complex ints, so use
12282          a user defined type for it.  */
12283     case COMPLEX_TYPE:
12284       if (TREE_CODE (TREE_TYPE (type)) == REAL_TYPE)
12285         encoding = DW_ATE_complex_float;
12286       else
12287         encoding = DW_ATE_lo_user;
12288       break;
12289
12290     case BOOLEAN_TYPE:
12291       /* GNU FORTRAN/Ada/C++ BOOLEAN type.  */
12292       encoding = DW_ATE_boolean;
12293       break;
12294
12295     default:
12296       /* No other TREE_CODEs are Dwarf fundamental types.  */
12297       gcc_unreachable ();
12298     }
12299
12300   base_type_result = new_die (DW_TAG_base_type, comp_unit_die, type);
12301
12302   add_AT_unsigned (base_type_result, DW_AT_byte_size,
12303                    int_size_in_bytes (type));
12304   add_AT_unsigned (base_type_result, DW_AT_encoding, encoding);
12305
12306   return base_type_result;
12307 }
12308
12309 /* Given a pointer to an arbitrary ..._TYPE tree node, return nonzero if the
12310    given input type is a Dwarf "fundamental" type.  Otherwise return null.  */
12311
12312 static inline int
12313 is_base_type (tree type)
12314 {
12315   switch (TREE_CODE (type))
12316     {
12317     case ERROR_MARK:
12318     case VOID_TYPE:
12319     case INTEGER_TYPE:
12320     case REAL_TYPE:
12321     case FIXED_POINT_TYPE:
12322     case COMPLEX_TYPE:
12323     case BOOLEAN_TYPE:
12324       return 1;
12325
12326     case ARRAY_TYPE:
12327     case RECORD_TYPE:
12328     case UNION_TYPE:
12329     case QUAL_UNION_TYPE:
12330     case ENUMERAL_TYPE:
12331     case FUNCTION_TYPE:
12332     case METHOD_TYPE:
12333     case POINTER_TYPE:
12334     case REFERENCE_TYPE:
12335     case OFFSET_TYPE:
12336     case LANG_TYPE:
12337     case VECTOR_TYPE:
12338       return 0;
12339
12340     default:
12341       gcc_unreachable ();
12342     }
12343
12344   return 0;
12345 }
12346
12347 /* Given a pointer to a tree node, assumed to be some kind of a ..._TYPE
12348    node, return the size in bits for the type if it is a constant, or else
12349    return the alignment for the type if the type's size is not constant, or
12350    else return BITS_PER_WORD if the type actually turns out to be an
12351    ERROR_MARK node.  */
12352
12353 static inline unsigned HOST_WIDE_INT
12354 simple_type_size_in_bits (const_tree type)
12355 {
12356   if (TREE_CODE (type) == ERROR_MARK)
12357     return BITS_PER_WORD;
12358   else if (TYPE_SIZE (type) == NULL_TREE)
12359     return 0;
12360   else if (host_integerp (TYPE_SIZE (type), 1))
12361     return tree_low_cst (TYPE_SIZE (type), 1);
12362   else
12363     return TYPE_ALIGN (type);
12364 }
12365
12366 /* Similarly, but return a double_int instead of UHWI.  */
12367
12368 static inline double_int
12369 double_int_type_size_in_bits (const_tree type)
12370 {
12371   if (TREE_CODE (type) == ERROR_MARK)
12372     return uhwi_to_double_int (BITS_PER_WORD);
12373   else if (TYPE_SIZE (type) == NULL_TREE)
12374     return double_int_zero;
12375   else if (TREE_CODE (TYPE_SIZE (type)) == INTEGER_CST)
12376     return tree_to_double_int (TYPE_SIZE (type));
12377   else
12378     return uhwi_to_double_int (TYPE_ALIGN (type));
12379 }
12380
12381 /*  Given a pointer to a tree node for a subrange type, return a pointer
12382     to a DIE that describes the given type.  */
12383
12384 static dw_die_ref
12385 subrange_type_die (tree type, tree low, tree high, dw_die_ref context_die)
12386 {
12387   dw_die_ref subrange_die;
12388   const HOST_WIDE_INT size_in_bytes = int_size_in_bytes (type);
12389
12390   if (context_die == NULL)
12391     context_die = comp_unit_die;
12392
12393   subrange_die = new_die (DW_TAG_subrange_type, context_die, type);
12394
12395   if (int_size_in_bytes (TREE_TYPE (type)) != size_in_bytes)
12396     {
12397       /* The size of the subrange type and its base type do not match,
12398          so we need to generate a size attribute for the subrange type.  */
12399       add_AT_unsigned (subrange_die, DW_AT_byte_size, size_in_bytes);
12400     }
12401
12402   if (low)
12403     add_bound_info (subrange_die, DW_AT_lower_bound, low);
12404   if (high)
12405     add_bound_info (subrange_die, DW_AT_upper_bound, high);
12406
12407   return subrange_die;
12408 }
12409
12410 /* Given a pointer to an arbitrary ..._TYPE tree node, return a debugging
12411    entry that chains various modifiers in front of the given type.  */
12412
12413 static dw_die_ref
12414 modified_type_die (tree type, int is_const_type, int is_volatile_type,
12415                    dw_die_ref context_die)
12416 {
12417   enum tree_code code = TREE_CODE (type);
12418   dw_die_ref mod_type_die;
12419   dw_die_ref sub_die = NULL;
12420   tree item_type = NULL;
12421   tree qualified_type;
12422   tree name, low, high;
12423
12424   if (code == ERROR_MARK)
12425     return NULL;
12426
12427   /* See if we already have the appropriately qualified variant of
12428      this type.  */
12429   qualified_type
12430     = get_qualified_type (type,
12431                           ((is_const_type ? TYPE_QUAL_CONST : 0)
12432                            | (is_volatile_type ? TYPE_QUAL_VOLATILE : 0)));
12433
12434   if (qualified_type == sizetype
12435       && TYPE_NAME (qualified_type)
12436       && TREE_CODE (TYPE_NAME (qualified_type)) == TYPE_DECL)
12437     {
12438 #ifdef ENABLE_CHECKING
12439       gcc_assert (TREE_CODE (TREE_TYPE (TYPE_NAME (qualified_type)))
12440                   == INTEGER_TYPE
12441                   && TYPE_PRECISION (TREE_TYPE (TYPE_NAME (qualified_type)))
12442                      == TYPE_PRECISION (qualified_type)
12443                   && TYPE_UNSIGNED (TREE_TYPE (TYPE_NAME (qualified_type)))
12444                      == TYPE_UNSIGNED (qualified_type));
12445 #endif
12446       qualified_type = TREE_TYPE (TYPE_NAME (qualified_type));
12447     }
12448
12449   /* If we do, then we can just use its DIE, if it exists.  */
12450   if (qualified_type)
12451     {
12452       mod_type_die = lookup_type_die (qualified_type);
12453       if (mod_type_die)
12454         return mod_type_die;
12455     }
12456
12457   name = qualified_type ? TYPE_NAME (qualified_type) : NULL;
12458
12459   /* Handle C typedef types.  */
12460   if (name && TREE_CODE (name) == TYPE_DECL && DECL_ORIGINAL_TYPE (name)
12461       && !DECL_ARTIFICIAL (name))
12462     {
12463       tree dtype = TREE_TYPE (name);
12464
12465       if (qualified_type == dtype)
12466         {
12467           /* For a named type, use the typedef.  */
12468           gen_type_die (qualified_type, context_die);
12469           return lookup_type_die (qualified_type);
12470         }
12471       else if (is_const_type < TYPE_READONLY (dtype)
12472                || is_volatile_type < TYPE_VOLATILE (dtype)
12473                || (is_const_type <= TYPE_READONLY (dtype)
12474                    && is_volatile_type <= TYPE_VOLATILE (dtype)
12475                    && DECL_ORIGINAL_TYPE (name) != type))
12476         /* cv-unqualified version of named type.  Just use the unnamed
12477            type to which it refers.  */
12478         return modified_type_die (DECL_ORIGINAL_TYPE (name),
12479                                   is_const_type, is_volatile_type,
12480                                   context_die);
12481       /* Else cv-qualified version of named type; fall through.  */
12482     }
12483
12484   if (is_const_type)
12485     {
12486       mod_type_die = new_die (DW_TAG_const_type, comp_unit_die, type);
12487       sub_die = modified_type_die (type, 0, is_volatile_type, context_die);
12488     }
12489   else if (is_volatile_type)
12490     {
12491       mod_type_die = new_die (DW_TAG_volatile_type, comp_unit_die, type);
12492       sub_die = modified_type_die (type, 0, 0, context_die);
12493     }
12494   else if (code == POINTER_TYPE)
12495     {
12496       mod_type_die = new_die (DW_TAG_pointer_type, comp_unit_die, type);
12497       add_AT_unsigned (mod_type_die, DW_AT_byte_size,
12498                        simple_type_size_in_bits (type) / BITS_PER_UNIT);
12499       item_type = TREE_TYPE (type);
12500       if (!ADDR_SPACE_GENERIC_P (TYPE_ADDR_SPACE (item_type)))
12501         add_AT_unsigned (mod_type_die, DW_AT_address_class,
12502                          TYPE_ADDR_SPACE (item_type));
12503     }
12504   else if (code == REFERENCE_TYPE)
12505     {
12506       if (TYPE_REF_IS_RVALUE (type) && dwarf_version >= 4)
12507         mod_type_die = new_die (DW_TAG_rvalue_reference_type, comp_unit_die,
12508                                 type);
12509       else
12510         mod_type_die = new_die (DW_TAG_reference_type, comp_unit_die, type);
12511       add_AT_unsigned (mod_type_die, DW_AT_byte_size,
12512                        simple_type_size_in_bits (type) / BITS_PER_UNIT);
12513       item_type = TREE_TYPE (type);
12514       if (!ADDR_SPACE_GENERIC_P (TYPE_ADDR_SPACE (item_type)))
12515         add_AT_unsigned (mod_type_die, DW_AT_address_class,
12516                          TYPE_ADDR_SPACE (item_type));
12517     }
12518   else if (code == INTEGER_TYPE
12519            && TREE_TYPE (type) != NULL_TREE
12520            && subrange_type_for_debug_p (type, &low, &high))
12521     {
12522       mod_type_die = subrange_type_die (type, low, high, context_die);
12523       item_type = TREE_TYPE (type);
12524     }
12525   else if (is_base_type (type))
12526     mod_type_die = base_type_die (type);
12527   else
12528     {
12529       gen_type_die (type, context_die);
12530
12531       /* We have to get the type_main_variant here (and pass that to the
12532          `lookup_type_die' routine) because the ..._TYPE node we have
12533          might simply be a *copy* of some original type node (where the
12534          copy was created to help us keep track of typedef names) and
12535          that copy might have a different TYPE_UID from the original
12536          ..._TYPE node.  */
12537       if (TREE_CODE (type) != VECTOR_TYPE)
12538         return lookup_type_die (type_main_variant (type));
12539       else
12540         /* Vectors have the debugging information in the type,
12541            not the main variant.  */
12542         return lookup_type_die (type);
12543     }
12544
12545   /* Builtin types don't have a DECL_ORIGINAL_TYPE.  For those,
12546      don't output a DW_TAG_typedef, since there isn't one in the
12547      user's program; just attach a DW_AT_name to the type.
12548      Don't attach a DW_AT_name to DW_TAG_const_type or DW_TAG_volatile_type
12549      if the base type already has the same name.  */
12550   if (name
12551       && ((TREE_CODE (name) != TYPE_DECL
12552            && (qualified_type == TYPE_MAIN_VARIANT (type)
12553                || (!is_const_type && !is_volatile_type)))
12554           || (TREE_CODE (name) == TYPE_DECL
12555               && TREE_TYPE (name) == qualified_type
12556               && DECL_NAME (name))))
12557     {
12558       if (TREE_CODE (name) == TYPE_DECL)
12559         /* Could just call add_name_and_src_coords_attributes here,
12560            but since this is a builtin type it doesn't have any
12561            useful source coordinates anyway.  */
12562         name = DECL_NAME (name);
12563       add_name_attribute (mod_type_die, IDENTIFIER_POINTER (name));
12564     }
12565   /* This probably indicates a bug.  */
12566   else if (mod_type_die && mod_type_die->die_tag == DW_TAG_base_type)
12567     add_name_attribute (mod_type_die, "__unknown__");
12568
12569   if (qualified_type)
12570     equate_type_number_to_die (qualified_type, mod_type_die);
12571
12572   if (item_type)
12573     /* We must do this after the equate_type_number_to_die call, in case
12574        this is a recursive type.  This ensures that the modified_type_die
12575        recursion will terminate even if the type is recursive.  Recursive
12576        types are possible in Ada.  */
12577     sub_die = modified_type_die (item_type,
12578                                  TYPE_READONLY (item_type),
12579                                  TYPE_VOLATILE (item_type),
12580                                  context_die);
12581
12582   if (sub_die != NULL)
12583     add_AT_die_ref (mod_type_die, DW_AT_type, sub_die);
12584
12585   return mod_type_die;
12586 }
12587
12588 /* Generate DIEs for the generic parameters of T.
12589    T must be either a generic type or a generic function.
12590    See http://gcc.gnu.org/wiki/TemplateParmsDwarf for more.  */
12591
12592 static void
12593 gen_generic_params_dies (tree t)
12594 {
12595   tree parms, args;
12596   int parms_num, i;
12597   dw_die_ref die = NULL;
12598
12599   if (!t || (TYPE_P (t) && !COMPLETE_TYPE_P (t)))
12600     return;
12601
12602   if (TYPE_P (t))
12603     die = lookup_type_die (t);
12604   else if (DECL_P (t))
12605     die = lookup_decl_die (t);
12606
12607   gcc_assert (die);
12608
12609   parms = lang_hooks.get_innermost_generic_parms (t);
12610   if (!parms)
12611     /* T has no generic parameter. It means T is neither a generic type
12612        or function. End of story.  */
12613     return;
12614
12615   parms_num = TREE_VEC_LENGTH (parms);
12616   args = lang_hooks.get_innermost_generic_args (t);
12617   for (i = 0; i < parms_num; i++)
12618     {
12619       tree parm, arg, arg_pack_elems;
12620
12621       parm = TREE_VEC_ELT (parms, i);
12622       arg = TREE_VEC_ELT (args, i);
12623       arg_pack_elems = lang_hooks.types.get_argument_pack_elems (arg);
12624       gcc_assert (parm && TREE_VALUE (parm) && arg);
12625
12626       if (parm && TREE_VALUE (parm) && arg)
12627         {
12628           /* If PARM represents a template parameter pack,
12629              emit a DW_TAG_GNU_template_parameter_pack DIE, followed
12630              by DW_TAG_template_*_parameter DIEs for the argument
12631              pack elements of ARG. Note that ARG would then be
12632              an argument pack.  */
12633           if (arg_pack_elems)
12634             template_parameter_pack_die (TREE_VALUE (parm),
12635                                          arg_pack_elems,
12636                                          die);
12637           else
12638             generic_parameter_die (TREE_VALUE (parm), arg,
12639                                    true /* Emit DW_AT_name */, die);
12640         }
12641     }
12642 }
12643
12644 /* Create and return a DIE for PARM which should be
12645    the representation of a generic type parameter.
12646    For instance, in the C++ front end, PARM would be a template parameter.
12647    ARG is the argument to PARM.
12648    EMIT_NAME_P if tree, the DIE will have DW_AT_name attribute set to the
12649    name of the PARM.
12650    PARENT_DIE is the parent DIE which the new created DIE should be added to,
12651    as a child node.  */
12652
12653 static dw_die_ref
12654 generic_parameter_die (tree parm, tree arg,
12655                        bool emit_name_p,
12656                        dw_die_ref parent_die)
12657 {
12658   dw_die_ref tmpl_die = NULL;
12659   const char *name = NULL;
12660
12661   if (!parm || !DECL_NAME (parm) || !arg)
12662     return NULL;
12663
12664   /* We support non-type generic parameters and arguments,
12665      type generic parameters and arguments, as well as
12666      generic generic parameters (a.k.a. template template parameters in C++)
12667      and arguments.  */
12668   if (TREE_CODE (parm) == PARM_DECL)
12669     /* PARM is a nontype generic parameter  */
12670     tmpl_die = new_die (DW_TAG_template_value_param, parent_die, parm);
12671   else if (TREE_CODE (parm) == TYPE_DECL)
12672     /* PARM is a type generic parameter.  */
12673     tmpl_die = new_die (DW_TAG_template_type_param, parent_die, parm);
12674   else if (lang_hooks.decls.generic_generic_parameter_decl_p (parm))
12675     /* PARM is a generic generic parameter.
12676        Its DIE is a GNU extension. It shall have a
12677        DW_AT_name attribute to represent the name of the template template
12678        parameter, and a DW_AT_GNU_template_name attribute to represent the
12679        name of the template template argument.  */
12680     tmpl_die = new_die (DW_TAG_GNU_template_template_param,
12681                         parent_die, parm);
12682   else
12683     gcc_unreachable ();
12684
12685   if (tmpl_die)
12686     {
12687       tree tmpl_type;
12688
12689       /* If PARM is a generic parameter pack, it means we are
12690          emitting debug info for a template argument pack element.
12691          In other terms, ARG is a template argument pack element.
12692          In that case, we don't emit any DW_AT_name attribute for
12693          the die.  */
12694       if (emit_name_p)
12695         {
12696           name = IDENTIFIER_POINTER (DECL_NAME (parm));
12697           gcc_assert (name);
12698           add_AT_string (tmpl_die, DW_AT_name, name);
12699         }
12700
12701       if (!lang_hooks.decls.generic_generic_parameter_decl_p (parm))
12702         {
12703           /* DWARF3, 5.6.8 says if PARM is a non-type generic parameter
12704              TMPL_DIE should have a child DW_AT_type attribute that is set
12705              to the type of the argument to PARM, which is ARG.
12706              If PARM is a type generic parameter, TMPL_DIE should have a
12707              child DW_AT_type that is set to ARG.  */
12708           tmpl_type = TYPE_P (arg) ? arg : TREE_TYPE (arg);
12709           add_type_attribute (tmpl_die, tmpl_type, 0,
12710                               TREE_THIS_VOLATILE (tmpl_type),
12711                               parent_die);
12712         }
12713       else
12714         {
12715           /* So TMPL_DIE is a DIE representing a
12716              a generic generic template parameter, a.k.a template template
12717              parameter in C++ and arg is a template.  */
12718
12719           /* The DW_AT_GNU_template_name attribute of the DIE must be set
12720              to the name of the argument.  */
12721           name = dwarf2_name (TYPE_P (arg) ? TYPE_NAME (arg) : arg, 1);
12722           if (name)
12723             add_AT_string (tmpl_die, DW_AT_GNU_template_name, name);
12724         }
12725
12726       if (TREE_CODE (parm) == PARM_DECL)
12727         /* So PARM is a non-type generic parameter.
12728            DWARF3 5.6.8 says we must set a DW_AT_const_value child
12729            attribute of TMPL_DIE which value represents the value
12730            of ARG.
12731            We must be careful here:
12732            The value of ARG might reference some function decls.
12733            We might currently be emitting debug info for a generic
12734            type and types are emitted before function decls, we don't
12735            know if the function decls referenced by ARG will actually be
12736            emitted after cgraph computations.
12737            So must defer the generation of the DW_AT_const_value to
12738            after cgraph is ready.  */
12739         append_entry_to_tmpl_value_parm_die_table (tmpl_die, arg);
12740     }
12741
12742   return tmpl_die;
12743 }
12744
12745 /* Generate and return a  DW_TAG_GNU_template_parameter_pack DIE representing.
12746    PARM_PACK must be a template parameter pack. The returned DIE
12747    will be child DIE of PARENT_DIE.  */
12748
12749 static dw_die_ref
12750 template_parameter_pack_die (tree parm_pack,
12751                              tree parm_pack_args,
12752                              dw_die_ref parent_die)
12753 {
12754   dw_die_ref die;
12755   int j;
12756
12757   gcc_assert (parent_die && parm_pack);
12758
12759   die = new_die (DW_TAG_GNU_template_parameter_pack, parent_die, parm_pack);
12760   add_name_and_src_coords_attributes (die, parm_pack);
12761   for (j = 0; j < TREE_VEC_LENGTH (parm_pack_args); j++)
12762     generic_parameter_die (parm_pack,
12763                            TREE_VEC_ELT (parm_pack_args, j),
12764                            false /* Don't emit DW_AT_name */,
12765                            die);
12766   return die;
12767 }
12768
12769 /* Given a pointer to an arbitrary ..._TYPE tree node, return true if it is
12770    an enumerated type.  */
12771
12772 static inline int
12773 type_is_enum (const_tree type)
12774 {
12775   return TREE_CODE (type) == ENUMERAL_TYPE;
12776 }
12777
12778 /* Return the DBX register number described by a given RTL node.  */
12779
12780 static unsigned int
12781 dbx_reg_number (const_rtx rtl)
12782 {
12783   unsigned regno = REGNO (rtl);
12784
12785   gcc_assert (regno < FIRST_PSEUDO_REGISTER);
12786
12787 #ifdef LEAF_REG_REMAP
12788   if (current_function_uses_only_leaf_regs)
12789     {
12790       int leaf_reg = LEAF_REG_REMAP (regno);
12791       if (leaf_reg != -1)
12792         regno = (unsigned) leaf_reg;
12793     }
12794 #endif
12795
12796   return DBX_REGISTER_NUMBER (regno);
12797 }
12798
12799 /* Optionally add a DW_OP_piece term to a location description expression.
12800    DW_OP_piece is only added if the location description expression already
12801    doesn't end with DW_OP_piece.  */
12802
12803 static void
12804 add_loc_descr_op_piece (dw_loc_descr_ref *list_head, int size)
12805 {
12806   dw_loc_descr_ref loc;
12807
12808   if (*list_head != NULL)
12809     {
12810       /* Find the end of the chain.  */
12811       for (loc = *list_head; loc->dw_loc_next != NULL; loc = loc->dw_loc_next)
12812         ;
12813
12814       if (loc->dw_loc_opc != DW_OP_piece)
12815         loc->dw_loc_next = new_loc_descr (DW_OP_piece, size, 0);
12816     }
12817 }
12818
12819 /* Return a location descriptor that designates a machine register or
12820    zero if there is none.  */
12821
12822 static dw_loc_descr_ref
12823 reg_loc_descriptor (rtx rtl, enum var_init_status initialized)
12824 {
12825   rtx regs;
12826
12827   if (REGNO (rtl) >= FIRST_PSEUDO_REGISTER)
12828     return 0;
12829
12830   regs = targetm.dwarf_register_span (rtl);
12831
12832   if (hard_regno_nregs[REGNO (rtl)][GET_MODE (rtl)] > 1 || regs)
12833     return multiple_reg_loc_descriptor (rtl, regs, initialized);
12834   else
12835     return one_reg_loc_descriptor (dbx_reg_number (rtl), initialized);
12836 }
12837
12838 /* Return a location descriptor that designates a machine register for
12839    a given hard register number.  */
12840
12841 static dw_loc_descr_ref
12842 one_reg_loc_descriptor (unsigned int regno, enum var_init_status initialized)
12843 {
12844   dw_loc_descr_ref reg_loc_descr;
12845
12846   if (regno <= 31)
12847     reg_loc_descr
12848       = new_loc_descr ((enum dwarf_location_atom) (DW_OP_reg0 + regno), 0, 0);
12849   else
12850     reg_loc_descr = new_loc_descr (DW_OP_regx, regno, 0);
12851
12852   if (initialized == VAR_INIT_STATUS_UNINITIALIZED)
12853     add_loc_descr (&reg_loc_descr, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
12854
12855   return reg_loc_descr;
12856 }
12857
12858 /* Given an RTL of a register, return a location descriptor that
12859    designates a value that spans more than one register.  */
12860
12861 static dw_loc_descr_ref
12862 multiple_reg_loc_descriptor (rtx rtl, rtx regs,
12863                              enum var_init_status initialized)
12864 {
12865   int nregs, size, i;
12866   unsigned reg;
12867   dw_loc_descr_ref loc_result = NULL;
12868
12869   reg = REGNO (rtl);
12870 #ifdef LEAF_REG_REMAP
12871   if (current_function_uses_only_leaf_regs)
12872     {
12873       int leaf_reg = LEAF_REG_REMAP (reg);
12874       if (leaf_reg != -1)
12875         reg = (unsigned) leaf_reg;
12876     }
12877 #endif
12878   gcc_assert ((unsigned) DBX_REGISTER_NUMBER (reg) == dbx_reg_number (rtl));
12879   nregs = hard_regno_nregs[REGNO (rtl)][GET_MODE (rtl)];
12880
12881   /* Simple, contiguous registers.  */
12882   if (regs == NULL_RTX)
12883     {
12884       size = GET_MODE_SIZE (GET_MODE (rtl)) / nregs;
12885
12886       loc_result = NULL;
12887       while (nregs--)
12888         {
12889           dw_loc_descr_ref t;
12890
12891           t = one_reg_loc_descriptor (DBX_REGISTER_NUMBER (reg),
12892                                       VAR_INIT_STATUS_INITIALIZED);
12893           add_loc_descr (&loc_result, t);
12894           add_loc_descr_op_piece (&loc_result, size);
12895           ++reg;
12896         }
12897       return loc_result;
12898     }
12899
12900   /* Now onto stupid register sets in non contiguous locations.  */
12901
12902   gcc_assert (GET_CODE (regs) == PARALLEL);
12903
12904   size = GET_MODE_SIZE (GET_MODE (XVECEXP (regs, 0, 0)));
12905   loc_result = NULL;
12906
12907   for (i = 0; i < XVECLEN (regs, 0); ++i)
12908     {
12909       dw_loc_descr_ref t;
12910
12911       t = one_reg_loc_descriptor (REGNO (XVECEXP (regs, 0, i)),
12912                                   VAR_INIT_STATUS_INITIALIZED);
12913       add_loc_descr (&loc_result, t);
12914       size = GET_MODE_SIZE (GET_MODE (XVECEXP (regs, 0, 0)));
12915       add_loc_descr_op_piece (&loc_result, size);
12916     }
12917
12918   if (loc_result && initialized == VAR_INIT_STATUS_UNINITIALIZED)
12919     add_loc_descr (&loc_result, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
12920   return loc_result;
12921 }
12922
12923 #endif /* DWARF2_DEBUGGING_INFO */
12924
12925 #if defined (DWARF2_DEBUGGING_INFO) || defined (DWARF2_UNWIND_INFO)
12926
12927 /* Return a location descriptor that designates a constant.  */
12928
12929 static dw_loc_descr_ref
12930 int_loc_descriptor (HOST_WIDE_INT i)
12931 {
12932   enum dwarf_location_atom op;
12933
12934   /* Pick the smallest representation of a constant, rather than just
12935      defaulting to the LEB encoding.  */
12936   if (i >= 0)
12937     {
12938       if (i <= 31)
12939         op = (enum dwarf_location_atom) (DW_OP_lit0 + i);
12940       else if (i <= 0xff)
12941         op = DW_OP_const1u;
12942       else if (i <= 0xffff)
12943         op = DW_OP_const2u;
12944       else if (HOST_BITS_PER_WIDE_INT == 32
12945                || i <= 0xffffffff)
12946         op = DW_OP_const4u;
12947       else
12948         op = DW_OP_constu;
12949     }
12950   else
12951     {
12952       if (i >= -0x80)
12953         op = DW_OP_const1s;
12954       else if (i >= -0x8000)
12955         op = DW_OP_const2s;
12956       else if (HOST_BITS_PER_WIDE_INT == 32
12957                || i >= -0x80000000)
12958         op = DW_OP_const4s;
12959       else
12960         op = DW_OP_consts;
12961     }
12962
12963   return new_loc_descr (op, i, 0);
12964 }
12965 #endif
12966
12967 #ifdef DWARF2_DEBUGGING_INFO
12968 /* Return loc description representing "address" of integer value.
12969    This can appear only as toplevel expression.  */
12970
12971 static dw_loc_descr_ref
12972 address_of_int_loc_descriptor (int size, HOST_WIDE_INT i)
12973 {
12974   int litsize;
12975   dw_loc_descr_ref loc_result = NULL;
12976
12977   if (!(dwarf_version >= 4 || !dwarf_strict))
12978     return NULL;
12979
12980   if (i >= 0)
12981     {
12982       if (i <= 31)
12983         litsize = 1;
12984       else if (i <= 0xff)
12985         litsize = 2;
12986       else if (i <= 0xffff)
12987         litsize = 3;
12988       else if (HOST_BITS_PER_WIDE_INT == 32
12989                || i <= 0xffffffff)
12990         litsize = 5;
12991       else
12992         litsize = 1 + size_of_uleb128 ((unsigned HOST_WIDE_INT) i);
12993     }
12994   else
12995     {
12996       if (i >= -0x80)
12997         litsize = 2;
12998       else if (i >= -0x8000)
12999         litsize = 3;
13000       else if (HOST_BITS_PER_WIDE_INT == 32
13001                || i >= -0x80000000)
13002         litsize = 5;
13003       else
13004         litsize = 1 + size_of_sleb128 (i);
13005     }
13006   /* Determine if DW_OP_stack_value or DW_OP_implicit_value
13007      is more compact.  For DW_OP_stack_value we need:
13008      litsize + 1 (DW_OP_stack_value)
13009      and for DW_OP_implicit_value:
13010      1 (DW_OP_implicit_value) + 1 (length) + size.  */
13011   if ((int) DWARF2_ADDR_SIZE >= size && litsize + 1 <= 1 + 1 + size)
13012     {
13013       loc_result = int_loc_descriptor (i);
13014       add_loc_descr (&loc_result,
13015                      new_loc_descr (DW_OP_stack_value, 0, 0));
13016       return loc_result;
13017     }
13018
13019   loc_result = new_loc_descr (DW_OP_implicit_value,
13020                               size, 0);
13021   loc_result->dw_loc_oprnd2.val_class = dw_val_class_const;
13022   loc_result->dw_loc_oprnd2.v.val_int = i;
13023   return loc_result;
13024 }
13025
13026 /* Return a location descriptor that designates a base+offset location.  */
13027
13028 static dw_loc_descr_ref
13029 based_loc_descr (rtx reg, HOST_WIDE_INT offset,
13030                  enum var_init_status initialized)
13031 {
13032   unsigned int regno;
13033   dw_loc_descr_ref result;
13034   dw_fde_ref fde = current_fde ();
13035
13036   /* We only use "frame base" when we're sure we're talking about the
13037      post-prologue local stack frame.  We do this by *not* running
13038      register elimination until this point, and recognizing the special
13039      argument pointer and soft frame pointer rtx's.  */
13040   if (reg == arg_pointer_rtx || reg == frame_pointer_rtx)
13041     {
13042       rtx elim = eliminate_regs (reg, VOIDmode, NULL_RTX);
13043
13044       if (elim != reg)
13045         {
13046           if (GET_CODE (elim) == PLUS)
13047             {
13048               offset += INTVAL (XEXP (elim, 1));
13049               elim = XEXP (elim, 0);
13050             }
13051           gcc_assert ((SUPPORTS_STACK_ALIGNMENT
13052                        && (elim == hard_frame_pointer_rtx
13053                            || elim == stack_pointer_rtx))
13054                       || elim == (frame_pointer_needed
13055                                   ? hard_frame_pointer_rtx
13056                                   : stack_pointer_rtx));
13057
13058           /* If drap register is used to align stack, use frame
13059              pointer + offset to access stack variables.  If stack
13060              is aligned without drap, use stack pointer + offset to
13061              access stack variables.  */
13062           if (crtl->stack_realign_tried
13063               && reg == frame_pointer_rtx)
13064             {
13065               int base_reg
13066                 = DWARF_FRAME_REGNUM ((fde && fde->drap_reg != INVALID_REGNUM)
13067                                       ? HARD_FRAME_POINTER_REGNUM
13068                                       : STACK_POINTER_REGNUM);
13069               return new_reg_loc_descr (base_reg, offset);
13070             }
13071
13072           offset += frame_pointer_fb_offset;
13073           return new_loc_descr (DW_OP_fbreg, offset, 0);
13074         }
13075     }
13076   else if (!optimize
13077            && fde
13078            && (fde->drap_reg == REGNO (reg)
13079                || fde->vdrap_reg == REGNO (reg)))
13080     {
13081       /* Use cfa+offset to represent the location of arguments passed
13082          on the stack when drap is used to align stack.
13083          Only do this when not optimizing, for optimized code var-tracking
13084          is supposed to track where the arguments live and the register
13085          used as vdrap or drap in some spot might be used for something
13086          else in other part of the routine.  */
13087       return new_loc_descr (DW_OP_fbreg, offset, 0);
13088     }
13089
13090   regno = dbx_reg_number (reg);
13091   if (regno <= 31)
13092     result = new_loc_descr ((enum dwarf_location_atom) (DW_OP_breg0 + regno),
13093                             offset, 0);
13094   else
13095     result = new_loc_descr (DW_OP_bregx, regno, offset);
13096
13097   if (initialized == VAR_INIT_STATUS_UNINITIALIZED)
13098     add_loc_descr (&result, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
13099
13100   return result;
13101 }
13102
13103 /* Return true if this RTL expression describes a base+offset calculation.  */
13104
13105 static inline int
13106 is_based_loc (const_rtx rtl)
13107 {
13108   return (GET_CODE (rtl) == PLUS
13109           && ((REG_P (XEXP (rtl, 0))
13110                && REGNO (XEXP (rtl, 0)) < FIRST_PSEUDO_REGISTER
13111                && CONST_INT_P (XEXP (rtl, 1)))));
13112 }
13113
13114 /* Try to handle TLS MEMs, for which mem_loc_descriptor on XEXP (mem, 0)
13115    failed.  */
13116
13117 static dw_loc_descr_ref
13118 tls_mem_loc_descriptor (rtx mem)
13119 {
13120   tree base;
13121   dw_loc_descr_ref loc_result;
13122
13123   if (MEM_EXPR (mem) == NULL_TREE || MEM_OFFSET (mem) == NULL_RTX)
13124     return NULL;
13125
13126   base = get_base_address (MEM_EXPR (mem));
13127   if (base == NULL
13128       || TREE_CODE (base) != VAR_DECL
13129       || !DECL_THREAD_LOCAL_P (base))
13130     return NULL;
13131
13132   loc_result = loc_descriptor_from_tree (MEM_EXPR (mem), 1);
13133   if (loc_result == NULL)
13134     return NULL;
13135
13136   if (INTVAL (MEM_OFFSET (mem)))
13137     loc_descr_plus_const (&loc_result, INTVAL (MEM_OFFSET (mem)));
13138
13139   return loc_result;
13140 }
13141
13142 /* Output debug info about reason why we failed to expand expression as dwarf
13143    expression.  */
13144
13145 static void
13146 expansion_failed (tree expr, rtx rtl, char const *reason)
13147 {
13148   if (dump_file && (dump_flags & TDF_DETAILS))
13149     {
13150       fprintf (dump_file, "Failed to expand as dwarf: ");
13151       if (expr)
13152         print_generic_expr (dump_file, expr, dump_flags);
13153       if (rtl)
13154         {
13155           fprintf (dump_file, "\n");
13156           print_rtl (dump_file, rtl);
13157         }
13158       fprintf (dump_file, "\nReason: %s\n", reason);
13159     }
13160 }
13161
13162 /* Helper function for const_ok_for_output, called either directly
13163    or via for_each_rtx.  */
13164
13165 static int
13166 const_ok_for_output_1 (rtx *rtlp, void *data ATTRIBUTE_UNUSED)
13167 {
13168   rtx rtl = *rtlp;
13169
13170   if (GET_CODE (rtl) == UNSPEC)
13171     {
13172       /* If delegitimize_address couldn't do anything with the UNSPEC, assume
13173          we can't express it in the debug info.  */
13174 #ifdef ENABLE_CHECKING
13175       inform (current_function_decl
13176               ? DECL_SOURCE_LOCATION (current_function_decl)
13177               : UNKNOWN_LOCATION,
13178               "non-delegitimized UNSPEC %d found in variable location",
13179               XINT (rtl, 1));
13180 #endif
13181       expansion_failed (NULL_TREE, rtl,
13182                         "UNSPEC hasn't been delegitimized.\n");
13183       return 1;
13184     }
13185
13186   if (GET_CODE (rtl) != SYMBOL_REF)
13187     return 0;
13188
13189   if (CONSTANT_POOL_ADDRESS_P (rtl))
13190     {
13191       bool marked;
13192       get_pool_constant_mark (rtl, &marked);
13193       /* If all references to this pool constant were optimized away,
13194          it was not output and thus we can't represent it.  */
13195       if (!marked)
13196         {
13197           expansion_failed (NULL_TREE, rtl,
13198                             "Constant was removed from constant pool.\n");
13199           return 1;
13200         }
13201     }
13202
13203   if (SYMBOL_REF_TLS_MODEL (rtl) != TLS_MODEL_NONE)
13204     return 1;
13205
13206   /* Avoid references to external symbols in debug info, on several targets
13207      the linker might even refuse to link when linking a shared library,
13208      and in many other cases the relocations for .debug_info/.debug_loc are
13209      dropped, so the address becomes zero anyway.  Hidden symbols, guaranteed
13210      to be defined within the same shared library or executable are fine.  */
13211   if (SYMBOL_REF_EXTERNAL_P (rtl))
13212     {
13213       tree decl = SYMBOL_REF_DECL (rtl);
13214
13215       if (decl == NULL || !targetm.binds_local_p (decl))
13216         {
13217           expansion_failed (NULL_TREE, rtl,
13218                             "Symbol not defined in current TU.\n");
13219           return 1;
13220         }
13221     }
13222
13223   return 0;
13224 }
13225
13226 /* Return true if constant RTL can be emitted in DW_OP_addr or
13227    DW_AT_const_value.  TLS SYMBOL_REFs, external SYMBOL_REFs or
13228    non-marked constant pool SYMBOL_REFs can't be referenced in it.  */
13229
13230 static bool
13231 const_ok_for_output (rtx rtl)
13232 {
13233   if (GET_CODE (rtl) == SYMBOL_REF)
13234     return const_ok_for_output_1 (&rtl, NULL) == 0;
13235
13236   if (GET_CODE (rtl) == CONST)
13237     return for_each_rtx (&XEXP (rtl, 0), const_ok_for_output_1, NULL) == 0;
13238
13239   return true;
13240 }
13241
13242 /* The following routine converts the RTL for a variable or parameter
13243    (resident in memory) into an equivalent Dwarf representation of a
13244    mechanism for getting the address of that same variable onto the top of a
13245    hypothetical "address evaluation" stack.
13246
13247    When creating memory location descriptors, we are effectively transforming
13248    the RTL for a memory-resident object into its Dwarf postfix expression
13249    equivalent.  This routine recursively descends an RTL tree, turning
13250    it into Dwarf postfix code as it goes.
13251
13252    MODE is the mode of the memory reference, needed to handle some
13253    autoincrement addressing modes.
13254
13255    CAN_USE_FBREG is a flag whether we can use DW_AT_frame_base in the
13256    location list for RTL.
13257
13258    Return 0 if we can't represent the location.  */
13259
13260 static dw_loc_descr_ref
13261 mem_loc_descriptor (rtx rtl, enum machine_mode mode,
13262                     enum var_init_status initialized)
13263 {
13264   dw_loc_descr_ref mem_loc_result = NULL;
13265   enum dwarf_location_atom op;
13266   dw_loc_descr_ref op0, op1;
13267
13268   /* Note that for a dynamically sized array, the location we will generate a
13269      description of here will be the lowest numbered location which is
13270      actually within the array.  That's *not* necessarily the same as the
13271      zeroth element of the array.  */
13272
13273   rtl = targetm.delegitimize_address (rtl);
13274
13275   switch (GET_CODE (rtl))
13276     {
13277     case POST_INC:
13278     case POST_DEC:
13279     case POST_MODIFY:
13280       return mem_loc_descriptor (XEXP (rtl, 0), mode, initialized);
13281
13282     case SUBREG:
13283       /* The case of a subreg may arise when we have a local (register)
13284          variable or a formal (register) parameter which doesn't quite fill
13285          up an entire register.  For now, just assume that it is
13286          legitimate to make the Dwarf info refer to the whole register which
13287          contains the given subreg.  */
13288       if (!subreg_lowpart_p (rtl))
13289         break;
13290       rtl = SUBREG_REG (rtl);
13291       if (GET_MODE_SIZE (GET_MODE (rtl)) > DWARF2_ADDR_SIZE)
13292         break;
13293       if (GET_MODE_CLASS (GET_MODE (rtl)) != MODE_INT)
13294         break;
13295       mem_loc_result = mem_loc_descriptor (rtl, mode, initialized);
13296       break;
13297
13298     case REG:
13299       /* Whenever a register number forms a part of the description of the
13300          method for calculating the (dynamic) address of a memory resident
13301          object, DWARF rules require the register number be referred to as
13302          a "base register".  This distinction is not based in any way upon
13303          what category of register the hardware believes the given register
13304          belongs to.  This is strictly DWARF terminology we're dealing with
13305          here. Note that in cases where the location of a memory-resident
13306          data object could be expressed as: OP_ADD (OP_BASEREG (basereg),
13307          OP_CONST (0)) the actual DWARF location descriptor that we generate
13308          may just be OP_BASEREG (basereg).  This may look deceptively like
13309          the object in question was allocated to a register (rather than in
13310          memory) so DWARF consumers need to be aware of the subtle
13311          distinction between OP_REG and OP_BASEREG.  */
13312       if (REGNO (rtl) < FIRST_PSEUDO_REGISTER)
13313         mem_loc_result = based_loc_descr (rtl, 0, VAR_INIT_STATUS_INITIALIZED);
13314       else if (stack_realign_drap
13315                && crtl->drap_reg
13316                && crtl->args.internal_arg_pointer == rtl
13317                && REGNO (crtl->drap_reg) < FIRST_PSEUDO_REGISTER)
13318         {
13319           /* If RTL is internal_arg_pointer, which has been optimized
13320              out, use DRAP instead.  */
13321           mem_loc_result = based_loc_descr (crtl->drap_reg, 0,
13322                                             VAR_INIT_STATUS_INITIALIZED);
13323         }
13324       break;
13325
13326     case SIGN_EXTEND:
13327     case ZERO_EXTEND:
13328       op0 = mem_loc_descriptor (XEXP (rtl, 0), mode,
13329                                 VAR_INIT_STATUS_INITIALIZED);
13330       if (op0 == 0)
13331         break;
13332       else
13333         {
13334           int shift = DWARF2_ADDR_SIZE
13335                       - GET_MODE_SIZE (GET_MODE (XEXP (rtl, 0)));
13336           shift *= BITS_PER_UNIT;
13337           if (GET_CODE (rtl) == SIGN_EXTEND)
13338             op = DW_OP_shra;
13339           else
13340             op = DW_OP_shr;
13341           mem_loc_result = op0;
13342           add_loc_descr (&mem_loc_result, int_loc_descriptor (shift));
13343           add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_shl, 0, 0));
13344           add_loc_descr (&mem_loc_result, int_loc_descriptor (shift));
13345           add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0));
13346         }
13347       break;
13348
13349     case MEM:
13350       mem_loc_result = mem_loc_descriptor (XEXP (rtl, 0), GET_MODE (rtl),
13351                                            VAR_INIT_STATUS_INITIALIZED);
13352       if (mem_loc_result == NULL)
13353         mem_loc_result = tls_mem_loc_descriptor (rtl);
13354       if (mem_loc_result != 0)
13355         {
13356           if (GET_MODE_SIZE (GET_MODE (rtl)) > DWARF2_ADDR_SIZE)
13357             {
13358               expansion_failed (NULL_TREE, rtl, "DWARF address size mismatch");
13359               return 0;
13360             }
13361           else if (GET_MODE_SIZE (GET_MODE (rtl)) == DWARF2_ADDR_SIZE)
13362             add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_deref, 0, 0));
13363           else
13364             add_loc_descr (&mem_loc_result,
13365                            new_loc_descr (DW_OP_deref_size,
13366                                           GET_MODE_SIZE (GET_MODE (rtl)), 0));
13367         }
13368       else
13369         {
13370           rtx new_rtl = avoid_constant_pool_reference (rtl);
13371           if (new_rtl != rtl)
13372             return mem_loc_descriptor (new_rtl, mode, initialized);
13373         }
13374       break;
13375
13376     case LO_SUM:
13377          rtl = XEXP (rtl, 1);
13378
13379       /* ... fall through ...  */
13380
13381     case LABEL_REF:
13382       /* Some ports can transform a symbol ref into a label ref, because
13383          the symbol ref is too far away and has to be dumped into a constant
13384          pool.  */
13385     case CONST:
13386     case SYMBOL_REF:
13387       if (GET_CODE (rtl) == SYMBOL_REF
13388           && SYMBOL_REF_TLS_MODEL (rtl) != TLS_MODEL_NONE)
13389         {
13390           dw_loc_descr_ref temp;
13391
13392           /* If this is not defined, we have no way to emit the data.  */
13393           if (!targetm.have_tls || !targetm.asm_out.output_dwarf_dtprel)
13394             break;
13395
13396           temp = new_loc_descr (DW_OP_addr, 0, 0);
13397           temp->dw_loc_oprnd1.val_class = dw_val_class_addr;
13398           temp->dw_loc_oprnd1.v.val_addr = rtl;
13399           temp->dtprel = true;
13400
13401           mem_loc_result = new_loc_descr (DW_OP_GNU_push_tls_address, 0, 0);
13402           add_loc_descr (&mem_loc_result, temp);
13403
13404           break;
13405         }
13406
13407       if (!const_ok_for_output (rtl))
13408         break;
13409
13410     symref:
13411       mem_loc_result = new_loc_descr (DW_OP_addr, 0, 0);
13412       mem_loc_result->dw_loc_oprnd1.val_class = dw_val_class_addr;
13413       mem_loc_result->dw_loc_oprnd1.v.val_addr = rtl;
13414       VEC_safe_push (rtx, gc, used_rtx_array, rtl);
13415       break;
13416
13417     case CONCAT:
13418     case CONCATN:
13419     case VAR_LOCATION:
13420       expansion_failed (NULL_TREE, rtl,
13421                         "CONCAT/CONCATN/VAR_LOCATION is handled only by loc_descriptor");
13422       return 0;
13423
13424     case PRE_MODIFY:
13425       /* Extract the PLUS expression nested inside and fall into
13426          PLUS code below.  */
13427       rtl = XEXP (rtl, 1);
13428       goto plus;
13429
13430     case PRE_INC:
13431     case PRE_DEC:
13432       /* Turn these into a PLUS expression and fall into the PLUS code
13433          below.  */
13434       rtl = gen_rtx_PLUS (word_mode, XEXP (rtl, 0),
13435                           GEN_INT (GET_CODE (rtl) == PRE_INC
13436                                    ? GET_MODE_UNIT_SIZE (mode)
13437                                    : -GET_MODE_UNIT_SIZE (mode)));
13438
13439       /* ... fall through ...  */
13440
13441     case PLUS:
13442     plus:
13443       if (is_based_loc (rtl))
13444         mem_loc_result = based_loc_descr (XEXP (rtl, 0),
13445                                           INTVAL (XEXP (rtl, 1)),
13446                                           VAR_INIT_STATUS_INITIALIZED);
13447       else
13448         {
13449           mem_loc_result = mem_loc_descriptor (XEXP (rtl, 0), mode,
13450                                                VAR_INIT_STATUS_INITIALIZED);
13451           if (mem_loc_result == 0)
13452             break;
13453
13454           if (CONST_INT_P (XEXP (rtl, 1)))
13455             loc_descr_plus_const (&mem_loc_result, INTVAL (XEXP (rtl, 1)));
13456           else
13457             {
13458               dw_loc_descr_ref mem_loc_result2
13459                 = mem_loc_descriptor (XEXP (rtl, 1), mode,
13460                                       VAR_INIT_STATUS_INITIALIZED);
13461               if (mem_loc_result2 == 0)
13462                 break;
13463               add_loc_descr (&mem_loc_result, mem_loc_result2);
13464               add_loc_descr (&mem_loc_result,
13465                              new_loc_descr (DW_OP_plus, 0, 0));
13466             }
13467         }
13468       break;
13469
13470     /* If a pseudo-reg is optimized away, it is possible for it to
13471        be replaced with a MEM containing a multiply or shift.  */
13472     case MINUS:
13473       op = DW_OP_minus;
13474       goto do_binop;
13475
13476     case MULT:
13477       op = DW_OP_mul;
13478       goto do_binop;
13479
13480     case DIV:
13481       op = DW_OP_div;
13482       goto do_binop;
13483
13484     case UMOD:
13485       op = DW_OP_mod;
13486       goto do_binop;
13487
13488     case ASHIFT:
13489       op = DW_OP_shl;
13490       goto do_binop;
13491
13492     case ASHIFTRT:
13493       op = DW_OP_shra;
13494       goto do_binop;
13495
13496     case LSHIFTRT:
13497       op = DW_OP_shr;
13498       goto do_binop;
13499
13500     case AND:
13501       op = DW_OP_and;
13502       goto do_binop;
13503
13504     case IOR:
13505       op = DW_OP_or;
13506       goto do_binop;
13507
13508     case XOR:
13509       op = DW_OP_xor;
13510       goto do_binop;
13511
13512     do_binop:
13513       op0 = mem_loc_descriptor (XEXP (rtl, 0), mode,
13514                                 VAR_INIT_STATUS_INITIALIZED);
13515       op1 = mem_loc_descriptor (XEXP (rtl, 1), mode,
13516                                 VAR_INIT_STATUS_INITIALIZED);
13517
13518       if (op0 == 0 || op1 == 0)
13519         break;
13520
13521       mem_loc_result = op0;
13522       add_loc_descr (&mem_loc_result, op1);
13523       add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0));
13524       break;
13525
13526     case MOD:
13527       op0 = mem_loc_descriptor (XEXP (rtl, 0), mode,
13528                                 VAR_INIT_STATUS_INITIALIZED);
13529       op1 = mem_loc_descriptor (XEXP (rtl, 1), mode,
13530                                 VAR_INIT_STATUS_INITIALIZED);
13531
13532       if (op0 == 0 || op1 == 0)
13533         break;
13534
13535       mem_loc_result = op0;
13536       add_loc_descr (&mem_loc_result, op1);
13537       add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_over, 0, 0));
13538       add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_over, 0, 0));
13539       add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_div, 0, 0));
13540       add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_mul, 0, 0));
13541       add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_minus, 0, 0));
13542       break;
13543
13544     case NOT:
13545       op = DW_OP_not;
13546       goto do_unop;
13547
13548     case ABS:
13549       op = DW_OP_abs;
13550       goto do_unop;
13551
13552     case NEG:
13553       op = DW_OP_neg;
13554       goto do_unop;
13555
13556     do_unop:
13557       op0 = mem_loc_descriptor (XEXP (rtl, 0), mode,
13558                                 VAR_INIT_STATUS_INITIALIZED);
13559
13560       if (op0 == 0)
13561         break;
13562
13563       mem_loc_result = op0;
13564       add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0));
13565       break;
13566
13567     case CONST_INT:
13568       mem_loc_result = int_loc_descriptor (INTVAL (rtl));
13569       break;
13570
13571     case EQ:
13572       op = DW_OP_eq;
13573       goto do_scompare;
13574
13575     case GE:
13576       op = DW_OP_ge;
13577       goto do_scompare;
13578
13579     case GT:
13580       op = DW_OP_gt;
13581       goto do_scompare;
13582
13583     case LE:
13584       op = DW_OP_le;
13585       goto do_scompare;
13586
13587     case LT:
13588       op = DW_OP_lt;
13589       goto do_scompare;
13590
13591     case NE:
13592       op = DW_OP_ne;
13593       goto do_scompare;
13594
13595     do_scompare:
13596       if (GET_MODE_SIZE (GET_MODE (XEXP (rtl, 0))) > DWARF2_ADDR_SIZE
13597           || GET_MODE_SIZE (GET_MODE (XEXP (rtl, 1))) > DWARF2_ADDR_SIZE)
13598         break;
13599       else
13600         {
13601           enum machine_mode op_mode = GET_MODE (XEXP (rtl, 0));
13602
13603           if (op_mode == VOIDmode)
13604             op_mode = GET_MODE (XEXP (rtl, 1));
13605           if (op_mode != VOIDmode && GET_MODE_CLASS (op_mode) != MODE_INT)
13606             break;
13607
13608           op0 = mem_loc_descriptor (XEXP (rtl, 0), mode,
13609                                     VAR_INIT_STATUS_INITIALIZED);
13610           op1 = mem_loc_descriptor (XEXP (rtl, 1), mode,
13611                                     VAR_INIT_STATUS_INITIALIZED);
13612
13613           if (op0 == 0 || op1 == 0)
13614             break;
13615
13616           if (op_mode != VOIDmode
13617               && GET_MODE_SIZE (op_mode) < DWARF2_ADDR_SIZE)
13618             {
13619               int shift = DWARF2_ADDR_SIZE - GET_MODE_SIZE (op_mode);
13620               shift *= BITS_PER_UNIT;
13621               /* For eq/ne, if the operands are known to be zero-extended,
13622                  there is no need to do the fancy shifting up.  */
13623               if (op == DW_OP_eq || op == DW_OP_ne)
13624                 {
13625                   dw_loc_descr_ref last0, last1;
13626                   for (last0 = op0;
13627                        last0->dw_loc_next != NULL;
13628                        last0 = last0->dw_loc_next)
13629                     ;
13630                   for (last1 = op1;
13631                        last1->dw_loc_next != NULL;
13632                        last1 = last1->dw_loc_next)
13633                     ;
13634                   /* deref_size zero extends, and for constants we can check
13635                      whether they are zero extended or not.  */
13636                   if (((last0->dw_loc_opc == DW_OP_deref_size
13637                         && last0->dw_loc_oprnd1.v.val_int
13638                            <= GET_MODE_SIZE (op_mode))
13639                        || (CONST_INT_P (XEXP (rtl, 0))
13640                             && (unsigned HOST_WIDE_INT) INTVAL (XEXP (rtl, 0))
13641                                == (INTVAL (XEXP (rtl, 0))
13642                                    & GET_MODE_MASK (op_mode))))
13643                       && ((last1->dw_loc_opc == DW_OP_deref_size
13644                            && last1->dw_loc_oprnd1.v.val_int
13645                               <= GET_MODE_SIZE (op_mode))
13646                           || (CONST_INT_P (XEXP (rtl, 1))
13647                               && (unsigned HOST_WIDE_INT)
13648                                  INTVAL (XEXP (rtl, 1))
13649                                  == (INTVAL (XEXP (rtl, 1))
13650                                      & GET_MODE_MASK (op_mode)))))
13651                     goto do_compare;
13652                 }
13653               add_loc_descr (&op0, int_loc_descriptor (shift));
13654               add_loc_descr (&op0, new_loc_descr (DW_OP_shl, 0, 0));
13655               if (CONST_INT_P (XEXP (rtl, 1)))
13656                 op1 = int_loc_descriptor (INTVAL (XEXP (rtl, 1)) << shift);
13657               else
13658                 {
13659                   add_loc_descr (&op1, int_loc_descriptor (shift));
13660                   add_loc_descr (&op1, new_loc_descr (DW_OP_shl, 0, 0));
13661                 }
13662             }
13663         }
13664
13665     do_compare:
13666       mem_loc_result = op0;
13667       add_loc_descr (&mem_loc_result, op1);
13668       add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0));
13669       if (STORE_FLAG_VALUE != 1)
13670         {
13671           add_loc_descr (&mem_loc_result,
13672                          int_loc_descriptor (STORE_FLAG_VALUE));
13673           add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_mul, 0, 0));
13674         }
13675       break;
13676
13677     case GEU:
13678       op = DW_OP_ge;
13679       goto do_ucompare;
13680
13681     case GTU:
13682       op = DW_OP_gt;
13683       goto do_ucompare;
13684
13685     case LEU:
13686       op = DW_OP_le;
13687       goto do_ucompare;
13688
13689     case LTU:
13690       op = DW_OP_lt;
13691       goto do_ucompare;
13692
13693     do_ucompare:
13694       if (GET_MODE_SIZE (GET_MODE (XEXP (rtl, 0))) > DWARF2_ADDR_SIZE
13695           || GET_MODE_SIZE (GET_MODE (XEXP (rtl, 1))) > DWARF2_ADDR_SIZE)
13696         break;
13697       else
13698         {
13699           enum machine_mode op_mode = GET_MODE (XEXP (rtl, 0));
13700
13701           if (op_mode == VOIDmode)
13702             op_mode = GET_MODE (XEXP (rtl, 1));
13703           if (op_mode != VOIDmode && GET_MODE_CLASS (op_mode) != MODE_INT)
13704             break;
13705
13706           op0 = mem_loc_descriptor (XEXP (rtl, 0), mode,
13707                                     VAR_INIT_STATUS_INITIALIZED);
13708           op1 = mem_loc_descriptor (XEXP (rtl, 1), mode,
13709                                     VAR_INIT_STATUS_INITIALIZED);
13710
13711           if (op0 == 0 || op1 == 0)
13712             break;
13713
13714           if (op_mode != VOIDmode
13715               && GET_MODE_SIZE (op_mode) < DWARF2_ADDR_SIZE)
13716             {
13717               HOST_WIDE_INT mask = GET_MODE_MASK (op_mode);
13718               dw_loc_descr_ref last0, last1;
13719               for (last0 = op0;
13720                    last0->dw_loc_next != NULL;
13721                    last0 = last0->dw_loc_next)
13722                 ;
13723               for (last1 = op1;
13724                    last1->dw_loc_next != NULL;
13725                    last1 = last1->dw_loc_next)
13726                 ;
13727               if (CONST_INT_P (XEXP (rtl, 0)))
13728                 op0 = int_loc_descriptor (INTVAL (XEXP (rtl, 0)) & mask);
13729               /* deref_size zero extends, so no need to mask it again.  */
13730               else if (last0->dw_loc_opc != DW_OP_deref_size
13731                        || last0->dw_loc_oprnd1.v.val_int
13732                           > GET_MODE_SIZE (op_mode))
13733                 {
13734                   add_loc_descr (&op0, int_loc_descriptor (mask));
13735                   add_loc_descr (&op0, new_loc_descr (DW_OP_and, 0, 0));
13736                 }
13737               if (CONST_INT_P (XEXP (rtl, 1)))
13738                 op1 = int_loc_descriptor (INTVAL (XEXP (rtl, 1)) & mask);
13739               /* deref_size zero extends, so no need to mask it again.  */
13740               else if (last1->dw_loc_opc != DW_OP_deref_size
13741                        || last1->dw_loc_oprnd1.v.val_int
13742                           > GET_MODE_SIZE (op_mode))
13743                 {
13744                   add_loc_descr (&op1, int_loc_descriptor (mask));
13745                   add_loc_descr (&op1, new_loc_descr (DW_OP_and, 0, 0));
13746                 }
13747             }
13748           else
13749             {
13750               HOST_WIDE_INT bias = 1;
13751               bias <<= (DWARF2_ADDR_SIZE * BITS_PER_UNIT - 1);
13752               add_loc_descr (&op0, new_loc_descr (DW_OP_plus_uconst, bias, 0));
13753               if (CONST_INT_P (XEXP (rtl, 1)))
13754                 op1 = int_loc_descriptor ((unsigned HOST_WIDE_INT) bias
13755                                           + INTVAL (XEXP (rtl, 1)));
13756               else
13757                 add_loc_descr (&op1, new_loc_descr (DW_OP_plus_uconst,
13758                                                     bias, 0));
13759             }
13760         }
13761       goto do_compare;
13762
13763     case SMIN:
13764     case SMAX:
13765     case UMIN:
13766     case UMAX:
13767       if (GET_MODE_CLASS (GET_MODE (XEXP (rtl, 0))) != MODE_INT
13768           || GET_MODE_SIZE (GET_MODE (XEXP (rtl, 0))) > DWARF2_ADDR_SIZE
13769           || GET_MODE (XEXP (rtl, 0)) != GET_MODE (XEXP (rtl, 1)))
13770         break;
13771
13772       op0 = mem_loc_descriptor (XEXP (rtl, 0), mode,
13773                                 VAR_INIT_STATUS_INITIALIZED);
13774       op1 = mem_loc_descriptor (XEXP (rtl, 1), mode,
13775                                 VAR_INIT_STATUS_INITIALIZED);
13776
13777       if (op0 == 0 || op1 == 0)
13778         break;
13779
13780       add_loc_descr (&op0, new_loc_descr (DW_OP_dup, 0, 0));
13781       add_loc_descr (&op1, new_loc_descr (DW_OP_swap, 0, 0));
13782       add_loc_descr (&op1, new_loc_descr (DW_OP_over, 0, 0));
13783       if (GET_CODE (rtl) == UMIN || GET_CODE (rtl) == UMAX)
13784         {
13785           if (GET_MODE_SIZE (GET_MODE (XEXP (rtl, 0))) < DWARF2_ADDR_SIZE)
13786             {
13787               HOST_WIDE_INT mask = GET_MODE_MASK (GET_MODE (XEXP (rtl, 0)));
13788               add_loc_descr (&op0, int_loc_descriptor (mask));
13789               add_loc_descr (&op0, new_loc_descr (DW_OP_and, 0, 0));
13790               add_loc_descr (&op1, int_loc_descriptor (mask));
13791               add_loc_descr (&op1, new_loc_descr (DW_OP_and, 0, 0));
13792             }
13793           else
13794             {
13795               HOST_WIDE_INT bias = 1;
13796               bias <<= (DWARF2_ADDR_SIZE * BITS_PER_UNIT - 1);
13797               add_loc_descr (&op0, new_loc_descr (DW_OP_plus_uconst, bias, 0));
13798               add_loc_descr (&op1, new_loc_descr (DW_OP_plus_uconst, bias, 0));
13799             }
13800         }
13801       else if (GET_MODE_SIZE (GET_MODE (XEXP (rtl, 0))) < DWARF2_ADDR_SIZE)
13802         {
13803           int shift = DWARF2_ADDR_SIZE
13804                       - GET_MODE_SIZE (GET_MODE (XEXP (rtl, 0)));
13805           shift *= BITS_PER_UNIT;
13806           add_loc_descr (&op0, int_loc_descriptor (shift));
13807           add_loc_descr (&op0, new_loc_descr (DW_OP_shl, 0, 0));
13808           add_loc_descr (&op1, int_loc_descriptor (shift));
13809           add_loc_descr (&op1, new_loc_descr (DW_OP_shl, 0, 0));
13810         }
13811
13812       if (GET_CODE (rtl) == SMIN || GET_CODE (rtl) == UMIN)
13813         op = DW_OP_lt;
13814       else
13815         op = DW_OP_gt;
13816       mem_loc_result = op0;
13817       add_loc_descr (&mem_loc_result, op1);
13818       add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0));
13819       {
13820         dw_loc_descr_ref bra_node, drop_node;
13821
13822         bra_node = new_loc_descr (DW_OP_bra, 0, 0);
13823         add_loc_descr (&mem_loc_result, bra_node);
13824         add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_swap, 0, 0));
13825         drop_node = new_loc_descr (DW_OP_drop, 0, 0);
13826         add_loc_descr (&mem_loc_result, drop_node);
13827         bra_node->dw_loc_oprnd1.val_class = dw_val_class_loc;
13828         bra_node->dw_loc_oprnd1.v.val_loc = drop_node;
13829       }
13830       break;
13831
13832     case ZERO_EXTRACT:
13833     case SIGN_EXTRACT:
13834       if (CONST_INT_P (XEXP (rtl, 1))
13835           && CONST_INT_P (XEXP (rtl, 2))
13836           && ((unsigned) INTVAL (XEXP (rtl, 1))
13837               + (unsigned) INTVAL (XEXP (rtl, 2))
13838               <= GET_MODE_BITSIZE (GET_MODE (rtl)))
13839           && GET_MODE_BITSIZE (GET_MODE (rtl)) <= DWARF2_ADDR_SIZE
13840           && GET_MODE_BITSIZE (GET_MODE (XEXP (rtl, 0))) <= DWARF2_ADDR_SIZE)
13841         {
13842           int shift, size;
13843           op0 = mem_loc_descriptor (XEXP (rtl, 0), mode,
13844                                     VAR_INIT_STATUS_INITIALIZED);
13845           if (op0 == 0)
13846             break;
13847           if (GET_CODE (rtl) == SIGN_EXTRACT)
13848             op = DW_OP_shra;
13849           else
13850             op = DW_OP_shr;
13851           mem_loc_result = op0;
13852           size = INTVAL (XEXP (rtl, 1));
13853           shift = INTVAL (XEXP (rtl, 2));
13854           if (BITS_BIG_ENDIAN)
13855             shift = GET_MODE_BITSIZE (GET_MODE (XEXP (rtl, 0)))
13856                     - shift - size;
13857           if (shift + size != (int) DWARF2_ADDR_SIZE)
13858             {
13859               add_loc_descr (&mem_loc_result,
13860                              int_loc_descriptor (DWARF2_ADDR_SIZE
13861                                                  - shift - size));
13862               add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_shl, 0, 0));
13863             }
13864           if (size != (int) DWARF2_ADDR_SIZE)
13865             {
13866               add_loc_descr (&mem_loc_result,
13867                              int_loc_descriptor (DWARF2_ADDR_SIZE - size));
13868               add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0));
13869             }
13870         }
13871       break;
13872
13873     case COMPARE:
13874     case IF_THEN_ELSE:
13875     case ROTATE:
13876     case ROTATERT:
13877     case TRUNCATE:
13878       /* In theory, we could implement the above.  */
13879       /* DWARF cannot represent the unsigned compare operations
13880          natively.  */
13881     case SS_MULT:
13882     case US_MULT:
13883     case SS_DIV:
13884     case US_DIV:
13885     case SS_PLUS:
13886     case US_PLUS:
13887     case SS_MINUS:
13888     case US_MINUS:
13889     case SS_NEG:
13890     case US_NEG:
13891     case SS_ABS:
13892     case SS_ASHIFT:
13893     case US_ASHIFT:
13894     case SS_TRUNCATE:
13895     case US_TRUNCATE:
13896     case UDIV:
13897     case UNORDERED:
13898     case ORDERED:
13899     case UNEQ:
13900     case UNGE:
13901     case UNGT:
13902     case UNLE:
13903     case UNLT:
13904     case LTGT:
13905     case FLOAT_EXTEND:
13906     case FLOAT_TRUNCATE:
13907     case FLOAT:
13908     case UNSIGNED_FLOAT:
13909     case FIX:
13910     case UNSIGNED_FIX:
13911     case FRACT_CONVERT:
13912     case UNSIGNED_FRACT_CONVERT:
13913     case SAT_FRACT:
13914     case UNSIGNED_SAT_FRACT:
13915     case SQRT:
13916     case BSWAP:
13917     case FFS:
13918     case CLZ:
13919     case CTZ:
13920     case POPCOUNT:
13921     case PARITY:
13922     case ASM_OPERANDS:
13923     case VEC_MERGE:
13924     case VEC_SELECT:
13925     case VEC_CONCAT:
13926     case VEC_DUPLICATE:
13927     case UNSPEC:
13928     case HIGH:
13929       /* If delegitimize_address couldn't do anything with the UNSPEC, we
13930          can't express it in the debug info.  This can happen e.g. with some
13931          TLS UNSPECs.  */
13932       break;
13933
13934     case CONST_STRING:
13935       resolve_one_addr (&rtl, NULL);
13936       goto symref;
13937
13938     default:
13939 #ifdef ENABLE_CHECKING
13940       print_rtl (stderr, rtl);
13941       gcc_unreachable ();
13942 #else
13943       break;
13944 #endif
13945     }
13946
13947   if (mem_loc_result && initialized == VAR_INIT_STATUS_UNINITIALIZED)
13948     add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
13949
13950   return mem_loc_result;
13951 }
13952
13953 /* Return a descriptor that describes the concatenation of two locations.
13954    This is typically a complex variable.  */
13955
13956 static dw_loc_descr_ref
13957 concat_loc_descriptor (rtx x0, rtx x1, enum var_init_status initialized)
13958 {
13959   dw_loc_descr_ref cc_loc_result = NULL;
13960   dw_loc_descr_ref x0_ref
13961     = loc_descriptor (x0, VOIDmode, VAR_INIT_STATUS_INITIALIZED);
13962   dw_loc_descr_ref x1_ref
13963     = loc_descriptor (x1, VOIDmode, VAR_INIT_STATUS_INITIALIZED);
13964
13965   if (x0_ref == 0 || x1_ref == 0)
13966     return 0;
13967
13968   cc_loc_result = x0_ref;
13969   add_loc_descr_op_piece (&cc_loc_result, GET_MODE_SIZE (GET_MODE (x0)));
13970
13971   add_loc_descr (&cc_loc_result, x1_ref);
13972   add_loc_descr_op_piece (&cc_loc_result, GET_MODE_SIZE (GET_MODE (x1)));
13973
13974   if (initialized == VAR_INIT_STATUS_UNINITIALIZED)
13975     add_loc_descr (&cc_loc_result, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
13976
13977   return cc_loc_result;
13978 }
13979
13980 /* Return a descriptor that describes the concatenation of N
13981    locations.  */
13982
13983 static dw_loc_descr_ref
13984 concatn_loc_descriptor (rtx concatn, enum var_init_status initialized)
13985 {
13986   unsigned int i;
13987   dw_loc_descr_ref cc_loc_result = NULL;
13988   unsigned int n = XVECLEN (concatn, 0);
13989
13990   for (i = 0; i < n; ++i)
13991     {
13992       dw_loc_descr_ref ref;
13993       rtx x = XVECEXP (concatn, 0, i);
13994
13995       ref = loc_descriptor (x, VOIDmode, VAR_INIT_STATUS_INITIALIZED);
13996       if (ref == NULL)
13997         return NULL;
13998
13999       add_loc_descr (&cc_loc_result, ref);
14000       add_loc_descr_op_piece (&cc_loc_result, GET_MODE_SIZE (GET_MODE (x)));
14001     }
14002
14003   if (cc_loc_result && initialized == VAR_INIT_STATUS_UNINITIALIZED)
14004     add_loc_descr (&cc_loc_result, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
14005
14006   return cc_loc_result;
14007 }
14008
14009 /* Output a proper Dwarf location descriptor for a variable or parameter
14010    which is either allocated in a register or in a memory location.  For a
14011    register, we just generate an OP_REG and the register number.  For a
14012    memory location we provide a Dwarf postfix expression describing how to
14013    generate the (dynamic) address of the object onto the address stack.
14014
14015    MODE is mode of the decl if this loc_descriptor is going to be used in
14016    .debug_loc section where DW_OP_stack_value and DW_OP_implicit_value are
14017    allowed, VOIDmode otherwise.
14018
14019    If we don't know how to describe it, return 0.  */
14020
14021 static dw_loc_descr_ref
14022 loc_descriptor (rtx rtl, enum machine_mode mode,
14023                 enum var_init_status initialized)
14024 {
14025   dw_loc_descr_ref loc_result = NULL;
14026
14027   switch (GET_CODE (rtl))
14028     {
14029     case SUBREG:
14030       /* The case of a subreg may arise when we have a local (register)
14031          variable or a formal (register) parameter which doesn't quite fill
14032          up an entire register.  For now, just assume that it is
14033          legitimate to make the Dwarf info refer to the whole register which
14034          contains the given subreg.  */
14035       loc_result = loc_descriptor (SUBREG_REG (rtl), mode, initialized);
14036       break;
14037
14038     case REG:
14039       loc_result = reg_loc_descriptor (rtl, initialized);
14040       break;
14041
14042     case SIGN_EXTEND:
14043     case ZERO_EXTEND:
14044       loc_result = loc_descriptor (XEXP (rtl, 0), mode, initialized);
14045       break;
14046
14047     case MEM:
14048       loc_result = mem_loc_descriptor (XEXP (rtl, 0), GET_MODE (rtl),
14049                                        initialized);
14050       if (loc_result == NULL)
14051         loc_result = tls_mem_loc_descriptor (rtl);
14052       if (loc_result == NULL)
14053         {
14054           rtx new_rtl = avoid_constant_pool_reference (rtl);
14055           if (new_rtl != rtl)
14056             loc_result = loc_descriptor (new_rtl, mode, initialized);
14057         }
14058       break;
14059
14060     case CONCAT:
14061       loc_result = concat_loc_descriptor (XEXP (rtl, 0), XEXP (rtl, 1),
14062                                           initialized);
14063       break;
14064
14065     case CONCATN:
14066       loc_result = concatn_loc_descriptor (rtl, initialized);
14067       break;
14068
14069     case VAR_LOCATION:
14070       /* Single part.  */
14071       if (GET_CODE (PAT_VAR_LOCATION_LOC (rtl)) != PARALLEL)
14072         {
14073           rtx loc = PAT_VAR_LOCATION_LOC (rtl);
14074           if (GET_CODE (loc) == EXPR_LIST)
14075             loc = XEXP (loc, 0);
14076           loc_result = loc_descriptor (loc, mode, initialized);
14077           break;
14078         }
14079
14080       rtl = XEXP (rtl, 1);
14081       /* FALLTHRU */
14082
14083     case PARALLEL:
14084       {
14085         rtvec par_elems = XVEC (rtl, 0);
14086         int num_elem = GET_NUM_ELEM (par_elems);
14087         enum machine_mode mode;
14088         int i;
14089
14090         /* Create the first one, so we have something to add to.  */
14091         loc_result = loc_descriptor (XEXP (RTVEC_ELT (par_elems, 0), 0),
14092                                      VOIDmode, initialized);
14093         if (loc_result == NULL)
14094           return NULL;
14095         mode = GET_MODE (XEXP (RTVEC_ELT (par_elems, 0), 0));
14096         add_loc_descr_op_piece (&loc_result, GET_MODE_SIZE (mode));
14097         for (i = 1; i < num_elem; i++)
14098           {
14099             dw_loc_descr_ref temp;
14100
14101             temp = loc_descriptor (XEXP (RTVEC_ELT (par_elems, i), 0),
14102                                    VOIDmode, initialized);
14103             if (temp == NULL)
14104               return NULL;
14105             add_loc_descr (&loc_result, temp);
14106             mode = GET_MODE (XEXP (RTVEC_ELT (par_elems, i), 0));
14107             add_loc_descr_op_piece (&loc_result, GET_MODE_SIZE (mode));
14108           }
14109       }
14110       break;
14111
14112     case CONST_INT:
14113       if (mode != VOIDmode && mode != BLKmode)
14114         loc_result = address_of_int_loc_descriptor (GET_MODE_SIZE (mode),
14115                                                     INTVAL (rtl));
14116       break;
14117
14118     case CONST_DOUBLE:
14119       if (mode == VOIDmode)
14120         mode = GET_MODE (rtl);
14121
14122       if (mode != VOIDmode && (dwarf_version >= 4 || !dwarf_strict))
14123         {
14124           gcc_assert (mode == GET_MODE (rtl) || VOIDmode == GET_MODE (rtl));
14125
14126           /* Note that a CONST_DOUBLE rtx could represent either an integer
14127              or a floating-point constant.  A CONST_DOUBLE is used whenever
14128              the constant requires more than one word in order to be
14129              adequately represented.  We output CONST_DOUBLEs as blocks.  */
14130           loc_result = new_loc_descr (DW_OP_implicit_value,
14131                                       GET_MODE_SIZE (mode), 0);
14132           if (SCALAR_FLOAT_MODE_P (mode))
14133             {
14134               unsigned int length = GET_MODE_SIZE (mode);
14135               unsigned char *array
14136                   = (unsigned char*) ggc_alloc_atomic (length);
14137
14138               insert_float (rtl, array);
14139               loc_result->dw_loc_oprnd2.val_class = dw_val_class_vec;
14140               loc_result->dw_loc_oprnd2.v.val_vec.length = length / 4;
14141               loc_result->dw_loc_oprnd2.v.val_vec.elt_size = 4;
14142               loc_result->dw_loc_oprnd2.v.val_vec.array = array;
14143             }
14144           else
14145             {
14146               loc_result->dw_loc_oprnd2.val_class = dw_val_class_const_double;
14147               loc_result->dw_loc_oprnd2.v.val_double
14148                 = rtx_to_double_int (rtl);
14149             }
14150         }
14151       break;
14152
14153     case CONST_VECTOR:
14154       if (mode == VOIDmode)
14155         mode = GET_MODE (rtl);
14156
14157       if (mode != VOIDmode && (dwarf_version >= 4 || !dwarf_strict))
14158         {
14159           unsigned int elt_size = GET_MODE_UNIT_SIZE (GET_MODE (rtl));
14160           unsigned int length = CONST_VECTOR_NUNITS (rtl);
14161           unsigned char *array = (unsigned char *)
14162             ggc_alloc_atomic (length * elt_size);
14163           unsigned int i;
14164           unsigned char *p;
14165
14166           gcc_assert (mode == GET_MODE (rtl) || VOIDmode == GET_MODE (rtl));
14167           switch (GET_MODE_CLASS (mode))
14168             {
14169             case MODE_VECTOR_INT:
14170               for (i = 0, p = array; i < length; i++, p += elt_size)
14171                 {
14172                   rtx elt = CONST_VECTOR_ELT (rtl, i);
14173                   double_int val = rtx_to_double_int (elt);
14174
14175                   if (elt_size <= sizeof (HOST_WIDE_INT))
14176                     insert_int (double_int_to_shwi (val), elt_size, p);
14177                   else
14178                     {
14179                       gcc_assert (elt_size == 2 * sizeof (HOST_WIDE_INT));
14180                       insert_double (val, p);
14181                     }
14182                 }
14183               break;
14184
14185             case MODE_VECTOR_FLOAT:
14186               for (i = 0, p = array; i < length; i++, p += elt_size)
14187                 {
14188                   rtx elt = CONST_VECTOR_ELT (rtl, i);
14189                   insert_float (elt, p);
14190                 }
14191               break;
14192
14193             default:
14194               gcc_unreachable ();
14195             }
14196
14197           loc_result = new_loc_descr (DW_OP_implicit_value,
14198                                       length * elt_size, 0);
14199           loc_result->dw_loc_oprnd2.val_class = dw_val_class_vec;
14200           loc_result->dw_loc_oprnd2.v.val_vec.length = length;
14201           loc_result->dw_loc_oprnd2.v.val_vec.elt_size = elt_size;
14202           loc_result->dw_loc_oprnd2.v.val_vec.array = array;
14203         }
14204       break;
14205
14206     case CONST:
14207       if (mode == VOIDmode
14208           || GET_CODE (XEXP (rtl, 0)) == CONST_INT
14209           || GET_CODE (XEXP (rtl, 0)) == CONST_DOUBLE
14210           || GET_CODE (XEXP (rtl, 0)) == CONST_VECTOR)
14211         {
14212           loc_result = loc_descriptor (XEXP (rtl, 0), mode, initialized);
14213           break;
14214         }
14215       /* FALLTHROUGH */
14216     case SYMBOL_REF:
14217       if (!const_ok_for_output (rtl))
14218         break;
14219     case LABEL_REF:
14220       if (mode != VOIDmode && GET_MODE_SIZE (mode) == DWARF2_ADDR_SIZE
14221           && (dwarf_version >= 4 || !dwarf_strict))
14222         {
14223           loc_result = new_loc_descr (DW_OP_addr, 0, 0);
14224           loc_result->dw_loc_oprnd1.val_class = dw_val_class_addr;
14225           loc_result->dw_loc_oprnd1.v.val_addr = rtl;
14226           add_loc_descr (&loc_result, new_loc_descr (DW_OP_stack_value, 0, 0));
14227           VEC_safe_push (rtx, gc, used_rtx_array, rtl);
14228         }
14229       break;
14230
14231     default:
14232       if (GET_MODE_CLASS (mode) == MODE_INT && GET_MODE (rtl) == mode
14233           && GET_MODE_SIZE (GET_MODE (rtl)) <= DWARF2_ADDR_SIZE
14234           && (dwarf_version >= 4 || !dwarf_strict))
14235         {
14236           /* Value expression.  */
14237           loc_result = mem_loc_descriptor (rtl, VOIDmode, initialized);
14238           if (loc_result)
14239             add_loc_descr (&loc_result,
14240                            new_loc_descr (DW_OP_stack_value, 0, 0));
14241         }
14242       break;
14243     }
14244
14245   return loc_result;
14246 }
14247
14248 /* We need to figure out what section we should use as the base for the
14249    address ranges where a given location is valid.
14250    1. If this particular DECL has a section associated with it, use that.
14251    2. If this function has a section associated with it, use that.
14252    3. Otherwise, use the text section.
14253    XXX: If you split a variable across multiple sections, we won't notice.  */
14254
14255 static const char *
14256 secname_for_decl (const_tree decl)
14257 {
14258   const char *secname;
14259
14260   if (VAR_OR_FUNCTION_DECL_P (decl) && DECL_SECTION_NAME (decl))
14261     {
14262       tree sectree = DECL_SECTION_NAME (decl);
14263       secname = TREE_STRING_POINTER (sectree);
14264     }
14265   else if (current_function_decl && DECL_SECTION_NAME (current_function_decl))
14266     {
14267       tree sectree = DECL_SECTION_NAME (current_function_decl);
14268       secname = TREE_STRING_POINTER (sectree);
14269     }
14270   else if (cfun && in_cold_section_p)
14271     secname = crtl->subsections.cold_section_label;
14272   else
14273     secname = text_section_label;
14274
14275   return secname;
14276 }
14277
14278 /* Return true when DECL_BY_REFERENCE is defined and set for DECL.  */
14279
14280 static bool
14281 decl_by_reference_p (tree decl)
14282 {
14283   return ((TREE_CODE (decl) == PARM_DECL || TREE_CODE (decl) == RESULT_DECL
14284            || TREE_CODE (decl) == VAR_DECL)
14285           && DECL_BY_REFERENCE (decl));
14286 }
14287
14288 /* Helper function for dw_loc_list.  Compute proper Dwarf location descriptor
14289    for VARLOC.  */
14290
14291 static dw_loc_descr_ref
14292 dw_loc_list_1 (tree loc, rtx varloc, int want_address,
14293                enum var_init_status initialized)
14294 {
14295   int have_address = 0;
14296   dw_loc_descr_ref descr;
14297   enum machine_mode mode;
14298
14299   if (want_address != 2)
14300     {
14301       gcc_assert (GET_CODE (varloc) == VAR_LOCATION);
14302       /* Single part.  */
14303       if (GET_CODE (PAT_VAR_LOCATION_LOC (varloc)) != PARALLEL)
14304         {
14305           varloc = PAT_VAR_LOCATION_LOC (varloc);
14306           if (GET_CODE (varloc) == EXPR_LIST)
14307             varloc = XEXP (varloc, 0);
14308           mode = GET_MODE (varloc);
14309           if (MEM_P (varloc))
14310             {
14311               rtx addr = XEXP (varloc, 0);
14312               descr = mem_loc_descriptor (addr, mode, initialized);
14313               if (descr)
14314                 have_address = 1;
14315               else
14316                 {
14317                   rtx x = avoid_constant_pool_reference (varloc);
14318                   if (x != varloc)
14319                     descr = mem_loc_descriptor (x, mode, initialized);
14320                 }
14321             }
14322           else
14323             descr = mem_loc_descriptor (varloc, mode, initialized);
14324         }
14325       else
14326         return 0;
14327     }
14328   else
14329     {
14330       if (GET_CODE (varloc) == VAR_LOCATION)
14331         mode = DECL_MODE (PAT_VAR_LOCATION_DECL (varloc));
14332       else
14333         mode = DECL_MODE (loc);
14334       descr = loc_descriptor (varloc, mode, initialized);
14335       have_address = 1;
14336     }
14337
14338   if (!descr)
14339     return 0;
14340
14341   if (want_address == 2 && !have_address
14342       && (dwarf_version >= 4 || !dwarf_strict))
14343     {
14344       if (int_size_in_bytes (TREE_TYPE (loc)) > DWARF2_ADDR_SIZE)
14345         {
14346           expansion_failed (loc, NULL_RTX,
14347                             "DWARF address size mismatch");
14348           return 0;
14349         }
14350       add_loc_descr (&descr, new_loc_descr (DW_OP_stack_value, 0, 0));
14351       have_address = 1;
14352     }
14353   /* Show if we can't fill the request for an address.  */
14354   if (want_address && !have_address)
14355     {
14356       expansion_failed (loc, NULL_RTX,
14357                         "Want address and only have value");
14358       return 0;
14359     }
14360
14361   /* If we've got an address and don't want one, dereference.  */
14362   if (!want_address && have_address)
14363     {
14364       HOST_WIDE_INT size = int_size_in_bytes (TREE_TYPE (loc));
14365       enum dwarf_location_atom op;
14366
14367       if (size > DWARF2_ADDR_SIZE || size == -1)
14368         {
14369           expansion_failed (loc, NULL_RTX,
14370                             "DWARF address size mismatch");
14371           return 0;
14372         }
14373       else if (size == DWARF2_ADDR_SIZE)
14374         op = DW_OP_deref;
14375       else
14376         op = DW_OP_deref_size;
14377
14378       add_loc_descr (&descr, new_loc_descr (op, size, 0));
14379     }
14380
14381   return descr;
14382 }
14383
14384 /* Create a DW_OP_piece or DW_OP_bit_piece for bitsize, or return NULL
14385    if it is not possible.  */
14386
14387 static dw_loc_descr_ref
14388 new_loc_descr_op_bit_piece (HOST_WIDE_INT bitsize, HOST_WIDE_INT offset)
14389 {
14390   if ((bitsize % BITS_PER_UNIT) == 0 && offset == 0)
14391     return new_loc_descr (DW_OP_piece, bitsize / BITS_PER_UNIT, 0);
14392   else if (dwarf_version >= 3 || !dwarf_strict)
14393     return new_loc_descr (DW_OP_bit_piece, bitsize, offset);
14394   else
14395     return NULL;
14396 }
14397
14398 /* Helper function for dw_loc_list.  Compute proper Dwarf location descriptor
14399    for VAR_LOC_NOTE for variable DECL that has been optimized by SRA.  */
14400
14401 static dw_loc_descr_ref
14402 dw_sra_loc_expr (tree decl, rtx loc)
14403 {
14404   rtx p;
14405   unsigned int padsize = 0;
14406   dw_loc_descr_ref descr, *descr_tail;
14407   unsigned HOST_WIDE_INT decl_size;
14408   rtx varloc;
14409   enum var_init_status initialized;
14410
14411   if (DECL_SIZE (decl) == NULL
14412       || !host_integerp (DECL_SIZE (decl), 1))
14413     return NULL;
14414
14415   decl_size = tree_low_cst (DECL_SIZE (decl), 1);
14416   descr = NULL;
14417   descr_tail = &descr;
14418
14419   for (p = loc; p; p = XEXP (p, 1))
14420     {
14421       unsigned int bitsize = decl_piece_bitsize (p);
14422       rtx loc_note = *decl_piece_varloc_ptr (p);
14423       dw_loc_descr_ref cur_descr;
14424       dw_loc_descr_ref *tail, last = NULL;
14425       unsigned int opsize = 0;
14426
14427       if (loc_note == NULL_RTX
14428           || NOTE_VAR_LOCATION_LOC (loc_note) == NULL_RTX)
14429         {
14430           padsize += bitsize;
14431           continue;
14432         }
14433       initialized = NOTE_VAR_LOCATION_STATUS (loc_note);
14434       varloc = NOTE_VAR_LOCATION (loc_note);
14435       cur_descr = dw_loc_list_1 (decl, varloc, 2, initialized);
14436       if (cur_descr == NULL)
14437         {
14438           padsize += bitsize;
14439           continue;
14440         }
14441
14442       /* Check that cur_descr either doesn't use
14443          DW_OP_*piece operations, or their sum is equal
14444          to bitsize.  Otherwise we can't embed it.  */
14445       for (tail = &cur_descr; *tail != NULL;
14446            tail = &(*tail)->dw_loc_next)
14447         if ((*tail)->dw_loc_opc == DW_OP_piece)
14448           {
14449             opsize += (*tail)->dw_loc_oprnd1.v.val_unsigned
14450                       * BITS_PER_UNIT;
14451             last = *tail;
14452           }
14453         else if ((*tail)->dw_loc_opc == DW_OP_bit_piece)
14454           {
14455             opsize += (*tail)->dw_loc_oprnd1.v.val_unsigned;
14456             last = *tail;
14457           }
14458
14459       if (last != NULL && opsize != bitsize)
14460         {
14461           padsize += bitsize;
14462           continue;
14463         }
14464
14465       /* If there is a hole, add DW_OP_*piece after empty DWARF
14466          expression, which means that those bits are optimized out.  */
14467       if (padsize)
14468         {
14469           if (padsize > decl_size)
14470             return NULL;
14471           decl_size -= padsize;
14472           *descr_tail = new_loc_descr_op_bit_piece (padsize, 0);
14473           if (*descr_tail == NULL)
14474             return NULL;
14475           descr_tail = &(*descr_tail)->dw_loc_next;
14476           padsize = 0;
14477         }
14478       *descr_tail = cur_descr;
14479       descr_tail = tail;
14480       if (bitsize > decl_size)
14481         return NULL;
14482       decl_size -= bitsize;
14483       if (last == NULL)
14484         {
14485           HOST_WIDE_INT offset = 0;
14486           if (GET_CODE (varloc) == VAR_LOCATION
14487               && GET_CODE (PAT_VAR_LOCATION_LOC (varloc)) != PARALLEL)
14488             {
14489               varloc = PAT_VAR_LOCATION_LOC (varloc);
14490               if (GET_CODE (varloc) == EXPR_LIST)
14491                 varloc = XEXP (varloc, 0);
14492             }
14493           do 
14494             {
14495               if (GET_CODE (varloc) == CONST
14496                   || GET_CODE (varloc) == SIGN_EXTEND
14497                   || GET_CODE (varloc) == ZERO_EXTEND)
14498                 varloc = XEXP (varloc, 0);
14499               else if (GET_CODE (varloc) == SUBREG)
14500                 varloc = SUBREG_REG (varloc);
14501               else
14502                 break;
14503             }
14504           while (1);
14505           /* DW_OP_bit_size offset should be zero for register
14506              or implicit location descriptions and empty location
14507              descriptions, but for memory addresses needs big endian
14508              adjustment.  */
14509           if (MEM_P (varloc))
14510             {
14511               unsigned HOST_WIDE_INT memsize
14512                 = INTVAL (MEM_SIZE (varloc)) * BITS_PER_UNIT;
14513               if (memsize != bitsize)
14514                 {
14515                   if (BYTES_BIG_ENDIAN != WORDS_BIG_ENDIAN
14516                       && (memsize > BITS_PER_WORD || bitsize > BITS_PER_WORD))
14517                     return NULL;
14518                   if (memsize < bitsize)
14519                     return NULL;
14520                   if (BITS_BIG_ENDIAN)
14521                     offset = memsize - bitsize;
14522                 }
14523             }
14524
14525           *descr_tail = new_loc_descr_op_bit_piece (bitsize, offset);
14526           if (*descr_tail == NULL)
14527             return NULL;
14528           descr_tail = &(*descr_tail)->dw_loc_next;
14529         }
14530     }
14531
14532   /* If there were any non-empty expressions, add padding till the end of
14533      the decl.  */
14534   if (descr != NULL && decl_size != 0)
14535     {
14536       *descr_tail = new_loc_descr_op_bit_piece (decl_size, 0);
14537       if (*descr_tail == NULL)
14538         return NULL;
14539     }
14540   return descr;
14541 }
14542
14543 /* Return the dwarf representation of the location list LOC_LIST of
14544    DECL.  WANT_ADDRESS has the same meaning as in loc_list_from_tree
14545    function.  */
14546
14547 static dw_loc_list_ref
14548 dw_loc_list (var_loc_list *loc_list, tree decl, int want_address)
14549 {
14550   const char *endname, *secname;
14551   rtx varloc;
14552   enum var_init_status initialized;
14553   struct var_loc_node *node;
14554   dw_loc_descr_ref descr;
14555   char label_id[MAX_ARTIFICIAL_LABEL_BYTES];
14556   dw_loc_list_ref list = NULL;
14557   dw_loc_list_ref *listp = &list;
14558
14559   /* Now that we know what section we are using for a base,
14560      actually construct the list of locations.
14561      The first location information is what is passed to the
14562      function that creates the location list, and the remaining
14563      locations just get added on to that list.
14564      Note that we only know the start address for a location
14565      (IE location changes), so to build the range, we use
14566      the range [current location start, next location start].
14567      This means we have to special case the last node, and generate
14568      a range of [last location start, end of function label].  */
14569
14570   secname = secname_for_decl (decl);
14571
14572   for (node = loc_list->first; node; node = node->next)
14573     if (GET_CODE (node->loc) == EXPR_LIST
14574         || NOTE_VAR_LOCATION_LOC (node->loc) != NULL_RTX)
14575       {
14576         if (GET_CODE (node->loc) == EXPR_LIST)
14577           {
14578             /* This requires DW_OP_{,bit_}piece, which is not usable
14579                inside DWARF expressions.  */
14580             if (want_address != 2)
14581               continue;
14582             descr = dw_sra_loc_expr (decl, node->loc);
14583             if (descr == NULL)
14584               continue;
14585           }
14586         else
14587           {
14588             initialized = NOTE_VAR_LOCATION_STATUS (node->loc);
14589             varloc = NOTE_VAR_LOCATION (node->loc);
14590             descr = dw_loc_list_1 (decl, varloc, want_address, initialized);
14591           }
14592         if (descr)
14593           {
14594             /* The variable has a location between NODE->LABEL and
14595                NODE->NEXT->LABEL.  */
14596             if (node->next)
14597               endname = node->next->label;
14598             /* If the variable has a location at the last label
14599                it keeps its location until the end of function.  */
14600             else if (!current_function_decl)
14601               endname = text_end_label;
14602             else
14603               {
14604                 ASM_GENERATE_INTERNAL_LABEL (label_id, FUNC_END_LABEL,
14605                                              current_function_funcdef_no);
14606                 endname = ggc_strdup (label_id);
14607               }
14608
14609             *listp = new_loc_list (descr, node->label, endname, secname);
14610             listp = &(*listp)->dw_loc_next;
14611           }
14612       }
14613
14614   /* Try to avoid the overhead of a location list emitting a location
14615      expression instead, but only if we didn't have more than one
14616      location entry in the first place.  If some entries were not
14617      representable, we don't want to pretend a single entry that was
14618      applies to the entire scope in which the variable is
14619      available.  */
14620   if (list && loc_list->first->next)
14621     gen_llsym (list);
14622
14623   return list;
14624 }
14625
14626 /* Return if the loc_list has only single element and thus can be represented
14627    as location description.   */
14628
14629 static bool
14630 single_element_loc_list_p (dw_loc_list_ref list)
14631 {
14632   gcc_assert (!list->dw_loc_next || list->ll_symbol);
14633   return !list->ll_symbol;
14634 }
14635
14636 /* To each location in list LIST add loc descr REF.  */
14637
14638 static void
14639 add_loc_descr_to_each (dw_loc_list_ref list, dw_loc_descr_ref ref)
14640 {
14641   dw_loc_descr_ref copy;
14642   add_loc_descr (&list->expr, ref);
14643   list = list->dw_loc_next;
14644   while (list)
14645     {
14646       copy = ggc_alloc_dw_loc_descr_node ();
14647       memcpy (copy, ref, sizeof (dw_loc_descr_node));
14648       add_loc_descr (&list->expr, copy);
14649       while (copy->dw_loc_next)
14650         {
14651           dw_loc_descr_ref new_copy = ggc_alloc_dw_loc_descr_node ();
14652           memcpy (new_copy, copy->dw_loc_next, sizeof (dw_loc_descr_node));
14653           copy->dw_loc_next = new_copy;
14654           copy = new_copy;
14655         }
14656       list = list->dw_loc_next;
14657     }
14658 }
14659
14660 /* Given two lists RET and LIST
14661    produce location list that is result of adding expression in LIST
14662    to expression in RET on each possition in program.
14663    Might be destructive on both RET and LIST.
14664
14665    TODO: We handle only simple cases of RET or LIST having at most one
14666    element. General case would inolve sorting the lists in program order
14667    and merging them that will need some additional work.
14668    Adding that will improve quality of debug info especially for SRA-ed
14669    structures.  */
14670
14671 static void
14672 add_loc_list (dw_loc_list_ref *ret, dw_loc_list_ref list)
14673 {
14674   if (!list)
14675     return;
14676   if (!*ret)
14677     {
14678       *ret = list;
14679       return;
14680     }
14681   if (!list->dw_loc_next)
14682     {
14683       add_loc_descr_to_each (*ret, list->expr);
14684       return;
14685     }
14686   if (!(*ret)->dw_loc_next)
14687     {
14688       add_loc_descr_to_each (list, (*ret)->expr);
14689       *ret = list;
14690       return;
14691     }
14692   expansion_failed (NULL_TREE, NULL_RTX,
14693                     "Don't know how to merge two non-trivial"
14694                     " location lists.\n");
14695   *ret = NULL;
14696   return;
14697 }
14698
14699 /* LOC is constant expression.  Try a luck, look it up in constant
14700    pool and return its loc_descr of its address.  */
14701
14702 static dw_loc_descr_ref
14703 cst_pool_loc_descr (tree loc)
14704 {
14705   /* Get an RTL for this, if something has been emitted.  */
14706   rtx rtl = lookup_constant_def (loc);
14707   enum machine_mode mode;
14708
14709   if (!rtl || !MEM_P (rtl))
14710     {
14711       gcc_assert (!rtl);
14712       return 0;
14713     }
14714   gcc_assert (GET_CODE (XEXP (rtl, 0)) == SYMBOL_REF);
14715
14716   /* TODO: We might get more coverage if we was actually delaying expansion
14717      of all expressions till end of compilation when constant pools are fully
14718      populated.  */
14719   if (!TREE_ASM_WRITTEN (SYMBOL_REF_DECL (XEXP (rtl, 0))))
14720     {
14721       expansion_failed (loc, NULL_RTX,
14722                         "CST value in contant pool but not marked.");
14723       return 0;
14724     }
14725   mode = GET_MODE (rtl);
14726   rtl = XEXP (rtl, 0);
14727   return mem_loc_descriptor (rtl, mode, VAR_INIT_STATUS_INITIALIZED);
14728 }
14729
14730 /* Return dw_loc_list representing address of addr_expr LOC
14731    by looking for innder INDIRECT_REF expression and turing it
14732    into simple arithmetics.  */
14733
14734 static dw_loc_list_ref
14735 loc_list_for_address_of_addr_expr_of_indirect_ref (tree loc, bool toplev)
14736 {
14737   tree obj, offset;
14738   HOST_WIDE_INT bitsize, bitpos, bytepos;
14739   enum machine_mode mode;
14740   int volatilep;
14741   int unsignedp = TYPE_UNSIGNED (TREE_TYPE (loc));
14742   dw_loc_list_ref list_ret = NULL, list_ret1 = NULL;
14743
14744   obj = get_inner_reference (TREE_OPERAND (loc, 0),
14745                              &bitsize, &bitpos, &offset, &mode,
14746                              &unsignedp, &volatilep, false);
14747   STRIP_NOPS (obj);
14748   if (bitpos % BITS_PER_UNIT)
14749     {
14750       expansion_failed (loc, NULL_RTX, "bitfield access");
14751       return 0;
14752     }
14753   if (!INDIRECT_REF_P (obj))
14754     {
14755       expansion_failed (obj,
14756                         NULL_RTX, "no indirect ref in inner refrence");
14757       return 0;
14758     }
14759   if (!offset && !bitpos)
14760     list_ret = loc_list_from_tree (TREE_OPERAND (obj, 0), toplev ? 2 : 1);
14761   else if (toplev
14762            && int_size_in_bytes (TREE_TYPE (loc)) <= DWARF2_ADDR_SIZE
14763            && (dwarf_version >= 4 || !dwarf_strict))
14764     {
14765       list_ret = loc_list_from_tree (TREE_OPERAND (obj, 0), 0);
14766       if (!list_ret)
14767         return 0;
14768       if (offset)
14769         {
14770           /* Variable offset.  */
14771           list_ret1 = loc_list_from_tree (offset, 0);
14772           if (list_ret1 == 0)
14773             return 0;
14774           add_loc_list (&list_ret, list_ret1);
14775           if (!list_ret)
14776             return 0;
14777           add_loc_descr_to_each (list_ret,
14778                                  new_loc_descr (DW_OP_plus, 0, 0));
14779         }
14780       bytepos = bitpos / BITS_PER_UNIT;
14781       if (bytepos > 0)
14782         add_loc_descr_to_each (list_ret,
14783                                new_loc_descr (DW_OP_plus_uconst,
14784                                               bytepos, 0));
14785       else if (bytepos < 0)
14786         loc_list_plus_const (list_ret, bytepos);
14787       add_loc_descr_to_each (list_ret,
14788                              new_loc_descr (DW_OP_stack_value, 0, 0));
14789     }
14790   return list_ret;
14791 }
14792
14793
14794 /* Generate Dwarf location list representing LOC.
14795    If WANT_ADDRESS is false, expression computing LOC will be computed
14796    If WANT_ADDRESS is 1, expression computing address of LOC will be returned
14797    if WANT_ADDRESS is 2, expression computing address useable in location
14798      will be returned (i.e. DW_OP_reg can be used
14799      to refer to register values).  */
14800
14801 static dw_loc_list_ref
14802 loc_list_from_tree (tree loc, int want_address)
14803 {
14804   dw_loc_descr_ref ret = NULL, ret1 = NULL;
14805   dw_loc_list_ref list_ret = NULL, list_ret1 = NULL;
14806   int have_address = 0;
14807   enum dwarf_location_atom op;
14808
14809   /* ??? Most of the time we do not take proper care for sign/zero
14810      extending the values properly.  Hopefully this won't be a real
14811      problem...  */
14812
14813   switch (TREE_CODE (loc))
14814     {
14815     case ERROR_MARK:
14816       expansion_failed (loc, NULL_RTX, "ERROR_MARK");
14817       return 0;
14818
14819     case PLACEHOLDER_EXPR:
14820       /* This case involves extracting fields from an object to determine the
14821          position of other fields.  We don't try to encode this here.  The
14822          only user of this is Ada, which encodes the needed information using
14823          the names of types.  */
14824       expansion_failed (loc, NULL_RTX, "PLACEHOLDER_EXPR");
14825       return 0;
14826
14827     case CALL_EXPR:
14828       expansion_failed (loc, NULL_RTX, "CALL_EXPR");
14829       /* There are no opcodes for these operations.  */
14830       return 0;
14831
14832     case PREINCREMENT_EXPR:
14833     case PREDECREMENT_EXPR:
14834     case POSTINCREMENT_EXPR:
14835     case POSTDECREMENT_EXPR:
14836       expansion_failed (loc, NULL_RTX, "PRE/POST INDCREMENT/DECREMENT");
14837       /* There are no opcodes for these operations.  */
14838       return 0;
14839
14840     case ADDR_EXPR:
14841       /* If we already want an address, see if there is INDIRECT_REF inside
14842          e.g. for &this->field.  */
14843       if (want_address)
14844         {
14845           list_ret = loc_list_for_address_of_addr_expr_of_indirect_ref
14846                        (loc, want_address == 2);
14847           if (list_ret)
14848             have_address = 1;
14849           else if (decl_address_ip_invariant_p (TREE_OPERAND (loc, 0))
14850                    && (ret = cst_pool_loc_descr (loc)))
14851             have_address = 1;
14852         }
14853         /* Otherwise, process the argument and look for the address.  */
14854       if (!list_ret && !ret)
14855         list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 1);
14856       else
14857         {
14858           if (want_address)
14859             expansion_failed (loc, NULL_RTX, "need address of ADDR_EXPR");
14860           return NULL;
14861         }
14862       break;
14863
14864     case VAR_DECL:
14865       if (DECL_THREAD_LOCAL_P (loc))
14866         {
14867           rtx rtl;
14868           enum dwarf_location_atom first_op;
14869           enum dwarf_location_atom second_op;
14870           bool dtprel = false;
14871
14872           if (targetm.have_tls)
14873             {
14874               /* If this is not defined, we have no way to emit the
14875                  data.  */
14876               if (!targetm.asm_out.output_dwarf_dtprel)
14877                 return 0;
14878
14879                /* The way DW_OP_GNU_push_tls_address is specified, we
14880                   can only look up addresses of objects in the current
14881                   module.  */
14882               if (DECL_EXTERNAL (loc) && !targetm.binds_local_p (loc))
14883                 return 0;
14884               first_op = DW_OP_addr;
14885               dtprel = true;
14886               second_op = DW_OP_GNU_push_tls_address;
14887             }
14888           else
14889             {
14890               if (!targetm.emutls.debug_form_tls_address
14891                   || !(dwarf_version >= 3 || !dwarf_strict))
14892                 return 0;
14893               loc = emutls_decl (loc);
14894               first_op = DW_OP_addr;
14895               second_op = DW_OP_form_tls_address;
14896             }
14897
14898           rtl = rtl_for_decl_location (loc);
14899           if (rtl == NULL_RTX)
14900             return 0;
14901
14902           if (!MEM_P (rtl))
14903             return 0;
14904           rtl = XEXP (rtl, 0);
14905           if (! CONSTANT_P (rtl))
14906             return 0;
14907
14908           ret = new_loc_descr (first_op, 0, 0);
14909           ret->dw_loc_oprnd1.val_class = dw_val_class_addr;
14910           ret->dw_loc_oprnd1.v.val_addr = rtl;
14911           ret->dtprel = dtprel;
14912
14913           ret1 = new_loc_descr (second_op, 0, 0);
14914           add_loc_descr (&ret, ret1);
14915
14916           have_address = 1;
14917           break;
14918         }
14919       /* FALLTHRU */
14920
14921     case PARM_DECL:
14922       if (DECL_HAS_VALUE_EXPR_P (loc))
14923         return loc_list_from_tree (DECL_VALUE_EXPR (loc),
14924                                    want_address);
14925       /* FALLTHRU */
14926
14927     case RESULT_DECL:
14928     case FUNCTION_DECL:
14929       {
14930         rtx rtl;
14931         var_loc_list *loc_list = lookup_decl_loc (loc);
14932
14933         if (loc_list && loc_list->first)
14934           {
14935             list_ret = dw_loc_list (loc_list, loc, want_address);
14936             have_address = want_address != 0;
14937             break;
14938           }
14939         rtl = rtl_for_decl_location (loc);
14940         if (rtl == NULL_RTX)
14941           {
14942             expansion_failed (loc, NULL_RTX, "DECL has no RTL");
14943             return 0;
14944           }
14945         else if (CONST_INT_P (rtl))
14946           {
14947             HOST_WIDE_INT val = INTVAL (rtl);
14948             if (TYPE_UNSIGNED (TREE_TYPE (loc)))
14949               val &= GET_MODE_MASK (DECL_MODE (loc));
14950             ret = int_loc_descriptor (val);
14951           }
14952         else if (GET_CODE (rtl) == CONST_STRING)
14953           {
14954             expansion_failed (loc, NULL_RTX, "CONST_STRING");
14955             return 0;
14956           }
14957         else if (CONSTANT_P (rtl) && const_ok_for_output (rtl))
14958           {
14959             ret = new_loc_descr (DW_OP_addr, 0, 0);
14960             ret->dw_loc_oprnd1.val_class = dw_val_class_addr;
14961             ret->dw_loc_oprnd1.v.val_addr = rtl;
14962           }
14963         else
14964           {
14965             enum machine_mode mode;
14966
14967             /* Certain constructs can only be represented at top-level.  */
14968             if (want_address == 2)
14969               {
14970                 ret = loc_descriptor (rtl, VOIDmode,
14971                                       VAR_INIT_STATUS_INITIALIZED);
14972                 have_address = 1;
14973               }
14974             else
14975               {
14976                 mode = GET_MODE (rtl);
14977                 if (MEM_P (rtl))
14978                   {
14979                     rtl = XEXP (rtl, 0);
14980                     have_address = 1;
14981                   }
14982                 ret = mem_loc_descriptor (rtl, mode, VAR_INIT_STATUS_INITIALIZED);
14983               }
14984             if (!ret)
14985               expansion_failed (loc, rtl,
14986                                 "failed to produce loc descriptor for rtl");
14987           }
14988       }
14989       break;
14990
14991     case INDIRECT_REF:
14992     case ALIGN_INDIRECT_REF:
14993     case MISALIGNED_INDIRECT_REF:
14994       list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 0);
14995       have_address = 1;
14996       break;
14997
14998     case COMPOUND_EXPR:
14999       return loc_list_from_tree (TREE_OPERAND (loc, 1), want_address);
15000
15001     CASE_CONVERT:
15002     case VIEW_CONVERT_EXPR:
15003     case SAVE_EXPR:
15004     case MODIFY_EXPR:
15005       return loc_list_from_tree (TREE_OPERAND (loc, 0), want_address);
15006
15007     case COMPONENT_REF:
15008     case BIT_FIELD_REF:
15009     case ARRAY_REF:
15010     case ARRAY_RANGE_REF:
15011     case REALPART_EXPR:
15012     case IMAGPART_EXPR:
15013       {
15014         tree obj, offset;
15015         HOST_WIDE_INT bitsize, bitpos, bytepos;
15016         enum machine_mode mode;
15017         int volatilep;
15018         int unsignedp = TYPE_UNSIGNED (TREE_TYPE (loc));
15019
15020         obj = get_inner_reference (loc, &bitsize, &bitpos, &offset, &mode,
15021                                    &unsignedp, &volatilep, false);
15022
15023         gcc_assert (obj != loc);
15024
15025         list_ret = loc_list_from_tree (obj,
15026                                        want_address == 2
15027                                        && !bitpos && !offset ? 2 : 1);
15028         /* TODO: We can extract value of the small expression via shifting even
15029            for nonzero bitpos.  */
15030         if (list_ret == 0)
15031           return 0;
15032         if (bitpos % BITS_PER_UNIT != 0 || bitsize % BITS_PER_UNIT != 0)
15033           {
15034             expansion_failed (loc, NULL_RTX,
15035                               "bitfield access");
15036             return 0;
15037           }
15038
15039         if (offset != NULL_TREE)
15040           {
15041             /* Variable offset.  */
15042             list_ret1 = loc_list_from_tree (offset, 0);
15043             if (list_ret1 == 0)
15044               return 0;
15045             add_loc_list (&list_ret, list_ret1);
15046             if (!list_ret)
15047               return 0;
15048             add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_plus, 0, 0));
15049           }
15050
15051         bytepos = bitpos / BITS_PER_UNIT;
15052         if (bytepos > 0)
15053           add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_plus_uconst, bytepos, 0));
15054         else if (bytepos < 0)
15055           loc_list_plus_const (list_ret, bytepos);
15056
15057         have_address = 1;
15058         break;
15059       }
15060
15061     case INTEGER_CST:
15062       if ((want_address || !host_integerp (loc, 0))
15063           && (ret = cst_pool_loc_descr (loc)))
15064         have_address = 1;
15065       else if (want_address == 2
15066                && host_integerp (loc, 0)
15067                && (ret = address_of_int_loc_descriptor
15068                            (int_size_in_bytes (TREE_TYPE (loc)),
15069                             tree_low_cst (loc, 0))))
15070         have_address = 1;
15071       else if (host_integerp (loc, 0))
15072         ret = int_loc_descriptor (tree_low_cst (loc, 0));
15073       else
15074         {
15075           expansion_failed (loc, NULL_RTX,
15076                             "Integer operand is not host integer");
15077           return 0;
15078         }
15079       break;
15080
15081     case CONSTRUCTOR:
15082     case REAL_CST:
15083     case STRING_CST:
15084     case COMPLEX_CST:
15085       if ((ret = cst_pool_loc_descr (loc)))
15086         have_address = 1;
15087       else
15088       /* We can construct small constants here using int_loc_descriptor.  */
15089         expansion_failed (loc, NULL_RTX,
15090                           "constructor or constant not in constant pool");
15091       break;
15092
15093     case TRUTH_AND_EXPR:
15094     case TRUTH_ANDIF_EXPR:
15095     case BIT_AND_EXPR:
15096       op = DW_OP_and;
15097       goto do_binop;
15098
15099     case TRUTH_XOR_EXPR:
15100     case BIT_XOR_EXPR:
15101       op = DW_OP_xor;
15102       goto do_binop;
15103
15104     case TRUTH_OR_EXPR:
15105     case TRUTH_ORIF_EXPR:
15106     case BIT_IOR_EXPR:
15107       op = DW_OP_or;
15108       goto do_binop;
15109
15110     case FLOOR_DIV_EXPR:
15111     case CEIL_DIV_EXPR:
15112     case ROUND_DIV_EXPR:
15113     case TRUNC_DIV_EXPR:
15114       if (TYPE_UNSIGNED (TREE_TYPE (loc)))
15115         return 0;
15116       op = DW_OP_div;
15117       goto do_binop;
15118
15119     case MINUS_EXPR:
15120       op = DW_OP_minus;
15121       goto do_binop;
15122
15123     case FLOOR_MOD_EXPR:
15124     case CEIL_MOD_EXPR:
15125     case ROUND_MOD_EXPR:
15126     case TRUNC_MOD_EXPR:
15127       if (TYPE_UNSIGNED (TREE_TYPE (loc)))
15128         {
15129           op = DW_OP_mod;
15130           goto do_binop;
15131         }
15132       list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 0);
15133       list_ret1 = loc_list_from_tree (TREE_OPERAND (loc, 1), 0);
15134       if (list_ret == 0 || list_ret1 == 0)
15135         return 0;
15136
15137       add_loc_list (&list_ret, list_ret1);
15138       if (list_ret == 0)
15139         return 0;
15140       add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_over, 0, 0));
15141       add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_over, 0, 0));
15142       add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_div, 0, 0));
15143       add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_mul, 0, 0));
15144       add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_minus, 0, 0));
15145       break;
15146
15147     case MULT_EXPR:
15148       op = DW_OP_mul;
15149       goto do_binop;
15150
15151     case LSHIFT_EXPR:
15152       op = DW_OP_shl;
15153       goto do_binop;
15154
15155     case RSHIFT_EXPR:
15156       op = (TYPE_UNSIGNED (TREE_TYPE (loc)) ? DW_OP_shr : DW_OP_shra);
15157       goto do_binop;
15158
15159     case POINTER_PLUS_EXPR:
15160     case PLUS_EXPR:
15161       if (host_integerp (TREE_OPERAND (loc, 1), 0))
15162         {
15163           list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 0);
15164           if (list_ret == 0)
15165             return 0;
15166
15167           loc_list_plus_const (list_ret, tree_low_cst (TREE_OPERAND (loc, 1), 0));
15168           break;
15169         }
15170
15171       op = DW_OP_plus;
15172       goto do_binop;
15173
15174     case LE_EXPR:
15175       if (TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (loc, 0))))
15176         return 0;
15177
15178       op = DW_OP_le;
15179       goto do_binop;
15180
15181     case GE_EXPR:
15182       if (TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (loc, 0))))
15183         return 0;
15184
15185       op = DW_OP_ge;
15186       goto do_binop;
15187
15188     case LT_EXPR:
15189       if (TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (loc, 0))))
15190         return 0;
15191
15192       op = DW_OP_lt;
15193       goto do_binop;
15194
15195     case GT_EXPR:
15196       if (TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (loc, 0))))
15197         return 0;
15198
15199       op = DW_OP_gt;
15200       goto do_binop;
15201
15202     case EQ_EXPR:
15203       op = DW_OP_eq;
15204       goto do_binop;
15205
15206     case NE_EXPR:
15207       op = DW_OP_ne;
15208       goto do_binop;
15209
15210     do_binop:
15211       list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 0);
15212       list_ret1 = loc_list_from_tree (TREE_OPERAND (loc, 1), 0);
15213       if (list_ret == 0 || list_ret1 == 0)
15214         return 0;
15215
15216       add_loc_list (&list_ret, list_ret1);
15217       if (list_ret == 0)
15218         return 0;
15219       add_loc_descr_to_each (list_ret, new_loc_descr (op, 0, 0));
15220       break;
15221
15222     case TRUTH_NOT_EXPR:
15223     case BIT_NOT_EXPR:
15224       op = DW_OP_not;
15225       goto do_unop;
15226
15227     case ABS_EXPR:
15228       op = DW_OP_abs;
15229       goto do_unop;
15230
15231     case NEGATE_EXPR:
15232       op = DW_OP_neg;
15233       goto do_unop;
15234
15235     do_unop:
15236       list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 0);
15237       if (list_ret == 0)
15238         return 0;
15239
15240       add_loc_descr_to_each (list_ret, new_loc_descr (op, 0, 0));
15241       break;
15242
15243     case MIN_EXPR:
15244     case MAX_EXPR:
15245       {
15246         const enum tree_code code =
15247           TREE_CODE (loc) == MIN_EXPR ? GT_EXPR : LT_EXPR;
15248
15249         loc = build3 (COND_EXPR, TREE_TYPE (loc),
15250                       build2 (code, integer_type_node,
15251                               TREE_OPERAND (loc, 0), TREE_OPERAND (loc, 1)),
15252                       TREE_OPERAND (loc, 1), TREE_OPERAND (loc, 0));
15253       }
15254
15255       /* ... fall through ...  */
15256
15257     case COND_EXPR:
15258       {
15259         dw_loc_descr_ref lhs
15260           = loc_descriptor_from_tree (TREE_OPERAND (loc, 1), 0);
15261         dw_loc_list_ref rhs
15262           = loc_list_from_tree (TREE_OPERAND (loc, 2), 0);
15263         dw_loc_descr_ref bra_node, jump_node, tmp;
15264
15265         list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 0);
15266         if (list_ret == 0 || lhs == 0 || rhs == 0)
15267           return 0;
15268
15269         bra_node = new_loc_descr (DW_OP_bra, 0, 0);
15270         add_loc_descr_to_each (list_ret, bra_node);
15271
15272         add_loc_list (&list_ret, rhs);
15273         jump_node = new_loc_descr (DW_OP_skip, 0, 0);
15274         add_loc_descr_to_each (list_ret, jump_node);
15275
15276         add_loc_descr_to_each (list_ret, lhs);
15277         bra_node->dw_loc_oprnd1.val_class = dw_val_class_loc;
15278         bra_node->dw_loc_oprnd1.v.val_loc = lhs;
15279
15280         /* ??? Need a node to point the skip at.  Use a nop.  */
15281         tmp = new_loc_descr (DW_OP_nop, 0, 0);
15282         add_loc_descr_to_each (list_ret, tmp);
15283         jump_node->dw_loc_oprnd1.val_class = dw_val_class_loc;
15284         jump_node->dw_loc_oprnd1.v.val_loc = tmp;
15285       }
15286       break;
15287
15288     case FIX_TRUNC_EXPR:
15289       return 0;
15290
15291     default:
15292       /* Leave front-end specific codes as simply unknown.  This comes
15293          up, for instance, with the C STMT_EXPR.  */
15294       if ((unsigned int) TREE_CODE (loc)
15295           >= (unsigned int) LAST_AND_UNUSED_TREE_CODE)
15296         {
15297           expansion_failed (loc, NULL_RTX,
15298                             "language specific tree node");
15299           return 0;
15300         }
15301
15302 #ifdef ENABLE_CHECKING
15303       /* Otherwise this is a generic code; we should just lists all of
15304          these explicitly.  We forgot one.  */
15305       gcc_unreachable ();
15306 #else
15307       /* In a release build, we want to degrade gracefully: better to
15308          generate incomplete debugging information than to crash.  */
15309       return NULL;
15310 #endif
15311     }
15312
15313   if (!ret && !list_ret)
15314     return 0;
15315
15316   if (want_address == 2 && !have_address
15317       && (dwarf_version >= 4 || !dwarf_strict))
15318     {
15319       if (int_size_in_bytes (TREE_TYPE (loc)) > DWARF2_ADDR_SIZE)
15320         {
15321           expansion_failed (loc, NULL_RTX,
15322                             "DWARF address size mismatch");
15323           return 0;
15324         }
15325       if (ret)
15326         add_loc_descr (&ret, new_loc_descr (DW_OP_stack_value, 0, 0));
15327       else
15328         add_loc_descr_to_each (list_ret,
15329                                new_loc_descr (DW_OP_stack_value, 0, 0));
15330       have_address = 1;
15331     }
15332   /* Show if we can't fill the request for an address.  */
15333   if (want_address && !have_address)
15334     {
15335       expansion_failed (loc, NULL_RTX,
15336                         "Want address and only have value");
15337       return 0;
15338     }
15339
15340   gcc_assert (!ret || !list_ret);
15341
15342   /* If we've got an address and don't want one, dereference.  */
15343   if (!want_address && have_address)
15344     {
15345       HOST_WIDE_INT size = int_size_in_bytes (TREE_TYPE (loc));
15346
15347       if (size > DWARF2_ADDR_SIZE || size == -1)
15348         {
15349           expansion_failed (loc, NULL_RTX,
15350                             "DWARF address size mismatch");
15351           return 0;
15352         }
15353       else if (size == DWARF2_ADDR_SIZE)
15354         op = DW_OP_deref;
15355       else
15356         op = DW_OP_deref_size;
15357
15358       if (ret)
15359         add_loc_descr (&ret, new_loc_descr (op, size, 0));
15360       else
15361         add_loc_descr_to_each (list_ret, new_loc_descr (op, size, 0));
15362     }
15363   if (ret)
15364     list_ret = new_loc_list (ret, NULL, NULL, NULL);
15365
15366   return list_ret;
15367 }
15368
15369 /* Same as above but return only single location expression.  */
15370 static dw_loc_descr_ref
15371 loc_descriptor_from_tree (tree loc, int want_address)
15372 {
15373   dw_loc_list_ref ret = loc_list_from_tree (loc, want_address);
15374   if (!ret)
15375     return NULL;
15376   if (ret->dw_loc_next)
15377     {
15378       expansion_failed (loc, NULL_RTX,
15379                         "Location list where only loc descriptor needed");
15380       return NULL;
15381     }
15382   return ret->expr;
15383 }
15384
15385 /* Given a value, round it up to the lowest multiple of `boundary'
15386    which is not less than the value itself.  */
15387
15388 static inline HOST_WIDE_INT
15389 ceiling (HOST_WIDE_INT value, unsigned int boundary)
15390 {
15391   return (((value + boundary - 1) / boundary) * boundary);
15392 }
15393
15394 /* Given a pointer to what is assumed to be a FIELD_DECL node, return a
15395    pointer to the declared type for the relevant field variable, or return
15396    `integer_type_node' if the given node turns out to be an
15397    ERROR_MARK node.  */
15398
15399 static inline tree
15400 field_type (const_tree decl)
15401 {
15402   tree type;
15403
15404   if (TREE_CODE (decl) == ERROR_MARK)
15405     return integer_type_node;
15406
15407   type = DECL_BIT_FIELD_TYPE (decl);
15408   if (type == NULL_TREE)
15409     type = TREE_TYPE (decl);
15410
15411   return type;
15412 }
15413
15414 /* Given a pointer to a tree node, return the alignment in bits for
15415    it, or else return BITS_PER_WORD if the node actually turns out to
15416    be an ERROR_MARK node.  */
15417
15418 static inline unsigned
15419 simple_type_align_in_bits (const_tree type)
15420 {
15421   return (TREE_CODE (type) != ERROR_MARK) ? TYPE_ALIGN (type) : BITS_PER_WORD;
15422 }
15423
15424 static inline unsigned
15425 simple_decl_align_in_bits (const_tree decl)
15426 {
15427   return (TREE_CODE (decl) != ERROR_MARK) ? DECL_ALIGN (decl) : BITS_PER_WORD;
15428 }
15429
15430 /* Return the result of rounding T up to ALIGN.  */
15431
15432 static inline double_int
15433 round_up_to_align (double_int t, unsigned int align)
15434 {
15435   double_int alignd = uhwi_to_double_int (align);
15436   t = double_int_add (t, alignd);
15437   t = double_int_add (t, double_int_minus_one);
15438   t = double_int_div (t, alignd, true, TRUNC_DIV_EXPR);
15439   t = double_int_mul (t, alignd);
15440   return t;
15441 }
15442
15443 /* Given a pointer to a FIELD_DECL, compute and return the byte offset of the
15444    lowest addressed byte of the "containing object" for the given FIELD_DECL,
15445    or return 0 if we are unable to determine what that offset is, either
15446    because the argument turns out to be a pointer to an ERROR_MARK node, or
15447    because the offset is actually variable.  (We can't handle the latter case
15448    just yet).  */
15449
15450 static HOST_WIDE_INT
15451 field_byte_offset (const_tree decl)
15452 {
15453   double_int object_offset_in_bits;
15454   double_int object_offset_in_bytes;
15455   double_int bitpos_int;
15456
15457   if (TREE_CODE (decl) == ERROR_MARK)
15458     return 0;
15459
15460   gcc_assert (TREE_CODE (decl) == FIELD_DECL);
15461
15462   /* We cannot yet cope with fields whose positions are variable, so
15463      for now, when we see such things, we simply return 0.  Someday, we may
15464      be able to handle such cases, but it will be damn difficult.  */
15465   if (TREE_CODE (bit_position (decl)) != INTEGER_CST)
15466     return 0;
15467
15468   bitpos_int = tree_to_double_int (bit_position (decl));
15469
15470 #ifdef PCC_BITFIELD_TYPE_MATTERS
15471   if (PCC_BITFIELD_TYPE_MATTERS)
15472     {
15473       tree type;
15474       tree field_size_tree;
15475       double_int deepest_bitpos;
15476       double_int field_size_in_bits;
15477       unsigned int type_align_in_bits;
15478       unsigned int decl_align_in_bits;
15479       double_int type_size_in_bits;
15480
15481       type = field_type (decl);
15482       type_size_in_bits = double_int_type_size_in_bits (type);
15483       type_align_in_bits = simple_type_align_in_bits (type);
15484
15485       field_size_tree = DECL_SIZE (decl);
15486
15487       /* The size could be unspecified if there was an error, or for
15488          a flexible array member.  */
15489       if (!field_size_tree)
15490         field_size_tree = bitsize_zero_node;
15491
15492       /* If the size of the field is not constant, use the type size.  */
15493       if (TREE_CODE (field_size_tree) == INTEGER_CST)
15494         field_size_in_bits = tree_to_double_int (field_size_tree);
15495       else
15496         field_size_in_bits = type_size_in_bits;
15497
15498       decl_align_in_bits = simple_decl_align_in_bits (decl);
15499
15500       /* The GCC front-end doesn't make any attempt to keep track of the
15501          starting bit offset (relative to the start of the containing
15502          structure type) of the hypothetical "containing object" for a
15503          bit-field.  Thus, when computing the byte offset value for the
15504          start of the "containing object" of a bit-field, we must deduce
15505          this information on our own. This can be rather tricky to do in
15506          some cases.  For example, handling the following structure type
15507          definition when compiling for an i386/i486 target (which only
15508          aligns long long's to 32-bit boundaries) can be very tricky:
15509
15510          struct S { int field1; long long field2:31; };
15511
15512          Fortunately, there is a simple rule-of-thumb which can be used
15513          in such cases.  When compiling for an i386/i486, GCC will
15514          allocate 8 bytes for the structure shown above.  It decides to
15515          do this based upon one simple rule for bit-field allocation.
15516          GCC allocates each "containing object" for each bit-field at
15517          the first (i.e. lowest addressed) legitimate alignment boundary
15518          (based upon the required minimum alignment for the declared
15519          type of the field) which it can possibly use, subject to the
15520          condition that there is still enough available space remaining
15521          in the containing object (when allocated at the selected point)
15522          to fully accommodate all of the bits of the bit-field itself.
15523
15524          This simple rule makes it obvious why GCC allocates 8 bytes for
15525          each object of the structure type shown above.  When looking
15526          for a place to allocate the "containing object" for `field2',
15527          the compiler simply tries to allocate a 64-bit "containing
15528          object" at each successive 32-bit boundary (starting at zero)
15529          until it finds a place to allocate that 64- bit field such that
15530          at least 31 contiguous (and previously unallocated) bits remain
15531          within that selected 64 bit field.  (As it turns out, for the
15532          example above, the compiler finds it is OK to allocate the
15533          "containing object" 64-bit field at bit-offset zero within the
15534          structure type.)
15535
15536          Here we attempt to work backwards from the limited set of facts
15537          we're given, and we try to deduce from those facts, where GCC
15538          must have believed that the containing object started (within
15539          the structure type). The value we deduce is then used (by the
15540          callers of this routine) to generate DW_AT_location and
15541          DW_AT_bit_offset attributes for fields (both bit-fields and, in
15542          the case of DW_AT_location, regular fields as well).  */
15543
15544       /* Figure out the bit-distance from the start of the structure to
15545          the "deepest" bit of the bit-field.  */
15546       deepest_bitpos = double_int_add (bitpos_int, field_size_in_bits);
15547
15548       /* This is the tricky part.  Use some fancy footwork to deduce
15549          where the lowest addressed bit of the containing object must
15550          be.  */
15551       object_offset_in_bits
15552         = double_int_add (deepest_bitpos, double_int_neg (type_size_in_bits));
15553
15554       /* Round up to type_align by default.  This works best for
15555          bitfields.  */
15556       object_offset_in_bits
15557         = round_up_to_align (object_offset_in_bits, type_align_in_bits);
15558
15559       if (double_int_ucmp (object_offset_in_bits, bitpos_int) > 0)
15560         {
15561           object_offset_in_bits
15562             = double_int_add (deepest_bitpos,
15563                               double_int_neg (type_size_in_bits));
15564
15565           /* Round up to decl_align instead.  */
15566           object_offset_in_bits
15567             = round_up_to_align (object_offset_in_bits, decl_align_in_bits);
15568         }
15569     }
15570   else
15571 #endif
15572     object_offset_in_bits = bitpos_int;
15573
15574   object_offset_in_bytes
15575     = double_int_div (object_offset_in_bits,
15576                       uhwi_to_double_int (BITS_PER_UNIT), true,
15577                       TRUNC_DIV_EXPR);
15578   return double_int_to_shwi (object_offset_in_bytes);
15579 }
15580 \f
15581 /* The following routines define various Dwarf attributes and any data
15582    associated with them.  */
15583
15584 /* Add a location description attribute value to a DIE.
15585
15586    This emits location attributes suitable for whole variables and
15587    whole parameters.  Note that the location attributes for struct fields are
15588    generated by the routine `data_member_location_attribute' below.  */
15589
15590 static inline void
15591 add_AT_location_description (dw_die_ref die, enum dwarf_attribute attr_kind,
15592                              dw_loc_list_ref descr)
15593 {
15594   if (descr == 0)
15595     return;
15596   if (single_element_loc_list_p (descr))
15597     add_AT_loc (die, attr_kind, descr->expr);
15598   else
15599     add_AT_loc_list (die, attr_kind, descr);
15600 }
15601
15602 /* Attach the specialized form of location attribute used for data members of
15603    struct and union types.  In the special case of a FIELD_DECL node which
15604    represents a bit-field, the "offset" part of this special location
15605    descriptor must indicate the distance in bytes from the lowest-addressed
15606    byte of the containing struct or union type to the lowest-addressed byte of
15607    the "containing object" for the bit-field.  (See the `field_byte_offset'
15608    function above).
15609
15610    For any given bit-field, the "containing object" is a hypothetical object
15611    (of some integral or enum type) within which the given bit-field lives.  The
15612    type of this hypothetical "containing object" is always the same as the
15613    declared type of the individual bit-field itself (for GCC anyway... the
15614    DWARF spec doesn't actually mandate this).  Note that it is the size (in
15615    bytes) of the hypothetical "containing object" which will be given in the
15616    DW_AT_byte_size attribute for this bit-field.  (See the
15617    `byte_size_attribute' function below.)  It is also used when calculating the
15618    value of the DW_AT_bit_offset attribute.  (See the `bit_offset_attribute'
15619    function below.)  */
15620
15621 static void
15622 add_data_member_location_attribute (dw_die_ref die, tree decl)
15623 {
15624   HOST_WIDE_INT offset;
15625   dw_loc_descr_ref loc_descr = 0;
15626
15627   if (TREE_CODE (decl) == TREE_BINFO)
15628     {
15629       /* We're working on the TAG_inheritance for a base class.  */
15630       if (BINFO_VIRTUAL_P (decl) && is_cxx ())
15631         {
15632           /* For C++ virtual bases we can't just use BINFO_OFFSET, as they
15633              aren't at a fixed offset from all (sub)objects of the same
15634              type.  We need to extract the appropriate offset from our
15635              vtable.  The following dwarf expression means
15636
15637                BaseAddr = ObAddr + *((*ObAddr) - Offset)
15638
15639              This is specific to the V3 ABI, of course.  */
15640
15641           dw_loc_descr_ref tmp;
15642
15643           /* Make a copy of the object address.  */
15644           tmp = new_loc_descr (DW_OP_dup, 0, 0);
15645           add_loc_descr (&loc_descr, tmp);
15646
15647           /* Extract the vtable address.  */
15648           tmp = new_loc_descr (DW_OP_deref, 0, 0);
15649           add_loc_descr (&loc_descr, tmp);
15650
15651           /* Calculate the address of the offset.  */
15652           offset = tree_low_cst (BINFO_VPTR_FIELD (decl), 0);
15653           gcc_assert (offset < 0);
15654
15655           tmp = int_loc_descriptor (-offset);
15656           add_loc_descr (&loc_descr, tmp);
15657           tmp = new_loc_descr (DW_OP_minus, 0, 0);
15658           add_loc_descr (&loc_descr, tmp);
15659
15660           /* Extract the offset.  */
15661           tmp = new_loc_descr (DW_OP_deref, 0, 0);
15662           add_loc_descr (&loc_descr, tmp);
15663
15664           /* Add it to the object address.  */
15665           tmp = new_loc_descr (DW_OP_plus, 0, 0);
15666           add_loc_descr (&loc_descr, tmp);
15667         }
15668       else
15669         offset = tree_low_cst (BINFO_OFFSET (decl), 0);
15670     }
15671   else
15672     offset = field_byte_offset (decl);
15673
15674   if (! loc_descr)
15675     {
15676       if (dwarf_version > 2)
15677         {
15678           /* Don't need to output a location expression, just the constant. */
15679           add_AT_int (die, DW_AT_data_member_location, offset);
15680           return;
15681         }
15682       else
15683         {
15684           enum dwarf_location_atom op;
15685
15686           /* The DWARF2 standard says that we should assume that the structure
15687              address is already on the stack, so we can specify a structure
15688              field address by using DW_OP_plus_uconst.  */
15689
15690 #ifdef MIPS_DEBUGGING_INFO
15691           /* ??? The SGI dwarf reader does not handle the DW_OP_plus_uconst
15692              operator correctly.  It works only if we leave the offset on the
15693              stack.  */
15694           op = DW_OP_constu;
15695 #else
15696           op = DW_OP_plus_uconst;
15697 #endif
15698
15699           loc_descr = new_loc_descr (op, offset, 0);
15700         }
15701     }
15702
15703   add_AT_loc (die, DW_AT_data_member_location, loc_descr);
15704 }
15705
15706 /* Writes integer values to dw_vec_const array.  */
15707
15708 static void
15709 insert_int (HOST_WIDE_INT val, unsigned int size, unsigned char *dest)
15710 {
15711   while (size != 0)
15712     {
15713       *dest++ = val & 0xff;
15714       val >>= 8;
15715       --size;
15716     }
15717 }
15718
15719 /* Reads integers from dw_vec_const array.  Inverse of insert_int.  */
15720
15721 static HOST_WIDE_INT
15722 extract_int (const unsigned char *src, unsigned int size)
15723 {
15724   HOST_WIDE_INT val = 0;
15725
15726   src += size;
15727   while (size != 0)
15728     {
15729       val <<= 8;
15730       val |= *--src & 0xff;
15731       --size;
15732     }
15733   return val;
15734 }
15735
15736 /* Writes double_int values to dw_vec_const array.  */
15737
15738 static void
15739 insert_double (double_int val, unsigned char *dest)
15740 {
15741   unsigned char *p0 = dest;
15742   unsigned char *p1 = dest + sizeof (HOST_WIDE_INT);
15743
15744   if (WORDS_BIG_ENDIAN)
15745     {
15746       p0 = p1;
15747       p1 = dest;
15748     }
15749
15750   insert_int ((HOST_WIDE_INT) val.low, sizeof (HOST_WIDE_INT), p0);
15751   insert_int ((HOST_WIDE_INT) val.high, sizeof (HOST_WIDE_INT), p1);
15752 }
15753
15754 /* Writes floating point values to dw_vec_const array.  */
15755
15756 static void
15757 insert_float (const_rtx rtl, unsigned char *array)
15758 {
15759   REAL_VALUE_TYPE rv;
15760   long val[4];
15761   int i;
15762
15763   REAL_VALUE_FROM_CONST_DOUBLE (rv, rtl);
15764   real_to_target (val, &rv, GET_MODE (rtl));
15765
15766   /* real_to_target puts 32-bit pieces in each long.  Pack them.  */
15767   for (i = 0; i < GET_MODE_SIZE (GET_MODE (rtl)) / 4; i++)
15768     {
15769       insert_int (val[i], 4, array);
15770       array += 4;
15771     }
15772 }
15773
15774 /* Attach a DW_AT_const_value attribute for a variable or a parameter which
15775    does not have a "location" either in memory or in a register.  These
15776    things can arise in GNU C when a constant is passed as an actual parameter
15777    to an inlined function.  They can also arise in C++ where declared
15778    constants do not necessarily get memory "homes".  */
15779
15780 static bool
15781 add_const_value_attribute (dw_die_ref die, rtx rtl)
15782 {
15783   switch (GET_CODE (rtl))
15784     {
15785     case CONST_INT:
15786       {
15787         HOST_WIDE_INT val = INTVAL (rtl);
15788
15789         if (val < 0)
15790           add_AT_int (die, DW_AT_const_value, val);
15791         else
15792           add_AT_unsigned (die, DW_AT_const_value, (unsigned HOST_WIDE_INT) val);
15793       }
15794       return true;
15795
15796     case CONST_DOUBLE:
15797       /* Note that a CONST_DOUBLE rtx could represent either an integer or a
15798          floating-point constant.  A CONST_DOUBLE is used whenever the
15799          constant requires more than one word in order to be adequately
15800          represented.  */
15801       {
15802         enum machine_mode mode = GET_MODE (rtl);
15803
15804         if (SCALAR_FLOAT_MODE_P (mode))
15805           {
15806             unsigned int length = GET_MODE_SIZE (mode);
15807             unsigned char *array = (unsigned char *) ggc_alloc_atomic (length);
15808
15809             insert_float (rtl, array);
15810             add_AT_vec (die, DW_AT_const_value, length / 4, 4, array);
15811           }
15812         else
15813           add_AT_double (die, DW_AT_const_value,
15814                          CONST_DOUBLE_HIGH (rtl), CONST_DOUBLE_LOW (rtl));
15815       }
15816       return true;
15817
15818     case CONST_VECTOR:
15819       {
15820         enum machine_mode mode = GET_MODE (rtl);
15821         unsigned int elt_size = GET_MODE_UNIT_SIZE (mode);
15822         unsigned int length = CONST_VECTOR_NUNITS (rtl);
15823         unsigned char *array = (unsigned char *) ggc_alloc_atomic
15824           (length * elt_size);
15825         unsigned int i;
15826         unsigned char *p;
15827
15828         switch (GET_MODE_CLASS (mode))
15829           {
15830           case MODE_VECTOR_INT:
15831             for (i = 0, p = array; i < length; i++, p += elt_size)
15832               {
15833                 rtx elt = CONST_VECTOR_ELT (rtl, i);
15834                 double_int val = rtx_to_double_int (elt);
15835
15836                 if (elt_size <= sizeof (HOST_WIDE_INT))
15837                   insert_int (double_int_to_shwi (val), elt_size, p);
15838                 else
15839                   {
15840                     gcc_assert (elt_size == 2 * sizeof (HOST_WIDE_INT));
15841                     insert_double (val, p);
15842                   }
15843               }
15844             break;
15845
15846           case MODE_VECTOR_FLOAT:
15847             for (i = 0, p = array; i < length; i++, p += elt_size)
15848               {
15849                 rtx elt = CONST_VECTOR_ELT (rtl, i);
15850                 insert_float (elt, p);
15851               }
15852             break;
15853
15854           default:
15855             gcc_unreachable ();
15856           }
15857
15858         add_AT_vec (die, DW_AT_const_value, length, elt_size, array);
15859       }
15860       return true;
15861
15862     case CONST_STRING:
15863       if (dwarf_version >= 4 || !dwarf_strict)
15864         {
15865           dw_loc_descr_ref loc_result;
15866           resolve_one_addr (&rtl, NULL);
15867         rtl_addr:
15868           loc_result = new_loc_descr (DW_OP_addr, 0, 0);
15869           loc_result->dw_loc_oprnd1.val_class = dw_val_class_addr;
15870           loc_result->dw_loc_oprnd1.v.val_addr = rtl;
15871           add_loc_descr (&loc_result, new_loc_descr (DW_OP_stack_value, 0, 0));
15872           add_AT_loc (die, DW_AT_location, loc_result);
15873           VEC_safe_push (rtx, gc, used_rtx_array, rtl);
15874           return true;
15875         }
15876       return false;
15877
15878     case CONST:
15879       if (CONSTANT_P (XEXP (rtl, 0)))
15880         return add_const_value_attribute (die, XEXP (rtl, 0));
15881       /* FALLTHROUGH */
15882     case SYMBOL_REF:
15883       if (!const_ok_for_output (rtl))
15884         return false;
15885     case LABEL_REF:
15886       if (dwarf_version >= 4 || !dwarf_strict)
15887         goto rtl_addr;
15888       return false;
15889
15890     case PLUS:
15891       /* In cases where an inlined instance of an inline function is passed
15892          the address of an `auto' variable (which is local to the caller) we
15893          can get a situation where the DECL_RTL of the artificial local
15894          variable (for the inlining) which acts as a stand-in for the
15895          corresponding formal parameter (of the inline function) will look
15896          like (plus:SI (reg:SI FRAME_PTR) (const_int ...)).  This is not
15897          exactly a compile-time constant expression, but it isn't the address
15898          of the (artificial) local variable either.  Rather, it represents the
15899          *value* which the artificial local variable always has during its
15900          lifetime.  We currently have no way to represent such quasi-constant
15901          values in Dwarf, so for now we just punt and generate nothing.  */
15902       return false;
15903
15904     case HIGH:
15905     case CONST_FIXED:
15906       return false;
15907
15908     case MEM:
15909       if (GET_CODE (XEXP (rtl, 0)) == CONST_STRING
15910           && MEM_READONLY_P (rtl)
15911           && GET_MODE (rtl) == BLKmode)
15912         {
15913           add_AT_string (die, DW_AT_const_value, XSTR (XEXP (rtl, 0), 0));
15914           return true;
15915         }
15916       return false;
15917
15918     default:
15919       /* No other kinds of rtx should be possible here.  */
15920       gcc_unreachable ();
15921     }
15922   return false;
15923 }
15924
15925 /* Determine whether the evaluation of EXPR references any variables
15926    or functions which aren't otherwise used (and therefore may not be
15927    output).  */
15928 static tree
15929 reference_to_unused (tree * tp, int * walk_subtrees,
15930                      void * data ATTRIBUTE_UNUSED)
15931 {
15932   if (! EXPR_P (*tp) && ! CONSTANT_CLASS_P (*tp))
15933     *walk_subtrees = 0;
15934
15935   if (DECL_P (*tp) && ! TREE_PUBLIC (*tp) && ! TREE_USED (*tp)
15936       && ! TREE_ASM_WRITTEN (*tp))
15937     return *tp;
15938   /* ???  The C++ FE emits debug information for using decls, so
15939      putting gcc_unreachable here falls over.  See PR31899.  For now
15940      be conservative.  */
15941   else if (!cgraph_global_info_ready
15942            && (TREE_CODE (*tp) == VAR_DECL || TREE_CODE (*tp) == FUNCTION_DECL))
15943     return *tp;
15944   else if (TREE_CODE (*tp) == VAR_DECL)
15945     {
15946       struct varpool_node *node = varpool_get_node (*tp);
15947       if (!node || !node->needed)
15948         return *tp;
15949     }
15950   else if (TREE_CODE (*tp) == FUNCTION_DECL
15951            && (!DECL_EXTERNAL (*tp) || DECL_DECLARED_INLINE_P (*tp)))
15952     {
15953       /* The call graph machinery must have finished analyzing,
15954          optimizing and gimplifying the CU by now.
15955          So if *TP has no call graph node associated
15956          to it, it means *TP will not be emitted.  */
15957       if (!cgraph_get_node (*tp))
15958         return *tp;
15959     }
15960   else if (TREE_CODE (*tp) == STRING_CST && !TREE_ASM_WRITTEN (*tp))
15961     return *tp;
15962
15963   return NULL_TREE;
15964 }
15965
15966 /* Generate an RTL constant from a decl initializer INIT with decl type TYPE,
15967    for use in a later add_const_value_attribute call.  */
15968
15969 static rtx
15970 rtl_for_decl_init (tree init, tree type)
15971 {
15972   rtx rtl = NULL_RTX;
15973
15974   /* If a variable is initialized with a string constant without embedded
15975      zeros, build CONST_STRING.  */
15976   if (TREE_CODE (init) == STRING_CST && TREE_CODE (type) == ARRAY_TYPE)
15977     {
15978       tree enttype = TREE_TYPE (type);
15979       tree domain = TYPE_DOMAIN (type);
15980       enum machine_mode mode = TYPE_MODE (enttype);
15981
15982       if (GET_MODE_CLASS (mode) == MODE_INT && GET_MODE_SIZE (mode) == 1
15983           && domain
15984           && integer_zerop (TYPE_MIN_VALUE (domain))
15985           && compare_tree_int (TYPE_MAX_VALUE (domain),
15986                                TREE_STRING_LENGTH (init) - 1) == 0
15987           && ((size_t) TREE_STRING_LENGTH (init)
15988               == strlen (TREE_STRING_POINTER (init)) + 1))
15989         {
15990           rtl = gen_rtx_CONST_STRING (VOIDmode,
15991                                       ggc_strdup (TREE_STRING_POINTER (init)));
15992           rtl = gen_rtx_MEM (BLKmode, rtl);
15993           MEM_READONLY_P (rtl) = 1;
15994         }
15995     }
15996   /* Other aggregates, and complex values, could be represented using
15997      CONCAT: FIXME!  */
15998   else if (AGGREGATE_TYPE_P (type) || TREE_CODE (type) == COMPLEX_TYPE)
15999     ;
16000   /* Vectors only work if their mode is supported by the target.
16001      FIXME: generic vectors ought to work too.  */
16002   else if (TREE_CODE (type) == VECTOR_TYPE && TYPE_MODE (type) == BLKmode)
16003     ;
16004   /* If the initializer is something that we know will expand into an
16005      immediate RTL constant, expand it now.  We must be careful not to
16006      reference variables which won't be output.  */
16007   else if (initializer_constant_valid_p (init, type)
16008            && ! walk_tree (&init, reference_to_unused, NULL, NULL))
16009     {
16010       /* Convert vector CONSTRUCTOR initializers to VECTOR_CST if
16011          possible.  */
16012       if (TREE_CODE (type) == VECTOR_TYPE)
16013         switch (TREE_CODE (init))
16014           {
16015           case VECTOR_CST:
16016             break;
16017           case CONSTRUCTOR:
16018             if (TREE_CONSTANT (init))
16019               {
16020                 VEC(constructor_elt,gc) *elts = CONSTRUCTOR_ELTS (init);
16021                 bool constant_p = true;
16022                 tree value;
16023                 unsigned HOST_WIDE_INT ix;
16024
16025                 /* Even when ctor is constant, it might contain non-*_CST
16026                    elements (e.g. { 1.0/0.0 - 1.0/0.0, 0.0 }) and those don't
16027                    belong into VECTOR_CST nodes.  */
16028                 FOR_EACH_CONSTRUCTOR_VALUE (elts, ix, value)
16029                   if (!CONSTANT_CLASS_P (value))
16030                     {
16031                       constant_p = false;
16032                       break;
16033                     }
16034
16035                 if (constant_p)
16036                   {
16037                     init = build_vector_from_ctor (type, elts);
16038                     break;
16039                   }
16040               }
16041             /* FALLTHRU */
16042
16043           default:
16044             return NULL;
16045           }
16046
16047       rtl = expand_expr (init, NULL_RTX, VOIDmode, EXPAND_INITIALIZER);
16048
16049       /* If expand_expr returns a MEM, it wasn't immediate.  */
16050       gcc_assert (!rtl || !MEM_P (rtl));
16051     }
16052
16053   return rtl;
16054 }
16055
16056 /* Generate RTL for the variable DECL to represent its location.  */
16057
16058 static rtx
16059 rtl_for_decl_location (tree decl)
16060 {
16061   rtx rtl;
16062
16063   /* Here we have to decide where we are going to say the parameter "lives"
16064      (as far as the debugger is concerned).  We only have a couple of
16065      choices.  GCC provides us with DECL_RTL and with DECL_INCOMING_RTL.
16066
16067      DECL_RTL normally indicates where the parameter lives during most of the
16068      activation of the function.  If optimization is enabled however, this
16069      could be either NULL or else a pseudo-reg.  Both of those cases indicate
16070      that the parameter doesn't really live anywhere (as far as the code
16071      generation parts of GCC are concerned) during most of the function's
16072      activation.  That will happen (for example) if the parameter is never
16073      referenced within the function.
16074
16075      We could just generate a location descriptor here for all non-NULL
16076      non-pseudo values of DECL_RTL and ignore all of the rest, but we can be
16077      a little nicer than that if we also consider DECL_INCOMING_RTL in cases
16078      where DECL_RTL is NULL or is a pseudo-reg.
16079
16080      Note however that we can only get away with using DECL_INCOMING_RTL as
16081      a backup substitute for DECL_RTL in certain limited cases.  In cases
16082      where DECL_ARG_TYPE (decl) indicates the same type as TREE_TYPE (decl),
16083      we can be sure that the parameter was passed using the same type as it is
16084      declared to have within the function, and that its DECL_INCOMING_RTL
16085      points us to a place where a value of that type is passed.
16086
16087      In cases where DECL_ARG_TYPE (decl) and TREE_TYPE (decl) are different,
16088      we cannot (in general) use DECL_INCOMING_RTL as a substitute for DECL_RTL
16089      because in these cases DECL_INCOMING_RTL points us to a value of some
16090      type which is *different* from the type of the parameter itself.  Thus,
16091      if we tried to use DECL_INCOMING_RTL to generate a location attribute in
16092      such cases, the debugger would end up (for example) trying to fetch a
16093      `float' from a place which actually contains the first part of a
16094      `double'.  That would lead to really incorrect and confusing
16095      output at debug-time.
16096
16097      So, in general, we *do not* use DECL_INCOMING_RTL as a backup for DECL_RTL
16098      in cases where DECL_ARG_TYPE (decl) != TREE_TYPE (decl).  There
16099      are a couple of exceptions however.  On little-endian machines we can
16100      get away with using DECL_INCOMING_RTL even when DECL_ARG_TYPE (decl) is
16101      not the same as TREE_TYPE (decl), but only when DECL_ARG_TYPE (decl) is
16102      an integral type that is smaller than TREE_TYPE (decl). These cases arise
16103      when (on a little-endian machine) a non-prototyped function has a
16104      parameter declared to be of type `short' or `char'.  In such cases,
16105      TREE_TYPE (decl) will be `short' or `char', DECL_ARG_TYPE (decl) will
16106      be `int', and DECL_INCOMING_RTL will point to the lowest-order byte of the
16107      passed `int' value.  If the debugger then uses that address to fetch
16108      a `short' or a `char' (on a little-endian machine) the result will be
16109      the correct data, so we allow for such exceptional cases below.
16110
16111      Note that our goal here is to describe the place where the given formal
16112      parameter lives during most of the function's activation (i.e. between the
16113      end of the prologue and the start of the epilogue).  We'll do that as best
16114      as we can. Note however that if the given formal parameter is modified
16115      sometime during the execution of the function, then a stack backtrace (at
16116      debug-time) will show the function as having been called with the *new*
16117      value rather than the value which was originally passed in.  This happens
16118      rarely enough that it is not a major problem, but it *is* a problem, and
16119      I'd like to fix it.
16120
16121      A future version of dwarf2out.c may generate two additional attributes for
16122      any given DW_TAG_formal_parameter DIE which will describe the "passed
16123      type" and the "passed location" for the given formal parameter in addition
16124      to the attributes we now generate to indicate the "declared type" and the
16125      "active location" for each parameter.  This additional set of attributes
16126      could be used by debuggers for stack backtraces. Separately, note that
16127      sometimes DECL_RTL can be NULL and DECL_INCOMING_RTL can be NULL also.
16128      This happens (for example) for inlined-instances of inline function formal
16129      parameters which are never referenced.  This really shouldn't be
16130      happening.  All PARM_DECL nodes should get valid non-NULL
16131      DECL_INCOMING_RTL values.  FIXME.  */
16132
16133   /* Use DECL_RTL as the "location" unless we find something better.  */
16134   rtl = DECL_RTL_IF_SET (decl);
16135
16136   /* When generating abstract instances, ignore everything except
16137      constants, symbols living in memory, and symbols living in
16138      fixed registers.  */
16139   if (! reload_completed)
16140     {
16141       if (rtl
16142           && (CONSTANT_P (rtl)
16143               || (MEM_P (rtl)
16144                   && CONSTANT_P (XEXP (rtl, 0)))
16145               || (REG_P (rtl)
16146                   && TREE_CODE (decl) == VAR_DECL
16147                   && TREE_STATIC (decl))))
16148         {
16149           rtl = targetm.delegitimize_address (rtl);
16150           return rtl;
16151         }
16152       rtl = NULL_RTX;
16153     }
16154   else if (TREE_CODE (decl) == PARM_DECL)
16155     {
16156       if (rtl == NULL_RTX || is_pseudo_reg (rtl))
16157         {
16158           tree declared_type = TREE_TYPE (decl);
16159           tree passed_type = DECL_ARG_TYPE (decl);
16160           enum machine_mode dmode = TYPE_MODE (declared_type);
16161           enum machine_mode pmode = TYPE_MODE (passed_type);
16162
16163           /* This decl represents a formal parameter which was optimized out.
16164              Note that DECL_INCOMING_RTL may be NULL in here, but we handle
16165              all cases where (rtl == NULL_RTX) just below.  */
16166           if (dmode == pmode)
16167             rtl = DECL_INCOMING_RTL (decl);
16168           else if (SCALAR_INT_MODE_P (dmode)
16169                    && GET_MODE_SIZE (dmode) <= GET_MODE_SIZE (pmode)
16170                    && DECL_INCOMING_RTL (decl))
16171             {
16172               rtx inc = DECL_INCOMING_RTL (decl);
16173               if (REG_P (inc))
16174                 rtl = inc;
16175               else if (MEM_P (inc))
16176                 {
16177                   if (BYTES_BIG_ENDIAN)
16178                     rtl = adjust_address_nv (inc, dmode,
16179                                              GET_MODE_SIZE (pmode)
16180                                              - GET_MODE_SIZE (dmode));
16181                   else
16182                     rtl = inc;
16183                 }
16184             }
16185         }
16186
16187       /* If the parm was passed in registers, but lives on the stack, then
16188          make a big endian correction if the mode of the type of the
16189          parameter is not the same as the mode of the rtl.  */
16190       /* ??? This is the same series of checks that are made in dbxout.c before
16191          we reach the big endian correction code there.  It isn't clear if all
16192          of these checks are necessary here, but keeping them all is the safe
16193          thing to do.  */
16194       else if (MEM_P (rtl)
16195                && XEXP (rtl, 0) != const0_rtx
16196                && ! CONSTANT_P (XEXP (rtl, 0))
16197                /* Not passed in memory.  */
16198                && !MEM_P (DECL_INCOMING_RTL (decl))
16199                /* Not passed by invisible reference.  */
16200                && (!REG_P (XEXP (rtl, 0))
16201                    || REGNO (XEXP (rtl, 0)) == HARD_FRAME_POINTER_REGNUM
16202                    || REGNO (XEXP (rtl, 0)) == STACK_POINTER_REGNUM
16203 #if ARG_POINTER_REGNUM != HARD_FRAME_POINTER_REGNUM
16204                    || REGNO (XEXP (rtl, 0)) == ARG_POINTER_REGNUM
16205 #endif
16206                      )
16207                /* Big endian correction check.  */
16208                && BYTES_BIG_ENDIAN
16209                && TYPE_MODE (TREE_TYPE (decl)) != GET_MODE (rtl)
16210                && (GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (decl)))
16211                    < UNITS_PER_WORD))
16212         {
16213           int offset = (UNITS_PER_WORD
16214                         - GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (decl))));
16215
16216           rtl = gen_rtx_MEM (TYPE_MODE (TREE_TYPE (decl)),
16217                              plus_constant (XEXP (rtl, 0), offset));
16218         }
16219     }
16220   else if (TREE_CODE (decl) == VAR_DECL
16221            && rtl
16222            && MEM_P (rtl)
16223            && GET_MODE (rtl) != TYPE_MODE (TREE_TYPE (decl))
16224            && BYTES_BIG_ENDIAN)
16225     {
16226       int rsize = GET_MODE_SIZE (GET_MODE (rtl));
16227       int dsize = GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (decl)));
16228
16229       /* If a variable is declared "register" yet is smaller than
16230          a register, then if we store the variable to memory, it
16231          looks like we're storing a register-sized value, when in
16232          fact we are not.  We need to adjust the offset of the
16233          storage location to reflect the actual value's bytes,
16234          else gdb will not be able to display it.  */
16235       if (rsize > dsize)
16236         rtl = gen_rtx_MEM (TYPE_MODE (TREE_TYPE (decl)),
16237                            plus_constant (XEXP (rtl, 0), rsize-dsize));
16238     }
16239
16240   /* A variable with no DECL_RTL but a DECL_INITIAL is a compile-time constant,
16241      and will have been substituted directly into all expressions that use it.
16242      C does not have such a concept, but C++ and other languages do.  */
16243   if (!rtl && TREE_CODE (decl) == VAR_DECL && DECL_INITIAL (decl))
16244     rtl = rtl_for_decl_init (DECL_INITIAL (decl), TREE_TYPE (decl));
16245
16246   if (rtl)
16247     rtl = targetm.delegitimize_address (rtl);
16248
16249   /* If we don't look past the constant pool, we risk emitting a
16250      reference to a constant pool entry that isn't referenced from
16251      code, and thus is not emitted.  */
16252   if (rtl)
16253     rtl = avoid_constant_pool_reference (rtl);
16254
16255   /* Try harder to get a rtl.  If this symbol ends up not being emitted
16256      in the current CU, resolve_addr will remove the expression referencing
16257      it.  */
16258   if (rtl == NULL_RTX
16259       && TREE_CODE (decl) == VAR_DECL
16260       && !DECL_EXTERNAL (decl)
16261       && TREE_STATIC (decl)
16262       && DECL_NAME (decl)
16263       && !DECL_HARD_REGISTER (decl)
16264       && DECL_MODE (decl) != VOIDmode)
16265     {
16266       rtl = make_decl_rtl_for_debug (decl);
16267       if (!MEM_P (rtl)
16268           || GET_CODE (XEXP (rtl, 0)) != SYMBOL_REF
16269           || SYMBOL_REF_DECL (XEXP (rtl, 0)) != decl)
16270         rtl = NULL_RTX;
16271     }
16272
16273   return rtl;
16274 }
16275
16276 /* Check whether decl is a Fortran COMMON symbol.  If not, NULL_TREE is
16277    returned.  If so, the decl for the COMMON block is returned, and the
16278    value is the offset into the common block for the symbol.  */
16279
16280 static tree
16281 fortran_common (tree decl, HOST_WIDE_INT *value)
16282 {
16283   tree val_expr, cvar;
16284   enum machine_mode mode;
16285   HOST_WIDE_INT bitsize, bitpos;
16286   tree offset;
16287   int volatilep = 0, unsignedp = 0;
16288
16289   /* If the decl isn't a VAR_DECL, or if it isn't static, or if
16290      it does not have a value (the offset into the common area), or if it
16291      is thread local (as opposed to global) then it isn't common, and shouldn't
16292      be handled as such.  */
16293   if (TREE_CODE (decl) != VAR_DECL
16294       || !TREE_STATIC (decl)
16295       || !DECL_HAS_VALUE_EXPR_P (decl)
16296       || !is_fortran ())
16297     return NULL_TREE;
16298
16299   val_expr = DECL_VALUE_EXPR (decl);
16300   if (TREE_CODE (val_expr) != COMPONENT_REF)
16301     return NULL_TREE;
16302
16303   cvar = get_inner_reference (val_expr, &bitsize, &bitpos, &offset,
16304                               &mode, &unsignedp, &volatilep, true);
16305
16306   if (cvar == NULL_TREE
16307       || TREE_CODE (cvar) != VAR_DECL
16308       || DECL_ARTIFICIAL (cvar)
16309       || !TREE_PUBLIC (cvar))
16310     return NULL_TREE;
16311
16312   *value = 0;
16313   if (offset != NULL)
16314     {
16315       if (!host_integerp (offset, 0))
16316         return NULL_TREE;
16317       *value = tree_low_cst (offset, 0);
16318     }
16319   if (bitpos != 0)
16320     *value += bitpos / BITS_PER_UNIT;
16321
16322   return cvar;
16323 }
16324
16325 /* Generate *either* a DW_AT_location attribute or else a DW_AT_const_value
16326    data attribute for a variable or a parameter.  We generate the
16327    DW_AT_const_value attribute only in those cases where the given variable
16328    or parameter does not have a true "location" either in memory or in a
16329    register.  This can happen (for example) when a constant is passed as an
16330    actual argument in a call to an inline function.  (It's possible that
16331    these things can crop up in other ways also.)  Note that one type of
16332    constant value which can be passed into an inlined function is a constant
16333    pointer.  This can happen for example if an actual argument in an inlined
16334    function call evaluates to a compile-time constant address.  */
16335
16336 static bool
16337 add_location_or_const_value_attribute (dw_die_ref die, tree decl,
16338                                        enum dwarf_attribute attr)
16339 {
16340   rtx rtl;
16341   dw_loc_list_ref list;
16342   var_loc_list *loc_list;
16343
16344   if (TREE_CODE (decl) == ERROR_MARK)
16345     return false;
16346
16347   gcc_assert (TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == PARM_DECL
16348               || TREE_CODE (decl) == RESULT_DECL);
16349
16350   /* Try to get some constant RTL for this decl, and use that as the value of
16351      the location.  */
16352
16353   rtl = rtl_for_decl_location (decl);
16354   if (rtl && (CONSTANT_P (rtl) || GET_CODE (rtl) == CONST_STRING)
16355       && add_const_value_attribute (die, rtl))
16356     return true;
16357
16358   /* See if we have single element location list that is equivalent to
16359      a constant value.  That way we are better to use add_const_value_attribute
16360      rather than expanding constant value equivalent.  */
16361   loc_list = lookup_decl_loc (decl);
16362   if (loc_list
16363       && loc_list->first
16364       && loc_list->first->next == NULL
16365       && NOTE_P (loc_list->first->loc)
16366       && NOTE_VAR_LOCATION (loc_list->first->loc)
16367       && NOTE_VAR_LOCATION_LOC (loc_list->first->loc))
16368     {
16369       struct var_loc_node *node;
16370
16371       node = loc_list->first;
16372       rtl = NOTE_VAR_LOCATION_LOC (node->loc);
16373       if (GET_CODE (rtl) == EXPR_LIST)
16374         rtl = XEXP (rtl, 0);
16375       if ((CONSTANT_P (rtl) || GET_CODE (rtl) == CONST_STRING)
16376           && add_const_value_attribute (die, rtl))
16377          return true;
16378     }
16379   list = loc_list_from_tree (decl, decl_by_reference_p (decl) ? 0 : 2);
16380   if (list)
16381     {
16382       add_AT_location_description (die, attr, list);
16383       return true;
16384     }
16385   /* None of that worked, so it must not really have a location;
16386      try adding a constant value attribute from the DECL_INITIAL.  */
16387   return tree_add_const_value_attribute_for_decl (die, decl);
16388 }
16389
16390 /* Add VARIABLE and DIE into deferred locations list.  */
16391
16392 static void
16393 defer_location (tree variable, dw_die_ref die)
16394 {
16395   deferred_locations entry;
16396   entry.variable = variable;
16397   entry.die = die;
16398   VEC_safe_push (deferred_locations, gc, deferred_locations_list, &entry);
16399 }
16400
16401 /* Helper function for tree_add_const_value_attribute.  Natively encode
16402    initializer INIT into an array.  Return true if successful.  */
16403
16404 static bool
16405 native_encode_initializer (tree init, unsigned char *array, int size)
16406 {
16407   tree type;
16408
16409   if (init == NULL_TREE)
16410     return false;
16411
16412   STRIP_NOPS (init);
16413   switch (TREE_CODE (init))
16414     {
16415     case STRING_CST:
16416       type = TREE_TYPE (init);
16417       if (TREE_CODE (type) == ARRAY_TYPE)
16418         {
16419           tree enttype = TREE_TYPE (type);
16420           enum machine_mode mode = TYPE_MODE (enttype);
16421
16422           if (GET_MODE_CLASS (mode) != MODE_INT || GET_MODE_SIZE (mode) != 1)
16423             return false;
16424           if (int_size_in_bytes (type) != size)
16425             return false;
16426           if (size > TREE_STRING_LENGTH (init))
16427             {
16428               memcpy (array, TREE_STRING_POINTER (init),
16429                       TREE_STRING_LENGTH (init));
16430               memset (array + TREE_STRING_LENGTH (init),
16431                       '\0', size - TREE_STRING_LENGTH (init));
16432             }
16433           else
16434             memcpy (array, TREE_STRING_POINTER (init), size);
16435           return true;
16436         }
16437       return false;
16438     case CONSTRUCTOR:
16439       type = TREE_TYPE (init);
16440       if (int_size_in_bytes (type) != size)
16441         return false;
16442       if (TREE_CODE (type) == ARRAY_TYPE)
16443         {
16444           HOST_WIDE_INT min_index;
16445           unsigned HOST_WIDE_INT cnt;
16446           int curpos = 0, fieldsize;
16447           constructor_elt *ce;
16448
16449           if (TYPE_DOMAIN (type) == NULL_TREE
16450               || !host_integerp (TYPE_MIN_VALUE (TYPE_DOMAIN (type)), 0))
16451             return false;
16452
16453           fieldsize = int_size_in_bytes (TREE_TYPE (type));
16454           if (fieldsize <= 0)
16455             return false;
16456
16457           min_index = tree_low_cst (TYPE_MIN_VALUE (TYPE_DOMAIN (type)), 0);
16458           memset (array, '\0', size);
16459           for (cnt = 0;
16460                VEC_iterate (constructor_elt, CONSTRUCTOR_ELTS (init), cnt, ce);
16461                cnt++)
16462             {
16463               tree val = ce->value;
16464               tree index = ce->index;
16465               int pos = curpos;
16466               if (index && TREE_CODE (index) == RANGE_EXPR)
16467                 pos = (tree_low_cst (TREE_OPERAND (index, 0), 0) - min_index)
16468                       * fieldsize;
16469               else if (index)
16470                 pos = (tree_low_cst (index, 0) - min_index) * fieldsize;
16471
16472               if (val)
16473                 {
16474                   STRIP_NOPS (val);
16475                   if (!native_encode_initializer (val, array + pos, fieldsize))
16476                     return false;
16477                 }
16478               curpos = pos + fieldsize;
16479               if (index && TREE_CODE (index) == RANGE_EXPR)
16480                 {
16481                   int count = tree_low_cst (TREE_OPERAND (index, 1), 0)
16482                               - tree_low_cst (TREE_OPERAND (index, 0), 0);
16483                   while (count > 0)
16484                     {
16485                       if (val)
16486                         memcpy (array + curpos, array + pos, fieldsize);
16487                       curpos += fieldsize;
16488                     }
16489                 }
16490               gcc_assert (curpos <= size);
16491             }
16492           return true;
16493         }
16494       else if (TREE_CODE (type) == RECORD_TYPE
16495                || TREE_CODE (type) == UNION_TYPE)
16496         {
16497           tree field = NULL_TREE;
16498           unsigned HOST_WIDE_INT cnt;
16499           constructor_elt *ce;
16500
16501           if (int_size_in_bytes (type) != size)
16502             return false;
16503
16504           if (TREE_CODE (type) == RECORD_TYPE)
16505             field = TYPE_FIELDS (type);
16506
16507           for (cnt = 0;
16508                VEC_iterate (constructor_elt, CONSTRUCTOR_ELTS (init), cnt, ce);
16509                cnt++, field = field ? TREE_CHAIN (field) : 0)
16510             {
16511               tree val = ce->value;
16512               int pos, fieldsize;
16513
16514               if (ce->index != 0)
16515                 field = ce->index;
16516
16517               if (val)
16518                 STRIP_NOPS (val);
16519
16520               if (field == NULL_TREE || DECL_BIT_FIELD (field))
16521                 return false;
16522
16523               if (TREE_CODE (TREE_TYPE (field)) == ARRAY_TYPE
16524                   && TYPE_DOMAIN (TREE_TYPE (field))
16525                   && ! TYPE_MAX_VALUE (TYPE_DOMAIN (TREE_TYPE (field))))
16526                 return false;
16527               else if (DECL_SIZE_UNIT (field) == NULL_TREE
16528                        || !host_integerp (DECL_SIZE_UNIT (field), 0))
16529                 return false;
16530               fieldsize = tree_low_cst (DECL_SIZE_UNIT (field), 0);
16531               pos = int_byte_position (field);
16532               gcc_assert (pos + fieldsize <= size);
16533               if (val
16534                   && !native_encode_initializer (val, array + pos, fieldsize))
16535                 return false;
16536             }
16537           return true;
16538         }
16539       return false;
16540     case VIEW_CONVERT_EXPR:
16541     case NON_LVALUE_EXPR:
16542       return native_encode_initializer (TREE_OPERAND (init, 0), array, size);
16543     default:
16544       return native_encode_expr (init, array, size) == size;
16545     }
16546 }
16547
16548 /* Attach a DW_AT_const_value attribute to DIE. The value of the
16549    attribute is the const value T.  */
16550
16551 static bool
16552 tree_add_const_value_attribute (dw_die_ref die, tree t)
16553 {
16554   tree init;
16555   tree type = TREE_TYPE (t);
16556   rtx rtl;
16557
16558   if (!t || !TREE_TYPE (t) || TREE_TYPE (t) == error_mark_node)
16559     return false;
16560
16561   init = t;
16562   gcc_assert (!DECL_P (init));
16563
16564   rtl = rtl_for_decl_init (init, type);
16565   if (rtl)
16566     return add_const_value_attribute (die, rtl);
16567   /* If the host and target are sane, try harder.  */
16568   else if (CHAR_BIT == 8 && BITS_PER_UNIT == 8
16569            && initializer_constant_valid_p (init, type))
16570     {
16571       HOST_WIDE_INT size = int_size_in_bytes (TREE_TYPE (init));
16572       if (size > 0 && (int) size == size)
16573         {
16574           unsigned char *array = (unsigned char *)
16575             ggc_alloc_cleared_atomic (size);
16576
16577           if (native_encode_initializer (init, array, size))
16578             {
16579               add_AT_vec (die, DW_AT_const_value, size, 1, array);
16580               return true;
16581             }
16582         }
16583     }
16584   return false;
16585 }
16586
16587 /* Attach a DW_AT_const_value attribute to VAR_DIE. The value of the
16588    attribute is the const value of T, where T is an integral constant
16589    variable with static storage duration
16590    (so it can't be a PARM_DECL or a RESULT_DECL).  */
16591
16592 static bool
16593 tree_add_const_value_attribute_for_decl (dw_die_ref var_die, tree decl)
16594 {
16595
16596   if (!decl
16597       || (TREE_CODE (decl) != VAR_DECL
16598           && TREE_CODE (decl) != CONST_DECL))
16599     return false;
16600
16601     if (TREE_READONLY (decl)
16602         && ! TREE_THIS_VOLATILE (decl)
16603         && DECL_INITIAL (decl))
16604       /* OK */;
16605     else
16606       return false;
16607
16608   /* Don't add DW_AT_const_value if abstract origin already has one.  */
16609   if (get_AT (var_die, DW_AT_const_value))
16610     return false;
16611
16612   return tree_add_const_value_attribute (var_die, DECL_INITIAL (decl));
16613 }
16614
16615 /* Convert the CFI instructions for the current function into a
16616    location list.  This is used for DW_AT_frame_base when we targeting
16617    a dwarf2 consumer that does not support the dwarf3
16618    DW_OP_call_frame_cfa.  OFFSET is a constant to be added to all CFA
16619    expressions.  */
16620
16621 static dw_loc_list_ref
16622 convert_cfa_to_fb_loc_list (HOST_WIDE_INT offset)
16623 {
16624   dw_fde_ref fde;
16625   dw_loc_list_ref list, *list_tail;
16626   dw_cfi_ref cfi;
16627   dw_cfa_location last_cfa, next_cfa;
16628   const char *start_label, *last_label, *section;
16629   dw_cfa_location remember;
16630
16631   fde = current_fde ();
16632   gcc_assert (fde != NULL);
16633
16634   section = secname_for_decl (current_function_decl);
16635   list_tail = &list;
16636   list = NULL;
16637
16638   memset (&next_cfa, 0, sizeof (next_cfa));
16639   next_cfa.reg = INVALID_REGNUM;
16640   remember = next_cfa;
16641
16642   start_label = fde->dw_fde_begin;
16643
16644   /* ??? Bald assumption that the CIE opcode list does not contain
16645      advance opcodes.  */
16646   for (cfi = cie_cfi_head; cfi; cfi = cfi->dw_cfi_next)
16647     lookup_cfa_1 (cfi, &next_cfa, &remember);
16648
16649   last_cfa = next_cfa;
16650   last_label = start_label;
16651
16652   for (cfi = fde->dw_fde_cfi; cfi; cfi = cfi->dw_cfi_next)
16653     switch (cfi->dw_cfi_opc)
16654       {
16655       case DW_CFA_set_loc:
16656       case DW_CFA_advance_loc1:
16657       case DW_CFA_advance_loc2:
16658       case DW_CFA_advance_loc4:
16659         if (!cfa_equal_p (&last_cfa, &next_cfa))
16660           {
16661             *list_tail = new_loc_list (build_cfa_loc (&last_cfa, offset),
16662                                        start_label, last_label, section);
16663
16664             list_tail = &(*list_tail)->dw_loc_next;
16665             last_cfa = next_cfa;
16666             start_label = last_label;
16667           }
16668         last_label = cfi->dw_cfi_oprnd1.dw_cfi_addr;
16669         break;
16670
16671       case DW_CFA_advance_loc:
16672         /* The encoding is complex enough that we should never emit this.  */
16673         gcc_unreachable ();
16674
16675       default:
16676         lookup_cfa_1 (cfi, &next_cfa, &remember);
16677         break;
16678       }
16679
16680   if (!cfa_equal_p (&last_cfa, &next_cfa))
16681     {
16682       *list_tail = new_loc_list (build_cfa_loc (&last_cfa, offset),
16683                                  start_label, last_label, section);
16684       list_tail = &(*list_tail)->dw_loc_next;
16685       start_label = last_label;
16686     }
16687
16688   *list_tail = new_loc_list (build_cfa_loc (&next_cfa, offset),
16689                              start_label, fde->dw_fde_end, section);
16690
16691   if (list && list->dw_loc_next)
16692     gen_llsym (list);
16693
16694   return list;
16695 }
16696
16697 /* Compute a displacement from the "steady-state frame pointer" to the
16698    frame base (often the same as the CFA), and store it in
16699    frame_pointer_fb_offset.  OFFSET is added to the displacement
16700    before the latter is negated.  */
16701
16702 static void
16703 compute_frame_pointer_to_fb_displacement (HOST_WIDE_INT offset)
16704 {
16705   rtx reg, elim;
16706
16707 #ifdef FRAME_POINTER_CFA_OFFSET
16708   reg = frame_pointer_rtx;
16709   offset += FRAME_POINTER_CFA_OFFSET (current_function_decl);
16710 #else
16711   reg = arg_pointer_rtx;
16712   offset += ARG_POINTER_CFA_OFFSET (current_function_decl);
16713 #endif
16714
16715   elim = eliminate_regs (reg, VOIDmode, NULL_RTX);
16716   if (GET_CODE (elim) == PLUS)
16717     {
16718       offset += INTVAL (XEXP (elim, 1));
16719       elim = XEXP (elim, 0);
16720     }
16721
16722   gcc_assert ((SUPPORTS_STACK_ALIGNMENT
16723                && (elim == hard_frame_pointer_rtx
16724                    || elim == stack_pointer_rtx))
16725               || elim == (frame_pointer_needed
16726                           ? hard_frame_pointer_rtx
16727                           : stack_pointer_rtx));
16728
16729   frame_pointer_fb_offset = -offset;
16730 }
16731
16732 /* Generate a DW_AT_name attribute given some string value to be included as
16733    the value of the attribute.  */
16734
16735 static void
16736 add_name_attribute (dw_die_ref die, const char *name_string)
16737 {
16738   if (name_string != NULL && *name_string != 0)
16739     {
16740       if (demangle_name_func)
16741         name_string = (*demangle_name_func) (name_string);
16742
16743       add_AT_string (die, DW_AT_name, name_string);
16744     }
16745 }
16746
16747 /* Generate a DW_AT_comp_dir attribute for DIE.  */
16748
16749 static void
16750 add_comp_dir_attribute (dw_die_ref die)
16751 {
16752   const char *wd = get_src_pwd ();
16753   char *wd1;
16754
16755   if (wd == NULL)
16756     return;
16757
16758   if (DWARF2_DIR_SHOULD_END_WITH_SEPARATOR)
16759     {
16760       int wdlen;
16761
16762       wdlen = strlen (wd);
16763       wd1 = (char *) ggc_alloc_atomic (wdlen + 2);
16764       strcpy (wd1, wd);
16765       wd1 [wdlen] = DIR_SEPARATOR;
16766       wd1 [wdlen + 1] = 0;
16767       wd = wd1;
16768     }
16769
16770     add_AT_string (die, DW_AT_comp_dir, remap_debug_filename (wd));
16771 }
16772
16773 /* Return the default for DW_AT_lower_bound, or -1 if there is not any
16774    default.  */
16775
16776 static int
16777 lower_bound_default (void)
16778 {
16779   switch (get_AT_unsigned (comp_unit_die, DW_AT_language))
16780     {
16781     case DW_LANG_C:
16782     case DW_LANG_C89:
16783     case DW_LANG_C99:
16784     case DW_LANG_C_plus_plus:
16785     case DW_LANG_ObjC:
16786     case DW_LANG_ObjC_plus_plus:
16787     case DW_LANG_Java:
16788       return 0;
16789     case DW_LANG_Fortran77:
16790     case DW_LANG_Fortran90:
16791     case DW_LANG_Fortran95:
16792       return 1;
16793     case DW_LANG_UPC:
16794     case DW_LANG_D:
16795     case DW_LANG_Python:
16796       return dwarf_version >= 4 ? 0 : -1;
16797     case DW_LANG_Ada95:
16798     case DW_LANG_Ada83:
16799     case DW_LANG_Cobol74:
16800     case DW_LANG_Cobol85:
16801     case DW_LANG_Pascal83:
16802     case DW_LANG_Modula2:
16803     case DW_LANG_PLI:
16804       return dwarf_version >= 4 ? 1 : -1;
16805     default:
16806       return -1;
16807     }
16808 }
16809
16810 /* Given a tree node describing an array bound (either lower or upper) output
16811    a representation for that bound.  */
16812
16813 static void
16814 add_bound_info (dw_die_ref subrange_die, enum dwarf_attribute bound_attr, tree bound)
16815 {
16816   switch (TREE_CODE (bound))
16817     {
16818     case ERROR_MARK:
16819       return;
16820
16821     /* All fixed-bounds are represented by INTEGER_CST nodes.  */
16822     case INTEGER_CST:
16823       {
16824         unsigned int prec = simple_type_size_in_bits (TREE_TYPE (bound));
16825         int dflt;
16826
16827         /* Use the default if possible.  */
16828         if (bound_attr == DW_AT_lower_bound
16829             && host_integerp (bound, 0)
16830             && (dflt = lower_bound_default ()) != -1
16831             && tree_low_cst (bound, 0) == dflt)
16832           ;
16833
16834         /* Otherwise represent the bound as an unsigned value with the
16835            precision of its type.  The precision and signedness of the
16836            type will be necessary to re-interpret it unambiguously.  */
16837         else if (prec < HOST_BITS_PER_WIDE_INT)
16838           {
16839             unsigned HOST_WIDE_INT mask
16840               = ((unsigned HOST_WIDE_INT) 1 << prec) - 1;
16841             add_AT_unsigned (subrange_die, bound_attr,
16842                              TREE_INT_CST_LOW (bound) & mask);
16843           }
16844         else if (prec == HOST_BITS_PER_WIDE_INT
16845                  || TREE_INT_CST_HIGH (bound) == 0)
16846           add_AT_unsigned (subrange_die, bound_attr,
16847                            TREE_INT_CST_LOW (bound));
16848         else
16849           add_AT_double (subrange_die, bound_attr, TREE_INT_CST_HIGH (bound),
16850                          TREE_INT_CST_LOW (bound));
16851       }
16852       break;
16853
16854     CASE_CONVERT:
16855     case VIEW_CONVERT_EXPR:
16856       add_bound_info (subrange_die, bound_attr, TREE_OPERAND (bound, 0));
16857       break;
16858
16859     case SAVE_EXPR:
16860       break;
16861
16862     case VAR_DECL:
16863     case PARM_DECL:
16864     case RESULT_DECL:
16865       {
16866         dw_die_ref decl_die = lookup_decl_die (bound);
16867
16868         /* ??? Can this happen, or should the variable have been bound
16869            first?  Probably it can, since I imagine that we try to create
16870            the types of parameters in the order in which they exist in
16871            the list, and won't have created a forward reference to a
16872            later parameter.  */
16873         if (decl_die != NULL)
16874           {
16875             add_AT_die_ref (subrange_die, bound_attr, decl_die);
16876             break;
16877           }
16878       }
16879       /* FALLTHRU */
16880
16881     default:
16882       {
16883         /* Otherwise try to create a stack operation procedure to
16884            evaluate the value of the array bound.  */
16885
16886         dw_die_ref ctx, decl_die;
16887         dw_loc_list_ref list;
16888
16889         list = loc_list_from_tree (bound, 2);
16890         if (list == NULL || single_element_loc_list_p (list))
16891           {
16892             /* If DW_AT_*bound is not a reference nor constant, it is
16893                a DWARF expression rather than location description.
16894                For that loc_list_from_tree (bound, 0) is needed.
16895                If that fails to give a single element list,
16896                fall back to outputting this as a reference anyway.  */
16897             dw_loc_list_ref list2 = loc_list_from_tree (bound, 0);
16898             if (list2 && single_element_loc_list_p (list2))
16899               {
16900                 add_AT_loc (subrange_die, bound_attr, list2->expr);
16901                 break;
16902               }
16903           }
16904         if (list == NULL)
16905           break;
16906
16907         if (current_function_decl == 0)
16908           ctx = comp_unit_die;
16909         else
16910           ctx = lookup_decl_die (current_function_decl);
16911
16912         decl_die = new_die (DW_TAG_variable, ctx, bound);
16913         add_AT_flag (decl_die, DW_AT_artificial, 1);
16914         add_type_attribute (decl_die, TREE_TYPE (bound), 1, 0, ctx);
16915         add_AT_location_description (decl_die, DW_AT_location, list);
16916         add_AT_die_ref (subrange_die, bound_attr, decl_die);
16917         break;
16918       }
16919     }
16920 }
16921
16922 /* Add subscript info to TYPE_DIE, describing an array TYPE, collapsing
16923    possibly nested array subscripts in a flat sequence if COLLAPSE_P is true.
16924    Note that the block of subscript information for an array type also
16925    includes information about the element type of the given array type.  */
16926
16927 static void
16928 add_subscript_info (dw_die_ref type_die, tree type, bool collapse_p)
16929 {
16930   unsigned dimension_number;
16931   tree lower, upper;
16932   dw_die_ref subrange_die;
16933
16934   for (dimension_number = 0;
16935        TREE_CODE (type) == ARRAY_TYPE && (dimension_number == 0 || collapse_p);
16936        type = TREE_TYPE (type), dimension_number++)
16937     {
16938       tree domain = TYPE_DOMAIN (type);
16939
16940       if (TYPE_STRING_FLAG (type) && is_fortran () && dimension_number > 0)
16941         break;
16942
16943       /* Arrays come in three flavors: Unspecified bounds, fixed bounds,
16944          and (in GNU C only) variable bounds.  Handle all three forms
16945          here.  */
16946       subrange_die = new_die (DW_TAG_subrange_type, type_die, NULL);
16947       if (domain)
16948         {
16949           /* We have an array type with specified bounds.  */
16950           lower = TYPE_MIN_VALUE (domain);
16951           upper = TYPE_MAX_VALUE (domain);
16952
16953           /* Define the index type.  */
16954           if (TREE_TYPE (domain))
16955             {
16956               /* ??? This is probably an Ada unnamed subrange type.  Ignore the
16957                  TREE_TYPE field.  We can't emit debug info for this
16958                  because it is an unnamed integral type.  */
16959               if (TREE_CODE (domain) == INTEGER_TYPE
16960                   && TYPE_NAME (domain) == NULL_TREE
16961                   && TREE_CODE (TREE_TYPE (domain)) == INTEGER_TYPE
16962                   && TYPE_NAME (TREE_TYPE (domain)) == NULL_TREE)
16963                 ;
16964               else
16965                 add_type_attribute (subrange_die, TREE_TYPE (domain), 0, 0,
16966                                     type_die);
16967             }
16968
16969           /* ??? If upper is NULL, the array has unspecified length,
16970              but it does have a lower bound.  This happens with Fortran
16971                dimension arr(N:*)
16972              Since the debugger is definitely going to need to know N
16973              to produce useful results, go ahead and output the lower
16974              bound solo, and hope the debugger can cope.  */
16975
16976           add_bound_info (subrange_die, DW_AT_lower_bound, lower);
16977           if (upper)
16978             add_bound_info (subrange_die, DW_AT_upper_bound, upper);
16979         }
16980
16981       /* Otherwise we have an array type with an unspecified length.  The
16982          DWARF-2 spec does not say how to handle this; let's just leave out the
16983          bounds.  */
16984     }
16985 }
16986
16987 static void
16988 add_byte_size_attribute (dw_die_ref die, tree tree_node)
16989 {
16990   unsigned size;
16991
16992   switch (TREE_CODE (tree_node))
16993     {
16994     case ERROR_MARK:
16995       size = 0;
16996       break;
16997     case ENUMERAL_TYPE:
16998     case RECORD_TYPE:
16999     case UNION_TYPE:
17000     case QUAL_UNION_TYPE:
17001       size = int_size_in_bytes (tree_node);
17002       break;
17003     case FIELD_DECL:
17004       /* For a data member of a struct or union, the DW_AT_byte_size is
17005          generally given as the number of bytes normally allocated for an
17006          object of the *declared* type of the member itself.  This is true
17007          even for bit-fields.  */
17008       size = simple_type_size_in_bits (field_type (tree_node)) / BITS_PER_UNIT;
17009       break;
17010     default:
17011       gcc_unreachable ();
17012     }
17013
17014   /* Note that `size' might be -1 when we get to this point.  If it is, that
17015      indicates that the byte size of the entity in question is variable.  We
17016      have no good way of expressing this fact in Dwarf at the present time,
17017      so just let the -1 pass on through.  */
17018   add_AT_unsigned (die, DW_AT_byte_size, size);
17019 }
17020
17021 /* For a FIELD_DECL node which represents a bit-field, output an attribute
17022    which specifies the distance in bits from the highest order bit of the
17023    "containing object" for the bit-field to the highest order bit of the
17024    bit-field itself.
17025
17026    For any given bit-field, the "containing object" is a hypothetical object
17027    (of some integral or enum type) within which the given bit-field lives.  The
17028    type of this hypothetical "containing object" is always the same as the
17029    declared type of the individual bit-field itself.  The determination of the
17030    exact location of the "containing object" for a bit-field is rather
17031    complicated.  It's handled by the `field_byte_offset' function (above).
17032
17033    Note that it is the size (in bytes) of the hypothetical "containing object"
17034    which will be given in the DW_AT_byte_size attribute for this bit-field.
17035    (See `byte_size_attribute' above).  */
17036
17037 static inline void
17038 add_bit_offset_attribute (dw_die_ref die, tree decl)
17039 {
17040   HOST_WIDE_INT object_offset_in_bytes = field_byte_offset (decl);
17041   tree type = DECL_BIT_FIELD_TYPE (decl);
17042   HOST_WIDE_INT bitpos_int;
17043   HOST_WIDE_INT highest_order_object_bit_offset;
17044   HOST_WIDE_INT highest_order_field_bit_offset;
17045   HOST_WIDE_INT unsigned bit_offset;
17046
17047   /* Must be a field and a bit field.  */
17048   gcc_assert (type && TREE_CODE (decl) == FIELD_DECL);
17049
17050   /* We can't yet handle bit-fields whose offsets are variable, so if we
17051      encounter such things, just return without generating any attribute
17052      whatsoever.  Likewise for variable or too large size.  */
17053   if (! host_integerp (bit_position (decl), 0)
17054       || ! host_integerp (DECL_SIZE (decl), 1))
17055     return;
17056
17057   bitpos_int = int_bit_position (decl);
17058
17059   /* Note that the bit offset is always the distance (in bits) from the
17060      highest-order bit of the "containing object" to the highest-order bit of
17061      the bit-field itself.  Since the "high-order end" of any object or field
17062      is different on big-endian and little-endian machines, the computation
17063      below must take account of these differences.  */
17064   highest_order_object_bit_offset = object_offset_in_bytes * BITS_PER_UNIT;
17065   highest_order_field_bit_offset = bitpos_int;
17066
17067   if (! BYTES_BIG_ENDIAN)
17068     {
17069       highest_order_field_bit_offset += tree_low_cst (DECL_SIZE (decl), 0);
17070       highest_order_object_bit_offset += simple_type_size_in_bits (type);
17071     }
17072
17073   bit_offset
17074     = (! BYTES_BIG_ENDIAN
17075        ? highest_order_object_bit_offset - highest_order_field_bit_offset
17076        : highest_order_field_bit_offset - highest_order_object_bit_offset);
17077
17078   add_AT_unsigned (die, DW_AT_bit_offset, bit_offset);
17079 }
17080
17081 /* For a FIELD_DECL node which represents a bit field, output an attribute
17082    which specifies the length in bits of the given field.  */
17083
17084 static inline void
17085 add_bit_size_attribute (dw_die_ref die, tree decl)
17086 {
17087   /* Must be a field and a bit field.  */
17088   gcc_assert (TREE_CODE (decl) == FIELD_DECL
17089               && DECL_BIT_FIELD_TYPE (decl));
17090
17091   if (host_integerp (DECL_SIZE (decl), 1))
17092     add_AT_unsigned (die, DW_AT_bit_size, tree_low_cst (DECL_SIZE (decl), 1));
17093 }
17094
17095 /* If the compiled language is ANSI C, then add a 'prototyped'
17096    attribute, if arg types are given for the parameters of a function.  */
17097
17098 static inline void
17099 add_prototyped_attribute (dw_die_ref die, tree func_type)
17100 {
17101   if (get_AT_unsigned (comp_unit_die, DW_AT_language) == DW_LANG_C89
17102       && TYPE_ARG_TYPES (func_type) != NULL)
17103     add_AT_flag (die, DW_AT_prototyped, 1);
17104 }
17105
17106 /* Add an 'abstract_origin' attribute below a given DIE.  The DIE is found
17107    by looking in either the type declaration or object declaration
17108    equate table.  */
17109
17110 static inline dw_die_ref
17111 add_abstract_origin_attribute (dw_die_ref die, tree origin)
17112 {
17113   dw_die_ref origin_die = NULL;
17114
17115   if (TREE_CODE (origin) != FUNCTION_DECL)
17116     {
17117       /* We may have gotten separated from the block for the inlined
17118          function, if we're in an exception handler or some such; make
17119          sure that the abstract function has been written out.
17120
17121          Doing this for nested functions is wrong, however; functions are
17122          distinct units, and our context might not even be inline.  */
17123       tree fn = origin;
17124
17125       if (TYPE_P (fn))
17126         fn = TYPE_STUB_DECL (fn);
17127
17128       fn = decl_function_context (fn);
17129       if (fn)
17130         dwarf2out_abstract_function (fn);
17131     }
17132
17133   if (DECL_P (origin))
17134     origin_die = lookup_decl_die (origin);
17135   else if (TYPE_P (origin))
17136     origin_die = lookup_type_die (origin);
17137
17138   /* XXX: Functions that are never lowered don't always have correct block
17139      trees (in the case of java, they simply have no block tree, in some other
17140      languages).  For these functions, there is nothing we can really do to
17141      output correct debug info for inlined functions in all cases.  Rather
17142      than die, we'll just produce deficient debug info now, in that we will
17143      have variables without a proper abstract origin.  In the future, when all
17144      functions are lowered, we should re-add a gcc_assert (origin_die)
17145      here.  */
17146
17147   if (origin_die)
17148     add_AT_die_ref (die, DW_AT_abstract_origin, origin_die);
17149   return origin_die;
17150 }
17151
17152 /* We do not currently support the pure_virtual attribute.  */
17153
17154 static inline void
17155 add_pure_or_virtual_attribute (dw_die_ref die, tree func_decl)
17156 {
17157   if (DECL_VINDEX (func_decl))
17158     {
17159       add_AT_unsigned (die, DW_AT_virtuality, DW_VIRTUALITY_virtual);
17160
17161       if (host_integerp (DECL_VINDEX (func_decl), 0))
17162         add_AT_loc (die, DW_AT_vtable_elem_location,
17163                     new_loc_descr (DW_OP_constu,
17164                                    tree_low_cst (DECL_VINDEX (func_decl), 0),
17165                                    0));
17166
17167       /* GNU extension: Record what type this method came from originally.  */
17168       if (debug_info_level > DINFO_LEVEL_TERSE
17169           && DECL_CONTEXT (func_decl))
17170         add_AT_die_ref (die, DW_AT_containing_type,
17171                         lookup_type_die (DECL_CONTEXT (func_decl)));
17172     }
17173 }
17174 \f
17175 /* Add source coordinate attributes for the given decl.  */
17176
17177 static void
17178 add_src_coords_attributes (dw_die_ref die, tree decl)
17179 {
17180   expanded_location s = expand_location (DECL_SOURCE_LOCATION (decl));
17181
17182   add_AT_file (die, DW_AT_decl_file, lookup_filename (s.file));
17183   add_AT_unsigned (die, DW_AT_decl_line, s.line);
17184 }
17185
17186 /* Add a DW_AT_name attribute and source coordinate attribute for the
17187    given decl, but only if it actually has a name.  */
17188
17189 static void
17190 add_name_and_src_coords_attributes (dw_die_ref die, tree decl)
17191 {
17192   tree decl_name;
17193
17194   decl_name = DECL_NAME (decl);
17195   if (decl_name != NULL && IDENTIFIER_POINTER (decl_name) != NULL)
17196     {
17197       const char *name = dwarf2_name (decl, 0);
17198       if (name)
17199         add_name_attribute (die, name);
17200       if (! DECL_ARTIFICIAL (decl))
17201         add_src_coords_attributes (die, decl);
17202
17203       if ((TREE_CODE (decl) == FUNCTION_DECL || TREE_CODE (decl) == VAR_DECL)
17204           && TREE_PUBLIC (decl)
17205           && !DECL_ABSTRACT (decl)
17206           && !(TREE_CODE (decl) == VAR_DECL && DECL_REGISTER (decl)))
17207         {
17208           /* Defer until we have an assembler name set.  */
17209           if (!DECL_ASSEMBLER_NAME_SET_P (decl))
17210             {
17211               limbo_die_node *asm_name;
17212
17213               asm_name = ggc_alloc_cleared_limbo_die_node ();
17214               asm_name->die = die;
17215               asm_name->created_for = decl;
17216               asm_name->next = deferred_asm_name;
17217               deferred_asm_name = asm_name;
17218             }
17219           else if (DECL_ASSEMBLER_NAME (decl) != DECL_NAME (decl))
17220             add_AT_string (die, AT_linkage_name,
17221                            IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl)));
17222         }
17223     }
17224
17225 #ifdef VMS_DEBUGGING_INFO
17226   /* Get the function's name, as described by its RTL.  This may be different
17227      from the DECL_NAME name used in the source file.  */
17228   if (TREE_CODE (decl) == FUNCTION_DECL && TREE_ASM_WRITTEN (decl))
17229     {
17230       add_AT_addr (die, DW_AT_VMS_rtnbeg_pd_address,
17231                    XEXP (DECL_RTL (decl), 0));
17232       VEC_safe_push (rtx, gc, used_rtx_array, XEXP (DECL_RTL (decl), 0));
17233     }
17234 #endif
17235 }
17236
17237 /* Push a new declaration scope.  */
17238
17239 static void
17240 push_decl_scope (tree scope)
17241 {
17242   VEC_safe_push (tree, gc, decl_scope_table, scope);
17243 }
17244
17245 /* Pop a declaration scope.  */
17246
17247 static inline void
17248 pop_decl_scope (void)
17249 {
17250   VEC_pop (tree, decl_scope_table);
17251 }
17252
17253 /* Return the DIE for the scope that immediately contains this type.
17254    Non-named types get global scope.  Named types nested in other
17255    types get their containing scope if it's open, or global scope
17256    otherwise.  All other types (i.e. function-local named types) get
17257    the current active scope.  */
17258
17259 static dw_die_ref
17260 scope_die_for (tree t, dw_die_ref context_die)
17261 {
17262   dw_die_ref scope_die = NULL;
17263   tree containing_scope;
17264   int i;
17265
17266   /* Non-types always go in the current scope.  */
17267   gcc_assert (TYPE_P (t));
17268
17269   containing_scope = TYPE_CONTEXT (t);
17270
17271   /* Use the containing namespace if it was passed in (for a declaration).  */
17272   if (containing_scope && TREE_CODE (containing_scope) == NAMESPACE_DECL)
17273     {
17274       if (context_die == lookup_decl_die (containing_scope))
17275         /* OK */;
17276       else
17277         containing_scope = NULL_TREE;
17278     }
17279
17280   /* Ignore function type "scopes" from the C frontend.  They mean that
17281      a tagged type is local to a parmlist of a function declarator, but
17282      that isn't useful to DWARF.  */
17283   if (containing_scope && TREE_CODE (containing_scope) == FUNCTION_TYPE)
17284     containing_scope = NULL_TREE;
17285
17286   if (containing_scope == NULL_TREE)
17287     scope_die = comp_unit_die;
17288   else if (TYPE_P (containing_scope))
17289     {
17290       /* For types, we can just look up the appropriate DIE.  But
17291          first we check to see if we're in the middle of emitting it
17292          so we know where the new DIE should go.  */
17293       for (i = VEC_length (tree, decl_scope_table) - 1; i >= 0; --i)
17294         if (VEC_index (tree, decl_scope_table, i) == containing_scope)
17295           break;
17296
17297       if (i < 0)
17298         {
17299           gcc_assert (debug_info_level <= DINFO_LEVEL_TERSE
17300                       || TREE_ASM_WRITTEN (containing_scope));
17301
17302           /* If none of the current dies are suitable, we get file scope.  */
17303           scope_die = comp_unit_die;
17304         }
17305       else
17306         scope_die = lookup_type_die (containing_scope);
17307     }
17308   else
17309     scope_die = context_die;
17310
17311   return scope_die;
17312 }
17313
17314 /* Returns nonzero if CONTEXT_DIE is internal to a function.  */
17315
17316 static inline int
17317 local_scope_p (dw_die_ref context_die)
17318 {
17319   for (; context_die; context_die = context_die->die_parent)
17320     if (context_die->die_tag == DW_TAG_inlined_subroutine
17321         || context_die->die_tag == DW_TAG_subprogram)
17322       return 1;
17323
17324   return 0;
17325 }
17326
17327 /* Returns nonzero if CONTEXT_DIE is a class.  */
17328
17329 static inline int
17330 class_scope_p (dw_die_ref context_die)
17331 {
17332   return (context_die
17333           && (context_die->die_tag == DW_TAG_structure_type
17334               || context_die->die_tag == DW_TAG_class_type
17335               || context_die->die_tag == DW_TAG_interface_type
17336               || context_die->die_tag == DW_TAG_union_type));
17337 }
17338
17339 /* Returns nonzero if CONTEXT_DIE is a class or namespace, for deciding
17340    whether or not to treat a DIE in this context as a declaration.  */
17341
17342 static inline int
17343 class_or_namespace_scope_p (dw_die_ref context_die)
17344 {
17345   return (class_scope_p (context_die)
17346           || (context_die && context_die->die_tag == DW_TAG_namespace));
17347 }
17348
17349 /* Many forms of DIEs require a "type description" attribute.  This
17350    routine locates the proper "type descriptor" die for the type given
17351    by 'type', and adds a DW_AT_type attribute below the given die.  */
17352
17353 static void
17354 add_type_attribute (dw_die_ref object_die, tree type, int decl_const,
17355                     int decl_volatile, dw_die_ref context_die)
17356 {
17357   enum tree_code code  = TREE_CODE (type);
17358   dw_die_ref type_die  = NULL;
17359
17360   /* ??? If this type is an unnamed subrange type of an integral, floating-point
17361      or fixed-point type, use the inner type.  This is because we have no
17362      support for unnamed types in base_type_die.  This can happen if this is
17363      an Ada subrange type.  Correct solution is emit a subrange type die.  */
17364   if ((code == INTEGER_TYPE || code == REAL_TYPE || code == FIXED_POINT_TYPE)
17365       && TREE_TYPE (type) != 0 && TYPE_NAME (type) == 0)
17366     type = TREE_TYPE (type), code = TREE_CODE (type);
17367
17368   if (code == ERROR_MARK
17369       /* Handle a special case.  For functions whose return type is void, we
17370          generate *no* type attribute.  (Note that no object may have type
17371          `void', so this only applies to function return types).  */
17372       || code == VOID_TYPE)
17373     return;
17374
17375   type_die = modified_type_die (type,
17376                                 decl_const || TYPE_READONLY (type),
17377                                 decl_volatile || TYPE_VOLATILE (type),
17378                                 context_die);
17379
17380   if (type_die != NULL)
17381     add_AT_die_ref (object_die, DW_AT_type, type_die);
17382 }
17383
17384 /* Given an object die, add the calling convention attribute for the
17385    function call type.  */
17386 static void
17387 add_calling_convention_attribute (dw_die_ref subr_die, tree decl)
17388 {
17389   enum dwarf_calling_convention value = DW_CC_normal;
17390
17391   value = ((enum dwarf_calling_convention)
17392            targetm.dwarf_calling_convention (TREE_TYPE (decl)));
17393
17394   /* DWARF doesn't provide a way to identify a program's source-level
17395      entry point.  DW_AT_calling_convention attributes are only meant
17396      to describe functions' calling conventions.  However, lacking a
17397      better way to signal the Fortran main program, we use this for the
17398      time being, following existing custom.  */
17399   if (is_fortran ()
17400       && !strcmp (IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl)), "MAIN__"))
17401     value = DW_CC_program;
17402
17403   /* Only add the attribute if the backend requests it, and
17404      is not DW_CC_normal.  */
17405   if (value && (value != DW_CC_normal))
17406     add_AT_unsigned (subr_die, DW_AT_calling_convention, value);
17407 }
17408
17409 /* Given a tree pointer to a struct, class, union, or enum type node, return
17410    a pointer to the (string) tag name for the given type, or zero if the type
17411    was declared without a tag.  */
17412
17413 static const char *
17414 type_tag (const_tree type)
17415 {
17416   const char *name = 0;
17417
17418   if (TYPE_NAME (type) != 0)
17419     {
17420       tree t = 0;
17421
17422       /* Find the IDENTIFIER_NODE for the type name.  */
17423       if (TREE_CODE (TYPE_NAME (type)) == IDENTIFIER_NODE)
17424         t = TYPE_NAME (type);
17425
17426       /* The g++ front end makes the TYPE_NAME of *each* tagged type point to
17427          a TYPE_DECL node, regardless of whether or not a `typedef' was
17428          involved.  */
17429       else if (TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
17430                && ! DECL_IGNORED_P (TYPE_NAME (type)))
17431         {
17432           /* We want to be extra verbose.  Don't call dwarf_name if
17433              DECL_NAME isn't set.  The default hook for decl_printable_name
17434              doesn't like that, and in this context it's correct to return
17435              0, instead of "<anonymous>" or the like.  */
17436           if (DECL_NAME (TYPE_NAME (type)))
17437             name = lang_hooks.dwarf_name (TYPE_NAME (type), 2);
17438         }
17439
17440       /* Now get the name as a string, or invent one.  */
17441       if (!name && t != 0)
17442         name = IDENTIFIER_POINTER (t);
17443     }
17444
17445   return (name == 0 || *name == '\0') ? 0 : name;
17446 }
17447
17448 /* Return the type associated with a data member, make a special check
17449    for bit field types.  */
17450
17451 static inline tree
17452 member_declared_type (const_tree member)
17453 {
17454   return (DECL_BIT_FIELD_TYPE (member)
17455           ? DECL_BIT_FIELD_TYPE (member) : TREE_TYPE (member));
17456 }
17457
17458 /* Get the decl's label, as described by its RTL. This may be different
17459    from the DECL_NAME name used in the source file.  */
17460
17461 #if 0
17462 static const char *
17463 decl_start_label (tree decl)
17464 {
17465   rtx x;
17466   const char *fnname;
17467
17468   x = DECL_RTL (decl);
17469   gcc_assert (MEM_P (x));
17470
17471   x = XEXP (x, 0);
17472   gcc_assert (GET_CODE (x) == SYMBOL_REF);
17473
17474   fnname = XSTR (x, 0);
17475   return fnname;
17476 }
17477 #endif
17478 \f
17479 /* These routines generate the internal representation of the DIE's for
17480    the compilation unit.  Debugging information is collected by walking
17481    the declaration trees passed in from dwarf2out_decl().  */
17482
17483 static void
17484 gen_array_type_die (tree type, dw_die_ref context_die)
17485 {
17486   dw_die_ref scope_die = scope_die_for (type, context_die);
17487   dw_die_ref array_die;
17488
17489   /* GNU compilers represent multidimensional array types as sequences of one
17490      dimensional array types whose element types are themselves array types.
17491      We sometimes squish that down to a single array_type DIE with multiple
17492      subscripts in the Dwarf debugging info.  The draft Dwarf specification
17493      say that we are allowed to do this kind of compression in C, because
17494      there is no difference between an array of arrays and a multidimensional
17495      array.  We don't do this for Ada to remain as close as possible to the
17496      actual representation, which is especially important against the language
17497      flexibilty wrt arrays of variable size.  */
17498
17499   bool collapse_nested_arrays = !is_ada ();
17500   tree element_type;
17501
17502   /* Emit DW_TAG_string_type for Fortran character types (with kind 1 only, as
17503      DW_TAG_string_type doesn't have DW_AT_type attribute).  */
17504   if (TYPE_STRING_FLAG (type)
17505       && TREE_CODE (type) == ARRAY_TYPE
17506       && is_fortran ()
17507       && TYPE_MODE (TREE_TYPE (type)) == TYPE_MODE (char_type_node))
17508     {
17509       HOST_WIDE_INT size;
17510
17511       array_die = new_die (DW_TAG_string_type, scope_die, type);
17512       add_name_attribute (array_die, type_tag (type));
17513       equate_type_number_to_die (type, array_die);
17514       size = int_size_in_bytes (type);
17515       if (size >= 0)
17516         add_AT_unsigned (array_die, DW_AT_byte_size, size);
17517       else if (TYPE_DOMAIN (type) != NULL_TREE
17518                && TYPE_MAX_VALUE (TYPE_DOMAIN (type)) != NULL_TREE
17519                && DECL_P (TYPE_MAX_VALUE (TYPE_DOMAIN (type))))
17520         {
17521           tree szdecl = TYPE_MAX_VALUE (TYPE_DOMAIN (type));
17522           dw_loc_list_ref loc = loc_list_from_tree (szdecl, 2);
17523
17524           size = int_size_in_bytes (TREE_TYPE (szdecl));
17525           if (loc && size > 0)
17526             {
17527               add_AT_location_description (array_die, DW_AT_string_length, loc);
17528               if (size != DWARF2_ADDR_SIZE)
17529                 add_AT_unsigned (array_die, DW_AT_byte_size, size);
17530             }
17531         }
17532       return;
17533     }
17534
17535   /* ??? The SGI dwarf reader fails for array of array of enum types
17536      (e.g. const enum machine_mode insn_operand_mode[2][10]) unless the inner
17537      array type comes before the outer array type.  We thus call gen_type_die
17538      before we new_die and must prevent nested array types collapsing for this
17539      target.  */
17540
17541 #ifdef MIPS_DEBUGGING_INFO
17542   gen_type_die (TREE_TYPE (type), context_die);
17543   collapse_nested_arrays = false;
17544 #endif
17545
17546   array_die = new_die (DW_TAG_array_type, scope_die, type);
17547   add_name_attribute (array_die, type_tag (type));
17548   equate_type_number_to_die (type, array_die);
17549
17550   if (TREE_CODE (type) == VECTOR_TYPE)
17551     {
17552       /* The frontend feeds us a representation for the vector as a struct
17553          containing an array.  Pull out the array type.  */
17554       type = TREE_TYPE (TYPE_FIELDS (TYPE_DEBUG_REPRESENTATION_TYPE (type)));
17555       add_AT_flag (array_die, DW_AT_GNU_vector, 1);
17556     }
17557
17558   /* For Fortran multidimensional arrays use DW_ORD_col_major ordering.  */
17559   if (is_fortran ()
17560       && TREE_CODE (type) == ARRAY_TYPE
17561       && TREE_CODE (TREE_TYPE (type)) == ARRAY_TYPE
17562       && !TYPE_STRING_FLAG (TREE_TYPE (type)))
17563     add_AT_unsigned (array_die, DW_AT_ordering, DW_ORD_col_major);
17564
17565 #if 0
17566   /* We default the array ordering.  SDB will probably do
17567      the right things even if DW_AT_ordering is not present.  It's not even
17568      an issue until we start to get into multidimensional arrays anyway.  If
17569      SDB is ever caught doing the Wrong Thing for multi-dimensional arrays,
17570      then we'll have to put the DW_AT_ordering attribute back in.  (But if
17571      and when we find out that we need to put these in, we will only do so
17572      for multidimensional arrays.  */
17573   add_AT_unsigned (array_die, DW_AT_ordering, DW_ORD_row_major);
17574 #endif
17575
17576 #ifdef MIPS_DEBUGGING_INFO
17577   /* The SGI compilers handle arrays of unknown bound by setting
17578      AT_declaration and not emitting any subrange DIEs.  */
17579   if (! TYPE_DOMAIN (type))
17580     add_AT_flag (array_die, DW_AT_declaration, 1);
17581   else
17582 #endif
17583     add_subscript_info (array_die, type, collapse_nested_arrays);
17584
17585   /* Add representation of the type of the elements of this array type and
17586      emit the corresponding DIE if we haven't done it already.  */
17587   element_type = TREE_TYPE (type);
17588   if (collapse_nested_arrays)
17589     while (TREE_CODE (element_type) == ARRAY_TYPE)
17590       {
17591         if (TYPE_STRING_FLAG (element_type) && is_fortran ())
17592           break;
17593         element_type = TREE_TYPE (element_type);
17594       }
17595
17596 #ifndef MIPS_DEBUGGING_INFO
17597   gen_type_die (element_type, context_die);
17598 #endif
17599
17600   add_type_attribute (array_die, element_type, 0, 0, context_die);
17601
17602   if (get_AT (array_die, DW_AT_name))
17603     add_pubtype (type, array_die);
17604 }
17605
17606 static dw_loc_descr_ref
17607 descr_info_loc (tree val, tree base_decl)
17608 {
17609   HOST_WIDE_INT size;
17610   dw_loc_descr_ref loc, loc2;
17611   enum dwarf_location_atom op;
17612
17613   if (val == base_decl)
17614     return new_loc_descr (DW_OP_push_object_address, 0, 0);
17615
17616   switch (TREE_CODE (val))
17617     {
17618     CASE_CONVERT:
17619       return descr_info_loc (TREE_OPERAND (val, 0), base_decl);
17620     case VAR_DECL:
17621       return loc_descriptor_from_tree (val, 0);
17622     case INTEGER_CST:
17623       if (host_integerp (val, 0))
17624         return int_loc_descriptor (tree_low_cst (val, 0));
17625       break;
17626     case INDIRECT_REF:
17627       size = int_size_in_bytes (TREE_TYPE (val));
17628       if (size < 0)
17629         break;
17630       loc = descr_info_loc (TREE_OPERAND (val, 0), base_decl);
17631       if (!loc)
17632         break;
17633       if (size == DWARF2_ADDR_SIZE)
17634         add_loc_descr (&loc, new_loc_descr (DW_OP_deref, 0, 0));
17635       else
17636         add_loc_descr (&loc, new_loc_descr (DW_OP_deref_size, size, 0));
17637       return loc;
17638     case POINTER_PLUS_EXPR:
17639     case PLUS_EXPR:
17640       if (host_integerp (TREE_OPERAND (val, 1), 1)
17641           && (unsigned HOST_WIDE_INT) tree_low_cst (TREE_OPERAND (val, 1), 1)
17642              < 16384)
17643         {
17644           loc = descr_info_loc (TREE_OPERAND (val, 0), base_decl);
17645           if (!loc)
17646             break;
17647           loc_descr_plus_const (&loc, tree_low_cst (TREE_OPERAND (val, 1), 0));
17648         }
17649       else
17650         {
17651           op = DW_OP_plus;
17652         do_binop:
17653           loc = descr_info_loc (TREE_OPERAND (val, 0), base_decl);
17654           if (!loc)
17655             break;
17656           loc2 = descr_info_loc (TREE_OPERAND (val, 1), base_decl);
17657           if (!loc2)
17658             break;
17659           add_loc_descr (&loc, loc2);
17660           add_loc_descr (&loc2, new_loc_descr (op, 0, 0));
17661         }
17662       return loc;
17663     case MINUS_EXPR:
17664       op = DW_OP_minus;
17665       goto do_binop;
17666     case MULT_EXPR:
17667       op = DW_OP_mul;
17668       goto do_binop;
17669     case EQ_EXPR:
17670       op = DW_OP_eq;
17671       goto do_binop;
17672     case NE_EXPR:
17673       op = DW_OP_ne;
17674       goto do_binop;
17675     default:
17676       break;
17677     }
17678   return NULL;
17679 }
17680
17681 static void
17682 add_descr_info_field (dw_die_ref die, enum dwarf_attribute attr,
17683                       tree val, tree base_decl)
17684 {
17685   dw_loc_descr_ref loc;
17686
17687   if (host_integerp (val, 0))
17688     {
17689       add_AT_unsigned (die, attr, tree_low_cst (val, 0));
17690       return;
17691     }
17692
17693   loc = descr_info_loc (val, base_decl);
17694   if (!loc)
17695     return;
17696
17697   add_AT_loc (die, attr, loc);
17698 }
17699
17700 /* This routine generates DIE for array with hidden descriptor, details
17701    are filled into *info by a langhook.  */
17702
17703 static void
17704 gen_descr_array_type_die (tree type, struct array_descr_info *info,
17705                           dw_die_ref context_die)
17706 {
17707   dw_die_ref scope_die = scope_die_for (type, context_die);
17708   dw_die_ref array_die;
17709   int dim;
17710
17711   array_die = new_die (DW_TAG_array_type, scope_die, type);
17712   add_name_attribute (array_die, type_tag (type));
17713   equate_type_number_to_die (type, array_die);
17714
17715   /* For Fortran multidimensional arrays use DW_ORD_col_major ordering.  */
17716   if (is_fortran ()
17717       && info->ndimensions >= 2)
17718     add_AT_unsigned (array_die, DW_AT_ordering, DW_ORD_col_major);
17719
17720   if (info->data_location)
17721     add_descr_info_field (array_die, DW_AT_data_location, info->data_location,
17722                           info->base_decl);
17723   if (info->associated)
17724     add_descr_info_field (array_die, DW_AT_associated, info->associated,
17725                           info->base_decl);
17726   if (info->allocated)
17727     add_descr_info_field (array_die, DW_AT_allocated, info->allocated,
17728                           info->base_decl);
17729
17730   for (dim = 0; dim < info->ndimensions; dim++)
17731     {
17732       dw_die_ref subrange_die
17733         = new_die (DW_TAG_subrange_type, array_die, NULL);
17734
17735       if (info->dimen[dim].lower_bound)
17736         {
17737           /* If it is the default value, omit it.  */
17738           int dflt;
17739
17740           if (host_integerp (info->dimen[dim].lower_bound, 0)
17741               && (dflt = lower_bound_default ()) != -1
17742               && tree_low_cst (info->dimen[dim].lower_bound, 0) == dflt)
17743             ;
17744           else
17745             add_descr_info_field (subrange_die, DW_AT_lower_bound,
17746                                   info->dimen[dim].lower_bound,
17747                                   info->base_decl);
17748         }
17749       if (info->dimen[dim].upper_bound)
17750         add_descr_info_field (subrange_die, DW_AT_upper_bound,
17751                               info->dimen[dim].upper_bound,
17752                               info->base_decl);
17753       if (info->dimen[dim].stride)
17754         add_descr_info_field (subrange_die, DW_AT_byte_stride,
17755                               info->dimen[dim].stride,
17756                               info->base_decl);
17757     }
17758
17759   gen_type_die (info->element_type, context_die);
17760   add_type_attribute (array_die, info->element_type, 0, 0, context_die);
17761
17762   if (get_AT (array_die, DW_AT_name))
17763     add_pubtype (type, array_die);
17764 }
17765
17766 #if 0
17767 static void
17768 gen_entry_point_die (tree decl, dw_die_ref context_die)
17769 {
17770   tree origin = decl_ultimate_origin (decl);
17771   dw_die_ref decl_die = new_die (DW_TAG_entry_point, context_die, decl);
17772
17773   if (origin != NULL)
17774     add_abstract_origin_attribute (decl_die, origin);
17775   else
17776     {
17777       add_name_and_src_coords_attributes (decl_die, decl);
17778       add_type_attribute (decl_die, TREE_TYPE (TREE_TYPE (decl)),
17779                           0, 0, context_die);
17780     }
17781
17782   if (DECL_ABSTRACT (decl))
17783     equate_decl_number_to_die (decl, decl_die);
17784   else
17785     add_AT_lbl_id (decl_die, DW_AT_low_pc, decl_start_label (decl));
17786 }
17787 #endif
17788
17789 /* Walk through the list of incomplete types again, trying once more to
17790    emit full debugging info for them.  */
17791
17792 static void
17793 retry_incomplete_types (void)
17794 {
17795   int i;
17796
17797   for (i = VEC_length (tree, incomplete_types) - 1; i >= 0; i--)
17798     if (should_emit_struct_debug (VEC_index (tree, incomplete_types, i),
17799                                   DINFO_USAGE_DIR_USE))
17800       gen_type_die (VEC_index (tree, incomplete_types, i), comp_unit_die);
17801 }
17802
17803 /* Determine what tag to use for a record type.  */
17804
17805 static enum dwarf_tag
17806 record_type_tag (tree type)
17807 {
17808   if (! lang_hooks.types.classify_record)
17809     return DW_TAG_structure_type;
17810
17811   switch (lang_hooks.types.classify_record (type))
17812     {
17813     case RECORD_IS_STRUCT:
17814       return DW_TAG_structure_type;
17815
17816     case RECORD_IS_CLASS:
17817       return DW_TAG_class_type;
17818
17819     case RECORD_IS_INTERFACE:
17820       if (dwarf_version >= 3 || !dwarf_strict)
17821         return DW_TAG_interface_type;
17822       return DW_TAG_structure_type;
17823
17824     default:
17825       gcc_unreachable ();
17826     }
17827 }
17828
17829 /* Generate a DIE to represent an enumeration type.  Note that these DIEs
17830    include all of the information about the enumeration values also. Each
17831    enumerated type name/value is listed as a child of the enumerated type
17832    DIE.  */
17833
17834 static dw_die_ref
17835 gen_enumeration_type_die (tree type, dw_die_ref context_die)
17836 {
17837   dw_die_ref type_die = lookup_type_die (type);
17838
17839   if (type_die == NULL)
17840     {
17841       type_die = new_die (DW_TAG_enumeration_type,
17842                           scope_die_for (type, context_die), type);
17843       equate_type_number_to_die (type, type_die);
17844       add_name_attribute (type_die, type_tag (type));
17845       if ((dwarf_version >= 4 || !dwarf_strict)
17846           && ENUM_IS_SCOPED (type))
17847         add_AT_flag (type_die, DW_AT_enum_class, 1);
17848     }
17849   else if (! TYPE_SIZE (type))
17850     return type_die;
17851   else
17852     remove_AT (type_die, DW_AT_declaration);
17853
17854   /* Handle a GNU C/C++ extension, i.e. incomplete enum types.  If the
17855      given enum type is incomplete, do not generate the DW_AT_byte_size
17856      attribute or the DW_AT_element_list attribute.  */
17857   if (TYPE_SIZE (type))
17858     {
17859       tree link;
17860
17861       TREE_ASM_WRITTEN (type) = 1;
17862       add_byte_size_attribute (type_die, type);
17863       if (TYPE_STUB_DECL (type) != NULL_TREE)
17864         add_src_coords_attributes (type_die, TYPE_STUB_DECL (type));
17865
17866       /* If the first reference to this type was as the return type of an
17867          inline function, then it may not have a parent.  Fix this now.  */
17868       if (type_die->die_parent == NULL)
17869         add_child_die (scope_die_for (type, context_die), type_die);
17870
17871       for (link = TYPE_VALUES (type);
17872            link != NULL; link = TREE_CHAIN (link))
17873         {
17874           dw_die_ref enum_die = new_die (DW_TAG_enumerator, type_die, link);
17875           tree value = TREE_VALUE (link);
17876
17877           add_name_attribute (enum_die,
17878                               IDENTIFIER_POINTER (TREE_PURPOSE (link)));
17879
17880           if (TREE_CODE (value) == CONST_DECL)
17881             value = DECL_INITIAL (value);
17882
17883           if (host_integerp (value, TYPE_UNSIGNED (TREE_TYPE (value))))
17884             /* DWARF2 does not provide a way of indicating whether or
17885                not enumeration constants are signed or unsigned.  GDB
17886                always assumes the values are signed, so we output all
17887                values as if they were signed.  That means that
17888                enumeration constants with very large unsigned values
17889                will appear to have negative values in the debugger.  */
17890             add_AT_int (enum_die, DW_AT_const_value,
17891                         tree_low_cst (value, tree_int_cst_sgn (value) > 0));
17892         }
17893     }
17894   else
17895     add_AT_flag (type_die, DW_AT_declaration, 1);
17896
17897   if (get_AT (type_die, DW_AT_name))
17898     add_pubtype (type, type_die);
17899
17900   return type_die;
17901 }
17902
17903 /* Generate a DIE to represent either a real live formal parameter decl or to
17904    represent just the type of some formal parameter position in some function
17905    type.
17906
17907    Note that this routine is a bit unusual because its argument may be a
17908    ..._DECL node (i.e. either a PARM_DECL or perhaps a VAR_DECL which
17909    represents an inlining of some PARM_DECL) or else some sort of a ..._TYPE
17910    node.  If it's the former then this function is being called to output a
17911    DIE to represent a formal parameter object (or some inlining thereof).  If
17912    it's the latter, then this function is only being called to output a
17913    DW_TAG_formal_parameter DIE to stand as a placeholder for some formal
17914    argument type of some subprogram type.
17915    If EMIT_NAME_P is true, name and source coordinate attributes
17916    are emitted.  */
17917
17918 static dw_die_ref
17919 gen_formal_parameter_die (tree node, tree origin, bool emit_name_p,
17920                           dw_die_ref context_die)
17921 {
17922   tree node_or_origin = node ? node : origin;
17923   tree ultimate_origin;
17924   dw_die_ref parm_die
17925     = new_die (DW_TAG_formal_parameter, context_die, node);
17926
17927   switch (TREE_CODE_CLASS (TREE_CODE (node_or_origin)))
17928     {
17929     case tcc_declaration:
17930       ultimate_origin = decl_ultimate_origin (node_or_origin);
17931       if (node || ultimate_origin)
17932         origin = ultimate_origin;
17933       if (origin != NULL)
17934         add_abstract_origin_attribute (parm_die, origin);
17935       else if (emit_name_p)
17936         add_name_and_src_coords_attributes (parm_die, node);
17937       if (origin == NULL
17938           || (! DECL_ABSTRACT (node_or_origin)
17939               && variably_modified_type_p (TREE_TYPE (node_or_origin),
17940                                            decl_function_context
17941                                                             (node_or_origin))))
17942         {
17943           tree type = TREE_TYPE (node_or_origin);
17944           if (decl_by_reference_p (node_or_origin))
17945             add_type_attribute (parm_die, TREE_TYPE (type), 0, 0,
17946                                 context_die);
17947           else
17948             add_type_attribute (parm_die, type,
17949                                 TREE_READONLY (node_or_origin),
17950                                 TREE_THIS_VOLATILE (node_or_origin),
17951                                 context_die);
17952         }
17953       if (origin == NULL && DECL_ARTIFICIAL (node))
17954         add_AT_flag (parm_die, DW_AT_artificial, 1);
17955
17956       if (node && node != origin)
17957         equate_decl_number_to_die (node, parm_die);
17958       if (! DECL_ABSTRACT (node_or_origin))
17959         add_location_or_const_value_attribute (parm_die, node_or_origin,
17960                                                DW_AT_location);
17961
17962       break;
17963
17964     case tcc_type:
17965       /* We were called with some kind of a ..._TYPE node.  */
17966       add_type_attribute (parm_die, node_or_origin, 0, 0, context_die);
17967       break;
17968
17969     default:
17970       gcc_unreachable ();
17971     }
17972
17973   return parm_die;
17974 }
17975
17976 /* Generate and return a DW_TAG_GNU_formal_parameter_pack. Also generate
17977    children DW_TAG_formal_parameter DIEs representing the arguments of the
17978    parameter pack.
17979
17980    PARM_PACK must be a function parameter pack.
17981    PACK_ARG is the first argument of the parameter pack. Its TREE_CHAIN
17982    must point to the subsequent arguments of the function PACK_ARG belongs to.
17983    SUBR_DIE is the DIE of the function PACK_ARG belongs to.
17984    If NEXT_ARG is non NULL, *NEXT_ARG is set to the function argument
17985    following the last one for which a DIE was generated.  */
17986
17987 static dw_die_ref
17988 gen_formal_parameter_pack_die  (tree parm_pack,
17989                                 tree pack_arg,
17990                                 dw_die_ref subr_die,
17991                                 tree *next_arg)
17992 {
17993   tree arg;
17994   dw_die_ref parm_pack_die;
17995
17996   gcc_assert (parm_pack
17997               && lang_hooks.function_parameter_pack_p (parm_pack)
17998               && subr_die);
17999
18000   parm_pack_die = new_die (DW_TAG_GNU_formal_parameter_pack, subr_die, parm_pack);
18001   add_src_coords_attributes (parm_pack_die, parm_pack);
18002
18003   for (arg = pack_arg; arg; arg = TREE_CHAIN (arg))
18004     {
18005       if (! lang_hooks.decls.function_parm_expanded_from_pack_p (arg,
18006                                                                  parm_pack))
18007         break;
18008       gen_formal_parameter_die (arg, NULL,
18009                                 false /* Don't emit name attribute.  */,
18010                                 parm_pack_die);
18011     }
18012   if (next_arg)
18013     *next_arg = arg;
18014   return parm_pack_die;
18015 }
18016
18017 /* Generate a special type of DIE used as a stand-in for a trailing ellipsis
18018    at the end of an (ANSI prototyped) formal parameters list.  */
18019
18020 static void
18021 gen_unspecified_parameters_die (tree decl_or_type, dw_die_ref context_die)
18022 {
18023   new_die (DW_TAG_unspecified_parameters, context_die, decl_or_type);
18024 }
18025
18026 /* Generate a list of nameless DW_TAG_formal_parameter DIEs (and perhaps a
18027    DW_TAG_unspecified_parameters DIE) to represent the types of the formal
18028    parameters as specified in some function type specification (except for
18029    those which appear as part of a function *definition*).  */
18030
18031 static void
18032 gen_formal_types_die (tree function_or_method_type, dw_die_ref context_die)
18033 {
18034   tree link;
18035   tree formal_type = NULL;
18036   tree first_parm_type;
18037   tree arg;
18038
18039   if (TREE_CODE (function_or_method_type) == FUNCTION_DECL)
18040     {
18041       arg = DECL_ARGUMENTS (function_or_method_type);
18042       function_or_method_type = TREE_TYPE (function_or_method_type);
18043     }
18044   else
18045     arg = NULL_TREE;
18046
18047   first_parm_type = TYPE_ARG_TYPES (function_or_method_type);
18048
18049   /* Make our first pass over the list of formal parameter types and output a
18050      DW_TAG_formal_parameter DIE for each one.  */
18051   for (link = first_parm_type; link; )
18052     {
18053       dw_die_ref parm_die;
18054
18055       formal_type = TREE_VALUE (link);
18056       if (formal_type == void_type_node)
18057         break;
18058
18059       /* Output a (nameless) DIE to represent the formal parameter itself.  */
18060       parm_die = gen_formal_parameter_die (formal_type, NULL,
18061                                            true /* Emit name attribute.  */,
18062                                            context_die);
18063       if ((TREE_CODE (function_or_method_type) == METHOD_TYPE
18064            && link == first_parm_type)
18065           || (arg && DECL_ARTIFICIAL (arg)))
18066         add_AT_flag (parm_die, DW_AT_artificial, 1);
18067
18068       link = TREE_CHAIN (link);
18069       if (arg)
18070         arg = TREE_CHAIN (arg);
18071     }
18072
18073   /* If this function type has an ellipsis, add a
18074      DW_TAG_unspecified_parameters DIE to the end of the parameter list.  */
18075   if (formal_type != void_type_node)
18076     gen_unspecified_parameters_die (function_or_method_type, context_die);
18077
18078   /* Make our second (and final) pass over the list of formal parameter types
18079      and output DIEs to represent those types (as necessary).  */
18080   for (link = TYPE_ARG_TYPES (function_or_method_type);
18081        link && TREE_VALUE (link);
18082        link = TREE_CHAIN (link))
18083     gen_type_die (TREE_VALUE (link), context_die);
18084 }
18085
18086 /* We want to generate the DIE for TYPE so that we can generate the
18087    die for MEMBER, which has been defined; we will need to refer back
18088    to the member declaration nested within TYPE.  If we're trying to
18089    generate minimal debug info for TYPE, processing TYPE won't do the
18090    trick; we need to attach the member declaration by hand.  */
18091
18092 static void
18093 gen_type_die_for_member (tree type, tree member, dw_die_ref context_die)
18094 {
18095   gen_type_die (type, context_die);
18096
18097   /* If we're trying to avoid duplicate debug info, we may not have
18098      emitted the member decl for this function.  Emit it now.  */
18099   if (TYPE_STUB_DECL (type)
18100       && TYPE_DECL_SUPPRESS_DEBUG (TYPE_STUB_DECL (type))
18101       && ! lookup_decl_die (member))
18102     {
18103       dw_die_ref type_die;
18104       gcc_assert (!decl_ultimate_origin (member));
18105
18106       push_decl_scope (type);
18107       type_die = lookup_type_die (type);
18108       if (TREE_CODE (member) == FUNCTION_DECL)
18109         gen_subprogram_die (member, type_die);
18110       else if (TREE_CODE (member) == FIELD_DECL)
18111         {
18112           /* Ignore the nameless fields that are used to skip bits but handle
18113              C++ anonymous unions and structs.  */
18114           if (DECL_NAME (member) != NULL_TREE
18115               || TREE_CODE (TREE_TYPE (member)) == UNION_TYPE
18116               || TREE_CODE (TREE_TYPE (member)) == RECORD_TYPE)
18117             {
18118               gen_type_die (member_declared_type (member), type_die);
18119               gen_field_die (member, type_die);
18120             }
18121         }
18122       else
18123         gen_variable_die (member, NULL_TREE, type_die);
18124
18125       pop_decl_scope ();
18126     }
18127 }
18128
18129 /* Generate the DWARF2 info for the "abstract" instance of a function which we
18130    may later generate inlined and/or out-of-line instances of.  */
18131
18132 static void
18133 dwarf2out_abstract_function (tree decl)
18134 {
18135   dw_die_ref old_die;
18136   tree save_fn;
18137   tree context;
18138   int was_abstract;
18139   htab_t old_decl_loc_table;
18140
18141   /* Make sure we have the actual abstract inline, not a clone.  */
18142   decl = DECL_ORIGIN (decl);
18143
18144   old_die = lookup_decl_die (decl);
18145   if (old_die && get_AT (old_die, DW_AT_inline))
18146     /* We've already generated the abstract instance.  */
18147     return;
18148
18149   /* We can be called while recursively when seeing block defining inlined subroutine
18150      DIE.  Be sure to not clobber the outer location table nor use it or we would
18151      get locations in abstract instantces.  */
18152   old_decl_loc_table = decl_loc_table;
18153   decl_loc_table = NULL;
18154
18155   /* Be sure we've emitted the in-class declaration DIE (if any) first, so
18156      we don't get confused by DECL_ABSTRACT.  */
18157   if (debug_info_level > DINFO_LEVEL_TERSE)
18158     {
18159       context = decl_class_context (decl);
18160       if (context)
18161         gen_type_die_for_member
18162           (context, decl, decl_function_context (decl) ? NULL : comp_unit_die);
18163     }
18164
18165   /* Pretend we've just finished compiling this function.  */
18166   save_fn = current_function_decl;
18167   current_function_decl = decl;
18168   push_cfun (DECL_STRUCT_FUNCTION (decl));
18169
18170   was_abstract = DECL_ABSTRACT (decl);
18171   set_decl_abstract_flags (decl, 1);
18172   dwarf2out_decl (decl);
18173   if (! was_abstract)
18174     set_decl_abstract_flags (decl, 0);
18175
18176   current_function_decl = save_fn;
18177   decl_loc_table = old_decl_loc_table;
18178   pop_cfun ();
18179 }
18180
18181 /* Helper function of premark_used_types() which gets called through
18182    htab_traverse.
18183
18184    Marks the DIE of a given type in *SLOT as perennial, so it never gets
18185    marked as unused by prune_unused_types.  */
18186
18187 static int
18188 premark_used_types_helper (void **slot, void *data ATTRIBUTE_UNUSED)
18189 {
18190   tree type;
18191   dw_die_ref die;
18192
18193   type = (tree) *slot;
18194   die = lookup_type_die (type);
18195   if (die != NULL)
18196     die->die_perennial_p = 1;
18197   return 1;
18198 }
18199
18200 /* Helper function of premark_types_used_by_global_vars which gets called
18201    through htab_traverse.
18202
18203    Marks the DIE of a given type in *SLOT as perennial, so it never gets
18204    marked as unused by prune_unused_types. The DIE of the type is marked
18205    only if the global variable using the type will actually be emitted.  */
18206
18207 static int
18208 premark_types_used_by_global_vars_helper (void **slot,
18209                                           void *data ATTRIBUTE_UNUSED)
18210 {
18211   struct types_used_by_vars_entry *entry;
18212   dw_die_ref die;
18213
18214   entry = (struct types_used_by_vars_entry *) *slot;
18215   gcc_assert (entry->type != NULL
18216               && entry->var_decl != NULL);
18217   die = lookup_type_die (entry->type);
18218   if (die)
18219     {
18220       /* Ask cgraph if the global variable really is to be emitted.
18221          If yes, then we'll keep the DIE of ENTRY->TYPE.  */
18222       struct varpool_node *node = varpool_get_node (entry->var_decl);
18223       if (node && node->needed)
18224         {
18225           die->die_perennial_p = 1;
18226           /* Keep the parent DIEs as well.  */
18227           while ((die = die->die_parent) && die->die_perennial_p == 0)
18228             die->die_perennial_p = 1;
18229         }
18230     }
18231   return 1;
18232 }
18233
18234 /* Mark all members of used_types_hash as perennial.  */
18235
18236 static void
18237 premark_used_types (void)
18238 {
18239   if (cfun && cfun->used_types_hash)
18240     htab_traverse (cfun->used_types_hash, premark_used_types_helper, NULL);
18241 }
18242
18243 /* Mark all members of types_used_by_vars_entry as perennial.  */
18244
18245 static void
18246 premark_types_used_by_global_vars (void)
18247 {
18248   if (types_used_by_vars_hash)
18249     htab_traverse (types_used_by_vars_hash,
18250                    premark_types_used_by_global_vars_helper, NULL);
18251 }
18252
18253 /* Generate a DIE to represent a declared function (either file-scope or
18254    block-local).  */
18255
18256 static void
18257 gen_subprogram_die (tree decl, dw_die_ref context_die)
18258 {
18259   char label_id[MAX_ARTIFICIAL_LABEL_BYTES];
18260   tree origin = decl_ultimate_origin (decl);
18261   dw_die_ref subr_die;
18262   tree fn_arg_types;
18263   tree outer_scope;
18264   dw_die_ref old_die = lookup_decl_die (decl);
18265   int declaration = (current_function_decl != decl
18266                      || class_or_namespace_scope_p (context_die));
18267
18268   premark_used_types ();
18269
18270   /* It is possible to have both DECL_ABSTRACT and DECLARATION be true if we
18271      started to generate the abstract instance of an inline, decided to output
18272      its containing class, and proceeded to emit the declaration of the inline
18273      from the member list for the class.  If so, DECLARATION takes priority;
18274      we'll get back to the abstract instance when done with the class.  */
18275
18276   /* The class-scope declaration DIE must be the primary DIE.  */
18277   if (origin && declaration && class_or_namespace_scope_p (context_die))
18278     {
18279       origin = NULL;
18280       gcc_assert (!old_die);
18281     }
18282
18283   /* Now that the C++ front end lazily declares artificial member fns, we
18284      might need to retrofit the declaration into its class.  */
18285   if (!declaration && !origin && !old_die
18286       && DECL_CONTEXT (decl) && TYPE_P (DECL_CONTEXT (decl))
18287       && !class_or_namespace_scope_p (context_die)
18288       && debug_info_level > DINFO_LEVEL_TERSE)
18289     old_die = force_decl_die (decl);
18290
18291   if (origin != NULL)
18292     {
18293       gcc_assert (!declaration || local_scope_p (context_die));
18294
18295       /* Fixup die_parent for the abstract instance of a nested
18296          inline function.  */
18297       if (old_die && old_die->die_parent == NULL)
18298         add_child_die (context_die, old_die);
18299
18300       subr_die = new_die (DW_TAG_subprogram, context_die, decl);
18301       add_abstract_origin_attribute (subr_die, origin);
18302     }
18303   else if (old_die)
18304     {
18305       expanded_location s = expand_location (DECL_SOURCE_LOCATION (decl));
18306       struct dwarf_file_data * file_index = lookup_filename (s.file);
18307
18308       if (!get_AT_flag (old_die, DW_AT_declaration)
18309           /* We can have a normal definition following an inline one in the
18310              case of redefinition of GNU C extern inlines.
18311              It seems reasonable to use AT_specification in this case.  */
18312           && !get_AT (old_die, DW_AT_inline))
18313         {
18314           /* Detect and ignore this case, where we are trying to output
18315              something we have already output.  */
18316           return;
18317         }
18318
18319       /* If the definition comes from the same place as the declaration,
18320          maybe use the old DIE.  We always want the DIE for this function
18321          that has the *_pc attributes to be under comp_unit_die so the
18322          debugger can find it.  We also need to do this for abstract
18323          instances of inlines, since the spec requires the out-of-line copy
18324          to have the same parent.  For local class methods, this doesn't
18325          apply; we just use the old DIE.  */
18326       if ((old_die->die_parent == comp_unit_die || context_die == NULL)
18327           && (DECL_ARTIFICIAL (decl)
18328               || (get_AT_file (old_die, DW_AT_decl_file) == file_index
18329                   && (get_AT_unsigned (old_die, DW_AT_decl_line)
18330                       == (unsigned) s.line))))
18331         {
18332           subr_die = old_die;
18333
18334           /* Clear out the declaration attribute and the formal parameters.
18335              Do not remove all children, because it is possible that this
18336              declaration die was forced using force_decl_die(). In such
18337              cases die that forced declaration die (e.g. TAG_imported_module)
18338              is one of the children that we do not want to remove.  */
18339           remove_AT (subr_die, DW_AT_declaration);
18340           remove_child_TAG (subr_die, DW_TAG_formal_parameter);
18341         }
18342       else
18343         {
18344           subr_die = new_die (DW_TAG_subprogram, context_die, decl);
18345           add_AT_specification (subr_die, old_die);
18346           if (get_AT_file (old_die, DW_AT_decl_file) != file_index)
18347             add_AT_file (subr_die, DW_AT_decl_file, file_index);
18348           if (get_AT_unsigned (old_die, DW_AT_decl_line) != (unsigned) s.line)
18349             add_AT_unsigned (subr_die, DW_AT_decl_line, s.line);
18350         }
18351     }
18352   else
18353     {
18354       subr_die = new_die (DW_TAG_subprogram, context_die, decl);
18355
18356       if (TREE_PUBLIC (decl))
18357         add_AT_flag (subr_die, DW_AT_external, 1);
18358
18359       add_name_and_src_coords_attributes (subr_die, decl);
18360       if (debug_info_level > DINFO_LEVEL_TERSE)
18361         {
18362           add_prototyped_attribute (subr_die, TREE_TYPE (decl));
18363           add_type_attribute (subr_die, TREE_TYPE (TREE_TYPE (decl)),
18364                               0, 0, context_die);
18365         }
18366
18367       add_pure_or_virtual_attribute (subr_die, decl);
18368       if (DECL_ARTIFICIAL (decl))
18369         add_AT_flag (subr_die, DW_AT_artificial, 1);
18370
18371       if (TREE_PROTECTED (decl))
18372         add_AT_unsigned (subr_die, DW_AT_accessibility, DW_ACCESS_protected);
18373       else if (TREE_PRIVATE (decl))
18374         add_AT_unsigned (subr_die, DW_AT_accessibility, DW_ACCESS_private);
18375     }
18376
18377   if (declaration)
18378     {
18379       if (!old_die || !get_AT (old_die, DW_AT_inline))
18380         {
18381           add_AT_flag (subr_die, DW_AT_declaration, 1);
18382
18383           /* If this is an explicit function declaration then generate
18384              a DW_AT_explicit attribute.  */
18385           if (lang_hooks.decls.function_decl_explicit_p (decl)
18386               && (dwarf_version >= 3 || !dwarf_strict))
18387             add_AT_flag (subr_die, DW_AT_explicit, 1);
18388
18389           /* The first time we see a member function, it is in the context of
18390              the class to which it belongs.  We make sure of this by emitting
18391              the class first.  The next time is the definition, which is
18392              handled above.  The two may come from the same source text.
18393
18394              Note that force_decl_die() forces function declaration die. It is
18395              later reused to represent definition.  */
18396           equate_decl_number_to_die (decl, subr_die);
18397         }
18398     }
18399   else if (DECL_ABSTRACT (decl))
18400     {
18401       if (DECL_DECLARED_INLINE_P (decl))
18402         {
18403           if (cgraph_function_possibly_inlined_p (decl))
18404             add_AT_unsigned (subr_die, DW_AT_inline, DW_INL_declared_inlined);
18405           else
18406             add_AT_unsigned (subr_die, DW_AT_inline, DW_INL_declared_not_inlined);
18407         }
18408       else
18409         {
18410           if (cgraph_function_possibly_inlined_p (decl))
18411             add_AT_unsigned (subr_die, DW_AT_inline, DW_INL_inlined);
18412           else
18413             add_AT_unsigned (subr_die, DW_AT_inline, DW_INL_not_inlined);
18414         }
18415
18416       if (DECL_DECLARED_INLINE_P (decl)
18417           && lookup_attribute ("artificial", DECL_ATTRIBUTES (decl)))
18418         add_AT_flag (subr_die, DW_AT_artificial, 1);
18419
18420       equate_decl_number_to_die (decl, subr_die);
18421     }
18422   else if (!DECL_EXTERNAL (decl))
18423     {
18424       HOST_WIDE_INT cfa_fb_offset;
18425
18426       if (!old_die || !get_AT (old_die, DW_AT_inline))
18427         equate_decl_number_to_die (decl, subr_die);
18428
18429       if (!flag_reorder_blocks_and_partition)
18430         {
18431           ASM_GENERATE_INTERNAL_LABEL (label_id, FUNC_BEGIN_LABEL,
18432                                        current_function_funcdef_no);
18433           add_AT_lbl_id (subr_die, DW_AT_low_pc, label_id);
18434           ASM_GENERATE_INTERNAL_LABEL (label_id, FUNC_END_LABEL,
18435                                        current_function_funcdef_no);
18436           add_AT_lbl_id (subr_die, DW_AT_high_pc, label_id);
18437
18438           add_pubname (decl, subr_die);
18439           add_arange (decl, subr_die);
18440         }
18441       else
18442         {  /* Do nothing for now; maybe need to duplicate die, one for
18443               hot section and one for cold section, then use the hot/cold
18444               section begin/end labels to generate the aranges...  */
18445           /*
18446             add_AT_lbl_id (subr_die, DW_AT_low_pc, hot_section_label);
18447             add_AT_lbl_id (subr_die, DW_AT_high_pc, hot_section_end_label);
18448             add_AT_lbl_id (subr_die, DW_AT_lo_user, unlikely_section_label);
18449             add_AT_lbl_id (subr_die, DW_AT_hi_user, cold_section_end_label);
18450
18451             add_pubname (decl, subr_die);
18452             add_arange (decl, subr_die);
18453             add_arange (decl, subr_die);
18454            */
18455         }
18456
18457 #ifdef MIPS_DEBUGGING_INFO
18458       /* Add a reference to the FDE for this routine.  */
18459       add_AT_fde_ref (subr_die, DW_AT_MIPS_fde, current_funcdef_fde);
18460 #endif
18461
18462       cfa_fb_offset = CFA_FRAME_BASE_OFFSET (decl);
18463
18464       /* We define the "frame base" as the function's CFA.  This is more
18465          convenient for several reasons: (1) It's stable across the prologue
18466          and epilogue, which makes it better than just a frame pointer,
18467          (2) With dwarf3, there exists a one-byte encoding that allows us
18468          to reference the .debug_frame data by proxy, but failing that,
18469          (3) We can at least reuse the code inspection and interpretation
18470          code that determines the CFA position at various points in the
18471          function.  */
18472       if (dwarf_version >= 3)
18473         {
18474           dw_loc_descr_ref op = new_loc_descr (DW_OP_call_frame_cfa, 0, 0);
18475           add_AT_loc (subr_die, DW_AT_frame_base, op);
18476         }
18477       else
18478         {
18479           dw_loc_list_ref list = convert_cfa_to_fb_loc_list (cfa_fb_offset);
18480           if (list->dw_loc_next)
18481             add_AT_loc_list (subr_die, DW_AT_frame_base, list);
18482           else
18483             add_AT_loc (subr_die, DW_AT_frame_base, list->expr);
18484         }
18485
18486       /* Compute a displacement from the "steady-state frame pointer" to
18487          the CFA.  The former is what all stack slots and argument slots
18488          will reference in the rtl; the later is what we've told the
18489          debugger about.  We'll need to adjust all frame_base references
18490          by this displacement.  */
18491       compute_frame_pointer_to_fb_displacement (cfa_fb_offset);
18492
18493       if (cfun->static_chain_decl)
18494         add_AT_location_description (subr_die, DW_AT_static_link,
18495                  loc_list_from_tree (cfun->static_chain_decl, 2));
18496     }
18497
18498   /* Generate child dies for template paramaters.  */
18499   if (debug_info_level > DINFO_LEVEL_TERSE)
18500     gen_generic_params_dies (decl);
18501
18502   /* Now output descriptions of the arguments for this function. This gets
18503      (unnecessarily?) complex because of the fact that the DECL_ARGUMENT list
18504      for a FUNCTION_DECL doesn't indicate cases where there was a trailing
18505      `...' at the end of the formal parameter list.  In order to find out if
18506      there was a trailing ellipsis or not, we must instead look at the type
18507      associated with the FUNCTION_DECL.  This will be a node of type
18508      FUNCTION_TYPE. If the chain of type nodes hanging off of this
18509      FUNCTION_TYPE node ends with a void_type_node then there should *not* be
18510      an ellipsis at the end.  */
18511
18512   /* In the case where we are describing a mere function declaration, all we
18513      need to do here (and all we *can* do here) is to describe the *types* of
18514      its formal parameters.  */
18515   if (debug_info_level <= DINFO_LEVEL_TERSE)
18516     ;
18517   else if (declaration)
18518     gen_formal_types_die (decl, subr_die);
18519   else
18520     {
18521       /* Generate DIEs to represent all known formal parameters.  */
18522       tree parm = DECL_ARGUMENTS (decl);
18523       tree generic_decl = lang_hooks.decls.get_generic_function_decl (decl);
18524       tree generic_decl_parm = generic_decl
18525                                 ? DECL_ARGUMENTS (generic_decl)
18526                                 : NULL;
18527
18528       /* Now we want to walk the list of parameters of the function and
18529          emit their relevant DIEs.
18530
18531          We consider the case of DECL being an instance of a generic function
18532          as well as it being a normal function.
18533
18534          If DECL is an instance of a generic function we walk the
18535          parameters of the generic function declaration _and_ the parameters of
18536          DECL itself. This is useful because we want to emit specific DIEs for
18537          function parameter packs and those are declared as part of the
18538          generic function declaration. In that particular case,
18539          the parameter pack yields a DW_TAG_GNU_formal_parameter_pack DIE.
18540          That DIE has children DIEs representing the set of arguments
18541          of the pack. Note that the set of pack arguments can be empty.
18542          In that case, the DW_TAG_GNU_formal_parameter_pack DIE will not have any
18543          children DIE.
18544
18545          Otherwise, we just consider the parameters of DECL.  */
18546       while (generic_decl_parm || parm)
18547         {
18548           if (generic_decl_parm
18549               && lang_hooks.function_parameter_pack_p (generic_decl_parm))
18550             gen_formal_parameter_pack_die (generic_decl_parm,
18551                                            parm, subr_die,
18552                                            &parm);
18553           else if (parm)
18554             {
18555               gen_decl_die (parm, NULL, subr_die);
18556               parm = TREE_CHAIN (parm);
18557             }
18558
18559           if (generic_decl_parm)
18560             generic_decl_parm = TREE_CHAIN (generic_decl_parm);
18561         }
18562
18563       /* Decide whether we need an unspecified_parameters DIE at the end.
18564          There are 2 more cases to do this for: 1) the ansi ... declaration -
18565          this is detectable when the end of the arg list is not a
18566          void_type_node 2) an unprototyped function declaration (not a
18567          definition).  This just means that we have no info about the
18568          parameters at all.  */
18569       fn_arg_types = TYPE_ARG_TYPES (TREE_TYPE (decl));
18570       if (fn_arg_types != NULL)
18571         {
18572           /* This is the prototyped case, check for....  */
18573           if (TREE_VALUE (tree_last (fn_arg_types)) != void_type_node)
18574             gen_unspecified_parameters_die (decl, subr_die);
18575         }
18576       else if (DECL_INITIAL (decl) == NULL_TREE)
18577         gen_unspecified_parameters_die (decl, subr_die);
18578     }
18579
18580   /* Output Dwarf info for all of the stuff within the body of the function
18581      (if it has one - it may be just a declaration).  */
18582   outer_scope = DECL_INITIAL (decl);
18583
18584   /* OUTER_SCOPE is a pointer to the outermost BLOCK node created to represent
18585      a function.  This BLOCK actually represents the outermost binding contour
18586      for the function, i.e. the contour in which the function's formal
18587      parameters and labels get declared. Curiously, it appears that the front
18588      end doesn't actually put the PARM_DECL nodes for the current function onto
18589      the BLOCK_VARS list for this outer scope, but are strung off of the
18590      DECL_ARGUMENTS list for the function instead.
18591
18592      The BLOCK_VARS list for the `outer_scope' does provide us with a list of
18593      the LABEL_DECL nodes for the function however, and we output DWARF info
18594      for those in decls_for_scope.  Just within the `outer_scope' there will be
18595      a BLOCK node representing the function's outermost pair of curly braces,
18596      and any blocks used for the base and member initializers of a C++
18597      constructor function.  */
18598   if (! declaration && TREE_CODE (outer_scope) != ERROR_MARK)
18599     {
18600       /* Emit a DW_TAG_variable DIE for a named return value.  */
18601       if (DECL_NAME (DECL_RESULT (decl)))
18602         gen_decl_die (DECL_RESULT (decl), NULL, subr_die);
18603
18604       current_function_has_inlines = 0;
18605       decls_for_scope (outer_scope, subr_die, 0);
18606
18607 #if 0 && defined (MIPS_DEBUGGING_INFO)
18608       if (current_function_has_inlines)
18609         {
18610           add_AT_flag (subr_die, DW_AT_MIPS_has_inlines, 1);
18611           if (! comp_unit_has_inlines)
18612             {
18613               add_AT_flag (comp_unit_die, DW_AT_MIPS_has_inlines, 1);
18614               comp_unit_has_inlines = 1;
18615             }
18616         }
18617 #endif
18618     }
18619   /* Add the calling convention attribute if requested.  */
18620   add_calling_convention_attribute (subr_die, decl);
18621
18622 }
18623
18624 /* Returns a hash value for X (which really is a die_struct).  */
18625
18626 static hashval_t
18627 common_block_die_table_hash (const void *x)
18628 {
18629   const_dw_die_ref d = (const_dw_die_ref) x;
18630   return (hashval_t) d->decl_id ^ htab_hash_pointer (d->die_parent);
18631 }
18632
18633 /* Return nonzero if decl_id and die_parent of die_struct X is the same
18634    as decl_id and die_parent of die_struct Y.  */
18635
18636 static int
18637 common_block_die_table_eq (const void *x, const void *y)
18638 {
18639   const_dw_die_ref d = (const_dw_die_ref) x;
18640   const_dw_die_ref e = (const_dw_die_ref) y;
18641   return d->decl_id == e->decl_id && d->die_parent == e->die_parent;
18642 }
18643
18644 /* Generate a DIE to represent a declared data object.
18645    Either DECL or ORIGIN must be non-null.  */
18646
18647 static void
18648 gen_variable_die (tree decl, tree origin, dw_die_ref context_die)
18649 {
18650   HOST_WIDE_INT off;
18651   tree com_decl;
18652   tree decl_or_origin = decl ? decl : origin;
18653   tree ultimate_origin;
18654   dw_die_ref var_die;
18655   dw_die_ref old_die = decl ? lookup_decl_die (decl) : NULL;
18656   dw_die_ref origin_die;
18657   bool declaration = (DECL_EXTERNAL (decl_or_origin)
18658                       || class_or_namespace_scope_p (context_die));
18659   bool specialization_p = false;
18660
18661   ultimate_origin = decl_ultimate_origin (decl_or_origin);
18662   if (decl || ultimate_origin)
18663     origin = ultimate_origin;
18664   com_decl = fortran_common (decl_or_origin, &off);
18665
18666   /* Symbol in common gets emitted as a child of the common block, in the form
18667      of a data member.  */
18668   if (com_decl)
18669     {
18670       dw_die_ref com_die;
18671       dw_loc_list_ref loc;
18672       die_node com_die_arg;
18673
18674       var_die = lookup_decl_die (decl_or_origin);
18675       if (var_die)
18676         {
18677           if (get_AT (var_die, DW_AT_location) == NULL)
18678             {
18679               loc = loc_list_from_tree (com_decl, off ? 1 : 2);
18680               if (loc)
18681                 {
18682                   if (off)
18683                     {
18684                       /* Optimize the common case.  */
18685                       if (single_element_loc_list_p (loc)
18686                           && loc->expr->dw_loc_opc == DW_OP_addr
18687                           && loc->expr->dw_loc_next == NULL
18688                           && GET_CODE (loc->expr->dw_loc_oprnd1.v.val_addr)
18689                              == SYMBOL_REF)
18690                         loc->expr->dw_loc_oprnd1.v.val_addr
18691                           = plus_constant (loc->expr->dw_loc_oprnd1.v.val_addr, off);
18692                         else
18693                           loc_list_plus_const (loc, off);
18694                     }
18695                   add_AT_location_description (var_die, DW_AT_location, loc);
18696                   remove_AT (var_die, DW_AT_declaration);
18697                 }
18698             }
18699           return;
18700         }
18701
18702       if (common_block_die_table == NULL)
18703         common_block_die_table
18704           = htab_create_ggc (10, common_block_die_table_hash,
18705                              common_block_die_table_eq, NULL);
18706
18707       com_die_arg.decl_id = DECL_UID (com_decl);
18708       com_die_arg.die_parent = context_die;
18709       com_die = (dw_die_ref) htab_find (common_block_die_table, &com_die_arg);
18710       loc = loc_list_from_tree (com_decl, 2);
18711       if (com_die == NULL)
18712         {
18713           const char *cnam
18714             = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (com_decl));
18715           void **slot;
18716
18717           com_die = new_die (DW_TAG_common_block, context_die, decl);
18718           add_name_and_src_coords_attributes (com_die, com_decl);
18719           if (loc)
18720             {
18721               add_AT_location_description (com_die, DW_AT_location, loc);
18722               /* Avoid sharing the same loc descriptor between
18723                  DW_TAG_common_block and DW_TAG_variable.  */
18724               loc = loc_list_from_tree (com_decl, 2);
18725             }
18726           else if (DECL_EXTERNAL (decl))
18727             add_AT_flag (com_die, DW_AT_declaration, 1);
18728           add_pubname_string (cnam, com_die); /* ??? needed? */
18729           com_die->decl_id = DECL_UID (com_decl);
18730           slot = htab_find_slot (common_block_die_table, com_die, INSERT);
18731           *slot = (void *) com_die;
18732         }
18733       else if (get_AT (com_die, DW_AT_location) == NULL && loc)
18734         {
18735           add_AT_location_description (com_die, DW_AT_location, loc);
18736           loc = loc_list_from_tree (com_decl, 2);
18737           remove_AT (com_die, DW_AT_declaration);
18738         }
18739       var_die = new_die (DW_TAG_variable, com_die, decl);
18740       add_name_and_src_coords_attributes (var_die, decl);
18741       add_type_attribute (var_die, TREE_TYPE (decl), TREE_READONLY (decl),
18742                           TREE_THIS_VOLATILE (decl), context_die);
18743       add_AT_flag (var_die, DW_AT_external, 1);
18744       if (loc)
18745         {
18746           if (off)
18747             {
18748               /* Optimize the common case.  */
18749               if (single_element_loc_list_p (loc)
18750                   && loc->expr->dw_loc_opc == DW_OP_addr
18751                   && loc->expr->dw_loc_next == NULL
18752                   && GET_CODE (loc->expr->dw_loc_oprnd1.v.val_addr) == SYMBOL_REF)
18753                 loc->expr->dw_loc_oprnd1.v.val_addr
18754                   = plus_constant (loc->expr->dw_loc_oprnd1.v.val_addr, off);
18755               else
18756                 loc_list_plus_const (loc, off);
18757             }
18758           add_AT_location_description (var_die, DW_AT_location, loc);
18759         }
18760       else if (DECL_EXTERNAL (decl))
18761         add_AT_flag (var_die, DW_AT_declaration, 1);
18762       equate_decl_number_to_die (decl, var_die);
18763       return;
18764     }
18765
18766   /* If the compiler emitted a definition for the DECL declaration
18767      and if we already emitted a DIE for it, don't emit a second
18768      DIE for it again. Allow re-declarations of DECLs that are
18769      inside functions, though.  */
18770   if (old_die && declaration && !local_scope_p (context_die))
18771     return;
18772
18773   /* For static data members, the declaration in the class is supposed
18774      to have DW_TAG_member tag; the specification should still be
18775      DW_TAG_variable referencing the DW_TAG_member DIE.  */
18776   if (declaration && class_scope_p (context_die))
18777     var_die = new_die (DW_TAG_member, context_die, decl);
18778   else
18779     var_die = new_die (DW_TAG_variable, context_die, decl);
18780
18781   origin_die = NULL;
18782   if (origin != NULL)
18783     origin_die = add_abstract_origin_attribute (var_die, origin);
18784
18785   /* Loop unrolling can create multiple blocks that refer to the same
18786      static variable, so we must test for the DW_AT_declaration flag.
18787
18788      ??? Loop unrolling/reorder_blocks should perhaps be rewritten to
18789      copy decls and set the DECL_ABSTRACT flag on them instead of
18790      sharing them.
18791
18792      ??? Duplicated blocks have been rewritten to use .debug_ranges.
18793
18794      ??? The declare_in_namespace support causes us to get two DIEs for one
18795      variable, both of which are declarations.  We want to avoid considering
18796      one to be a specification, so we must test that this DIE is not a
18797      declaration.  */
18798   else if (old_die && TREE_STATIC (decl) && ! declaration
18799            && get_AT_flag (old_die, DW_AT_declaration) == 1)
18800     {
18801       /* This is a definition of a C++ class level static.  */
18802       add_AT_specification (var_die, old_die);
18803       specialization_p = true;
18804       if (DECL_NAME (decl))
18805         {
18806           expanded_location s = expand_location (DECL_SOURCE_LOCATION (decl));
18807           struct dwarf_file_data * file_index = lookup_filename (s.file);
18808
18809           if (get_AT_file (old_die, DW_AT_decl_file) != file_index)
18810             add_AT_file (var_die, DW_AT_decl_file, file_index);
18811
18812           if (get_AT_unsigned (old_die, DW_AT_decl_line) != (unsigned) s.line)
18813             add_AT_unsigned (var_die, DW_AT_decl_line, s.line);
18814         }
18815     }
18816   else
18817     add_name_and_src_coords_attributes (var_die, decl);
18818
18819   if ((origin == NULL && !specialization_p)
18820       || (origin != NULL
18821           && !DECL_ABSTRACT (decl_or_origin)
18822           && variably_modified_type_p (TREE_TYPE (decl_or_origin),
18823                                        decl_function_context
18824                                                         (decl_or_origin))))
18825     {
18826       tree type = TREE_TYPE (decl_or_origin);
18827
18828       if (decl_by_reference_p (decl_or_origin))
18829         add_type_attribute (var_die, TREE_TYPE (type), 0, 0, context_die);
18830       else
18831         add_type_attribute (var_die, type, TREE_READONLY (decl_or_origin),
18832                             TREE_THIS_VOLATILE (decl_or_origin), context_die);
18833     }
18834
18835   if (origin == NULL && !specialization_p)
18836     {
18837       if (TREE_PUBLIC (decl))
18838         add_AT_flag (var_die, DW_AT_external, 1);
18839
18840       if (DECL_ARTIFICIAL (decl))
18841         add_AT_flag (var_die, DW_AT_artificial, 1);
18842
18843       if (TREE_PROTECTED (decl))
18844         add_AT_unsigned (var_die, DW_AT_accessibility, DW_ACCESS_protected);
18845       else if (TREE_PRIVATE (decl))
18846         add_AT_unsigned (var_die, DW_AT_accessibility, DW_ACCESS_private);
18847     }
18848
18849   if (declaration)
18850     add_AT_flag (var_die, DW_AT_declaration, 1);
18851
18852   if (decl && (DECL_ABSTRACT (decl) || declaration))
18853     equate_decl_number_to_die (decl, var_die);
18854
18855   if (! declaration
18856       && (! DECL_ABSTRACT (decl_or_origin)
18857           /* Local static vars are shared between all clones/inlines,
18858              so emit DW_AT_location on the abstract DIE if DECL_RTL is
18859              already set.  */
18860           || (TREE_CODE (decl_or_origin) == VAR_DECL
18861               && TREE_STATIC (decl_or_origin)
18862               && DECL_RTL_SET_P (decl_or_origin)))
18863       /* When abstract origin already has DW_AT_location attribute, no need
18864          to add it again.  */
18865       && (origin_die == NULL || get_AT (origin_die, DW_AT_location) == NULL))
18866     {
18867       if (TREE_CODE (decl_or_origin) == VAR_DECL && TREE_STATIC (decl_or_origin)
18868           && !TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (decl_or_origin)))
18869         defer_location (decl_or_origin, var_die);
18870       else
18871         add_location_or_const_value_attribute (var_die,
18872                                                decl_or_origin,
18873                                                DW_AT_location);
18874       add_pubname (decl_or_origin, var_die);
18875     }
18876   else
18877     tree_add_const_value_attribute_for_decl (var_die, decl_or_origin);
18878 }
18879
18880 /* Generate a DIE to represent a named constant.  */
18881
18882 static void
18883 gen_const_die (tree decl, dw_die_ref context_die)
18884 {
18885   dw_die_ref const_die;
18886   tree type = TREE_TYPE (decl);
18887
18888   const_die = new_die (DW_TAG_constant, context_die, decl);
18889   add_name_and_src_coords_attributes (const_die, decl);
18890   add_type_attribute (const_die, type, 1, 0, context_die);
18891   if (TREE_PUBLIC (decl))
18892     add_AT_flag (const_die, DW_AT_external, 1);
18893   if (DECL_ARTIFICIAL (decl))
18894     add_AT_flag (const_die, DW_AT_artificial, 1);
18895   tree_add_const_value_attribute_for_decl (const_die, decl);
18896 }
18897
18898 /* Generate a DIE to represent a label identifier.  */
18899
18900 static void
18901 gen_label_die (tree decl, dw_die_ref context_die)
18902 {
18903   tree origin = decl_ultimate_origin (decl);
18904   dw_die_ref lbl_die = new_die (DW_TAG_label, context_die, decl);
18905   rtx insn;
18906   char label[MAX_ARTIFICIAL_LABEL_BYTES];
18907
18908   if (origin != NULL)
18909     add_abstract_origin_attribute (lbl_die, origin);
18910   else
18911     add_name_and_src_coords_attributes (lbl_die, decl);
18912
18913   if (DECL_ABSTRACT (decl))
18914     equate_decl_number_to_die (decl, lbl_die);
18915   else
18916     {
18917       insn = DECL_RTL_IF_SET (decl);
18918
18919       /* Deleted labels are programmer specified labels which have been
18920          eliminated because of various optimizations.  We still emit them
18921          here so that it is possible to put breakpoints on them.  */
18922       if (insn
18923           && (LABEL_P (insn)
18924               || ((NOTE_P (insn)
18925                    && NOTE_KIND (insn) == NOTE_INSN_DELETED_LABEL))))
18926         {
18927           /* When optimization is enabled (via -O) some parts of the compiler
18928              (e.g. jump.c and cse.c) may try to delete CODE_LABEL insns which
18929              represent source-level labels which were explicitly declared by
18930              the user.  This really shouldn't be happening though, so catch
18931              it if it ever does happen.  */
18932           gcc_assert (!INSN_DELETED_P (insn));
18933
18934           ASM_GENERATE_INTERNAL_LABEL (label, "L", CODE_LABEL_NUMBER (insn));
18935           add_AT_lbl_id (lbl_die, DW_AT_low_pc, label);
18936         }
18937     }
18938 }
18939
18940 /* A helper function for gen_inlined_subroutine_die.  Add source coordinate
18941    attributes to the DIE for a block STMT, to describe where the inlined
18942    function was called from.  This is similar to add_src_coords_attributes.  */
18943
18944 static inline void
18945 add_call_src_coords_attributes (tree stmt, dw_die_ref die)
18946 {
18947   expanded_location s = expand_location (BLOCK_SOURCE_LOCATION (stmt));
18948
18949   if (dwarf_version >= 3 || !dwarf_strict)
18950     {
18951       add_AT_file (die, DW_AT_call_file, lookup_filename (s.file));
18952       add_AT_unsigned (die, DW_AT_call_line, s.line);
18953     }
18954 }
18955
18956
18957 /* A helper function for gen_lexical_block_die and gen_inlined_subroutine_die.
18958    Add low_pc and high_pc attributes to the DIE for a block STMT.  */
18959
18960 static inline void
18961 add_high_low_attributes (tree stmt, dw_die_ref die)
18962 {
18963   char label[MAX_ARTIFICIAL_LABEL_BYTES];
18964
18965   if (BLOCK_FRAGMENT_CHAIN (stmt)
18966       && (dwarf_version >= 3 || !dwarf_strict))
18967     {
18968       tree chain;
18969
18970       if (inlined_function_outer_scope_p (stmt))
18971         {
18972           ASM_GENERATE_INTERNAL_LABEL (label, BLOCK_BEGIN_LABEL,
18973                                        BLOCK_NUMBER (stmt));
18974           add_AT_lbl_id (die, DW_AT_entry_pc, label);
18975         }
18976
18977       add_AT_range_list (die, DW_AT_ranges, add_ranges (stmt));
18978
18979       chain = BLOCK_FRAGMENT_CHAIN (stmt);
18980       do
18981         {
18982           add_ranges (chain);
18983           chain = BLOCK_FRAGMENT_CHAIN (chain);
18984         }
18985       while (chain);
18986       add_ranges (NULL);
18987     }
18988   else
18989     {
18990       ASM_GENERATE_INTERNAL_LABEL (label, BLOCK_BEGIN_LABEL,
18991                                    BLOCK_NUMBER (stmt));
18992       add_AT_lbl_id (die, DW_AT_low_pc, label);
18993       ASM_GENERATE_INTERNAL_LABEL (label, BLOCK_END_LABEL,
18994                                    BLOCK_NUMBER (stmt));
18995       add_AT_lbl_id (die, DW_AT_high_pc, label);
18996     }
18997 }
18998
18999 /* Generate a DIE for a lexical block.  */
19000
19001 static void
19002 gen_lexical_block_die (tree stmt, dw_die_ref context_die, int depth)
19003 {
19004   dw_die_ref stmt_die = new_die (DW_TAG_lexical_block, context_die, stmt);
19005
19006   if (! BLOCK_ABSTRACT (stmt) && TREE_ASM_WRITTEN (stmt))
19007     add_high_low_attributes (stmt, stmt_die);
19008
19009   decls_for_scope (stmt, stmt_die, depth);
19010 }
19011
19012 /* Generate a DIE for an inlined subprogram.  */
19013
19014 static void
19015 gen_inlined_subroutine_die (tree stmt, dw_die_ref context_die, int depth)
19016 {
19017   tree decl;
19018
19019   /* The instance of function that is effectively being inlined shall not
19020      be abstract.  */
19021   gcc_assert (! BLOCK_ABSTRACT (stmt));
19022
19023   decl = block_ultimate_origin (stmt);
19024
19025   /* Emit info for the abstract instance first, if we haven't yet.  We
19026      must emit this even if the block is abstract, otherwise when we
19027      emit the block below (or elsewhere), we may end up trying to emit
19028      a die whose origin die hasn't been emitted, and crashing.  */
19029   dwarf2out_abstract_function (decl);
19030
19031   if (! BLOCK_ABSTRACT (stmt))
19032     {
19033       dw_die_ref subr_die
19034         = new_die (DW_TAG_inlined_subroutine, context_die, stmt);
19035
19036       add_abstract_origin_attribute (subr_die, decl);
19037       if (TREE_ASM_WRITTEN (stmt))
19038         add_high_low_attributes (stmt, subr_die);
19039       add_call_src_coords_attributes (stmt, subr_die);
19040
19041       decls_for_scope (stmt, subr_die, depth);
19042       current_function_has_inlines = 1;
19043     }
19044 }
19045
19046 /* Generate a DIE for a field in a record, or structure.  */
19047
19048 static void
19049 gen_field_die (tree decl, dw_die_ref context_die)
19050 {
19051   dw_die_ref decl_die;
19052
19053   if (TREE_TYPE (decl) == error_mark_node)
19054     return;
19055
19056   decl_die = new_die (DW_TAG_member, context_die, decl);
19057   add_name_and_src_coords_attributes (decl_die, decl);
19058   add_type_attribute (decl_die, member_declared_type (decl),
19059                       TREE_READONLY (decl), TREE_THIS_VOLATILE (decl),
19060                       context_die);
19061
19062   if (DECL_BIT_FIELD_TYPE (decl))
19063     {
19064       add_byte_size_attribute (decl_die, decl);
19065       add_bit_size_attribute (decl_die, decl);
19066       add_bit_offset_attribute (decl_die, decl);
19067     }
19068
19069   if (TREE_CODE (DECL_FIELD_CONTEXT (decl)) != UNION_TYPE)
19070     add_data_member_location_attribute (decl_die, decl);
19071
19072   if (DECL_ARTIFICIAL (decl))
19073     add_AT_flag (decl_die, DW_AT_artificial, 1);
19074
19075   if (TREE_PROTECTED (decl))
19076     add_AT_unsigned (decl_die, DW_AT_accessibility, DW_ACCESS_protected);
19077   else if (TREE_PRIVATE (decl))
19078     add_AT_unsigned (decl_die, DW_AT_accessibility, DW_ACCESS_private);
19079
19080   /* Equate decl number to die, so that we can look up this decl later on.  */
19081   equate_decl_number_to_die (decl, decl_die);
19082 }
19083
19084 #if 0
19085 /* Don't generate either pointer_type DIEs or reference_type DIEs here.
19086    Use modified_type_die instead.
19087    We keep this code here just in case these types of DIEs may be needed to
19088    represent certain things in other languages (e.g. Pascal) someday.  */
19089
19090 static void
19091 gen_pointer_type_die (tree type, dw_die_ref context_die)
19092 {
19093   dw_die_ref ptr_die
19094     = new_die (DW_TAG_pointer_type, scope_die_for (type, context_die), type);
19095
19096   equate_type_number_to_die (type, ptr_die);
19097   add_type_attribute (ptr_die, TREE_TYPE (type), 0, 0, context_die);
19098   add_AT_unsigned (mod_type_die, DW_AT_byte_size, PTR_SIZE);
19099 }
19100
19101 /* Don't generate either pointer_type DIEs or reference_type DIEs here.
19102    Use modified_type_die instead.
19103    We keep this code here just in case these types of DIEs may be needed to
19104    represent certain things in other languages (e.g. Pascal) someday.  */
19105
19106 static void
19107 gen_reference_type_die (tree type, dw_die_ref context_die)
19108 {
19109   dw_die_ref ref_die, scope_die = scope_die_for (type, context_die);
19110
19111   if (TYPE_REF_IS_RVALUE (type) && dwarf_version >= 4)
19112     ref_die = new_die (DW_TAG_rvalue_reference_type, scope_die, type);
19113   else
19114     ref_die = new_die (DW_TAG_reference_type, scope_die, type);
19115
19116   equate_type_number_to_die (type, ref_die);
19117   add_type_attribute (ref_die, TREE_TYPE (type), 0, 0, context_die);
19118   add_AT_unsigned (mod_type_die, DW_AT_byte_size, PTR_SIZE);
19119 }
19120 #endif
19121
19122 /* Generate a DIE for a pointer to a member type.  */
19123
19124 static void
19125 gen_ptr_to_mbr_type_die (tree type, dw_die_ref context_die)
19126 {
19127   dw_die_ref ptr_die
19128     = new_die (DW_TAG_ptr_to_member_type,
19129                scope_die_for (type, context_die), type);
19130
19131   equate_type_number_to_die (type, ptr_die);
19132   add_AT_die_ref (ptr_die, DW_AT_containing_type,
19133                   lookup_type_die (TYPE_OFFSET_BASETYPE (type)));
19134   add_type_attribute (ptr_die, TREE_TYPE (type), 0, 0, context_die);
19135 }
19136
19137 /* Generate the DIE for the compilation unit.  */
19138
19139 static dw_die_ref
19140 gen_compile_unit_die (const char *filename)
19141 {
19142   dw_die_ref die;
19143   char producer[250];
19144   const char *language_string = lang_hooks.name;
19145   int language;
19146
19147   die = new_die (DW_TAG_compile_unit, NULL, NULL);
19148
19149   if (filename)
19150     {
19151       add_name_attribute (die, filename);
19152       /* Don't add cwd for <built-in>.  */
19153       if (!IS_ABSOLUTE_PATH (filename) && filename[0] != '<')
19154         add_comp_dir_attribute (die);
19155     }
19156
19157   sprintf (producer, "%s %s", language_string, version_string);
19158
19159 #ifdef MIPS_DEBUGGING_INFO
19160   /* The MIPS/SGI compilers place the 'cc' command line options in the producer
19161      string.  The SGI debugger looks for -g, -g1, -g2, or -g3; if they do
19162      not appear in the producer string, the debugger reaches the conclusion
19163      that the object file is stripped and has no debugging information.
19164      To get the MIPS/SGI debugger to believe that there is debugging
19165      information in the object file, we add a -g to the producer string.  */
19166   if (debug_info_level > DINFO_LEVEL_TERSE)
19167     strcat (producer, " -g");
19168 #endif
19169
19170   add_AT_string (die, DW_AT_producer, producer);
19171
19172   language = DW_LANG_C89;
19173   if (strcmp (language_string, "GNU C++") == 0)
19174     language = DW_LANG_C_plus_plus;
19175   else if (strcmp (language_string, "GNU F77") == 0)
19176     language = DW_LANG_Fortran77;
19177   else if (strcmp (language_string, "GNU Pascal") == 0)
19178     language = DW_LANG_Pascal83;
19179   else if (dwarf_version >= 3 || !dwarf_strict)
19180     {
19181       if (strcmp (language_string, "GNU Ada") == 0)
19182         language = DW_LANG_Ada95;
19183       else if (strcmp (language_string, "GNU Fortran") == 0)
19184         language = DW_LANG_Fortran95;
19185       else if (strcmp (language_string, "GNU Java") == 0)
19186         language = DW_LANG_Java;
19187       else if (strcmp (language_string, "GNU Objective-C") == 0)
19188         language = DW_LANG_ObjC;
19189       else if (strcmp (language_string, "GNU Objective-C++") == 0)
19190         language = DW_LANG_ObjC_plus_plus;
19191     }
19192
19193   add_AT_unsigned (die, DW_AT_language, language);
19194
19195   switch (language)
19196     {
19197     case DW_LANG_Fortran77:
19198     case DW_LANG_Fortran90:
19199     case DW_LANG_Fortran95:
19200       /* Fortran has case insensitive identifiers and the front-end
19201          lowercases everything.  */
19202       add_AT_unsigned (die, DW_AT_identifier_case, DW_ID_down_case);
19203       break;
19204     default:
19205       /* The default DW_ID_case_sensitive doesn't need to be specified.  */
19206       break;
19207     }
19208   return die;
19209 }
19210
19211 /* Generate the DIE for a base class.  */
19212
19213 static void
19214 gen_inheritance_die (tree binfo, tree access, dw_die_ref context_die)
19215 {
19216   dw_die_ref die = new_die (DW_TAG_inheritance, context_die, binfo);
19217
19218   add_type_attribute (die, BINFO_TYPE (binfo), 0, 0, context_die);
19219   add_data_member_location_attribute (die, binfo);
19220
19221   if (BINFO_VIRTUAL_P (binfo))
19222     add_AT_unsigned (die, DW_AT_virtuality, DW_VIRTUALITY_virtual);
19223
19224   if (access == access_public_node)
19225     add_AT_unsigned (die, DW_AT_accessibility, DW_ACCESS_public);
19226   else if (access == access_protected_node)
19227     add_AT_unsigned (die, DW_AT_accessibility, DW_ACCESS_protected);
19228 }
19229
19230 /* Generate a DIE for a class member.  */
19231
19232 static void
19233 gen_member_die (tree type, dw_die_ref context_die)
19234 {
19235   tree member;
19236   tree binfo = TYPE_BINFO (type);
19237   dw_die_ref child;
19238
19239   /* If this is not an incomplete type, output descriptions of each of its
19240      members. Note that as we output the DIEs necessary to represent the
19241      members of this record or union type, we will also be trying to output
19242      DIEs to represent the *types* of those members. However the `type'
19243      function (above) will specifically avoid generating type DIEs for member
19244      types *within* the list of member DIEs for this (containing) type except
19245      for those types (of members) which are explicitly marked as also being
19246      members of this (containing) type themselves.  The g++ front- end can
19247      force any given type to be treated as a member of some other (containing)
19248      type by setting the TYPE_CONTEXT of the given (member) type to point to
19249      the TREE node representing the appropriate (containing) type.  */
19250
19251   /* First output info about the base classes.  */
19252   if (binfo)
19253     {
19254       VEC(tree,gc) *accesses = BINFO_BASE_ACCESSES (binfo);
19255       int i;
19256       tree base;
19257
19258       for (i = 0; BINFO_BASE_ITERATE (binfo, i, base); i++)
19259         gen_inheritance_die (base,
19260                              (accesses ? VEC_index (tree, accesses, i)
19261                               : access_public_node), context_die);
19262     }
19263
19264   /* Now output info about the data members and type members.  */
19265   for (member = TYPE_FIELDS (type); member; member = TREE_CHAIN (member))
19266     {
19267       /* If we thought we were generating minimal debug info for TYPE
19268          and then changed our minds, some of the member declarations
19269          may have already been defined.  Don't define them again, but
19270          do put them in the right order.  */
19271
19272       child = lookup_decl_die (member);
19273       if (child)
19274         splice_child_die (context_die, child);
19275       else
19276         gen_decl_die (member, NULL, context_die);
19277     }
19278
19279   /* Now output info about the function members (if any).  */
19280   for (member = TYPE_METHODS (type); member; member = TREE_CHAIN (member))
19281     {
19282       /* Don't include clones in the member list.  */
19283       if (DECL_ABSTRACT_ORIGIN (member))
19284         continue;
19285
19286       child = lookup_decl_die (member);
19287       if (child)
19288         splice_child_die (context_die, child);
19289       else
19290         gen_decl_die (member, NULL, context_die);
19291     }
19292 }
19293
19294 /* Generate a DIE for a structure or union type.  If TYPE_DECL_SUPPRESS_DEBUG
19295    is set, we pretend that the type was never defined, so we only get the
19296    member DIEs needed by later specification DIEs.  */
19297
19298 static void
19299 gen_struct_or_union_type_die (tree type, dw_die_ref context_die,
19300                                 enum debug_info_usage usage)
19301 {
19302   dw_die_ref type_die = lookup_type_die (type);
19303   dw_die_ref scope_die = 0;
19304   int nested = 0;
19305   int complete = (TYPE_SIZE (type)
19306                   && (! TYPE_STUB_DECL (type)
19307                       || ! TYPE_DECL_SUPPRESS_DEBUG (TYPE_STUB_DECL (type))));
19308   int ns_decl = (context_die && context_die->die_tag == DW_TAG_namespace);
19309   complete = complete && should_emit_struct_debug (type, usage);
19310
19311   if (type_die && ! complete)
19312     return;
19313
19314   if (TYPE_CONTEXT (type) != NULL_TREE
19315       && (AGGREGATE_TYPE_P (TYPE_CONTEXT (type))
19316           || TREE_CODE (TYPE_CONTEXT (type)) == NAMESPACE_DECL))
19317     nested = 1;
19318
19319   scope_die = scope_die_for (type, context_die);
19320
19321   if (! type_die || (nested && scope_die == comp_unit_die))
19322     /* First occurrence of type or toplevel definition of nested class.  */
19323     {
19324       dw_die_ref old_die = type_die;
19325
19326       type_die = new_die (TREE_CODE (type) == RECORD_TYPE
19327                           ? record_type_tag (type) : DW_TAG_union_type,
19328                           scope_die, type);
19329       equate_type_number_to_die (type, type_die);
19330       if (old_die)
19331         add_AT_specification (type_die, old_die);
19332       else
19333         add_name_attribute (type_die, type_tag (type));
19334     }
19335   else
19336     remove_AT (type_die, DW_AT_declaration);
19337
19338   /* Generate child dies for template paramaters.  */
19339   if (debug_info_level > DINFO_LEVEL_TERSE
19340       && COMPLETE_TYPE_P (type))
19341     gen_generic_params_dies (type);
19342
19343   /* If this type has been completed, then give it a byte_size attribute and
19344      then give a list of members.  */
19345   if (complete && !ns_decl)
19346     {
19347       /* Prevent infinite recursion in cases where the type of some member of
19348          this type is expressed in terms of this type itself.  */
19349       TREE_ASM_WRITTEN (type) = 1;
19350       add_byte_size_attribute (type_die, type);
19351       if (TYPE_STUB_DECL (type) != NULL_TREE)
19352         add_src_coords_attributes (type_die, TYPE_STUB_DECL (type));
19353
19354       /* If the first reference to this type was as the return type of an
19355          inline function, then it may not have a parent.  Fix this now.  */
19356       if (type_die->die_parent == NULL)
19357         add_child_die (scope_die, type_die);
19358
19359       push_decl_scope (type);
19360       gen_member_die (type, type_die);
19361       pop_decl_scope ();
19362
19363       /* GNU extension: Record what type our vtable lives in.  */
19364       if (TYPE_VFIELD (type))
19365         {
19366           tree vtype = DECL_FCONTEXT (TYPE_VFIELD (type));
19367
19368           gen_type_die (vtype, context_die);
19369           add_AT_die_ref (type_die, DW_AT_containing_type,
19370                           lookup_type_die (vtype));
19371         }
19372     }
19373   else
19374     {
19375       add_AT_flag (type_die, DW_AT_declaration, 1);
19376
19377       /* We don't need to do this for function-local types.  */
19378       if (TYPE_STUB_DECL (type)
19379           && ! decl_function_context (TYPE_STUB_DECL (type)))
19380         VEC_safe_push (tree, gc, incomplete_types, type);
19381     }
19382
19383   if (get_AT (type_die, DW_AT_name))
19384     add_pubtype (type, type_die);
19385 }
19386
19387 /* Generate a DIE for a subroutine _type_.  */
19388
19389 static void
19390 gen_subroutine_type_die (tree type, dw_die_ref context_die)
19391 {
19392   tree return_type = TREE_TYPE (type);
19393   dw_die_ref subr_die
19394     = new_die (DW_TAG_subroutine_type,
19395                scope_die_for (type, context_die), type);
19396
19397   equate_type_number_to_die (type, subr_die);
19398   add_prototyped_attribute (subr_die, type);
19399   add_type_attribute (subr_die, return_type, 0, 0, context_die);
19400   gen_formal_types_die (type, subr_die);
19401
19402   if (get_AT (subr_die, DW_AT_name))
19403     add_pubtype (type, subr_die);
19404 }
19405
19406 /* Generate a DIE for a type definition.  */
19407
19408 static void
19409 gen_typedef_die (tree decl, dw_die_ref context_die)
19410 {
19411   dw_die_ref type_die;
19412   tree origin;
19413
19414   if (TREE_ASM_WRITTEN (decl))
19415     return;
19416
19417   TREE_ASM_WRITTEN (decl) = 1;
19418   type_die = new_die (DW_TAG_typedef, context_die, decl);
19419   origin = decl_ultimate_origin (decl);
19420   if (origin != NULL)
19421     add_abstract_origin_attribute (type_die, origin);
19422   else
19423     {
19424       tree type;
19425
19426       add_name_and_src_coords_attributes (type_die, decl);
19427       if (DECL_ORIGINAL_TYPE (decl))
19428         {
19429           type = DECL_ORIGINAL_TYPE (decl);
19430
19431           gcc_assert (type != TREE_TYPE (decl));
19432           equate_type_number_to_die (TREE_TYPE (decl), type_die);
19433         }
19434       else
19435         {
19436           type = TREE_TYPE (decl);
19437
19438           if (is_naming_typedef_decl (TYPE_NAME (type)))
19439             /* 
19440                Here, we are in the case of decl being a typedef naming
19441                an anonymous type, e.g:
19442                      typedef struct {...} foo;
19443                In that case TREE_TYPE (decl) is not a typedef variant
19444                type and TYPE_NAME of the anonymous type is set to the
19445                TYPE_DECL of the typedef. This construct is emitted by
19446                the C++ FE.
19447
19448                TYPE is the anonymous struct named by the typedef
19449                DECL. As we need the DW_AT_type attribute of the
19450                DW_TAG_typedef to point to the DIE of TYPE, let's
19451                generate that DIE right away. add_type_attribute
19452                called below will then pick (via lookup_type_die) that
19453                anonymous struct DIE.  */
19454             gen_tagged_type_die (type, context_die, DINFO_USAGE_DIR_USE);
19455         }
19456
19457       add_type_attribute (type_die, type, TREE_READONLY (decl),
19458                           TREE_THIS_VOLATILE (decl), context_die);
19459
19460       if (is_naming_typedef_decl (decl))
19461         /* We want that all subsequent calls to lookup_type_die with
19462            TYPE in argument yield the DW_TAG_typedef we have just
19463            created.  */
19464         equate_type_number_to_die (type, type_die);
19465     }
19466
19467   if (DECL_ABSTRACT (decl))
19468     equate_decl_number_to_die (decl, type_die);
19469
19470   if (get_AT (type_die, DW_AT_name))
19471     add_pubtype (decl, type_die);
19472 }
19473
19474 /* Generate a DIE for a struct, class, enum or union type.  */
19475
19476 static void
19477 gen_tagged_type_die (tree type,
19478                      dw_die_ref context_die,
19479                      enum debug_info_usage usage)
19480 {
19481   int need_pop;
19482
19483   if (type == NULL_TREE
19484       || !is_tagged_type (type))
19485     return;
19486
19487   /* If this is a nested type whose containing class hasn't been written
19488      out yet, writing it out will cover this one, too.  This does not apply
19489      to instantiations of member class templates; they need to be added to
19490      the containing class as they are generated.  FIXME: This hurts the
19491      idea of combining type decls from multiple TUs, since we can't predict
19492      what set of template instantiations we'll get.  */
19493   if (TYPE_CONTEXT (type)
19494       && AGGREGATE_TYPE_P (TYPE_CONTEXT (type))
19495       && ! TREE_ASM_WRITTEN (TYPE_CONTEXT (type)))
19496     {
19497       gen_type_die_with_usage (TYPE_CONTEXT (type), context_die, usage);
19498
19499       if (TREE_ASM_WRITTEN (type))
19500         return;
19501
19502       /* If that failed, attach ourselves to the stub.  */
19503       push_decl_scope (TYPE_CONTEXT (type));
19504       context_die = lookup_type_die (TYPE_CONTEXT (type));
19505       need_pop = 1;
19506     }
19507   else if (TYPE_CONTEXT (type) != NULL_TREE
19508            && (TREE_CODE (TYPE_CONTEXT (type)) == FUNCTION_DECL))
19509     {
19510       /* If this type is local to a function that hasn't been written
19511          out yet, use a NULL context for now; it will be fixed up in
19512          decls_for_scope.  */
19513       context_die = lookup_decl_die (TYPE_CONTEXT (type));
19514       need_pop = 0;
19515     }
19516   else
19517     {
19518       context_die = declare_in_namespace (type, context_die);
19519       need_pop = 0;
19520     }
19521
19522   if (TREE_CODE (type) == ENUMERAL_TYPE)
19523     {
19524       /* This might have been written out by the call to
19525          declare_in_namespace.  */
19526       if (!TREE_ASM_WRITTEN (type))
19527         gen_enumeration_type_die (type, context_die);
19528     }
19529   else
19530     gen_struct_or_union_type_die (type, context_die, usage);
19531
19532   if (need_pop)
19533     pop_decl_scope ();
19534
19535   /* Don't set TREE_ASM_WRITTEN on an incomplete struct; we want to fix
19536      it up if it is ever completed.  gen_*_type_die will set it for us
19537      when appropriate.  */
19538 }
19539
19540 /* Generate a type description DIE.  */
19541
19542 static void
19543 gen_type_die_with_usage (tree type, dw_die_ref context_die,
19544                                 enum debug_info_usage usage)
19545 {
19546   struct array_descr_info info;
19547
19548   if (type == NULL_TREE || type == error_mark_node)
19549     return;
19550
19551   /* If TYPE is a typedef type variant, let's generate debug info
19552      for the parent typedef which TYPE is a type of.  */
19553   if (typedef_variant_p (type))
19554     {
19555       if (TREE_ASM_WRITTEN (type))
19556         return;
19557
19558       /* Prevent broken recursion; we can't hand off to the same type.  */
19559       gcc_assert (DECL_ORIGINAL_TYPE (TYPE_NAME (type)) != type);
19560
19561       /* Use the DIE of the containing namespace as the parent DIE of
19562          the type description DIE we want to generate.  */
19563       if (DECL_CONTEXT (TYPE_NAME (type))
19564           && TREE_CODE (DECL_CONTEXT (TYPE_NAME (type))) == NAMESPACE_DECL)
19565         context_die = get_context_die (DECL_CONTEXT (TYPE_NAME (type)));
19566
19567       TREE_ASM_WRITTEN (type) = 1;
19568
19569       gen_decl_die (TYPE_NAME (type), NULL, context_die);
19570       return;
19571     }
19572
19573   /* If type is an anonymous tagged type named by a typedef, let's
19574      generate debug info for the typedef.  */
19575   if (is_naming_typedef_decl (TYPE_NAME (type)))
19576     {
19577       /* Use the DIE of the containing namespace as the parent DIE of
19578          the type description DIE we want to generate.  */
19579       if (DECL_CONTEXT (TYPE_NAME (type))
19580           && TREE_CODE (DECL_CONTEXT (TYPE_NAME (type))) == NAMESPACE_DECL)
19581         context_die = get_context_die (DECL_CONTEXT (TYPE_NAME (type)));
19582       
19583       gen_decl_die (TYPE_NAME (type), NULL, context_die);
19584       return;
19585     }
19586
19587   /* If this is an array type with hidden descriptor, handle it first.  */
19588   if (!TREE_ASM_WRITTEN (type)
19589       && lang_hooks.types.get_array_descr_info
19590       && lang_hooks.types.get_array_descr_info (type, &info)
19591       && (dwarf_version >= 3 || !dwarf_strict))
19592     {
19593       gen_descr_array_type_die (type, &info, context_die);
19594       TREE_ASM_WRITTEN (type) = 1;
19595       return;
19596     }
19597
19598   /* We are going to output a DIE to represent the unqualified version
19599      of this type (i.e. without any const or volatile qualifiers) so
19600      get the main variant (i.e. the unqualified version) of this type
19601      now.  (Vectors are special because the debugging info is in the
19602      cloned type itself).  */
19603   if (TREE_CODE (type) != VECTOR_TYPE)
19604     type = type_main_variant (type);
19605
19606   if (TREE_ASM_WRITTEN (type))
19607     return;
19608
19609   switch (TREE_CODE (type))
19610     {
19611     case ERROR_MARK:
19612       break;
19613
19614     case POINTER_TYPE:
19615     case REFERENCE_TYPE:
19616       /* We must set TREE_ASM_WRITTEN in case this is a recursive type.  This
19617          ensures that the gen_type_die recursion will terminate even if the
19618          type is recursive.  Recursive types are possible in Ada.  */
19619       /* ??? We could perhaps do this for all types before the switch
19620          statement.  */
19621       TREE_ASM_WRITTEN (type) = 1;
19622
19623       /* For these types, all that is required is that we output a DIE (or a
19624          set of DIEs) to represent the "basis" type.  */
19625       gen_type_die_with_usage (TREE_TYPE (type), context_die,
19626                                 DINFO_USAGE_IND_USE);
19627       break;
19628
19629     case OFFSET_TYPE:
19630       /* This code is used for C++ pointer-to-data-member types.
19631          Output a description of the relevant class type.  */
19632       gen_type_die_with_usage (TYPE_OFFSET_BASETYPE (type), context_die,
19633                                         DINFO_USAGE_IND_USE);
19634
19635       /* Output a description of the type of the object pointed to.  */
19636       gen_type_die_with_usage (TREE_TYPE (type), context_die,
19637                                         DINFO_USAGE_IND_USE);
19638
19639       /* Now output a DIE to represent this pointer-to-data-member type
19640          itself.  */
19641       gen_ptr_to_mbr_type_die (type, context_die);
19642       break;
19643
19644     case FUNCTION_TYPE:
19645       /* Force out return type (in case it wasn't forced out already).  */
19646       gen_type_die_with_usage (TREE_TYPE (type), context_die,
19647                                         DINFO_USAGE_DIR_USE);
19648       gen_subroutine_type_die (type, context_die);
19649       break;
19650
19651     case METHOD_TYPE:
19652       /* Force out return type (in case it wasn't forced out already).  */
19653       gen_type_die_with_usage (TREE_TYPE (type), context_die,
19654                                         DINFO_USAGE_DIR_USE);
19655       gen_subroutine_type_die (type, context_die);
19656       break;
19657
19658     case ARRAY_TYPE:
19659       gen_array_type_die (type, context_die);
19660       break;
19661
19662     case VECTOR_TYPE:
19663       gen_array_type_die (type, context_die);
19664       break;
19665
19666     case ENUMERAL_TYPE:
19667     case RECORD_TYPE:
19668     case UNION_TYPE:
19669     case QUAL_UNION_TYPE:
19670       gen_tagged_type_die (type, context_die, usage);
19671       return;
19672
19673     case VOID_TYPE:
19674     case INTEGER_TYPE:
19675     case REAL_TYPE:
19676     case FIXED_POINT_TYPE:
19677     case COMPLEX_TYPE:
19678     case BOOLEAN_TYPE:
19679       /* No DIEs needed for fundamental types.  */
19680       break;
19681
19682     case LANG_TYPE:
19683       /* Just use DW_TAG_unspecified_type.  */
19684       {
19685         dw_die_ref type_die = lookup_type_die (type);
19686         if (type_die == NULL)
19687           {
19688             tree name = TYPE_NAME (type);
19689             if (TREE_CODE (name) == TYPE_DECL)
19690               name = DECL_NAME (name);
19691             type_die = new_die (DW_TAG_unspecified_type, comp_unit_die, type);
19692             add_name_attribute (type_die, IDENTIFIER_POINTER (name));
19693             equate_type_number_to_die (type, type_die);
19694           }
19695       }
19696       break;
19697
19698     default:
19699       gcc_unreachable ();
19700     }
19701
19702   TREE_ASM_WRITTEN (type) = 1;
19703 }
19704
19705 static void
19706 gen_type_die (tree type, dw_die_ref context_die)
19707 {
19708   gen_type_die_with_usage (type, context_die, DINFO_USAGE_DIR_USE);
19709 }
19710
19711 /* Generate a DW_TAG_lexical_block DIE followed by DIEs to represent all of the
19712    things which are local to the given block.  */
19713
19714 static void
19715 gen_block_die (tree stmt, dw_die_ref context_die, int depth)
19716 {
19717   int must_output_die = 0;
19718   bool inlined_func;
19719
19720   /* Ignore blocks that are NULL.  */
19721   if (stmt == NULL_TREE)
19722     return;
19723
19724   inlined_func = inlined_function_outer_scope_p (stmt);
19725
19726   /* If the block is one fragment of a non-contiguous block, do not
19727      process the variables, since they will have been done by the
19728      origin block.  Do process subblocks.  */
19729   if (BLOCK_FRAGMENT_ORIGIN (stmt))
19730     {
19731       tree sub;
19732
19733       for (sub = BLOCK_SUBBLOCKS (stmt); sub; sub = BLOCK_CHAIN (sub))
19734         gen_block_die (sub, context_die, depth + 1);
19735
19736       return;
19737     }
19738
19739   /* Determine if we need to output any Dwarf DIEs at all to represent this
19740      block.  */
19741   if (inlined_func)
19742     /* The outer scopes for inlinings *must* always be represented.  We
19743        generate DW_TAG_inlined_subroutine DIEs for them.  (See below.) */
19744     must_output_die = 1;
19745   else
19746     {
19747       /* Determine if this block directly contains any "significant"
19748          local declarations which we will need to output DIEs for.  */
19749       if (debug_info_level > DINFO_LEVEL_TERSE)
19750         /* We are not in terse mode so *any* local declaration counts
19751            as being a "significant" one.  */
19752         must_output_die = ((BLOCK_VARS (stmt) != NULL
19753                             || BLOCK_NUM_NONLOCALIZED_VARS (stmt))
19754                            && (TREE_USED (stmt)
19755                                || TREE_ASM_WRITTEN (stmt)
19756                                || BLOCK_ABSTRACT (stmt)));
19757       else if ((TREE_USED (stmt)
19758                 || TREE_ASM_WRITTEN (stmt)
19759                 || BLOCK_ABSTRACT (stmt))
19760                && !dwarf2out_ignore_block (stmt))
19761         must_output_die = 1;
19762     }
19763
19764   /* It would be a waste of space to generate a Dwarf DW_TAG_lexical_block
19765      DIE for any block which contains no significant local declarations at
19766      all.  Rather, in such cases we just call `decls_for_scope' so that any
19767      needed Dwarf info for any sub-blocks will get properly generated. Note
19768      that in terse mode, our definition of what constitutes a "significant"
19769      local declaration gets restricted to include only inlined function
19770      instances and local (nested) function definitions.  */
19771   if (must_output_die)
19772     {
19773       if (inlined_func)
19774         {
19775           /* If STMT block is abstract, that means we have been called
19776              indirectly from dwarf2out_abstract_function.
19777              That function rightfully marks the descendent blocks (of
19778              the abstract function it is dealing with) as being abstract,
19779              precisely to prevent us from emitting any
19780              DW_TAG_inlined_subroutine DIE as a descendent
19781              of an abstract function instance. So in that case, we should
19782              not call gen_inlined_subroutine_die.
19783
19784              Later though, when cgraph asks dwarf2out to emit info
19785              for the concrete instance of the function decl into which
19786              the concrete instance of STMT got inlined, the later will lead
19787              to the generation of a DW_TAG_inlined_subroutine DIE.  */
19788           if (! BLOCK_ABSTRACT (stmt))
19789             gen_inlined_subroutine_die (stmt, context_die, depth);
19790         }
19791       else
19792         gen_lexical_block_die (stmt, context_die, depth);
19793     }
19794   else
19795     decls_for_scope (stmt, context_die, depth);
19796 }
19797
19798 /* Process variable DECL (or variable with origin ORIGIN) within
19799    block STMT and add it to CONTEXT_DIE.  */
19800 static void
19801 process_scope_var (tree stmt, tree decl, tree origin, dw_die_ref context_die)
19802 {
19803   dw_die_ref die;
19804   tree decl_or_origin = decl ? decl : origin;
19805
19806   if (TREE_CODE (decl_or_origin) == FUNCTION_DECL)
19807     die = lookup_decl_die (decl_or_origin);
19808   else if (TREE_CODE (decl_or_origin) == TYPE_DECL
19809            && TYPE_DECL_IS_STUB (decl_or_origin))
19810     die = lookup_type_die (TREE_TYPE (decl_or_origin));
19811   else
19812     die = NULL;
19813
19814   if (die != NULL && die->die_parent == NULL)
19815     add_child_die (context_die, die);
19816   else if (TREE_CODE (decl_or_origin) == IMPORTED_DECL)
19817     dwarf2out_imported_module_or_decl_1 (decl_or_origin, DECL_NAME (decl_or_origin),
19818                                          stmt, context_die);
19819   else
19820     gen_decl_die (decl, origin, context_die);
19821 }
19822
19823 /* Generate all of the decls declared within a given scope and (recursively)
19824    all of its sub-blocks.  */
19825
19826 static void
19827 decls_for_scope (tree stmt, dw_die_ref context_die, int depth)
19828 {
19829   tree decl;
19830   unsigned int i;
19831   tree subblocks;
19832
19833   /* Ignore NULL blocks.  */
19834   if (stmt == NULL_TREE)
19835     return;
19836
19837   /* Output the DIEs to represent all of the data objects and typedefs
19838      declared directly within this block but not within any nested
19839      sub-blocks.  Also, nested function and tag DIEs have been
19840      generated with a parent of NULL; fix that up now.  */
19841   for (decl = BLOCK_VARS (stmt); decl != NULL; decl = TREE_CHAIN (decl))
19842     process_scope_var (stmt, decl, NULL_TREE, context_die);
19843   for (i = 0; i < BLOCK_NUM_NONLOCALIZED_VARS (stmt); i++)
19844     process_scope_var (stmt, NULL, BLOCK_NONLOCALIZED_VAR (stmt, i),
19845                        context_die);
19846
19847   /* If we're at -g1, we're not interested in subblocks.  */
19848   if (debug_info_level <= DINFO_LEVEL_TERSE)
19849     return;
19850
19851   /* Output the DIEs to represent all sub-blocks (and the items declared
19852      therein) of this block.  */
19853   for (subblocks = BLOCK_SUBBLOCKS (stmt);
19854        subblocks != NULL;
19855        subblocks = BLOCK_CHAIN (subblocks))
19856     gen_block_die (subblocks, context_die, depth + 1);
19857 }
19858
19859 /* Is this a typedef we can avoid emitting?  */
19860
19861 static inline int
19862 is_redundant_typedef (const_tree decl)
19863 {
19864   if (TYPE_DECL_IS_STUB (decl))
19865     return 1;
19866
19867   if (DECL_ARTIFICIAL (decl)
19868       && DECL_CONTEXT (decl)
19869       && is_tagged_type (DECL_CONTEXT (decl))
19870       && TREE_CODE (TYPE_NAME (DECL_CONTEXT (decl))) == TYPE_DECL
19871       && DECL_NAME (decl) == DECL_NAME (TYPE_NAME (DECL_CONTEXT (decl))))
19872     /* Also ignore the artificial member typedef for the class name.  */
19873     return 1;
19874
19875   return 0;
19876 }
19877
19878 /* Return TRUE if TYPE is a typedef that names a type for linkage
19879    purposes. This kind of typedefs is produced by the C++ FE for
19880    constructs like:
19881
19882    typedef struct {...} foo;
19883
19884    In that case, there is no typedef variant type produced for foo.
19885    Rather, the TREE_TYPE of the TYPE_DECL of foo is the anonymous
19886    struct type.  */
19887
19888 static bool
19889 is_naming_typedef_decl (const_tree decl)
19890 {
19891   if (decl == NULL_TREE
19892       || TREE_CODE (decl) != TYPE_DECL
19893       || !is_tagged_type (TREE_TYPE (decl))
19894       || is_redundant_typedef (decl)
19895       /* It looks like Ada produces TYPE_DECLs that are very similar
19896          to C++ naming typedefs but that have different
19897          semantics. Let's be specific to c++ for now.  */
19898       || !is_cxx ())
19899     return FALSE;
19900
19901   return (DECL_ORIGINAL_TYPE (decl) == NULL_TREE
19902           && TYPE_NAME (TREE_TYPE (decl)) == decl
19903           && (TYPE_STUB_DECL (TREE_TYPE (decl))
19904               != TYPE_NAME (TREE_TYPE (decl))));
19905 }
19906
19907 /* Returns the DIE for a context.  */
19908
19909 static inline dw_die_ref
19910 get_context_die (tree context)
19911 {
19912   if (context)
19913     {
19914       /* Find die that represents this context.  */
19915       if (TYPE_P (context))
19916         return force_type_die (TYPE_MAIN_VARIANT (context));
19917       else
19918         return force_decl_die (context);
19919     }
19920   return comp_unit_die;
19921 }
19922
19923 /* Returns the DIE for decl.  A DIE will always be returned.  */
19924
19925 static dw_die_ref
19926 force_decl_die (tree decl)
19927 {
19928   dw_die_ref decl_die;
19929   unsigned saved_external_flag;
19930   tree save_fn = NULL_TREE;
19931   decl_die = lookup_decl_die (decl);
19932   if (!decl_die)
19933     {
19934       dw_die_ref context_die = get_context_die (DECL_CONTEXT (decl));
19935
19936       decl_die = lookup_decl_die (decl);
19937       if (decl_die)
19938         return decl_die;
19939
19940       switch (TREE_CODE (decl))
19941         {
19942         case FUNCTION_DECL:
19943           /* Clear current_function_decl, so that gen_subprogram_die thinks
19944              that this is a declaration. At this point, we just want to force
19945              declaration die.  */
19946           save_fn = current_function_decl;
19947           current_function_decl = NULL_TREE;
19948           gen_subprogram_die (decl, context_die);
19949           current_function_decl = save_fn;
19950           break;
19951
19952         case VAR_DECL:
19953           /* Set external flag to force declaration die. Restore it after
19954            gen_decl_die() call.  */
19955           saved_external_flag = DECL_EXTERNAL (decl);
19956           DECL_EXTERNAL (decl) = 1;
19957           gen_decl_die (decl, NULL, context_die);
19958           DECL_EXTERNAL (decl) = saved_external_flag;
19959           break;
19960
19961         case NAMESPACE_DECL:
19962           if (dwarf_version >= 3 || !dwarf_strict)
19963             dwarf2out_decl (decl);
19964           else
19965             /* DWARF2 has neither DW_TAG_module, nor DW_TAG_namespace.  */
19966             decl_die = comp_unit_die;
19967           break;
19968
19969         default:
19970           gcc_unreachable ();
19971         }
19972
19973       /* We should be able to find the DIE now.  */
19974       if (!decl_die)
19975         decl_die = lookup_decl_die (decl);
19976       gcc_assert (decl_die);
19977     }
19978
19979   return decl_die;
19980 }
19981
19982 /* Returns the DIE for TYPE, that must not be a base type.  A DIE is
19983    always returned.  */
19984
19985 static dw_die_ref
19986 force_type_die (tree type)
19987 {
19988   dw_die_ref type_die;
19989
19990   type_die = lookup_type_die (type);
19991   if (!type_die)
19992     {
19993       dw_die_ref context_die = get_context_die (TYPE_CONTEXT (type));
19994
19995       type_die = modified_type_die (type, TYPE_READONLY (type),
19996                                     TYPE_VOLATILE (type), context_die);
19997       gcc_assert (type_die);
19998     }
19999   return type_die;
20000 }
20001
20002 /* Force out any required namespaces to be able to output DECL,
20003    and return the new context_die for it, if it's changed.  */
20004
20005 static dw_die_ref
20006 setup_namespace_context (tree thing, dw_die_ref context_die)
20007 {
20008   tree context = (DECL_P (thing)
20009                   ? DECL_CONTEXT (thing) : TYPE_CONTEXT (thing));
20010   if (context && TREE_CODE (context) == NAMESPACE_DECL)
20011     /* Force out the namespace.  */
20012     context_die = force_decl_die (context);
20013
20014   return context_die;
20015 }
20016
20017 /* Emit a declaration DIE for THING (which is either a DECL or a tagged
20018    type) within its namespace, if appropriate.
20019
20020    For compatibility with older debuggers, namespace DIEs only contain
20021    declarations; all definitions are emitted at CU scope.  */
20022
20023 static dw_die_ref
20024 declare_in_namespace (tree thing, dw_die_ref context_die)
20025 {
20026   dw_die_ref ns_context;
20027
20028   if (debug_info_level <= DINFO_LEVEL_TERSE)
20029     return context_die;
20030
20031   /* If this decl is from an inlined function, then don't try to emit it in its
20032      namespace, as we will get confused.  It would have already been emitted
20033      when the abstract instance of the inline function was emitted anyways.  */
20034   if (DECL_P (thing) && DECL_ABSTRACT_ORIGIN (thing))
20035     return context_die;
20036
20037   ns_context = setup_namespace_context (thing, context_die);
20038
20039   if (ns_context != context_die)
20040     {
20041       if (is_fortran ())
20042         return ns_context;
20043       if (DECL_P (thing))
20044         gen_decl_die (thing, NULL, ns_context);
20045       else
20046         gen_type_die (thing, ns_context);
20047     }
20048   return context_die;
20049 }
20050
20051 /* Generate a DIE for a namespace or namespace alias.  */
20052
20053 static void
20054 gen_namespace_die (tree decl, dw_die_ref context_die)
20055 {
20056   dw_die_ref namespace_die;
20057
20058   /* Namespace aliases have a DECL_ABSTRACT_ORIGIN of the namespace
20059      they are an alias of.  */
20060   if (DECL_ABSTRACT_ORIGIN (decl) == NULL)
20061     {
20062       /* Output a real namespace or module.  */
20063       context_die = setup_namespace_context (decl, comp_unit_die);
20064       namespace_die = new_die (is_fortran ()
20065                                ? DW_TAG_module : DW_TAG_namespace,
20066                                context_die, decl);
20067       /* For Fortran modules defined in different CU don't add src coords.  */
20068       if (namespace_die->die_tag == DW_TAG_module && DECL_EXTERNAL (decl))
20069         {
20070           const char *name = dwarf2_name (decl, 0);
20071           if (name)
20072             add_name_attribute (namespace_die, name);
20073         }
20074       else
20075         add_name_and_src_coords_attributes (namespace_die, decl);
20076       if (DECL_EXTERNAL (decl))
20077         add_AT_flag (namespace_die, DW_AT_declaration, 1);
20078       equate_decl_number_to_die (decl, namespace_die);
20079     }
20080   else
20081     {
20082       /* Output a namespace alias.  */
20083
20084       /* Force out the namespace we are an alias of, if necessary.  */
20085       dw_die_ref origin_die
20086         = force_decl_die (DECL_ABSTRACT_ORIGIN (decl));
20087
20088       if (DECL_CONTEXT (decl) == NULL_TREE
20089           || TREE_CODE (DECL_CONTEXT (decl)) == NAMESPACE_DECL)
20090         context_die = setup_namespace_context (decl, comp_unit_die);
20091       /* Now create the namespace alias DIE.  */
20092       namespace_die = new_die (DW_TAG_imported_declaration, context_die, decl);
20093       add_name_and_src_coords_attributes (namespace_die, decl);
20094       add_AT_die_ref (namespace_die, DW_AT_import, origin_die);
20095       equate_decl_number_to_die (decl, namespace_die);
20096     }
20097 }
20098
20099 /* Generate Dwarf debug information for a decl described by DECL.  */
20100
20101 static void
20102 gen_decl_die (tree decl, tree origin, dw_die_ref context_die)
20103 {
20104   tree decl_or_origin = decl ? decl : origin;
20105   tree class_origin = NULL, ultimate_origin;
20106
20107   if (DECL_P (decl_or_origin) && DECL_IGNORED_P (decl_or_origin))
20108     return;
20109
20110   switch (TREE_CODE (decl_or_origin))
20111     {
20112     case ERROR_MARK:
20113       break;
20114
20115     case CONST_DECL:
20116       if (!is_fortran ())
20117         {
20118           /* The individual enumerators of an enum type get output when we output
20119              the Dwarf representation of the relevant enum type itself.  */
20120           break;
20121         }
20122
20123       /* Emit its type.  */
20124       gen_type_die (TREE_TYPE (decl), context_die);
20125
20126       /* And its containing namespace.  */
20127       context_die = declare_in_namespace (decl, context_die);
20128
20129       gen_const_die (decl, context_die);
20130       break;
20131
20132     case FUNCTION_DECL:
20133       /* Don't output any DIEs to represent mere function declarations,
20134          unless they are class members or explicit block externs.  */
20135       if (DECL_INITIAL (decl_or_origin) == NULL_TREE
20136           && DECL_CONTEXT (decl_or_origin) == NULL_TREE
20137           && (current_function_decl == NULL_TREE
20138               || DECL_ARTIFICIAL (decl_or_origin)))
20139         break;
20140
20141 #if 0
20142       /* FIXME */
20143       /* This doesn't work because the C frontend sets DECL_ABSTRACT_ORIGIN
20144          on local redeclarations of global functions.  That seems broken.  */
20145       if (current_function_decl != decl)
20146         /* This is only a declaration.  */;
20147 #endif
20148
20149       /* If we're emitting a clone, emit info for the abstract instance.  */
20150       if (origin || DECL_ORIGIN (decl) != decl)
20151         dwarf2out_abstract_function (origin
20152                                      ? DECL_ORIGIN (origin)
20153                                      : DECL_ABSTRACT_ORIGIN (decl));
20154
20155       /* If we're emitting an out-of-line copy of an inline function,
20156          emit info for the abstract instance and set up to refer to it.  */
20157       else if (cgraph_function_possibly_inlined_p (decl)
20158                && ! DECL_ABSTRACT (decl)
20159                && ! class_or_namespace_scope_p (context_die)
20160                /* dwarf2out_abstract_function won't emit a die if this is just
20161                   a declaration.  We must avoid setting DECL_ABSTRACT_ORIGIN in
20162                   that case, because that works only if we have a die.  */
20163                && DECL_INITIAL (decl) != NULL_TREE)
20164         {
20165           dwarf2out_abstract_function (decl);
20166           set_decl_origin_self (decl);
20167         }
20168
20169       /* Otherwise we're emitting the primary DIE for this decl.  */
20170       else if (debug_info_level > DINFO_LEVEL_TERSE)
20171         {
20172           /* Before we describe the FUNCTION_DECL itself, make sure that we
20173              have described its return type.  */
20174           gen_type_die (TREE_TYPE (TREE_TYPE (decl)), context_die);
20175
20176           /* And its virtual context.  */
20177           if (DECL_VINDEX (decl) != NULL_TREE)
20178             gen_type_die (DECL_CONTEXT (decl), context_die);
20179
20180           /* And its containing type.  */
20181           if (!origin)
20182             origin = decl_class_context (decl);
20183           if (origin != NULL_TREE)
20184             gen_type_die_for_member (origin, decl, context_die);
20185
20186           /* And its containing namespace.  */
20187           context_die = declare_in_namespace (decl, context_die);
20188         }
20189
20190       /* Now output a DIE to represent the function itself.  */
20191       if (decl)
20192         gen_subprogram_die (decl, context_die);
20193       break;
20194
20195     case TYPE_DECL:
20196       /* If we are in terse mode, don't generate any DIEs to represent any
20197          actual typedefs.  */
20198       if (debug_info_level <= DINFO_LEVEL_TERSE)
20199         break;
20200
20201       /* In the special case of a TYPE_DECL node representing the declaration
20202          of some type tag, if the given TYPE_DECL is marked as having been
20203          instantiated from some other (original) TYPE_DECL node (e.g. one which
20204          was generated within the original definition of an inline function) we
20205          used to generate a special (abbreviated) DW_TAG_structure_type,
20206          DW_TAG_union_type, or DW_TAG_enumeration_type DIE here.  But nothing
20207          should be actually referencing those DIEs, as variable DIEs with that
20208          type would be emitted already in the abstract origin, so it was always
20209          removed during unused type prunning.  Don't add anything in this
20210          case.  */
20211       if (TYPE_DECL_IS_STUB (decl) && decl_ultimate_origin (decl) != NULL_TREE)
20212         break;
20213
20214       if (is_redundant_typedef (decl))
20215         gen_type_die (TREE_TYPE (decl), context_die);
20216       else
20217         /* Output a DIE to represent the typedef itself.  */
20218         gen_typedef_die (decl, context_die);
20219       break;
20220
20221     case LABEL_DECL:
20222       if (debug_info_level >= DINFO_LEVEL_NORMAL)
20223         gen_label_die (decl, context_die);
20224       break;
20225
20226     case VAR_DECL:
20227     case RESULT_DECL:
20228       /* If we are in terse mode, don't generate any DIEs to represent any
20229          variable declarations or definitions.  */
20230       if (debug_info_level <= DINFO_LEVEL_TERSE)
20231         break;
20232
20233       /* Output any DIEs that are needed to specify the type of this data
20234          object.  */
20235       if (decl_by_reference_p (decl_or_origin))
20236         gen_type_die (TREE_TYPE (TREE_TYPE (decl_or_origin)), context_die);
20237       else
20238         gen_type_die (TREE_TYPE (decl_or_origin), context_die);
20239
20240       /* And its containing type.  */
20241       class_origin = decl_class_context (decl_or_origin);
20242       if (class_origin != NULL_TREE)
20243         gen_type_die_for_member (class_origin, decl_or_origin, context_die);
20244
20245       /* And its containing namespace.  */
20246       context_die = declare_in_namespace (decl_or_origin, context_die);
20247
20248       /* Now output the DIE to represent the data object itself.  This gets
20249          complicated because of the possibility that the VAR_DECL really
20250          represents an inlined instance of a formal parameter for an inline
20251          function.  */
20252       ultimate_origin = decl_ultimate_origin (decl_or_origin);
20253       if (ultimate_origin != NULL_TREE
20254           && TREE_CODE (ultimate_origin) == PARM_DECL)
20255         gen_formal_parameter_die (decl, origin,
20256                                   true /* Emit name attribute.  */,
20257                                   context_die);
20258       else
20259         gen_variable_die (decl, origin, context_die);
20260       break;
20261
20262     case FIELD_DECL:
20263       /* Ignore the nameless fields that are used to skip bits but handle C++
20264          anonymous unions and structs.  */
20265       if (DECL_NAME (decl) != NULL_TREE
20266           || TREE_CODE (TREE_TYPE (decl)) == UNION_TYPE
20267           || TREE_CODE (TREE_TYPE (decl)) == RECORD_TYPE)
20268         {
20269           gen_type_die (member_declared_type (decl), context_die);
20270           gen_field_die (decl, context_die);
20271         }
20272       break;
20273
20274     case PARM_DECL:
20275       if (DECL_BY_REFERENCE (decl_or_origin))
20276         gen_type_die (TREE_TYPE (TREE_TYPE (decl_or_origin)), context_die);
20277       else
20278         gen_type_die (TREE_TYPE (decl_or_origin), context_die);
20279       gen_formal_parameter_die (decl, origin,
20280                                 true /* Emit name attribute.  */,
20281                                 context_die);
20282       break;
20283
20284     case NAMESPACE_DECL:
20285     case IMPORTED_DECL:
20286       if (dwarf_version >= 3 || !dwarf_strict)
20287         gen_namespace_die (decl, context_die);
20288       break;
20289
20290     default:
20291       /* Probably some frontend-internal decl.  Assume we don't care.  */
20292       gcc_assert ((int)TREE_CODE (decl) > NUM_TREE_CODES);
20293       break;
20294     }
20295 }
20296 \f
20297 /* Output debug information for global decl DECL.  Called from toplev.c after
20298    compilation proper has finished.  */
20299
20300 static void
20301 dwarf2out_global_decl (tree decl)
20302 {
20303   /* Output DWARF2 information for file-scope tentative data object
20304      declarations, file-scope (extern) function declarations (which
20305      had no corresponding body) and file-scope tagged type declarations
20306      and definitions which have not yet been forced out.  */
20307   if (TREE_CODE (decl) != FUNCTION_DECL || !DECL_INITIAL (decl))
20308     dwarf2out_decl (decl);
20309 }
20310
20311 /* Output debug information for type decl DECL.  Called from toplev.c
20312    and from language front ends (to record built-in types).  */
20313 static void
20314 dwarf2out_type_decl (tree decl, int local)
20315 {
20316   if (!local)
20317     dwarf2out_decl (decl);
20318 }
20319
20320 /* Output debug information for imported module or decl DECL.
20321    NAME is non-NULL name in the lexical block if the decl has been renamed.
20322    LEXICAL_BLOCK is the lexical block (which TREE_CODE is a BLOCK)
20323    that DECL belongs to.
20324    LEXICAL_BLOCK_DIE is the DIE of LEXICAL_BLOCK.  */
20325 static void
20326 dwarf2out_imported_module_or_decl_1 (tree decl,
20327                                      tree name,
20328                                      tree lexical_block,
20329                                      dw_die_ref lexical_block_die)
20330 {
20331   expanded_location xloc;
20332   dw_die_ref imported_die = NULL;
20333   dw_die_ref at_import_die;
20334
20335   if (TREE_CODE (decl) == IMPORTED_DECL)
20336     {
20337       xloc = expand_location (DECL_SOURCE_LOCATION (decl));
20338       decl = IMPORTED_DECL_ASSOCIATED_DECL (decl);
20339       gcc_assert (decl);
20340     }
20341   else
20342     xloc = expand_location (input_location);
20343
20344   if (TREE_CODE (decl) == TYPE_DECL || TREE_CODE (decl) == CONST_DECL)
20345     {
20346       at_import_die = force_type_die (TREE_TYPE (decl));
20347       /* For namespace N { typedef void T; } using N::T; base_type_die
20348          returns NULL, but DW_TAG_imported_declaration requires
20349          the DW_AT_import tag.  Force creation of DW_TAG_typedef.  */
20350       if (!at_import_die)
20351         {
20352           gcc_assert (TREE_CODE (decl) == TYPE_DECL);
20353           gen_typedef_die (decl, get_context_die (DECL_CONTEXT (decl)));
20354           at_import_die = lookup_type_die (TREE_TYPE (decl));
20355           gcc_assert (at_import_die);
20356         }
20357     }
20358   else
20359     {
20360       at_import_die = lookup_decl_die (decl);
20361       if (!at_import_die)
20362         {
20363           /* If we're trying to avoid duplicate debug info, we may not have
20364              emitted the member decl for this field.  Emit it now.  */
20365           if (TREE_CODE (decl) == FIELD_DECL)
20366             {
20367               tree type = DECL_CONTEXT (decl);
20368
20369               if (TYPE_CONTEXT (type)
20370                   && TYPE_P (TYPE_CONTEXT (type))
20371                   && !should_emit_struct_debug (TYPE_CONTEXT (type),
20372                                                 DINFO_USAGE_DIR_USE))
20373                 return;
20374               gen_type_die_for_member (type, decl,
20375                                        get_context_die (TYPE_CONTEXT (type)));
20376             }
20377           at_import_die = force_decl_die (decl);
20378         }
20379     }
20380
20381   if (TREE_CODE (decl) == NAMESPACE_DECL)
20382     {
20383       if (dwarf_version >= 3 || !dwarf_strict)
20384         imported_die = new_die (DW_TAG_imported_module,
20385                                 lexical_block_die,
20386                                 lexical_block);
20387       else
20388         return;
20389     }
20390   else
20391     imported_die = new_die (DW_TAG_imported_declaration,
20392                             lexical_block_die,
20393                             lexical_block);
20394
20395   add_AT_file (imported_die, DW_AT_decl_file, lookup_filename (xloc.file));
20396   add_AT_unsigned (imported_die, DW_AT_decl_line, xloc.line);
20397   if (name)
20398     add_AT_string (imported_die, DW_AT_name,
20399                    IDENTIFIER_POINTER (name));
20400   add_AT_die_ref (imported_die, DW_AT_import, at_import_die);
20401 }
20402
20403 /* Output debug information for imported module or decl DECL.
20404    NAME is non-NULL name in context if the decl has been renamed.
20405    CHILD is true if decl is one of the renamed decls as part of
20406    importing whole module.  */
20407
20408 static void
20409 dwarf2out_imported_module_or_decl (tree decl, tree name, tree context,
20410                                    bool child)
20411 {
20412   /* dw_die_ref at_import_die;  */
20413   dw_die_ref scope_die;
20414
20415   if (debug_info_level <= DINFO_LEVEL_TERSE)
20416     return;
20417
20418   gcc_assert (decl);
20419
20420   /* To emit DW_TAG_imported_module or DW_TAG_imported_decl, we need two DIEs.
20421      We need decl DIE for reference and scope die. First, get DIE for the decl
20422      itself.  */
20423
20424   /* Get the scope die for decl context. Use comp_unit_die for global module
20425      or decl. If die is not found for non globals, force new die.  */
20426   if (context
20427       && TYPE_P (context)
20428       && !should_emit_struct_debug (context, DINFO_USAGE_DIR_USE))
20429     return;
20430
20431   if (!(dwarf_version >= 3 || !dwarf_strict))
20432     return;
20433
20434   scope_die = get_context_die (context);
20435
20436   if (child)
20437     {
20438       gcc_assert (scope_die->die_child);
20439       gcc_assert (scope_die->die_child->die_tag == DW_TAG_imported_module);
20440       gcc_assert (TREE_CODE (decl) != NAMESPACE_DECL);
20441       scope_die = scope_die->die_child;
20442     }
20443
20444   /* OK, now we have DIEs for decl as well as scope. Emit imported die.  */
20445   dwarf2out_imported_module_or_decl_1 (decl, name, context, scope_die);
20446
20447 }
20448
20449 /* Write the debugging output for DECL.  */
20450
20451 void
20452 dwarf2out_decl (tree decl)
20453 {
20454   dw_die_ref context_die = comp_unit_die;
20455
20456   switch (TREE_CODE (decl))
20457     {
20458     case ERROR_MARK:
20459       return;
20460
20461     case FUNCTION_DECL:
20462       /* What we would really like to do here is to filter out all mere
20463          file-scope declarations of file-scope functions which are never
20464          referenced later within this translation unit (and keep all of ones
20465          that *are* referenced later on) but we aren't clairvoyant, so we have
20466          no idea which functions will be referenced in the future (i.e. later
20467          on within the current translation unit). So here we just ignore all
20468          file-scope function declarations which are not also definitions.  If
20469          and when the debugger needs to know something about these functions,
20470          it will have to hunt around and find the DWARF information associated
20471          with the definition of the function.
20472
20473          We can't just check DECL_EXTERNAL to find out which FUNCTION_DECL
20474          nodes represent definitions and which ones represent mere
20475          declarations.  We have to check DECL_INITIAL instead. That's because
20476          the C front-end supports some weird semantics for "extern inline"
20477          function definitions.  These can get inlined within the current
20478          translation unit (and thus, we need to generate Dwarf info for their
20479          abstract instances so that the Dwarf info for the concrete inlined
20480          instances can have something to refer to) but the compiler never
20481          generates any out-of-lines instances of such things (despite the fact
20482          that they *are* definitions).
20483
20484          The important point is that the C front-end marks these "extern
20485          inline" functions as DECL_EXTERNAL, but we need to generate DWARF for
20486          them anyway. Note that the C++ front-end also plays some similar games
20487          for inline function definitions appearing within include files which
20488          also contain `#pragma interface' pragmas.  */
20489       if (DECL_INITIAL (decl) == NULL_TREE)
20490         return;
20491
20492       /* If we're a nested function, initially use a parent of NULL; if we're
20493          a plain function, this will be fixed up in decls_for_scope.  If
20494          we're a method, it will be ignored, since we already have a DIE.  */
20495       if (decl_function_context (decl)
20496           /* But if we're in terse mode, we don't care about scope.  */
20497           && debug_info_level > DINFO_LEVEL_TERSE)
20498         context_die = NULL;
20499       break;
20500
20501     case VAR_DECL:
20502       /* Ignore this VAR_DECL if it refers to a file-scope extern data object
20503          declaration and if the declaration was never even referenced from
20504          within this entire compilation unit.  We suppress these DIEs in
20505          order to save space in the .debug section (by eliminating entries
20506          which are probably useless).  Note that we must not suppress
20507          block-local extern declarations (whether used or not) because that
20508          would screw-up the debugger's name lookup mechanism and cause it to
20509          miss things which really ought to be in scope at a given point.  */
20510       if (DECL_EXTERNAL (decl) && !TREE_USED (decl))
20511         return;
20512
20513       /* For local statics lookup proper context die.  */
20514       if (TREE_STATIC (decl) && decl_function_context (decl))
20515         context_die = lookup_decl_die (DECL_CONTEXT (decl));
20516
20517       /* If we are in terse mode, don't generate any DIEs to represent any
20518          variable declarations or definitions.  */
20519       if (debug_info_level <= DINFO_LEVEL_TERSE)
20520         return;
20521       break;
20522
20523     case CONST_DECL:
20524       if (debug_info_level <= DINFO_LEVEL_TERSE)
20525         return;
20526       if (!is_fortran ())
20527         return;
20528       if (TREE_STATIC (decl) && decl_function_context (decl))
20529         context_die = lookup_decl_die (DECL_CONTEXT (decl));
20530       break;
20531
20532     case NAMESPACE_DECL:
20533     case IMPORTED_DECL:
20534       if (debug_info_level <= DINFO_LEVEL_TERSE)
20535         return;
20536       if (lookup_decl_die (decl) != NULL)
20537         return;
20538       break;
20539
20540     case TYPE_DECL:
20541       /* Don't emit stubs for types unless they are needed by other DIEs.  */
20542       if (TYPE_DECL_SUPPRESS_DEBUG (decl))
20543         return;
20544
20545       /* Don't bother trying to generate any DIEs to represent any of the
20546          normal built-in types for the language we are compiling.  */
20547       if (DECL_IS_BUILTIN (decl))
20548         {
20549           /* OK, we need to generate one for `bool' so GDB knows what type
20550              comparisons have.  */
20551           if (is_cxx ()
20552               && TREE_CODE (TREE_TYPE (decl)) == BOOLEAN_TYPE
20553               && ! DECL_IGNORED_P (decl))
20554             modified_type_die (TREE_TYPE (decl), 0, 0, NULL);
20555
20556           return;
20557         }
20558
20559       /* If we are in terse mode, don't generate any DIEs for types.  */
20560       if (debug_info_level <= DINFO_LEVEL_TERSE)
20561         return;
20562
20563       /* If we're a function-scope tag, initially use a parent of NULL;
20564          this will be fixed up in decls_for_scope.  */
20565       if (decl_function_context (decl))
20566         context_die = NULL;
20567
20568       break;
20569
20570     default:
20571       return;
20572     }
20573
20574   gen_decl_die (decl, NULL, context_die);
20575 }
20576
20577 /* Write the debugging output for DECL.  */
20578
20579 static void
20580 dwarf2out_function_decl (tree decl)
20581 {
20582   dwarf2out_decl (decl);
20583
20584   htab_empty (decl_loc_table);
20585 }
20586
20587 /* Output a marker (i.e. a label) for the beginning of the generated code for
20588    a lexical block.  */
20589
20590 static void
20591 dwarf2out_begin_block (unsigned int line ATTRIBUTE_UNUSED,
20592                        unsigned int blocknum)
20593 {
20594   switch_to_section (current_function_section ());
20595   ASM_OUTPUT_DEBUG_LABEL (asm_out_file, BLOCK_BEGIN_LABEL, blocknum);
20596 }
20597
20598 /* Output a marker (i.e. a label) for the end of the generated code for a
20599    lexical block.  */
20600
20601 static void
20602 dwarf2out_end_block (unsigned int line ATTRIBUTE_UNUSED, unsigned int blocknum)
20603 {
20604   switch_to_section (current_function_section ());
20605   ASM_OUTPUT_DEBUG_LABEL (asm_out_file, BLOCK_END_LABEL, blocknum);
20606 }
20607
20608 /* Returns nonzero if it is appropriate not to emit any debugging
20609    information for BLOCK, because it doesn't contain any instructions.
20610
20611    Don't allow this for blocks with nested functions or local classes
20612    as we would end up with orphans, and in the presence of scheduling
20613    we may end up calling them anyway.  */
20614
20615 static bool
20616 dwarf2out_ignore_block (const_tree block)
20617 {
20618   tree decl;
20619   unsigned int i;
20620
20621   for (decl = BLOCK_VARS (block); decl; decl = TREE_CHAIN (decl))
20622     if (TREE_CODE (decl) == FUNCTION_DECL
20623         || (TREE_CODE (decl) == TYPE_DECL && TYPE_DECL_IS_STUB (decl)))
20624       return 0;
20625   for (i = 0; i < BLOCK_NUM_NONLOCALIZED_VARS (block); i++)
20626     {
20627       decl = BLOCK_NONLOCALIZED_VAR (block, i);
20628       if (TREE_CODE (decl) == FUNCTION_DECL
20629           || (TREE_CODE (decl) == TYPE_DECL && TYPE_DECL_IS_STUB (decl)))
20630       return 0;
20631     }
20632
20633   return 1;
20634 }
20635
20636 /* Hash table routines for file_hash.  */
20637
20638 static int
20639 file_table_eq (const void *p1_p, const void *p2_p)
20640 {
20641   const struct dwarf_file_data *const p1 =
20642     (const struct dwarf_file_data *) p1_p;
20643   const char *const p2 = (const char *) p2_p;
20644   return strcmp (p1->filename, p2) == 0;
20645 }
20646
20647 static hashval_t
20648 file_table_hash (const void *p_p)
20649 {
20650   const struct dwarf_file_data *const p = (const struct dwarf_file_data *) p_p;
20651   return htab_hash_string (p->filename);
20652 }
20653
20654 /* Lookup FILE_NAME (in the list of filenames that we know about here in
20655    dwarf2out.c) and return its "index".  The index of each (known) filename is
20656    just a unique number which is associated with only that one filename.  We
20657    need such numbers for the sake of generating labels (in the .debug_sfnames
20658    section) and references to those files numbers (in the .debug_srcinfo
20659    and.debug_macinfo sections).  If the filename given as an argument is not
20660    found in our current list, add it to the list and assign it the next
20661    available unique index number.  In order to speed up searches, we remember
20662    the index of the filename was looked up last.  This handles the majority of
20663    all searches.  */
20664
20665 static struct dwarf_file_data *
20666 lookup_filename (const char *file_name)
20667 {
20668   void ** slot;
20669   struct dwarf_file_data * created;
20670
20671   /* Check to see if the file name that was searched on the previous
20672      call matches this file name.  If so, return the index.  */
20673   if (file_table_last_lookup
20674       && (file_name == file_table_last_lookup->filename
20675           || strcmp (file_table_last_lookup->filename, file_name) == 0))
20676     return file_table_last_lookup;
20677
20678   /* Didn't match the previous lookup, search the table.  */
20679   slot = htab_find_slot_with_hash (file_table, file_name,
20680                                    htab_hash_string (file_name), INSERT);
20681   if (*slot)
20682     return (struct dwarf_file_data *) *slot;
20683
20684   created = ggc_alloc_dwarf_file_data ();
20685   created->filename = file_name;
20686   created->emitted_number = 0;
20687   *slot = created;
20688   return created;
20689 }
20690
20691 /* If the assembler will construct the file table, then translate the compiler
20692    internal file table number into the assembler file table number, and emit
20693    a .file directive if we haven't already emitted one yet.  The file table
20694    numbers are different because we prune debug info for unused variables and
20695    types, which may include filenames.  */
20696
20697 static int
20698 maybe_emit_file (struct dwarf_file_data * fd)
20699 {
20700   if (! fd->emitted_number)
20701     {
20702       if (last_emitted_file)
20703         fd->emitted_number = last_emitted_file->emitted_number + 1;
20704       else
20705         fd->emitted_number = 1;
20706       last_emitted_file = fd;
20707
20708       if (DWARF2_ASM_LINE_DEBUG_INFO)
20709         {
20710           fprintf (asm_out_file, "\t.file %u ", fd->emitted_number);
20711           output_quoted_string (asm_out_file,
20712                                 remap_debug_filename (fd->filename));
20713           fputc ('\n', asm_out_file);
20714         }
20715     }
20716
20717   return fd->emitted_number;
20718 }
20719
20720 /* Schedule generation of a DW_AT_const_value attribute to DIE.
20721    That generation should happen after function debug info has been
20722    generated. The value of the attribute is the constant value of ARG.  */
20723
20724 static void
20725 append_entry_to_tmpl_value_parm_die_table (dw_die_ref die, tree arg)
20726 {
20727   die_arg_entry entry;
20728
20729   if (!die || !arg)
20730     return;
20731
20732   if (!tmpl_value_parm_die_table)
20733     tmpl_value_parm_die_table
20734       = VEC_alloc (die_arg_entry, gc, 32);
20735
20736   entry.die = die;
20737   entry.arg = arg;
20738   VEC_safe_push (die_arg_entry, gc,
20739                  tmpl_value_parm_die_table,
20740                  &entry);
20741 }
20742
20743 /* Add a DW_AT_const_value attribute to DIEs that were scheduled
20744    by append_entry_to_tmpl_value_parm_die_table. This function must
20745    be called after function DIEs have been generated.  */
20746
20747 static void
20748 gen_remaining_tmpl_value_param_die_attribute (void)
20749 {
20750   if (tmpl_value_parm_die_table)
20751     {
20752       unsigned i;
20753       die_arg_entry *e;
20754
20755       for (i = 0;
20756            VEC_iterate (die_arg_entry, tmpl_value_parm_die_table, i, e);
20757            i++)
20758         tree_add_const_value_attribute (e->die, e->arg);
20759     }
20760 }
20761
20762
20763 /* Replace DW_AT_name for the decl with name.  */
20764
20765 static void
20766 dwarf2out_set_name (tree decl, tree name)
20767 {
20768   dw_die_ref die;
20769   dw_attr_ref attr;
20770   const char *dname;
20771
20772   die = TYPE_SYMTAB_DIE (decl);
20773   if (!die)
20774     return;
20775
20776   dname = dwarf2_name (name, 0);
20777   if (!dname)
20778     return;
20779
20780   attr = get_AT (die, DW_AT_name);
20781   if (attr)
20782     {
20783       struct indirect_string_node *node;
20784
20785       node = find_AT_string (dname);
20786       /* replace the string.  */
20787       attr->dw_attr_val.v.val_str = node;
20788     }
20789
20790   else
20791     add_name_attribute (die, dname);
20792 }
20793
20794 /* Called by the final INSN scan whenever we see a direct function call.
20795    Make an entry into the direct call table, recording the point of call
20796    and a reference to the target function's debug entry.  */
20797
20798 static void
20799 dwarf2out_direct_call (tree targ)
20800 {
20801   dcall_entry e;
20802   tree origin = decl_ultimate_origin (targ);
20803
20804   /* If this is a clone, use the abstract origin as the target.  */
20805   if (origin)
20806     targ = origin;
20807
20808   e.poc_label_num = poc_label_num++;
20809   e.poc_decl = current_function_decl;
20810   e.targ_die = force_decl_die (targ);
20811   VEC_safe_push (dcall_entry, gc, dcall_table, &e);
20812
20813   /* Drop a label at the return point to mark the point of call.  */
20814   ASM_OUTPUT_DEBUG_LABEL (asm_out_file, "LPOC", e.poc_label_num);
20815 }
20816
20817 /* Returns a hash value for X (which really is a struct vcall_insn).  */
20818
20819 static hashval_t
20820 vcall_insn_table_hash (const void *x)
20821 {
20822   return (hashval_t) ((const struct vcall_insn *) x)->insn_uid;
20823 }
20824
20825 /* Return nonzero if insn_uid of struct vcall_insn *X is the same as
20826    insnd_uid of *Y.  */
20827
20828 static int
20829 vcall_insn_table_eq (const void *x, const void *y)
20830 {
20831   return (((const struct vcall_insn *) x)->insn_uid
20832           == ((const struct vcall_insn *) y)->insn_uid);
20833 }
20834
20835 /* Associate VTABLE_SLOT with INSN_UID in the VCALL_INSN_TABLE.  */
20836
20837 static void
20838 store_vcall_insn (unsigned int vtable_slot, int insn_uid)
20839 {
20840   struct vcall_insn *item = ggc_alloc_vcall_insn ();
20841   struct vcall_insn **slot;
20842
20843   gcc_assert (item);
20844   item->insn_uid = insn_uid;
20845   item->vtable_slot = vtable_slot;
20846   slot = (struct vcall_insn **)
20847       htab_find_slot_with_hash (vcall_insn_table, &item,
20848                                 (hashval_t) insn_uid, INSERT);
20849   *slot = item;
20850 }
20851
20852 /* Return the VTABLE_SLOT associated with INSN_UID.  */
20853
20854 static unsigned int
20855 lookup_vcall_insn (unsigned int insn_uid)
20856 {
20857   struct vcall_insn item;
20858   struct vcall_insn *p;
20859
20860   item.insn_uid = insn_uid;
20861   item.vtable_slot = 0;
20862   p = (struct vcall_insn *) htab_find_with_hash (vcall_insn_table,
20863                                                  (void *) &item,
20864                                                  (hashval_t) insn_uid);
20865   if (p == NULL)
20866     return (unsigned int) -1;
20867   return p->vtable_slot;
20868 }
20869
20870
20871 /* Called when lowering indirect calls to RTL.  We make a note of INSN_UID
20872    and the OBJ_TYPE_REF_TOKEN from ADDR.  For C++ virtual calls, the token
20873    is the vtable slot index that we will need to put in the virtual call
20874    table later.  */
20875
20876 static void
20877 dwarf2out_virtual_call_token (tree addr, int insn_uid)
20878 {
20879   if (is_cxx() && TREE_CODE (addr) == OBJ_TYPE_REF)
20880     {
20881       tree token = OBJ_TYPE_REF_TOKEN (addr);
20882       if (TREE_CODE (token) == INTEGER_CST)
20883         store_vcall_insn (TREE_INT_CST_LOW (token), insn_uid);
20884     }
20885 }
20886
20887 /* Called when scheduling RTL, when a CALL_INSN is split.  Copies the
20888    OBJ_TYPE_REF_TOKEN previously associated with OLD_INSN and associates it
20889    with NEW_INSN.  */
20890
20891 static void
20892 dwarf2out_copy_call_info (rtx old_insn, rtx new_insn)
20893 {
20894   unsigned int vtable_slot = lookup_vcall_insn (INSN_UID (old_insn));
20895
20896   if (vtable_slot != (unsigned int) -1)
20897     store_vcall_insn (vtable_slot, INSN_UID (new_insn));
20898 }
20899
20900 /* Called by the final INSN scan whenever we see a virtual function call.
20901    Make an entry into the virtual call table, recording the point of call
20902    and the slot index of the vtable entry used to call the virtual member
20903    function.  The slot index was associated with the INSN_UID during the
20904    lowering to RTL.  */
20905
20906 static void
20907 dwarf2out_virtual_call (int insn_uid)
20908 {
20909   unsigned int vtable_slot = lookup_vcall_insn (insn_uid);
20910   vcall_entry e;
20911
20912   if (vtable_slot == (unsigned int) -1)
20913     return;
20914
20915   e.poc_label_num = poc_label_num++;
20916   e.vtable_slot = vtable_slot;
20917   VEC_safe_push (vcall_entry, gc, vcall_table, &e);
20918
20919   /* Drop a label at the return point to mark the point of call.  */
20920   ASM_OUTPUT_DEBUG_LABEL (asm_out_file, "LPOC", e.poc_label_num);
20921 }
20922
20923 /* Called by the final INSN scan whenever we see a var location.  We
20924    use it to drop labels in the right places, and throw the location in
20925    our lookup table.  */
20926
20927 static void
20928 dwarf2out_var_location (rtx loc_note)
20929 {
20930   char loclabel[MAX_ARTIFICIAL_LABEL_BYTES + 2];
20931   struct var_loc_node *newloc;
20932   rtx next_real;
20933   static const char *last_label;
20934   static const char *last_postcall_label;
20935   static bool last_in_cold_section_p;
20936   tree decl;
20937
20938   if (!DECL_P (NOTE_VAR_LOCATION_DECL (loc_note)))
20939     return;
20940
20941   next_real = next_real_insn (loc_note);
20942   /* If there are no instructions which would be affected by this note,
20943      don't do anything.  */
20944   if (next_real == NULL_RTX)
20945     return;
20946
20947   /* If there were any real insns between note we processed last time
20948      and this note (or if it is the first note), clear
20949      last_{,postcall_}label so that they are not reused this time.  */
20950   if (last_var_location_insn == NULL_RTX
20951       || last_var_location_insn != next_real
20952       || last_in_cold_section_p != in_cold_section_p)
20953     {
20954       last_label = NULL;
20955       last_postcall_label = NULL;
20956     }
20957
20958   decl = NOTE_VAR_LOCATION_DECL (loc_note);
20959   newloc = add_var_loc_to_decl (decl, loc_note,
20960                                 NOTE_DURING_CALL_P (loc_note)
20961                                 ? last_postcall_label : last_label);
20962   if (newloc == NULL)
20963     return;
20964
20965   /* If there were no real insns between note we processed last time
20966      and this note, use the label we emitted last time.  Otherwise
20967      create a new label and emit it.  */
20968   if (last_label == NULL)
20969     {
20970       ASM_GENERATE_INTERNAL_LABEL (loclabel, "LVL", loclabel_num);
20971       ASM_OUTPUT_DEBUG_LABEL (asm_out_file, "LVL", loclabel_num);
20972       loclabel_num++;
20973       last_label = ggc_strdup (loclabel);
20974     }
20975
20976   if (!NOTE_DURING_CALL_P (loc_note))
20977     newloc->label = last_label;
20978   else
20979     {
20980       if (!last_postcall_label)
20981         {
20982           sprintf (loclabel, "%s-1", last_label);
20983           last_postcall_label = ggc_strdup (loclabel);
20984         }
20985       newloc->label = last_postcall_label;
20986     }
20987
20988   last_var_location_insn = next_real;
20989   last_in_cold_section_p = in_cold_section_p;
20990 }
20991
20992 /* We need to reset the locations at the beginning of each
20993    function. We can't do this in the end_function hook, because the
20994    declarations that use the locations won't have been output when
20995    that hook is called.  Also compute have_multiple_function_sections here.  */
20996
20997 static void
20998 dwarf2out_begin_function (tree fun)
20999 {
21000   if (function_section (fun) != text_section)
21001     have_multiple_function_sections = true;
21002
21003   dwarf2out_note_section_used ();
21004 }
21005
21006 /* Output a label to mark the beginning of a source code line entry
21007    and record information relating to this source line, in
21008    'line_info_table' for later output of the .debug_line section.  */
21009
21010 static void
21011 dwarf2out_source_line (unsigned int line, const char *filename,
21012                        int discriminator, bool is_stmt)
21013 {
21014   static bool last_is_stmt = true;
21015
21016   if (debug_info_level >= DINFO_LEVEL_NORMAL
21017       && line != 0)
21018     {
21019       int file_num = maybe_emit_file (lookup_filename (filename));
21020
21021       switch_to_section (current_function_section ());
21022
21023       /* If requested, emit something human-readable.  */
21024       if (flag_debug_asm)
21025         fprintf (asm_out_file, "\t%s %s:%d\n", ASM_COMMENT_START,
21026                  filename, line);
21027
21028       if (DWARF2_ASM_LINE_DEBUG_INFO)
21029         {
21030           /* Emit the .loc directive understood by GNU as.  */
21031           fprintf (asm_out_file, "\t.loc %d %d 0", file_num, line);
21032           if (is_stmt != last_is_stmt)
21033             {
21034               fprintf (asm_out_file, " is_stmt %d", is_stmt ? 1 : 0);
21035               last_is_stmt = is_stmt;
21036             }
21037           if (SUPPORTS_DISCRIMINATOR && discriminator != 0)
21038             fprintf (asm_out_file, " discriminator %d", discriminator);
21039           fputc ('\n', asm_out_file);
21040
21041           /* Indicate that line number info exists.  */
21042           line_info_table_in_use++;
21043         }
21044       else if (function_section (current_function_decl) != text_section)
21045         {
21046           dw_separate_line_info_ref line_info;
21047           targetm.asm_out.internal_label (asm_out_file,
21048                                           SEPARATE_LINE_CODE_LABEL,
21049                                           separate_line_info_table_in_use);
21050
21051           /* Expand the line info table if necessary.  */
21052           if (separate_line_info_table_in_use
21053               == separate_line_info_table_allocated)
21054             {
21055               separate_line_info_table_allocated += LINE_INFO_TABLE_INCREMENT;
21056               separate_line_info_table
21057                 = GGC_RESIZEVEC (dw_separate_line_info_entry,
21058                                  separate_line_info_table,
21059                                  separate_line_info_table_allocated);
21060               memset (separate_line_info_table
21061                        + separate_line_info_table_in_use,
21062                       0,
21063                       (LINE_INFO_TABLE_INCREMENT
21064                        * sizeof (dw_separate_line_info_entry)));
21065             }
21066
21067           /* Add the new entry at the end of the line_info_table.  */
21068           line_info
21069             = &separate_line_info_table[separate_line_info_table_in_use++];
21070           line_info->dw_file_num = file_num;
21071           line_info->dw_line_num = line;
21072           line_info->function = current_function_funcdef_no;
21073         }
21074       else
21075         {
21076           dw_line_info_ref line_info;
21077
21078           targetm.asm_out.internal_label (asm_out_file, LINE_CODE_LABEL,
21079                                      line_info_table_in_use);
21080
21081           /* Expand the line info table if necessary.  */
21082           if (line_info_table_in_use == line_info_table_allocated)
21083             {
21084               line_info_table_allocated += LINE_INFO_TABLE_INCREMENT;
21085               line_info_table
21086                 = GGC_RESIZEVEC (dw_line_info_entry, line_info_table,
21087                                  line_info_table_allocated);
21088               memset (line_info_table + line_info_table_in_use, 0,
21089                       LINE_INFO_TABLE_INCREMENT * sizeof (dw_line_info_entry));
21090             }
21091
21092           /* Add the new entry at the end of the line_info_table.  */
21093           line_info = &line_info_table[line_info_table_in_use++];
21094           line_info->dw_file_num = file_num;
21095           line_info->dw_line_num = line;
21096         }
21097     }
21098 }
21099
21100 /* Record the beginning of a new source file.  */
21101
21102 static void
21103 dwarf2out_start_source_file (unsigned int lineno, const char *filename)
21104 {
21105   if (flag_eliminate_dwarf2_dups && dwarf_version < 4)
21106     {
21107       /* Record the beginning of the file for break_out_includes.  */
21108       dw_die_ref bincl_die;
21109
21110       bincl_die = new_die (DW_TAG_GNU_BINCL, comp_unit_die, NULL);
21111       add_AT_string (bincl_die, DW_AT_name, remap_debug_filename (filename));
21112     }
21113
21114   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
21115     {
21116       int file_num = maybe_emit_file (lookup_filename (filename));
21117
21118       switch_to_section (debug_macinfo_section);
21119       dw2_asm_output_data (1, DW_MACINFO_start_file, "Start new file");
21120       dw2_asm_output_data_uleb128 (lineno, "Included from line number %d",
21121                                    lineno);
21122
21123       dw2_asm_output_data_uleb128 (file_num, "file %s", filename);
21124     }
21125 }
21126
21127 /* Record the end of a source file.  */
21128
21129 static void
21130 dwarf2out_end_source_file (unsigned int lineno ATTRIBUTE_UNUSED)
21131 {
21132   if (flag_eliminate_dwarf2_dups && dwarf_version < 4)
21133     /* Record the end of the file for break_out_includes.  */
21134     new_die (DW_TAG_GNU_EINCL, comp_unit_die, NULL);
21135
21136   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
21137     {
21138       switch_to_section (debug_macinfo_section);
21139       dw2_asm_output_data (1, DW_MACINFO_end_file, "End file");
21140     }
21141 }
21142
21143 /* Called from debug_define in toplev.c.  The `buffer' parameter contains
21144    the tail part of the directive line, i.e. the part which is past the
21145    initial whitespace, #, whitespace, directive-name, whitespace part.  */
21146
21147 static void
21148 dwarf2out_define (unsigned int lineno ATTRIBUTE_UNUSED,
21149                   const char *buffer ATTRIBUTE_UNUSED)
21150 {
21151   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
21152     {
21153       switch_to_section (debug_macinfo_section);
21154       dw2_asm_output_data (1, DW_MACINFO_define, "Define macro");
21155       dw2_asm_output_data_uleb128 (lineno, "At line number %d", lineno);
21156       dw2_asm_output_nstring (buffer, -1, "The macro");
21157     }
21158 }
21159
21160 /* Called from debug_undef in toplev.c.  The `buffer' parameter contains
21161    the tail part of the directive line, i.e. the part which is past the
21162    initial whitespace, #, whitespace, directive-name, whitespace part.  */
21163
21164 static void
21165 dwarf2out_undef (unsigned int lineno ATTRIBUTE_UNUSED,
21166                  const char *buffer ATTRIBUTE_UNUSED)
21167 {
21168   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
21169     {
21170       switch_to_section (debug_macinfo_section);
21171       dw2_asm_output_data (1, DW_MACINFO_undef, "Undefine macro");
21172       dw2_asm_output_data_uleb128 (lineno, "At line number %d", lineno);
21173       dw2_asm_output_nstring (buffer, -1, "The macro");
21174     }
21175 }
21176
21177 /* Set up for Dwarf output at the start of compilation.  */
21178
21179 static void
21180 dwarf2out_init (const char *filename ATTRIBUTE_UNUSED)
21181 {
21182   /* Allocate the file_table.  */
21183   file_table = htab_create_ggc (50, file_table_hash,
21184                                 file_table_eq, NULL);
21185
21186   /* Allocate the decl_die_table.  */
21187   decl_die_table = htab_create_ggc (10, decl_die_table_hash,
21188                                     decl_die_table_eq, NULL);
21189
21190   /* Allocate the decl_loc_table.  */
21191   decl_loc_table = htab_create_ggc (10, decl_loc_table_hash,
21192                                     decl_loc_table_eq, NULL);
21193
21194   /* Allocate the initial hunk of the decl_scope_table.  */
21195   decl_scope_table = VEC_alloc (tree, gc, 256);
21196
21197   /* Allocate the initial hunk of the abbrev_die_table.  */
21198   abbrev_die_table = ggc_alloc_cleared_vec_dw_die_ref
21199     (ABBREV_DIE_TABLE_INCREMENT);
21200   abbrev_die_table_allocated = ABBREV_DIE_TABLE_INCREMENT;
21201   /* Zero-th entry is allocated, but unused.  */
21202   abbrev_die_table_in_use = 1;
21203
21204   /* Allocate the initial hunk of the line_info_table.  */
21205   line_info_table = ggc_alloc_cleared_vec_dw_line_info_entry
21206     (LINE_INFO_TABLE_INCREMENT);
21207   line_info_table_allocated = LINE_INFO_TABLE_INCREMENT;
21208
21209   /* Zero-th entry is allocated, but unused.  */
21210   line_info_table_in_use = 1;
21211
21212   /* Allocate the pubtypes and pubnames vectors.  */
21213   pubname_table = VEC_alloc (pubname_entry, gc, 32);
21214   pubtype_table = VEC_alloc (pubname_entry, gc, 32);
21215
21216   /* Allocate the table that maps insn UIDs to vtable slot indexes.  */
21217   vcall_insn_table = htab_create_ggc (10, vcall_insn_table_hash,
21218                                       vcall_insn_table_eq, NULL);
21219
21220   /* Generate the initial DIE for the .debug section.  Note that the (string)
21221      value given in the DW_AT_name attribute of the DW_TAG_compile_unit DIE
21222      will (typically) be a relative pathname and that this pathname should be
21223      taken as being relative to the directory from which the compiler was
21224      invoked when the given (base) source file was compiled.  We will fill
21225      in this value in dwarf2out_finish.  */
21226   comp_unit_die = gen_compile_unit_die (NULL);
21227
21228   incomplete_types = VEC_alloc (tree, gc, 64);
21229
21230   used_rtx_array = VEC_alloc (rtx, gc, 32);
21231
21232   debug_info_section = get_section (DEBUG_INFO_SECTION,
21233                                     SECTION_DEBUG, NULL);
21234   debug_abbrev_section = get_section (DEBUG_ABBREV_SECTION,
21235                                       SECTION_DEBUG, NULL);
21236   debug_aranges_section = get_section (DEBUG_ARANGES_SECTION,
21237                                        SECTION_DEBUG, NULL);
21238   debug_macinfo_section = get_section (DEBUG_MACINFO_SECTION,
21239                                        SECTION_DEBUG, NULL);
21240   debug_line_section = get_section (DEBUG_LINE_SECTION,
21241                                     SECTION_DEBUG, NULL);
21242   debug_loc_section = get_section (DEBUG_LOC_SECTION,
21243                                    SECTION_DEBUG, NULL);
21244   debug_pubnames_section = get_section (DEBUG_PUBNAMES_SECTION,
21245                                         SECTION_DEBUG, NULL);
21246   debug_pubtypes_section = get_section (DEBUG_PUBTYPES_SECTION,
21247                                         SECTION_DEBUG, NULL);
21248   debug_dcall_section = get_section (DEBUG_DCALL_SECTION,
21249                                      SECTION_DEBUG, NULL);
21250   debug_vcall_section = get_section (DEBUG_VCALL_SECTION,
21251                                      SECTION_DEBUG, NULL);
21252   debug_str_section = get_section (DEBUG_STR_SECTION,
21253                                    DEBUG_STR_SECTION_FLAGS, NULL);
21254   debug_ranges_section = get_section (DEBUG_RANGES_SECTION,
21255                                       SECTION_DEBUG, NULL);
21256   debug_frame_section = get_section (DEBUG_FRAME_SECTION,
21257                                      SECTION_DEBUG, NULL);
21258
21259   ASM_GENERATE_INTERNAL_LABEL (text_end_label, TEXT_END_LABEL, 0);
21260   ASM_GENERATE_INTERNAL_LABEL (abbrev_section_label,
21261                                DEBUG_ABBREV_SECTION_LABEL, 0);
21262   ASM_GENERATE_INTERNAL_LABEL (text_section_label, TEXT_SECTION_LABEL, 0);
21263   ASM_GENERATE_INTERNAL_LABEL (cold_text_section_label,
21264                                COLD_TEXT_SECTION_LABEL, 0);
21265   ASM_GENERATE_INTERNAL_LABEL (cold_end_label, COLD_END_LABEL, 0);
21266
21267   ASM_GENERATE_INTERNAL_LABEL (debug_info_section_label,
21268                                DEBUG_INFO_SECTION_LABEL, 0);
21269   ASM_GENERATE_INTERNAL_LABEL (debug_line_section_label,
21270                                DEBUG_LINE_SECTION_LABEL, 0);
21271   ASM_GENERATE_INTERNAL_LABEL (ranges_section_label,
21272                                DEBUG_RANGES_SECTION_LABEL, 0);
21273   switch_to_section (debug_abbrev_section);
21274   ASM_OUTPUT_LABEL (asm_out_file, abbrev_section_label);
21275   switch_to_section (debug_info_section);
21276   ASM_OUTPUT_LABEL (asm_out_file, debug_info_section_label);
21277   switch_to_section (debug_line_section);
21278   ASM_OUTPUT_LABEL (asm_out_file, debug_line_section_label);
21279
21280   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
21281     {
21282       switch_to_section (debug_macinfo_section);
21283       ASM_GENERATE_INTERNAL_LABEL (macinfo_section_label,
21284                                    DEBUG_MACINFO_SECTION_LABEL, 0);
21285       ASM_OUTPUT_LABEL (asm_out_file, macinfo_section_label);
21286     }
21287
21288   switch_to_section (text_section);
21289   ASM_OUTPUT_LABEL (asm_out_file, text_section_label);
21290   if (flag_reorder_blocks_and_partition)
21291     {
21292       cold_text_section = unlikely_text_section ();
21293       switch_to_section (cold_text_section);
21294       ASM_OUTPUT_LABEL (asm_out_file, cold_text_section_label);
21295     }
21296
21297 }
21298
21299 /* Called before cgraph_optimize starts outputtting functions, variables
21300    and toplevel asms into assembly.  */
21301
21302 static void
21303 dwarf2out_assembly_start (void)
21304 {
21305   if (HAVE_GAS_CFI_SECTIONS_DIRECTIVE && dwarf2out_do_cfi_asm ())
21306     {
21307 #ifndef TARGET_UNWIND_INFO
21308       if (USING_SJLJ_EXCEPTIONS || (!flag_unwind_tables && !flag_exceptions))
21309 #endif
21310         fprintf (asm_out_file, "\t.cfi_sections\t.debug_frame\n");
21311     }
21312 }
21313
21314 /* A helper function for dwarf2out_finish called through
21315    htab_traverse.  Emit one queued .debug_str string.  */
21316
21317 static int
21318 output_indirect_string (void **h, void *v ATTRIBUTE_UNUSED)
21319 {
21320   struct indirect_string_node *node = (struct indirect_string_node *) *h;
21321
21322   if (node->label && node->refcount)
21323     {
21324       switch_to_section (debug_str_section);
21325       ASM_OUTPUT_LABEL (asm_out_file, node->label);
21326       assemble_string (node->str, strlen (node->str) + 1);
21327     }
21328
21329   return 1;
21330 }
21331
21332 #if ENABLE_ASSERT_CHECKING
21333 /* Verify that all marks are clear.  */
21334
21335 static void
21336 verify_marks_clear (dw_die_ref die)
21337 {
21338   dw_die_ref c;
21339
21340   gcc_assert (! die->die_mark);
21341   FOR_EACH_CHILD (die, c, verify_marks_clear (c));
21342 }
21343 #endif /* ENABLE_ASSERT_CHECKING */
21344
21345 /* Clear the marks for a die and its children.
21346    Be cool if the mark isn't set.  */
21347
21348 static void
21349 prune_unmark_dies (dw_die_ref die)
21350 {
21351   dw_die_ref c;
21352
21353   if (die->die_mark)
21354     die->die_mark = 0;
21355   FOR_EACH_CHILD (die, c, prune_unmark_dies (c));
21356 }
21357
21358 /* Given DIE that we're marking as used, find any other dies
21359    it references as attributes and mark them as used.  */
21360
21361 static void
21362 prune_unused_types_walk_attribs (dw_die_ref die)
21363 {
21364   dw_attr_ref a;
21365   unsigned ix;
21366
21367   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
21368     {
21369       if (a->dw_attr_val.val_class == dw_val_class_die_ref)
21370         {
21371           /* A reference to another DIE.
21372              Make sure that it will get emitted.
21373              If it was broken out into a comdat group, don't follow it.  */
21374           if (dwarf_version < 4
21375               || a->dw_attr == DW_AT_specification
21376               || a->dw_attr_val.v.val_die_ref.die->die_id.die_type_node == NULL)
21377             prune_unused_types_mark (a->dw_attr_val.v.val_die_ref.die, 1);
21378         }
21379       /* Set the string's refcount to 0 so that prune_unused_types_mark
21380          accounts properly for it.  */
21381       if (AT_class (a) == dw_val_class_str)
21382         a->dw_attr_val.v.val_str->refcount = 0;
21383     }
21384 }
21385
21386
21387 /* Mark DIE as being used.  If DOKIDS is true, then walk down
21388    to DIE's children.  */
21389
21390 static void
21391 prune_unused_types_mark (dw_die_ref die, int dokids)
21392 {
21393   dw_die_ref c;
21394
21395   if (die->die_mark == 0)
21396     {
21397       /* We haven't done this node yet.  Mark it as used.  */
21398       die->die_mark = 1;
21399
21400       /* We also have to mark its parents as used.
21401          (But we don't want to mark our parents' kids due to this.)  */
21402       if (die->die_parent)
21403         prune_unused_types_mark (die->die_parent, 0);
21404
21405       /* Mark any referenced nodes.  */
21406       prune_unused_types_walk_attribs (die);
21407
21408       /* If this node is a specification,
21409          also mark the definition, if it exists.  */
21410       if (get_AT_flag (die, DW_AT_declaration) && die->die_definition)
21411         prune_unused_types_mark (die->die_definition, 1);
21412     }
21413
21414   if (dokids && die->die_mark != 2)
21415     {
21416       /* We need to walk the children, but haven't done so yet.
21417          Remember that we've walked the kids.  */
21418       die->die_mark = 2;
21419
21420       /* If this is an array type, we need to make sure our
21421          kids get marked, even if they're types.  If we're
21422          breaking out types into comdat sections, do this
21423          for all type definitions.  */
21424       if (die->die_tag == DW_TAG_array_type
21425           || (dwarf_version >= 4
21426               && is_type_die (die) && ! is_declaration_die (die)))
21427         FOR_EACH_CHILD (die, c, prune_unused_types_mark (c, 1));
21428       else
21429         FOR_EACH_CHILD (die, c, prune_unused_types_walk (c));
21430     }
21431 }
21432
21433 /* For local classes, look if any static member functions were emitted
21434    and if so, mark them.  */
21435
21436 static void
21437 prune_unused_types_walk_local_classes (dw_die_ref die)
21438 {
21439   dw_die_ref c;
21440
21441   if (die->die_mark == 2)
21442     return;
21443
21444   switch (die->die_tag)
21445     {
21446     case DW_TAG_structure_type:
21447     case DW_TAG_union_type:
21448     case DW_TAG_class_type:
21449       break;
21450
21451     case DW_TAG_subprogram:
21452       if (!get_AT_flag (die, DW_AT_declaration)
21453           || die->die_definition != NULL)
21454         prune_unused_types_mark (die, 1);
21455       return;
21456
21457     default:
21458       return;
21459     }
21460
21461   /* Mark children.  */
21462   FOR_EACH_CHILD (die, c, prune_unused_types_walk_local_classes (c));
21463 }
21464
21465 /* Walk the tree DIE and mark types that we actually use.  */
21466
21467 static void
21468 prune_unused_types_walk (dw_die_ref die)
21469 {
21470   dw_die_ref c;
21471
21472   /* Don't do anything if this node is already marked and
21473      children have been marked as well.  */
21474   if (die->die_mark == 2)
21475     return;
21476
21477   switch (die->die_tag)
21478     {
21479     case DW_TAG_structure_type:
21480     case DW_TAG_union_type:
21481     case DW_TAG_class_type:
21482       if (die->die_perennial_p)
21483         break;
21484
21485       for (c = die->die_parent; c; c = c->die_parent)
21486         if (c->die_tag == DW_TAG_subprogram)
21487           break;
21488
21489       /* Finding used static member functions inside of classes
21490          is needed just for local classes, because for other classes
21491          static member function DIEs with DW_AT_specification
21492          are emitted outside of the DW_TAG_*_type.  If we ever change
21493          it, we'd need to call this even for non-local classes.  */
21494       if (c)
21495         prune_unused_types_walk_local_classes (die);
21496
21497       /* It's a type node --- don't mark it.  */
21498       return;
21499
21500     case DW_TAG_const_type:
21501     case DW_TAG_packed_type:
21502     case DW_TAG_pointer_type:
21503     case DW_TAG_reference_type:
21504     case DW_TAG_rvalue_reference_type:
21505     case DW_TAG_volatile_type:
21506     case DW_TAG_typedef:
21507     case DW_TAG_array_type:
21508     case DW_TAG_interface_type:
21509     case DW_TAG_friend:
21510     case DW_TAG_variant_part:
21511     case DW_TAG_enumeration_type:
21512     case DW_TAG_subroutine_type:
21513     case DW_TAG_string_type:
21514     case DW_TAG_set_type:
21515     case DW_TAG_subrange_type:
21516     case DW_TAG_ptr_to_member_type:
21517     case DW_TAG_file_type:
21518       if (die->die_perennial_p)
21519         break;
21520
21521       /* It's a type node --- don't mark it.  */
21522       return;
21523
21524     default:
21525       /* Mark everything else.  */
21526       break;
21527   }
21528
21529   if (die->die_mark == 0)
21530     {
21531       die->die_mark = 1;
21532
21533       /* Now, mark any dies referenced from here.  */
21534       prune_unused_types_walk_attribs (die);
21535     }
21536
21537   die->die_mark = 2;
21538
21539   /* Mark children.  */
21540   FOR_EACH_CHILD (die, c, prune_unused_types_walk (c));
21541 }
21542
21543 /* Increment the string counts on strings referred to from DIE's
21544    attributes.  */
21545
21546 static void
21547 prune_unused_types_update_strings (dw_die_ref die)
21548 {
21549   dw_attr_ref a;
21550   unsigned ix;
21551
21552   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
21553     if (AT_class (a) == dw_val_class_str)
21554       {
21555         struct indirect_string_node *s = a->dw_attr_val.v.val_str;
21556         s->refcount++;
21557         /* Avoid unnecessarily putting strings that are used less than
21558            twice in the hash table.  */
21559         if (s->refcount
21560             == ((DEBUG_STR_SECTION_FLAGS & SECTION_MERGE) ? 1 : 2))
21561           {
21562             void ** slot;
21563             slot = htab_find_slot_with_hash (debug_str_hash, s->str,
21564                                              htab_hash_string (s->str),
21565                                              INSERT);
21566             gcc_assert (*slot == NULL);
21567             *slot = s;
21568           }
21569       }
21570 }
21571
21572 /* Remove from the tree DIE any dies that aren't marked.  */
21573
21574 static void
21575 prune_unused_types_prune (dw_die_ref die)
21576 {
21577   dw_die_ref c;
21578
21579   gcc_assert (die->die_mark);
21580   prune_unused_types_update_strings (die);
21581
21582   if (! die->die_child)
21583     return;
21584
21585   c = die->die_child;
21586   do {
21587     dw_die_ref prev = c;
21588     for (c = c->die_sib; ! c->die_mark; c = c->die_sib)
21589       if (c == die->die_child)
21590         {
21591           /* No marked children between 'prev' and the end of the list.  */
21592           if (prev == c)
21593             /* No marked children at all.  */
21594             die->die_child = NULL;
21595           else
21596             {
21597               prev->die_sib = c->die_sib;
21598               die->die_child = prev;
21599             }
21600           return;
21601         }
21602
21603     if (c != prev->die_sib)
21604       prev->die_sib = c;
21605     prune_unused_types_prune (c);
21606   } while (c != die->die_child);
21607 }
21608
21609 /* A helper function for dwarf2out_finish called through
21610    htab_traverse.  Clear .debug_str strings that we haven't already
21611    decided to emit.  */
21612
21613 static int
21614 prune_indirect_string (void **h, void *v ATTRIBUTE_UNUSED)
21615 {
21616   struct indirect_string_node *node = (struct indirect_string_node *) *h;
21617
21618   if (!node->label || !node->refcount)
21619     htab_clear_slot (debug_str_hash, h);
21620
21621   return 1;
21622 }
21623
21624 /* Remove dies representing declarations that we never use.  */
21625
21626 static void
21627 prune_unused_types (void)
21628 {
21629   unsigned int i;
21630   limbo_die_node *node;
21631   comdat_type_node *ctnode;
21632   pubname_ref pub;
21633   dcall_entry *dcall;
21634
21635 #if ENABLE_ASSERT_CHECKING
21636   /* All the marks should already be clear.  */
21637   verify_marks_clear (comp_unit_die);
21638   for (node = limbo_die_list; node; node = node->next)
21639     verify_marks_clear (node->die);
21640   for (ctnode = comdat_type_list; ctnode; ctnode = ctnode->next)
21641     verify_marks_clear (ctnode->root_die);
21642 #endif /* ENABLE_ASSERT_CHECKING */
21643
21644   /* Mark types that are used in global variables.  */
21645   premark_types_used_by_global_vars ();
21646
21647   /* Set the mark on nodes that are actually used.  */
21648   prune_unused_types_walk (comp_unit_die);
21649   for (node = limbo_die_list; node; node = node->next)
21650     prune_unused_types_walk (node->die);
21651   for (ctnode = comdat_type_list; ctnode; ctnode = ctnode->next)
21652     {
21653       prune_unused_types_walk (ctnode->root_die);
21654       prune_unused_types_mark (ctnode->type_die, 1);
21655     }
21656
21657   /* Also set the mark on nodes referenced from the
21658      pubname_table or arange_table.  */
21659   for (i = 0; VEC_iterate (pubname_entry, pubname_table, i, pub); i++)
21660     prune_unused_types_mark (pub->die, 1);
21661   for (i = 0; i < arange_table_in_use; i++)
21662     prune_unused_types_mark (arange_table[i], 1);
21663
21664   /* Mark nodes referenced from the direct call table.  */
21665   for (i = 0; VEC_iterate (dcall_entry, dcall_table, i, dcall); i++)
21666     prune_unused_types_mark (dcall->targ_die, 1);
21667
21668   /* Get rid of nodes that aren't marked; and update the string counts.  */
21669   if (debug_str_hash && debug_str_hash_forced)
21670     htab_traverse (debug_str_hash, prune_indirect_string, NULL);
21671   else if (debug_str_hash)
21672     htab_empty (debug_str_hash);
21673   prune_unused_types_prune (comp_unit_die);
21674   for (node = limbo_die_list; node; node = node->next)
21675     prune_unused_types_prune (node->die);
21676   for (ctnode = comdat_type_list; ctnode; ctnode = ctnode->next)
21677     prune_unused_types_prune (ctnode->root_die);
21678
21679   /* Leave the marks clear.  */
21680   prune_unmark_dies (comp_unit_die);
21681   for (node = limbo_die_list; node; node = node->next)
21682     prune_unmark_dies (node->die);
21683   for (ctnode = comdat_type_list; ctnode; ctnode = ctnode->next)
21684     prune_unmark_dies (ctnode->root_die);
21685 }
21686
21687 /* Set the parameter to true if there are any relative pathnames in
21688    the file table.  */
21689 static int
21690 file_table_relative_p (void ** slot, void *param)
21691 {
21692   bool *p = (bool *) param;
21693   struct dwarf_file_data *d = (struct dwarf_file_data *) *slot;
21694   if (!IS_ABSOLUTE_PATH (d->filename))
21695     {
21696       *p = true;
21697       return 0;
21698     }
21699   return 1;
21700 }
21701
21702 /* Routines to manipulate hash table of comdat type units.  */
21703
21704 static hashval_t
21705 htab_ct_hash (const void *of)
21706 {
21707   hashval_t h;
21708   const comdat_type_node *const type_node = (const comdat_type_node *) of;
21709
21710   memcpy (&h, type_node->signature, sizeof (h));
21711   return h;
21712 }
21713
21714 static int
21715 htab_ct_eq (const void *of1, const void *of2)
21716 {
21717   const comdat_type_node *const type_node_1 = (const comdat_type_node *) of1;
21718   const comdat_type_node *const type_node_2 = (const comdat_type_node *) of2;
21719
21720   return (! memcmp (type_node_1->signature, type_node_2->signature,
21721                     DWARF_TYPE_SIGNATURE_SIZE));
21722 }
21723
21724 /* Move a DW_AT_{,MIPS_}linkage_name attribute just added to dw_die_ref
21725    to the location it would have been added, should we know its
21726    DECL_ASSEMBLER_NAME when we added other attributes.  This will
21727    probably improve compactness of debug info, removing equivalent
21728    abbrevs, and hide any differences caused by deferring the
21729    computation of the assembler name, triggered by e.g. PCH.  */
21730
21731 static inline void
21732 move_linkage_attr (dw_die_ref die)
21733 {
21734   unsigned ix = VEC_length (dw_attr_node, die->die_attr);
21735   dw_attr_node linkage = *VEC_index (dw_attr_node, die->die_attr, ix - 1);
21736
21737   gcc_assert (linkage.dw_attr == AT_linkage_name);
21738
21739   while (--ix > 0)
21740     {
21741       dw_attr_node *prev = VEC_index (dw_attr_node, die->die_attr, ix - 1);
21742
21743       if (prev->dw_attr == DW_AT_decl_line || prev->dw_attr == DW_AT_name)
21744         break;
21745     }
21746
21747   if (ix != VEC_length (dw_attr_node, die->die_attr) - 1)
21748     {
21749       VEC_pop (dw_attr_node, die->die_attr);
21750       VEC_quick_insert (dw_attr_node, die->die_attr, ix, &linkage);
21751     }
21752 }
21753
21754 /* Helper function for resolve_addr, attempt to resolve
21755    one CONST_STRING, return non-zero if not successful.  Similarly verify that
21756    SYMBOL_REFs refer to variables emitted in the current CU.  */
21757
21758 static int
21759 resolve_one_addr (rtx *addr, void *data ATTRIBUTE_UNUSED)
21760 {
21761   rtx rtl = *addr;
21762
21763   if (GET_CODE (rtl) == CONST_STRING)
21764     {
21765       size_t len = strlen (XSTR (rtl, 0)) + 1;
21766       tree t = build_string (len, XSTR (rtl, 0));
21767       tree tlen = build_int_cst (NULL_TREE, len - 1);
21768       TREE_TYPE (t)
21769         = build_array_type (char_type_node, build_index_type (tlen));
21770       rtl = lookup_constant_def (t);
21771       if (!rtl || !MEM_P (rtl))
21772         return 1;
21773       rtl = XEXP (rtl, 0);
21774       VEC_safe_push (rtx, gc, used_rtx_array, rtl);
21775       *addr = rtl;
21776       return 0;
21777     }
21778
21779   if (GET_CODE (rtl) == SYMBOL_REF
21780       && SYMBOL_REF_DECL (rtl)
21781       && !TREE_ASM_WRITTEN (SYMBOL_REF_DECL (rtl)))
21782     return 1;
21783
21784   if (GET_CODE (rtl) == CONST
21785       && for_each_rtx (&XEXP (rtl, 0), resolve_one_addr, NULL))
21786     return 1;
21787
21788   return 0;
21789 }
21790
21791 /* Helper function for resolve_addr, handle one location
21792    expression, return false if at least one CONST_STRING or SYMBOL_REF in
21793    the location list couldn't be resolved.  */
21794
21795 static bool
21796 resolve_addr_in_expr (dw_loc_descr_ref loc)
21797 {
21798   for (; loc; loc = loc->dw_loc_next)
21799     if ((loc->dw_loc_opc == DW_OP_addr
21800          && resolve_one_addr (&loc->dw_loc_oprnd1.v.val_addr, NULL))
21801         || (loc->dw_loc_opc == DW_OP_implicit_value
21802             && loc->dw_loc_oprnd2.val_class == dw_val_class_addr
21803             && resolve_one_addr (&loc->dw_loc_oprnd2.v.val_addr, NULL)))
21804       return false;
21805   return true;
21806 }
21807
21808 /* Resolve DW_OP_addr and DW_AT_const_value CONST_STRING arguments to
21809    an address in .rodata section if the string literal is emitted there,
21810    or remove the containing location list or replace DW_AT_const_value
21811    with DW_AT_location and empty location expression, if it isn't found
21812    in .rodata.  Similarly for SYMBOL_REFs, keep only those that refer
21813    to something that has been emitted in the current CU.  */
21814
21815 static void
21816 resolve_addr (dw_die_ref die)
21817 {
21818   dw_die_ref c;
21819   dw_attr_ref a;
21820   dw_loc_list_ref *curr;
21821   unsigned ix;
21822
21823   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
21824     switch (AT_class (a))
21825       {
21826       case dw_val_class_loc_list:
21827         curr = AT_loc_list_ptr (a);
21828         while (*curr)
21829           {
21830             if (!resolve_addr_in_expr ((*curr)->expr))
21831               {
21832                 dw_loc_list_ref next = (*curr)->dw_loc_next;
21833                 if (next && (*curr)->ll_symbol)
21834                   {
21835                     gcc_assert (!next->ll_symbol);
21836                     next->ll_symbol = (*curr)->ll_symbol;
21837                   }
21838                 *curr = next;
21839               }
21840             else
21841               curr = &(*curr)->dw_loc_next;
21842           }
21843         if (!AT_loc_list (a))
21844           {
21845             remove_AT (die, a->dw_attr);
21846             ix--;
21847           }
21848         break;
21849       case dw_val_class_loc:
21850         if (!resolve_addr_in_expr (AT_loc (a)))
21851           {
21852             remove_AT (die, a->dw_attr);
21853             ix--;
21854           }
21855         break;
21856       case dw_val_class_addr:
21857         if (a->dw_attr == DW_AT_const_value
21858             && resolve_one_addr (&a->dw_attr_val.v.val_addr, NULL))
21859           {
21860             remove_AT (die, a->dw_attr);
21861             ix--;
21862           }
21863         break;
21864       default:
21865         break;
21866       }
21867
21868   FOR_EACH_CHILD (die, c, resolve_addr (c));
21869 }
21870
21871 /* Output stuff that dwarf requires at the end of every file,
21872    and generate the DWARF-2 debugging info.  */
21873
21874 static void
21875 dwarf2out_finish (const char *filename)
21876 {
21877   limbo_die_node *node, *next_node;
21878   comdat_type_node *ctnode;
21879   htab_t comdat_type_table;
21880   dw_die_ref die = 0;
21881   unsigned int i;
21882
21883   gen_remaining_tmpl_value_param_die_attribute ();
21884
21885   /* Add the name for the main input file now.  We delayed this from
21886      dwarf2out_init to avoid complications with PCH.  */
21887   add_name_attribute (comp_unit_die, remap_debug_filename (filename));
21888   if (!IS_ABSOLUTE_PATH (filename))
21889     add_comp_dir_attribute (comp_unit_die);
21890   else if (get_AT (comp_unit_die, DW_AT_comp_dir) == NULL)
21891     {
21892       bool p = false;
21893       htab_traverse (file_table, file_table_relative_p, &p);
21894       if (p)
21895         add_comp_dir_attribute (comp_unit_die);
21896     }
21897
21898   for (i = 0; i < VEC_length (deferred_locations, deferred_locations_list); i++)
21899     {
21900       add_location_or_const_value_attribute (
21901         VEC_index (deferred_locations, deferred_locations_list, i)->die,
21902         VEC_index (deferred_locations, deferred_locations_list, i)->variable,
21903         DW_AT_location);
21904     }
21905
21906   /* Traverse the limbo die list, and add parent/child links.  The only
21907      dies without parents that should be here are concrete instances of
21908      inline functions, and the comp_unit_die.  We can ignore the comp_unit_die.
21909      For concrete instances, we can get the parent die from the abstract
21910      instance.  */
21911   for (node = limbo_die_list; node; node = next_node)
21912     {
21913       next_node = node->next;
21914       die = node->die;
21915
21916       if (die->die_parent == NULL)
21917         {
21918           dw_die_ref origin = get_AT_ref (die, DW_AT_abstract_origin);
21919
21920           if (origin)
21921             add_child_die (origin->die_parent, die);
21922           else if (die == comp_unit_die)
21923             ;
21924           else if (seen_error ())
21925             /* It's OK to be confused by errors in the input.  */
21926             add_child_die (comp_unit_die, die);
21927           else
21928             {
21929               /* In certain situations, the lexical block containing a
21930                  nested function can be optimized away, which results
21931                  in the nested function die being orphaned.  Likewise
21932                  with the return type of that nested function.  Force
21933                  this to be a child of the containing function.
21934
21935                  It may happen that even the containing function got fully
21936                  inlined and optimized out.  In that case we are lost and
21937                  assign the empty child.  This should not be big issue as
21938                  the function is likely unreachable too.  */
21939               tree context = NULL_TREE;
21940
21941               gcc_assert (node->created_for);
21942
21943               if (DECL_P (node->created_for))
21944                 context = DECL_CONTEXT (node->created_for);
21945               else if (TYPE_P (node->created_for))
21946                 context = TYPE_CONTEXT (node->created_for);
21947
21948               gcc_assert (context
21949                           && (TREE_CODE (context) == FUNCTION_DECL
21950                               || TREE_CODE (context) == NAMESPACE_DECL));
21951
21952               origin = lookup_decl_die (context);
21953               if (origin)
21954                 add_child_die (origin, die);
21955               else
21956                 add_child_die (comp_unit_die, die);
21957             }
21958         }
21959     }
21960
21961   limbo_die_list = NULL;
21962
21963   resolve_addr (comp_unit_die);
21964
21965   for (node = deferred_asm_name; node; node = node->next)
21966     {
21967       tree decl = node->created_for;
21968       if (DECL_ASSEMBLER_NAME (decl) != DECL_NAME (decl))
21969         {
21970           add_AT_string (node->die, AT_linkage_name,
21971                          IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl)));
21972           move_linkage_attr (node->die);
21973         }
21974     }
21975
21976   deferred_asm_name = NULL;
21977
21978   /* Walk through the list of incomplete types again, trying once more to
21979      emit full debugging info for them.  */
21980   retry_incomplete_types ();
21981
21982   if (flag_eliminate_unused_debug_types)
21983     prune_unused_types ();
21984
21985   /* Generate separate CUs for each of the include files we've seen.
21986      They will go into limbo_die_list.  */
21987   if (flag_eliminate_dwarf2_dups && dwarf_version < 4)
21988     break_out_includes (comp_unit_die);
21989
21990   /* Generate separate COMDAT sections for type DIEs. */
21991   if (dwarf_version >= 4)
21992     {
21993       break_out_comdat_types (comp_unit_die);
21994
21995       /* Each new type_unit DIE was added to the limbo die list when created.
21996          Since these have all been added to comdat_type_list, clear the
21997          limbo die list.  */
21998       limbo_die_list = NULL;
21999
22000       /* For each new comdat type unit, copy declarations for incomplete
22001          types to make the new unit self-contained (i.e., no direct
22002          references to the main compile unit).  */
22003       for (ctnode = comdat_type_list; ctnode != NULL; ctnode = ctnode->next)
22004         copy_decls_for_unworthy_types (ctnode->root_die);
22005       copy_decls_for_unworthy_types (comp_unit_die);
22006
22007       /* In the process of copying declarations from one unit to another,
22008          we may have left some declarations behind that are no longer
22009          referenced.  Prune them.  */
22010       prune_unused_types ();
22011     }
22012
22013   /* Traverse the DIE's and add add sibling attributes to those DIE's
22014      that have children.  */
22015   add_sibling_attributes (comp_unit_die);
22016   for (node = limbo_die_list; node; node = node->next)
22017     add_sibling_attributes (node->die);
22018   for (ctnode = comdat_type_list; ctnode != NULL; ctnode = ctnode->next)
22019     add_sibling_attributes (ctnode->root_die);
22020
22021   /* Output a terminator label for the .text section.  */
22022   switch_to_section (text_section);
22023   targetm.asm_out.internal_label (asm_out_file, TEXT_END_LABEL, 0);
22024   if (flag_reorder_blocks_and_partition)
22025     {
22026       switch_to_section (unlikely_text_section ());
22027       targetm.asm_out.internal_label (asm_out_file, COLD_END_LABEL, 0);
22028     }
22029
22030   /* We can only use the low/high_pc attributes if all of the code was
22031      in .text.  */
22032   if (!have_multiple_function_sections
22033       || !(dwarf_version >= 3 || !dwarf_strict))
22034     {
22035       add_AT_lbl_id (comp_unit_die, DW_AT_low_pc, text_section_label);
22036       add_AT_lbl_id (comp_unit_die, DW_AT_high_pc, text_end_label);
22037     }
22038
22039   else
22040     {
22041       unsigned fde_idx = 0;
22042       bool range_list_added = false;
22043
22044       /* We need to give .debug_loc and .debug_ranges an appropriate
22045          "base address".  Use zero so that these addresses become
22046          absolute.  Historically, we've emitted the unexpected
22047          DW_AT_entry_pc instead of DW_AT_low_pc for this purpose.
22048          Emit both to give time for other tools to adapt.  */
22049       add_AT_addr (comp_unit_die, DW_AT_low_pc, const0_rtx);
22050       add_AT_addr (comp_unit_die, DW_AT_entry_pc, const0_rtx);
22051
22052       if (text_section_used)
22053         add_ranges_by_labels (comp_unit_die, text_section_label,
22054                               text_end_label, &range_list_added);
22055       if (flag_reorder_blocks_and_partition && cold_text_section_used)
22056         add_ranges_by_labels (comp_unit_die, cold_text_section_label,
22057                               cold_end_label, &range_list_added);
22058
22059       for (fde_idx = 0; fde_idx < fde_table_in_use; fde_idx++)
22060         {
22061           dw_fde_ref fde = &fde_table[fde_idx];
22062
22063           if (fde->dw_fde_switched_sections)
22064             {
22065               if (!fde->in_std_section)
22066                 add_ranges_by_labels (comp_unit_die,
22067                                       fde->dw_fde_hot_section_label,
22068                                       fde->dw_fde_hot_section_end_label,
22069                                       &range_list_added);
22070               if (!fde->cold_in_std_section)
22071                 add_ranges_by_labels (comp_unit_die,
22072                                       fde->dw_fde_unlikely_section_label,
22073                                       fde->dw_fde_unlikely_section_end_label,
22074                                       &range_list_added);
22075             }
22076           else if (!fde->in_std_section)
22077             add_ranges_by_labels (comp_unit_die, fde->dw_fde_begin,
22078                                   fde->dw_fde_end, &range_list_added);
22079         }
22080
22081       if (range_list_added)
22082         add_ranges (NULL);
22083     }
22084
22085   /* Output location list section if necessary.  */
22086   if (have_location_lists)
22087     {
22088       /* Output the location lists info.  */
22089       switch_to_section (debug_loc_section);
22090       ASM_GENERATE_INTERNAL_LABEL (loc_section_label,
22091                                    DEBUG_LOC_SECTION_LABEL, 0);
22092       ASM_OUTPUT_LABEL (asm_out_file, loc_section_label);
22093       output_location_lists (die);
22094     }
22095
22096   if (debug_info_level >= DINFO_LEVEL_NORMAL)
22097     add_AT_lineptr (comp_unit_die, DW_AT_stmt_list,
22098                     debug_line_section_label);
22099
22100   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
22101     add_AT_macptr (comp_unit_die, DW_AT_macro_info, macinfo_section_label);
22102
22103   /* Output all of the compilation units.  We put the main one last so that
22104      the offsets are available to output_pubnames.  */
22105   for (node = limbo_die_list; node; node = node->next)
22106     output_comp_unit (node->die, 0);
22107
22108   comdat_type_table = htab_create (100, htab_ct_hash, htab_ct_eq, NULL);
22109   for (ctnode = comdat_type_list; ctnode != NULL; ctnode = ctnode->next)
22110     {
22111       void **slot = htab_find_slot (comdat_type_table, ctnode, INSERT);
22112
22113       /* Don't output duplicate types.  */
22114       if (*slot != HTAB_EMPTY_ENTRY)
22115         continue;
22116
22117       /* Add a pointer to the line table for the main compilation unit
22118          so that the debugger can make sense of DW_AT_decl_file
22119          attributes.  */
22120       if (debug_info_level >= DINFO_LEVEL_NORMAL)
22121         add_AT_lineptr (ctnode->root_die, DW_AT_stmt_list,
22122                         debug_line_section_label);
22123
22124       output_comdat_type_unit (ctnode);
22125       *slot = ctnode;
22126     }
22127   htab_delete (comdat_type_table);
22128
22129   /* Output the main compilation unit if non-empty or if .debug_macinfo
22130      has been emitted.  */
22131   output_comp_unit (comp_unit_die, debug_info_level >= DINFO_LEVEL_VERBOSE);
22132
22133   /* Output the abbreviation table.  */
22134   switch_to_section (debug_abbrev_section);
22135   output_abbrev_section ();
22136
22137   /* Output public names table if necessary.  */
22138   if (!VEC_empty (pubname_entry, pubname_table))
22139     {
22140       switch_to_section (debug_pubnames_section);
22141       output_pubnames (pubname_table);
22142     }
22143
22144   /* Output public types table if necessary.  */
22145   /* ??? Only defined by DWARF3, but emitted by Darwin for DWARF2.
22146      It shouldn't hurt to emit it always, since pure DWARF2 consumers
22147      simply won't look for the section.  */
22148   if (!VEC_empty (pubname_entry, pubtype_table))
22149     {
22150       switch_to_section (debug_pubtypes_section);
22151       output_pubnames (pubtype_table);
22152     }
22153
22154   /* Output direct and virtual call tables if necessary.  */
22155   if (!VEC_empty (dcall_entry, dcall_table))
22156     {
22157       switch_to_section (debug_dcall_section);
22158       output_dcall_table ();
22159     }
22160   if (!VEC_empty (vcall_entry, vcall_table))
22161     {
22162       switch_to_section (debug_vcall_section);
22163       output_vcall_table ();
22164     }
22165
22166   /* Output the address range information.  We only put functions in the arange
22167      table, so don't write it out if we don't have any.  */
22168   if (fde_table_in_use)
22169     {
22170       switch_to_section (debug_aranges_section);
22171       output_aranges ();
22172     }
22173
22174   /* Output ranges section if necessary.  */
22175   if (ranges_table_in_use)
22176     {
22177       switch_to_section (debug_ranges_section);
22178       ASM_OUTPUT_LABEL (asm_out_file, ranges_section_label);
22179       output_ranges ();
22180     }
22181
22182   /* Output the source line correspondence table.  We must do this
22183      even if there is no line information.  Otherwise, on an empty
22184      translation unit, we will generate a present, but empty,
22185      .debug_info section.  IRIX 6.5 `nm' will then complain when
22186      examining the file.  This is done late so that any filenames
22187      used by the debug_info section are marked as 'used'.  */
22188   if (! DWARF2_ASM_LINE_DEBUG_INFO)
22189     {
22190       switch_to_section (debug_line_section);
22191       output_line_info ();
22192     }
22193
22194   /* Have to end the macro section.  */
22195   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
22196     {
22197       switch_to_section (debug_macinfo_section);
22198       dw2_asm_output_data (1, 0, "End compilation unit");
22199     }
22200
22201   /* If we emitted any DW_FORM_strp form attribute, output the string
22202      table too.  */
22203   if (debug_str_hash)
22204     htab_traverse (debug_str_hash, output_indirect_string, NULL);
22205 }
22206 #else
22207
22208 /* This should never be used, but its address is needed for comparisons.  */
22209 const struct gcc_debug_hooks dwarf2_debug_hooks =
22210 {
22211   0,            /* init */
22212   0,            /* finish */
22213   0,            /* assembly_start */
22214   0,            /* define */
22215   0,            /* undef */
22216   0,            /* start_source_file */
22217   0,            /* end_source_file */
22218   0,            /* begin_block */
22219   0,            /* end_block */
22220   0,            /* ignore_block */
22221   0,            /* source_line */
22222   0,            /* begin_prologue */
22223   0,            /* end_prologue */
22224   0,            /* end_epilogue */
22225   0,            /* begin_function */
22226   0,            /* end_function */
22227   0,            /* function_decl */
22228   0,            /* global_decl */
22229   0,            /* type_decl */
22230   0,            /* imported_module_or_decl */
22231   0,            /* deferred_inline_function */
22232   0,            /* outlining_inline_function */
22233   0,            /* label */
22234   0,            /* handle_pch */
22235   0,            /* var_location */
22236   0,            /* switch_text_section */
22237   0,            /* direct_call */
22238   0,            /* virtual_call_token */
22239   0,            /* copy_call_info */
22240   0,            /* virtual_call */
22241   0,            /* set_name */
22242   0             /* start_end_main_source_file */
22243 };
22244
22245 #endif /* DWARF2_DEBUGGING_INFO */
22246
22247 #include "gt-dwarf2out.h"