OSDN Git Service

* os_dep.c: Use the POSIX signal API in preference to the BSD API.
[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 Free Software Foundation, Inc.
4    Contributed by Gary Funck (gary@intrepid.com).
5    Derived from DWARF 1 implementation of Ron Guilmette (rfg@monkeys.com).
6    Extensively modified by Jason Merrill (jason@cygnus.com).
7
8 This file is part of GCC.
9
10 GCC is free software; you can redistribute it and/or modify it under
11 the terms of the GNU General Public License as published by the Free
12 Software Foundation; either version 3, or (at your option) any later
13 version.
14
15 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
16 WARRANTY; without even the implied warranty of MERCHANTABILITY or
17 FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
18 for more details.
19
20 You should have received a copy of the GNU General Public License
21 along with GCC; see the file COPYING3.  If not see
22 <http://www.gnu.org/licenses/>.  */
23
24 /* TODO: Emit .debug_line header even when there are no functions, since
25            the file numbers are used by .debug_info.  Alternately, leave
26            out locations for types and decls.
27          Avoid talking about ctors and op= for PODs.
28          Factor out common prologue sequences into multiple CIEs.  */
29
30 /* The first part of this file deals with the DWARF 2 frame unwind
31    information, which is also used by the GCC efficient exception handling
32    mechanism.  The second part, controlled only by an #ifdef
33    DWARF2_DEBUGGING_INFO, deals with the other DWARF 2 debugging
34    information.  */
35
36 /* DWARF2 Abbreviation Glossary:
37
38    CFA = Canonical Frame Address
39            a fixed address on the stack which identifies a call frame.
40            We define it to be the value of SP just before the call insn.
41            The CFA register and offset, which may change during the course
42            of the function, are used to calculate its value at runtime.
43
44    CFI = Call Frame Instruction
45            an instruction for the DWARF2 abstract machine
46
47    CIE = Common Information Entry
48            information describing information common to one or more FDEs
49
50    DIE = Debugging Information Entry
51
52    FDE = Frame Description Entry
53            information describing the stack call frame, in particular,
54            how to restore registers
55
56    DW_CFA_... = DWARF2 CFA call frame instruction
57    DW_TAG_... = DWARF2 DIE tag */
58
59 #include "config.h"
60 #include "system.h"
61 #include "coretypes.h"
62 #include "tm.h"
63 #include "tree.h"
64 #include "version.h"
65 #include "flags.h"
66 #include "real.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 "varray.h"
82 #include "ggc.h"
83 #include "md5.h"
84 #include "tm_p.h"
85 #include "diagnostic.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
95 #ifdef DWARF2_DEBUGGING_INFO
96 static void dwarf2out_source_line (unsigned int, const char *, int, bool);
97
98 static rtx last_var_location_insn;
99 #endif
100
101 #ifdef VMS_DEBUGGING_INFO
102 int vms_file_stats_name (const char *, long long *, long *, char *, int *);
103
104 /* Define this macro to be a nonzero value if the directory specifications
105     which are output in the debug info should end with a separator.  */
106 #define DWARF2_DIR_SHOULD_END_WITH_SEPARATOR 1
107 /* Define this macro to evaluate to a nonzero value if GCC should refrain
108    from generating indirect strings in DWARF2 debug information, for instance
109    if your target is stuck with an old version of GDB that is unable to
110    process them properly or uses VMS Debug.  */
111 #define DWARF2_INDIRECT_STRING_SUPPORT_MISSING_ON_TARGET 1
112 #else
113 #define DWARF2_DIR_SHOULD_END_WITH_SEPARATOR 0
114 #define DWARF2_INDIRECT_STRING_SUPPORT_MISSING_ON_TARGET 0
115 #endif
116
117 #ifndef DWARF2_FRAME_INFO
118 # ifdef DWARF2_DEBUGGING_INFO
119 #  define DWARF2_FRAME_INFO \
120   (write_symbols == DWARF2_DEBUG || write_symbols == VMS_AND_DWARF2_DEBUG)
121 # else
122 #  define DWARF2_FRAME_INFO 0
123 # endif
124 #endif
125
126 /* Map register numbers held in the call frame info that gcc has
127    collected using DWARF_FRAME_REGNUM to those that should be output in
128    .debug_frame and .eh_frame.  */
129 #ifndef DWARF2_FRAME_REG_OUT
130 #define DWARF2_FRAME_REG_OUT(REGNO, FOR_EH) (REGNO)
131 #endif
132
133 /* Save the result of dwarf2out_do_frame across PCH.  */
134 static GTY(()) bool saved_do_cfi_asm = 0;
135
136 /* Decide whether we want to emit frame unwind information for the current
137    translation unit.  */
138
139 int
140 dwarf2out_do_frame (void)
141 {
142   /* We want to emit correct CFA location expressions or lists, so we
143      have to return true if we're going to output debug info, even if
144      we're not going to output frame or unwind info.  */
145   return (write_symbols == DWARF2_DEBUG
146           || write_symbols == VMS_AND_DWARF2_DEBUG
147           || DWARF2_FRAME_INFO || saved_do_cfi_asm
148 #ifdef DWARF2_UNWIND_INFO
149           || (DWARF2_UNWIND_INFO
150               && (flag_unwind_tables
151                   || (flag_exceptions && ! USING_SJLJ_EXCEPTIONS)))
152 #endif
153           );
154 }
155
156 /* Decide whether to emit frame unwind via assembler directives.  */
157
158 int
159 dwarf2out_do_cfi_asm (void)
160 {
161   int enc;
162
163 #ifdef MIPS_DEBUGGING_INFO
164   return false;
165 #endif
166   if (!flag_dwarf2_cfi_asm || !dwarf2out_do_frame ())
167     return false;
168   if (saved_do_cfi_asm)
169     return true;
170   if (!HAVE_GAS_CFI_PERSONALITY_DIRECTIVE)
171     return false;
172
173   /* Make sure the personality encoding is one the assembler can support.
174      In particular, aligned addresses can't be handled.  */
175   enc = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/2,/*global=*/1);
176   if ((enc & 0x70) != 0 && (enc & 0x70) != DW_EH_PE_pcrel)
177     return false;
178   enc = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/0,/*global=*/0);
179   if ((enc & 0x70) != 0 && (enc & 0x70) != DW_EH_PE_pcrel)
180     return false;
181
182   if (!HAVE_GAS_CFI_SECTIONS_DIRECTIVE)
183     {
184 #ifdef TARGET_UNWIND_INFO
185       return false;
186 #else
187       if (USING_SJLJ_EXCEPTIONS || (!flag_unwind_tables && !flag_exceptions))
188         return false;
189 #endif
190     }
191
192   saved_do_cfi_asm = true;
193   return true;
194 }
195
196 /* The size of the target's pointer type.  */
197 #ifndef PTR_SIZE
198 #define PTR_SIZE (POINTER_SIZE / BITS_PER_UNIT)
199 #endif
200
201 /* Array of RTXes referenced by the debugging information, which therefore
202    must be kept around forever.  */
203 static GTY(()) VEC(rtx,gc) *used_rtx_array;
204
205 /* A pointer to the base of a list of incomplete types which might be
206    completed at some later time.  incomplete_types_list needs to be a
207    VEC(tree,gc) because we want to tell the garbage collector about
208    it.  */
209 static GTY(()) VEC(tree,gc) *incomplete_types;
210
211 /* A pointer to the base of a table of references to declaration
212    scopes.  This table is a display which tracks the nesting
213    of declaration scopes at the current scope and containing
214    scopes.  This table is used to find the proper place to
215    define type declaration DIE's.  */
216 static GTY(()) VEC(tree,gc) *decl_scope_table;
217
218 /* Pointers to various DWARF2 sections.  */
219 static GTY(()) section *debug_info_section;
220 static GTY(()) section *debug_abbrev_section;
221 static GTY(()) section *debug_aranges_section;
222 static GTY(()) section *debug_macinfo_section;
223 static GTY(()) section *debug_line_section;
224 static GTY(()) section *debug_loc_section;
225 static GTY(()) section *debug_pubnames_section;
226 static GTY(()) section *debug_pubtypes_section;
227 static GTY(()) section *debug_dcall_section;
228 static GTY(()) section *debug_vcall_section;
229 static GTY(()) section *debug_str_section;
230 static GTY(()) section *debug_ranges_section;
231 static GTY(()) section *debug_frame_section;
232
233 /* Personality decl of current unit.  Used only when assembler does not support
234    personality CFI.  */
235 static GTY(()) rtx current_unit_personality;
236
237 /* How to start an assembler comment.  */
238 #ifndef ASM_COMMENT_START
239 #define ASM_COMMENT_START ";#"
240 #endif
241
242 typedef struct dw_cfi_struct *dw_cfi_ref;
243 typedef struct dw_fde_struct *dw_fde_ref;
244 typedef union  dw_cfi_oprnd_struct *dw_cfi_oprnd_ref;
245
246 /* Call frames are described using a sequence of Call Frame
247    Information instructions.  The register number, offset
248    and address fields are provided as possible operands;
249    their use is selected by the opcode field.  */
250
251 enum dw_cfi_oprnd_type {
252   dw_cfi_oprnd_unused,
253   dw_cfi_oprnd_reg_num,
254   dw_cfi_oprnd_offset,
255   dw_cfi_oprnd_addr,
256   dw_cfi_oprnd_loc
257 };
258
259 typedef union GTY(()) dw_cfi_oprnd_struct {
260   unsigned int GTY ((tag ("dw_cfi_oprnd_reg_num"))) dw_cfi_reg_num;
261   HOST_WIDE_INT GTY ((tag ("dw_cfi_oprnd_offset"))) dw_cfi_offset;
262   const char * GTY ((tag ("dw_cfi_oprnd_addr"))) dw_cfi_addr;
263   struct dw_loc_descr_struct * GTY ((tag ("dw_cfi_oprnd_loc"))) dw_cfi_loc;
264 }
265 dw_cfi_oprnd;
266
267 typedef struct GTY(()) dw_cfi_struct {
268   dw_cfi_ref dw_cfi_next;
269   enum dwarf_call_frame_info dw_cfi_opc;
270   dw_cfi_oprnd GTY ((desc ("dw_cfi_oprnd1_desc (%1.dw_cfi_opc)")))
271     dw_cfi_oprnd1;
272   dw_cfi_oprnd GTY ((desc ("dw_cfi_oprnd2_desc (%1.dw_cfi_opc)")))
273     dw_cfi_oprnd2;
274 }
275 dw_cfi_node;
276
277 /* This is how we define the location of the CFA. We use to handle it
278    as REG + OFFSET all the time,  but now it can be more complex.
279    It can now be either REG + CFA_OFFSET or *(REG + BASE_OFFSET) + CFA_OFFSET.
280    Instead of passing around REG and OFFSET, we pass a copy
281    of this structure.  */
282 typedef struct GTY(()) cfa_loc {
283   HOST_WIDE_INT offset;
284   HOST_WIDE_INT base_offset;
285   unsigned int reg;
286   BOOL_BITFIELD indirect : 1;  /* 1 if CFA is accessed via a dereference.  */
287   BOOL_BITFIELD in_use : 1;    /* 1 if a saved cfa is stored here.  */
288 } dw_cfa_location;
289
290 /* All call frame descriptions (FDE's) in the GCC generated DWARF
291    refer to a single Common Information Entry (CIE), defined at
292    the beginning of the .debug_frame section.  This use of a single
293    CIE obviates the need to keep track of multiple CIE's
294    in the DWARF generation routines below.  */
295
296 typedef struct GTY(()) dw_fde_struct {
297   tree decl;
298   const char *dw_fde_begin;
299   const char *dw_fde_current_label;
300   const char *dw_fde_end;
301   const char *dw_fde_hot_section_label;
302   const char *dw_fde_hot_section_end_label;
303   const char *dw_fde_unlikely_section_label;
304   const char *dw_fde_unlikely_section_end_label;
305   dw_cfi_ref dw_fde_cfi;
306   dw_cfi_ref dw_fde_switch_cfi; /* Last CFI before switching sections.  */
307   unsigned funcdef_number;
308   HOST_WIDE_INT stack_realignment;
309   /* Dynamic realign argument pointer register.  */
310   unsigned int drap_reg;
311   /* Virtual dynamic realign argument pointer register.  */
312   unsigned int vdrap_reg;
313   unsigned all_throwers_are_sibcalls : 1;
314   unsigned nothrow : 1;
315   unsigned uses_eh_lsda : 1;
316   /* Whether we did stack realign in this call frame.  */
317   unsigned stack_realign : 1;
318   /* Whether dynamic realign argument pointer register has been saved.  */
319   unsigned drap_reg_saved: 1;
320   /* True iff dw_fde_begin label is in text_section or cold_text_section.  */
321   unsigned in_std_section : 1;
322   /* True iff dw_fde_unlikely_section_label is in text_section or
323      cold_text_section.  */
324   unsigned cold_in_std_section : 1;
325   /* True iff switched sections.  */
326   unsigned dw_fde_switched_sections : 1;
327   /* True iff switching from cold to hot section.  */
328   unsigned dw_fde_switched_cold_to_hot : 1;
329 }
330 dw_fde_node;
331
332 /* Maximum size (in bytes) of an artificially generated label.  */
333 #define MAX_ARTIFICIAL_LABEL_BYTES      30
334
335 /* The size of addresses as they appear in the Dwarf 2 data.
336    Some architectures use word addresses to refer to code locations,
337    but Dwarf 2 info always uses byte addresses.  On such machines,
338    Dwarf 2 addresses need to be larger than the architecture's
339    pointers.  */
340 #ifndef DWARF2_ADDR_SIZE
341 #define DWARF2_ADDR_SIZE (POINTER_SIZE / BITS_PER_UNIT)
342 #endif
343
344 /* The size in bytes of a DWARF field indicating an offset or length
345    relative to a debug info section, specified to be 4 bytes in the
346    DWARF-2 specification.  The SGI/MIPS ABI defines it to be the same
347    as PTR_SIZE.  */
348
349 #ifndef DWARF_OFFSET_SIZE
350 #define DWARF_OFFSET_SIZE 4
351 #endif
352
353 /* The size in bytes of a DWARF 4 type signature.  */
354
355 #ifndef DWARF_TYPE_SIGNATURE_SIZE
356 #define DWARF_TYPE_SIGNATURE_SIZE 8
357 #endif
358
359 /* According to the (draft) DWARF 3 specification, the initial length
360    should either be 4 or 12 bytes.  When it's 12 bytes, the first 4
361    bytes are 0xffffffff, followed by the length stored in the next 8
362    bytes.
363
364    However, the SGI/MIPS ABI uses an initial length which is equal to
365    DWARF_OFFSET_SIZE.  It is defined (elsewhere) accordingly.  */
366
367 #ifndef DWARF_INITIAL_LENGTH_SIZE
368 #define DWARF_INITIAL_LENGTH_SIZE (DWARF_OFFSET_SIZE == 4 ? 4 : 12)
369 #endif
370
371 /* Round SIZE up to the nearest BOUNDARY.  */
372 #define DWARF_ROUND(SIZE,BOUNDARY) \
373   ((((SIZE) + (BOUNDARY) - 1) / (BOUNDARY)) * (BOUNDARY))
374
375 /* Offsets recorded in opcodes are a multiple of this alignment factor.  */
376 #ifndef DWARF_CIE_DATA_ALIGNMENT
377 #ifdef STACK_GROWS_DOWNWARD
378 #define DWARF_CIE_DATA_ALIGNMENT (-((int) UNITS_PER_WORD))
379 #else
380 #define DWARF_CIE_DATA_ALIGNMENT ((int) UNITS_PER_WORD)
381 #endif
382 #endif
383
384 /* CIE identifier.  */
385 #if HOST_BITS_PER_WIDE_INT >= 64
386 #define DWARF_CIE_ID \
387   (unsigned HOST_WIDE_INT) (DWARF_OFFSET_SIZE == 4 ? DW_CIE_ID : DW64_CIE_ID)
388 #else
389 #define DWARF_CIE_ID DW_CIE_ID
390 #endif
391
392 /* A pointer to the base of a table that contains frame description
393    information for each routine.  */
394 static GTY((length ("fde_table_allocated"))) dw_fde_ref fde_table;
395
396 /* Number of elements currently allocated for fde_table.  */
397 static GTY(()) unsigned fde_table_allocated;
398
399 /* Number of elements in fde_table currently in use.  */
400 static GTY(()) unsigned fde_table_in_use;
401
402 /* Size (in elements) of increments by which we may expand the
403    fde_table.  */
404 #define FDE_TABLE_INCREMENT 256
405
406 /* Get the current fde_table entry we should use.  */
407
408 static inline dw_fde_ref
409 current_fde (void)
410 {
411   return fde_table_in_use ? &fde_table[fde_table_in_use - 1] : NULL;
412 }
413
414 /* A list of call frame insns for the CIE.  */
415 static GTY(()) dw_cfi_ref cie_cfi_head;
416
417 #if defined (DWARF2_DEBUGGING_INFO) || defined (DWARF2_UNWIND_INFO)
418 /* Some DWARF extensions (e.g., MIPS/SGI) implement a subprogram
419    attribute that accelerates the lookup of the FDE associated
420    with the subprogram.  This variable holds the table index of the FDE
421    associated with the current function (body) definition.  */
422 static unsigned current_funcdef_fde;
423 #endif
424
425 struct GTY(()) indirect_string_node {
426   const char *str;
427   unsigned int refcount;
428   enum dwarf_form form;
429   char *label;
430 };
431
432 static GTY ((param_is (struct indirect_string_node))) htab_t debug_str_hash;
433
434 /* True if the compilation unit has location entries that reference
435    debug strings.  */
436 static GTY(()) bool debug_str_hash_forced = false;
437
438 static GTY(()) int dw2_string_counter;
439 static GTY(()) unsigned long dwarf2out_cfi_label_num;
440
441 /* True if the compilation unit places functions in more than one section.  */
442 static GTY(()) bool have_multiple_function_sections = false;
443
444 /* Whether the default text and cold text sections have been used at all.  */
445
446 static GTY(()) bool text_section_used = false;
447 static GTY(()) bool cold_text_section_used = false;
448
449 /* The default cold text section.  */
450 static GTY(()) section *cold_text_section;
451
452 #if defined (DWARF2_DEBUGGING_INFO) || defined (DWARF2_UNWIND_INFO)
453
454 /* Forward declarations for functions defined in this file.  */
455
456 static char *stripattributes (const char *);
457 static const char *dwarf_cfi_name (unsigned);
458 static dw_cfi_ref new_cfi (void);
459 static void add_cfi (dw_cfi_ref *, dw_cfi_ref);
460 static void add_fde_cfi (const char *, dw_cfi_ref);
461 static void lookup_cfa_1 (dw_cfi_ref, dw_cfa_location *, dw_cfa_location *);
462 static void lookup_cfa (dw_cfa_location *);
463 static void reg_save (const char *, unsigned, unsigned, HOST_WIDE_INT);
464 #ifdef DWARF2_UNWIND_INFO
465 static void initial_return_save (rtx);
466 #endif
467 static HOST_WIDE_INT stack_adjust_offset (const_rtx, HOST_WIDE_INT,
468                                           HOST_WIDE_INT);
469 static void output_cfi (dw_cfi_ref, dw_fde_ref, int);
470 static void output_cfi_directive (dw_cfi_ref);
471 static void output_call_frame_info (int);
472 static void dwarf2out_note_section_used (void);
473 static void flush_queued_reg_saves (void);
474 static bool clobbers_queued_reg_save (const_rtx);
475 static void dwarf2out_frame_debug_expr (rtx, const char *);
476
477 /* Support for complex CFA locations.  */
478 static void output_cfa_loc (dw_cfi_ref);
479 static void output_cfa_loc_raw (dw_cfi_ref);
480 static void get_cfa_from_loc_descr (dw_cfa_location *,
481                                     struct dw_loc_descr_struct *);
482 static struct dw_loc_descr_struct *build_cfa_loc
483   (dw_cfa_location *, HOST_WIDE_INT);
484 static struct dw_loc_descr_struct *build_cfa_aligned_loc
485   (HOST_WIDE_INT, HOST_WIDE_INT);
486 static void def_cfa_1 (const char *, dw_cfa_location *);
487
488 /* How to start an assembler comment.  */
489 #ifndef ASM_COMMENT_START
490 #define ASM_COMMENT_START ";#"
491 #endif
492
493 /* Data and reference forms for relocatable data.  */
494 #define DW_FORM_data (DWARF_OFFSET_SIZE == 8 ? DW_FORM_data8 : DW_FORM_data4)
495 #define DW_FORM_ref (DWARF_OFFSET_SIZE == 8 ? DW_FORM_ref8 : DW_FORM_ref4)
496
497 #ifndef DEBUG_FRAME_SECTION
498 #define DEBUG_FRAME_SECTION     ".debug_frame"
499 #endif
500
501 #ifndef FUNC_BEGIN_LABEL
502 #define FUNC_BEGIN_LABEL        "LFB"
503 #endif
504
505 #ifndef FUNC_END_LABEL
506 #define FUNC_END_LABEL          "LFE"
507 #endif
508
509 #ifndef FRAME_BEGIN_LABEL
510 #define FRAME_BEGIN_LABEL       "Lframe"
511 #endif
512 #define CIE_AFTER_SIZE_LABEL    "LSCIE"
513 #define CIE_END_LABEL           "LECIE"
514 #define FDE_LABEL               "LSFDE"
515 #define FDE_AFTER_SIZE_LABEL    "LASFDE"
516 #define FDE_END_LABEL           "LEFDE"
517 #define LINE_NUMBER_BEGIN_LABEL "LSLT"
518 #define LINE_NUMBER_END_LABEL   "LELT"
519 #define LN_PROLOG_AS_LABEL      "LASLTP"
520 #define LN_PROLOG_END_LABEL     "LELTP"
521 #define DIE_LABEL_PREFIX        "DW"
522
523 /* The DWARF 2 CFA column which tracks the return address.  Normally this
524    is the column for PC, or the first column after all of the hard
525    registers.  */
526 #ifndef DWARF_FRAME_RETURN_COLUMN
527 #ifdef PC_REGNUM
528 #define DWARF_FRAME_RETURN_COLUMN       DWARF_FRAME_REGNUM (PC_REGNUM)
529 #else
530 #define DWARF_FRAME_RETURN_COLUMN       DWARF_FRAME_REGISTERS
531 #endif
532 #endif
533
534 /* The mapping from gcc register number to DWARF 2 CFA column number.  By
535    default, we just provide columns for all registers.  */
536 #ifndef DWARF_FRAME_REGNUM
537 #define DWARF_FRAME_REGNUM(REG) DBX_REGISTER_NUMBER (REG)
538 #endif
539 \f
540 /* Hook used by __throw.  */
541
542 rtx
543 expand_builtin_dwarf_sp_column (void)
544 {
545   unsigned int dwarf_regnum = DWARF_FRAME_REGNUM (STACK_POINTER_REGNUM);
546   return GEN_INT (DWARF2_FRAME_REG_OUT (dwarf_regnum, 1));
547 }
548
549 /* Return a pointer to a copy of the section string name S with all
550    attributes stripped off, and an asterisk prepended (for assemble_name).  */
551
552 static inline char *
553 stripattributes (const char *s)
554 {
555   char *stripped = XNEWVEC (char, strlen (s) + 2);
556   char *p = stripped;
557
558   *p++ = '*';
559
560   while (*s && *s != ',')
561     *p++ = *s++;
562
563   *p = '\0';
564   return stripped;
565 }
566
567 /* MEM is a memory reference for the register size table, each element of
568    which has mode MODE.  Initialize column C as a return address column.  */
569
570 static void
571 init_return_column_size (enum machine_mode mode, rtx mem, unsigned int c)
572 {
573   HOST_WIDE_INT offset = c * GET_MODE_SIZE (mode);
574   HOST_WIDE_INT size = GET_MODE_SIZE (Pmode);
575   emit_move_insn (adjust_address (mem, mode, offset), GEN_INT (size));
576 }
577
578 /* Divide OFF by DWARF_CIE_DATA_ALIGNMENT, asserting no remainder.  */
579
580 static inline HOST_WIDE_INT
581 div_data_align (HOST_WIDE_INT off)
582 {
583   HOST_WIDE_INT r = off / DWARF_CIE_DATA_ALIGNMENT;
584   gcc_assert (r * DWARF_CIE_DATA_ALIGNMENT == off);
585   return r;
586 }
587
588 /* Return true if we need a signed version of a given opcode
589    (e.g. DW_CFA_offset_extended_sf vs DW_CFA_offset_extended).  */
590
591 static inline bool
592 need_data_align_sf_opcode (HOST_WIDE_INT off)
593 {
594   return DWARF_CIE_DATA_ALIGNMENT < 0 ? off > 0 : off < 0;
595 }
596
597 /* Generate code to initialize the register size table.  */
598
599 void
600 expand_builtin_init_dwarf_reg_sizes (tree address)
601 {
602   unsigned int i;
603   enum machine_mode mode = TYPE_MODE (char_type_node);
604   rtx addr = expand_normal (address);
605   rtx mem = gen_rtx_MEM (BLKmode, addr);
606   bool wrote_return_column = false;
607
608   for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
609     {
610       int rnum = DWARF2_FRAME_REG_OUT (DWARF_FRAME_REGNUM (i), 1);
611
612       if (rnum < DWARF_FRAME_REGISTERS)
613         {
614           HOST_WIDE_INT offset = rnum * GET_MODE_SIZE (mode);
615           enum machine_mode save_mode = reg_raw_mode[i];
616           HOST_WIDE_INT size;
617
618           if (HARD_REGNO_CALL_PART_CLOBBERED (i, save_mode))
619             save_mode = choose_hard_reg_mode (i, 1, true);
620           if (DWARF_FRAME_REGNUM (i) == DWARF_FRAME_RETURN_COLUMN)
621             {
622               if (save_mode == VOIDmode)
623                 continue;
624               wrote_return_column = true;
625             }
626           size = GET_MODE_SIZE (save_mode);
627           if (offset < 0)
628             continue;
629
630           emit_move_insn (adjust_address (mem, mode, offset),
631                           gen_int_mode (size, mode));
632         }
633     }
634
635   if (!wrote_return_column)
636     init_return_column_size (mode, mem, DWARF_FRAME_RETURN_COLUMN);
637
638 #ifdef DWARF_ALT_FRAME_RETURN_COLUMN
639   init_return_column_size (mode, mem, DWARF_ALT_FRAME_RETURN_COLUMN);
640 #endif
641
642   targetm.init_dwarf_reg_sizes_extra (address);
643 }
644
645 /* Convert a DWARF call frame info. operation to its string name */
646
647 static const char *
648 dwarf_cfi_name (unsigned int cfi_opc)
649 {
650   switch (cfi_opc)
651     {
652     case DW_CFA_advance_loc:
653       return "DW_CFA_advance_loc";
654     case DW_CFA_offset:
655       return "DW_CFA_offset";
656     case DW_CFA_restore:
657       return "DW_CFA_restore";
658     case DW_CFA_nop:
659       return "DW_CFA_nop";
660     case DW_CFA_set_loc:
661       return "DW_CFA_set_loc";
662     case DW_CFA_advance_loc1:
663       return "DW_CFA_advance_loc1";
664     case DW_CFA_advance_loc2:
665       return "DW_CFA_advance_loc2";
666     case DW_CFA_advance_loc4:
667       return "DW_CFA_advance_loc4";
668     case DW_CFA_offset_extended:
669       return "DW_CFA_offset_extended";
670     case DW_CFA_restore_extended:
671       return "DW_CFA_restore_extended";
672     case DW_CFA_undefined:
673       return "DW_CFA_undefined";
674     case DW_CFA_same_value:
675       return "DW_CFA_same_value";
676     case DW_CFA_register:
677       return "DW_CFA_register";
678     case DW_CFA_remember_state:
679       return "DW_CFA_remember_state";
680     case DW_CFA_restore_state:
681       return "DW_CFA_restore_state";
682     case DW_CFA_def_cfa:
683       return "DW_CFA_def_cfa";
684     case DW_CFA_def_cfa_register:
685       return "DW_CFA_def_cfa_register";
686     case DW_CFA_def_cfa_offset:
687       return "DW_CFA_def_cfa_offset";
688
689     /* DWARF 3 */
690     case DW_CFA_def_cfa_expression:
691       return "DW_CFA_def_cfa_expression";
692     case DW_CFA_expression:
693       return "DW_CFA_expression";
694     case DW_CFA_offset_extended_sf:
695       return "DW_CFA_offset_extended_sf";
696     case DW_CFA_def_cfa_sf:
697       return "DW_CFA_def_cfa_sf";
698     case DW_CFA_def_cfa_offset_sf:
699       return "DW_CFA_def_cfa_offset_sf";
700
701     /* SGI/MIPS specific */
702     case DW_CFA_MIPS_advance_loc8:
703       return "DW_CFA_MIPS_advance_loc8";
704
705     /* GNU extensions */
706     case DW_CFA_GNU_window_save:
707       return "DW_CFA_GNU_window_save";
708     case DW_CFA_GNU_args_size:
709       return "DW_CFA_GNU_args_size";
710     case DW_CFA_GNU_negative_offset_extended:
711       return "DW_CFA_GNU_negative_offset_extended";
712
713     default:
714       return "DW_CFA_<unknown>";
715     }
716 }
717
718 /* Return a pointer to a newly allocated Call Frame Instruction.  */
719
720 static inline dw_cfi_ref
721 new_cfi (void)
722 {
723   dw_cfi_ref cfi = GGC_NEW (dw_cfi_node);
724
725   cfi->dw_cfi_next = NULL;
726   cfi->dw_cfi_oprnd1.dw_cfi_reg_num = 0;
727   cfi->dw_cfi_oprnd2.dw_cfi_reg_num = 0;
728
729   return cfi;
730 }
731
732 /* Add a Call Frame Instruction to list of instructions.  */
733
734 static inline void
735 add_cfi (dw_cfi_ref *list_head, dw_cfi_ref cfi)
736 {
737   dw_cfi_ref *p;
738   dw_fde_ref fde = current_fde ();
739
740   /* When DRAP is used, CFA is defined with an expression.  Redefine
741      CFA may lead to a different CFA value.   */
742   /* ??? Of course, this heuristic fails when we're annotating epilogues,
743      because of course we'll always want to redefine the CFA back to the
744      stack pointer on the way out.  Where should we move this check?  */
745   if (0 && fde && fde->drap_reg != INVALID_REGNUM)
746     switch (cfi->dw_cfi_opc)
747       {
748         case DW_CFA_def_cfa_register:
749         case DW_CFA_def_cfa_offset:
750         case DW_CFA_def_cfa_offset_sf:
751         case DW_CFA_def_cfa:
752         case DW_CFA_def_cfa_sf:
753           gcc_unreachable ();
754
755         default:
756           break;
757       }
758
759   /* Find the end of the chain.  */
760   for (p = list_head; (*p) != NULL; p = &(*p)->dw_cfi_next)
761     ;
762
763   *p = cfi;
764 }
765
766 /* Generate a new label for the CFI info to refer to.  FORCE is true
767    if a label needs to be output even when using .cfi_* directives.  */
768
769 char *
770 dwarf2out_cfi_label (bool force)
771 {
772   static char label[20];
773
774   if (!force && dwarf2out_do_cfi_asm ())
775     {
776       /* In this case, we will be emitting the asm directive instead of
777          the label, so just return a placeholder to keep the rest of the
778          interfaces happy.  */
779       strcpy (label, "<do not output>");
780     }
781   else
782     {
783       ASM_GENERATE_INTERNAL_LABEL (label, "LCFI", dwarf2out_cfi_label_num++);
784       ASM_OUTPUT_LABEL (asm_out_file, label);
785     }
786
787   return label;
788 }
789
790 /* True if remember_state should be emitted before following CFI directive.  */
791 static bool emit_cfa_remember;
792
793 /* Add CFI to the current fde at the PC value indicated by LABEL if specified,
794    or to the CIE if LABEL is NULL.  */
795
796 static void
797 add_fde_cfi (const char *label, dw_cfi_ref cfi)
798 {
799   dw_cfi_ref *list_head;
800
801   if (emit_cfa_remember)
802     {
803       dw_cfi_ref cfi_remember;
804
805       /* Emit the state save.  */
806       emit_cfa_remember = false;
807       cfi_remember = new_cfi ();
808       cfi_remember->dw_cfi_opc = DW_CFA_remember_state;
809       add_fde_cfi (label, cfi_remember);
810     }
811
812   list_head = &cie_cfi_head;
813
814   if (dwarf2out_do_cfi_asm ())
815     {
816       if (label)
817         {
818           dw_fde_ref fde = current_fde ();
819
820           gcc_assert (fde != NULL);
821
822           /* We still have to add the cfi to the list so that lookup_cfa
823              works later on.  When -g2 and above we even need to force
824              emitting of CFI labels and add to list a DW_CFA_set_loc for
825              convert_cfa_to_fb_loc_list purposes.  If we're generating
826              DWARF3 output we use DW_OP_call_frame_cfa and so don't use
827              convert_cfa_to_fb_loc_list.  */
828           if (dwarf_version == 2
829               && debug_info_level > DINFO_LEVEL_TERSE
830               && (write_symbols == DWARF2_DEBUG
831                   || write_symbols == VMS_AND_DWARF2_DEBUG))
832             {
833               switch (cfi->dw_cfi_opc)
834                 {
835                 case DW_CFA_def_cfa_offset:
836                 case DW_CFA_def_cfa_offset_sf:
837                 case DW_CFA_def_cfa_register:
838                 case DW_CFA_def_cfa:
839                 case DW_CFA_def_cfa_sf:
840                 case DW_CFA_def_cfa_expression:
841                 case DW_CFA_restore_state:
842                   if (*label == 0 || strcmp (label, "<do not output>") == 0)
843                     label = dwarf2out_cfi_label (true);
844
845                   if (fde->dw_fde_current_label == NULL
846                       || strcmp (label, fde->dw_fde_current_label) != 0)
847                     {
848                       dw_cfi_ref xcfi;
849
850                       label = xstrdup (label);
851
852                       /* Set the location counter to the new label.  */
853                       xcfi = new_cfi ();
854                       /* It doesn't metter whether DW_CFA_set_loc
855                          or DW_CFA_advance_loc4 is added here, those aren't
856                          emitted into assembly, only looked up by
857                          convert_cfa_to_fb_loc_list.  */
858                       xcfi->dw_cfi_opc = DW_CFA_set_loc;
859                       xcfi->dw_cfi_oprnd1.dw_cfi_addr = label;
860                       add_cfi (&fde->dw_fde_cfi, xcfi);
861                       fde->dw_fde_current_label = label;
862                     }
863                   break;
864                 default:
865                   break;
866                 }
867             }
868
869           output_cfi_directive (cfi);
870
871           list_head = &fde->dw_fde_cfi;
872         }
873       /* ??? If this is a CFI for the CIE, we don't emit.  This
874          assumes that the standard CIE contents that the assembler
875          uses matches the standard CIE contents that the compiler
876          uses.  This is probably a bad assumption.  I'm not quite
877          sure how to address this for now.  */
878     }
879   else if (label)
880     {
881       dw_fde_ref fde = current_fde ();
882
883       gcc_assert (fde != NULL);
884
885       if (*label == 0)
886         label = dwarf2out_cfi_label (false);
887
888       if (fde->dw_fde_current_label == NULL
889           || strcmp (label, fde->dw_fde_current_label) != 0)
890         {
891           dw_cfi_ref xcfi;
892
893           label = xstrdup (label);
894
895           /* Set the location counter to the new label.  */
896           xcfi = new_cfi ();
897           /* If we have a current label, advance from there, otherwise
898              set the location directly using set_loc.  */
899           xcfi->dw_cfi_opc = fde->dw_fde_current_label
900                              ? DW_CFA_advance_loc4
901                              : DW_CFA_set_loc;
902           xcfi->dw_cfi_oprnd1.dw_cfi_addr = label;
903           add_cfi (&fde->dw_fde_cfi, xcfi);
904
905           fde->dw_fde_current_label = label;
906         }
907
908       list_head = &fde->dw_fde_cfi;
909     }
910
911   add_cfi (list_head, cfi);
912 }
913
914 /* Subroutine of lookup_cfa.  */
915
916 static void
917 lookup_cfa_1 (dw_cfi_ref cfi, dw_cfa_location *loc, dw_cfa_location *remember)
918 {
919   switch (cfi->dw_cfi_opc)
920     {
921     case DW_CFA_def_cfa_offset:
922     case DW_CFA_def_cfa_offset_sf:
923       loc->offset = cfi->dw_cfi_oprnd1.dw_cfi_offset;
924       break;
925     case DW_CFA_def_cfa_register:
926       loc->reg = cfi->dw_cfi_oprnd1.dw_cfi_reg_num;
927       break;
928     case DW_CFA_def_cfa:
929     case DW_CFA_def_cfa_sf:
930       loc->reg = cfi->dw_cfi_oprnd1.dw_cfi_reg_num;
931       loc->offset = cfi->dw_cfi_oprnd2.dw_cfi_offset;
932       break;
933     case DW_CFA_def_cfa_expression:
934       get_cfa_from_loc_descr (loc, cfi->dw_cfi_oprnd1.dw_cfi_loc);
935       break;
936
937     case DW_CFA_remember_state:
938       gcc_assert (!remember->in_use);
939       *remember = *loc;
940       remember->in_use = 1;
941       break;
942     case DW_CFA_restore_state:
943       gcc_assert (remember->in_use);
944       *loc = *remember;
945       remember->in_use = 0;
946       break;
947
948     default:
949       break;
950     }
951 }
952
953 /* Find the previous value for the CFA.  */
954
955 static void
956 lookup_cfa (dw_cfa_location *loc)
957 {
958   dw_cfi_ref cfi;
959   dw_fde_ref fde;
960   dw_cfa_location remember;
961
962   memset (loc, 0, sizeof (*loc));
963   loc->reg = INVALID_REGNUM;
964   remember = *loc;
965
966   for (cfi = cie_cfi_head; cfi; cfi = cfi->dw_cfi_next)
967     lookup_cfa_1 (cfi, loc, &remember);
968
969   fde = current_fde ();
970   if (fde)
971     for (cfi = fde->dw_fde_cfi; cfi; cfi = cfi->dw_cfi_next)
972       lookup_cfa_1 (cfi, loc, &remember);
973 }
974
975 /* The current rule for calculating the DWARF2 canonical frame address.  */
976 static dw_cfa_location cfa;
977
978 /* The register used for saving registers to the stack, and its offset
979    from the CFA.  */
980 static dw_cfa_location cfa_store;
981
982 /* The current save location around an epilogue.  */
983 static dw_cfa_location cfa_remember;
984
985 /* The running total of the size of arguments pushed onto the stack.  */
986 static HOST_WIDE_INT args_size;
987
988 /* The last args_size we actually output.  */
989 static HOST_WIDE_INT old_args_size;
990
991 /* Entry point to update the canonical frame address (CFA).
992    LABEL is passed to add_fde_cfi.  The value of CFA is now to be
993    calculated from REG+OFFSET.  */
994
995 void
996 dwarf2out_def_cfa (const char *label, unsigned int reg, HOST_WIDE_INT offset)
997 {
998   dw_cfa_location loc;
999   loc.indirect = 0;
1000   loc.base_offset = 0;
1001   loc.reg = reg;
1002   loc.offset = offset;
1003   def_cfa_1 (label, &loc);
1004 }
1005
1006 /* Determine if two dw_cfa_location structures define the same data.  */
1007
1008 static bool
1009 cfa_equal_p (const dw_cfa_location *loc1, const dw_cfa_location *loc2)
1010 {
1011   return (loc1->reg == loc2->reg
1012           && loc1->offset == loc2->offset
1013           && loc1->indirect == loc2->indirect
1014           && (loc1->indirect == 0
1015               || loc1->base_offset == loc2->base_offset));
1016 }
1017
1018 /* This routine does the actual work.  The CFA is now calculated from
1019    the dw_cfa_location structure.  */
1020
1021 static void
1022 def_cfa_1 (const char *label, dw_cfa_location *loc_p)
1023 {
1024   dw_cfi_ref cfi;
1025   dw_cfa_location old_cfa, loc;
1026
1027   cfa = *loc_p;
1028   loc = *loc_p;
1029
1030   if (cfa_store.reg == loc.reg && loc.indirect == 0)
1031     cfa_store.offset = loc.offset;
1032
1033   loc.reg = DWARF_FRAME_REGNUM (loc.reg);
1034   lookup_cfa (&old_cfa);
1035
1036   /* If nothing changed, no need to issue any call frame instructions.  */
1037   if (cfa_equal_p (&loc, &old_cfa))
1038     return;
1039
1040   cfi = new_cfi ();
1041
1042   if (loc.reg == old_cfa.reg && !loc.indirect)
1043     {
1044       /* Construct a "DW_CFA_def_cfa_offset <offset>" instruction, indicating
1045          the CFA register did not change but the offset did.  The data
1046          factoring for DW_CFA_def_cfa_offset_sf happens in output_cfi, or
1047          in the assembler via the .cfi_def_cfa_offset directive.  */
1048       if (loc.offset < 0)
1049         cfi->dw_cfi_opc = DW_CFA_def_cfa_offset_sf;
1050       else
1051         cfi->dw_cfi_opc = DW_CFA_def_cfa_offset;
1052       cfi->dw_cfi_oprnd1.dw_cfi_offset = loc.offset;
1053     }
1054
1055 #ifndef MIPS_DEBUGGING_INFO  /* SGI dbx thinks this means no offset.  */
1056   else if (loc.offset == old_cfa.offset
1057            && old_cfa.reg != INVALID_REGNUM
1058            && !loc.indirect)
1059     {
1060       /* Construct a "DW_CFA_def_cfa_register <register>" instruction,
1061          indicating the CFA register has changed to <register> but the
1062          offset has not changed.  */
1063       cfi->dw_cfi_opc = DW_CFA_def_cfa_register;
1064       cfi->dw_cfi_oprnd1.dw_cfi_reg_num = loc.reg;
1065     }
1066 #endif
1067
1068   else if (loc.indirect == 0)
1069     {
1070       /* Construct a "DW_CFA_def_cfa <register> <offset>" instruction,
1071          indicating the CFA register has changed to <register> with
1072          the specified offset.  The data factoring for DW_CFA_def_cfa_sf
1073          happens in output_cfi, or in the assembler via the .cfi_def_cfa
1074          directive.  */
1075       if (loc.offset < 0)
1076         cfi->dw_cfi_opc = DW_CFA_def_cfa_sf;
1077       else
1078         cfi->dw_cfi_opc = DW_CFA_def_cfa;
1079       cfi->dw_cfi_oprnd1.dw_cfi_reg_num = loc.reg;
1080       cfi->dw_cfi_oprnd2.dw_cfi_offset = loc.offset;
1081     }
1082   else
1083     {
1084       /* Construct a DW_CFA_def_cfa_expression instruction to
1085          calculate the CFA using a full location expression since no
1086          register-offset pair is available.  */
1087       struct dw_loc_descr_struct *loc_list;
1088
1089       cfi->dw_cfi_opc = DW_CFA_def_cfa_expression;
1090       loc_list = build_cfa_loc (&loc, 0);
1091       cfi->dw_cfi_oprnd1.dw_cfi_loc = loc_list;
1092     }
1093
1094   add_fde_cfi (label, cfi);
1095 }
1096
1097 /* Add the CFI for saving a register.  REG is the CFA column number.
1098    LABEL is passed to add_fde_cfi.
1099    If SREG is -1, the register is saved at OFFSET from the CFA;
1100    otherwise it is saved in SREG.  */
1101
1102 static void
1103 reg_save (const char *label, unsigned int reg, unsigned int sreg, HOST_WIDE_INT offset)
1104 {
1105   dw_cfi_ref cfi = new_cfi ();
1106   dw_fde_ref fde = current_fde ();
1107
1108   cfi->dw_cfi_oprnd1.dw_cfi_reg_num = reg;
1109
1110   /* When stack is aligned, store REG using DW_CFA_expression with
1111      FP.  */
1112   if (fde
1113       && fde->stack_realign
1114       && sreg == INVALID_REGNUM)
1115     {
1116       cfi->dw_cfi_opc = DW_CFA_expression;
1117       cfi->dw_cfi_oprnd2.dw_cfi_reg_num = reg;
1118       cfi->dw_cfi_oprnd1.dw_cfi_loc
1119         = build_cfa_aligned_loc (offset, fde->stack_realignment);
1120     }
1121   else if (sreg == INVALID_REGNUM)
1122     {
1123       if (need_data_align_sf_opcode (offset))
1124         cfi->dw_cfi_opc = DW_CFA_offset_extended_sf;
1125       else if (reg & ~0x3f)
1126         cfi->dw_cfi_opc = DW_CFA_offset_extended;
1127       else
1128         cfi->dw_cfi_opc = DW_CFA_offset;
1129       cfi->dw_cfi_oprnd2.dw_cfi_offset = offset;
1130     }
1131   else if (sreg == reg)
1132     cfi->dw_cfi_opc = DW_CFA_same_value;
1133   else
1134     {
1135       cfi->dw_cfi_opc = DW_CFA_register;
1136       cfi->dw_cfi_oprnd2.dw_cfi_reg_num = sreg;
1137     }
1138
1139   add_fde_cfi (label, cfi);
1140 }
1141
1142 /* Add the CFI for saving a register window.  LABEL is passed to reg_save.
1143    This CFI tells the unwinder that it needs to restore the window registers
1144    from the previous frame's window save area.
1145
1146    ??? Perhaps we should note in the CIE where windows are saved (instead of
1147    assuming 0(cfa)) and what registers are in the window.  */
1148
1149 void
1150 dwarf2out_window_save (const char *label)
1151 {
1152   dw_cfi_ref cfi = new_cfi ();
1153
1154   cfi->dw_cfi_opc = DW_CFA_GNU_window_save;
1155   add_fde_cfi (label, cfi);
1156 }
1157
1158 /* Entry point for saving a register to the stack.  REG is the GCC register
1159    number.  LABEL and OFFSET are passed to reg_save.  */
1160
1161 void
1162 dwarf2out_reg_save (const char *label, unsigned int reg, HOST_WIDE_INT offset)
1163 {
1164   reg_save (label, DWARF_FRAME_REGNUM (reg), INVALID_REGNUM, offset);
1165 }
1166
1167 /* Entry point for saving the return address in the stack.
1168    LABEL and OFFSET are passed to reg_save.  */
1169
1170 void
1171 dwarf2out_return_save (const char *label, HOST_WIDE_INT offset)
1172 {
1173   reg_save (label, DWARF_FRAME_RETURN_COLUMN, INVALID_REGNUM, offset);
1174 }
1175
1176 /* Entry point for saving the return address in a register.
1177    LABEL and SREG are passed to reg_save.  */
1178
1179 void
1180 dwarf2out_return_reg (const char *label, unsigned int sreg)
1181 {
1182   reg_save (label, DWARF_FRAME_RETURN_COLUMN, DWARF_FRAME_REGNUM (sreg), 0);
1183 }
1184
1185 #ifdef DWARF2_UNWIND_INFO
1186 /* Record the initial position of the return address.  RTL is
1187    INCOMING_RETURN_ADDR_RTX.  */
1188
1189 static void
1190 initial_return_save (rtx rtl)
1191 {
1192   unsigned int reg = INVALID_REGNUM;
1193   HOST_WIDE_INT offset = 0;
1194
1195   switch (GET_CODE (rtl))
1196     {
1197     case REG:
1198       /* RA is in a register.  */
1199       reg = DWARF_FRAME_REGNUM (REGNO (rtl));
1200       break;
1201
1202     case MEM:
1203       /* RA is on the stack.  */
1204       rtl = XEXP (rtl, 0);
1205       switch (GET_CODE (rtl))
1206         {
1207         case REG:
1208           gcc_assert (REGNO (rtl) == STACK_POINTER_REGNUM);
1209           offset = 0;
1210           break;
1211
1212         case PLUS:
1213           gcc_assert (REGNO (XEXP (rtl, 0)) == STACK_POINTER_REGNUM);
1214           offset = INTVAL (XEXP (rtl, 1));
1215           break;
1216
1217         case MINUS:
1218           gcc_assert (REGNO (XEXP (rtl, 0)) == STACK_POINTER_REGNUM);
1219           offset = -INTVAL (XEXP (rtl, 1));
1220           break;
1221
1222         default:
1223           gcc_unreachable ();
1224         }
1225
1226       break;
1227
1228     case PLUS:
1229       /* The return address is at some offset from any value we can
1230          actually load.  For instance, on the SPARC it is in %i7+8. Just
1231          ignore the offset for now; it doesn't matter for unwinding frames.  */
1232       gcc_assert (CONST_INT_P (XEXP (rtl, 1)));
1233       initial_return_save (XEXP (rtl, 0));
1234       return;
1235
1236     default:
1237       gcc_unreachable ();
1238     }
1239
1240   if (reg != DWARF_FRAME_RETURN_COLUMN)
1241     reg_save (NULL, DWARF_FRAME_RETURN_COLUMN, reg, offset - cfa.offset);
1242 }
1243 #endif
1244
1245 /* Given a SET, calculate the amount of stack adjustment it
1246    contains.  */
1247
1248 static HOST_WIDE_INT
1249 stack_adjust_offset (const_rtx pattern, HOST_WIDE_INT cur_args_size,
1250                      HOST_WIDE_INT cur_offset)
1251 {
1252   const_rtx src = SET_SRC (pattern);
1253   const_rtx dest = SET_DEST (pattern);
1254   HOST_WIDE_INT offset = 0;
1255   enum rtx_code code;
1256
1257   if (dest == stack_pointer_rtx)
1258     {
1259       code = GET_CODE (src);
1260
1261       /* Assume (set (reg sp) (reg whatever)) sets args_size
1262          level to 0.  */
1263       if (code == REG && src != stack_pointer_rtx)
1264         {
1265           offset = -cur_args_size;
1266 #ifndef STACK_GROWS_DOWNWARD
1267           offset = -offset;
1268 #endif
1269           return offset - cur_offset;
1270         }
1271
1272       if (! (code == PLUS || code == MINUS)
1273           || XEXP (src, 0) != stack_pointer_rtx
1274           || !CONST_INT_P (XEXP (src, 1)))
1275         return 0;
1276
1277       /* (set (reg sp) (plus (reg sp) (const_int))) */
1278       offset = INTVAL (XEXP (src, 1));
1279       if (code == PLUS)
1280         offset = -offset;
1281       return offset;
1282     }
1283
1284   if (MEM_P (src) && !MEM_P (dest))
1285     dest = src;
1286   if (MEM_P (dest))
1287     {
1288       /* (set (mem (pre_dec (reg sp))) (foo)) */
1289       src = XEXP (dest, 0);
1290       code = GET_CODE (src);
1291
1292       switch (code)
1293         {
1294         case PRE_MODIFY:
1295         case POST_MODIFY:
1296           if (XEXP (src, 0) == stack_pointer_rtx)
1297             {
1298               rtx val = XEXP (XEXP (src, 1), 1);
1299               /* We handle only adjustments by constant amount.  */
1300               gcc_assert (GET_CODE (XEXP (src, 1)) == PLUS
1301                           && CONST_INT_P (val));
1302               offset = -INTVAL (val);
1303               break;
1304             }
1305           return 0;
1306
1307         case PRE_DEC:
1308         case POST_DEC:
1309           if (XEXP (src, 0) == stack_pointer_rtx)
1310             {
1311               offset = GET_MODE_SIZE (GET_MODE (dest));
1312               break;
1313             }
1314           return 0;
1315
1316         case PRE_INC:
1317         case POST_INC:
1318           if (XEXP (src, 0) == stack_pointer_rtx)
1319             {
1320               offset = -GET_MODE_SIZE (GET_MODE (dest));
1321               break;
1322             }
1323           return 0;
1324
1325         default:
1326           return 0;
1327         }
1328     }
1329   else
1330     return 0;
1331
1332   return offset;
1333 }
1334
1335 /* Precomputed args_size for CODE_LABELs and BARRIERs preceeding them,
1336    indexed by INSN_UID.  */
1337
1338 static HOST_WIDE_INT *barrier_args_size;
1339
1340 /* Helper function for compute_barrier_args_size.  Handle one insn.  */
1341
1342 static HOST_WIDE_INT
1343 compute_barrier_args_size_1 (rtx insn, HOST_WIDE_INT cur_args_size,
1344                              VEC (rtx, heap) **next)
1345 {
1346   HOST_WIDE_INT offset = 0;
1347   int i;
1348
1349   if (! RTX_FRAME_RELATED_P (insn))
1350     {
1351       if (prologue_epilogue_contains (insn))
1352         /* Nothing */;
1353       else if (GET_CODE (PATTERN (insn)) == SET)
1354         offset = stack_adjust_offset (PATTERN (insn), cur_args_size, 0);
1355       else if (GET_CODE (PATTERN (insn)) == PARALLEL
1356                || GET_CODE (PATTERN (insn)) == SEQUENCE)
1357         {
1358           /* There may be stack adjustments inside compound insns.  Search
1359              for them.  */
1360           for (i = XVECLEN (PATTERN (insn), 0) - 1; i >= 0; i--)
1361             if (GET_CODE (XVECEXP (PATTERN (insn), 0, i)) == SET)
1362               offset += stack_adjust_offset (XVECEXP (PATTERN (insn), 0, i),
1363                                              cur_args_size, offset);
1364         }
1365     }
1366   else
1367     {
1368       rtx expr = find_reg_note (insn, REG_FRAME_RELATED_EXPR, NULL_RTX);
1369
1370       if (expr)
1371         {
1372           expr = XEXP (expr, 0);
1373           if (GET_CODE (expr) == PARALLEL
1374               || GET_CODE (expr) == SEQUENCE)
1375             for (i = 1; i < XVECLEN (expr, 0); i++)
1376               {
1377                 rtx elem = XVECEXP (expr, 0, i);
1378
1379                 if (GET_CODE (elem) == SET && !RTX_FRAME_RELATED_P (elem))
1380                   offset += stack_adjust_offset (elem, cur_args_size, offset);
1381               }
1382         }
1383     }
1384
1385 #ifndef STACK_GROWS_DOWNWARD
1386   offset = -offset;
1387 #endif
1388
1389   cur_args_size += offset;
1390   if (cur_args_size < 0)
1391     cur_args_size = 0;
1392
1393   if (JUMP_P (insn))
1394     {
1395       rtx dest = JUMP_LABEL (insn);
1396
1397       if (dest)
1398         {
1399           if (barrier_args_size [INSN_UID (dest)] < 0)
1400             {
1401               barrier_args_size [INSN_UID (dest)] = cur_args_size;
1402               VEC_safe_push (rtx, heap, *next, dest);
1403             }
1404         }
1405     }
1406
1407   return cur_args_size;
1408 }
1409
1410 /* Walk the whole function and compute args_size on BARRIERs.  */
1411
1412 static void
1413 compute_barrier_args_size (void)
1414 {
1415   int max_uid = get_max_uid (), i;
1416   rtx insn;
1417   VEC (rtx, heap) *worklist, *next, *tmp;
1418
1419   barrier_args_size = XNEWVEC (HOST_WIDE_INT, max_uid);
1420   for (i = 0; i < max_uid; i++)
1421     barrier_args_size[i] = -1;
1422
1423   worklist = VEC_alloc (rtx, heap, 20);
1424   next = VEC_alloc (rtx, heap, 20);
1425   insn = get_insns ();
1426   barrier_args_size[INSN_UID (insn)] = 0;
1427   VEC_quick_push (rtx, worklist, insn);
1428   for (;;)
1429     {
1430       while (!VEC_empty (rtx, worklist))
1431         {
1432           rtx prev, body, first_insn;
1433           HOST_WIDE_INT cur_args_size;
1434
1435           first_insn = insn = VEC_pop (rtx, worklist);
1436           cur_args_size = barrier_args_size[INSN_UID (insn)];
1437           prev = prev_nonnote_insn (insn);
1438           if (prev && BARRIER_P (prev))
1439             barrier_args_size[INSN_UID (prev)] = cur_args_size;
1440
1441           for (; insn; insn = NEXT_INSN (insn))
1442             {
1443               if (INSN_DELETED_P (insn) || NOTE_P (insn))
1444                 continue;
1445               if (BARRIER_P (insn))
1446                 break;
1447
1448               if (LABEL_P (insn))
1449                 {
1450                   if (insn == first_insn)
1451                     continue;
1452                   else if (barrier_args_size[INSN_UID (insn)] < 0)
1453                     {
1454                       barrier_args_size[INSN_UID (insn)] = cur_args_size;
1455                       continue;
1456                     }
1457                   else
1458                     {
1459                       /* The insns starting with this label have been
1460                          already scanned or are in the worklist.  */
1461                       break;
1462                     }
1463                 }
1464
1465               body = PATTERN (insn);
1466               if (GET_CODE (body) == SEQUENCE)
1467                 {
1468                   HOST_WIDE_INT dest_args_size = cur_args_size;
1469                   for (i = 1; i < XVECLEN (body, 0); i++)
1470                     if (INSN_ANNULLED_BRANCH_P (XVECEXP (body, 0, 0))
1471                         && INSN_FROM_TARGET_P (XVECEXP (body, 0, i)))
1472                       dest_args_size
1473                         = compute_barrier_args_size_1 (XVECEXP (body, 0, i),
1474                                                        dest_args_size, &next);
1475                     else
1476                       cur_args_size
1477                         = compute_barrier_args_size_1 (XVECEXP (body, 0, i),
1478                                                        cur_args_size, &next);
1479
1480                   if (INSN_ANNULLED_BRANCH_P (XVECEXP (body, 0, 0)))
1481                     compute_barrier_args_size_1 (XVECEXP (body, 0, 0),
1482                                                  dest_args_size, &next);
1483                   else
1484                     cur_args_size
1485                       = compute_barrier_args_size_1 (XVECEXP (body, 0, 0),
1486                                                      cur_args_size, &next);
1487                 }
1488               else
1489                 cur_args_size
1490                   = compute_barrier_args_size_1 (insn, cur_args_size, &next);
1491             }
1492         }
1493
1494       if (VEC_empty (rtx, next))
1495         break;
1496
1497       /* Swap WORKLIST with NEXT and truncate NEXT for next iteration.  */
1498       tmp = next;
1499       next = worklist;
1500       worklist = tmp;
1501       VEC_truncate (rtx, next, 0);
1502     }
1503
1504   VEC_free (rtx, heap, worklist);
1505   VEC_free (rtx, heap, next);
1506 }
1507
1508 /* Add a CFI to update the running total of the size of arguments
1509    pushed onto the stack.  */
1510
1511 static void
1512 dwarf2out_args_size (const char *label, HOST_WIDE_INT size)
1513 {
1514   dw_cfi_ref cfi;
1515
1516   if (size == old_args_size)
1517     return;
1518
1519   old_args_size = size;
1520
1521   cfi = new_cfi ();
1522   cfi->dw_cfi_opc = DW_CFA_GNU_args_size;
1523   cfi->dw_cfi_oprnd1.dw_cfi_offset = size;
1524   add_fde_cfi (label, cfi);
1525 }
1526
1527 /* Record a stack adjustment of OFFSET bytes.  */
1528
1529 static void
1530 dwarf2out_stack_adjust (HOST_WIDE_INT offset, const char *label)
1531 {
1532   if (cfa.reg == STACK_POINTER_REGNUM)
1533     cfa.offset += offset;
1534
1535   if (cfa_store.reg == STACK_POINTER_REGNUM)
1536     cfa_store.offset += offset;
1537
1538   if (ACCUMULATE_OUTGOING_ARGS)
1539     return;
1540
1541 #ifndef STACK_GROWS_DOWNWARD
1542   offset = -offset;
1543 #endif
1544
1545   args_size += offset;
1546   if (args_size < 0)
1547     args_size = 0;
1548
1549   def_cfa_1 (label, &cfa);
1550   if (flag_asynchronous_unwind_tables)
1551     dwarf2out_args_size (label, args_size);
1552 }
1553
1554 /* Check INSN to see if it looks like a push or a stack adjustment, and
1555    make a note of it if it does.  EH uses this information to find out
1556    how much extra space it needs to pop off the stack.  */
1557
1558 static void
1559 dwarf2out_notice_stack_adjust (rtx insn, bool after_p)
1560 {
1561   HOST_WIDE_INT offset;
1562   const char *label;
1563   int i;
1564
1565   /* Don't handle epilogues at all.  Certainly it would be wrong to do so
1566      with this function.  Proper support would require all frame-related
1567      insns to be marked, and to be able to handle saving state around
1568      epilogues textually in the middle of the function.  */
1569   if (prologue_epilogue_contains (insn))
1570     return;
1571
1572   /* If INSN is an instruction from target of an annulled branch, the
1573      effects are for the target only and so current argument size
1574      shouldn't change at all.  */
1575   if (final_sequence
1576       && INSN_ANNULLED_BRANCH_P (XVECEXP (final_sequence, 0, 0))
1577       && INSN_FROM_TARGET_P (insn))
1578     return;
1579
1580   /* If only calls can throw, and we have a frame pointer,
1581      save up adjustments until we see the CALL_INSN.  */
1582   if (!flag_asynchronous_unwind_tables && cfa.reg != STACK_POINTER_REGNUM)
1583     {
1584       if (CALL_P (insn) && !after_p)
1585         {
1586           /* Extract the size of the args from the CALL rtx itself.  */
1587           insn = PATTERN (insn);
1588           if (GET_CODE (insn) == PARALLEL)
1589             insn = XVECEXP (insn, 0, 0);
1590           if (GET_CODE (insn) == SET)
1591             insn = SET_SRC (insn);
1592           gcc_assert (GET_CODE (insn) == CALL);
1593           dwarf2out_args_size ("", INTVAL (XEXP (insn, 1)));
1594         }
1595       return;
1596     }
1597
1598   if (CALL_P (insn) && !after_p)
1599     {
1600       if (!flag_asynchronous_unwind_tables)
1601         dwarf2out_args_size ("", args_size);
1602       return;
1603     }
1604   else if (BARRIER_P (insn))
1605     {
1606       /* Don't call compute_barrier_args_size () if the only
1607          BARRIER is at the end of function.  */
1608       if (barrier_args_size == NULL && next_nonnote_insn (insn))
1609         compute_barrier_args_size ();
1610       if (barrier_args_size == NULL)
1611         offset = 0;
1612       else
1613         {
1614           offset = barrier_args_size[INSN_UID (insn)];
1615           if (offset < 0)
1616             offset = 0;
1617         }
1618
1619       offset -= args_size;
1620 #ifndef STACK_GROWS_DOWNWARD
1621       offset = -offset;
1622 #endif
1623     }
1624   else if (GET_CODE (PATTERN (insn)) == SET)
1625     offset = stack_adjust_offset (PATTERN (insn), args_size, 0);
1626   else if (GET_CODE (PATTERN (insn)) == PARALLEL
1627            || GET_CODE (PATTERN (insn)) == SEQUENCE)
1628     {
1629       /* There may be stack adjustments inside compound insns.  Search
1630          for them.  */
1631       for (offset = 0, i = XVECLEN (PATTERN (insn), 0) - 1; i >= 0; i--)
1632         if (GET_CODE (XVECEXP (PATTERN (insn), 0, i)) == SET)
1633           offset += stack_adjust_offset (XVECEXP (PATTERN (insn), 0, i),
1634                                          args_size, offset);
1635     }
1636   else
1637     return;
1638
1639   if (offset == 0)
1640     return;
1641
1642   label = dwarf2out_cfi_label (false);
1643   dwarf2out_stack_adjust (offset, label);
1644 }
1645
1646 #endif
1647
1648 /* We delay emitting a register save until either (a) we reach the end
1649    of the prologue or (b) the register is clobbered.  This clusters
1650    register saves so that there are fewer pc advances.  */
1651
1652 struct GTY(()) queued_reg_save {
1653   struct queued_reg_save *next;
1654   rtx reg;
1655   HOST_WIDE_INT cfa_offset;
1656   rtx saved_reg;
1657 };
1658
1659 static GTY(()) struct queued_reg_save *queued_reg_saves;
1660
1661 /* The caller's ORIG_REG is saved in SAVED_IN_REG.  */
1662 struct GTY(()) reg_saved_in_data {
1663   rtx orig_reg;
1664   rtx saved_in_reg;
1665 };
1666
1667 /* A list of registers saved in other registers.
1668    The list intentionally has a small maximum capacity of 4; if your
1669    port needs more than that, you might consider implementing a
1670    more efficient data structure.  */
1671 static GTY(()) struct reg_saved_in_data regs_saved_in_regs[4];
1672 static GTY(()) size_t num_regs_saved_in_regs;
1673
1674 #if defined (DWARF2_DEBUGGING_INFO) || defined (DWARF2_UNWIND_INFO)
1675 static const char *last_reg_save_label;
1676
1677 /* Add an entry to QUEUED_REG_SAVES saying that REG is now saved at
1678    SREG, or if SREG is NULL then it is saved at OFFSET to the CFA.  */
1679
1680 static void
1681 queue_reg_save (const char *label, rtx reg, rtx sreg, HOST_WIDE_INT offset)
1682 {
1683   struct queued_reg_save *q;
1684
1685   /* Duplicates waste space, but it's also necessary to remove them
1686      for correctness, since the queue gets output in reverse
1687      order.  */
1688   for (q = queued_reg_saves; q != NULL; q = q->next)
1689     if (REGNO (q->reg) == REGNO (reg))
1690       break;
1691
1692   if (q == NULL)
1693     {
1694       q = GGC_NEW (struct queued_reg_save);
1695       q->next = queued_reg_saves;
1696       queued_reg_saves = q;
1697     }
1698
1699   q->reg = reg;
1700   q->cfa_offset = offset;
1701   q->saved_reg = sreg;
1702
1703   last_reg_save_label = label;
1704 }
1705
1706 /* Output all the entries in QUEUED_REG_SAVES.  */
1707
1708 static void
1709 flush_queued_reg_saves (void)
1710 {
1711   struct queued_reg_save *q;
1712
1713   for (q = queued_reg_saves; q; q = q->next)
1714     {
1715       size_t i;
1716       unsigned int reg, sreg;
1717
1718       for (i = 0; i < num_regs_saved_in_regs; i++)
1719         if (REGNO (regs_saved_in_regs[i].orig_reg) == REGNO (q->reg))
1720           break;
1721       if (q->saved_reg && i == num_regs_saved_in_regs)
1722         {
1723           gcc_assert (i != ARRAY_SIZE (regs_saved_in_regs));
1724           num_regs_saved_in_regs++;
1725         }
1726       if (i != num_regs_saved_in_regs)
1727         {
1728           regs_saved_in_regs[i].orig_reg = q->reg;
1729           regs_saved_in_regs[i].saved_in_reg = q->saved_reg;
1730         }
1731
1732       reg = DWARF_FRAME_REGNUM (REGNO (q->reg));
1733       if (q->saved_reg)
1734         sreg = DWARF_FRAME_REGNUM (REGNO (q->saved_reg));
1735       else
1736         sreg = INVALID_REGNUM;
1737       reg_save (last_reg_save_label, reg, sreg, q->cfa_offset);
1738     }
1739
1740   queued_reg_saves = NULL;
1741   last_reg_save_label = NULL;
1742 }
1743
1744 /* Does INSN clobber any register which QUEUED_REG_SAVES lists a saved
1745    location for?  Or, does it clobber a register which we've previously
1746    said that some other register is saved in, and for which we now
1747    have a new location for?  */
1748
1749 static bool
1750 clobbers_queued_reg_save (const_rtx insn)
1751 {
1752   struct queued_reg_save *q;
1753
1754   for (q = queued_reg_saves; q; q = q->next)
1755     {
1756       size_t i;
1757       if (modified_in_p (q->reg, insn))
1758         return true;
1759       for (i = 0; i < num_regs_saved_in_regs; i++)
1760         if (REGNO (q->reg) == REGNO (regs_saved_in_regs[i].orig_reg)
1761             && modified_in_p (regs_saved_in_regs[i].saved_in_reg, insn))
1762           return true;
1763     }
1764
1765   return false;
1766 }
1767
1768 /* Entry point for saving the first register into the second.  */
1769
1770 void
1771 dwarf2out_reg_save_reg (const char *label, rtx reg, rtx sreg)
1772 {
1773   size_t i;
1774   unsigned int regno, sregno;
1775
1776   for (i = 0; i < num_regs_saved_in_regs; i++)
1777     if (REGNO (regs_saved_in_regs[i].orig_reg) == REGNO (reg))
1778       break;
1779   if (i == num_regs_saved_in_regs)
1780     {
1781       gcc_assert (i != ARRAY_SIZE (regs_saved_in_regs));
1782       num_regs_saved_in_regs++;
1783     }
1784   regs_saved_in_regs[i].orig_reg = reg;
1785   regs_saved_in_regs[i].saved_in_reg = sreg;
1786
1787   regno = DWARF_FRAME_REGNUM (REGNO (reg));
1788   sregno = DWARF_FRAME_REGNUM (REGNO (sreg));
1789   reg_save (label, regno, sregno, 0);
1790 }
1791
1792 /* What register, if any, is currently saved in REG?  */
1793
1794 static rtx
1795 reg_saved_in (rtx reg)
1796 {
1797   unsigned int regn = REGNO (reg);
1798   size_t i;
1799   struct queued_reg_save *q;
1800
1801   for (q = queued_reg_saves; q; q = q->next)
1802     if (q->saved_reg && regn == REGNO (q->saved_reg))
1803       return q->reg;
1804
1805   for (i = 0; i < num_regs_saved_in_regs; i++)
1806     if (regs_saved_in_regs[i].saved_in_reg
1807         && regn == REGNO (regs_saved_in_regs[i].saved_in_reg))
1808       return regs_saved_in_regs[i].orig_reg;
1809
1810   return NULL_RTX;
1811 }
1812
1813
1814 /* A temporary register holding an integral value used in adjusting SP
1815    or setting up the store_reg.  The "offset" field holds the integer
1816    value, not an offset.  */
1817 static dw_cfa_location cfa_temp;
1818
1819 /* A subroutine of dwarf2out_frame_debug, process a REG_DEF_CFA note.  */
1820
1821 static void
1822 dwarf2out_frame_debug_def_cfa (rtx pat, const char *label)
1823 {
1824   memset (&cfa, 0, sizeof (cfa));
1825
1826   switch (GET_CODE (pat))
1827     {
1828     case PLUS:
1829       cfa.reg = REGNO (XEXP (pat, 0));
1830       cfa.offset = INTVAL (XEXP (pat, 1));
1831       break;
1832
1833     case REG:
1834       cfa.reg = REGNO (pat);
1835       break;
1836
1837     default:
1838       /* Recurse and define an expression.  */
1839       gcc_unreachable ();
1840     }
1841
1842   def_cfa_1 (label, &cfa);
1843 }
1844
1845 /* A subroutine of dwarf2out_frame_debug, process a REG_ADJUST_CFA note.  */
1846
1847 static void
1848 dwarf2out_frame_debug_adjust_cfa (rtx pat, const char *label)
1849 {
1850   rtx src, dest;
1851
1852   gcc_assert (GET_CODE (pat) == SET);
1853   dest = XEXP (pat, 0);
1854   src = XEXP (pat, 1);
1855
1856   switch (GET_CODE (src))
1857     {
1858     case PLUS:
1859       gcc_assert (REGNO (XEXP (src, 0)) == cfa.reg);
1860       cfa.offset -= INTVAL (XEXP (src, 1));
1861       break;
1862
1863     case REG:
1864         break;
1865
1866     default:
1867         gcc_unreachable ();
1868     }
1869
1870   cfa.reg = REGNO (dest);
1871   gcc_assert (cfa.indirect == 0);
1872
1873   def_cfa_1 (label, &cfa);
1874 }
1875
1876 /* A subroutine of dwarf2out_frame_debug, process a REG_CFA_OFFSET note.  */
1877
1878 static void
1879 dwarf2out_frame_debug_cfa_offset (rtx set, const char *label)
1880 {
1881   HOST_WIDE_INT offset;
1882   rtx src, addr, span;
1883
1884   src = XEXP (set, 1);
1885   addr = XEXP (set, 0);
1886   gcc_assert (MEM_P (addr));
1887   addr = XEXP (addr, 0);
1888
1889   /* As documented, only consider extremely simple addresses.  */
1890   switch (GET_CODE (addr))
1891     {
1892     case REG:
1893       gcc_assert (REGNO (addr) == cfa.reg);
1894       offset = -cfa.offset;
1895       break;
1896     case PLUS:
1897       gcc_assert (REGNO (XEXP (addr, 0)) == cfa.reg);
1898       offset = INTVAL (XEXP (addr, 1)) - cfa.offset;
1899       break;
1900     default:
1901       gcc_unreachable ();
1902     }
1903
1904   span = targetm.dwarf_register_span (src);
1905
1906   /* ??? We'd like to use queue_reg_save, but we need to come up with
1907      a different flushing heuristic for epilogues.  */
1908   if (!span)
1909     reg_save (label, DWARF_FRAME_REGNUM (REGNO (src)), INVALID_REGNUM, offset);
1910   else
1911     {
1912       /* We have a PARALLEL describing where the contents of SRC live.
1913          Queue register saves for each piece of the PARALLEL.  */
1914       int par_index;
1915       int limit;
1916       HOST_WIDE_INT span_offset = offset;
1917
1918       gcc_assert (GET_CODE (span) == PARALLEL);
1919
1920       limit = XVECLEN (span, 0);
1921       for (par_index = 0; par_index < limit; par_index++)
1922         {
1923           rtx elem = XVECEXP (span, 0, par_index);
1924
1925           reg_save (label, DWARF_FRAME_REGNUM (REGNO (elem)),
1926                     INVALID_REGNUM, span_offset);
1927           span_offset += GET_MODE_SIZE (GET_MODE (elem));
1928         }
1929     }
1930 }
1931
1932 /* A subroutine of dwarf2out_frame_debug, process a REG_CFA_REGISTER note.  */
1933
1934 static void
1935 dwarf2out_frame_debug_cfa_register (rtx set, const char *label)
1936 {
1937   rtx src, dest;
1938   unsigned sregno, dregno;
1939
1940   src = XEXP (set, 1);
1941   dest = XEXP (set, 0);
1942
1943   if (src == pc_rtx)
1944     sregno = DWARF_FRAME_RETURN_COLUMN;
1945   else
1946     sregno = DWARF_FRAME_REGNUM (REGNO (src));
1947
1948   dregno = DWARF_FRAME_REGNUM (REGNO (dest));
1949
1950   /* ??? We'd like to use queue_reg_save, but we need to come up with
1951      a different flushing heuristic for epilogues.  */
1952   reg_save (label, sregno, dregno, 0);
1953 }
1954
1955 /* A subroutine of dwarf2out_frame_debug, process a REG_CFA_RESTORE note.  */
1956
1957 static void
1958 dwarf2out_frame_debug_cfa_restore (rtx reg, const char *label)
1959 {
1960   dw_cfi_ref cfi = new_cfi ();
1961   unsigned int regno = DWARF_FRAME_REGNUM (REGNO (reg));
1962
1963   cfi->dw_cfi_opc = (regno & ~0x3f ? DW_CFA_restore_extended : DW_CFA_restore);
1964   cfi->dw_cfi_oprnd1.dw_cfi_reg_num = regno;
1965
1966   add_fde_cfi (label, cfi);
1967 }
1968
1969 /* Record call frame debugging information for an expression EXPR,
1970    which either sets SP or FP (adjusting how we calculate the frame
1971    address) or saves a register to the stack or another register.
1972    LABEL indicates the address of EXPR.
1973
1974    This function encodes a state machine mapping rtxes to actions on
1975    cfa, cfa_store, and cfa_temp.reg.  We describe these rules so
1976    users need not read the source code.
1977
1978   The High-Level Picture
1979
1980   Changes in the register we use to calculate the CFA: Currently we
1981   assume that if you copy the CFA register into another register, we
1982   should take the other one as the new CFA register; this seems to
1983   work pretty well.  If it's wrong for some target, it's simple
1984   enough not to set RTX_FRAME_RELATED_P on the insn in question.
1985
1986   Changes in the register we use for saving registers to the stack:
1987   This is usually SP, but not always.  Again, we deduce that if you
1988   copy SP into another register (and SP is not the CFA register),
1989   then the new register is the one we will be using for register
1990   saves.  This also seems to work.
1991
1992   Register saves: There's not much guesswork about this one; if
1993   RTX_FRAME_RELATED_P is set on an insn which modifies memory, it's a
1994   register save, and the register used to calculate the destination
1995   had better be the one we think we're using for this purpose.
1996   It's also assumed that a copy from a call-saved register to another
1997   register is saving that register if RTX_FRAME_RELATED_P is set on
1998   that instruction.  If the copy is from a call-saved register to
1999   the *same* register, that means that the register is now the same
2000   value as in the caller.
2001
2002   Except: If the register being saved is the CFA register, and the
2003   offset is nonzero, we are saving the CFA, so we assume we have to
2004   use DW_CFA_def_cfa_expression.  If the offset is 0, we assume that
2005   the intent is to save the value of SP from the previous frame.
2006
2007   In addition, if a register has previously been saved to a different
2008   register,
2009
2010   Invariants / Summaries of Rules
2011
2012   cfa          current rule for calculating the CFA.  It usually
2013                consists of a register and an offset.
2014   cfa_store    register used by prologue code to save things to the stack
2015                cfa_store.offset is the offset from the value of
2016                cfa_store.reg to the actual CFA
2017   cfa_temp     register holding an integral value.  cfa_temp.offset
2018                stores the value, which will be used to adjust the
2019                stack pointer.  cfa_temp is also used like cfa_store,
2020                to track stores to the stack via fp or a temp reg.
2021
2022   Rules  1- 4: Setting a register's value to cfa.reg or an expression
2023                with cfa.reg as the first operand changes the cfa.reg and its
2024                cfa.offset.  Rule 1 and 4 also set cfa_temp.reg and
2025                cfa_temp.offset.
2026
2027   Rules  6- 9: Set a non-cfa.reg register value to a constant or an
2028                expression yielding a constant.  This sets cfa_temp.reg
2029                and cfa_temp.offset.
2030
2031   Rule 5:      Create a new register cfa_store used to save items to the
2032                stack.
2033
2034   Rules 10-14: Save a register to the stack.  Define offset as the
2035                difference of the original location and cfa_store's
2036                location (or cfa_temp's location if cfa_temp is used).
2037
2038   Rules 16-20: If AND operation happens on sp in prologue, we assume
2039                stack is realigned.  We will use a group of DW_OP_XXX
2040                expressions to represent the location of the stored
2041                register instead of CFA+offset.
2042
2043   The Rules
2044
2045   "{a,b}" indicates a choice of a xor b.
2046   "<reg>:cfa.reg" indicates that <reg> must equal cfa.reg.
2047
2048   Rule 1:
2049   (set <reg1> <reg2>:cfa.reg)
2050   effects: cfa.reg = <reg1>
2051            cfa.offset unchanged
2052            cfa_temp.reg = <reg1>
2053            cfa_temp.offset = cfa.offset
2054
2055   Rule 2:
2056   (set sp ({minus,plus,losum} {sp,fp}:cfa.reg
2057                               {<const_int>,<reg>:cfa_temp.reg}))
2058   effects: cfa.reg = sp if fp used
2059            cfa.offset += {+/- <const_int>, cfa_temp.offset} if cfa.reg==sp
2060            cfa_store.offset += {+/- <const_int>, cfa_temp.offset}
2061              if cfa_store.reg==sp
2062
2063   Rule 3:
2064   (set fp ({minus,plus,losum} <reg>:cfa.reg <const_int>))
2065   effects: cfa.reg = fp
2066            cfa_offset += +/- <const_int>
2067
2068   Rule 4:
2069   (set <reg1> ({plus,losum} <reg2>:cfa.reg <const_int>))
2070   constraints: <reg1> != fp
2071                <reg1> != sp
2072   effects: cfa.reg = <reg1>
2073            cfa_temp.reg = <reg1>
2074            cfa_temp.offset = cfa.offset
2075
2076   Rule 5:
2077   (set <reg1> (plus <reg2>:cfa_temp.reg sp:cfa.reg))
2078   constraints: <reg1> != fp
2079                <reg1> != sp
2080   effects: cfa_store.reg = <reg1>
2081            cfa_store.offset = cfa.offset - cfa_temp.offset
2082
2083   Rule 6:
2084   (set <reg> <const_int>)
2085   effects: cfa_temp.reg = <reg>
2086            cfa_temp.offset = <const_int>
2087
2088   Rule 7:
2089   (set <reg1>:cfa_temp.reg (ior <reg2>:cfa_temp.reg <const_int>))
2090   effects: cfa_temp.reg = <reg1>
2091            cfa_temp.offset |= <const_int>
2092
2093   Rule 8:
2094   (set <reg> (high <exp>))
2095   effects: none
2096
2097   Rule 9:
2098   (set <reg> (lo_sum <exp> <const_int>))
2099   effects: cfa_temp.reg = <reg>
2100            cfa_temp.offset = <const_int>
2101
2102   Rule 10:
2103   (set (mem (pre_modify sp:cfa_store (???? <reg1> <const_int>))) <reg2>)
2104   effects: cfa_store.offset -= <const_int>
2105            cfa.offset = cfa_store.offset if cfa.reg == sp
2106            cfa.reg = sp
2107            cfa.base_offset = -cfa_store.offset
2108
2109   Rule 11:
2110   (set (mem ({pre_inc,pre_dec} sp:cfa_store.reg)) <reg>)
2111   effects: cfa_store.offset += -/+ mode_size(mem)
2112            cfa.offset = cfa_store.offset if cfa.reg == sp
2113            cfa.reg = sp
2114            cfa.base_offset = -cfa_store.offset
2115
2116   Rule 12:
2117   (set (mem ({minus,plus,losum} <reg1>:{cfa_store,cfa_temp} <const_int>))
2118
2119        <reg2>)
2120   effects: cfa.reg = <reg1>
2121            cfa.base_offset = -/+ <const_int> - {cfa_store,cfa_temp}.offset
2122
2123   Rule 13:
2124   (set (mem <reg1>:{cfa_store,cfa_temp}) <reg2>)
2125   effects: cfa.reg = <reg1>
2126            cfa.base_offset = -{cfa_store,cfa_temp}.offset
2127
2128   Rule 14:
2129   (set (mem (postinc <reg1>:cfa_temp <const_int>)) <reg2>)
2130   effects: cfa.reg = <reg1>
2131            cfa.base_offset = -cfa_temp.offset
2132            cfa_temp.offset -= mode_size(mem)
2133
2134   Rule 15:
2135   (set <reg> {unspec, unspec_volatile})
2136   effects: target-dependent
2137
2138   Rule 16:
2139   (set sp (and: sp <const_int>))
2140   constraints: cfa_store.reg == sp
2141   effects: current_fde.stack_realign = 1
2142            cfa_store.offset = 0
2143            fde->drap_reg = cfa.reg if cfa.reg != sp and cfa.reg != fp
2144
2145   Rule 17:
2146   (set (mem ({pre_inc, pre_dec} sp)) (mem (plus (cfa.reg) (const_int))))
2147   effects: cfa_store.offset += -/+ mode_size(mem)
2148
2149   Rule 18:
2150   (set (mem ({pre_inc, pre_dec} sp)) fp)
2151   constraints: fde->stack_realign == 1
2152   effects: cfa_store.offset = 0
2153            cfa.reg != HARD_FRAME_POINTER_REGNUM
2154
2155   Rule 19:
2156   (set (mem ({pre_inc, pre_dec} sp)) cfa.reg)
2157   constraints: fde->stack_realign == 1
2158                && cfa.offset == 0
2159                && cfa.indirect == 0
2160                && cfa.reg != HARD_FRAME_POINTER_REGNUM
2161   effects: Use DW_CFA_def_cfa_expression to define cfa
2162            cfa.reg == fde->drap_reg
2163
2164   Rule 20:
2165   (set reg fde->drap_reg)
2166   constraints: fde->vdrap_reg == INVALID_REGNUM
2167   effects: fde->vdrap_reg = reg.
2168   (set mem fde->drap_reg)
2169   constraints: fde->drap_reg_saved == 1
2170   effects: none.  */
2171
2172 static void
2173 dwarf2out_frame_debug_expr (rtx expr, const char *label)
2174 {
2175   rtx src, dest, span;
2176   HOST_WIDE_INT offset;
2177   dw_fde_ref fde;
2178
2179   /* If RTX_FRAME_RELATED_P is set on a PARALLEL, process each member of
2180      the PARALLEL independently. The first element is always processed if
2181      it is a SET. This is for backward compatibility.   Other elements
2182      are processed only if they are SETs and the RTX_FRAME_RELATED_P
2183      flag is set in them.  */
2184   if (GET_CODE (expr) == PARALLEL || GET_CODE (expr) == SEQUENCE)
2185     {
2186       int par_index;
2187       int limit = XVECLEN (expr, 0);
2188       rtx elem;
2189
2190       /* PARALLELs have strict read-modify-write semantics, so we
2191          ought to evaluate every rvalue before changing any lvalue.
2192          It's cumbersome to do that in general, but there's an
2193          easy approximation that is enough for all current users:
2194          handle register saves before register assignments.  */
2195       if (GET_CODE (expr) == PARALLEL)
2196         for (par_index = 0; par_index < limit; par_index++)
2197           {
2198             elem = XVECEXP (expr, 0, par_index);
2199             if (GET_CODE (elem) == SET
2200                 && MEM_P (SET_DEST (elem))
2201                 && (RTX_FRAME_RELATED_P (elem) || par_index == 0))
2202               dwarf2out_frame_debug_expr (elem, label);
2203           }
2204
2205       for (par_index = 0; par_index < limit; par_index++)
2206         {
2207           elem = XVECEXP (expr, 0, par_index);
2208           if (GET_CODE (elem) == SET
2209               && (!MEM_P (SET_DEST (elem)) || GET_CODE (expr) == SEQUENCE)
2210               && (RTX_FRAME_RELATED_P (elem) || par_index == 0))
2211             dwarf2out_frame_debug_expr (elem, label);
2212           else if (GET_CODE (elem) == SET
2213                    && par_index != 0
2214                    && !RTX_FRAME_RELATED_P (elem))
2215             {
2216               /* Stack adjustment combining might combine some post-prologue
2217                  stack adjustment into a prologue stack adjustment.  */
2218               HOST_WIDE_INT offset = stack_adjust_offset (elem, args_size, 0);
2219
2220               if (offset != 0)
2221                 dwarf2out_stack_adjust (offset, label);
2222             }
2223         }
2224       return;
2225     }
2226
2227   gcc_assert (GET_CODE (expr) == SET);
2228
2229   src = SET_SRC (expr);
2230   dest = SET_DEST (expr);
2231
2232   if (REG_P (src))
2233     {
2234       rtx rsi = reg_saved_in (src);
2235       if (rsi)
2236         src = rsi;
2237     }
2238
2239   fde = current_fde ();
2240
2241   if (REG_P (src)
2242       && fde
2243       && fde->drap_reg == REGNO (src)
2244       && (fde->drap_reg_saved
2245           || REG_P (dest)))
2246     {
2247       /* Rule 20 */
2248       /* If we are saving dynamic realign argument pointer to a
2249          register, the destination is virtual dynamic realign
2250          argument pointer.  It may be used to access argument.  */
2251       if (REG_P (dest))
2252         {
2253           gcc_assert (fde->vdrap_reg == INVALID_REGNUM);
2254           fde->vdrap_reg = REGNO (dest);
2255         }
2256       return;
2257     }
2258
2259   switch (GET_CODE (dest))
2260     {
2261     case REG:
2262       switch (GET_CODE (src))
2263         {
2264           /* Setting FP from SP.  */
2265         case REG:
2266           if (cfa.reg == (unsigned) REGNO (src))
2267             {
2268               /* Rule 1 */
2269               /* Update the CFA rule wrt SP or FP.  Make sure src is
2270                  relative to the current CFA register.
2271
2272                  We used to require that dest be either SP or FP, but the
2273                  ARM copies SP to a temporary register, and from there to
2274                  FP.  So we just rely on the backends to only set
2275                  RTX_FRAME_RELATED_P on appropriate insns.  */
2276               cfa.reg = REGNO (dest);
2277               cfa_temp.reg = cfa.reg;
2278               cfa_temp.offset = cfa.offset;
2279             }
2280           else
2281             {
2282               /* Saving a register in a register.  */
2283               gcc_assert (!fixed_regs [REGNO (dest)]
2284                           /* For the SPARC and its register window.  */
2285                           || (DWARF_FRAME_REGNUM (REGNO (src))
2286                               == DWARF_FRAME_RETURN_COLUMN));
2287
2288               /* After stack is aligned, we can only save SP in FP
2289                  if drap register is used.  In this case, we have
2290                  to restore stack pointer with the CFA value and we
2291                  don't generate this DWARF information.  */
2292               if (fde
2293                   && fde->stack_realign
2294                   && REGNO (src) == STACK_POINTER_REGNUM)
2295                 gcc_assert (REGNO (dest) == HARD_FRAME_POINTER_REGNUM
2296                             && fde->drap_reg != INVALID_REGNUM
2297                             && cfa.reg != REGNO (src));
2298               else
2299                 queue_reg_save (label, src, dest, 0);
2300             }
2301           break;
2302
2303         case PLUS:
2304         case MINUS:
2305         case LO_SUM:
2306           if (dest == stack_pointer_rtx)
2307             {
2308               /* Rule 2 */
2309               /* Adjusting SP.  */
2310               switch (GET_CODE (XEXP (src, 1)))
2311                 {
2312                 case CONST_INT:
2313                   offset = INTVAL (XEXP (src, 1));
2314                   break;
2315                 case REG:
2316                   gcc_assert ((unsigned) REGNO (XEXP (src, 1))
2317                               == cfa_temp.reg);
2318                   offset = cfa_temp.offset;
2319                   break;
2320                 default:
2321                   gcc_unreachable ();
2322                 }
2323
2324               if (XEXP (src, 0) == hard_frame_pointer_rtx)
2325                 {
2326                   /* Restoring SP from FP in the epilogue.  */
2327                   gcc_assert (cfa.reg == (unsigned) HARD_FRAME_POINTER_REGNUM);
2328                   cfa.reg = STACK_POINTER_REGNUM;
2329                 }
2330               else if (GET_CODE (src) == LO_SUM)
2331                 /* Assume we've set the source reg of the LO_SUM from sp.  */
2332                 ;
2333               else
2334                 gcc_assert (XEXP (src, 0) == stack_pointer_rtx);
2335
2336               if (GET_CODE (src) != MINUS)
2337                 offset = -offset;
2338               if (cfa.reg == STACK_POINTER_REGNUM)
2339                 cfa.offset += offset;
2340               if (cfa_store.reg == STACK_POINTER_REGNUM)
2341                 cfa_store.offset += offset;
2342             }
2343           else if (dest == hard_frame_pointer_rtx)
2344             {
2345               /* Rule 3 */
2346               /* Either setting the FP from an offset of the SP,
2347                  or adjusting the FP */
2348               gcc_assert (frame_pointer_needed);
2349
2350               gcc_assert (REG_P (XEXP (src, 0))
2351                           && (unsigned) REGNO (XEXP (src, 0)) == cfa.reg
2352                           && CONST_INT_P (XEXP (src, 1)));
2353               offset = INTVAL (XEXP (src, 1));
2354               if (GET_CODE (src) != MINUS)
2355                 offset = -offset;
2356               cfa.offset += offset;
2357               cfa.reg = HARD_FRAME_POINTER_REGNUM;
2358             }
2359           else
2360             {
2361               gcc_assert (GET_CODE (src) != MINUS);
2362
2363               /* Rule 4 */
2364               if (REG_P (XEXP (src, 0))
2365                   && REGNO (XEXP (src, 0)) == cfa.reg
2366                   && CONST_INT_P (XEXP (src, 1)))
2367                 {
2368                   /* Setting a temporary CFA register that will be copied
2369                      into the FP later on.  */
2370                   offset = - INTVAL (XEXP (src, 1));
2371                   cfa.offset += offset;
2372                   cfa.reg = REGNO (dest);
2373                   /* Or used to save regs to the stack.  */
2374                   cfa_temp.reg = cfa.reg;
2375                   cfa_temp.offset = cfa.offset;
2376                 }
2377
2378               /* Rule 5 */
2379               else if (REG_P (XEXP (src, 0))
2380                        && REGNO (XEXP (src, 0)) == cfa_temp.reg
2381                        && XEXP (src, 1) == stack_pointer_rtx)
2382                 {
2383                   /* Setting a scratch register that we will use instead
2384                      of SP for saving registers to the stack.  */
2385                   gcc_assert (cfa.reg == STACK_POINTER_REGNUM);
2386                   cfa_store.reg = REGNO (dest);
2387                   cfa_store.offset = cfa.offset - cfa_temp.offset;
2388                 }
2389
2390               /* Rule 9 */
2391               else if (GET_CODE (src) == LO_SUM
2392                        && CONST_INT_P (XEXP (src, 1)))
2393                 {
2394                   cfa_temp.reg = REGNO (dest);
2395                   cfa_temp.offset = INTVAL (XEXP (src, 1));
2396                 }
2397               else
2398                 gcc_unreachable ();
2399             }
2400           break;
2401
2402           /* Rule 6 */
2403         case CONST_INT:
2404           cfa_temp.reg = REGNO (dest);
2405           cfa_temp.offset = INTVAL (src);
2406           break;
2407
2408           /* Rule 7 */
2409         case IOR:
2410           gcc_assert (REG_P (XEXP (src, 0))
2411                       && (unsigned) REGNO (XEXP (src, 0)) == cfa_temp.reg
2412                       && CONST_INT_P (XEXP (src, 1)));
2413
2414           if ((unsigned) REGNO (dest) != cfa_temp.reg)
2415             cfa_temp.reg = REGNO (dest);
2416           cfa_temp.offset |= INTVAL (XEXP (src, 1));
2417           break;
2418
2419           /* Skip over HIGH, assuming it will be followed by a LO_SUM,
2420              which will fill in all of the bits.  */
2421           /* Rule 8 */
2422         case HIGH:
2423           break;
2424
2425           /* Rule 15 */
2426         case UNSPEC:
2427         case UNSPEC_VOLATILE:
2428           gcc_assert (targetm.dwarf_handle_frame_unspec);
2429           targetm.dwarf_handle_frame_unspec (label, expr, XINT (src, 1));
2430           return;
2431
2432           /* Rule 16 */
2433         case AND:
2434           /* If this AND operation happens on stack pointer in prologue,
2435              we assume the stack is realigned and we extract the
2436              alignment.  */
2437           if (fde && XEXP (src, 0) == stack_pointer_rtx)
2438             {
2439               gcc_assert (cfa_store.reg == REGNO (XEXP (src, 0)));
2440               fde->stack_realign = 1;
2441               fde->stack_realignment = INTVAL (XEXP (src, 1));
2442               cfa_store.offset = 0;
2443
2444               if (cfa.reg != STACK_POINTER_REGNUM
2445                   && cfa.reg != HARD_FRAME_POINTER_REGNUM)
2446                 fde->drap_reg = cfa.reg;
2447             }
2448           return;
2449
2450         default:
2451           gcc_unreachable ();
2452         }
2453
2454       def_cfa_1 (label, &cfa);
2455       break;
2456
2457     case MEM:
2458
2459       /* Saving a register to the stack.  Make sure dest is relative to the
2460          CFA register.  */
2461       switch (GET_CODE (XEXP (dest, 0)))
2462         {
2463           /* Rule 10 */
2464           /* With a push.  */
2465         case PRE_MODIFY:
2466           /* We can't handle variable size modifications.  */
2467           gcc_assert (GET_CODE (XEXP (XEXP (XEXP (dest, 0), 1), 1))
2468                       == CONST_INT);
2469           offset = -INTVAL (XEXP (XEXP (XEXP (dest, 0), 1), 1));
2470
2471           gcc_assert (REGNO (XEXP (XEXP (dest, 0), 0)) == STACK_POINTER_REGNUM
2472                       && cfa_store.reg == STACK_POINTER_REGNUM);
2473
2474           cfa_store.offset += offset;
2475           if (cfa.reg == STACK_POINTER_REGNUM)
2476             cfa.offset = cfa_store.offset;
2477
2478           offset = -cfa_store.offset;
2479           break;
2480
2481           /* Rule 11 */
2482         case PRE_INC:
2483         case PRE_DEC:
2484           offset = GET_MODE_SIZE (GET_MODE (dest));
2485           if (GET_CODE (XEXP (dest, 0)) == PRE_INC)
2486             offset = -offset;
2487
2488           gcc_assert ((REGNO (XEXP (XEXP (dest, 0), 0))
2489                        == STACK_POINTER_REGNUM)
2490                       && cfa_store.reg == STACK_POINTER_REGNUM);
2491
2492           cfa_store.offset += offset;
2493
2494           /* Rule 18: If stack is aligned, we will use FP as a
2495              reference to represent the address of the stored
2496              regiser.  */
2497           if (fde
2498               && fde->stack_realign
2499               && src == hard_frame_pointer_rtx)
2500             {
2501               gcc_assert (cfa.reg != HARD_FRAME_POINTER_REGNUM);
2502               cfa_store.offset = 0;
2503             }
2504
2505           if (cfa.reg == STACK_POINTER_REGNUM)
2506             cfa.offset = cfa_store.offset;
2507
2508           offset = -cfa_store.offset;
2509           break;
2510
2511           /* Rule 12 */
2512           /* With an offset.  */
2513         case PLUS:
2514         case MINUS:
2515         case LO_SUM:
2516           {
2517             int regno;
2518
2519             gcc_assert (CONST_INT_P (XEXP (XEXP (dest, 0), 1))
2520                         && REG_P (XEXP (XEXP (dest, 0), 0)));
2521             offset = INTVAL (XEXP (XEXP (dest, 0), 1));
2522             if (GET_CODE (XEXP (dest, 0)) == MINUS)
2523               offset = -offset;
2524
2525             regno = REGNO (XEXP (XEXP (dest, 0), 0));
2526
2527             if (cfa_store.reg == (unsigned) regno)
2528               offset -= cfa_store.offset;
2529             else
2530               {
2531                 gcc_assert (cfa_temp.reg == (unsigned) regno);
2532                 offset -= cfa_temp.offset;
2533               }
2534           }
2535           break;
2536
2537           /* Rule 13 */
2538           /* Without an offset.  */
2539         case REG:
2540           {
2541             int regno = REGNO (XEXP (dest, 0));
2542
2543             if (cfa_store.reg == (unsigned) regno)
2544               offset = -cfa_store.offset;
2545             else
2546               {
2547                 gcc_assert (cfa_temp.reg == (unsigned) regno);
2548                 offset = -cfa_temp.offset;
2549               }
2550           }
2551           break;
2552
2553           /* Rule 14 */
2554         case POST_INC:
2555           gcc_assert (cfa_temp.reg
2556                       == (unsigned) REGNO (XEXP (XEXP (dest, 0), 0)));
2557           offset = -cfa_temp.offset;
2558           cfa_temp.offset -= GET_MODE_SIZE (GET_MODE (dest));
2559           break;
2560
2561         default:
2562           gcc_unreachable ();
2563         }
2564
2565         /* Rule 17 */
2566         /* If the source operand of this MEM operation is not a
2567            register, basically the source is return address.  Here
2568            we only care how much stack grew and we don't save it.  */
2569       if (!REG_P (src))
2570         break;
2571
2572       if (REGNO (src) != STACK_POINTER_REGNUM
2573           && REGNO (src) != HARD_FRAME_POINTER_REGNUM
2574           && (unsigned) REGNO (src) == cfa.reg)
2575         {
2576           /* We're storing the current CFA reg into the stack.  */
2577
2578           if (cfa.offset == 0)
2579             {
2580               /* Rule 19 */
2581               /* If stack is aligned, putting CFA reg into stack means
2582                  we can no longer use reg + offset to represent CFA.
2583                  Here we use DW_CFA_def_cfa_expression instead.  The
2584                  result of this expression equals to the original CFA
2585                  value.  */
2586               if (fde
2587                   && fde->stack_realign
2588                   && cfa.indirect == 0
2589                   && cfa.reg != HARD_FRAME_POINTER_REGNUM)
2590                 {
2591                   dw_cfa_location cfa_exp;
2592
2593                   gcc_assert (fde->drap_reg == cfa.reg);
2594
2595                   cfa_exp.indirect = 1;
2596                   cfa_exp.reg = HARD_FRAME_POINTER_REGNUM;
2597                   cfa_exp.base_offset = offset;
2598                   cfa_exp.offset = 0;
2599
2600                   fde->drap_reg_saved = 1;
2601
2602                   def_cfa_1 (label, &cfa_exp);
2603                   break;
2604                 }
2605
2606               /* If the source register is exactly the CFA, assume
2607                  we're saving SP like any other register; this happens
2608                  on the ARM.  */
2609               def_cfa_1 (label, &cfa);
2610               queue_reg_save (label, stack_pointer_rtx, NULL_RTX, offset);
2611               break;
2612             }
2613           else
2614             {
2615               /* Otherwise, we'll need to look in the stack to
2616                  calculate the CFA.  */
2617               rtx x = XEXP (dest, 0);
2618
2619               if (!REG_P (x))
2620                 x = XEXP (x, 0);
2621               gcc_assert (REG_P (x));
2622
2623               cfa.reg = REGNO (x);
2624               cfa.base_offset = offset;
2625               cfa.indirect = 1;
2626               def_cfa_1 (label, &cfa);
2627               break;
2628             }
2629         }
2630
2631       def_cfa_1 (label, &cfa);
2632       {
2633         span = targetm.dwarf_register_span (src);
2634
2635         if (!span)
2636           queue_reg_save (label, src, NULL_RTX, offset);
2637         else
2638           {
2639             /* We have a PARALLEL describing where the contents of SRC
2640                live.  Queue register saves for each piece of the
2641                PARALLEL.  */
2642             int par_index;
2643             int limit;
2644             HOST_WIDE_INT span_offset = offset;
2645
2646             gcc_assert (GET_CODE (span) == PARALLEL);
2647
2648             limit = XVECLEN (span, 0);
2649             for (par_index = 0; par_index < limit; par_index++)
2650               {
2651                 rtx elem = XVECEXP (span, 0, par_index);
2652
2653                 queue_reg_save (label, elem, NULL_RTX, span_offset);
2654                 span_offset += GET_MODE_SIZE (GET_MODE (elem));
2655               }
2656           }
2657       }
2658       break;
2659
2660     default:
2661       gcc_unreachable ();
2662     }
2663 }
2664
2665 /* Record call frame debugging information for INSN, which either
2666    sets SP or FP (adjusting how we calculate the frame address) or saves a
2667    register to the stack.  If INSN is NULL_RTX, initialize our state.
2668
2669    If AFTER_P is false, we're being called before the insn is emitted,
2670    otherwise after.  Call instructions get invoked twice.  */
2671
2672 void
2673 dwarf2out_frame_debug (rtx insn, bool after_p)
2674 {
2675   const char *label;
2676   rtx note, n;
2677   bool handled_one = false;
2678
2679   if (insn == NULL_RTX)
2680     {
2681       size_t i;
2682
2683       /* Flush any queued register saves.  */
2684       flush_queued_reg_saves ();
2685
2686       /* Set up state for generating call frame debug info.  */
2687       lookup_cfa (&cfa);
2688       gcc_assert (cfa.reg
2689                   == (unsigned long)DWARF_FRAME_REGNUM (STACK_POINTER_REGNUM));
2690
2691       cfa.reg = STACK_POINTER_REGNUM;
2692       cfa_store = cfa;
2693       cfa_temp.reg = -1;
2694       cfa_temp.offset = 0;
2695
2696       for (i = 0; i < num_regs_saved_in_regs; i++)
2697         {
2698           regs_saved_in_regs[i].orig_reg = NULL_RTX;
2699           regs_saved_in_regs[i].saved_in_reg = NULL_RTX;
2700         }
2701       num_regs_saved_in_regs = 0;
2702
2703       if (barrier_args_size)
2704         {
2705           XDELETEVEC (barrier_args_size);
2706           barrier_args_size = NULL;
2707         }
2708       return;
2709     }
2710
2711   if (!NONJUMP_INSN_P (insn) || clobbers_queued_reg_save (insn))
2712     flush_queued_reg_saves ();
2713
2714   if (!RTX_FRAME_RELATED_P (insn))
2715     {
2716       /* ??? This should be done unconditionally since stack adjustments
2717          matter if the stack pointer is not the CFA register anymore but
2718          is still used to save registers.  */
2719       if (!ACCUMULATE_OUTGOING_ARGS)
2720         dwarf2out_notice_stack_adjust (insn, after_p);
2721       return;
2722     }
2723
2724   label = dwarf2out_cfi_label (false);
2725
2726   for (note = REG_NOTES (insn); note; note = XEXP (note, 1))
2727     switch (REG_NOTE_KIND (note))
2728       {
2729       case REG_FRAME_RELATED_EXPR:
2730         insn = XEXP (note, 0);
2731         goto found;
2732
2733       case REG_CFA_DEF_CFA:
2734         dwarf2out_frame_debug_def_cfa (XEXP (note, 0), label);
2735         handled_one = true;
2736         break;
2737
2738       case REG_CFA_ADJUST_CFA:
2739         n = XEXP (note, 0);
2740         if (n == NULL)
2741           {
2742             n = PATTERN (insn);
2743             if (GET_CODE (n) == PARALLEL)
2744               n = XVECEXP (n, 0, 0);
2745           }
2746         dwarf2out_frame_debug_adjust_cfa (n, label);
2747         handled_one = true;
2748         break;
2749
2750       case REG_CFA_OFFSET:
2751         n = XEXP (note, 0);
2752         if (n == NULL)
2753           n = single_set (insn);
2754         dwarf2out_frame_debug_cfa_offset (n, label);
2755         handled_one = true;
2756         break;
2757
2758       case REG_CFA_REGISTER:
2759         n = XEXP (note, 0);
2760         if (n == NULL)
2761           {
2762             n = PATTERN (insn);
2763             if (GET_CODE (n) == PARALLEL)
2764               n = XVECEXP (n, 0, 0);
2765           }
2766         dwarf2out_frame_debug_cfa_register (n, label);
2767         handled_one = true;
2768         break;
2769
2770       case REG_CFA_RESTORE:
2771         n = XEXP (note, 0);
2772         if (n == NULL)
2773           {
2774             n = PATTERN (insn);
2775             if (GET_CODE (n) == PARALLEL)
2776               n = XVECEXP (n, 0, 0);
2777             n = XEXP (n, 0);
2778           }
2779         dwarf2out_frame_debug_cfa_restore (n, label);
2780         handled_one = true;
2781         break;
2782
2783       default:
2784         break;
2785       }
2786   if (handled_one)
2787     return;
2788
2789   insn = PATTERN (insn);
2790  found:
2791   dwarf2out_frame_debug_expr (insn, label);
2792 }
2793
2794 /* Determine if we need to save and restore CFI information around this
2795    epilogue.  If SIBCALL is true, then this is a sibcall epilogue.  If
2796    we do need to save/restore, then emit the save now, and insert a
2797    NOTE_INSN_CFA_RESTORE_STATE at the appropriate place in the stream.  */
2798
2799 void
2800 dwarf2out_begin_epilogue (rtx insn)
2801 {
2802   bool saw_frp = false;
2803   rtx i;
2804
2805   /* Scan forward to the return insn, noticing if there are possible
2806      frame related insns.  */
2807   for (i = NEXT_INSN (insn); i ; i = NEXT_INSN (i))
2808     {
2809       if (!INSN_P (i))
2810         continue;
2811
2812       /* Look for both regular and sibcalls to end the block.  */
2813       if (returnjump_p (i))
2814         break;
2815       if (CALL_P (i) && SIBLING_CALL_P (i))
2816         break;
2817
2818       if (GET_CODE (PATTERN (i)) == SEQUENCE)
2819         {
2820           int idx;
2821           rtx seq = PATTERN (i);
2822
2823           if (returnjump_p (XVECEXP (seq, 0, 0)))
2824             break;
2825           if (CALL_P (XVECEXP (seq, 0, 0))
2826               && SIBLING_CALL_P (XVECEXP (seq, 0, 0)))
2827             break;
2828
2829           for (idx = 0; idx < XVECLEN (seq, 0); idx++)
2830             if (RTX_FRAME_RELATED_P (XVECEXP (seq, 0, idx)))
2831               saw_frp = true;
2832         }
2833
2834       if (RTX_FRAME_RELATED_P (i))
2835         saw_frp = true;
2836     }
2837
2838   /* If the port doesn't emit epilogue unwind info, we don't need a
2839      save/restore pair.  */
2840   if (!saw_frp)
2841     return;
2842
2843   /* Otherwise, search forward to see if the return insn was the last
2844      basic block of the function.  If so, we don't need save/restore.  */
2845   gcc_assert (i != NULL);
2846   i = next_real_insn (i);
2847   if (i == NULL)
2848     return;
2849
2850   /* Insert the restore before that next real insn in the stream, and before
2851      a potential NOTE_INSN_EPILOGUE_BEG -- we do need these notes to be
2852      properly nested.  This should be after any label or alignment.  This
2853      will be pushed into the CFI stream by the function below.  */
2854   while (1)
2855     {
2856       rtx p = PREV_INSN (i);
2857       if (!NOTE_P (p))
2858         break;
2859       if (NOTE_KIND (p) == NOTE_INSN_BASIC_BLOCK)
2860         break;
2861       i = p;
2862     }
2863   emit_note_before (NOTE_INSN_CFA_RESTORE_STATE, i);
2864
2865   emit_cfa_remember = true;
2866
2867   /* And emulate the state save.  */
2868   gcc_assert (!cfa_remember.in_use);
2869   cfa_remember = cfa;
2870   cfa_remember.in_use = 1;
2871 }
2872
2873 /* A "subroutine" of dwarf2out_begin_epilogue.  Emit the restore required.  */
2874
2875 void
2876 dwarf2out_frame_debug_restore_state (void)
2877 {
2878   dw_cfi_ref cfi = new_cfi ();
2879   const char *label = dwarf2out_cfi_label (false);
2880
2881   cfi->dw_cfi_opc = DW_CFA_restore_state;
2882   add_fde_cfi (label, cfi);
2883
2884   gcc_assert (cfa_remember.in_use);
2885   cfa = cfa_remember;
2886   cfa_remember.in_use = 0;
2887 }
2888
2889 #endif
2890
2891 /* Describe for the GTY machinery what parts of dw_cfi_oprnd1 are used.  */
2892 static enum dw_cfi_oprnd_type dw_cfi_oprnd1_desc
2893  (enum dwarf_call_frame_info cfi);
2894
2895 static enum dw_cfi_oprnd_type
2896 dw_cfi_oprnd1_desc (enum dwarf_call_frame_info cfi)
2897 {
2898   switch (cfi)
2899     {
2900     case DW_CFA_nop:
2901     case DW_CFA_GNU_window_save:
2902     case DW_CFA_remember_state:
2903     case DW_CFA_restore_state:
2904       return dw_cfi_oprnd_unused;
2905
2906     case DW_CFA_set_loc:
2907     case DW_CFA_advance_loc1:
2908     case DW_CFA_advance_loc2:
2909     case DW_CFA_advance_loc4:
2910     case DW_CFA_MIPS_advance_loc8:
2911       return dw_cfi_oprnd_addr;
2912
2913     case DW_CFA_offset:
2914     case DW_CFA_offset_extended:
2915     case DW_CFA_def_cfa:
2916     case DW_CFA_offset_extended_sf:
2917     case DW_CFA_def_cfa_sf:
2918     case DW_CFA_restore:
2919     case DW_CFA_restore_extended:
2920     case DW_CFA_undefined:
2921     case DW_CFA_same_value:
2922     case DW_CFA_def_cfa_register:
2923     case DW_CFA_register:
2924       return dw_cfi_oprnd_reg_num;
2925
2926     case DW_CFA_def_cfa_offset:
2927     case DW_CFA_GNU_args_size:
2928     case DW_CFA_def_cfa_offset_sf:
2929       return dw_cfi_oprnd_offset;
2930
2931     case DW_CFA_def_cfa_expression:
2932     case DW_CFA_expression:
2933       return dw_cfi_oprnd_loc;
2934
2935     default:
2936       gcc_unreachable ();
2937     }
2938 }
2939
2940 /* Describe for the GTY machinery what parts of dw_cfi_oprnd2 are used.  */
2941 static enum dw_cfi_oprnd_type dw_cfi_oprnd2_desc
2942  (enum dwarf_call_frame_info cfi);
2943
2944 static enum dw_cfi_oprnd_type
2945 dw_cfi_oprnd2_desc (enum dwarf_call_frame_info cfi)
2946 {
2947   switch (cfi)
2948     {
2949     case DW_CFA_def_cfa:
2950     case DW_CFA_def_cfa_sf:
2951     case DW_CFA_offset:
2952     case DW_CFA_offset_extended_sf:
2953     case DW_CFA_offset_extended:
2954       return dw_cfi_oprnd_offset;
2955
2956     case DW_CFA_register:
2957       return dw_cfi_oprnd_reg_num;
2958
2959     default:
2960       return dw_cfi_oprnd_unused;
2961     }
2962 }
2963
2964 #if defined (DWARF2_DEBUGGING_INFO) || defined (DWARF2_UNWIND_INFO)
2965
2966 /* Switch [BACK] to eh_frame_section.  If we don't have an eh_frame_section,
2967    switch to the data section instead, and write out a synthetic start label
2968    for collect2 the first time around.  */
2969
2970 static void
2971 switch_to_eh_frame_section (bool back)
2972 {
2973   tree label;
2974
2975 #ifdef EH_FRAME_SECTION_NAME
2976   if (eh_frame_section == 0)
2977     {
2978       int flags;
2979
2980       if (EH_TABLES_CAN_BE_READ_ONLY)
2981         {
2982           int fde_encoding;
2983           int per_encoding;
2984           int lsda_encoding;
2985
2986           fde_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/1,
2987                                                        /*global=*/0);
2988           per_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/2,
2989                                                        /*global=*/1);
2990           lsda_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/0,
2991                                                         /*global=*/0);
2992           flags = ((! flag_pic
2993                     || ((fde_encoding & 0x70) != DW_EH_PE_absptr
2994                         && (fde_encoding & 0x70) != DW_EH_PE_aligned
2995                         && (per_encoding & 0x70) != DW_EH_PE_absptr
2996                         && (per_encoding & 0x70) != DW_EH_PE_aligned
2997                         && (lsda_encoding & 0x70) != DW_EH_PE_absptr
2998                         && (lsda_encoding & 0x70) != DW_EH_PE_aligned))
2999                    ? 0 : SECTION_WRITE);
3000         }
3001       else
3002         flags = SECTION_WRITE;
3003       eh_frame_section = get_section (EH_FRAME_SECTION_NAME, flags, NULL);
3004     }
3005 #endif
3006
3007   if (eh_frame_section)
3008     switch_to_section (eh_frame_section);
3009   else
3010     {
3011       /* We have no special eh_frame section.  Put the information in
3012          the data section and emit special labels to guide collect2.  */
3013       switch_to_section (data_section);
3014
3015       if (!back)
3016         {
3017           label = get_file_function_name ("F");
3018           ASM_OUTPUT_ALIGN (asm_out_file, floor_log2 (PTR_SIZE));
3019           targetm.asm_out.globalize_label (asm_out_file,
3020                                            IDENTIFIER_POINTER (label));
3021           ASM_OUTPUT_LABEL (asm_out_file, IDENTIFIER_POINTER (label));
3022         }
3023     }
3024 }
3025
3026 /* Switch [BACK] to the eh or debug frame table section, depending on
3027    FOR_EH.  */
3028
3029 static void
3030 switch_to_frame_table_section (int for_eh, bool back)
3031 {
3032   if (for_eh)
3033     switch_to_eh_frame_section (back);
3034   else
3035     {
3036       if (!debug_frame_section)
3037         debug_frame_section = get_section (DEBUG_FRAME_SECTION,
3038                                            SECTION_DEBUG, NULL);
3039       switch_to_section (debug_frame_section);
3040     }
3041 }
3042
3043 /* Output a Call Frame Information opcode and its operand(s).  */
3044
3045 static void
3046 output_cfi (dw_cfi_ref cfi, dw_fde_ref fde, int for_eh)
3047 {
3048   unsigned long r;
3049   HOST_WIDE_INT off;
3050
3051   if (cfi->dw_cfi_opc == DW_CFA_advance_loc)
3052     dw2_asm_output_data (1, (cfi->dw_cfi_opc
3053                              | (cfi->dw_cfi_oprnd1.dw_cfi_offset & 0x3f)),
3054                          "DW_CFA_advance_loc " HOST_WIDE_INT_PRINT_HEX,
3055                          ((unsigned HOST_WIDE_INT)
3056                           cfi->dw_cfi_oprnd1.dw_cfi_offset));
3057   else if (cfi->dw_cfi_opc == DW_CFA_offset)
3058     {
3059       r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, for_eh);
3060       dw2_asm_output_data (1, (cfi->dw_cfi_opc | (r & 0x3f)),
3061                            "DW_CFA_offset, column 0x%lx", r);
3062       off = div_data_align (cfi->dw_cfi_oprnd2.dw_cfi_offset);
3063       dw2_asm_output_data_uleb128 (off, NULL);
3064     }
3065   else if (cfi->dw_cfi_opc == DW_CFA_restore)
3066     {
3067       r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, for_eh);
3068       dw2_asm_output_data (1, (cfi->dw_cfi_opc | (r & 0x3f)),
3069                            "DW_CFA_restore, column 0x%lx", r);
3070     }
3071   else
3072     {
3073       dw2_asm_output_data (1, cfi->dw_cfi_opc,
3074                            "%s", dwarf_cfi_name (cfi->dw_cfi_opc));
3075
3076       switch (cfi->dw_cfi_opc)
3077         {
3078         case DW_CFA_set_loc:
3079           if (for_eh)
3080             dw2_asm_output_encoded_addr_rtx (
3081                 ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/1, /*global=*/0),
3082                 gen_rtx_SYMBOL_REF (Pmode, cfi->dw_cfi_oprnd1.dw_cfi_addr),
3083                 false, NULL);
3084           else
3085             dw2_asm_output_addr (DWARF2_ADDR_SIZE,
3086                                  cfi->dw_cfi_oprnd1.dw_cfi_addr, NULL);
3087           fde->dw_fde_current_label = cfi->dw_cfi_oprnd1.dw_cfi_addr;
3088           break;
3089
3090         case DW_CFA_advance_loc1:
3091           dw2_asm_output_delta (1, cfi->dw_cfi_oprnd1.dw_cfi_addr,
3092                                 fde->dw_fde_current_label, NULL);
3093           fde->dw_fde_current_label = cfi->dw_cfi_oprnd1.dw_cfi_addr;
3094           break;
3095
3096         case DW_CFA_advance_loc2:
3097           dw2_asm_output_delta (2, cfi->dw_cfi_oprnd1.dw_cfi_addr,
3098                                 fde->dw_fde_current_label, NULL);
3099           fde->dw_fde_current_label = cfi->dw_cfi_oprnd1.dw_cfi_addr;
3100           break;
3101
3102         case DW_CFA_advance_loc4:
3103           dw2_asm_output_delta (4, cfi->dw_cfi_oprnd1.dw_cfi_addr,
3104                                 fde->dw_fde_current_label, NULL);
3105           fde->dw_fde_current_label = cfi->dw_cfi_oprnd1.dw_cfi_addr;
3106           break;
3107
3108         case DW_CFA_MIPS_advance_loc8:
3109           dw2_asm_output_delta (8, cfi->dw_cfi_oprnd1.dw_cfi_addr,
3110                                 fde->dw_fde_current_label, NULL);
3111           fde->dw_fde_current_label = cfi->dw_cfi_oprnd1.dw_cfi_addr;
3112           break;
3113
3114         case DW_CFA_offset_extended:
3115           r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, for_eh);
3116           dw2_asm_output_data_uleb128 (r, NULL);
3117           off = div_data_align (cfi->dw_cfi_oprnd2.dw_cfi_offset);
3118           dw2_asm_output_data_uleb128 (off, NULL);
3119           break;
3120
3121         case DW_CFA_def_cfa:
3122           r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, for_eh);
3123           dw2_asm_output_data_uleb128 (r, NULL);
3124           dw2_asm_output_data_uleb128 (cfi->dw_cfi_oprnd2.dw_cfi_offset, NULL);
3125           break;
3126
3127         case DW_CFA_offset_extended_sf:
3128           r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, for_eh);
3129           dw2_asm_output_data_uleb128 (r, NULL);
3130           off = div_data_align (cfi->dw_cfi_oprnd2.dw_cfi_offset);
3131           dw2_asm_output_data_sleb128 (off, NULL);
3132           break;
3133
3134         case DW_CFA_def_cfa_sf:
3135           r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, for_eh);
3136           dw2_asm_output_data_uleb128 (r, NULL);
3137           off = div_data_align (cfi->dw_cfi_oprnd2.dw_cfi_offset);
3138           dw2_asm_output_data_sleb128 (off, NULL);
3139           break;
3140
3141         case DW_CFA_restore_extended:
3142         case DW_CFA_undefined:
3143         case DW_CFA_same_value:
3144         case DW_CFA_def_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           break;
3148
3149         case DW_CFA_register:
3150           r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, for_eh);
3151           dw2_asm_output_data_uleb128 (r, NULL);
3152           r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd2.dw_cfi_reg_num, for_eh);
3153           dw2_asm_output_data_uleb128 (r, NULL);
3154           break;
3155
3156         case DW_CFA_def_cfa_offset:
3157         case DW_CFA_GNU_args_size:
3158           dw2_asm_output_data_uleb128 (cfi->dw_cfi_oprnd1.dw_cfi_offset, NULL);
3159           break;
3160
3161         case DW_CFA_def_cfa_offset_sf:
3162           off = div_data_align (cfi->dw_cfi_oprnd1.dw_cfi_offset);
3163           dw2_asm_output_data_sleb128 (off, NULL);
3164           break;
3165
3166         case DW_CFA_GNU_window_save:
3167           break;
3168
3169         case DW_CFA_def_cfa_expression:
3170         case DW_CFA_expression:
3171           output_cfa_loc (cfi);
3172           break;
3173
3174         case DW_CFA_GNU_negative_offset_extended:
3175           /* Obsoleted by DW_CFA_offset_extended_sf.  */
3176           gcc_unreachable ();
3177
3178         default:
3179           break;
3180         }
3181     }
3182 }
3183
3184 /* Similar, but do it via assembler directives instead.  */
3185
3186 static void
3187 output_cfi_directive (dw_cfi_ref cfi)
3188 {
3189   unsigned long r, r2;
3190
3191   switch (cfi->dw_cfi_opc)
3192     {
3193     case DW_CFA_advance_loc:
3194     case DW_CFA_advance_loc1:
3195     case DW_CFA_advance_loc2:
3196     case DW_CFA_advance_loc4:
3197     case DW_CFA_MIPS_advance_loc8:
3198     case DW_CFA_set_loc:
3199       /* Should only be created by add_fde_cfi in a code path not
3200          followed when emitting via directives.  The assembler is
3201          going to take care of this for us.  */
3202       gcc_unreachable ();
3203
3204     case DW_CFA_offset:
3205     case DW_CFA_offset_extended:
3206     case DW_CFA_offset_extended_sf:
3207       r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, 1);
3208       fprintf (asm_out_file, "\t.cfi_offset %lu, "HOST_WIDE_INT_PRINT_DEC"\n",
3209                r, cfi->dw_cfi_oprnd2.dw_cfi_offset);
3210       break;
3211
3212     case DW_CFA_restore:
3213     case DW_CFA_restore_extended:
3214       r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, 1);
3215       fprintf (asm_out_file, "\t.cfi_restore %lu\n", r);
3216       break;
3217
3218     case DW_CFA_undefined:
3219       r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, 1);
3220       fprintf (asm_out_file, "\t.cfi_undefined %lu\n", r);
3221       break;
3222
3223     case DW_CFA_same_value:
3224       r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, 1);
3225       fprintf (asm_out_file, "\t.cfi_same_value %lu\n", r);
3226       break;
3227
3228     case DW_CFA_def_cfa:
3229     case DW_CFA_def_cfa_sf:
3230       r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, 1);
3231       fprintf (asm_out_file, "\t.cfi_def_cfa %lu, "HOST_WIDE_INT_PRINT_DEC"\n",
3232                r, cfi->dw_cfi_oprnd2.dw_cfi_offset);
3233       break;
3234
3235     case DW_CFA_def_cfa_register:
3236       r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, 1);
3237       fprintf (asm_out_file, "\t.cfi_def_cfa_register %lu\n", r);
3238       break;
3239
3240     case DW_CFA_register:
3241       r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, 1);
3242       r2 = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd2.dw_cfi_reg_num, 1);
3243       fprintf (asm_out_file, "\t.cfi_register %lu, %lu\n", r, r2);
3244       break;
3245
3246     case DW_CFA_def_cfa_offset:
3247     case DW_CFA_def_cfa_offset_sf:
3248       fprintf (asm_out_file, "\t.cfi_def_cfa_offset "
3249                HOST_WIDE_INT_PRINT_DEC"\n",
3250                cfi->dw_cfi_oprnd1.dw_cfi_offset);
3251       break;
3252
3253     case DW_CFA_remember_state:
3254       fprintf (asm_out_file, "\t.cfi_remember_state\n");
3255       break;
3256     case DW_CFA_restore_state:
3257       fprintf (asm_out_file, "\t.cfi_restore_state\n");
3258       break;
3259
3260     case DW_CFA_GNU_args_size:
3261       fprintf (asm_out_file, "\t.cfi_escape 0x%x,", DW_CFA_GNU_args_size);
3262       dw2_asm_output_data_uleb128_raw (cfi->dw_cfi_oprnd1.dw_cfi_offset);
3263       if (flag_debug_asm)
3264         fprintf (asm_out_file, "\t%s args_size "HOST_WIDE_INT_PRINT_DEC,
3265                  ASM_COMMENT_START, cfi->dw_cfi_oprnd1.dw_cfi_offset);
3266       fputc ('\n', asm_out_file);
3267       break;
3268
3269     case DW_CFA_GNU_window_save:
3270       fprintf (asm_out_file, "\t.cfi_window_save\n");
3271       break;
3272
3273     case DW_CFA_def_cfa_expression:
3274     case DW_CFA_expression:
3275       fprintf (asm_out_file, "\t.cfi_escape 0x%x,", cfi->dw_cfi_opc);
3276       output_cfa_loc_raw (cfi);
3277       fputc ('\n', asm_out_file);
3278       break;
3279
3280     default:
3281       gcc_unreachable ();
3282     }
3283 }
3284
3285 DEF_VEC_P (dw_cfi_ref);
3286 DEF_VEC_ALLOC_P (dw_cfi_ref, heap);
3287
3288 /* Output CFIs to bring current FDE to the same state as after executing
3289    CFIs in CFI chain.  DO_CFI_ASM is true if .cfi_* directives shall
3290    be emitted, false otherwise.  If it is false, FDE and FOR_EH are the
3291    other arguments to pass to output_cfi.  */
3292
3293 static void
3294 output_cfis (dw_cfi_ref cfi, bool do_cfi_asm, dw_fde_ref fde, bool for_eh)
3295 {
3296   struct dw_cfi_struct cfi_buf;
3297   dw_cfi_ref cfi2;
3298   dw_cfi_ref cfi_args_size = NULL, cfi_cfa = NULL, cfi_cfa_offset = NULL;
3299   VEC (dw_cfi_ref, heap) *regs = VEC_alloc (dw_cfi_ref, heap, 32);
3300   unsigned int len, idx;
3301
3302   for (;; cfi = cfi->dw_cfi_next)
3303     switch (cfi ? cfi->dw_cfi_opc : DW_CFA_nop)
3304       {
3305       case DW_CFA_advance_loc:
3306       case DW_CFA_advance_loc1:
3307       case DW_CFA_advance_loc2:
3308       case DW_CFA_advance_loc4:
3309       case DW_CFA_MIPS_advance_loc8:
3310       case DW_CFA_set_loc:
3311         /* All advances should be ignored.  */
3312         break;
3313       case DW_CFA_remember_state:
3314         {
3315           dw_cfi_ref args_size = cfi_args_size;
3316
3317           /* Skip everything between .cfi_remember_state and
3318              .cfi_restore_state.  */
3319           for (cfi2 = cfi->dw_cfi_next; cfi2; cfi2 = cfi2->dw_cfi_next)
3320             if (cfi2->dw_cfi_opc == DW_CFA_restore_state)
3321               break;
3322             else if (cfi2->dw_cfi_opc == DW_CFA_GNU_args_size)
3323               args_size = cfi2;
3324             else
3325               gcc_assert (cfi2->dw_cfi_opc != DW_CFA_remember_state);
3326
3327           if (cfi2 == NULL)
3328             goto flush_all;
3329           else
3330             {
3331               cfi = cfi2;
3332               cfi_args_size = args_size;
3333             }
3334           break;
3335         }
3336       case DW_CFA_GNU_args_size:
3337         cfi_args_size = cfi;
3338         break;
3339       case DW_CFA_GNU_window_save:
3340         goto flush_all;
3341       case DW_CFA_offset:
3342       case DW_CFA_offset_extended:
3343       case DW_CFA_offset_extended_sf:
3344       case DW_CFA_restore:
3345       case DW_CFA_restore_extended:
3346       case DW_CFA_undefined:
3347       case DW_CFA_same_value:
3348       case DW_CFA_register:
3349       case DW_CFA_val_offset:
3350       case DW_CFA_val_offset_sf:
3351       case DW_CFA_expression:
3352       case DW_CFA_val_expression:
3353       case DW_CFA_GNU_negative_offset_extended:
3354         if (VEC_length (dw_cfi_ref, regs) <= cfi->dw_cfi_oprnd1.dw_cfi_reg_num)
3355           VEC_safe_grow_cleared (dw_cfi_ref, heap, regs,
3356                                  cfi->dw_cfi_oprnd1.dw_cfi_reg_num + 1);
3357         VEC_replace (dw_cfi_ref, regs, cfi->dw_cfi_oprnd1.dw_cfi_reg_num, cfi);
3358         break;
3359       case DW_CFA_def_cfa:
3360       case DW_CFA_def_cfa_sf:
3361       case DW_CFA_def_cfa_expression:
3362         cfi_cfa = cfi;
3363         cfi_cfa_offset = cfi;
3364         break;
3365       case DW_CFA_def_cfa_register:
3366         cfi_cfa = cfi;
3367         break;
3368       case DW_CFA_def_cfa_offset:
3369       case DW_CFA_def_cfa_offset_sf:
3370         cfi_cfa_offset = cfi;
3371         break;
3372       case DW_CFA_nop:
3373         gcc_assert (cfi == NULL);
3374       flush_all:
3375         len = VEC_length (dw_cfi_ref, regs);
3376         for (idx = 0; idx < len; idx++)
3377           {
3378             cfi2 = VEC_replace (dw_cfi_ref, regs, idx, NULL);
3379             if (cfi2 != NULL
3380                 && cfi2->dw_cfi_opc != DW_CFA_restore
3381                 && cfi2->dw_cfi_opc != DW_CFA_restore_extended)
3382               {
3383                 if (do_cfi_asm)
3384                   output_cfi_directive (cfi2);
3385                 else
3386                   output_cfi (cfi2, fde, for_eh);
3387               }
3388           }
3389         if (cfi_cfa && cfi_cfa_offset && cfi_cfa_offset != cfi_cfa)
3390           {
3391             gcc_assert (cfi_cfa->dw_cfi_opc != DW_CFA_def_cfa_expression);
3392             cfi_buf = *cfi_cfa;
3393             switch (cfi_cfa_offset->dw_cfi_opc)
3394               {
3395               case DW_CFA_def_cfa_offset:
3396                 cfi_buf.dw_cfi_opc = DW_CFA_def_cfa;
3397                 cfi_buf.dw_cfi_oprnd2 = cfi_cfa_offset->dw_cfi_oprnd1;
3398                 break;
3399               case DW_CFA_def_cfa_offset_sf:
3400                 cfi_buf.dw_cfi_opc = DW_CFA_def_cfa_sf;
3401                 cfi_buf.dw_cfi_oprnd2 = cfi_cfa_offset->dw_cfi_oprnd1;
3402                 break;
3403               case DW_CFA_def_cfa:
3404               case DW_CFA_def_cfa_sf:
3405                 cfi_buf.dw_cfi_opc = cfi_cfa_offset->dw_cfi_opc;
3406                 cfi_buf.dw_cfi_oprnd2 = cfi_cfa_offset->dw_cfi_oprnd2;
3407                 break;
3408               default:
3409                 gcc_unreachable ();
3410               }
3411             cfi_cfa = &cfi_buf;
3412           }
3413         else if (cfi_cfa_offset)
3414           cfi_cfa = cfi_cfa_offset;
3415         if (cfi_cfa)
3416           {
3417             if (do_cfi_asm)
3418               output_cfi_directive (cfi_cfa);
3419             else
3420               output_cfi (cfi_cfa, fde, for_eh);
3421           }
3422         cfi_cfa = NULL;
3423         cfi_cfa_offset = NULL;
3424         if (cfi_args_size
3425             && cfi_args_size->dw_cfi_oprnd1.dw_cfi_offset)
3426           {
3427             if (do_cfi_asm)
3428               output_cfi_directive (cfi_args_size);
3429             else
3430               output_cfi (cfi_args_size, fde, for_eh);
3431           }
3432         cfi_args_size = NULL;
3433         if (cfi == NULL)
3434           {
3435             VEC_free (dw_cfi_ref, heap, regs);
3436             return;
3437           }
3438         else if (do_cfi_asm)
3439           output_cfi_directive (cfi);
3440         else
3441           output_cfi (cfi, fde, for_eh);
3442         break;
3443       default:
3444         gcc_unreachable ();
3445     }
3446 }
3447
3448 /* Output one FDE.  */
3449
3450 static void
3451 output_fde (dw_fde_ref fde, bool for_eh, bool second,
3452             char *section_start_label, int fde_encoding, char *augmentation,
3453             bool any_lsda_needed, int lsda_encoding)
3454 {
3455   const char *begin, *end;
3456   static unsigned int j;
3457   char l1[20], l2[20];
3458   dw_cfi_ref cfi;
3459
3460   targetm.asm_out.unwind_label (asm_out_file, fde->decl, for_eh,
3461                                 /* empty */ 0);
3462   targetm.asm_out.internal_label (asm_out_file, FDE_LABEL,
3463                                   for_eh + j);
3464   ASM_GENERATE_INTERNAL_LABEL (l1, FDE_AFTER_SIZE_LABEL, for_eh + j);
3465   ASM_GENERATE_INTERNAL_LABEL (l2, FDE_END_LABEL, for_eh + j);
3466   if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4 && !for_eh)
3467     dw2_asm_output_data (4, 0xffffffff, "Initial length escape value"
3468                          " indicating 64-bit DWARF extension");
3469   dw2_asm_output_delta (for_eh ? 4 : DWARF_OFFSET_SIZE, l2, l1,
3470                         "FDE Length");
3471   ASM_OUTPUT_LABEL (asm_out_file, l1);
3472
3473   if (for_eh)
3474     dw2_asm_output_delta (4, l1, section_start_label, "FDE CIE offset");
3475   else
3476     dw2_asm_output_offset (DWARF_OFFSET_SIZE, section_start_label,
3477                            debug_frame_section, "FDE CIE offset");
3478
3479   if (!fde->dw_fde_switched_sections)
3480     {
3481       begin = fde->dw_fde_begin;
3482       end = fde->dw_fde_end;
3483     }
3484   else
3485     {
3486       /* For the first section, prefer dw_fde_begin over
3487          dw_fde_{hot,cold}_section_label, as the latter
3488          might be separated from the real start of the
3489          function by alignment padding.  */
3490       if (!second)
3491         begin = fde->dw_fde_begin;
3492       else if (fde->dw_fde_switched_cold_to_hot)
3493         begin = fde->dw_fde_hot_section_label;
3494       else
3495         begin = fde->dw_fde_unlikely_section_label;
3496       if (second ^ fde->dw_fde_switched_cold_to_hot)
3497         end = fde->dw_fde_unlikely_section_end_label;
3498       else
3499         end = fde->dw_fde_hot_section_end_label;
3500     }
3501
3502   if (for_eh)
3503     {
3504       rtx sym_ref = gen_rtx_SYMBOL_REF (Pmode, begin);
3505       SYMBOL_REF_FLAGS (sym_ref) |= SYMBOL_FLAG_LOCAL;
3506       dw2_asm_output_encoded_addr_rtx (fde_encoding, sym_ref, false,
3507                                        "FDE initial location");
3508       dw2_asm_output_delta (size_of_encoded_value (fde_encoding),
3509                             end, begin, "FDE address range");
3510     }
3511   else
3512     {
3513       dw2_asm_output_addr (DWARF2_ADDR_SIZE, begin, "FDE initial location");
3514       dw2_asm_output_delta (DWARF2_ADDR_SIZE, end, begin, "FDE address range");
3515     }
3516
3517   if (augmentation[0])
3518     {
3519       if (any_lsda_needed)
3520         {
3521           int size = size_of_encoded_value (lsda_encoding);
3522
3523           if (lsda_encoding == DW_EH_PE_aligned)
3524             {
3525               int offset = (  4         /* Length */
3526                             + 4         /* CIE offset */
3527                             + 2 * size_of_encoded_value (fde_encoding)
3528                             + 1         /* Augmentation size */ );
3529               int pad = -offset & (PTR_SIZE - 1);
3530
3531               size += pad;
3532               gcc_assert (size_of_uleb128 (size) == 1);
3533             }
3534
3535           dw2_asm_output_data_uleb128 (size, "Augmentation size");
3536
3537           if (fde->uses_eh_lsda)
3538             {
3539               ASM_GENERATE_INTERNAL_LABEL (l1, second ? "LLSDAC" : "LLSDA",
3540                                            fde->funcdef_number);
3541               dw2_asm_output_encoded_addr_rtx (lsda_encoding,
3542                                                gen_rtx_SYMBOL_REF (Pmode, l1),
3543                                                false,
3544                                                "Language Specific Data Area");
3545             }
3546           else
3547             {
3548               if (lsda_encoding == DW_EH_PE_aligned)
3549                 ASM_OUTPUT_ALIGN (asm_out_file, floor_log2 (PTR_SIZE));
3550               dw2_asm_output_data (size_of_encoded_value (lsda_encoding), 0,
3551                                    "Language Specific Data Area (none)");
3552             }
3553         }
3554       else
3555         dw2_asm_output_data_uleb128 (0, "Augmentation size");
3556     }
3557
3558   /* Loop through the Call Frame Instructions associated with
3559      this FDE.  */
3560   fde->dw_fde_current_label = begin;
3561   if (!fde->dw_fde_switched_sections)
3562     for (cfi = fde->dw_fde_cfi; cfi != NULL; cfi = cfi->dw_cfi_next)
3563       output_cfi (cfi, fde, for_eh);
3564   else if (!second)
3565     {
3566       if (fde->dw_fde_switch_cfi)
3567         for (cfi = fde->dw_fde_cfi; cfi != NULL; cfi = cfi->dw_cfi_next)
3568           {
3569             output_cfi (cfi, fde, for_eh);
3570             if (cfi == fde->dw_fde_switch_cfi)
3571               break;
3572           }
3573     }
3574   else
3575     {
3576       dw_cfi_ref cfi_next = fde->dw_fde_cfi;
3577
3578       if (fde->dw_fde_switch_cfi)
3579         {
3580           cfi_next = fde->dw_fde_switch_cfi->dw_cfi_next;
3581           fde->dw_fde_switch_cfi->dw_cfi_next = NULL;
3582           output_cfis (fde->dw_fde_cfi, false, fde, for_eh);
3583           fde->dw_fde_switch_cfi->dw_cfi_next = cfi_next;
3584         }
3585       for (cfi = cfi_next; cfi != NULL; cfi = cfi->dw_cfi_next)
3586         output_cfi (cfi, fde, for_eh);
3587     }
3588
3589   /* If we are to emit a ref/link from function bodies to their frame tables,
3590      do it now.  This is typically performed to make sure that tables
3591      associated with functions are dragged with them and not discarded in
3592      garbage collecting links. We need to do this on a per function basis to
3593      cope with -ffunction-sections.  */
3594
3595 #ifdef ASM_OUTPUT_DWARF_TABLE_REF
3596   /* Switch to the function section, emit the ref to the tables, and
3597      switch *back* into the table section.  */
3598   switch_to_section (function_section (fde->decl));
3599   ASM_OUTPUT_DWARF_TABLE_REF (section_start_label);
3600   switch_to_frame_table_section (for_eh, true);
3601 #endif
3602
3603   /* Pad the FDE out to an address sized boundary.  */
3604   ASM_OUTPUT_ALIGN (asm_out_file,
3605                     floor_log2 ((for_eh ? PTR_SIZE : DWARF2_ADDR_SIZE)));
3606   ASM_OUTPUT_LABEL (asm_out_file, l2);
3607
3608   j += 2;
3609 }
3610
3611 /* Output the call frame information used to record information
3612    that relates to calculating the frame pointer, and records the
3613    location of saved registers.  */
3614
3615 static void
3616 output_call_frame_info (int for_eh)
3617 {
3618   unsigned int i;
3619   dw_fde_ref fde;
3620   dw_cfi_ref cfi;
3621   char l1[20], l2[20], section_start_label[20];
3622   bool any_lsda_needed = false;
3623   char augmentation[6];
3624   int augmentation_size;
3625   int fde_encoding = DW_EH_PE_absptr;
3626   int per_encoding = DW_EH_PE_absptr;
3627   int lsda_encoding = DW_EH_PE_absptr;
3628   int return_reg;
3629   rtx personality = NULL;
3630   int dw_cie_version;
3631
3632   /* Don't emit a CIE if there won't be any FDEs.  */
3633   if (fde_table_in_use == 0)
3634     return;
3635
3636   /* Nothing to do if the assembler's doing it all.  */
3637   if (dwarf2out_do_cfi_asm ())
3638     return;
3639
3640   /* If we make FDEs linkonce, we may have to emit an empty label for
3641      an FDE that wouldn't otherwise be emitted.  We want to avoid
3642      having an FDE kept around when the function it refers to is
3643      discarded.  Example where this matters: a primary function
3644      template in C++ requires EH information, but an explicit
3645      specialization doesn't.  */
3646   if (TARGET_USES_WEAK_UNWIND_INFO
3647       && ! flag_asynchronous_unwind_tables
3648       && flag_exceptions
3649       && for_eh)
3650     for (i = 0; i < fde_table_in_use; i++)
3651       if ((fde_table[i].nothrow || fde_table[i].all_throwers_are_sibcalls)
3652           && !fde_table[i].uses_eh_lsda
3653           && ! DECL_WEAK (fde_table[i].decl))
3654         targetm.asm_out.unwind_label (asm_out_file, fde_table[i].decl,
3655                                       for_eh, /* empty */ 1);
3656
3657   /* If we don't have any functions we'll want to unwind out of, don't
3658      emit any EH unwind information.  Note that if exceptions aren't
3659      enabled, we won't have collected nothrow information, and if we
3660      asked for asynchronous tables, we always want this info.  */
3661   if (for_eh)
3662     {
3663       bool any_eh_needed = !flag_exceptions || flag_asynchronous_unwind_tables;
3664
3665       for (i = 0; i < fde_table_in_use; i++)
3666         if (fde_table[i].uses_eh_lsda)
3667           any_eh_needed = any_lsda_needed = true;
3668         else if (TARGET_USES_WEAK_UNWIND_INFO && DECL_WEAK (fde_table[i].decl))
3669           any_eh_needed = true;
3670         else if (! fde_table[i].nothrow
3671                  && ! fde_table[i].all_throwers_are_sibcalls)
3672           any_eh_needed = true;
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   dw2_asm_output_data_uleb128 (1, "CIE Code Alignment Factor");
3782   dw2_asm_output_data_sleb128 (DWARF_CIE_DATA_ALIGNMENT,
3783                                "CIE Data Alignment Factor");
3784
3785   if (dw_cie_version == 1)
3786     dw2_asm_output_data (1, return_reg, "CIE RA Column");
3787   else
3788     dw2_asm_output_data_uleb128 (return_reg, "CIE RA Column");
3789
3790   if (augmentation[0])
3791     {
3792       dw2_asm_output_data_uleb128 (augmentation_size, "Augmentation size");
3793       if (personality)
3794         {
3795           dw2_asm_output_data (1, per_encoding, "Personality (%s)",
3796                                eh_data_format_name (per_encoding));
3797           dw2_asm_output_encoded_addr_rtx (per_encoding,
3798                                            personality,
3799                                            true, NULL);
3800         }
3801
3802       if (any_lsda_needed)
3803         dw2_asm_output_data (1, lsda_encoding, "LSDA Encoding (%s)",
3804                              eh_data_format_name (lsda_encoding));
3805
3806       if (fde_encoding != DW_EH_PE_absptr)
3807         dw2_asm_output_data (1, fde_encoding, "FDE Encoding (%s)",
3808                              eh_data_format_name (fde_encoding));
3809     }
3810
3811   for (cfi = cie_cfi_head; cfi != NULL; cfi = cfi->dw_cfi_next)
3812     output_cfi (cfi, NULL, for_eh);
3813
3814   /* Pad the CIE out to an address sized boundary.  */
3815   ASM_OUTPUT_ALIGN (asm_out_file,
3816                     floor_log2 (for_eh ? PTR_SIZE : DWARF2_ADDR_SIZE));
3817   ASM_OUTPUT_LABEL (asm_out_file, l2);
3818
3819   /* Loop through all of the FDE's.  */
3820   for (i = 0; i < fde_table_in_use; i++)
3821     {
3822       unsigned int k;
3823       fde = &fde_table[i];
3824
3825       /* Don't emit EH unwind info for leaf functions that don't need it.  */
3826       if (for_eh && !flag_asynchronous_unwind_tables && flag_exceptions
3827           && (fde->nothrow || fde->all_throwers_are_sibcalls)
3828           && ! (TARGET_USES_WEAK_UNWIND_INFO && DECL_WEAK (fde_table[i].decl))
3829           && !fde->uses_eh_lsda)
3830         continue;
3831
3832       for (k = 0; k < (fde->dw_fde_switched_sections ? 2 : 1); k++)
3833         output_fde (fde, for_eh, k, section_start_label, fde_encoding,
3834                     augmentation, any_lsda_needed, lsda_encoding);
3835     }
3836
3837   if (for_eh && targetm.terminate_dw2_eh_frame_info)
3838     dw2_asm_output_data (4, 0, "End of Table");
3839 #ifdef MIPS_DEBUGGING_INFO
3840   /* Work around Irix 6 assembler bug whereby labels at the end of a section
3841      get a value of 0.  Putting .align 0 after the label fixes it.  */
3842   ASM_OUTPUT_ALIGN (asm_out_file, 0);
3843 #endif
3844
3845   /* Turn off app to make assembly quicker.  */
3846   if (flag_debug_asm)
3847     app_disable ();
3848 }
3849
3850 /* Emit .cfi_startproc and .cfi_personality/.cfi_lsda if needed.  */
3851
3852 static void
3853 dwarf2out_do_cfi_startproc (bool second)
3854 {
3855   int enc;
3856   rtx ref;
3857   rtx personality = get_personality_function (current_function_decl);
3858
3859   fprintf (asm_out_file, "\t.cfi_startproc\n");
3860
3861   if (personality)
3862     {
3863       enc = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/2, /*global=*/1);
3864       ref = personality;
3865
3866       /* ??? The GAS support isn't entirely consistent.  We have to
3867          handle indirect support ourselves, but PC-relative is done
3868          in the assembler.  Further, the assembler can't handle any
3869          of the weirder relocation types.  */
3870       if (enc & DW_EH_PE_indirect)
3871         ref = dw2_force_const_mem (ref, true);
3872
3873       fprintf (asm_out_file, "\t.cfi_personality 0x%x,", enc);
3874       output_addr_const (asm_out_file, ref);
3875       fputc ('\n', asm_out_file);
3876     }
3877
3878   if (crtl->uses_eh_lsda)
3879     {
3880       char lab[20];
3881
3882       enc = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/0, /*global=*/0);
3883       ASM_GENERATE_INTERNAL_LABEL (lab, second ? "LLSDAC" : "LLSDA",
3884                                    current_function_funcdef_no);
3885       ref = gen_rtx_SYMBOL_REF (Pmode, lab);
3886       SYMBOL_REF_FLAGS (ref) = SYMBOL_FLAG_LOCAL;
3887
3888       if (enc & DW_EH_PE_indirect)
3889         ref = dw2_force_const_mem (ref, true);
3890
3891       fprintf (asm_out_file, "\t.cfi_lsda 0x%x,", enc);
3892       output_addr_const (asm_out_file, ref);
3893       fputc ('\n', asm_out_file);
3894     }
3895 }
3896
3897 /* Output a marker (i.e. a label) for the beginning of a function, before
3898    the prologue.  */
3899
3900 void
3901 dwarf2out_begin_prologue (unsigned int line ATTRIBUTE_UNUSED,
3902                           const char *file ATTRIBUTE_UNUSED)
3903 {
3904   char label[MAX_ARTIFICIAL_LABEL_BYTES];
3905   char * dup_label;
3906   dw_fde_ref fde;
3907   section *fnsec;
3908
3909   current_function_func_begin_label = NULL;
3910
3911 #ifdef TARGET_UNWIND_INFO
3912   /* ??? current_function_func_begin_label is also used by except.c
3913      for call-site information.  We must emit this label if it might
3914      be used.  */
3915   if ((! flag_exceptions || USING_SJLJ_EXCEPTIONS)
3916       && ! dwarf2out_do_frame ())
3917     return;
3918 #else
3919   if (! dwarf2out_do_frame ())
3920     return;
3921 #endif
3922
3923   fnsec = function_section (current_function_decl);
3924   switch_to_section (fnsec);
3925   ASM_GENERATE_INTERNAL_LABEL (label, FUNC_BEGIN_LABEL,
3926                                current_function_funcdef_no);
3927   ASM_OUTPUT_DEBUG_LABEL (asm_out_file, FUNC_BEGIN_LABEL,
3928                           current_function_funcdef_no);
3929   dup_label = xstrdup (label);
3930   current_function_func_begin_label = dup_label;
3931
3932 #ifdef TARGET_UNWIND_INFO
3933   /* We can elide the fde allocation if we're not emitting debug info.  */
3934   if (! dwarf2out_do_frame ())
3935     return;
3936 #endif
3937
3938   /* Expand the fde table if necessary.  */
3939   if (fde_table_in_use == fde_table_allocated)
3940     {
3941       fde_table_allocated += FDE_TABLE_INCREMENT;
3942       fde_table = GGC_RESIZEVEC (dw_fde_node, fde_table, fde_table_allocated);
3943       memset (fde_table + fde_table_in_use, 0,
3944               FDE_TABLE_INCREMENT * sizeof (dw_fde_node));
3945     }
3946
3947   /* Record the FDE associated with this function.  */
3948   current_funcdef_fde = fde_table_in_use;
3949
3950   /* Add the new FDE at the end of the fde_table.  */
3951   fde = &fde_table[fde_table_in_use++];
3952   fde->decl = current_function_decl;
3953   fde->dw_fde_begin = dup_label;
3954   fde->dw_fde_current_label = dup_label;
3955   fde->dw_fde_hot_section_label = NULL;
3956   fde->dw_fde_hot_section_end_label = NULL;
3957   fde->dw_fde_unlikely_section_label = NULL;
3958   fde->dw_fde_unlikely_section_end_label = NULL;
3959   fde->dw_fde_switched_sections = 0;
3960   fde->dw_fde_switched_cold_to_hot = 0;
3961   fde->dw_fde_end = NULL;
3962   fde->dw_fde_cfi = NULL;
3963   fde->dw_fde_switch_cfi = NULL;
3964   fde->funcdef_number = current_function_funcdef_no;
3965   fde->nothrow = crtl->nothrow;
3966   fde->uses_eh_lsda = crtl->uses_eh_lsda;
3967   fde->all_throwers_are_sibcalls = crtl->all_throwers_are_sibcalls;
3968   fde->drap_reg = INVALID_REGNUM;
3969   fde->vdrap_reg = INVALID_REGNUM;
3970   if (flag_reorder_blocks_and_partition)
3971     {
3972       section *unlikelysec;
3973       if (first_function_block_is_cold)
3974         fde->in_std_section = 1;
3975       else
3976         fde->in_std_section
3977           = (fnsec == text_section
3978              || (cold_text_section && fnsec == cold_text_section));
3979       unlikelysec = unlikely_text_section ();
3980       fde->cold_in_std_section
3981         = (unlikelysec == text_section
3982            || (cold_text_section && unlikelysec == cold_text_section));
3983     }
3984   else
3985     {
3986       fde->in_std_section
3987         = (fnsec == text_section
3988            || (cold_text_section && fnsec == cold_text_section));
3989       fde->cold_in_std_section = 0;
3990     }
3991
3992   args_size = old_args_size = 0;
3993
3994   /* We only want to output line number information for the genuine dwarf2
3995      prologue case, not the eh frame case.  */
3996 #ifdef DWARF2_DEBUGGING_INFO
3997   if (file)
3998     dwarf2out_source_line (line, file, 0, true);
3999 #endif
4000
4001   if (dwarf2out_do_cfi_asm ())
4002     dwarf2out_do_cfi_startproc (false);
4003   else
4004     {
4005       rtx personality = get_personality_function (current_function_decl);
4006       if (!current_unit_personality)
4007         current_unit_personality = personality;
4008
4009       /* We cannot keep a current personality per function as without CFI
4010          asm at the point where we emit the CFI data there is no current
4011          function anymore.  */
4012       if (personality
4013           && current_unit_personality != personality)
4014         sorry ("Multiple EH personalities are supported only with assemblers "
4015                "supporting .cfi.personality directive.");
4016     }
4017 }
4018
4019 /* Output a marker (i.e. a label) for the absolute end of the generated code
4020    for a function definition.  This gets called *after* the epilogue code has
4021    been generated.  */
4022
4023 void
4024 dwarf2out_end_epilogue (unsigned int line ATTRIBUTE_UNUSED,
4025                         const char *file ATTRIBUTE_UNUSED)
4026 {
4027   dw_fde_ref fde;
4028   char label[MAX_ARTIFICIAL_LABEL_BYTES];
4029
4030 #ifdef DWARF2_DEBUGGING_INFO
4031   last_var_location_insn = NULL_RTX;
4032 #endif
4033
4034   if (dwarf2out_do_cfi_asm ())
4035     fprintf (asm_out_file, "\t.cfi_endproc\n");
4036
4037   /* Output a label to mark the endpoint of the code generated for this
4038      function.  */
4039   ASM_GENERATE_INTERNAL_LABEL (label, FUNC_END_LABEL,
4040                                current_function_funcdef_no);
4041   ASM_OUTPUT_LABEL (asm_out_file, label);
4042   fde = current_fde ();
4043   gcc_assert (fde != NULL);
4044   fde->dw_fde_end = xstrdup (label);
4045 }
4046
4047 void
4048 dwarf2out_frame_init (void)
4049 {
4050   /* Allocate the initial hunk of the fde_table.  */
4051   fde_table = GGC_CNEWVEC (dw_fde_node, FDE_TABLE_INCREMENT);
4052   fde_table_allocated = FDE_TABLE_INCREMENT;
4053   fde_table_in_use = 0;
4054
4055   /* Generate the CFA instructions common to all FDE's.  Do it now for the
4056      sake of lookup_cfa.  */
4057
4058   /* On entry, the Canonical Frame Address is at SP.  */
4059   dwarf2out_def_cfa (NULL, STACK_POINTER_REGNUM, INCOMING_FRAME_SP_OFFSET);
4060
4061 #ifdef DWARF2_UNWIND_INFO
4062   if (DWARF2_UNWIND_INFO || DWARF2_FRAME_INFO)
4063     initial_return_save (INCOMING_RETURN_ADDR_RTX);
4064 #endif
4065 }
4066
4067 void
4068 dwarf2out_frame_finish (void)
4069 {
4070   /* Output call frame information.  */
4071   if (DWARF2_FRAME_INFO)
4072     output_call_frame_info (0);
4073
4074 #ifndef TARGET_UNWIND_INFO
4075   /* Output another copy for the unwinder.  */
4076   if (! USING_SJLJ_EXCEPTIONS && (flag_unwind_tables || flag_exceptions))
4077     output_call_frame_info (1);
4078 #endif
4079 }
4080
4081 /* Note that the current function section is being used for code.  */
4082
4083 static void
4084 dwarf2out_note_section_used (void)
4085 {
4086   section *sec = current_function_section ();
4087   if (sec == text_section)
4088     text_section_used = true;
4089   else if (sec == cold_text_section)
4090     cold_text_section_used = true;
4091 }
4092
4093 void
4094 dwarf2out_switch_text_section (void)
4095 {
4096   dw_fde_ref fde = current_fde ();
4097
4098   gcc_assert (cfun && fde && !fde->dw_fde_switched_sections);
4099
4100   fde->dw_fde_switched_sections = 1;
4101   fde->dw_fde_switched_cold_to_hot = !in_cold_section_p;
4102
4103   fde->dw_fde_hot_section_label = crtl->subsections.hot_section_label;
4104   fde->dw_fde_hot_section_end_label = crtl->subsections.hot_section_end_label;
4105   fde->dw_fde_unlikely_section_label = crtl->subsections.cold_section_label;
4106   fde->dw_fde_unlikely_section_end_label = crtl->subsections.cold_section_end_label;
4107   have_multiple_function_sections = true;
4108
4109   /* Reset the current label on switching text sections, so that we
4110      don't attempt to advance_loc4 between labels in different sections.  */
4111   fde->dw_fde_current_label = NULL;
4112
4113   /* There is no need to mark used sections when not debugging.  */
4114   if (cold_text_section != NULL)
4115     dwarf2out_note_section_used ();
4116
4117   if (dwarf2out_do_cfi_asm ())
4118     fprintf (asm_out_file, "\t.cfi_endproc\n");
4119
4120   /* Now do the real section switch.  */
4121   switch_to_section (current_function_section ());
4122
4123   if (dwarf2out_do_cfi_asm ())
4124     {
4125       dwarf2out_do_cfi_startproc (true);
4126       /* As this is a different FDE, insert all current CFI instructions
4127          again.  */
4128       output_cfis (fde->dw_fde_cfi, true, fde, true);
4129     }
4130   else
4131     {
4132       dw_cfi_ref cfi = fde->dw_fde_cfi;
4133
4134       cfi = fde->dw_fde_cfi;
4135       if (cfi)
4136         while (cfi->dw_cfi_next != NULL)
4137           cfi = cfi->dw_cfi_next;
4138       fde->dw_fde_switch_cfi = cfi;
4139     }
4140 }
4141 #endif
4142 \f
4143 /* And now, the subset of the debugging information support code necessary
4144    for emitting location expressions.  */
4145
4146 /* Data about a single source file.  */
4147 struct GTY(()) dwarf_file_data {
4148   const char * filename;
4149   int emitted_number;
4150 };
4151
4152 typedef struct dw_val_struct *dw_val_ref;
4153 typedef struct die_struct *dw_die_ref;
4154 typedef const struct die_struct *const_dw_die_ref;
4155 typedef struct dw_loc_descr_struct *dw_loc_descr_ref;
4156 typedef struct dw_loc_list_struct *dw_loc_list_ref;
4157
4158 typedef struct GTY(()) deferred_locations_struct
4159 {
4160   tree variable;
4161   dw_die_ref die;
4162 } deferred_locations;
4163
4164 DEF_VEC_O(deferred_locations);
4165 DEF_VEC_ALLOC_O(deferred_locations,gc);
4166
4167 static GTY(()) VEC(deferred_locations, gc) *deferred_locations_list;
4168
4169 DEF_VEC_P(dw_die_ref);
4170 DEF_VEC_ALLOC_P(dw_die_ref,heap);
4171
4172 /* Each DIE may have a series of attribute/value pairs.  Values
4173    can take on several forms.  The forms that are used in this
4174    implementation are listed below.  */
4175
4176 enum dw_val_class
4177 {
4178   dw_val_class_addr,
4179   dw_val_class_offset,
4180   dw_val_class_loc,
4181   dw_val_class_loc_list,
4182   dw_val_class_range_list,
4183   dw_val_class_const,
4184   dw_val_class_unsigned_const,
4185   dw_val_class_const_double,
4186   dw_val_class_vec,
4187   dw_val_class_flag,
4188   dw_val_class_die_ref,
4189   dw_val_class_fde_ref,
4190   dw_val_class_lbl_id,
4191   dw_val_class_lineptr,
4192   dw_val_class_str,
4193   dw_val_class_macptr,
4194   dw_val_class_file,
4195   dw_val_class_data8
4196 };
4197
4198 /* Describe a floating point constant value, or a vector constant value.  */
4199
4200 typedef struct GTY(()) dw_vec_struct {
4201   unsigned char * GTY((length ("%h.length"))) array;
4202   unsigned length;
4203   unsigned elt_size;
4204 }
4205 dw_vec_const;
4206
4207 /* The dw_val_node describes an attribute's value, as it is
4208    represented internally.  */
4209
4210 typedef struct GTY(()) dw_val_struct {
4211   enum dw_val_class val_class;
4212   union dw_val_struct_union
4213     {
4214       rtx GTY ((tag ("dw_val_class_addr"))) val_addr;
4215       unsigned HOST_WIDE_INT GTY ((tag ("dw_val_class_offset"))) val_offset;
4216       dw_loc_list_ref GTY ((tag ("dw_val_class_loc_list"))) val_loc_list;
4217       dw_loc_descr_ref GTY ((tag ("dw_val_class_loc"))) val_loc;
4218       HOST_WIDE_INT GTY ((default)) val_int;
4219       unsigned HOST_WIDE_INT GTY ((tag ("dw_val_class_unsigned_const"))) val_unsigned;
4220       double_int GTY ((tag ("dw_val_class_const_double"))) val_double;
4221       dw_vec_const GTY ((tag ("dw_val_class_vec"))) val_vec;
4222       struct dw_val_die_union
4223         {
4224           dw_die_ref die;
4225           int external;
4226         } GTY ((tag ("dw_val_class_die_ref"))) val_die_ref;
4227       unsigned GTY ((tag ("dw_val_class_fde_ref"))) val_fde_index;
4228       struct indirect_string_node * GTY ((tag ("dw_val_class_str"))) val_str;
4229       char * GTY ((tag ("dw_val_class_lbl_id"))) val_lbl_id;
4230       unsigned char GTY ((tag ("dw_val_class_flag"))) val_flag;
4231       struct dwarf_file_data * GTY ((tag ("dw_val_class_file"))) val_file;
4232       unsigned char GTY ((tag ("dw_val_class_data8"))) val_data8[8];
4233     }
4234   GTY ((desc ("%1.val_class"))) v;
4235 }
4236 dw_val_node;
4237
4238 /* Locations in memory are described using a sequence of stack machine
4239    operations.  */
4240
4241 typedef struct GTY(()) dw_loc_descr_struct {
4242   dw_loc_descr_ref dw_loc_next;
4243   ENUM_BITFIELD (dwarf_location_atom) dw_loc_opc : 8;
4244   /* Used to distinguish DW_OP_addr with a direct symbol relocation
4245      from DW_OP_addr with a dtp-relative symbol relocation.  */
4246   unsigned int dtprel : 1;
4247   int dw_loc_addr;
4248   dw_val_node dw_loc_oprnd1;
4249   dw_val_node dw_loc_oprnd2;
4250 }
4251 dw_loc_descr_node;
4252
4253 /* Location lists are ranges + location descriptions for that range,
4254    so you can track variables that are in different places over
4255    their entire life.  */
4256 typedef struct GTY(()) dw_loc_list_struct {
4257   dw_loc_list_ref dw_loc_next;
4258   const char *begin; /* Label for begin address of range */
4259   const char *end;  /* Label for end address of range */
4260   char *ll_symbol; /* Label for beginning of location list.
4261                       Only on head of list */
4262   const char *section; /* Section this loclist is relative to */
4263   dw_loc_descr_ref expr;
4264 } dw_loc_list_node;
4265
4266 #if defined (DWARF2_DEBUGGING_INFO) || defined (DWARF2_UNWIND_INFO)
4267
4268 static dw_loc_descr_ref int_loc_descriptor (HOST_WIDE_INT);
4269
4270 /* Convert a DWARF stack opcode into its string name.  */
4271
4272 static const char *
4273 dwarf_stack_op_name (unsigned int op)
4274 {
4275   switch (op)
4276     {
4277     case DW_OP_addr:
4278       return "DW_OP_addr";
4279     case DW_OP_deref:
4280       return "DW_OP_deref";
4281     case DW_OP_const1u:
4282       return "DW_OP_const1u";
4283     case DW_OP_const1s:
4284       return "DW_OP_const1s";
4285     case DW_OP_const2u:
4286       return "DW_OP_const2u";
4287     case DW_OP_const2s:
4288       return "DW_OP_const2s";
4289     case DW_OP_const4u:
4290       return "DW_OP_const4u";
4291     case DW_OP_const4s:
4292       return "DW_OP_const4s";
4293     case DW_OP_const8u:
4294       return "DW_OP_const8u";
4295     case DW_OP_const8s:
4296       return "DW_OP_const8s";
4297     case DW_OP_constu:
4298       return "DW_OP_constu";
4299     case DW_OP_consts:
4300       return "DW_OP_consts";
4301     case DW_OP_dup:
4302       return "DW_OP_dup";
4303     case DW_OP_drop:
4304       return "DW_OP_drop";
4305     case DW_OP_over:
4306       return "DW_OP_over";
4307     case DW_OP_pick:
4308       return "DW_OP_pick";
4309     case DW_OP_swap:
4310       return "DW_OP_swap";
4311     case DW_OP_rot:
4312       return "DW_OP_rot";
4313     case DW_OP_xderef:
4314       return "DW_OP_xderef";
4315     case DW_OP_abs:
4316       return "DW_OP_abs";
4317     case DW_OP_and:
4318       return "DW_OP_and";
4319     case DW_OP_div:
4320       return "DW_OP_div";
4321     case DW_OP_minus:
4322       return "DW_OP_minus";
4323     case DW_OP_mod:
4324       return "DW_OP_mod";
4325     case DW_OP_mul:
4326       return "DW_OP_mul";
4327     case DW_OP_neg:
4328       return "DW_OP_neg";
4329     case DW_OP_not:
4330       return "DW_OP_not";
4331     case DW_OP_or:
4332       return "DW_OP_or";
4333     case DW_OP_plus:
4334       return "DW_OP_plus";
4335     case DW_OP_plus_uconst:
4336       return "DW_OP_plus_uconst";
4337     case DW_OP_shl:
4338       return "DW_OP_shl";
4339     case DW_OP_shr:
4340       return "DW_OP_shr";
4341     case DW_OP_shra:
4342       return "DW_OP_shra";
4343     case DW_OP_xor:
4344       return "DW_OP_xor";
4345     case DW_OP_bra:
4346       return "DW_OP_bra";
4347     case DW_OP_eq:
4348       return "DW_OP_eq";
4349     case DW_OP_ge:
4350       return "DW_OP_ge";
4351     case DW_OP_gt:
4352       return "DW_OP_gt";
4353     case DW_OP_le:
4354       return "DW_OP_le";
4355     case DW_OP_lt:
4356       return "DW_OP_lt";
4357     case DW_OP_ne:
4358       return "DW_OP_ne";
4359     case DW_OP_skip:
4360       return "DW_OP_skip";
4361     case DW_OP_lit0:
4362       return "DW_OP_lit0";
4363     case DW_OP_lit1:
4364       return "DW_OP_lit1";
4365     case DW_OP_lit2:
4366       return "DW_OP_lit2";
4367     case DW_OP_lit3:
4368       return "DW_OP_lit3";
4369     case DW_OP_lit4:
4370       return "DW_OP_lit4";
4371     case DW_OP_lit5:
4372       return "DW_OP_lit5";
4373     case DW_OP_lit6:
4374       return "DW_OP_lit6";
4375     case DW_OP_lit7:
4376       return "DW_OP_lit7";
4377     case DW_OP_lit8:
4378       return "DW_OP_lit8";
4379     case DW_OP_lit9:
4380       return "DW_OP_lit9";
4381     case DW_OP_lit10:
4382       return "DW_OP_lit10";
4383     case DW_OP_lit11:
4384       return "DW_OP_lit11";
4385     case DW_OP_lit12:
4386       return "DW_OP_lit12";
4387     case DW_OP_lit13:
4388       return "DW_OP_lit13";
4389     case DW_OP_lit14:
4390       return "DW_OP_lit14";
4391     case DW_OP_lit15:
4392       return "DW_OP_lit15";
4393     case DW_OP_lit16:
4394       return "DW_OP_lit16";
4395     case DW_OP_lit17:
4396       return "DW_OP_lit17";
4397     case DW_OP_lit18:
4398       return "DW_OP_lit18";
4399     case DW_OP_lit19:
4400       return "DW_OP_lit19";
4401     case DW_OP_lit20:
4402       return "DW_OP_lit20";
4403     case DW_OP_lit21:
4404       return "DW_OP_lit21";
4405     case DW_OP_lit22:
4406       return "DW_OP_lit22";
4407     case DW_OP_lit23:
4408       return "DW_OP_lit23";
4409     case DW_OP_lit24:
4410       return "DW_OP_lit24";
4411     case DW_OP_lit25:
4412       return "DW_OP_lit25";
4413     case DW_OP_lit26:
4414       return "DW_OP_lit26";
4415     case DW_OP_lit27:
4416       return "DW_OP_lit27";
4417     case DW_OP_lit28:
4418       return "DW_OP_lit28";
4419     case DW_OP_lit29:
4420       return "DW_OP_lit29";
4421     case DW_OP_lit30:
4422       return "DW_OP_lit30";
4423     case DW_OP_lit31:
4424       return "DW_OP_lit31";
4425     case DW_OP_reg0:
4426       return "DW_OP_reg0";
4427     case DW_OP_reg1:
4428       return "DW_OP_reg1";
4429     case DW_OP_reg2:
4430       return "DW_OP_reg2";
4431     case DW_OP_reg3:
4432       return "DW_OP_reg3";
4433     case DW_OP_reg4:
4434       return "DW_OP_reg4";
4435     case DW_OP_reg5:
4436       return "DW_OP_reg5";
4437     case DW_OP_reg6:
4438       return "DW_OP_reg6";
4439     case DW_OP_reg7:
4440       return "DW_OP_reg7";
4441     case DW_OP_reg8:
4442       return "DW_OP_reg8";
4443     case DW_OP_reg9:
4444       return "DW_OP_reg9";
4445     case DW_OP_reg10:
4446       return "DW_OP_reg10";
4447     case DW_OP_reg11:
4448       return "DW_OP_reg11";
4449     case DW_OP_reg12:
4450       return "DW_OP_reg12";
4451     case DW_OP_reg13:
4452       return "DW_OP_reg13";
4453     case DW_OP_reg14:
4454       return "DW_OP_reg14";
4455     case DW_OP_reg15:
4456       return "DW_OP_reg15";
4457     case DW_OP_reg16:
4458       return "DW_OP_reg16";
4459     case DW_OP_reg17:
4460       return "DW_OP_reg17";
4461     case DW_OP_reg18:
4462       return "DW_OP_reg18";
4463     case DW_OP_reg19:
4464       return "DW_OP_reg19";
4465     case DW_OP_reg20:
4466       return "DW_OP_reg20";
4467     case DW_OP_reg21:
4468       return "DW_OP_reg21";
4469     case DW_OP_reg22:
4470       return "DW_OP_reg22";
4471     case DW_OP_reg23:
4472       return "DW_OP_reg23";
4473     case DW_OP_reg24:
4474       return "DW_OP_reg24";
4475     case DW_OP_reg25:
4476       return "DW_OP_reg25";
4477     case DW_OP_reg26:
4478       return "DW_OP_reg26";
4479     case DW_OP_reg27:
4480       return "DW_OP_reg27";
4481     case DW_OP_reg28:
4482       return "DW_OP_reg28";
4483     case DW_OP_reg29:
4484       return "DW_OP_reg29";
4485     case DW_OP_reg30:
4486       return "DW_OP_reg30";
4487     case DW_OP_reg31:
4488       return "DW_OP_reg31";
4489     case DW_OP_breg0:
4490       return "DW_OP_breg0";
4491     case DW_OP_breg1:
4492       return "DW_OP_breg1";
4493     case DW_OP_breg2:
4494       return "DW_OP_breg2";
4495     case DW_OP_breg3:
4496       return "DW_OP_breg3";
4497     case DW_OP_breg4:
4498       return "DW_OP_breg4";
4499     case DW_OP_breg5:
4500       return "DW_OP_breg5";
4501     case DW_OP_breg6:
4502       return "DW_OP_breg6";
4503     case DW_OP_breg7:
4504       return "DW_OP_breg7";
4505     case DW_OP_breg8:
4506       return "DW_OP_breg8";
4507     case DW_OP_breg9:
4508       return "DW_OP_breg9";
4509     case DW_OP_breg10:
4510       return "DW_OP_breg10";
4511     case DW_OP_breg11:
4512       return "DW_OP_breg11";
4513     case DW_OP_breg12:
4514       return "DW_OP_breg12";
4515     case DW_OP_breg13:
4516       return "DW_OP_breg13";
4517     case DW_OP_breg14:
4518       return "DW_OP_breg14";
4519     case DW_OP_breg15:
4520       return "DW_OP_breg15";
4521     case DW_OP_breg16:
4522       return "DW_OP_breg16";
4523     case DW_OP_breg17:
4524       return "DW_OP_breg17";
4525     case DW_OP_breg18:
4526       return "DW_OP_breg18";
4527     case DW_OP_breg19:
4528       return "DW_OP_breg19";
4529     case DW_OP_breg20:
4530       return "DW_OP_breg20";
4531     case DW_OP_breg21:
4532       return "DW_OP_breg21";
4533     case DW_OP_breg22:
4534       return "DW_OP_breg22";
4535     case DW_OP_breg23:
4536       return "DW_OP_breg23";
4537     case DW_OP_breg24:
4538       return "DW_OP_breg24";
4539     case DW_OP_breg25:
4540       return "DW_OP_breg25";
4541     case DW_OP_breg26:
4542       return "DW_OP_breg26";
4543     case DW_OP_breg27:
4544       return "DW_OP_breg27";
4545     case DW_OP_breg28:
4546       return "DW_OP_breg28";
4547     case DW_OP_breg29:
4548       return "DW_OP_breg29";
4549     case DW_OP_breg30:
4550       return "DW_OP_breg30";
4551     case DW_OP_breg31:
4552       return "DW_OP_breg31";
4553     case DW_OP_regx:
4554       return "DW_OP_regx";
4555     case DW_OP_fbreg:
4556       return "DW_OP_fbreg";
4557     case DW_OP_bregx:
4558       return "DW_OP_bregx";
4559     case DW_OP_piece:
4560       return "DW_OP_piece";
4561     case DW_OP_deref_size:
4562       return "DW_OP_deref_size";
4563     case DW_OP_xderef_size:
4564       return "DW_OP_xderef_size";
4565     case DW_OP_nop:
4566       return "DW_OP_nop";
4567
4568     case DW_OP_push_object_address:
4569       return "DW_OP_push_object_address";
4570     case DW_OP_call2:
4571       return "DW_OP_call2";
4572     case DW_OP_call4:
4573       return "DW_OP_call4";
4574     case DW_OP_call_ref:
4575       return "DW_OP_call_ref";
4576     case DW_OP_implicit_value:
4577       return "DW_OP_implicit_value";
4578     case DW_OP_stack_value:
4579       return "DW_OP_stack_value";
4580     case DW_OP_form_tls_address:
4581       return "DW_OP_form_tls_address";
4582     case DW_OP_call_frame_cfa:
4583       return "DW_OP_call_frame_cfa";
4584     case DW_OP_bit_piece:
4585       return "DW_OP_bit_piece";
4586
4587     case DW_OP_GNU_push_tls_address:
4588       return "DW_OP_GNU_push_tls_address";
4589     case DW_OP_GNU_uninit:
4590       return "DW_OP_GNU_uninit";
4591     case DW_OP_GNU_encoded_addr:
4592       return "DW_OP_GNU_encoded_addr";
4593
4594     default:
4595       return "OP_<unknown>";
4596     }
4597 }
4598
4599 /* Return a pointer to a newly allocated location description.  Location
4600    descriptions are simple expression terms that can be strung
4601    together to form more complicated location (address) descriptions.  */
4602
4603 static inline dw_loc_descr_ref
4604 new_loc_descr (enum dwarf_location_atom op, unsigned HOST_WIDE_INT oprnd1,
4605                unsigned HOST_WIDE_INT oprnd2)
4606 {
4607   dw_loc_descr_ref descr = GGC_CNEW (dw_loc_descr_node);
4608
4609   descr->dw_loc_opc = op;
4610   descr->dw_loc_oprnd1.val_class = dw_val_class_unsigned_const;
4611   descr->dw_loc_oprnd1.v.val_unsigned = oprnd1;
4612   descr->dw_loc_oprnd2.val_class = dw_val_class_unsigned_const;
4613   descr->dw_loc_oprnd2.v.val_unsigned = oprnd2;
4614
4615   return descr;
4616 }
4617
4618 /* Return a pointer to a newly allocated location description for
4619    REG and OFFSET.  */
4620
4621 static inline dw_loc_descr_ref
4622 new_reg_loc_descr (unsigned int reg,  unsigned HOST_WIDE_INT offset)
4623 {
4624   if (reg <= 31)
4625     return new_loc_descr ((enum dwarf_location_atom) (DW_OP_breg0 + reg),
4626                           offset, 0);
4627   else
4628     return new_loc_descr (DW_OP_bregx, reg, offset);
4629 }
4630
4631 /* Add a location description term to a location description expression.  */
4632
4633 static inline void
4634 add_loc_descr (dw_loc_descr_ref *list_head, dw_loc_descr_ref descr)
4635 {
4636   dw_loc_descr_ref *d;
4637
4638   /* Find the end of the chain.  */
4639   for (d = list_head; (*d) != NULL; d = &(*d)->dw_loc_next)
4640     ;
4641
4642   *d = descr;
4643 }
4644
4645 /* Add a constant OFFSET to a location expression.  */
4646
4647 static void
4648 loc_descr_plus_const (dw_loc_descr_ref *list_head, HOST_WIDE_INT offset)
4649 {
4650   dw_loc_descr_ref loc;
4651   HOST_WIDE_INT *p;
4652
4653   gcc_assert (*list_head != NULL);
4654
4655   if (!offset)
4656     return;
4657
4658   /* Find the end of the chain.  */
4659   for (loc = *list_head; loc->dw_loc_next != NULL; loc = loc->dw_loc_next)
4660     ;
4661
4662   p = NULL;
4663   if (loc->dw_loc_opc == DW_OP_fbreg
4664       || (loc->dw_loc_opc >= DW_OP_breg0 && loc->dw_loc_opc <= DW_OP_breg31))
4665     p = &loc->dw_loc_oprnd1.v.val_int;
4666   else if (loc->dw_loc_opc == DW_OP_bregx)
4667     p = &loc->dw_loc_oprnd2.v.val_int;
4668
4669   /* If the last operation is fbreg, breg{0..31,x}, optimize by adjusting its
4670      offset.  Don't optimize if an signed integer overflow would happen.  */
4671   if (p != NULL
4672       && ((offset > 0 && *p <= INTTYPE_MAXIMUM (HOST_WIDE_INT) - offset)
4673           || (offset < 0 && *p >= INTTYPE_MINIMUM (HOST_WIDE_INT) - offset)))
4674     *p += offset;
4675
4676   else if (offset > 0)
4677     loc->dw_loc_next = new_loc_descr (DW_OP_plus_uconst, offset, 0);
4678
4679   else
4680     {
4681       loc->dw_loc_next = int_loc_descriptor (offset);
4682       add_loc_descr (&loc->dw_loc_next, new_loc_descr (DW_OP_plus, 0, 0));
4683     }
4684 }
4685
4686 #ifdef DWARF2_DEBUGGING_INFO
4687 /* Add a constant OFFSET to a location list.  */
4688
4689 static void
4690 loc_list_plus_const (dw_loc_list_ref list_head, HOST_WIDE_INT offset)
4691 {
4692   dw_loc_list_ref d;
4693   for (d = list_head; d != NULL; d = d->dw_loc_next)
4694     loc_descr_plus_const (&d->expr, offset);
4695 }
4696 #endif
4697
4698 /* Return the size of a location descriptor.  */
4699
4700 static unsigned long
4701 size_of_loc_descr (dw_loc_descr_ref loc)
4702 {
4703   unsigned long size = 1;
4704
4705   switch (loc->dw_loc_opc)
4706     {
4707     case DW_OP_addr:
4708       size += DWARF2_ADDR_SIZE;
4709       break;
4710     case DW_OP_const1u:
4711     case DW_OP_const1s:
4712       size += 1;
4713       break;
4714     case DW_OP_const2u:
4715     case DW_OP_const2s:
4716       size += 2;
4717       break;
4718     case DW_OP_const4u:
4719     case DW_OP_const4s:
4720       size += 4;
4721       break;
4722     case DW_OP_const8u:
4723     case DW_OP_const8s:
4724       size += 8;
4725       break;
4726     case DW_OP_constu:
4727       size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
4728       break;
4729     case DW_OP_consts:
4730       size += size_of_sleb128 (loc->dw_loc_oprnd1.v.val_int);
4731       break;
4732     case DW_OP_pick:
4733       size += 1;
4734       break;
4735     case DW_OP_plus_uconst:
4736       size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
4737       break;
4738     case DW_OP_skip:
4739     case DW_OP_bra:
4740       size += 2;
4741       break;
4742     case DW_OP_breg0:
4743     case DW_OP_breg1:
4744     case DW_OP_breg2:
4745     case DW_OP_breg3:
4746     case DW_OP_breg4:
4747     case DW_OP_breg5:
4748     case DW_OP_breg6:
4749     case DW_OP_breg7:
4750     case DW_OP_breg8:
4751     case DW_OP_breg9:
4752     case DW_OP_breg10:
4753     case DW_OP_breg11:
4754     case DW_OP_breg12:
4755     case DW_OP_breg13:
4756     case DW_OP_breg14:
4757     case DW_OP_breg15:
4758     case DW_OP_breg16:
4759     case DW_OP_breg17:
4760     case DW_OP_breg18:
4761     case DW_OP_breg19:
4762     case DW_OP_breg20:
4763     case DW_OP_breg21:
4764     case DW_OP_breg22:
4765     case DW_OP_breg23:
4766     case DW_OP_breg24:
4767     case DW_OP_breg25:
4768     case DW_OP_breg26:
4769     case DW_OP_breg27:
4770     case DW_OP_breg28:
4771     case DW_OP_breg29:
4772     case DW_OP_breg30:
4773     case DW_OP_breg31:
4774       size += size_of_sleb128 (loc->dw_loc_oprnd1.v.val_int);
4775       break;
4776     case DW_OP_regx:
4777       size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
4778       break;
4779     case DW_OP_fbreg:
4780       size += size_of_sleb128 (loc->dw_loc_oprnd1.v.val_int);
4781       break;
4782     case DW_OP_bregx:
4783       size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
4784       size += size_of_sleb128 (loc->dw_loc_oprnd2.v.val_int);
4785       break;
4786     case DW_OP_piece:
4787       size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
4788       break;
4789     case DW_OP_deref_size:
4790     case DW_OP_xderef_size:
4791       size += 1;
4792       break;
4793     case DW_OP_call2:
4794       size += 2;
4795       break;
4796     case DW_OP_call4:
4797       size += 4;
4798       break;
4799     case DW_OP_call_ref:
4800       size += DWARF2_ADDR_SIZE;
4801       break;
4802     case DW_OP_implicit_value:
4803       size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned)
4804               + loc->dw_loc_oprnd1.v.val_unsigned;
4805       break;
4806     default:
4807       break;
4808     }
4809
4810   return size;
4811 }
4812
4813 /* Return the size of a series of location descriptors.  */
4814
4815 static unsigned long
4816 size_of_locs (dw_loc_descr_ref loc)
4817 {
4818   dw_loc_descr_ref l;
4819   unsigned long size;
4820
4821   /* If there are no skip or bra opcodes, don't fill in the dw_loc_addr
4822      field, to avoid writing to a PCH file.  */
4823   for (size = 0, l = loc; l != NULL; l = l->dw_loc_next)
4824     {
4825       if (l->dw_loc_opc == DW_OP_skip || l->dw_loc_opc == DW_OP_bra)
4826         break;
4827       size += size_of_loc_descr (l);
4828     }
4829   if (! l)
4830     return size;
4831
4832   for (size = 0, l = loc; l != NULL; l = l->dw_loc_next)
4833     {
4834       l->dw_loc_addr = size;
4835       size += size_of_loc_descr (l);
4836     }
4837
4838   return size;
4839 }
4840
4841 #ifdef DWARF2_DEBUGGING_INFO
4842 static HOST_WIDE_INT extract_int (const unsigned char *, unsigned);
4843 #endif
4844
4845 /* Output location description stack opcode's operands (if any).  */
4846
4847 static void
4848 output_loc_operands (dw_loc_descr_ref loc)
4849 {
4850   dw_val_ref val1 = &loc->dw_loc_oprnd1;
4851   dw_val_ref val2 = &loc->dw_loc_oprnd2;
4852
4853   switch (loc->dw_loc_opc)
4854     {
4855 #ifdef DWARF2_DEBUGGING_INFO
4856     case DW_OP_const2u:
4857     case DW_OP_const2s:
4858       dw2_asm_output_data (2, val1->v.val_int, NULL);
4859       break;
4860     case DW_OP_const4u:
4861     case DW_OP_const4s:
4862       dw2_asm_output_data (4, val1->v.val_int, NULL);
4863       break;
4864     case DW_OP_const8u:
4865     case DW_OP_const8s:
4866       gcc_assert (HOST_BITS_PER_WIDE_INT >= 64);
4867       dw2_asm_output_data (8, val1->v.val_int, NULL);
4868       break;
4869     case DW_OP_skip:
4870     case DW_OP_bra:
4871       {
4872         int offset;
4873
4874         gcc_assert (val1->val_class == dw_val_class_loc);
4875         offset = val1->v.val_loc->dw_loc_addr - (loc->dw_loc_addr + 3);
4876
4877         dw2_asm_output_data (2, offset, NULL);
4878       }
4879       break;
4880     case DW_OP_implicit_value:
4881       dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
4882       switch (val2->val_class)
4883         {
4884         case dw_val_class_const:
4885           dw2_asm_output_data (val1->v.val_unsigned, val2->v.val_int, NULL);
4886           break;
4887         case dw_val_class_vec:
4888           {
4889             unsigned int elt_size = val2->v.val_vec.elt_size;
4890             unsigned int len = val2->v.val_vec.length;
4891             unsigned int i;
4892             unsigned char *p;
4893
4894             if (elt_size > sizeof (HOST_WIDE_INT))
4895               {
4896                 elt_size /= 2;
4897                 len *= 2;
4898               }
4899             for (i = 0, p = val2->v.val_vec.array;
4900                  i < len;
4901                  i++, p += elt_size)
4902               dw2_asm_output_data (elt_size, extract_int (p, elt_size),
4903                                    "fp or vector constant word %u", i);
4904           }
4905           break;
4906         case dw_val_class_const_double:
4907           {
4908             unsigned HOST_WIDE_INT first, second;
4909
4910             if (WORDS_BIG_ENDIAN)
4911               {
4912                 first = val2->v.val_double.high;
4913                 second = val2->v.val_double.low;
4914               }
4915             else
4916               {
4917                 first = val2->v.val_double.low;
4918                 second = val2->v.val_double.high;
4919               }
4920             dw2_asm_output_data (HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR,
4921                                  first, NULL);
4922             dw2_asm_output_data (HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR,
4923                                  second, NULL);
4924           }
4925           break;
4926         case dw_val_class_addr:
4927           gcc_assert (val1->v.val_unsigned == DWARF2_ADDR_SIZE);
4928           dw2_asm_output_addr_rtx (DWARF2_ADDR_SIZE, val2->v.val_addr, NULL);
4929           break;
4930         default:
4931           gcc_unreachable ();
4932         }
4933       break;
4934 #else
4935     case DW_OP_const2u:
4936     case DW_OP_const2s:
4937     case DW_OP_const4u:
4938     case DW_OP_const4s:
4939     case DW_OP_const8u:
4940     case DW_OP_const8s:
4941     case DW_OP_skip:
4942     case DW_OP_bra:
4943     case DW_OP_implicit_value:
4944       /* We currently don't make any attempt to make sure these are
4945          aligned properly like we do for the main unwind info, so
4946          don't support emitting things larger than a byte if we're
4947          only doing unwinding.  */
4948       gcc_unreachable ();
4949 #endif
4950     case DW_OP_const1u:
4951     case DW_OP_const1s:
4952       dw2_asm_output_data (1, val1->v.val_int, NULL);
4953       break;
4954     case DW_OP_constu:
4955       dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
4956       break;
4957     case DW_OP_consts:
4958       dw2_asm_output_data_sleb128 (val1->v.val_int, NULL);
4959       break;
4960     case DW_OP_pick:
4961       dw2_asm_output_data (1, val1->v.val_int, NULL);
4962       break;
4963     case DW_OP_plus_uconst:
4964       dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
4965       break;
4966     case DW_OP_breg0:
4967     case DW_OP_breg1:
4968     case DW_OP_breg2:
4969     case DW_OP_breg3:
4970     case DW_OP_breg4:
4971     case DW_OP_breg5:
4972     case DW_OP_breg6:
4973     case DW_OP_breg7:
4974     case DW_OP_breg8:
4975     case DW_OP_breg9:
4976     case DW_OP_breg10:
4977     case DW_OP_breg11:
4978     case DW_OP_breg12:
4979     case DW_OP_breg13:
4980     case DW_OP_breg14:
4981     case DW_OP_breg15:
4982     case DW_OP_breg16:
4983     case DW_OP_breg17:
4984     case DW_OP_breg18:
4985     case DW_OP_breg19:
4986     case DW_OP_breg20:
4987     case DW_OP_breg21:
4988     case DW_OP_breg22:
4989     case DW_OP_breg23:
4990     case DW_OP_breg24:
4991     case DW_OP_breg25:
4992     case DW_OP_breg26:
4993     case DW_OP_breg27:
4994     case DW_OP_breg28:
4995     case DW_OP_breg29:
4996     case DW_OP_breg30:
4997     case DW_OP_breg31:
4998       dw2_asm_output_data_sleb128 (val1->v.val_int, NULL);
4999       break;
5000     case DW_OP_regx:
5001       dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
5002       break;
5003     case DW_OP_fbreg:
5004       dw2_asm_output_data_sleb128 (val1->v.val_int, NULL);
5005       break;
5006     case DW_OP_bregx:
5007       dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
5008       dw2_asm_output_data_sleb128 (val2->v.val_int, NULL);
5009       break;
5010     case DW_OP_piece:
5011       dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
5012       break;
5013     case DW_OP_deref_size:
5014     case DW_OP_xderef_size:
5015       dw2_asm_output_data (1, val1->v.val_int, NULL);
5016       break;
5017
5018     case DW_OP_addr:
5019       if (loc->dtprel)
5020         {
5021           if (targetm.asm_out.output_dwarf_dtprel)
5022             {
5023               targetm.asm_out.output_dwarf_dtprel (asm_out_file,
5024                                                    DWARF2_ADDR_SIZE,
5025                                                    val1->v.val_addr);
5026               fputc ('\n', asm_out_file);
5027             }
5028           else
5029             gcc_unreachable ();
5030         }
5031       else
5032         {
5033 #ifdef DWARF2_DEBUGGING_INFO
5034           dw2_asm_output_addr_rtx (DWARF2_ADDR_SIZE, val1->v.val_addr, NULL);
5035 #else
5036           gcc_unreachable ();
5037 #endif
5038         }
5039       break;
5040
5041     default:
5042       /* Other codes have no operands.  */
5043       break;
5044     }
5045 }
5046
5047 /* Output a sequence of location operations.  */
5048
5049 static void
5050 output_loc_sequence (dw_loc_descr_ref loc)
5051 {
5052   for (; loc != NULL; loc = loc->dw_loc_next)
5053     {
5054       /* Output the opcode.  */
5055       dw2_asm_output_data (1, loc->dw_loc_opc,
5056                            "%s", dwarf_stack_op_name (loc->dw_loc_opc));
5057
5058       /* Output the operand(s) (if any).  */
5059       output_loc_operands (loc);
5060     }
5061 }
5062
5063 /* Output location description stack opcode's operands (if any).
5064    The output is single bytes on a line, suitable for .cfi_escape.  */
5065
5066 static void
5067 output_loc_operands_raw (dw_loc_descr_ref loc)
5068 {
5069   dw_val_ref val1 = &loc->dw_loc_oprnd1;
5070   dw_val_ref val2 = &loc->dw_loc_oprnd2;
5071
5072   switch (loc->dw_loc_opc)
5073     {
5074     case DW_OP_addr:
5075     case DW_OP_implicit_value:
5076       /* We cannot output addresses in .cfi_escape, only bytes.  */
5077       gcc_unreachable ();
5078
5079     case DW_OP_const1u:
5080     case DW_OP_const1s:
5081     case DW_OP_pick:
5082     case DW_OP_deref_size:
5083     case DW_OP_xderef_size:
5084       fputc (',', asm_out_file);
5085       dw2_asm_output_data_raw (1, val1->v.val_int);
5086       break;
5087
5088     case DW_OP_const2u:
5089     case DW_OP_const2s:
5090       fputc (',', asm_out_file);
5091       dw2_asm_output_data_raw (2, val1->v.val_int);
5092       break;
5093
5094     case DW_OP_const4u:
5095     case DW_OP_const4s:
5096       fputc (',', asm_out_file);
5097       dw2_asm_output_data_raw (4, val1->v.val_int);
5098       break;
5099
5100     case DW_OP_const8u:
5101     case DW_OP_const8s:
5102       gcc_assert (HOST_BITS_PER_WIDE_INT >= 64);
5103       fputc (',', asm_out_file);
5104       dw2_asm_output_data_raw (8, val1->v.val_int);
5105       break;
5106
5107     case DW_OP_skip:
5108     case DW_OP_bra:
5109       {
5110         int offset;
5111
5112         gcc_assert (val1->val_class == dw_val_class_loc);
5113         offset = val1->v.val_loc->dw_loc_addr - (loc->dw_loc_addr + 3);
5114
5115         fputc (',', asm_out_file);
5116         dw2_asm_output_data_raw (2, offset);
5117       }
5118       break;
5119
5120     case DW_OP_constu:
5121     case DW_OP_plus_uconst:
5122     case DW_OP_regx:
5123     case DW_OP_piece:
5124       fputc (',', asm_out_file);
5125       dw2_asm_output_data_uleb128_raw (val1->v.val_unsigned);
5126       break;
5127
5128     case DW_OP_consts:
5129     case DW_OP_breg0:
5130     case DW_OP_breg1:
5131     case DW_OP_breg2:
5132     case DW_OP_breg3:
5133     case DW_OP_breg4:
5134     case DW_OP_breg5:
5135     case DW_OP_breg6:
5136     case DW_OP_breg7:
5137     case DW_OP_breg8:
5138     case DW_OP_breg9:
5139     case DW_OP_breg10:
5140     case DW_OP_breg11:
5141     case DW_OP_breg12:
5142     case DW_OP_breg13:
5143     case DW_OP_breg14:
5144     case DW_OP_breg15:
5145     case DW_OP_breg16:
5146     case DW_OP_breg17:
5147     case DW_OP_breg18:
5148     case DW_OP_breg19:
5149     case DW_OP_breg20:
5150     case DW_OP_breg21:
5151     case DW_OP_breg22:
5152     case DW_OP_breg23:
5153     case DW_OP_breg24:
5154     case DW_OP_breg25:
5155     case DW_OP_breg26:
5156     case DW_OP_breg27:
5157     case DW_OP_breg28:
5158     case DW_OP_breg29:
5159     case DW_OP_breg30:
5160     case DW_OP_breg31:
5161     case DW_OP_fbreg:
5162       fputc (',', asm_out_file);
5163       dw2_asm_output_data_sleb128_raw (val1->v.val_int);
5164       break;
5165
5166     case DW_OP_bregx:
5167       fputc (',', asm_out_file);
5168       dw2_asm_output_data_uleb128_raw (val1->v.val_unsigned);
5169       fputc (',', asm_out_file);
5170       dw2_asm_output_data_sleb128_raw (val2->v.val_int);
5171       break;
5172
5173     default:
5174       /* Other codes have no operands.  */
5175       break;
5176     }
5177 }
5178
5179 static void
5180 output_loc_sequence_raw (dw_loc_descr_ref loc)
5181 {
5182   while (1)
5183     {
5184       /* Output the opcode.  */
5185       fprintf (asm_out_file, "0x%x", loc->dw_loc_opc);
5186       output_loc_operands_raw (loc);
5187
5188       if (!loc->dw_loc_next)
5189         break;
5190       loc = loc->dw_loc_next;
5191
5192       fputc (',', asm_out_file);
5193     }
5194 }
5195
5196 /* This routine will generate the correct assembly data for a location
5197    description based on a cfi entry with a complex address.  */
5198
5199 static void
5200 output_cfa_loc (dw_cfi_ref cfi)
5201 {
5202   dw_loc_descr_ref loc;
5203   unsigned long size;
5204
5205   if (cfi->dw_cfi_opc == DW_CFA_expression)
5206     dw2_asm_output_data (1, cfi->dw_cfi_oprnd2.dw_cfi_reg_num, NULL);
5207
5208   /* Output the size of the block.  */
5209   loc = cfi->dw_cfi_oprnd1.dw_cfi_loc;
5210   size = size_of_locs (loc);
5211   dw2_asm_output_data_uleb128 (size, NULL);
5212
5213   /* Now output the operations themselves.  */
5214   output_loc_sequence (loc);
5215 }
5216
5217 /* Similar, but used for .cfi_escape.  */
5218
5219 static void
5220 output_cfa_loc_raw (dw_cfi_ref cfi)
5221 {
5222   dw_loc_descr_ref loc;
5223   unsigned long size;
5224
5225   if (cfi->dw_cfi_opc == DW_CFA_expression)
5226     fprintf (asm_out_file, "0x%x,", cfi->dw_cfi_oprnd2.dw_cfi_reg_num);
5227
5228   /* Output the size of the block.  */
5229   loc = cfi->dw_cfi_oprnd1.dw_cfi_loc;
5230   size = size_of_locs (loc);
5231   dw2_asm_output_data_uleb128_raw (size);
5232   fputc (',', asm_out_file);
5233
5234   /* Now output the operations themselves.  */
5235   output_loc_sequence_raw (loc);
5236 }
5237
5238 /* This function builds a dwarf location descriptor sequence from a
5239    dw_cfa_location, adding the given OFFSET to the result of the
5240    expression.  */
5241
5242 static struct dw_loc_descr_struct *
5243 build_cfa_loc (dw_cfa_location *cfa, HOST_WIDE_INT offset)
5244 {
5245   struct dw_loc_descr_struct *head, *tmp;
5246
5247   offset += cfa->offset;
5248
5249   if (cfa->indirect)
5250     {
5251       head = new_reg_loc_descr (cfa->reg, cfa->base_offset);
5252       head->dw_loc_oprnd1.val_class = dw_val_class_const;
5253       tmp = new_loc_descr (DW_OP_deref, 0, 0);
5254       add_loc_descr (&head, tmp);
5255       if (offset != 0)
5256         {
5257           tmp = new_loc_descr (DW_OP_plus_uconst, offset, 0);
5258           add_loc_descr (&head, tmp);
5259         }
5260     }
5261   else
5262     head = new_reg_loc_descr (cfa->reg, offset);
5263
5264   return head;
5265 }
5266
5267 /* This function builds a dwarf location descriptor sequence for
5268    the address at OFFSET from the CFA when stack is aligned to
5269    ALIGNMENT byte.  */
5270
5271 static struct dw_loc_descr_struct *
5272 build_cfa_aligned_loc (HOST_WIDE_INT offset, HOST_WIDE_INT alignment)
5273 {
5274   struct dw_loc_descr_struct *head;
5275   unsigned int dwarf_fp
5276     = DWARF_FRAME_REGNUM (HARD_FRAME_POINTER_REGNUM);
5277
5278  /* When CFA is defined as FP+OFFSET, emulate stack alignment.  */
5279   if (cfa.reg == HARD_FRAME_POINTER_REGNUM && cfa.indirect == 0)
5280     {
5281       head = new_reg_loc_descr (dwarf_fp, 0);
5282       add_loc_descr (&head, int_loc_descriptor (alignment));
5283       add_loc_descr (&head, new_loc_descr (DW_OP_and, 0, 0));
5284       loc_descr_plus_const (&head, offset);
5285     }
5286   else
5287     head = new_reg_loc_descr (dwarf_fp, offset);
5288   return head;
5289 }
5290
5291 /* This function fills in aa dw_cfa_location structure from a dwarf location
5292    descriptor sequence.  */
5293
5294 static void
5295 get_cfa_from_loc_descr (dw_cfa_location *cfa, struct dw_loc_descr_struct *loc)
5296 {
5297   struct dw_loc_descr_struct *ptr;
5298   cfa->offset = 0;
5299   cfa->base_offset = 0;
5300   cfa->indirect = 0;
5301   cfa->reg = -1;
5302
5303   for (ptr = loc; ptr != NULL; ptr = ptr->dw_loc_next)
5304     {
5305       enum dwarf_location_atom op = ptr->dw_loc_opc;
5306
5307       switch (op)
5308         {
5309         case DW_OP_reg0:
5310         case DW_OP_reg1:
5311         case DW_OP_reg2:
5312         case DW_OP_reg3:
5313         case DW_OP_reg4:
5314         case DW_OP_reg5:
5315         case DW_OP_reg6:
5316         case DW_OP_reg7:
5317         case DW_OP_reg8:
5318         case DW_OP_reg9:
5319         case DW_OP_reg10:
5320         case DW_OP_reg11:
5321         case DW_OP_reg12:
5322         case DW_OP_reg13:
5323         case DW_OP_reg14:
5324         case DW_OP_reg15:
5325         case DW_OP_reg16:
5326         case DW_OP_reg17:
5327         case DW_OP_reg18:
5328         case DW_OP_reg19:
5329         case DW_OP_reg20:
5330         case DW_OP_reg21:
5331         case DW_OP_reg22:
5332         case DW_OP_reg23:
5333         case DW_OP_reg24:
5334         case DW_OP_reg25:
5335         case DW_OP_reg26:
5336         case DW_OP_reg27:
5337         case DW_OP_reg28:
5338         case DW_OP_reg29:
5339         case DW_OP_reg30:
5340         case DW_OP_reg31:
5341           cfa->reg = op - DW_OP_reg0;
5342           break;
5343         case DW_OP_regx:
5344           cfa->reg = ptr->dw_loc_oprnd1.v.val_int;
5345           break;
5346         case DW_OP_breg0:
5347         case DW_OP_breg1:
5348         case DW_OP_breg2:
5349         case DW_OP_breg3:
5350         case DW_OP_breg4:
5351         case DW_OP_breg5:
5352         case DW_OP_breg6:
5353         case DW_OP_breg7:
5354         case DW_OP_breg8:
5355         case DW_OP_breg9:
5356         case DW_OP_breg10:
5357         case DW_OP_breg11:
5358         case DW_OP_breg12:
5359         case DW_OP_breg13:
5360         case DW_OP_breg14:
5361         case DW_OP_breg15:
5362         case DW_OP_breg16:
5363         case DW_OP_breg17:
5364         case DW_OP_breg18:
5365         case DW_OP_breg19:
5366         case DW_OP_breg20:
5367         case DW_OP_breg21:
5368         case DW_OP_breg22:
5369         case DW_OP_breg23:
5370         case DW_OP_breg24:
5371         case DW_OP_breg25:
5372         case DW_OP_breg26:
5373         case DW_OP_breg27:
5374         case DW_OP_breg28:
5375         case DW_OP_breg29:
5376         case DW_OP_breg30:
5377         case DW_OP_breg31:
5378           cfa->reg = op - DW_OP_breg0;
5379           cfa->base_offset = ptr->dw_loc_oprnd1.v.val_int;
5380           break;
5381         case DW_OP_bregx:
5382           cfa->reg = ptr->dw_loc_oprnd1.v.val_int;
5383           cfa->base_offset = ptr->dw_loc_oprnd2.v.val_int;
5384           break;
5385         case DW_OP_deref:
5386           cfa->indirect = 1;
5387           break;
5388         case DW_OP_plus_uconst:
5389           cfa->offset = ptr->dw_loc_oprnd1.v.val_unsigned;
5390           break;
5391         default:
5392           internal_error ("DW_LOC_OP %s not implemented",
5393                           dwarf_stack_op_name (ptr->dw_loc_opc));
5394         }
5395     }
5396 }
5397 #endif /* .debug_frame support */
5398 \f
5399 /* And now, the support for symbolic debugging information.  */
5400 #ifdef DWARF2_DEBUGGING_INFO
5401
5402 /* .debug_str support.  */
5403 static int output_indirect_string (void **, void *);
5404
5405 static void dwarf2out_init (const char *);
5406 static void dwarf2out_finish (const char *);
5407 static void dwarf2out_assembly_start (void);
5408 static void dwarf2out_define (unsigned int, const char *);
5409 static void dwarf2out_undef (unsigned int, const char *);
5410 static void dwarf2out_start_source_file (unsigned, const char *);
5411 static void dwarf2out_end_source_file (unsigned);
5412 static void dwarf2out_begin_block (unsigned, unsigned);
5413 static void dwarf2out_end_block (unsigned, unsigned);
5414 static bool dwarf2out_ignore_block (const_tree);
5415 static void dwarf2out_global_decl (tree);
5416 static void dwarf2out_type_decl (tree, int);
5417 static void dwarf2out_imported_module_or_decl (tree, tree, tree, bool);
5418 static void dwarf2out_imported_module_or_decl_1 (tree, tree, tree,
5419                                                  dw_die_ref);
5420 static void dwarf2out_abstract_function (tree);
5421 static void dwarf2out_var_location (rtx);
5422 static void dwarf2out_direct_call (tree);
5423 static void dwarf2out_virtual_call_token (tree, int);
5424 static void dwarf2out_copy_call_info (rtx, rtx);
5425 static void dwarf2out_virtual_call (int);
5426 static void dwarf2out_begin_function (tree);
5427 static void dwarf2out_set_name (tree, tree);
5428
5429 /* The debug hooks structure.  */
5430
5431 const struct gcc_debug_hooks dwarf2_debug_hooks =
5432 {
5433   dwarf2out_init,
5434   dwarf2out_finish,
5435   dwarf2out_assembly_start,
5436   dwarf2out_define,
5437   dwarf2out_undef,
5438   dwarf2out_start_source_file,
5439   dwarf2out_end_source_file,
5440   dwarf2out_begin_block,
5441   dwarf2out_end_block,
5442   dwarf2out_ignore_block,
5443   dwarf2out_source_line,
5444   dwarf2out_begin_prologue,
5445   debug_nothing_int_charstar,   /* end_prologue */
5446   dwarf2out_end_epilogue,
5447   dwarf2out_begin_function,
5448   debug_nothing_int,            /* end_function */
5449   dwarf2out_decl,               /* function_decl */
5450   dwarf2out_global_decl,
5451   dwarf2out_type_decl,          /* type_decl */
5452   dwarf2out_imported_module_or_decl,
5453   debug_nothing_tree,           /* deferred_inline_function */
5454   /* The DWARF 2 backend tries to reduce debugging bloat by not
5455      emitting the abstract description of inline functions until
5456      something tries to reference them.  */
5457   dwarf2out_abstract_function,  /* outlining_inline_function */
5458   debug_nothing_rtx,            /* label */
5459   debug_nothing_int,            /* handle_pch */
5460   dwarf2out_var_location,
5461   dwarf2out_switch_text_section,
5462   dwarf2out_direct_call,
5463   dwarf2out_virtual_call_token,
5464   dwarf2out_copy_call_info,
5465   dwarf2out_virtual_call,
5466   dwarf2out_set_name,
5467   1                             /* start_end_main_source_file */
5468 };
5469 #endif
5470 \f
5471 /* NOTE: In the comments in this file, many references are made to
5472    "Debugging Information Entries".  This term is abbreviated as `DIE'
5473    throughout the remainder of this file.  */
5474
5475 /* An internal representation of the DWARF output is built, and then
5476    walked to generate the DWARF debugging info.  The walk of the internal
5477    representation is done after the entire program has been compiled.
5478    The types below are used to describe the internal representation.  */
5479
5480 /* Various DIE's use offsets relative to the beginning of the
5481    .debug_info section to refer to each other.  */
5482
5483 typedef long int dw_offset;
5484
5485 /* Define typedefs here to avoid circular dependencies.  */
5486
5487 typedef struct dw_attr_struct *dw_attr_ref;
5488 typedef struct dw_line_info_struct *dw_line_info_ref;
5489 typedef struct dw_separate_line_info_struct *dw_separate_line_info_ref;
5490 typedef struct pubname_struct *pubname_ref;
5491 typedef struct dw_ranges_struct *dw_ranges_ref;
5492 typedef struct dw_ranges_by_label_struct *dw_ranges_by_label_ref;
5493 typedef struct comdat_type_struct *comdat_type_node_ref;
5494
5495 /* Each entry in the line_info_table maintains the file and
5496    line number associated with the label generated for that
5497    entry.  The label gives the PC value associated with
5498    the line number entry.  */
5499
5500 typedef struct GTY(()) dw_line_info_struct {
5501   unsigned long dw_file_num;
5502   unsigned long dw_line_num;
5503 }
5504 dw_line_info_entry;
5505
5506 /* Line information for functions in separate sections; each one gets its
5507    own sequence.  */
5508 typedef struct GTY(()) dw_separate_line_info_struct {
5509   unsigned long dw_file_num;
5510   unsigned long dw_line_num;
5511   unsigned long function;
5512 }
5513 dw_separate_line_info_entry;
5514
5515 /* Each DIE attribute has a field specifying the attribute kind,
5516    a link to the next attribute in the chain, and an attribute value.
5517    Attributes are typically linked below the DIE they modify.  */
5518
5519 typedef struct GTY(()) dw_attr_struct {
5520   enum dwarf_attribute dw_attr;
5521   dw_val_node dw_attr_val;
5522 }
5523 dw_attr_node;
5524
5525 DEF_VEC_O(dw_attr_node);
5526 DEF_VEC_ALLOC_O(dw_attr_node,gc);
5527
5528 /* The Debugging Information Entry (DIE) structure.  DIEs form a tree.
5529    The children of each node form a circular list linked by
5530    die_sib.  die_child points to the node *before* the "first" child node.  */
5531
5532 typedef struct GTY((chain_circular ("%h.die_sib"))) die_struct {
5533   enum dwarf_tag die_tag;
5534   union die_symbol_or_type_node
5535     {
5536       char * GTY ((tag ("0"))) die_symbol;
5537       comdat_type_node_ref GTY ((tag ("1"))) die_type_node;
5538     }
5539   GTY ((desc ("dwarf_version >= 4"))) die_id;
5540   VEC(dw_attr_node,gc) * die_attr;
5541   dw_die_ref die_parent;
5542   dw_die_ref die_child;
5543   dw_die_ref die_sib;
5544   dw_die_ref die_definition; /* ref from a specification to its definition */
5545   dw_offset die_offset;
5546   unsigned long die_abbrev;
5547   int die_mark;
5548   /* Die is used and must not be pruned as unused.  */
5549   int die_perennial_p;
5550   unsigned int decl_id;
5551 }
5552 die_node;
5553
5554 /* Evaluate 'expr' while 'c' is set to each child of DIE in order.  */
5555 #define FOR_EACH_CHILD(die, c, expr) do {       \
5556   c = die->die_child;                           \
5557   if (c) do {                                   \
5558     c = c->die_sib;                             \
5559     expr;                                       \
5560   } while (c != die->die_child);                \
5561 } while (0)
5562
5563 /* The pubname structure */
5564
5565 typedef struct GTY(()) pubname_struct {
5566   dw_die_ref die;
5567   const char *name;
5568 }
5569 pubname_entry;
5570
5571 DEF_VEC_O(pubname_entry);
5572 DEF_VEC_ALLOC_O(pubname_entry, gc);
5573
5574 struct GTY(()) dw_ranges_struct {
5575   /* If this is positive, it's a block number, otherwise it's a
5576      bitwise-negated index into dw_ranges_by_label.  */
5577   int num;
5578 };
5579
5580 struct GTY(()) dw_ranges_by_label_struct {
5581   const char *begin;
5582   const char *end;
5583 };
5584
5585 /* The comdat type node structure.  */
5586 typedef struct GTY(()) comdat_type_struct
5587 {
5588   dw_die_ref root_die;
5589   dw_die_ref type_die;
5590   char signature[DWARF_TYPE_SIGNATURE_SIZE];
5591   struct comdat_type_struct *next;
5592 }
5593 comdat_type_node;
5594
5595 /* The limbo die list structure.  */
5596 typedef struct GTY(()) limbo_die_struct {
5597   dw_die_ref die;
5598   tree created_for;
5599   struct limbo_die_struct *next;
5600 }
5601 limbo_die_node;
5602
5603 typedef struct GTY(()) skeleton_chain_struct
5604 {
5605   dw_die_ref old_die;
5606   dw_die_ref new_die;
5607   struct skeleton_chain_struct *parent;
5608 }
5609 skeleton_chain_node;
5610
5611 /* How to start an assembler comment.  */
5612 #ifndef ASM_COMMENT_START
5613 #define ASM_COMMENT_START ";#"
5614 #endif
5615
5616 /* Define a macro which returns nonzero for a TYPE_DECL which was
5617    implicitly generated for a tagged type.
5618
5619    Note that unlike the gcc front end (which generates a NULL named
5620    TYPE_DECL node for each complete tagged type, each array type, and
5621    each function type node created) the g++ front end generates a
5622    _named_ TYPE_DECL node for each tagged type node created.
5623    These TYPE_DECLs have DECL_ARTIFICIAL set, so we know not to
5624    generate a DW_TAG_typedef DIE for them.  */
5625
5626 #define TYPE_DECL_IS_STUB(decl)                         \
5627   (DECL_NAME (decl) == NULL_TREE                        \
5628    || (DECL_ARTIFICIAL (decl)                           \
5629        && is_tagged_type (TREE_TYPE (decl))             \
5630        && ((decl == TYPE_STUB_DECL (TREE_TYPE (decl)))  \
5631            /* This is necessary for stub decls that     \
5632               appear in nested inline functions.  */    \
5633            || (DECL_ABSTRACT_ORIGIN (decl) != NULL_TREE \
5634                && (decl_ultimate_origin (decl)          \
5635                    == TYPE_STUB_DECL (TREE_TYPE (decl)))))))
5636
5637 /* Information concerning the compilation unit's programming
5638    language, and compiler version.  */
5639
5640 /* Fixed size portion of the DWARF compilation unit header.  */
5641 #define DWARF_COMPILE_UNIT_HEADER_SIZE \
5642   (DWARF_INITIAL_LENGTH_SIZE + DWARF_OFFSET_SIZE + 3)
5643
5644 /* Fixed size portion of the DWARF comdat type unit header.  */
5645 #define DWARF_COMDAT_TYPE_UNIT_HEADER_SIZE \
5646   (DWARF_COMPILE_UNIT_HEADER_SIZE + DWARF_TYPE_SIGNATURE_SIZE \
5647    + DWARF_OFFSET_SIZE)
5648
5649 /* Fixed size portion of public names info.  */
5650 #define DWARF_PUBNAMES_HEADER_SIZE (2 * DWARF_OFFSET_SIZE + 2)
5651
5652 /* Fixed size portion of the address range info.  */
5653 #define DWARF_ARANGES_HEADER_SIZE                                       \
5654   (DWARF_ROUND (DWARF_INITIAL_LENGTH_SIZE + DWARF_OFFSET_SIZE + 4,      \
5655                 DWARF2_ADDR_SIZE * 2)                                   \
5656    - DWARF_INITIAL_LENGTH_SIZE)
5657
5658 /* Size of padding portion in the address range info.  It must be
5659    aligned to twice the pointer size.  */
5660 #define DWARF_ARANGES_PAD_SIZE \
5661   (DWARF_ROUND (DWARF_INITIAL_LENGTH_SIZE + DWARF_OFFSET_SIZE + 4, \
5662                 DWARF2_ADDR_SIZE * 2)                              \
5663    - (DWARF_INITIAL_LENGTH_SIZE + DWARF_OFFSET_SIZE + 4))
5664
5665 /* Use assembler line directives if available.  */
5666 #ifndef DWARF2_ASM_LINE_DEBUG_INFO
5667 #ifdef HAVE_AS_DWARF2_DEBUG_LINE
5668 #define DWARF2_ASM_LINE_DEBUG_INFO 1
5669 #else
5670 #define DWARF2_ASM_LINE_DEBUG_INFO 0
5671 #endif
5672 #endif
5673
5674 /* Minimum line offset in a special line info. opcode.
5675    This value was chosen to give a reasonable range of values.  */
5676 #define DWARF_LINE_BASE  -10
5677
5678 /* First special line opcode - leave room for the standard opcodes.  */
5679 #define DWARF_LINE_OPCODE_BASE  10
5680
5681 /* Range of line offsets in a special line info. opcode.  */
5682 #define DWARF_LINE_RANGE  (254-DWARF_LINE_OPCODE_BASE+1)
5683
5684 /* Flag that indicates the initial value of the is_stmt_start flag.
5685    In the present implementation, we do not mark any lines as
5686    the beginning of a source statement, because that information
5687    is not made available by the GCC front-end.  */
5688 #define DWARF_LINE_DEFAULT_IS_STMT_START 1
5689
5690 #ifdef DWARF2_DEBUGGING_INFO
5691 /* This location is used by calc_die_sizes() to keep track
5692    the offset of each DIE within the .debug_info section.  */
5693 static unsigned long next_die_offset;
5694 #endif
5695
5696 /* Record the root of the DIE's built for the current compilation unit.  */
5697 static GTY(()) dw_die_ref comp_unit_die;
5698
5699 /* A list of type DIEs that have been separated into comdat sections.  */
5700 static GTY(()) comdat_type_node *comdat_type_list;
5701
5702 /* A list of DIEs with a NULL parent waiting to be relocated.  */
5703 static GTY(()) limbo_die_node *limbo_die_list;
5704
5705 /* A list of DIEs for which we may have to generate
5706    DW_AT_MIPS_linkage_name once their DECL_ASSEMBLER_NAMEs are
5707    set.  */
5708 static GTY(()) limbo_die_node *deferred_asm_name;
5709
5710 /* Filenames referenced by this compilation unit.  */
5711 static GTY((param_is (struct dwarf_file_data))) htab_t file_table;
5712
5713 /* A hash table of references to DIE's that describe declarations.
5714    The key is a DECL_UID() which is a unique number identifying each decl.  */
5715 static GTY ((param_is (struct die_struct))) htab_t decl_die_table;
5716
5717 /* A hash table of references to DIE's that describe COMMON blocks.
5718    The key is DECL_UID() ^ die_parent.  */
5719 static GTY ((param_is (struct die_struct))) htab_t common_block_die_table;
5720
5721 typedef struct GTY(()) die_arg_entry_struct {
5722     dw_die_ref die;
5723     tree arg;
5724 } die_arg_entry;
5725
5726 DEF_VEC_O(die_arg_entry);
5727 DEF_VEC_ALLOC_O(die_arg_entry,gc);
5728
5729 /* Node of the variable location list.  */
5730 struct GTY ((chain_next ("%h.next"))) var_loc_node {
5731   rtx GTY (()) var_loc_note;
5732   const char * GTY (()) label;
5733   const char * GTY (()) section_label;
5734   struct var_loc_node * GTY (()) next;
5735 };
5736
5737 /* Variable location list.  */
5738 struct GTY (()) var_loc_list_def {
5739   struct var_loc_node * GTY (()) first;
5740
5741   /* Do not mark the last element of the chained list because
5742      it is marked through the chain.  */
5743   struct var_loc_node * GTY ((skip ("%h"))) last;
5744
5745   /* DECL_UID of the variable decl.  */
5746   unsigned int decl_id;
5747 };
5748 typedef struct var_loc_list_def var_loc_list;
5749
5750
5751 /* Table of decl location linked lists.  */
5752 static GTY ((param_is (var_loc_list))) htab_t decl_loc_table;
5753
5754 /* A pointer to the base of a list of references to DIE's that
5755    are uniquely identified by their tag, presence/absence of
5756    children DIE's, and list of attribute/value pairs.  */
5757 static GTY((length ("abbrev_die_table_allocated")))
5758   dw_die_ref *abbrev_die_table;
5759
5760 /* Number of elements currently allocated for abbrev_die_table.  */
5761 static GTY(()) unsigned abbrev_die_table_allocated;
5762
5763 /* Number of elements in type_die_table currently in use.  */
5764 static GTY(()) unsigned abbrev_die_table_in_use;
5765
5766 /* Size (in elements) of increments by which we may expand the
5767    abbrev_die_table.  */
5768 #define ABBREV_DIE_TABLE_INCREMENT 256
5769
5770 /* A pointer to the base of a table that contains line information
5771    for each source code line in .text in the compilation unit.  */
5772 static GTY((length ("line_info_table_allocated")))
5773      dw_line_info_ref line_info_table;
5774
5775 /* Number of elements currently allocated for line_info_table.  */
5776 static GTY(()) unsigned line_info_table_allocated;
5777
5778 /* Number of elements in line_info_table currently in use.  */
5779 static GTY(()) unsigned line_info_table_in_use;
5780
5781 /* A pointer to the base of a table that contains line information
5782    for each source code line outside of .text in the compilation unit.  */
5783 static GTY ((length ("separate_line_info_table_allocated")))
5784      dw_separate_line_info_ref separate_line_info_table;
5785
5786 /* Number of elements currently allocated for separate_line_info_table.  */
5787 static GTY(()) unsigned separate_line_info_table_allocated;
5788
5789 /* Number of elements in separate_line_info_table currently in use.  */
5790 static GTY(()) unsigned separate_line_info_table_in_use;
5791
5792 /* Size (in elements) of increments by which we may expand the
5793    line_info_table.  */
5794 #define LINE_INFO_TABLE_INCREMENT 1024
5795
5796 /* A pointer to the base of a table that contains a list of publicly
5797    accessible names.  */
5798 static GTY (()) VEC (pubname_entry, gc) *  pubname_table;
5799
5800 /* A pointer to the base of a table that contains a list of publicly
5801    accessible types.  */
5802 static GTY (()) VEC (pubname_entry, gc) * pubtype_table;
5803
5804 /* Array of dies for which we should generate .debug_arange info.  */
5805 static GTY((length ("arange_table_allocated"))) dw_die_ref *arange_table;
5806
5807 /* Number of elements currently allocated for arange_table.  */
5808 static GTY(()) unsigned arange_table_allocated;
5809
5810 /* Number of elements in arange_table currently in use.  */
5811 static GTY(()) unsigned arange_table_in_use;
5812
5813 /* Size (in elements) of increments by which we may expand the
5814    arange_table.  */
5815 #define ARANGE_TABLE_INCREMENT 64
5816
5817 /* Array of dies for which we should generate .debug_ranges info.  */
5818 static GTY ((length ("ranges_table_allocated"))) dw_ranges_ref ranges_table;
5819
5820 /* Number of elements currently allocated for ranges_table.  */
5821 static GTY(()) unsigned ranges_table_allocated;
5822
5823 /* Number of elements in ranges_table currently in use.  */
5824 static GTY(()) unsigned ranges_table_in_use;
5825
5826 /* Array of pairs of labels referenced in ranges_table.  */
5827 static GTY ((length ("ranges_by_label_allocated")))
5828      dw_ranges_by_label_ref ranges_by_label;
5829
5830 /* Number of elements currently allocated for ranges_by_label.  */
5831 static GTY(()) unsigned ranges_by_label_allocated;
5832
5833 /* Number of elements in ranges_by_label currently in use.  */
5834 static GTY(()) unsigned ranges_by_label_in_use;
5835
5836 /* Size (in elements) of increments by which we may expand the
5837    ranges_table.  */
5838 #define RANGES_TABLE_INCREMENT 64
5839
5840 /* Whether we have location lists that need outputting */
5841 static GTY(()) bool have_location_lists;
5842
5843 /* Unique label counter.  */
5844 static GTY(()) unsigned int loclabel_num;
5845
5846 /* Unique label counter for point-of-call tables.  */
5847 static GTY(()) unsigned int poc_label_num;
5848
5849 /* The direct call table structure.  */
5850
5851 typedef struct GTY(()) dcall_struct {
5852   unsigned int poc_label_num;
5853   tree poc_decl;
5854   dw_die_ref targ_die;
5855 }
5856 dcall_entry;
5857
5858 DEF_VEC_O(dcall_entry);
5859 DEF_VEC_ALLOC_O(dcall_entry, gc);
5860
5861 /* The virtual call table structure.  */
5862
5863 typedef struct GTY(()) vcall_struct {
5864   unsigned int poc_label_num;
5865   unsigned int vtable_slot;
5866 }
5867 vcall_entry;
5868
5869 DEF_VEC_O(vcall_entry);
5870 DEF_VEC_ALLOC_O(vcall_entry, gc);
5871
5872 /* Pointers to the direct and virtual call tables.  */
5873 static GTY (()) VEC (dcall_entry, gc) * dcall_table = NULL;
5874 static GTY (()) VEC (vcall_entry, gc) * vcall_table = NULL;
5875
5876 /* A hash table to map INSN_UIDs to vtable slot indexes.  */
5877
5878 struct GTY (()) vcall_insn {
5879   int insn_uid;
5880   unsigned int vtable_slot;
5881 };
5882
5883 static GTY ((param_is (struct vcall_insn))) htab_t vcall_insn_table;
5884
5885 #ifdef DWARF2_DEBUGGING_INFO
5886 /* Record whether the function being analyzed contains inlined functions.  */
5887 static int current_function_has_inlines;
5888 #endif
5889 #if 0 && defined (MIPS_DEBUGGING_INFO)
5890 static int comp_unit_has_inlines;
5891 #endif
5892
5893 /* The last file entry emitted by maybe_emit_file().  */
5894 static GTY(()) struct dwarf_file_data * last_emitted_file;
5895
5896 /* Number of internal labels generated by gen_internal_sym().  */
5897 static GTY(()) int label_num;
5898
5899 /* Cached result of previous call to lookup_filename.  */
5900 static GTY(()) struct dwarf_file_data * file_table_last_lookup;
5901
5902 static GTY(()) VEC(die_arg_entry,gc) *tmpl_value_parm_die_table;
5903
5904 #ifdef DWARF2_DEBUGGING_INFO
5905
5906 /* Offset from the "steady-state frame pointer" to the frame base,
5907    within the current function.  */
5908 static HOST_WIDE_INT frame_pointer_fb_offset;
5909
5910 /* Forward declarations for functions defined in this file.  */
5911
5912 static int is_pseudo_reg (const_rtx);
5913 static tree type_main_variant (tree);
5914 static int is_tagged_type (const_tree);
5915 static const char *dwarf_tag_name (unsigned);
5916 static const char *dwarf_attr_name (unsigned);
5917 static const char *dwarf_form_name (unsigned);
5918 static tree decl_ultimate_origin (const_tree);
5919 static tree decl_class_context (tree);
5920 static void add_dwarf_attr (dw_die_ref, dw_attr_ref);
5921 static inline enum dw_val_class AT_class (dw_attr_ref);
5922 static void add_AT_flag (dw_die_ref, enum dwarf_attribute, unsigned);
5923 static inline unsigned AT_flag (dw_attr_ref);
5924 static void add_AT_int (dw_die_ref, enum dwarf_attribute, HOST_WIDE_INT);
5925 static inline HOST_WIDE_INT AT_int (dw_attr_ref);
5926 static void add_AT_unsigned (dw_die_ref, enum dwarf_attribute, unsigned HOST_WIDE_INT);
5927 static inline unsigned HOST_WIDE_INT AT_unsigned (dw_attr_ref);
5928 static void add_AT_double (dw_die_ref, enum dwarf_attribute,
5929                            HOST_WIDE_INT, unsigned HOST_WIDE_INT);
5930 static inline void add_AT_vec (dw_die_ref, enum dwarf_attribute, unsigned int,
5931                                unsigned int, unsigned char *);
5932 static void add_AT_data8 (dw_die_ref, enum dwarf_attribute, unsigned char *);
5933 static hashval_t debug_str_do_hash (const void *);
5934 static int debug_str_eq (const void *, const void *);
5935 static void add_AT_string (dw_die_ref, enum dwarf_attribute, const char *);
5936 static inline const char *AT_string (dw_attr_ref);
5937 static enum dwarf_form AT_string_form (dw_attr_ref);
5938 static void add_AT_die_ref (dw_die_ref, enum dwarf_attribute, dw_die_ref);
5939 static void add_AT_specification (dw_die_ref, dw_die_ref);
5940 static inline dw_die_ref AT_ref (dw_attr_ref);
5941 static inline int AT_ref_external (dw_attr_ref);
5942 static inline void set_AT_ref_external (dw_attr_ref, int);
5943 static void add_AT_fde_ref (dw_die_ref, enum dwarf_attribute, unsigned);
5944 static void add_AT_loc (dw_die_ref, enum dwarf_attribute, dw_loc_descr_ref);
5945 static inline dw_loc_descr_ref AT_loc (dw_attr_ref);
5946 static void add_AT_loc_list (dw_die_ref, enum dwarf_attribute,
5947                              dw_loc_list_ref);
5948 static inline dw_loc_list_ref AT_loc_list (dw_attr_ref);
5949 static void add_AT_addr (dw_die_ref, enum dwarf_attribute, rtx);
5950 static inline rtx AT_addr (dw_attr_ref);
5951 static void add_AT_lbl_id (dw_die_ref, enum dwarf_attribute, const char *);
5952 static void add_AT_lineptr (dw_die_ref, enum dwarf_attribute, const char *);
5953 static void add_AT_macptr (dw_die_ref, enum dwarf_attribute, const char *);
5954 static void add_AT_offset (dw_die_ref, enum dwarf_attribute,
5955                            unsigned HOST_WIDE_INT);
5956 static void add_AT_range_list (dw_die_ref, enum dwarf_attribute,
5957                                unsigned long);
5958 static inline const char *AT_lbl (dw_attr_ref);
5959 static dw_attr_ref get_AT (dw_die_ref, enum dwarf_attribute);
5960 static const char *get_AT_low_pc (dw_die_ref);
5961 static const char *get_AT_hi_pc (dw_die_ref);
5962 static const char *get_AT_string (dw_die_ref, enum dwarf_attribute);
5963 static int get_AT_flag (dw_die_ref, enum dwarf_attribute);
5964 static unsigned get_AT_unsigned (dw_die_ref, enum dwarf_attribute);
5965 static inline dw_die_ref get_AT_ref (dw_die_ref, enum dwarf_attribute);
5966 static bool is_c_family (void);
5967 static bool is_cxx (void);
5968 static bool is_java (void);
5969 static bool is_fortran (void);
5970 static bool is_ada (void);
5971 static void remove_AT (dw_die_ref, enum dwarf_attribute);
5972 static void remove_child_TAG (dw_die_ref, enum dwarf_tag);
5973 static void add_child_die (dw_die_ref, dw_die_ref);
5974 static dw_die_ref new_die (enum dwarf_tag, dw_die_ref, tree);
5975 static dw_die_ref lookup_type_die (tree);
5976 static void equate_type_number_to_die (tree, dw_die_ref);
5977 static hashval_t decl_die_table_hash (const void *);
5978 static int decl_die_table_eq (const void *, const void *);
5979 static dw_die_ref lookup_decl_die (tree);
5980 static hashval_t common_block_die_table_hash (const void *);
5981 static int common_block_die_table_eq (const void *, const void *);
5982 static hashval_t decl_loc_table_hash (const void *);
5983 static int decl_loc_table_eq (const void *, const void *);
5984 static var_loc_list *lookup_decl_loc (const_tree);
5985 static void equate_decl_number_to_die (tree, dw_die_ref);
5986 static void add_var_loc_to_decl (tree, struct var_loc_node *);
5987 static void print_spaces (FILE *);
5988 static void print_die (dw_die_ref, FILE *);
5989 static void print_dwarf_line_table (FILE *);
5990 static dw_die_ref push_new_compile_unit (dw_die_ref, dw_die_ref);
5991 static dw_die_ref pop_compile_unit (dw_die_ref);
5992 static void loc_checksum (dw_loc_descr_ref, struct md5_ctx *);
5993 static void attr_checksum (dw_attr_ref, struct md5_ctx *, int *);
5994 static void die_checksum (dw_die_ref, struct md5_ctx *, int *);
5995 static void checksum_sleb128 (HOST_WIDE_INT, struct md5_ctx *);
5996 static void checksum_uleb128 (unsigned HOST_WIDE_INT, struct md5_ctx *);
5997 static void loc_checksum_ordered (dw_loc_descr_ref, struct md5_ctx *);
5998 static void attr_checksum_ordered (enum dwarf_tag, dw_attr_ref,
5999                                    struct md5_ctx *, int *);
6000 struct checksum_attributes;
6001 static void collect_checksum_attributes (struct checksum_attributes *, dw_die_ref);
6002 static void die_checksum_ordered (dw_die_ref, struct md5_ctx *, int *);
6003 static void checksum_die_context (dw_die_ref, struct md5_ctx *);
6004 static void generate_type_signature (dw_die_ref, comdat_type_node *);
6005 static int same_loc_p (dw_loc_descr_ref, dw_loc_descr_ref, int *);
6006 static int same_dw_val_p (const dw_val_node *, const dw_val_node *, int *);
6007 static int same_attr_p (dw_attr_ref, dw_attr_ref, int *);
6008 static int same_die_p (dw_die_ref, dw_die_ref, int *);
6009 static int same_die_p_wrap (dw_die_ref, dw_die_ref);
6010 static void compute_section_prefix (dw_die_ref);
6011 static int is_type_die (dw_die_ref);
6012 static int is_comdat_die (dw_die_ref);
6013 static int is_symbol_die (dw_die_ref);
6014 static void assign_symbol_names (dw_die_ref);
6015 static void break_out_includes (dw_die_ref);
6016 static int is_declaration_die (dw_die_ref);
6017 static int should_move_die_to_comdat (dw_die_ref);
6018 static dw_die_ref clone_as_declaration (dw_die_ref);
6019 static dw_die_ref clone_die (dw_die_ref);
6020 static dw_die_ref clone_tree (dw_die_ref);
6021 static void copy_declaration_context (dw_die_ref, dw_die_ref);
6022 static void generate_skeleton_ancestor_tree (skeleton_chain_node *);
6023 static void generate_skeleton_bottom_up (skeleton_chain_node *);
6024 static dw_die_ref generate_skeleton (dw_die_ref);
6025 static dw_die_ref remove_child_or_replace_with_skeleton (dw_die_ref,
6026                                                          dw_die_ref);
6027 static void break_out_comdat_types (dw_die_ref);
6028 static dw_die_ref copy_ancestor_tree (dw_die_ref, dw_die_ref, htab_t);
6029 static void copy_decls_walk (dw_die_ref, dw_die_ref, htab_t);
6030 static void copy_decls_for_unworthy_types (dw_die_ref);
6031
6032 static hashval_t htab_cu_hash (const void *);
6033 static int htab_cu_eq (const void *, const void *);
6034 static void htab_cu_del (void *);
6035 static int check_duplicate_cu (dw_die_ref, htab_t, unsigned *);
6036 static void record_comdat_symbol_number (dw_die_ref, htab_t, unsigned);
6037 static void add_sibling_attributes (dw_die_ref);
6038 static void build_abbrev_table (dw_die_ref);
6039 static void output_location_lists (dw_die_ref);
6040 static int constant_size (unsigned HOST_WIDE_INT);
6041 static unsigned long size_of_die (dw_die_ref);
6042 static void calc_die_sizes (dw_die_ref);
6043 static void mark_dies (dw_die_ref);
6044 static void unmark_dies (dw_die_ref);
6045 static void unmark_all_dies (dw_die_ref);
6046 static unsigned long size_of_pubnames (VEC (pubname_entry,gc) *);
6047 static unsigned long size_of_aranges (void);
6048 static enum dwarf_form value_format (dw_attr_ref);
6049 static void output_value_format (dw_attr_ref);
6050 static void output_abbrev_section (void);
6051 static void output_die_symbol (dw_die_ref);
6052 static void output_die (dw_die_ref);
6053 static void output_compilation_unit_header (void);
6054 static void output_comp_unit (dw_die_ref, int);
6055 static void output_comdat_type_unit (comdat_type_node *);
6056 static const char *dwarf2_name (tree, int);
6057 static void add_pubname (tree, dw_die_ref);
6058 static void add_pubname_string (const char *, dw_die_ref);
6059 static void add_pubtype (tree, dw_die_ref);
6060 static void output_pubnames (VEC (pubname_entry,gc) *);
6061 static void add_arange (tree, dw_die_ref);
6062 static void output_aranges (void);
6063 static unsigned int add_ranges_num (int);
6064 static unsigned int add_ranges (const_tree);
6065 static unsigned int add_ranges_by_labels (const char *, const char *);
6066 static void output_ranges (void);
6067 static void output_line_info (void);
6068 static void output_file_names (void);
6069 static dw_die_ref base_type_die (tree);
6070 static int is_base_type (tree);
6071 static dw_die_ref subrange_type_die (tree, tree, tree, dw_die_ref);
6072 static dw_die_ref modified_type_die (tree, int, int, dw_die_ref);
6073 static dw_die_ref generic_parameter_die (tree, tree, bool, dw_die_ref);
6074 static dw_die_ref template_parameter_pack_die (tree, tree, dw_die_ref);
6075 static int type_is_enum (const_tree);
6076 static unsigned int dbx_reg_number (const_rtx);
6077 static void add_loc_descr_op_piece (dw_loc_descr_ref *, int);
6078 static dw_loc_descr_ref reg_loc_descriptor (rtx, enum var_init_status);
6079 static dw_loc_descr_ref one_reg_loc_descriptor (unsigned int,
6080                                                 enum var_init_status);
6081 static dw_loc_descr_ref multiple_reg_loc_descriptor (rtx, rtx,
6082                                                      enum var_init_status);
6083 static dw_loc_descr_ref based_loc_descr (rtx, HOST_WIDE_INT,
6084                                          enum var_init_status);
6085 static int is_based_loc (const_rtx);
6086 static int resolve_one_addr (rtx *, void *);
6087 static dw_loc_descr_ref mem_loc_descriptor (rtx, enum machine_mode mode,
6088                                             enum var_init_status);
6089 static dw_loc_descr_ref concat_loc_descriptor (rtx, rtx,
6090                                                enum var_init_status);
6091 static dw_loc_descr_ref loc_descriptor (rtx, enum machine_mode mode,
6092                                         enum var_init_status);
6093 static dw_loc_list_ref loc_list_from_tree (tree, int);
6094 static dw_loc_descr_ref loc_descriptor_from_tree (tree, int);
6095 static HOST_WIDE_INT ceiling (HOST_WIDE_INT, unsigned int);
6096 static tree field_type (const_tree);
6097 static unsigned int simple_type_align_in_bits (const_tree);
6098 static unsigned int simple_decl_align_in_bits (const_tree);
6099 static unsigned HOST_WIDE_INT simple_type_size_in_bits (const_tree);
6100 static HOST_WIDE_INT field_byte_offset (const_tree);
6101 static void add_AT_location_description (dw_die_ref, enum dwarf_attribute,
6102                                          dw_loc_list_ref);
6103 static void add_data_member_location_attribute (dw_die_ref, tree);
6104 static bool add_const_value_attribute (dw_die_ref, rtx);
6105 static void insert_int (HOST_WIDE_INT, unsigned, unsigned char *);
6106 static void insert_float (const_rtx, unsigned char *);
6107 static rtx rtl_for_decl_location (tree);
6108 static bool add_location_or_const_value_attribute (dw_die_ref, tree,
6109                                                    enum dwarf_attribute);
6110 static bool tree_add_const_value_attribute (dw_die_ref, tree);
6111 static bool tree_add_const_value_attribute_for_decl (dw_die_ref, tree);
6112 static void add_name_attribute (dw_die_ref, const char *);
6113 static void add_comp_dir_attribute (dw_die_ref);
6114 static void add_bound_info (dw_die_ref, enum dwarf_attribute, tree);
6115 static void add_subscript_info (dw_die_ref, tree, bool);
6116 static void add_byte_size_attribute (dw_die_ref, tree);
6117 static void add_bit_offset_attribute (dw_die_ref, tree);
6118 static void add_bit_size_attribute (dw_die_ref, tree);
6119 static void add_prototyped_attribute (dw_die_ref, tree);
6120 static dw_die_ref add_abstract_origin_attribute (dw_die_ref, tree);
6121 static void add_pure_or_virtual_attribute (dw_die_ref, tree);
6122 static void add_src_coords_attributes (dw_die_ref, tree);
6123 static void add_name_and_src_coords_attributes (dw_die_ref, tree);
6124 static void push_decl_scope (tree);
6125 static void pop_decl_scope (void);
6126 static dw_die_ref scope_die_for (tree, dw_die_ref);
6127 static inline int local_scope_p (dw_die_ref);
6128 static inline int class_scope_p (dw_die_ref);
6129 static inline int class_or_namespace_scope_p (dw_die_ref);
6130 static void add_type_attribute (dw_die_ref, tree, int, int, dw_die_ref);
6131 static void add_calling_convention_attribute (dw_die_ref, tree);
6132 static const char *type_tag (const_tree);
6133 static tree member_declared_type (const_tree);
6134 #if 0
6135 static const char *decl_start_label (tree);
6136 #endif
6137 static void gen_array_type_die (tree, dw_die_ref);
6138 static void gen_descr_array_type_die (tree, struct array_descr_info *, dw_die_ref);
6139 #if 0
6140 static void gen_entry_point_die (tree, dw_die_ref);
6141 #endif
6142 static dw_die_ref gen_enumeration_type_die (tree, dw_die_ref);
6143 static dw_die_ref gen_formal_parameter_die (tree, tree, bool, dw_die_ref);
6144 static dw_die_ref gen_formal_parameter_pack_die  (tree, tree, dw_die_ref, tree*);
6145 static void gen_unspecified_parameters_die (tree, dw_die_ref);
6146 static void gen_formal_types_die (tree, dw_die_ref);
6147 static void gen_subprogram_die (tree, dw_die_ref);
6148 static void gen_variable_die (tree, tree, dw_die_ref);
6149 static void gen_const_die (tree, dw_die_ref);
6150 static void gen_label_die (tree, dw_die_ref);
6151 static void gen_lexical_block_die (tree, dw_die_ref, int);
6152 static void gen_inlined_subroutine_die (tree, dw_die_ref, int);
6153 static void gen_field_die (tree, dw_die_ref);
6154 static void gen_ptr_to_mbr_type_die (tree, dw_die_ref);
6155 static dw_die_ref gen_compile_unit_die (const char *);
6156 static void gen_inheritance_die (tree, tree, dw_die_ref);
6157 static void gen_member_die (tree, dw_die_ref);
6158 static void gen_struct_or_union_type_die (tree, dw_die_ref,
6159                                                 enum debug_info_usage);
6160 static void gen_subroutine_type_die (tree, dw_die_ref);
6161 static void gen_typedef_die (tree, dw_die_ref);
6162 static void gen_type_die (tree, dw_die_ref);
6163 static void gen_block_die (tree, dw_die_ref, int);
6164 static void decls_for_scope (tree, dw_die_ref, int);
6165 static int is_redundant_typedef (const_tree);
6166 static inline dw_die_ref get_context_die (tree);
6167 static void gen_namespace_die (tree, dw_die_ref);
6168 static void gen_decl_die (tree, tree, dw_die_ref);
6169 static dw_die_ref force_decl_die (tree);
6170 static dw_die_ref force_type_die (tree);
6171 static dw_die_ref setup_namespace_context (tree, dw_die_ref);
6172 static dw_die_ref declare_in_namespace (tree, dw_die_ref);
6173 static struct dwarf_file_data * lookup_filename (const char *);
6174 static void retry_incomplete_types (void);
6175 static void gen_type_die_for_member (tree, tree, dw_die_ref);
6176 static void gen_generic_params_dies (tree);
6177 static void splice_child_die (dw_die_ref, dw_die_ref);
6178 static int file_info_cmp (const void *, const void *);
6179 static dw_loc_list_ref new_loc_list (dw_loc_descr_ref, const char *,
6180                                      const char *, const char *, unsigned);
6181 static void add_loc_descr_to_loc_list (dw_loc_list_ref *, dw_loc_descr_ref,
6182                                        const char *, const char *,
6183                                        const char *);
6184 static void output_loc_list (dw_loc_list_ref);
6185 static char *gen_internal_sym (const char *);
6186
6187 static void prune_unmark_dies (dw_die_ref);
6188 static void prune_unused_types_mark (dw_die_ref, int);
6189 static void prune_unused_types_walk (dw_die_ref);
6190 static void prune_unused_types_walk_attribs (dw_die_ref);
6191 static void prune_unused_types_prune (dw_die_ref);
6192 static void prune_unused_types (void);
6193 static int maybe_emit_file (struct dwarf_file_data *fd);
6194 static void append_entry_to_tmpl_value_parm_die_table (dw_die_ref, tree);
6195 static void gen_remaining_tmpl_value_param_die_attribute (void);
6196
6197 /* Section names used to hold DWARF debugging information.  */
6198 #ifndef DEBUG_INFO_SECTION
6199 #define DEBUG_INFO_SECTION      ".debug_info"
6200 #endif
6201 #ifndef DEBUG_ABBREV_SECTION
6202 #define DEBUG_ABBREV_SECTION    ".debug_abbrev"
6203 #endif
6204 #ifndef DEBUG_ARANGES_SECTION
6205 #define DEBUG_ARANGES_SECTION   ".debug_aranges"
6206 #endif
6207 #ifndef DEBUG_MACINFO_SECTION
6208 #define DEBUG_MACINFO_SECTION   ".debug_macinfo"
6209 #endif
6210 #ifndef DEBUG_LINE_SECTION
6211 #define DEBUG_LINE_SECTION      ".debug_line"
6212 #endif
6213 #ifndef DEBUG_LOC_SECTION
6214 #define DEBUG_LOC_SECTION       ".debug_loc"
6215 #endif
6216 #ifndef DEBUG_PUBNAMES_SECTION
6217 #define DEBUG_PUBNAMES_SECTION  ".debug_pubnames"
6218 #endif
6219 #ifndef DEBUG_PUBTYPES_SECTION
6220 #define DEBUG_PUBTYPES_SECTION  ".debug_pubtypes"
6221 #endif
6222 #ifndef DEBUG_DCALL_SECTION
6223 #define DEBUG_DCALL_SECTION     ".debug_dcall"
6224 #endif
6225 #ifndef DEBUG_VCALL_SECTION
6226 #define DEBUG_VCALL_SECTION     ".debug_vcall"
6227 #endif
6228 #ifndef DEBUG_STR_SECTION
6229 #define DEBUG_STR_SECTION       ".debug_str"
6230 #endif
6231 #ifndef DEBUG_RANGES_SECTION
6232 #define DEBUG_RANGES_SECTION    ".debug_ranges"
6233 #endif
6234
6235 /* Standard ELF section names for compiled code and data.  */
6236 #ifndef TEXT_SECTION_NAME
6237 #define TEXT_SECTION_NAME       ".text"
6238 #endif
6239
6240 /* Section flags for .debug_str section.  */
6241 #define DEBUG_STR_SECTION_FLAGS \
6242   (HAVE_GAS_SHF_MERGE && flag_merge_debug_strings               \
6243    ? SECTION_DEBUG | SECTION_MERGE | SECTION_STRINGS | 1        \
6244    : SECTION_DEBUG)
6245
6246 /* Labels we insert at beginning sections we can reference instead of
6247    the section names themselves.  */
6248
6249 #ifndef TEXT_SECTION_LABEL
6250 #define TEXT_SECTION_LABEL              "Ltext"
6251 #endif
6252 #ifndef COLD_TEXT_SECTION_LABEL
6253 #define COLD_TEXT_SECTION_LABEL         "Ltext_cold"
6254 #endif
6255 #ifndef DEBUG_LINE_SECTION_LABEL
6256 #define DEBUG_LINE_SECTION_LABEL        "Ldebug_line"
6257 #endif
6258 #ifndef DEBUG_INFO_SECTION_LABEL
6259 #define DEBUG_INFO_SECTION_LABEL        "Ldebug_info"
6260 #endif
6261 #ifndef DEBUG_ABBREV_SECTION_LABEL
6262 #define DEBUG_ABBREV_SECTION_LABEL      "Ldebug_abbrev"
6263 #endif
6264 #ifndef DEBUG_LOC_SECTION_LABEL
6265 #define DEBUG_LOC_SECTION_LABEL         "Ldebug_loc"
6266 #endif
6267 #ifndef DEBUG_RANGES_SECTION_LABEL
6268 #define DEBUG_RANGES_SECTION_LABEL      "Ldebug_ranges"
6269 #endif
6270 #ifndef DEBUG_MACINFO_SECTION_LABEL
6271 #define DEBUG_MACINFO_SECTION_LABEL     "Ldebug_macinfo"
6272 #endif
6273
6274 /* Definitions of defaults for formats and names of various special
6275    (artificial) labels which may be generated within this file (when the -g
6276    options is used and DWARF2_DEBUGGING_INFO is in effect.
6277    If necessary, these may be overridden from within the tm.h file, but
6278    typically, overriding these defaults is unnecessary.  */
6279
6280 static char text_end_label[MAX_ARTIFICIAL_LABEL_BYTES];
6281 static char text_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
6282 static char cold_text_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
6283 static char cold_end_label[MAX_ARTIFICIAL_LABEL_BYTES];
6284 static char abbrev_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
6285 static char debug_info_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
6286 static char debug_line_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
6287 static char macinfo_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
6288 static char loc_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
6289 static char ranges_section_label[2 * MAX_ARTIFICIAL_LABEL_BYTES];
6290
6291 #ifndef TEXT_END_LABEL
6292 #define TEXT_END_LABEL          "Letext"
6293 #endif
6294 #ifndef COLD_END_LABEL
6295 #define COLD_END_LABEL          "Letext_cold"
6296 #endif
6297 #ifndef BLOCK_BEGIN_LABEL
6298 #define BLOCK_BEGIN_LABEL       "LBB"
6299 #endif
6300 #ifndef BLOCK_END_LABEL
6301 #define BLOCK_END_LABEL         "LBE"
6302 #endif
6303 #ifndef LINE_CODE_LABEL
6304 #define LINE_CODE_LABEL         "LM"
6305 #endif
6306 #ifndef SEPARATE_LINE_CODE_LABEL
6307 #define SEPARATE_LINE_CODE_LABEL        "LSM"
6308 #endif
6309
6310 \f
6311 /* We allow a language front-end to designate a function that is to be
6312    called to "demangle" any name before it is put into a DIE.  */
6313
6314 static const char *(*demangle_name_func) (const char *);
6315
6316 void
6317 dwarf2out_set_demangle_name_func (const char *(*func) (const char *))
6318 {
6319   demangle_name_func = func;
6320 }
6321
6322 /* Test if rtl node points to a pseudo register.  */
6323
6324 static inline int
6325 is_pseudo_reg (const_rtx rtl)
6326 {
6327   return ((REG_P (rtl) && REGNO (rtl) >= FIRST_PSEUDO_REGISTER)
6328           || (GET_CODE (rtl) == SUBREG
6329               && REGNO (SUBREG_REG (rtl)) >= FIRST_PSEUDO_REGISTER));
6330 }
6331
6332 /* Return a reference to a type, with its const and volatile qualifiers
6333    removed.  */
6334
6335 static inline tree
6336 type_main_variant (tree type)
6337 {
6338   type = TYPE_MAIN_VARIANT (type);
6339
6340   /* ??? There really should be only one main variant among any group of
6341      variants of a given type (and all of the MAIN_VARIANT values for all
6342      members of the group should point to that one type) but sometimes the C
6343      front-end messes this up for array types, so we work around that bug
6344      here.  */
6345   if (TREE_CODE (type) == ARRAY_TYPE)
6346     while (type != TYPE_MAIN_VARIANT (type))
6347       type = TYPE_MAIN_VARIANT (type);
6348
6349   return type;
6350 }
6351
6352 /* Return nonzero if the given type node represents a tagged type.  */
6353
6354 static inline int
6355 is_tagged_type (const_tree type)
6356 {
6357   enum tree_code code = TREE_CODE (type);
6358
6359   return (code == RECORD_TYPE || code == UNION_TYPE
6360           || code == QUAL_UNION_TYPE || code == ENUMERAL_TYPE);
6361 }
6362
6363 /* Convert a DIE tag into its string name.  */
6364
6365 static const char *
6366 dwarf_tag_name (unsigned int tag)
6367 {
6368   switch (tag)
6369     {
6370     case DW_TAG_padding:
6371       return "DW_TAG_padding";
6372     case DW_TAG_array_type:
6373       return "DW_TAG_array_type";
6374     case DW_TAG_class_type:
6375       return "DW_TAG_class_type";
6376     case DW_TAG_entry_point:
6377       return "DW_TAG_entry_point";
6378     case DW_TAG_enumeration_type:
6379       return "DW_TAG_enumeration_type";
6380     case DW_TAG_formal_parameter:
6381       return "DW_TAG_formal_parameter";
6382     case DW_TAG_imported_declaration:
6383       return "DW_TAG_imported_declaration";
6384     case DW_TAG_label:
6385       return "DW_TAG_label";
6386     case DW_TAG_lexical_block:
6387       return "DW_TAG_lexical_block";
6388     case DW_TAG_member:
6389       return "DW_TAG_member";
6390     case DW_TAG_pointer_type:
6391       return "DW_TAG_pointer_type";
6392     case DW_TAG_reference_type:
6393       return "DW_TAG_reference_type";
6394     case DW_TAG_compile_unit:
6395       return "DW_TAG_compile_unit";
6396     case DW_TAG_string_type:
6397       return "DW_TAG_string_type";
6398     case DW_TAG_structure_type:
6399       return "DW_TAG_structure_type";
6400     case DW_TAG_subroutine_type:
6401       return "DW_TAG_subroutine_type";
6402     case DW_TAG_typedef:
6403       return "DW_TAG_typedef";
6404     case DW_TAG_union_type:
6405       return "DW_TAG_union_type";
6406     case DW_TAG_unspecified_parameters:
6407       return "DW_TAG_unspecified_parameters";
6408     case DW_TAG_variant:
6409       return "DW_TAG_variant";
6410     case DW_TAG_common_block:
6411       return "DW_TAG_common_block";
6412     case DW_TAG_common_inclusion:
6413       return "DW_TAG_common_inclusion";
6414     case DW_TAG_inheritance:
6415       return "DW_TAG_inheritance";
6416     case DW_TAG_inlined_subroutine:
6417       return "DW_TAG_inlined_subroutine";
6418     case DW_TAG_module:
6419       return "DW_TAG_module";
6420     case DW_TAG_ptr_to_member_type:
6421       return "DW_TAG_ptr_to_member_type";
6422     case DW_TAG_set_type:
6423       return "DW_TAG_set_type";
6424     case DW_TAG_subrange_type:
6425       return "DW_TAG_subrange_type";
6426     case DW_TAG_with_stmt:
6427       return "DW_TAG_with_stmt";
6428     case DW_TAG_access_declaration:
6429       return "DW_TAG_access_declaration";
6430     case DW_TAG_base_type:
6431       return "DW_TAG_base_type";
6432     case DW_TAG_catch_block:
6433       return "DW_TAG_catch_block";
6434     case DW_TAG_const_type:
6435       return "DW_TAG_const_type";
6436     case DW_TAG_constant:
6437       return "DW_TAG_constant";
6438     case DW_TAG_enumerator:
6439       return "DW_TAG_enumerator";
6440     case DW_TAG_file_type:
6441       return "DW_TAG_file_type";
6442     case DW_TAG_friend:
6443       return "DW_TAG_friend";
6444     case DW_TAG_namelist:
6445       return "DW_TAG_namelist";
6446     case DW_TAG_namelist_item:
6447       return "DW_TAG_namelist_item";
6448     case DW_TAG_packed_type:
6449       return "DW_TAG_packed_type";
6450     case DW_TAG_subprogram:
6451       return "DW_TAG_subprogram";
6452     case DW_TAG_template_type_param:
6453       return "DW_TAG_template_type_param";
6454     case DW_TAG_template_value_param:
6455       return "DW_TAG_template_value_param";
6456     case DW_TAG_thrown_type:
6457       return "DW_TAG_thrown_type";
6458     case DW_TAG_try_block:
6459       return "DW_TAG_try_block";
6460     case DW_TAG_variant_part:
6461       return "DW_TAG_variant_part";
6462     case DW_TAG_variable:
6463       return "DW_TAG_variable";
6464     case DW_TAG_volatile_type:
6465       return "DW_TAG_volatile_type";
6466     case DW_TAG_dwarf_procedure:
6467       return "DW_TAG_dwarf_procedure";
6468     case DW_TAG_restrict_type:
6469       return "DW_TAG_restrict_type";
6470     case DW_TAG_interface_type:
6471       return "DW_TAG_interface_type";
6472     case DW_TAG_namespace:
6473       return "DW_TAG_namespace";
6474     case DW_TAG_imported_module:
6475       return "DW_TAG_imported_module";
6476     case DW_TAG_unspecified_type:
6477       return "DW_TAG_unspecified_type";
6478     case DW_TAG_partial_unit:
6479       return "DW_TAG_partial_unit";
6480     case DW_TAG_imported_unit:
6481       return "DW_TAG_imported_unit";
6482     case DW_TAG_condition:
6483       return "DW_TAG_condition";
6484     case DW_TAG_shared_type:
6485       return "DW_TAG_shared_type";
6486     case DW_TAG_type_unit:
6487       return "DW_TAG_type_unit";
6488     case DW_TAG_rvalue_reference_type:
6489       return "DW_TAG_rvalue_reference_type";
6490     case DW_TAG_template_alias:
6491       return "DW_TAG_template_alias";
6492     case DW_TAG_GNU_template_parameter_pack:
6493       return "DW_TAG_GNU_template_parameter_pack";
6494     case DW_TAG_GNU_formal_parameter_pack:
6495       return "DW_TAG_GNU_formal_parameter_pack";
6496     case DW_TAG_MIPS_loop:
6497       return "DW_TAG_MIPS_loop";
6498     case DW_TAG_format_label:
6499       return "DW_TAG_format_label";
6500     case DW_TAG_function_template:
6501       return "DW_TAG_function_template";
6502     case DW_TAG_class_template:
6503       return "DW_TAG_class_template";
6504     case DW_TAG_GNU_BINCL:
6505       return "DW_TAG_GNU_BINCL";
6506     case DW_TAG_GNU_EINCL:
6507       return "DW_TAG_GNU_EINCL";
6508     case DW_TAG_GNU_template_template_param:
6509       return "DW_TAG_GNU_template_template_param";
6510     default:
6511       return "DW_TAG_<unknown>";
6512     }
6513 }
6514
6515 /* Convert a DWARF attribute code into its string name.  */
6516
6517 static const char *
6518 dwarf_attr_name (unsigned int attr)
6519 {
6520   switch (attr)
6521     {
6522     case DW_AT_sibling:
6523       return "DW_AT_sibling";
6524     case DW_AT_location:
6525       return "DW_AT_location";
6526     case DW_AT_name:
6527       return "DW_AT_name";
6528     case DW_AT_ordering:
6529       return "DW_AT_ordering";
6530     case DW_AT_subscr_data:
6531       return "DW_AT_subscr_data";
6532     case DW_AT_byte_size:
6533       return "DW_AT_byte_size";
6534     case DW_AT_bit_offset:
6535       return "DW_AT_bit_offset";
6536     case DW_AT_bit_size:
6537       return "DW_AT_bit_size";
6538     case DW_AT_element_list:
6539       return "DW_AT_element_list";
6540     case DW_AT_stmt_list:
6541       return "DW_AT_stmt_list";
6542     case DW_AT_low_pc:
6543       return "DW_AT_low_pc";
6544     case DW_AT_high_pc:
6545       return "DW_AT_high_pc";
6546     case DW_AT_language:
6547       return "DW_AT_language";
6548     case DW_AT_member:
6549       return "DW_AT_member";
6550     case DW_AT_discr:
6551       return "DW_AT_discr";
6552     case DW_AT_discr_value:
6553       return "DW_AT_discr_value";
6554     case DW_AT_visibility:
6555       return "DW_AT_visibility";
6556     case DW_AT_import:
6557       return "DW_AT_import";
6558     case DW_AT_string_length:
6559       return "DW_AT_string_length";
6560     case DW_AT_common_reference:
6561       return "DW_AT_common_reference";
6562     case DW_AT_comp_dir:
6563       return "DW_AT_comp_dir";
6564     case DW_AT_const_value:
6565       return "DW_AT_const_value";
6566     case DW_AT_containing_type:
6567       return "DW_AT_containing_type";
6568     case DW_AT_default_value:
6569       return "DW_AT_default_value";
6570     case DW_AT_inline:
6571       return "DW_AT_inline";
6572     case DW_AT_is_optional:
6573       return "DW_AT_is_optional";
6574     case DW_AT_lower_bound:
6575       return "DW_AT_lower_bound";
6576     case DW_AT_producer:
6577       return "DW_AT_producer";
6578     case DW_AT_prototyped:
6579       return "DW_AT_prototyped";
6580     case DW_AT_return_addr:
6581       return "DW_AT_return_addr";
6582     case DW_AT_start_scope:
6583       return "DW_AT_start_scope";
6584     case DW_AT_bit_stride:
6585       return "DW_AT_bit_stride";
6586     case DW_AT_upper_bound:
6587       return "DW_AT_upper_bound";
6588     case DW_AT_abstract_origin:
6589       return "DW_AT_abstract_origin";
6590     case DW_AT_accessibility:
6591       return "DW_AT_accessibility";
6592     case DW_AT_address_class:
6593       return "DW_AT_address_class";
6594     case DW_AT_artificial:
6595       return "DW_AT_artificial";
6596     case DW_AT_base_types:
6597       return "DW_AT_base_types";
6598     case DW_AT_calling_convention:
6599       return "DW_AT_calling_convention";
6600     case DW_AT_count:
6601       return "DW_AT_count";
6602     case DW_AT_data_member_location:
6603       return "DW_AT_data_member_location";
6604     case DW_AT_decl_column:
6605       return "DW_AT_decl_column";
6606     case DW_AT_decl_file:
6607       return "DW_AT_decl_file";
6608     case DW_AT_decl_line:
6609       return "DW_AT_decl_line";
6610     case DW_AT_declaration:
6611       return "DW_AT_declaration";
6612     case DW_AT_discr_list:
6613       return "DW_AT_discr_list";
6614     case DW_AT_encoding:
6615       return "DW_AT_encoding";
6616     case DW_AT_external:
6617       return "DW_AT_external";
6618     case DW_AT_explicit:
6619       return "DW_AT_explicit";
6620     case DW_AT_frame_base:
6621       return "DW_AT_frame_base";
6622     case DW_AT_friend:
6623       return "DW_AT_friend";
6624     case DW_AT_identifier_case:
6625       return "DW_AT_identifier_case";
6626     case DW_AT_macro_info:
6627       return "DW_AT_macro_info";
6628     case DW_AT_namelist_items:
6629       return "DW_AT_namelist_items";
6630     case DW_AT_priority:
6631       return "DW_AT_priority";
6632     case DW_AT_segment:
6633       return "DW_AT_segment";
6634     case DW_AT_specification:
6635       return "DW_AT_specification";
6636     case DW_AT_static_link:
6637       return "DW_AT_static_link";
6638     case DW_AT_type:
6639       return "DW_AT_type";
6640     case DW_AT_use_location:
6641       return "DW_AT_use_location";
6642     case DW_AT_variable_parameter:
6643       return "DW_AT_variable_parameter";
6644     case DW_AT_virtuality:
6645       return "DW_AT_virtuality";
6646     case DW_AT_vtable_elem_location:
6647       return "DW_AT_vtable_elem_location";
6648
6649     case DW_AT_allocated:
6650       return "DW_AT_allocated";
6651     case DW_AT_associated:
6652       return "DW_AT_associated";
6653     case DW_AT_data_location:
6654       return "DW_AT_data_location";
6655     case DW_AT_byte_stride:
6656       return "DW_AT_byte_stride";
6657     case DW_AT_entry_pc:
6658       return "DW_AT_entry_pc";
6659     case DW_AT_use_UTF8:
6660       return "DW_AT_use_UTF8";
6661     case DW_AT_extension:
6662       return "DW_AT_extension";
6663     case DW_AT_ranges:
6664       return "DW_AT_ranges";
6665     case DW_AT_trampoline:
6666       return "DW_AT_trampoline";
6667     case DW_AT_call_column:
6668       return "DW_AT_call_column";
6669     case DW_AT_call_file:
6670       return "DW_AT_call_file";
6671     case DW_AT_call_line:
6672       return "DW_AT_call_line";
6673
6674     case DW_AT_signature:
6675       return "DW_AT_signature";
6676     case DW_AT_main_subprogram:
6677       return "DW_AT_main_subprogram";
6678     case DW_AT_data_bit_offset:
6679       return "DW_AT_data_bit_offset";
6680     case DW_AT_const_expr:
6681       return "DW_AT_const_expr";
6682     case DW_AT_enum_class:
6683       return "DW_AT_enum_class";
6684     case DW_AT_linkage_name:
6685       return "DW_AT_linkage_name";
6686
6687     case DW_AT_MIPS_fde:
6688       return "DW_AT_MIPS_fde";
6689     case DW_AT_MIPS_loop_begin:
6690       return "DW_AT_MIPS_loop_begin";
6691     case DW_AT_MIPS_tail_loop_begin:
6692       return "DW_AT_MIPS_tail_loop_begin";
6693     case DW_AT_MIPS_epilog_begin:
6694       return "DW_AT_MIPS_epilog_begin";
6695     case DW_AT_MIPS_loop_unroll_factor:
6696       return "DW_AT_MIPS_loop_unroll_factor";
6697     case DW_AT_MIPS_software_pipeline_depth:
6698       return "DW_AT_MIPS_software_pipeline_depth";
6699     case DW_AT_MIPS_linkage_name:
6700       return "DW_AT_MIPS_linkage_name";
6701     case DW_AT_MIPS_stride:
6702       return "DW_AT_MIPS_stride";
6703     case DW_AT_MIPS_abstract_name:
6704       return "DW_AT_MIPS_abstract_name";
6705     case DW_AT_MIPS_clone_origin:
6706       return "DW_AT_MIPS_clone_origin";
6707     case DW_AT_MIPS_has_inlines:
6708       return "DW_AT_MIPS_has_inlines";
6709
6710     case DW_AT_sf_names:
6711       return "DW_AT_sf_names";
6712     case DW_AT_src_info:
6713       return "DW_AT_src_info";
6714     case DW_AT_mac_info:
6715       return "DW_AT_mac_info";
6716     case DW_AT_src_coords:
6717       return "DW_AT_src_coords";
6718     case DW_AT_body_begin:
6719       return "DW_AT_body_begin";
6720     case DW_AT_body_end:
6721       return "DW_AT_body_end";
6722     case DW_AT_GNU_vector:
6723       return "DW_AT_GNU_vector";
6724     case DW_AT_GNU_guarded_by:
6725       return "DW_AT_GNU_guarded_by";
6726     case DW_AT_GNU_pt_guarded_by:
6727       return "DW_AT_GNU_pt_guarded_by";
6728     case DW_AT_GNU_guarded:
6729       return "DW_AT_GNU_guarded";
6730     case DW_AT_GNU_pt_guarded:
6731       return "DW_AT_GNU_pt_guarded";
6732     case DW_AT_GNU_locks_excluded:
6733       return "DW_AT_GNU_locks_excluded";
6734     case DW_AT_GNU_exclusive_locks_required:
6735       return "DW_AT_GNU_exclusive_locks_required";
6736     case DW_AT_GNU_shared_locks_required:
6737       return "DW_AT_GNU_shared_locks_required";
6738     case DW_AT_GNU_odr_signature:
6739       return "DW_AT_GNU_odr_signature";
6740     case DW_AT_GNU_template_name:
6741       return "DW_AT_GNU_template_name";
6742
6743     case DW_AT_VMS_rtnbeg_pd_address:
6744       return "DW_AT_VMS_rtnbeg_pd_address";
6745
6746     default:
6747       return "DW_AT_<unknown>";
6748     }
6749 }
6750
6751 /* Convert a DWARF value form code into its string name.  */
6752
6753 static const char *
6754 dwarf_form_name (unsigned int form)
6755 {
6756   switch (form)
6757     {
6758     case DW_FORM_addr:
6759       return "DW_FORM_addr";
6760     case DW_FORM_block2:
6761       return "DW_FORM_block2";
6762     case DW_FORM_block4:
6763       return "DW_FORM_block4";
6764     case DW_FORM_data2:
6765       return "DW_FORM_data2";
6766     case DW_FORM_data4:
6767       return "DW_FORM_data4";
6768     case DW_FORM_data8:
6769       return "DW_FORM_data8";
6770     case DW_FORM_string:
6771       return "DW_FORM_string";
6772     case DW_FORM_block:
6773       return "DW_FORM_block";
6774     case DW_FORM_block1:
6775       return "DW_FORM_block1";
6776     case DW_FORM_data1:
6777       return "DW_FORM_data1";
6778     case DW_FORM_flag:
6779       return "DW_FORM_flag";
6780     case DW_FORM_sdata:
6781       return "DW_FORM_sdata";
6782     case DW_FORM_strp:
6783       return "DW_FORM_strp";
6784     case DW_FORM_udata:
6785       return "DW_FORM_udata";
6786     case DW_FORM_ref_addr:
6787       return "DW_FORM_ref_addr";
6788     case DW_FORM_ref1:
6789       return "DW_FORM_ref1";
6790     case DW_FORM_ref2:
6791       return "DW_FORM_ref2";
6792     case DW_FORM_ref4:
6793       return "DW_FORM_ref4";
6794     case DW_FORM_ref8:
6795       return "DW_FORM_ref8";
6796     case DW_FORM_ref_udata:
6797       return "DW_FORM_ref_udata";
6798     case DW_FORM_indirect:
6799       return "DW_FORM_indirect";
6800     case DW_FORM_sec_offset:
6801       return "DW_FORM_sec_offset";
6802     case DW_FORM_exprloc:
6803       return "DW_FORM_exprloc";
6804     case DW_FORM_flag_present:
6805       return "DW_FORM_flag_present";
6806     case DW_FORM_ref_sig8:
6807       return "DW_FORM_ref_sig8";
6808     default:
6809       return "DW_FORM_<unknown>";
6810     }
6811 }
6812 \f
6813 /* Determine the "ultimate origin" of a decl.  The decl may be an inlined
6814    instance of an inlined instance of a decl which is local to an inline
6815    function, so we have to trace all of the way back through the origin chain
6816    to find out what sort of node actually served as the original seed for the
6817    given block.  */
6818
6819 static tree
6820 decl_ultimate_origin (const_tree decl)
6821 {
6822   if (!CODE_CONTAINS_STRUCT (TREE_CODE (decl), TS_DECL_COMMON))
6823     return NULL_TREE;
6824
6825   /* output_inline_function sets DECL_ABSTRACT_ORIGIN for all the
6826      nodes in the function to point to themselves; ignore that if
6827      we're trying to output the abstract instance of this function.  */
6828   if (DECL_ABSTRACT (decl) && DECL_ABSTRACT_ORIGIN (decl) == decl)
6829     return NULL_TREE;
6830
6831   /* Since the DECL_ABSTRACT_ORIGIN for a DECL is supposed to be the
6832      most distant ancestor, this should never happen.  */
6833   gcc_assert (!DECL_FROM_INLINE (DECL_ORIGIN (decl)));
6834
6835   return DECL_ABSTRACT_ORIGIN (decl);
6836 }
6837
6838 /* Get the class to which DECL belongs, if any.  In g++, the DECL_CONTEXT
6839    of a virtual function may refer to a base class, so we check the 'this'
6840    parameter.  */
6841
6842 static tree
6843 decl_class_context (tree decl)
6844 {
6845   tree context = NULL_TREE;
6846
6847   if (TREE_CODE (decl) != FUNCTION_DECL || ! DECL_VINDEX (decl))
6848     context = DECL_CONTEXT (decl);
6849   else
6850     context = TYPE_MAIN_VARIANT
6851       (TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (TREE_TYPE (decl)))));
6852
6853   if (context && !TYPE_P (context))
6854     context = NULL_TREE;
6855
6856   return context;
6857 }
6858 \f
6859 /* Add an attribute/value pair to a DIE.  */
6860
6861 static inline void
6862 add_dwarf_attr (dw_die_ref die, dw_attr_ref attr)
6863 {
6864   /* Maybe this should be an assert?  */
6865   if (die == NULL)
6866     return;
6867
6868   if (die->die_attr == NULL)
6869     die->die_attr = VEC_alloc (dw_attr_node, gc, 1);
6870   VEC_safe_push (dw_attr_node, gc, die->die_attr, attr);
6871 }
6872
6873 static inline enum dw_val_class
6874 AT_class (dw_attr_ref a)
6875 {
6876   return a->dw_attr_val.val_class;
6877 }
6878
6879 /* Add a flag value attribute to a DIE.  */
6880
6881 static inline void
6882 add_AT_flag (dw_die_ref die, enum dwarf_attribute attr_kind, unsigned int flag)
6883 {
6884   dw_attr_node attr;
6885
6886   attr.dw_attr = attr_kind;
6887   attr.dw_attr_val.val_class = dw_val_class_flag;
6888   attr.dw_attr_val.v.val_flag = flag;
6889   add_dwarf_attr (die, &attr);
6890 }
6891
6892 static inline unsigned
6893 AT_flag (dw_attr_ref a)
6894 {
6895   gcc_assert (a && AT_class (a) == dw_val_class_flag);
6896   return a->dw_attr_val.v.val_flag;
6897 }
6898
6899 /* Add a signed integer attribute value to a DIE.  */
6900
6901 static inline void
6902 add_AT_int (dw_die_ref die, enum dwarf_attribute attr_kind, HOST_WIDE_INT int_val)
6903 {
6904   dw_attr_node attr;
6905
6906   attr.dw_attr = attr_kind;
6907   attr.dw_attr_val.val_class = dw_val_class_const;
6908   attr.dw_attr_val.v.val_int = int_val;
6909   add_dwarf_attr (die, &attr);
6910 }
6911
6912 static inline HOST_WIDE_INT
6913 AT_int (dw_attr_ref a)
6914 {
6915   gcc_assert (a && AT_class (a) == dw_val_class_const);
6916   return a->dw_attr_val.v.val_int;
6917 }
6918
6919 /* Add an unsigned integer attribute value to a DIE.  */
6920
6921 static inline void
6922 add_AT_unsigned (dw_die_ref die, enum dwarf_attribute attr_kind,
6923                  unsigned HOST_WIDE_INT unsigned_val)
6924 {
6925   dw_attr_node attr;
6926
6927   attr.dw_attr = attr_kind;
6928   attr.dw_attr_val.val_class = dw_val_class_unsigned_const;
6929   attr.dw_attr_val.v.val_unsigned = unsigned_val;
6930   add_dwarf_attr (die, &attr);
6931 }
6932
6933 static inline unsigned HOST_WIDE_INT
6934 AT_unsigned (dw_attr_ref a)
6935 {
6936   gcc_assert (a && AT_class (a) == dw_val_class_unsigned_const);
6937   return a->dw_attr_val.v.val_unsigned;
6938 }
6939
6940 /* Add an unsigned double integer attribute value to a DIE.  */
6941
6942 static inline void
6943 add_AT_double (dw_die_ref die, enum dwarf_attribute attr_kind,
6944                HOST_WIDE_INT high, unsigned HOST_WIDE_INT low)
6945 {
6946   dw_attr_node attr;
6947
6948   attr.dw_attr = attr_kind;
6949   attr.dw_attr_val.val_class = dw_val_class_const_double;
6950   attr.dw_attr_val.v.val_double.high = high;
6951   attr.dw_attr_val.v.val_double.low = low;
6952   add_dwarf_attr (die, &attr);
6953 }
6954
6955 /* Add a floating point attribute value to a DIE and return it.  */
6956
6957 static inline void
6958 add_AT_vec (dw_die_ref die, enum dwarf_attribute attr_kind,
6959             unsigned int length, unsigned int elt_size, unsigned char *array)
6960 {
6961   dw_attr_node attr;
6962
6963   attr.dw_attr = attr_kind;
6964   attr.dw_attr_val.val_class = dw_val_class_vec;
6965   attr.dw_attr_val.v.val_vec.length = length;
6966   attr.dw_attr_val.v.val_vec.elt_size = elt_size;
6967   attr.dw_attr_val.v.val_vec.array = array;
6968   add_dwarf_attr (die, &attr);
6969 }
6970
6971 /* Add an 8-byte data attribute value to a DIE.  */
6972
6973 static inline void
6974 add_AT_data8 (dw_die_ref die, enum dwarf_attribute attr_kind,
6975               unsigned char data8[8])
6976 {
6977   dw_attr_node attr;
6978
6979   attr.dw_attr = attr_kind;
6980   attr.dw_attr_val.val_class = dw_val_class_data8;
6981   memcpy (attr.dw_attr_val.v.val_data8, data8, 8);
6982   add_dwarf_attr (die, &attr);
6983 }
6984
6985 /* Hash and equality functions for debug_str_hash.  */
6986
6987 static hashval_t
6988 debug_str_do_hash (const void *x)
6989 {
6990   return htab_hash_string (((const struct indirect_string_node *)x)->str);
6991 }
6992
6993 static int
6994 debug_str_eq (const void *x1, const void *x2)
6995 {
6996   return strcmp ((((const struct indirect_string_node *)x1)->str),
6997                  (const char *)x2) == 0;
6998 }
6999
7000 /* Add STR to the indirect string hash table.  */
7001
7002 static struct indirect_string_node *
7003 find_AT_string (const char *str)
7004 {
7005   struct indirect_string_node *node;
7006   void **slot;
7007
7008   if (! debug_str_hash)
7009     debug_str_hash = htab_create_ggc (10, debug_str_do_hash,
7010                                       debug_str_eq, NULL);
7011
7012   slot = htab_find_slot_with_hash (debug_str_hash, str,
7013                                    htab_hash_string (str), INSERT);
7014   if (*slot == NULL)
7015     {
7016       node = (struct indirect_string_node *)
7017                ggc_alloc_cleared (sizeof (struct indirect_string_node));
7018       node->str = ggc_strdup (str);
7019       *slot = node;
7020     }
7021   else
7022     node = (struct indirect_string_node *) *slot;
7023
7024   node->refcount++;
7025   return node;
7026 }
7027
7028 /* Add a string attribute value to a DIE.  */
7029
7030 static inline void
7031 add_AT_string (dw_die_ref die, enum dwarf_attribute attr_kind, const char *str)
7032 {
7033   dw_attr_node attr;
7034   struct indirect_string_node *node;
7035
7036   node = find_AT_string (str);
7037
7038   attr.dw_attr = attr_kind;
7039   attr.dw_attr_val.val_class = dw_val_class_str;
7040   attr.dw_attr_val.v.val_str = node;
7041   add_dwarf_attr (die, &attr);
7042 }
7043
7044 /* Create a label for an indirect string node, ensuring it is going to
7045    be output, unless its reference count goes down to zero.  */
7046
7047 static inline void
7048 gen_label_for_indirect_string (struct indirect_string_node *node)
7049 {
7050   char label[32];
7051
7052   if (node->label)
7053     return;
7054
7055   ASM_GENERATE_INTERNAL_LABEL (label, "LASF", dw2_string_counter);
7056   ++dw2_string_counter;
7057   node->label = xstrdup (label);
7058 }
7059
7060 /* Create a SYMBOL_REF rtx whose value is the initial address of a
7061    debug string STR.  */
7062
7063 static inline rtx
7064 get_debug_string_label (const char *str)
7065 {
7066   struct indirect_string_node *node = find_AT_string (str);
7067
7068   debug_str_hash_forced = true;
7069
7070   gen_label_for_indirect_string (node);
7071
7072   return gen_rtx_SYMBOL_REF (Pmode, node->label);
7073 }
7074
7075 static inline const char *
7076 AT_string (dw_attr_ref a)
7077 {
7078   gcc_assert (a && AT_class (a) == dw_val_class_str);
7079   return a->dw_attr_val.v.val_str->str;
7080 }
7081
7082 /* Find out whether a string should be output inline in DIE
7083    or out-of-line in .debug_str section.  */
7084
7085 static enum dwarf_form
7086 AT_string_form (dw_attr_ref a)
7087 {
7088   struct indirect_string_node *node;
7089   unsigned int len;
7090
7091   gcc_assert (a && AT_class (a) == dw_val_class_str);
7092
7093   node = a->dw_attr_val.v.val_str;
7094   if (node->form)
7095     return node->form;
7096
7097   len = strlen (node->str) + 1;
7098
7099   /* If the string is shorter or equal to the size of the reference, it is
7100      always better to put it inline.  */
7101   if (len <= DWARF_OFFSET_SIZE || node->refcount == 0)
7102     return node->form = DW_FORM_string;
7103
7104   /* If we cannot expect the linker to merge strings in .debug_str
7105      section, only put it into .debug_str if it is worth even in this
7106      single module.  */
7107   if (DWARF2_INDIRECT_STRING_SUPPORT_MISSING_ON_TARGET
7108       || ((debug_str_section->common.flags & SECTION_MERGE) == 0
7109       && (len - DWARF_OFFSET_SIZE) * node->refcount <= len))
7110     return node->form = DW_FORM_string;
7111
7112   gen_label_for_indirect_string (node);
7113
7114   return node->form = DW_FORM_strp;
7115 }
7116
7117 /* Add a DIE reference attribute value to a DIE.  */
7118
7119 static inline void
7120 add_AT_die_ref (dw_die_ref die, enum dwarf_attribute attr_kind, dw_die_ref targ_die)
7121 {
7122   dw_attr_node attr;
7123
7124   attr.dw_attr = attr_kind;
7125   attr.dw_attr_val.val_class = dw_val_class_die_ref;
7126   attr.dw_attr_val.v.val_die_ref.die = targ_die;
7127   attr.dw_attr_val.v.val_die_ref.external = 0;
7128   add_dwarf_attr (die, &attr);
7129 }
7130
7131 /* Add an AT_specification attribute to a DIE, and also make the back
7132    pointer from the specification to the definition.  */
7133
7134 static inline void
7135 add_AT_specification (dw_die_ref die, dw_die_ref targ_die)
7136 {
7137   add_AT_die_ref (die, DW_AT_specification, targ_die);
7138   gcc_assert (!targ_die->die_definition);
7139   targ_die->die_definition = die;
7140 }
7141
7142 static inline dw_die_ref
7143 AT_ref (dw_attr_ref a)
7144 {
7145   gcc_assert (a && AT_class (a) == dw_val_class_die_ref);
7146   return a->dw_attr_val.v.val_die_ref.die;
7147 }
7148
7149 static inline int
7150 AT_ref_external (dw_attr_ref a)
7151 {
7152   if (a && AT_class (a) == dw_val_class_die_ref)
7153     return a->dw_attr_val.v.val_die_ref.external;
7154
7155   return 0;
7156 }
7157
7158 static inline void
7159 set_AT_ref_external (dw_attr_ref a, int i)
7160 {
7161   gcc_assert (a && AT_class (a) == dw_val_class_die_ref);
7162   a->dw_attr_val.v.val_die_ref.external = i;
7163 }
7164
7165 /* Add an FDE reference attribute value to a DIE.  */
7166
7167 static inline void
7168 add_AT_fde_ref (dw_die_ref die, enum dwarf_attribute attr_kind, unsigned int targ_fde)
7169 {
7170   dw_attr_node attr;
7171
7172   attr.dw_attr = attr_kind;
7173   attr.dw_attr_val.val_class = dw_val_class_fde_ref;
7174   attr.dw_attr_val.v.val_fde_index = targ_fde;
7175   add_dwarf_attr (die, &attr);
7176 }
7177
7178 /* Add a location description attribute value to a DIE.  */
7179
7180 static inline void
7181 add_AT_loc (dw_die_ref die, enum dwarf_attribute attr_kind, dw_loc_descr_ref loc)
7182 {
7183   dw_attr_node attr;
7184
7185   attr.dw_attr = attr_kind;
7186   attr.dw_attr_val.val_class = dw_val_class_loc;
7187   attr.dw_attr_val.v.val_loc = loc;
7188   add_dwarf_attr (die, &attr);
7189 }
7190
7191 static inline dw_loc_descr_ref
7192 AT_loc (dw_attr_ref a)
7193 {
7194   gcc_assert (a && AT_class (a) == dw_val_class_loc);
7195   return a->dw_attr_val.v.val_loc;
7196 }
7197
7198 static inline void
7199 add_AT_loc_list (dw_die_ref die, enum dwarf_attribute attr_kind, dw_loc_list_ref loc_list)
7200 {
7201   dw_attr_node attr;
7202
7203   attr.dw_attr = attr_kind;
7204   attr.dw_attr_val.val_class = dw_val_class_loc_list;
7205   attr.dw_attr_val.v.val_loc_list = loc_list;
7206   add_dwarf_attr (die, &attr);
7207   have_location_lists = true;
7208 }
7209
7210 static inline dw_loc_list_ref
7211 AT_loc_list (dw_attr_ref a)
7212 {
7213   gcc_assert (a && AT_class (a) == dw_val_class_loc_list);
7214   return a->dw_attr_val.v.val_loc_list;
7215 }
7216
7217 /* Add an address constant attribute value to a DIE.  */
7218
7219 static inline void
7220 add_AT_addr (dw_die_ref die, enum dwarf_attribute attr_kind, rtx addr)
7221 {
7222   dw_attr_node attr;
7223
7224   attr.dw_attr = attr_kind;
7225   attr.dw_attr_val.val_class = dw_val_class_addr;
7226   attr.dw_attr_val.v.val_addr = addr;
7227   add_dwarf_attr (die, &attr);
7228 }
7229
7230 /* Get the RTX from to an address DIE attribute.  */
7231
7232 static inline rtx
7233 AT_addr (dw_attr_ref a)
7234 {
7235   gcc_assert (a && AT_class (a) == dw_val_class_addr);
7236   return a->dw_attr_val.v.val_addr;
7237 }
7238
7239 /* Add a file attribute value to a DIE.  */
7240
7241 static inline void
7242 add_AT_file (dw_die_ref die, enum dwarf_attribute attr_kind,
7243              struct dwarf_file_data *fd)
7244 {
7245   dw_attr_node attr;
7246
7247   attr.dw_attr = attr_kind;
7248   attr.dw_attr_val.val_class = dw_val_class_file;
7249   attr.dw_attr_val.v.val_file = fd;
7250   add_dwarf_attr (die, &attr);
7251 }
7252
7253 /* Get the dwarf_file_data from a file DIE attribute.  */
7254
7255 static inline struct dwarf_file_data *
7256 AT_file (dw_attr_ref a)
7257 {
7258   gcc_assert (a && AT_class (a) == dw_val_class_file);
7259   return a->dw_attr_val.v.val_file;
7260 }
7261
7262 /* Add a label identifier attribute value to a DIE.  */
7263
7264 static inline void
7265 add_AT_lbl_id (dw_die_ref die, enum dwarf_attribute attr_kind, const char *lbl_id)
7266 {
7267   dw_attr_node attr;
7268
7269   attr.dw_attr = attr_kind;
7270   attr.dw_attr_val.val_class = dw_val_class_lbl_id;
7271   attr.dw_attr_val.v.val_lbl_id = xstrdup (lbl_id);
7272   add_dwarf_attr (die, &attr);
7273 }
7274
7275 /* Add a section offset attribute value to a DIE, an offset into the
7276    debug_line section.  */
7277
7278 static inline void
7279 add_AT_lineptr (dw_die_ref die, enum dwarf_attribute attr_kind,
7280                 const char *label)
7281 {
7282   dw_attr_node attr;
7283
7284   attr.dw_attr = attr_kind;
7285   attr.dw_attr_val.val_class = dw_val_class_lineptr;
7286   attr.dw_attr_val.v.val_lbl_id = xstrdup (label);
7287   add_dwarf_attr (die, &attr);
7288 }
7289
7290 /* Add a section offset attribute value to a DIE, an offset into the
7291    debug_macinfo section.  */
7292
7293 static inline void
7294 add_AT_macptr (dw_die_ref die, enum dwarf_attribute attr_kind,
7295                const char *label)
7296 {
7297   dw_attr_node attr;
7298
7299   attr.dw_attr = attr_kind;
7300   attr.dw_attr_val.val_class = dw_val_class_macptr;
7301   attr.dw_attr_val.v.val_lbl_id = xstrdup (label);
7302   add_dwarf_attr (die, &attr);
7303 }
7304
7305 /* Add an offset attribute value to a DIE.  */
7306
7307 static inline void
7308 add_AT_offset (dw_die_ref die, enum dwarf_attribute attr_kind,
7309                unsigned HOST_WIDE_INT offset)
7310 {
7311   dw_attr_node attr;
7312
7313   attr.dw_attr = attr_kind;
7314   attr.dw_attr_val.val_class = dw_val_class_offset;
7315   attr.dw_attr_val.v.val_offset = offset;
7316   add_dwarf_attr (die, &attr);
7317 }
7318
7319 /* Add an range_list attribute value to a DIE.  */
7320
7321 static void
7322 add_AT_range_list (dw_die_ref die, enum dwarf_attribute attr_kind,
7323                    long unsigned int offset)
7324 {
7325   dw_attr_node attr;
7326
7327   attr.dw_attr = attr_kind;
7328   attr.dw_attr_val.val_class = dw_val_class_range_list;
7329   attr.dw_attr_val.v.val_offset = offset;
7330   add_dwarf_attr (die, &attr);
7331 }
7332
7333 static inline const char *
7334 AT_lbl (dw_attr_ref a)
7335 {
7336   gcc_assert (a && (AT_class (a) == dw_val_class_lbl_id
7337                     || AT_class (a) == dw_val_class_lineptr
7338                     || AT_class (a) == dw_val_class_macptr));
7339   return a->dw_attr_val.v.val_lbl_id;
7340 }
7341
7342 /* Get the attribute of type attr_kind.  */
7343
7344 static dw_attr_ref
7345 get_AT (dw_die_ref die, enum dwarf_attribute attr_kind)
7346 {
7347   dw_attr_ref a;
7348   unsigned ix;
7349   dw_die_ref spec = NULL;
7350
7351   if (! die)
7352     return NULL;
7353
7354   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
7355     if (a->dw_attr == attr_kind)
7356       return a;
7357     else if (a->dw_attr == DW_AT_specification
7358              || a->dw_attr == DW_AT_abstract_origin)
7359       spec = AT_ref (a);
7360
7361   if (spec)
7362     return get_AT (spec, attr_kind);
7363
7364   return NULL;
7365 }
7366
7367 /* Return the "low pc" attribute value, typically associated with a subprogram
7368    DIE.  Return null if the "low pc" attribute is either not present, or if it
7369    cannot be represented as an assembler label identifier.  */
7370
7371 static inline const char *
7372 get_AT_low_pc (dw_die_ref die)
7373 {
7374   dw_attr_ref a = get_AT (die, DW_AT_low_pc);
7375
7376   return a ? AT_lbl (a) : NULL;
7377 }
7378
7379 /* Return the "high pc" attribute value, typically associated with a subprogram
7380    DIE.  Return null if the "high pc" attribute is either not present, or if it
7381    cannot be represented as an assembler label identifier.  */
7382
7383 static inline const char *
7384 get_AT_hi_pc (dw_die_ref die)
7385 {
7386   dw_attr_ref a = get_AT (die, DW_AT_high_pc);
7387
7388   return a ? AT_lbl (a) : NULL;
7389 }
7390
7391 /* Return the value of the string attribute designated by ATTR_KIND, or
7392    NULL if it is not present.  */
7393
7394 static inline const char *
7395 get_AT_string (dw_die_ref die, enum dwarf_attribute attr_kind)
7396 {
7397   dw_attr_ref a = get_AT (die, attr_kind);
7398
7399   return a ? AT_string (a) : NULL;
7400 }
7401
7402 /* Return the value of the flag attribute designated by ATTR_KIND, or -1
7403    if it is not present.  */
7404
7405 static inline int
7406 get_AT_flag (dw_die_ref die, enum dwarf_attribute attr_kind)
7407 {
7408   dw_attr_ref a = get_AT (die, attr_kind);
7409
7410   return a ? AT_flag (a) : 0;
7411 }
7412
7413 /* Return the value of the unsigned attribute designated by ATTR_KIND, or 0
7414    if it is not present.  */
7415
7416 static inline unsigned
7417 get_AT_unsigned (dw_die_ref die, enum dwarf_attribute attr_kind)
7418 {
7419   dw_attr_ref a = get_AT (die, attr_kind);
7420
7421   return a ? AT_unsigned (a) : 0;
7422 }
7423
7424 static inline dw_die_ref
7425 get_AT_ref (dw_die_ref die, enum dwarf_attribute attr_kind)
7426 {
7427   dw_attr_ref a = get_AT (die, attr_kind);
7428
7429   return a ? AT_ref (a) : NULL;
7430 }
7431
7432 static inline struct dwarf_file_data *
7433 get_AT_file (dw_die_ref die, enum dwarf_attribute attr_kind)
7434 {
7435   dw_attr_ref a = get_AT (die, attr_kind);
7436
7437   return a ? AT_file (a) : NULL;
7438 }
7439
7440 /* Return TRUE if the language is C or C++.  */
7441
7442 static inline bool
7443 is_c_family (void)
7444 {
7445   unsigned int lang = get_AT_unsigned (comp_unit_die, DW_AT_language);
7446
7447   return (lang == DW_LANG_C || lang == DW_LANG_C89 || lang == DW_LANG_ObjC
7448           || lang == DW_LANG_C99
7449           || lang == DW_LANG_C_plus_plus || lang == DW_LANG_ObjC_plus_plus);
7450 }
7451
7452 /* Return TRUE if the language is C++.  */
7453
7454 static inline bool
7455 is_cxx (void)
7456 {
7457   unsigned int lang = get_AT_unsigned (comp_unit_die, DW_AT_language);
7458
7459   return lang == DW_LANG_C_plus_plus || lang == DW_LANG_ObjC_plus_plus;
7460 }
7461
7462 /* Return TRUE if the language is Fortran.  */
7463
7464 static inline bool
7465 is_fortran (void)
7466 {
7467   unsigned int lang = get_AT_unsigned (comp_unit_die, DW_AT_language);
7468
7469   return (lang == DW_LANG_Fortran77
7470           || lang == DW_LANG_Fortran90
7471           || lang == DW_LANG_Fortran95);
7472 }
7473
7474 /* Return TRUE if the language is Java.  */
7475
7476 static inline bool
7477 is_java (void)
7478 {
7479   unsigned int lang = get_AT_unsigned (comp_unit_die, DW_AT_language);
7480
7481   return lang == DW_LANG_Java;
7482 }
7483
7484 /* Return TRUE if the language is Ada.  */
7485
7486 static inline bool
7487 is_ada (void)
7488 {
7489   unsigned int lang = get_AT_unsigned (comp_unit_die, DW_AT_language);
7490
7491   return lang == DW_LANG_Ada95 || lang == DW_LANG_Ada83;
7492 }
7493
7494 /* Remove the specified attribute if present.  */
7495
7496 static void
7497 remove_AT (dw_die_ref die, enum dwarf_attribute attr_kind)
7498 {
7499   dw_attr_ref a;
7500   unsigned ix;
7501
7502   if (! die)
7503     return;
7504
7505   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
7506     if (a->dw_attr == attr_kind)
7507       {
7508         if (AT_class (a) == dw_val_class_str)
7509           if (a->dw_attr_val.v.val_str->refcount)
7510             a->dw_attr_val.v.val_str->refcount--;
7511
7512         /* VEC_ordered_remove should help reduce the number of abbrevs
7513            that are needed.  */
7514         VEC_ordered_remove (dw_attr_node, die->die_attr, ix);
7515         return;
7516       }
7517 }
7518
7519 /* Remove CHILD from its parent.  PREV must have the property that
7520    PREV->DIE_SIB == CHILD.  Does not alter CHILD.  */
7521
7522 static void
7523 remove_child_with_prev (dw_die_ref child, dw_die_ref prev)
7524 {
7525   gcc_assert (child->die_parent == prev->die_parent);
7526   gcc_assert (prev->die_sib == child);
7527   if (prev == child)
7528     {
7529       gcc_assert (child->die_parent->die_child == child);
7530       prev = NULL;
7531     }
7532   else
7533     prev->die_sib = child->die_sib;
7534   if (child->die_parent->die_child == child)
7535     child->die_parent->die_child = prev;
7536 }
7537
7538 /* Replace OLD_CHILD with NEW_CHILD.  PREV must have the property that
7539    PREV->DIE_SIB == OLD_CHILD.  Does not alter OLD_CHILD.  */
7540
7541 static void
7542 replace_child (dw_die_ref old_child, dw_die_ref new_child, dw_die_ref prev)
7543 {
7544   dw_die_ref parent = old_child->die_parent;
7545
7546   gcc_assert (parent == prev->die_parent);
7547   gcc_assert (prev->die_sib == old_child);
7548
7549   new_child->die_parent = parent;
7550   if (prev == old_child)
7551     {
7552       gcc_assert (parent->die_child == old_child);
7553       new_child->die_sib = new_child;
7554     }
7555   else
7556     {
7557       prev->die_sib = new_child;
7558       new_child->die_sib = old_child->die_sib;
7559     }
7560   if (old_child->die_parent->die_child == old_child)
7561     old_child->die_parent->die_child = new_child;
7562 }
7563
7564 /* Move all children from OLD_PARENT to NEW_PARENT.  */
7565
7566 static void
7567 move_all_children (dw_die_ref old_parent, dw_die_ref new_parent)
7568 {
7569   dw_die_ref c;
7570   new_parent->die_child = old_parent->die_child;
7571   old_parent->die_child = NULL;
7572   FOR_EACH_CHILD (new_parent, c, c->die_parent = new_parent);
7573 }
7574
7575 /* Remove child DIE whose die_tag is TAG.  Do nothing if no child
7576    matches TAG.  */
7577
7578 static void
7579 remove_child_TAG (dw_die_ref die, enum dwarf_tag tag)
7580 {
7581   dw_die_ref c;
7582
7583   c = die->die_child;
7584   if (c) do {
7585     dw_die_ref prev = c;
7586     c = c->die_sib;
7587     while (c->die_tag == tag)
7588       {
7589         remove_child_with_prev (c, prev);
7590         /* Might have removed every child.  */
7591         if (c == c->die_sib)
7592           return;
7593         c = c->die_sib;
7594       }
7595   } while (c != die->die_child);
7596 }
7597
7598 /* Add a CHILD_DIE as the last child of DIE.  */
7599
7600 static void
7601 add_child_die (dw_die_ref die, dw_die_ref child_die)
7602 {
7603   /* FIXME this should probably be an assert.  */
7604   if (! die || ! child_die)
7605     return;
7606   gcc_assert (die != child_die);
7607
7608   child_die->die_parent = die;
7609   if (die->die_child)
7610     {
7611       child_die->die_sib = die->die_child->die_sib;
7612       die->die_child->die_sib = child_die;
7613     }
7614   else
7615     child_die->die_sib = child_die;
7616   die->die_child = child_die;
7617 }
7618
7619 /* Move CHILD, which must be a child of PARENT or the DIE for which PARENT
7620    is the specification, to the end of PARENT's list of children.
7621    This is done by removing and re-adding it.  */
7622
7623 static void
7624 splice_child_die (dw_die_ref parent, dw_die_ref child)
7625 {
7626   dw_die_ref p;
7627
7628   /* We want the declaration DIE from inside the class, not the
7629      specification DIE at toplevel.  */
7630   if (child->die_parent != parent)
7631     {
7632       dw_die_ref tmp = get_AT_ref (child, DW_AT_specification);
7633
7634       if (tmp)
7635         child = tmp;
7636     }
7637
7638   gcc_assert (child->die_parent == parent
7639               || (child->die_parent
7640                   == get_AT_ref (parent, DW_AT_specification)));
7641
7642   for (p = child->die_parent->die_child; ; p = p->die_sib)
7643     if (p->die_sib == child)
7644       {
7645         remove_child_with_prev (child, p);
7646         break;
7647       }
7648
7649   add_child_die (parent, child);
7650 }
7651
7652 /* Return a pointer to a newly created DIE node.  */
7653
7654 static inline dw_die_ref
7655 new_die (enum dwarf_tag tag_value, dw_die_ref parent_die, tree t)
7656 {
7657   dw_die_ref die = GGC_CNEW (die_node);
7658
7659   die->die_tag = tag_value;
7660
7661   if (parent_die != NULL)
7662     add_child_die (parent_die, die);
7663   else
7664     {
7665       limbo_die_node *limbo_node;
7666
7667       limbo_node = GGC_CNEW (limbo_die_node);
7668       limbo_node->die = die;
7669       limbo_node->created_for = t;
7670       limbo_node->next = limbo_die_list;
7671       limbo_die_list = limbo_node;
7672     }
7673
7674   return die;
7675 }
7676
7677 /* Return the DIE associated with the given type specifier.  */
7678
7679 static inline dw_die_ref
7680 lookup_type_die (tree type)
7681 {
7682   return TYPE_SYMTAB_DIE (type);
7683 }
7684
7685 /* Equate a DIE to a given type specifier.  */
7686
7687 static inline void
7688 equate_type_number_to_die (tree type, dw_die_ref type_die)
7689 {
7690   TYPE_SYMTAB_DIE (type) = type_die;
7691 }
7692
7693 /* Returns a hash value for X (which really is a die_struct).  */
7694
7695 static hashval_t
7696 decl_die_table_hash (const void *x)
7697 {
7698   return (hashval_t) ((const_dw_die_ref) x)->decl_id;
7699 }
7700
7701 /* Return nonzero if decl_id of die_struct X is the same as UID of decl *Y.  */
7702
7703 static int
7704 decl_die_table_eq (const void *x, const void *y)
7705 {
7706   return (((const_dw_die_ref) x)->decl_id == DECL_UID ((const_tree) y));
7707 }
7708
7709 /* Return the DIE associated with a given declaration.  */
7710
7711 static inline dw_die_ref
7712 lookup_decl_die (tree decl)
7713 {
7714   return (dw_die_ref) htab_find_with_hash (decl_die_table, decl, DECL_UID (decl));
7715 }
7716
7717 /* Returns a hash value for X (which really is a var_loc_list).  */
7718
7719 static hashval_t
7720 decl_loc_table_hash (const void *x)
7721 {
7722   return (hashval_t) ((const var_loc_list *) x)->decl_id;
7723 }
7724
7725 /* Return nonzero if decl_id of var_loc_list X is the same as
7726    UID of decl *Y.  */
7727
7728 static int
7729 decl_loc_table_eq (const void *x, const void *y)
7730 {
7731   return (((const var_loc_list *) x)->decl_id == DECL_UID ((const_tree) y));
7732 }
7733
7734 /* Return the var_loc list associated with a given declaration.  */
7735
7736 static inline var_loc_list *
7737 lookup_decl_loc (const_tree decl)
7738 {
7739   if (!decl_loc_table)
7740     return NULL;
7741   return (var_loc_list *)
7742     htab_find_with_hash (decl_loc_table, decl, DECL_UID (decl));
7743 }
7744
7745 /* Equate a DIE to a particular declaration.  */
7746
7747 static void
7748 equate_decl_number_to_die (tree decl, dw_die_ref decl_die)
7749 {
7750   unsigned int decl_id = DECL_UID (decl);
7751   void **slot;
7752
7753   slot = htab_find_slot_with_hash (decl_die_table, decl, decl_id, INSERT);
7754   *slot = decl_die;
7755   decl_die->decl_id = decl_id;
7756 }
7757
7758 /* Add a variable location node to the linked list for DECL.  */
7759
7760 static void
7761 add_var_loc_to_decl (tree decl, struct var_loc_node *loc)
7762 {
7763   unsigned int decl_id = DECL_UID (decl);
7764   var_loc_list *temp;
7765   void **slot;
7766
7767   slot = htab_find_slot_with_hash (decl_loc_table, decl, decl_id, INSERT);
7768   if (*slot == NULL)
7769     {
7770       temp = GGC_CNEW (var_loc_list);
7771       temp->decl_id = decl_id;
7772       *slot = temp;
7773     }
7774   else
7775     temp = (var_loc_list *) *slot;
7776
7777   if (temp->last)
7778     {
7779       /* If the current location is the same as the end of the list,
7780          and either both or neither of the locations is uninitialized,
7781          we have nothing to do.  */
7782       if ((!rtx_equal_p (NOTE_VAR_LOCATION_LOC (temp->last->var_loc_note),
7783                          NOTE_VAR_LOCATION_LOC (loc->var_loc_note)))
7784           || ((NOTE_VAR_LOCATION_STATUS (temp->last->var_loc_note)
7785                != NOTE_VAR_LOCATION_STATUS (loc->var_loc_note))
7786               && ((NOTE_VAR_LOCATION_STATUS (temp->last->var_loc_note)
7787                    == VAR_INIT_STATUS_UNINITIALIZED)
7788                   || (NOTE_VAR_LOCATION_STATUS (loc->var_loc_note)
7789                       == VAR_INIT_STATUS_UNINITIALIZED))))
7790         {
7791           /* Add LOC to the end of list and update LAST.  */
7792           temp->last->next = loc;
7793           temp->last = loc;
7794         }
7795     }
7796   /* Do not add empty location to the beginning of the list.  */
7797   else if (NOTE_VAR_LOCATION_LOC (loc->var_loc_note) != NULL_RTX)
7798     {
7799       temp->first = loc;
7800       temp->last = loc;
7801     }
7802 }
7803 \f
7804 /* Keep track of the number of spaces used to indent the
7805    output of the debugging routines that print the structure of
7806    the DIE internal representation.  */
7807 static int print_indent;
7808
7809 /* Indent the line the number of spaces given by print_indent.  */
7810
7811 static inline void
7812 print_spaces (FILE *outfile)
7813 {
7814   fprintf (outfile, "%*s", print_indent, "");
7815 }
7816
7817 /* Print a type signature in hex.  */
7818
7819 static inline void
7820 print_signature (FILE *outfile, char *sig)
7821 {
7822   int i;
7823
7824   for (i = 0; i < DWARF_TYPE_SIGNATURE_SIZE; i++)
7825     fprintf (outfile, "%02x", sig[i] & 0xff);
7826 }
7827
7828 /* Print the information associated with a given DIE, and its children.
7829    This routine is a debugging aid only.  */
7830
7831 static void
7832 print_die (dw_die_ref die, FILE *outfile)
7833 {
7834   dw_attr_ref a;
7835   dw_die_ref c;
7836   unsigned ix;
7837
7838   print_spaces (outfile);
7839   fprintf (outfile, "DIE %4ld: %s\n",
7840            die->die_offset, dwarf_tag_name (die->die_tag));
7841   print_spaces (outfile);
7842   fprintf (outfile, "  abbrev id: %lu", die->die_abbrev);
7843   fprintf (outfile, " offset: %ld\n", die->die_offset);
7844   if (dwarf_version >= 4 && die->die_id.die_type_node)
7845     {
7846       print_spaces (outfile);
7847       fprintf (outfile, "  signature: ");
7848       print_signature (outfile, die->die_id.die_type_node->signature);
7849       fprintf (outfile, "\n");
7850     }
7851
7852   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
7853     {
7854       print_spaces (outfile);
7855       fprintf (outfile, "  %s: ", dwarf_attr_name (a->dw_attr));
7856
7857       switch (AT_class (a))
7858         {
7859         case dw_val_class_addr:
7860           fprintf (outfile, "address");
7861           break;
7862         case dw_val_class_offset:
7863           fprintf (outfile, "offset");
7864           break;
7865         case dw_val_class_loc:
7866           fprintf (outfile, "location descriptor");
7867           break;
7868         case dw_val_class_loc_list:
7869           fprintf (outfile, "location list -> label:%s",
7870                    AT_loc_list (a)->ll_symbol);
7871           break;
7872         case dw_val_class_range_list:
7873           fprintf (outfile, "range list");
7874           break;
7875         case dw_val_class_const:
7876           fprintf (outfile, HOST_WIDE_INT_PRINT_DEC, AT_int (a));
7877           break;
7878         case dw_val_class_unsigned_const:
7879           fprintf (outfile, HOST_WIDE_INT_PRINT_UNSIGNED, AT_unsigned (a));
7880           break;
7881         case dw_val_class_const_double:
7882           fprintf (outfile, "constant ("HOST_WIDE_INT_PRINT_DEC","\
7883                             HOST_WIDE_INT_PRINT_UNSIGNED")",
7884                    a->dw_attr_val.v.val_double.high,
7885                    a->dw_attr_val.v.val_double.low);
7886           break;
7887         case dw_val_class_vec:
7888           fprintf (outfile, "floating-point or vector constant");
7889           break;
7890         case dw_val_class_flag:
7891           fprintf (outfile, "%u", AT_flag (a));
7892           break;
7893         case dw_val_class_die_ref:
7894           if (AT_ref (a) != NULL)
7895             {
7896               if (dwarf_version >= 4 && AT_ref (a)->die_id.die_type_node)
7897                 {
7898                   fprintf (outfile, "die -> signature: ");
7899                   print_signature (outfile,
7900                                    AT_ref (a)->die_id.die_type_node->signature);
7901                 }
7902               else if (dwarf_version < 4 && AT_ref (a)->die_id.die_symbol)
7903                 fprintf (outfile, "die -> label: %s",
7904                          AT_ref (a)->die_id.die_symbol);
7905               else
7906                 fprintf (outfile, "die -> %ld", AT_ref (a)->die_offset);
7907             }
7908           else
7909             fprintf (outfile, "die -> <null>");
7910           break;
7911         case dw_val_class_lbl_id:
7912         case dw_val_class_lineptr:
7913         case dw_val_class_macptr:
7914           fprintf (outfile, "label: %s", AT_lbl (a));
7915           break;
7916         case dw_val_class_str:
7917           if (AT_string (a) != NULL)
7918             fprintf (outfile, "\"%s\"", AT_string (a));
7919           else
7920             fprintf (outfile, "<null>");
7921           break;
7922         case dw_val_class_file:
7923           fprintf (outfile, "\"%s\" (%d)", AT_file (a)->filename,
7924                    AT_file (a)->emitted_number);
7925           break;
7926         case dw_val_class_data8:
7927           {
7928             int i;
7929
7930             for (i = 0; i < 8; i++)
7931               fprintf (outfile, "%02x", a->dw_attr_val.v.val_data8[i]);
7932             break;
7933           }
7934         default:
7935           break;
7936         }
7937
7938       fprintf (outfile, "\n");
7939     }
7940
7941   if (die->die_child != NULL)
7942     {
7943       print_indent += 4;
7944       FOR_EACH_CHILD (die, c, print_die (c, outfile));
7945       print_indent -= 4;
7946     }
7947   if (print_indent == 0)
7948     fprintf (outfile, "\n");
7949 }
7950
7951 /* Print the contents of the source code line number correspondence table.
7952    This routine is a debugging aid only.  */
7953
7954 static void
7955 print_dwarf_line_table (FILE *outfile)
7956 {
7957   unsigned i;
7958   dw_line_info_ref line_info;
7959
7960   fprintf (outfile, "\n\nDWARF source line information\n");
7961   for (i = 1; i < line_info_table_in_use; i++)
7962     {
7963       line_info = &line_info_table[i];
7964       fprintf (outfile, "%5d: %4ld %6ld\n", i,
7965                line_info->dw_file_num,
7966                line_info->dw_line_num);
7967     }
7968
7969   fprintf (outfile, "\n\n");
7970 }
7971
7972 /* Print the information collected for a given DIE.  */
7973
7974 void
7975 debug_dwarf_die (dw_die_ref die)
7976 {
7977   print_die (die, stderr);
7978 }
7979
7980 /* Print all DWARF information collected for the compilation unit.
7981    This routine is a debugging aid only.  */
7982
7983 void
7984 debug_dwarf (void)
7985 {
7986   print_indent = 0;
7987   print_die (comp_unit_die, stderr);
7988   if (! DWARF2_ASM_LINE_DEBUG_INFO)
7989     print_dwarf_line_table (stderr);
7990 }
7991 \f
7992 /* Start a new compilation unit DIE for an include file.  OLD_UNIT is the CU
7993    for the enclosing include file, if any.  BINCL_DIE is the DW_TAG_GNU_BINCL
7994    DIE that marks the start of the DIEs for this include file.  */
7995
7996 static dw_die_ref
7997 push_new_compile_unit (dw_die_ref old_unit, dw_die_ref bincl_die)
7998 {
7999   const char *filename = get_AT_string (bincl_die, DW_AT_name);
8000   dw_die_ref new_unit = gen_compile_unit_die (filename);
8001
8002   new_unit->die_sib = old_unit;
8003   return new_unit;
8004 }
8005
8006 /* Close an include-file CU and reopen the enclosing one.  */
8007
8008 static dw_die_ref
8009 pop_compile_unit (dw_die_ref old_unit)
8010 {
8011   dw_die_ref new_unit = old_unit->die_sib;
8012
8013   old_unit->die_sib = NULL;
8014   return new_unit;
8015 }
8016
8017 #define CHECKSUM(FOO) md5_process_bytes (&(FOO), sizeof (FOO), ctx)
8018 #define CHECKSUM_STRING(FOO) md5_process_bytes ((FOO), strlen (FOO), ctx)
8019
8020 /* Calculate the checksum of a location expression.  */
8021
8022 static inline void
8023 loc_checksum (dw_loc_descr_ref loc, struct md5_ctx *ctx)
8024 {
8025   int tem;
8026
8027   tem = (loc->dtprel << 8) | ((unsigned int) loc->dw_loc_opc);
8028   CHECKSUM (tem);
8029   CHECKSUM (loc->dw_loc_oprnd1);
8030   CHECKSUM (loc->dw_loc_oprnd2);
8031 }
8032
8033 /* Calculate the checksum of an attribute.  */
8034
8035 static void
8036 attr_checksum (dw_attr_ref at, struct md5_ctx *ctx, int *mark)
8037 {
8038   dw_loc_descr_ref loc;
8039   rtx r;
8040
8041   CHECKSUM (at->dw_attr);
8042
8043   /* We don't care that this was compiled with a different compiler
8044      snapshot; if the output is the same, that's what matters.  */
8045   if (at->dw_attr == DW_AT_producer)
8046     return;
8047
8048   switch (AT_class (at))
8049     {
8050     case dw_val_class_const:
8051       CHECKSUM (at->dw_attr_val.v.val_int);
8052       break;
8053     case dw_val_class_unsigned_const:
8054       CHECKSUM (at->dw_attr_val.v.val_unsigned);
8055       break;
8056     case dw_val_class_const_double:
8057       CHECKSUM (at->dw_attr_val.v.val_double);
8058       break;
8059     case dw_val_class_vec:
8060       CHECKSUM (at->dw_attr_val.v.val_vec);
8061       break;
8062     case dw_val_class_flag:
8063       CHECKSUM (at->dw_attr_val.v.val_flag);
8064       break;
8065     case dw_val_class_str:
8066       CHECKSUM_STRING (AT_string (at));
8067       break;
8068
8069     case dw_val_class_addr:
8070       r = AT_addr (at);
8071       gcc_assert (GET_CODE (r) == SYMBOL_REF);
8072       CHECKSUM_STRING (XSTR (r, 0));
8073       break;
8074
8075     case dw_val_class_offset:
8076       CHECKSUM (at->dw_attr_val.v.val_offset);
8077       break;
8078
8079     case dw_val_class_loc:
8080       for (loc = AT_loc (at); loc; loc = loc->dw_loc_next)
8081         loc_checksum (loc, ctx);
8082       break;
8083
8084     case dw_val_class_die_ref:
8085       die_checksum (AT_ref (at), ctx, mark);
8086       break;
8087
8088     case dw_val_class_fde_ref:
8089     case dw_val_class_lbl_id:
8090     case dw_val_class_lineptr:
8091     case dw_val_class_macptr:
8092       break;
8093
8094     case dw_val_class_file:
8095       CHECKSUM_STRING (AT_file (at)->filename);
8096       break;
8097
8098     case dw_val_class_data8:
8099       CHECKSUM (at->dw_attr_val.v.val_data8);
8100       break;
8101
8102     default:
8103       break;
8104     }
8105 }
8106
8107 /* Calculate the checksum of a DIE.  */
8108
8109 static void
8110 die_checksum (dw_die_ref die, struct md5_ctx *ctx, int *mark)
8111 {
8112   dw_die_ref c;
8113   dw_attr_ref a;
8114   unsigned ix;
8115
8116   /* To avoid infinite recursion.  */
8117   if (die->die_mark)
8118     {
8119       CHECKSUM (die->die_mark);
8120       return;
8121     }
8122   die->die_mark = ++(*mark);
8123
8124   CHECKSUM (die->die_tag);
8125
8126   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
8127     attr_checksum (a, ctx, mark);
8128
8129   FOR_EACH_CHILD (die, c, die_checksum (c, ctx, mark));
8130 }
8131
8132 #undef CHECKSUM
8133 #undef CHECKSUM_STRING
8134
8135 /* For DWARF-4 types, include the trailing NULL when checksumming strings.  */
8136 #define CHECKSUM(FOO) md5_process_bytes (&(FOO), sizeof (FOO), ctx)
8137 #define CHECKSUM_STRING(FOO) md5_process_bytes ((FOO), strlen (FOO) + 1, ctx)
8138 #define CHECKSUM_SLEB128(FOO) checksum_sleb128 ((FOO), ctx)
8139 #define CHECKSUM_ULEB128(FOO) checksum_uleb128 ((FOO), ctx)
8140 #define CHECKSUM_ATTR(FOO) \
8141   if (FOO) attr_checksum_ordered (die->die_tag, (FOO), ctx, mark)
8142
8143 /* Calculate the checksum of a number in signed LEB128 format.  */
8144
8145 static void
8146 checksum_sleb128 (HOST_WIDE_INT value, struct md5_ctx *ctx)
8147 {
8148   unsigned char byte;
8149   bool more;
8150
8151   while (1)
8152     {
8153       byte = (value & 0x7f);
8154       value >>= 7;
8155       more = !((value == 0 && (byte & 0x40) == 0)
8156                 || (value == -1 && (byte & 0x40) != 0));
8157       if (more)
8158         byte |= 0x80;
8159       CHECKSUM (byte);
8160       if (!more)
8161         break;
8162     }
8163 }
8164
8165 /* Calculate the checksum of a number in unsigned LEB128 format.  */
8166
8167 static void
8168 checksum_uleb128 (unsigned HOST_WIDE_INT value, struct md5_ctx *ctx)
8169 {
8170   while (1)
8171     {
8172       unsigned char byte = (value & 0x7f);
8173       value >>= 7;
8174       if (value != 0)
8175         /* More bytes to follow.  */
8176         byte |= 0x80;
8177       CHECKSUM (byte);
8178       if (value == 0)
8179         break;
8180     }
8181 }
8182
8183 /* Checksum the context of the DIE.  This adds the names of any
8184    surrounding namespaces or structures to the checksum.  */
8185
8186 static void
8187 checksum_die_context (dw_die_ref die, struct md5_ctx *ctx)
8188 {
8189   const char *name;
8190   dw_die_ref spec;
8191   int tag = die->die_tag;
8192
8193   if (tag != DW_TAG_namespace
8194       && tag != DW_TAG_structure_type
8195       && tag != DW_TAG_class_type)
8196     return;
8197
8198   name = get_AT_string (die, DW_AT_name);
8199
8200   spec = get_AT_ref (die, DW_AT_specification);
8201   if (spec != NULL)
8202     die = spec;
8203
8204   if (die->die_parent != NULL)
8205     checksum_die_context (die->die_parent, ctx);
8206
8207   CHECKSUM_ULEB128 ('C');
8208   CHECKSUM_ULEB128 (tag);
8209   if (name != NULL)
8210     CHECKSUM_STRING (name);
8211 }
8212
8213 /* Calculate the checksum of a location expression.  */
8214
8215 static inline void
8216 loc_checksum_ordered (dw_loc_descr_ref loc, struct md5_ctx *ctx)
8217 {
8218   /* Special case for lone DW_OP_plus_uconst: checksum as if the location
8219      were emitted as a DW_FORM_sdata instead of a location expression.  */
8220   if (loc->dw_loc_opc == DW_OP_plus_uconst && loc->dw_loc_next == NULL)
8221     {
8222       CHECKSUM_ULEB128 (DW_FORM_sdata);
8223       CHECKSUM_SLEB128 ((HOST_WIDE_INT) loc->dw_loc_oprnd1.v.val_unsigned);
8224       return;
8225     }
8226
8227   /* Otherwise, just checksum the raw location expression.  */
8228   while (loc != NULL)
8229     {
8230       CHECKSUM_ULEB128 (loc->dw_loc_opc);
8231       CHECKSUM (loc->dw_loc_oprnd1);
8232       CHECKSUM (loc->dw_loc_oprnd2);
8233       loc = loc->dw_loc_next;
8234     }
8235 }
8236
8237 /* Calculate the checksum of an attribute.  */
8238
8239 static void
8240 attr_checksum_ordered (enum dwarf_tag tag, dw_attr_ref at,
8241                        struct md5_ctx *ctx, int *mark)
8242 {
8243   dw_loc_descr_ref loc;
8244   rtx r;
8245
8246   if (AT_class (at) == dw_val_class_die_ref)
8247     {
8248       dw_die_ref target_die = AT_ref (at);
8249
8250       /* For pointer and reference types, we checksum only the (qualified)
8251          name of the target type (if there is a name).  For friend entries,
8252          we checksum only the (qualified) name of the target type or function.
8253          This allows the checksum to remain the same whether the target type
8254          is complete or not.  */
8255       if ((at->dw_attr == DW_AT_type
8256            && (tag == DW_TAG_pointer_type
8257                || tag == DW_TAG_reference_type
8258                || tag == DW_TAG_ptr_to_member_type))
8259           || (at->dw_attr == DW_AT_friend
8260               && tag == DW_TAG_friend))
8261         {
8262           dw_attr_ref name_attr = get_AT (target_die, DW_AT_name);
8263
8264           if (name_attr != NULL)
8265             {
8266               dw_die_ref decl = get_AT_ref (target_die, DW_AT_specification);
8267
8268               if (decl == NULL)
8269                 decl = target_die;
8270               CHECKSUM_ULEB128 ('N');
8271               CHECKSUM_ULEB128 (at->dw_attr);
8272               if (decl->die_parent != NULL)
8273                 checksum_die_context (decl->die_parent, ctx);
8274               CHECKSUM_ULEB128 ('E');
8275               CHECKSUM_STRING (AT_string (name_attr));
8276               return;
8277             }
8278         }
8279
8280       /* For all other references to another DIE, we check to see if the
8281          target DIE has already been visited.  If it has, we emit a
8282          backward reference; if not, we descend recursively.  */
8283       if (target_die->die_mark > 0)
8284         {
8285           CHECKSUM_ULEB128 ('R');
8286           CHECKSUM_ULEB128 (at->dw_attr);
8287           CHECKSUM_ULEB128 (target_die->die_mark);
8288         }
8289       else
8290         {
8291           dw_die_ref decl = get_AT_ref (target_die, DW_AT_specification);
8292
8293           if (decl == NULL)
8294             decl = target_die;
8295           target_die->die_mark = ++(*mark);
8296           CHECKSUM_ULEB128 ('T');
8297           CHECKSUM_ULEB128 (at->dw_attr);
8298           if (decl->die_parent != NULL)
8299             checksum_die_context (decl->die_parent, ctx);
8300           die_checksum_ordered (target_die, ctx, mark);
8301         }
8302       return;
8303     }
8304
8305   CHECKSUM_ULEB128 ('A');
8306   CHECKSUM_ULEB128 (at->dw_attr);
8307
8308   switch (AT_class (at))
8309     {
8310     case dw_val_class_const:
8311       CHECKSUM_ULEB128 (DW_FORM_sdata);
8312       CHECKSUM_SLEB128 (at->dw_attr_val.v.val_int);
8313       break;
8314
8315     case dw_val_class_unsigned_const:
8316       CHECKSUM_ULEB128 (DW_FORM_sdata);
8317       CHECKSUM_SLEB128 ((int) at->dw_attr_val.v.val_unsigned);
8318       break;
8319
8320     case dw_val_class_const_double:
8321       CHECKSUM_ULEB128 (DW_FORM_block);
8322       CHECKSUM_ULEB128 (sizeof (at->dw_attr_val.v.val_double));
8323       CHECKSUM (at->dw_attr_val.v.val_double);
8324       break;
8325
8326     case dw_val_class_vec:
8327       CHECKSUM_ULEB128 (DW_FORM_block);
8328       CHECKSUM_ULEB128 (sizeof (at->dw_attr_val.v.val_vec));
8329       CHECKSUM (at->dw_attr_val.v.val_vec);
8330       break;
8331
8332     case dw_val_class_flag:
8333       CHECKSUM_ULEB128 (DW_FORM_flag);
8334       CHECKSUM_ULEB128 (at->dw_attr_val.v.val_flag ? 1 : 0);
8335       break;
8336
8337     case dw_val_class_str:
8338       CHECKSUM_ULEB128 (DW_FORM_string);
8339       CHECKSUM_STRING (AT_string (at));
8340       break;
8341
8342     case dw_val_class_addr:
8343       r = AT_addr (at);
8344       gcc_assert (GET_CODE (r) == SYMBOL_REF);
8345       CHECKSUM_ULEB128 (DW_FORM_string);
8346       CHECKSUM_STRING (XSTR (r, 0));
8347       break;
8348
8349     case dw_val_class_offset:
8350       CHECKSUM_ULEB128 (DW_FORM_sdata);
8351       CHECKSUM_ULEB128 (at->dw_attr_val.v.val_offset);
8352       break;
8353
8354     case dw_val_class_loc:
8355       for (loc = AT_loc (at); loc; loc = loc->dw_loc_next)
8356         loc_checksum_ordered (loc, ctx);
8357       break;
8358
8359     case dw_val_class_fde_ref:
8360     case dw_val_class_lbl_id:
8361     case dw_val_class_lineptr:
8362     case dw_val_class_macptr:
8363       break;
8364
8365     case dw_val_class_file:
8366       CHECKSUM_ULEB128 (DW_FORM_string);
8367       CHECKSUM_STRING (AT_file (at)->filename);
8368       break;
8369
8370     case dw_val_class_data8:
8371       CHECKSUM (at->dw_attr_val.v.val_data8);
8372       break;
8373
8374     default:
8375       break;
8376     }
8377 }
8378
8379 struct checksum_attributes
8380 {
8381   dw_attr_ref at_name;
8382   dw_attr_ref at_type;
8383   dw_attr_ref at_friend;
8384   dw_attr_ref at_accessibility;
8385   dw_attr_ref at_address_class;
8386   dw_attr_ref at_allocated;
8387   dw_attr_ref at_artificial;
8388   dw_attr_ref at_associated;
8389   dw_attr_ref at_binary_scale;
8390   dw_attr_ref at_bit_offset;
8391   dw_attr_ref at_bit_size;
8392   dw_attr_ref at_bit_stride;
8393   dw_attr_ref at_byte_size;
8394   dw_attr_ref at_byte_stride;
8395   dw_attr_ref at_const_value;
8396   dw_attr_ref at_containing_type;
8397   dw_attr_ref at_count;
8398   dw_attr_ref at_data_location;
8399   dw_attr_ref at_data_member_location;
8400   dw_attr_ref at_decimal_scale;
8401   dw_attr_ref at_decimal_sign;
8402   dw_attr_ref at_default_value;
8403   dw_attr_ref at_digit_count;
8404   dw_attr_ref at_discr;
8405   dw_attr_ref at_discr_list;
8406   dw_attr_ref at_discr_value;
8407   dw_attr_ref at_encoding;
8408   dw_attr_ref at_endianity;
8409   dw_attr_ref at_explicit;
8410   dw_attr_ref at_is_optional;
8411   dw_attr_ref at_location;
8412   dw_attr_ref at_lower_bound;
8413   dw_attr_ref at_mutable;
8414   dw_attr_ref at_ordering;
8415   dw_attr_ref at_picture_string;
8416   dw_attr_ref at_prototyped;
8417   dw_attr_ref at_small;
8418   dw_attr_ref at_segment;
8419   dw_attr_ref at_string_length;
8420   dw_attr_ref at_threads_scaled;
8421   dw_attr_ref at_upper_bound;
8422   dw_attr_ref at_use_location;
8423   dw_attr_ref at_use_UTF8;
8424   dw_attr_ref at_variable_parameter;
8425   dw_attr_ref at_virtuality;
8426   dw_attr_ref at_visibility;
8427   dw_attr_ref at_vtable_elem_location;
8428 };
8429
8430 /* Collect the attributes that we will want to use for the checksum.  */
8431
8432 static void
8433 collect_checksum_attributes (struct checksum_attributes *attrs, dw_die_ref die)
8434 {
8435   dw_attr_ref a;
8436   unsigned ix;
8437
8438   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
8439     {
8440       switch (a->dw_attr)
8441         {
8442         case DW_AT_name:
8443           attrs->at_name = a;
8444           break;
8445         case DW_AT_type:
8446           attrs->at_type = a;
8447           break;
8448         case DW_AT_friend:
8449           attrs->at_friend = a;
8450           break;
8451         case DW_AT_accessibility:
8452           attrs->at_accessibility = a;
8453           break;
8454         case DW_AT_address_class:
8455           attrs->at_address_class = a;
8456           break;
8457         case DW_AT_allocated:
8458           attrs->at_allocated = a;
8459           break;
8460         case DW_AT_artificial:
8461           attrs->at_artificial = a;
8462           break;
8463         case DW_AT_associated:
8464           attrs->at_associated = a;
8465           break;
8466         case DW_AT_binary_scale:
8467           attrs->at_binary_scale = a;
8468           break;
8469         case DW_AT_bit_offset:
8470           attrs->at_bit_offset = a;
8471           break;
8472         case DW_AT_bit_size:
8473           attrs->at_bit_size = a;
8474           break;
8475         case DW_AT_bit_stride:
8476           attrs->at_bit_stride = a;
8477           break;
8478         case DW_AT_byte_size:
8479           attrs->at_byte_size = a;
8480           break;
8481         case DW_AT_byte_stride:
8482           attrs->at_byte_stride = a;
8483           break;
8484         case DW_AT_const_value:
8485           attrs->at_const_value = a;
8486           break;
8487         case DW_AT_containing_type:
8488           attrs->at_containing_type = a;
8489           break;
8490         case DW_AT_count:
8491           attrs->at_count = a;
8492           break;
8493         case DW_AT_data_location:
8494           attrs->at_data_location = a;
8495           break;
8496         case DW_AT_data_member_location:
8497           attrs->at_data_member_location = a;
8498           break;
8499         case DW_AT_decimal_scale:
8500           attrs->at_decimal_scale = a;
8501           break;
8502         case DW_AT_decimal_sign:
8503           attrs->at_decimal_sign = a;
8504           break;
8505         case DW_AT_default_value:
8506           attrs->at_default_value = a;
8507           break;
8508         case DW_AT_digit_count:
8509           attrs->at_digit_count = a;
8510           break;
8511         case DW_AT_discr:
8512           attrs->at_discr = a;
8513           break;
8514         case DW_AT_discr_list:
8515           attrs->at_discr_list = a;
8516           break;
8517         case DW_AT_discr_value:
8518           attrs->at_discr_value = a;
8519           break;
8520         case DW_AT_encoding:
8521           attrs->at_encoding = a;
8522           break;
8523         case DW_AT_endianity:
8524           attrs->at_endianity = a;
8525           break;
8526         case DW_AT_explicit:
8527           attrs->at_explicit = a;
8528           break;
8529         case DW_AT_is_optional:
8530           attrs->at_is_optional = a;
8531           break;
8532         case DW_AT_location:
8533           attrs->at_location = a;
8534           break;
8535         case DW_AT_lower_bound:
8536           attrs->at_lower_bound = a;
8537           break;
8538         case DW_AT_mutable:
8539           attrs->at_mutable = a;
8540           break;
8541         case DW_AT_ordering:
8542           attrs->at_ordering = a;
8543           break;
8544         case DW_AT_picture_string:
8545           attrs->at_picture_string = a;
8546           break;
8547         case DW_AT_prototyped:
8548           attrs->at_prototyped = a;
8549           break;
8550         case DW_AT_small:
8551           attrs->at_small = a;
8552           break;
8553         case DW_AT_segment:
8554           attrs->at_segment = a;
8555           break;
8556         case DW_AT_string_length:
8557           attrs->at_string_length = a;
8558           break;
8559         case DW_AT_threads_scaled:
8560           attrs->at_threads_scaled = a;
8561           break;
8562         case DW_AT_upper_bound:
8563           attrs->at_upper_bound = a;
8564           break;
8565         case DW_AT_use_location:
8566           attrs->at_use_location = a;
8567           break;
8568         case DW_AT_use_UTF8:
8569           attrs->at_use_UTF8 = a;
8570           break;
8571         case DW_AT_variable_parameter:
8572           attrs->at_variable_parameter = a;
8573           break;
8574         case DW_AT_virtuality:
8575           attrs->at_virtuality = a;
8576           break;
8577         case DW_AT_visibility:
8578           attrs->at_visibility = a;
8579           break;
8580         case DW_AT_vtable_elem_location:
8581           attrs->at_vtable_elem_location = a;
8582           break;
8583         default:
8584           break;
8585         }
8586     }
8587 }
8588
8589 /* Calculate the checksum of a DIE, using an ordered subset of attributes.  */
8590
8591 static void
8592 die_checksum_ordered (dw_die_ref die, struct md5_ctx *ctx, int *mark)
8593 {
8594   dw_die_ref c;
8595   dw_die_ref decl;
8596   struct checksum_attributes attrs;
8597
8598   CHECKSUM_ULEB128 ('D');
8599   CHECKSUM_ULEB128 (die->die_tag);
8600
8601   memset (&attrs, 0, sizeof (attrs));
8602
8603   decl = get_AT_ref (die, DW_AT_specification);
8604   if (decl != NULL)
8605     collect_checksum_attributes (&attrs, decl);
8606   collect_checksum_attributes (&attrs, die);
8607
8608   CHECKSUM_ATTR (attrs.at_name);
8609   CHECKSUM_ATTR (attrs.at_accessibility);
8610   CHECKSUM_ATTR (attrs.at_address_class);
8611   CHECKSUM_ATTR (attrs.at_allocated);
8612   CHECKSUM_ATTR (attrs.at_artificial);
8613   CHECKSUM_ATTR (attrs.at_associated);
8614   CHECKSUM_ATTR (attrs.at_binary_scale);
8615   CHECKSUM_ATTR (attrs.at_bit_offset);
8616   CHECKSUM_ATTR (attrs.at_bit_size);
8617   CHECKSUM_ATTR (attrs.at_bit_stride);
8618   CHECKSUM_ATTR (attrs.at_byte_size);
8619   CHECKSUM_ATTR (attrs.at_byte_stride);
8620   CHECKSUM_ATTR (attrs.at_const_value);
8621   CHECKSUM_ATTR (attrs.at_containing_type);
8622   CHECKSUM_ATTR (attrs.at_count);
8623   CHECKSUM_ATTR (attrs.at_data_location);
8624   CHECKSUM_ATTR (attrs.at_data_member_location);
8625   CHECKSUM_ATTR (attrs.at_decimal_scale);
8626   CHECKSUM_ATTR (attrs.at_decimal_sign);
8627   CHECKSUM_ATTR (attrs.at_default_value);
8628   CHECKSUM_ATTR (attrs.at_digit_count);
8629   CHECKSUM_ATTR (attrs.at_discr);
8630   CHECKSUM_ATTR (attrs.at_discr_list);
8631   CHECKSUM_ATTR (attrs.at_discr_value);
8632   CHECKSUM_ATTR (attrs.at_encoding);
8633   CHECKSUM_ATTR (attrs.at_endianity);
8634   CHECKSUM_ATTR (attrs.at_explicit);
8635   CHECKSUM_ATTR (attrs.at_is_optional);
8636   CHECKSUM_ATTR (attrs.at_location);
8637   CHECKSUM_ATTR (attrs.at_lower_bound);
8638   CHECKSUM_ATTR (attrs.at_mutable);
8639   CHECKSUM_ATTR (attrs.at_ordering);
8640   CHECKSUM_ATTR (attrs.at_picture_string);
8641   CHECKSUM_ATTR (attrs.at_prototyped);
8642   CHECKSUM_ATTR (attrs.at_small);
8643   CHECKSUM_ATTR (attrs.at_segment);
8644   CHECKSUM_ATTR (attrs.at_string_length);
8645   CHECKSUM_ATTR (attrs.at_threads_scaled);
8646   CHECKSUM_ATTR (attrs.at_upper_bound);
8647   CHECKSUM_ATTR (attrs.at_use_location);
8648   CHECKSUM_ATTR (attrs.at_use_UTF8);
8649   CHECKSUM_ATTR (attrs.at_variable_parameter);
8650   CHECKSUM_ATTR (attrs.at_virtuality);
8651   CHECKSUM_ATTR (attrs.at_visibility);
8652   CHECKSUM_ATTR (attrs.at_vtable_elem_location);
8653   CHECKSUM_ATTR (attrs.at_type);
8654   CHECKSUM_ATTR (attrs.at_friend);
8655
8656   /* Checksum the child DIEs, except for nested types and member functions.  */
8657   c = die->die_child;
8658   if (c) do {
8659     dw_attr_ref name_attr;
8660
8661     c = c->die_sib;
8662     name_attr = get_AT (c, DW_AT_name);
8663     if ((is_type_die (c) || c->die_tag == DW_TAG_subprogram)
8664         && name_attr != NULL)
8665       {
8666         CHECKSUM_ULEB128 ('S');
8667         CHECKSUM_ULEB128 (c->die_tag);
8668         CHECKSUM_STRING (AT_string (name_attr));
8669       }
8670     else
8671       {
8672         /* Mark this DIE so it gets processed when unmarking.  */
8673         if (c->die_mark == 0)
8674           c->die_mark = -1;
8675         die_checksum_ordered (c, ctx, mark);
8676       }
8677   } while (c != die->die_child);
8678
8679   CHECKSUM_ULEB128 (0);
8680 }
8681
8682 #undef CHECKSUM
8683 #undef CHECKSUM_STRING
8684 #undef CHECKSUM_ATTR
8685 #undef CHECKSUM_LEB128
8686 #undef CHECKSUM_ULEB128
8687
8688 /* Generate the type signature for DIE.  This is computed by generating an
8689    MD5 checksum over the DIE's tag, its relevant attributes, and its
8690    children.  Attributes that are references to other DIEs are processed
8691    by recursion, using the MARK field to prevent infinite recursion.
8692    If the DIE is nested inside a namespace or another type, we also
8693    need to include that context in the signature.  The lower 64 bits
8694    of the resulting MD5 checksum comprise the signature.  */
8695
8696 static void
8697 generate_type_signature (dw_die_ref die, comdat_type_node *type_node)
8698 {
8699   int mark;
8700   const char *name;
8701   unsigned char checksum[16];
8702   struct md5_ctx ctx;
8703   dw_die_ref decl;
8704
8705   name = get_AT_string (die, DW_AT_name);
8706   decl = get_AT_ref (die, DW_AT_specification);
8707
8708   /* First, compute a signature for just the type name (and its surrounding
8709      context, if any.  This is stored in the type unit DIE for link-time
8710      ODR (one-definition rule) checking.  */
8711
8712   if (is_cxx() && name != NULL)
8713     {
8714       md5_init_ctx (&ctx);
8715
8716       /* Checksum the names of surrounding namespaces and structures.  */
8717       if (decl != NULL && decl->die_parent != NULL)
8718         checksum_die_context (decl->die_parent, &ctx);
8719
8720       md5_process_bytes (&die->die_tag, sizeof (die->die_tag), &ctx);
8721       md5_process_bytes (name, strlen (name) + 1, &ctx);
8722       md5_finish_ctx (&ctx, checksum);
8723
8724       add_AT_data8 (type_node->root_die, DW_AT_GNU_odr_signature, &checksum[8]);
8725     }
8726
8727   /* Next, compute the complete type signature.  */
8728
8729   md5_init_ctx (&ctx);
8730   mark = 1;
8731   die->die_mark = mark;
8732
8733   /* Checksum the names of surrounding namespaces and structures.  */
8734   if (decl != NULL && decl->die_parent != NULL)
8735     checksum_die_context (decl->die_parent, &ctx);
8736
8737   /* Checksum the DIE and its children.  */
8738   die_checksum_ordered (die, &ctx, &mark);
8739   unmark_all_dies (die);
8740   md5_finish_ctx (&ctx, checksum);
8741
8742   /* Store the signature in the type node and link the type DIE and the
8743      type node together.  */
8744   memcpy (type_node->signature, &checksum[16 - DWARF_TYPE_SIGNATURE_SIZE],
8745           DWARF_TYPE_SIGNATURE_SIZE);
8746   die->die_id.die_type_node = type_node;
8747   type_node->type_die = die;
8748
8749   /* If the DIE is a specification, link its declaration to the type node
8750      as well.  */
8751   if (decl != NULL)
8752     decl->die_id.die_type_node = type_node;
8753 }
8754
8755 /* Do the location expressions look same?  */
8756 static inline int
8757 same_loc_p (dw_loc_descr_ref loc1, dw_loc_descr_ref loc2, int *mark)
8758 {
8759   return loc1->dw_loc_opc == loc2->dw_loc_opc
8760          && same_dw_val_p (&loc1->dw_loc_oprnd1, &loc2->dw_loc_oprnd1, mark)
8761          && same_dw_val_p (&loc1->dw_loc_oprnd2, &loc2->dw_loc_oprnd2, mark);
8762 }
8763
8764 /* Do the values look the same?  */
8765 static int
8766 same_dw_val_p (const dw_val_node *v1, const dw_val_node *v2, int *mark)
8767 {
8768   dw_loc_descr_ref loc1, loc2;
8769   rtx r1, r2;
8770
8771   if (v1->val_class != v2->val_class)
8772     return 0;
8773
8774   switch (v1->val_class)
8775     {
8776     case dw_val_class_const:
8777       return v1->v.val_int == v2->v.val_int;
8778     case dw_val_class_unsigned_const:
8779       return v1->v.val_unsigned == v2->v.val_unsigned;
8780     case dw_val_class_const_double:
8781       return v1->v.val_double.high == v2->v.val_double.high
8782              && v1->v.val_double.low == v2->v.val_double.low;
8783     case dw_val_class_vec:
8784       if (v1->v.val_vec.length != v2->v.val_vec.length
8785           || v1->v.val_vec.elt_size != v2->v.val_vec.elt_size)
8786         return 0;
8787       if (memcmp (v1->v.val_vec.array, v2->v.val_vec.array,
8788                   v1->v.val_vec.length * v1->v.val_vec.elt_size))
8789         return 0;
8790       return 1;
8791     case dw_val_class_flag:
8792       return v1->v.val_flag == v2->v.val_flag;
8793     case dw_val_class_str:
8794       return !strcmp(v1->v.val_str->str, v2->v.val_str->str);
8795
8796     case dw_val_class_addr:
8797       r1 = v1->v.val_addr;
8798       r2 = v2->v.val_addr;
8799       if (GET_CODE (r1) != GET_CODE (r2))
8800         return 0;
8801       return !rtx_equal_p (r1, r2);
8802
8803     case dw_val_class_offset:
8804       return v1->v.val_offset == v2->v.val_offset;
8805
8806     case dw_val_class_loc:
8807       for (loc1 = v1->v.val_loc, loc2 = v2->v.val_loc;
8808            loc1 && loc2;
8809            loc1 = loc1->dw_loc_next, loc2 = loc2->dw_loc_next)
8810         if (!same_loc_p (loc1, loc2, mark))
8811           return 0;
8812       return !loc1 && !loc2;
8813
8814     case dw_val_class_die_ref:
8815       return same_die_p (v1->v.val_die_ref.die, v2->v.val_die_ref.die, mark);
8816
8817     case dw_val_class_fde_ref:
8818     case dw_val_class_lbl_id:
8819     case dw_val_class_lineptr:
8820     case dw_val_class_macptr:
8821       return 1;
8822
8823     case dw_val_class_file:
8824       return v1->v.val_file == v2->v.val_file;
8825
8826     case dw_val_class_data8:
8827       return !memcmp (v1->v.val_data8, v2->v.val_data8, 8);
8828
8829     default:
8830       return 1;
8831     }
8832 }
8833
8834 /* Do the attributes look the same?  */
8835
8836 static int
8837 same_attr_p (dw_attr_ref at1, dw_attr_ref at2, int *mark)
8838 {
8839   if (at1->dw_attr != at2->dw_attr)
8840     return 0;
8841
8842   /* We don't care that this was compiled with a different compiler
8843      snapshot; if the output is the same, that's what matters. */
8844   if (at1->dw_attr == DW_AT_producer)
8845     return 1;
8846
8847   return same_dw_val_p (&at1->dw_attr_val, &at2->dw_attr_val, mark);
8848 }
8849
8850 /* Do the dies look the same?  */
8851
8852 static int
8853 same_die_p (dw_die_ref die1, dw_die_ref die2, int *mark)
8854 {
8855   dw_die_ref c1, c2;
8856   dw_attr_ref a1;
8857   unsigned ix;
8858
8859   /* To avoid infinite recursion.  */
8860   if (die1->die_mark)
8861     return die1->die_mark == die2->die_mark;
8862   die1->die_mark = die2->die_mark = ++(*mark);
8863
8864   if (die1->die_tag != die2->die_tag)
8865     return 0;
8866
8867   if (VEC_length (dw_attr_node, die1->die_attr)
8868       != VEC_length (dw_attr_node, die2->die_attr))
8869     return 0;
8870
8871   for (ix = 0; VEC_iterate (dw_attr_node, die1->die_attr, ix, a1); ix++)
8872     if (!same_attr_p (a1, VEC_index (dw_attr_node, die2->die_attr, ix), mark))
8873       return 0;
8874
8875   c1 = die1->die_child;
8876   c2 = die2->die_child;
8877   if (! c1)
8878     {
8879       if (c2)
8880         return 0;
8881     }
8882   else
8883     for (;;)
8884       {
8885         if (!same_die_p (c1, c2, mark))
8886           return 0;
8887         c1 = c1->die_sib;
8888         c2 = c2->die_sib;
8889         if (c1 == die1->die_child)
8890           {
8891             if (c2 == die2->die_child)
8892               break;
8893             else
8894               return 0;
8895           }
8896     }
8897
8898   return 1;
8899 }
8900
8901 /* Do the dies look the same?  Wrapper around same_die_p.  */
8902
8903 static int
8904 same_die_p_wrap (dw_die_ref die1, dw_die_ref die2)
8905 {
8906   int mark = 0;
8907   int ret = same_die_p (die1, die2, &mark);
8908
8909   unmark_all_dies (die1);
8910   unmark_all_dies (die2);
8911
8912   return ret;
8913 }
8914
8915 /* The prefix to attach to symbols on DIEs in the current comdat debug
8916    info section.  */
8917 static char *comdat_symbol_id;
8918
8919 /* The index of the current symbol within the current comdat CU.  */
8920 static unsigned int comdat_symbol_number;
8921
8922 /* Calculate the MD5 checksum of the compilation unit DIE UNIT_DIE and its
8923    children, and set comdat_symbol_id accordingly.  */
8924
8925 static void
8926 compute_section_prefix (dw_die_ref unit_die)
8927 {
8928   const char *die_name = get_AT_string (unit_die, DW_AT_name);
8929   const char *base = die_name ? lbasename (die_name) : "anonymous";
8930   char *name = XALLOCAVEC (char, strlen (base) + 64);
8931   char *p;
8932   int i, mark;
8933   unsigned char checksum[16];
8934   struct md5_ctx ctx;
8935
8936   /* Compute the checksum of the DIE, then append part of it as hex digits to
8937      the name filename of the unit.  */
8938
8939   md5_init_ctx (&ctx);
8940   mark = 0;
8941   die_checksum (unit_die, &ctx, &mark);
8942   unmark_all_dies (unit_die);
8943   md5_finish_ctx (&ctx, checksum);
8944
8945   sprintf (name, "%s.", base);
8946   clean_symbol_name (name);
8947
8948   p = name + strlen (name);
8949   for (i = 0; i < 4; i++)
8950     {
8951       sprintf (p, "%.2x", checksum[i]);
8952       p += 2;
8953     }
8954
8955   comdat_symbol_id = unit_die->die_id.die_symbol = xstrdup (name);
8956   comdat_symbol_number = 0;
8957 }
8958
8959 /* Returns nonzero if DIE represents a type, in the sense of TYPE_P.  */
8960
8961 static int
8962 is_type_die (dw_die_ref die)
8963 {
8964   switch (die->die_tag)
8965     {
8966     case DW_TAG_array_type:
8967     case DW_TAG_class_type:
8968     case DW_TAG_interface_type:
8969     case DW_TAG_enumeration_type:
8970     case DW_TAG_pointer_type:
8971     case DW_TAG_reference_type:
8972     case DW_TAG_string_type:
8973     case DW_TAG_structure_type:
8974     case DW_TAG_subroutine_type:
8975     case DW_TAG_union_type:
8976     case DW_TAG_ptr_to_member_type:
8977     case DW_TAG_set_type:
8978     case DW_TAG_subrange_type:
8979     case DW_TAG_base_type:
8980     case DW_TAG_const_type:
8981     case DW_TAG_file_type:
8982     case DW_TAG_packed_type:
8983     case DW_TAG_volatile_type:
8984     case DW_TAG_typedef:
8985       return 1;
8986     default:
8987       return 0;
8988     }
8989 }
8990
8991 /* Returns 1 iff C is the sort of DIE that should go into a COMDAT CU.
8992    Basically, we want to choose the bits that are likely to be shared between
8993    compilations (types) and leave out the bits that are specific to individual
8994    compilations (functions).  */
8995
8996 static int
8997 is_comdat_die (dw_die_ref c)
8998 {
8999   /* I think we want to leave base types and __vtbl_ptr_type in the main CU, as
9000      we do for stabs.  The advantage is a greater likelihood of sharing between
9001      objects that don't include headers in the same order (and therefore would
9002      put the base types in a different comdat).  jason 8/28/00 */
9003
9004   if (c->die_tag == DW_TAG_base_type)
9005     return 0;
9006
9007   if (c->die_tag == DW_TAG_pointer_type
9008       || c->die_tag == DW_TAG_reference_type
9009       || c->die_tag == DW_TAG_const_type
9010       || c->die_tag == DW_TAG_volatile_type)
9011     {
9012       dw_die_ref t = get_AT_ref (c, DW_AT_type);
9013
9014       return t ? is_comdat_die (t) : 0;
9015     }
9016
9017   return is_type_die (c);
9018 }
9019
9020 /* Returns 1 iff C is the sort of DIE that might be referred to from another
9021    compilation unit.  */
9022
9023 static int
9024 is_symbol_die (dw_die_ref c)
9025 {
9026   return (is_type_die (c)
9027           || is_declaration_die (c)
9028           || c->die_tag == DW_TAG_namespace
9029           || c->die_tag == DW_TAG_module);
9030 }
9031
9032 static char *
9033 gen_internal_sym (const char *prefix)
9034 {
9035   char buf[256];
9036
9037   ASM_GENERATE_INTERNAL_LABEL (buf, prefix, label_num++);
9038   return xstrdup (buf);
9039 }
9040
9041 /* Assign symbols to all worthy DIEs under DIE.  */
9042
9043 static void
9044 assign_symbol_names (dw_die_ref die)
9045 {
9046   dw_die_ref c;
9047
9048   if (is_symbol_die (die))
9049     {
9050       if (comdat_symbol_id)
9051         {
9052           char *p = XALLOCAVEC (char, strlen (comdat_symbol_id) + 64);
9053
9054           sprintf (p, "%s.%s.%x", DIE_LABEL_PREFIX,
9055                    comdat_symbol_id, comdat_symbol_number++);
9056           die->die_id.die_symbol = xstrdup (p);
9057         }
9058       else
9059         die->die_id.die_symbol = gen_internal_sym ("LDIE");
9060     }
9061
9062   FOR_EACH_CHILD (die, c, assign_symbol_names (c));
9063 }
9064
9065 struct cu_hash_table_entry
9066 {
9067   dw_die_ref cu;
9068   unsigned min_comdat_num, max_comdat_num;
9069   struct cu_hash_table_entry *next;
9070 };
9071
9072 /* Routines to manipulate hash table of CUs.  */
9073 static hashval_t
9074 htab_cu_hash (const void *of)
9075 {
9076   const struct cu_hash_table_entry *const entry =
9077     (const struct cu_hash_table_entry *) of;
9078
9079   return htab_hash_string (entry->cu->die_id.die_symbol);
9080 }
9081
9082 static int
9083 htab_cu_eq (const void *of1, const void *of2)
9084 {
9085   const struct cu_hash_table_entry *const entry1 =
9086     (const struct cu_hash_table_entry *) of1;
9087   const struct die_struct *const entry2 = (const struct die_struct *) of2;
9088
9089   return !strcmp (entry1->cu->die_id.die_symbol, entry2->die_id.die_symbol);
9090 }
9091
9092 static void
9093 htab_cu_del (void *what)
9094 {
9095   struct cu_hash_table_entry *next,
9096     *entry = (struct cu_hash_table_entry *) what;
9097
9098   while (entry)
9099     {
9100       next = entry->next;
9101       free (entry);
9102       entry = next;
9103     }
9104 }
9105
9106 /* Check whether we have already seen this CU and set up SYM_NUM
9107    accordingly.  */
9108 static int
9109 check_duplicate_cu (dw_die_ref cu, htab_t htable, unsigned int *sym_num)
9110 {
9111   struct cu_hash_table_entry dummy;
9112   struct cu_hash_table_entry **slot, *entry, *last = &dummy;
9113
9114   dummy.max_comdat_num = 0;
9115
9116   slot = (struct cu_hash_table_entry **)
9117     htab_find_slot_with_hash (htable, cu, htab_hash_string (cu->die_id.die_symbol),
9118         INSERT);
9119   entry = *slot;
9120
9121   for (; entry; last = entry, entry = entry->next)
9122     {
9123       if (same_die_p_wrap (cu, entry->cu))
9124         break;
9125     }
9126
9127   if (entry)
9128     {
9129       *sym_num = entry->min_comdat_num;
9130       return 1;
9131     }
9132
9133   entry = XCNEW (struct cu_hash_table_entry);
9134   entry->cu = cu;
9135   entry->min_comdat_num = *sym_num = last->max_comdat_num;
9136   entry->next = *slot;
9137   *slot = entry;
9138
9139   return 0;
9140 }
9141
9142 /* Record SYM_NUM to record of CU in HTABLE.  */
9143 static void
9144 record_comdat_symbol_number (dw_die_ref cu, htab_t htable, unsigned int sym_num)
9145 {
9146   struct cu_hash_table_entry **slot, *entry;
9147
9148   slot = (struct cu_hash_table_entry **)
9149     htab_find_slot_with_hash (htable, cu, htab_hash_string (cu->die_id.die_symbol),
9150         NO_INSERT);
9151   entry = *slot;
9152
9153   entry->max_comdat_num = sym_num;
9154 }
9155
9156 /* Traverse the DIE (which is always comp_unit_die), and set up
9157    additional compilation units for each of the include files we see
9158    bracketed by BINCL/EINCL.  */
9159
9160 static void
9161 break_out_includes (dw_die_ref die)
9162 {
9163   dw_die_ref c;
9164   dw_die_ref unit = NULL;
9165   limbo_die_node *node, **pnode;
9166   htab_t cu_hash_table;
9167
9168   c = die->die_child;
9169   if (c) do {
9170     dw_die_ref prev = c;
9171     c = c->die_sib;
9172     while (c->die_tag == DW_TAG_GNU_BINCL || c->die_tag == DW_TAG_GNU_EINCL
9173            || (unit && is_comdat_die (c)))
9174       {
9175         dw_die_ref next = c->die_sib;
9176
9177         /* This DIE is for a secondary CU; remove it from the main one.  */
9178         remove_child_with_prev (c, prev);
9179
9180         if (c->die_tag == DW_TAG_GNU_BINCL)
9181           unit = push_new_compile_unit (unit, c);
9182         else if (c->die_tag == DW_TAG_GNU_EINCL)
9183           unit = pop_compile_unit (unit);
9184         else
9185           add_child_die (unit, c);
9186         c = next;
9187         if (c == die->die_child)
9188           break;
9189       }
9190   } while (c != die->die_child);
9191
9192 #if 0
9193   /* We can only use this in debugging, since the frontend doesn't check
9194      to make sure that we leave every include file we enter.  */
9195   gcc_assert (!unit);
9196 #endif
9197
9198   assign_symbol_names (die);
9199   cu_hash_table = htab_create (10, htab_cu_hash, htab_cu_eq, htab_cu_del);
9200   for (node = limbo_die_list, pnode = &limbo_die_list;
9201        node;
9202        node = node->next)
9203     {
9204       int is_dupl;
9205
9206       compute_section_prefix (node->die);
9207       is_dupl = check_duplicate_cu (node->die, cu_hash_table,
9208                         &comdat_symbol_number);
9209       assign_symbol_names (node->die);
9210       if (is_dupl)
9211         *pnode = node->next;
9212       else
9213         {
9214           pnode = &node->next;
9215           record_comdat_symbol_number (node->die, cu_hash_table,
9216                 comdat_symbol_number);
9217         }
9218     }
9219   htab_delete (cu_hash_table);
9220 }
9221
9222 /* Return non-zero if this DIE is a declaration.  */
9223
9224 static int
9225 is_declaration_die (dw_die_ref die)
9226 {
9227   dw_attr_ref a;
9228   unsigned ix;
9229
9230   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
9231     if (a->dw_attr == DW_AT_declaration)
9232       return 1;
9233
9234   return 0;
9235 }
9236
9237 /* Return non-zero if this is a type DIE that should be moved to a
9238    COMDAT .debug_types section.  */
9239
9240 static int
9241 should_move_die_to_comdat (dw_die_ref die)
9242 {
9243   switch (die->die_tag)
9244     {
9245     case DW_TAG_class_type:
9246     case DW_TAG_structure_type:
9247     case DW_TAG_enumeration_type:
9248     case DW_TAG_union_type:
9249       /* Don't move declarations or inlined instances.  */
9250       if (is_declaration_die (die) || get_AT (die, DW_AT_abstract_origin))
9251         return 0;
9252       return 1;
9253     case DW_TAG_array_type:
9254     case DW_TAG_interface_type:
9255     case DW_TAG_pointer_type:
9256     case DW_TAG_reference_type:
9257     case DW_TAG_string_type:
9258     case DW_TAG_subroutine_type:
9259     case DW_TAG_ptr_to_member_type:
9260     case DW_TAG_set_type:
9261     case DW_TAG_subrange_type:
9262     case DW_TAG_base_type:
9263     case DW_TAG_const_type:
9264     case DW_TAG_file_type:
9265     case DW_TAG_packed_type:
9266     case DW_TAG_volatile_type:
9267     case DW_TAG_typedef:
9268     default:
9269       return 0;
9270     }
9271 }
9272
9273 /* Make a clone of DIE.  */
9274
9275 static dw_die_ref
9276 clone_die (dw_die_ref die)
9277 {
9278   dw_die_ref clone;
9279   dw_attr_ref a;
9280   unsigned ix;
9281
9282   clone = GGC_CNEW (die_node);
9283   clone->die_tag = die->die_tag;
9284
9285   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
9286     add_dwarf_attr (clone, a);
9287
9288   return clone;
9289 }
9290
9291 /* Make a clone of the tree rooted at DIE.  */
9292
9293 static dw_die_ref
9294 clone_tree (dw_die_ref die)
9295 {
9296   dw_die_ref c;
9297   dw_die_ref clone = clone_die (die);
9298
9299   FOR_EACH_CHILD (die, c, add_child_die (clone, clone_tree(c)));
9300
9301   return clone;
9302 }
9303
9304 /* Make a clone of DIE as a declaration.  */
9305
9306 static dw_die_ref
9307 clone_as_declaration (dw_die_ref die)
9308 {
9309   dw_die_ref clone;
9310   dw_die_ref decl;
9311   dw_attr_ref a;
9312   unsigned ix;
9313
9314   /* If the DIE is already a declaration, just clone it.  */
9315   if (is_declaration_die (die))
9316     return clone_die (die);
9317
9318   /* If the DIE is a specification, just clone its declaration DIE.  */
9319   decl = get_AT_ref (die, DW_AT_specification);
9320   if (decl != NULL)
9321     return clone_die (decl);
9322
9323   clone = GGC_CNEW (die_node);
9324   clone->die_tag = die->die_tag;
9325
9326   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
9327     {
9328       /* We don't want to copy over all attributes.
9329          For example we don't want DW_AT_byte_size because otherwise we will no
9330          longer have a declaration and GDB will treat it as a definition.  */
9331
9332       switch (a->dw_attr)
9333         {
9334         case DW_AT_artificial:
9335         case DW_AT_containing_type:
9336         case DW_AT_external:
9337         case DW_AT_name:
9338         case DW_AT_type:
9339         case DW_AT_virtuality:
9340         case DW_AT_MIPS_linkage_name:
9341           add_dwarf_attr (clone, a);
9342           break;
9343         case DW_AT_byte_size:
9344         default:
9345           break;
9346         }
9347     }
9348
9349   if (die->die_id.die_type_node)
9350     add_AT_die_ref (clone, DW_AT_signature, die);
9351
9352   add_AT_flag (clone, DW_AT_declaration, 1);
9353   return clone;
9354 }
9355
9356 /* Copy the declaration context to the new compile unit DIE.  This includes
9357    any surrounding namespace or type declarations.  If the DIE has an
9358    AT_specification attribute, it also includes attributes and children
9359    attached to the specification.  */
9360
9361 static void
9362 copy_declaration_context (dw_die_ref unit, dw_die_ref die)
9363 {
9364   dw_die_ref decl;
9365   dw_die_ref new_decl;
9366
9367   decl = get_AT_ref (die, DW_AT_specification);
9368   if (decl == NULL)
9369     decl = die;
9370   else
9371     {
9372       unsigned ix;
9373       dw_die_ref c;
9374       dw_attr_ref a;
9375
9376       /* Copy the type node pointer from the new DIE to the original
9377          declaration DIE so we can forward references later.  */
9378       decl->die_id.die_type_node = die->die_id.die_type_node;
9379
9380       remove_AT (die, DW_AT_specification);
9381
9382       for (ix = 0; VEC_iterate (dw_attr_node, decl->die_attr, ix, a); ix++)
9383         {
9384           if (a->dw_attr != DW_AT_name
9385               && a->dw_attr != DW_AT_declaration
9386               && a->dw_attr != DW_AT_external)
9387             add_dwarf_attr (die, a);
9388         }
9389
9390       FOR_EACH_CHILD (decl, c, add_child_die (die, clone_tree(c)));
9391     }
9392
9393   if (decl->die_parent != NULL
9394       && decl->die_parent->die_tag != DW_TAG_compile_unit
9395       && decl->die_parent->die_tag != DW_TAG_type_unit)
9396     {
9397       new_decl = copy_ancestor_tree (unit, decl, NULL);
9398       if (new_decl != NULL)
9399         {
9400           remove_AT (new_decl, DW_AT_signature);
9401           add_AT_specification (die, new_decl);
9402         }
9403     }
9404 }
9405
9406 /* Generate the skeleton ancestor tree for the given NODE, then clone
9407    the DIE and add the clone into the tree.  */
9408
9409 static void
9410 generate_skeleton_ancestor_tree (skeleton_chain_node *node)
9411 {
9412   if (node->new_die != NULL)
9413     return;
9414
9415   node->new_die = clone_as_declaration (node->old_die);
9416
9417   if (node->parent != NULL)
9418     {
9419       generate_skeleton_ancestor_tree (node->parent);
9420       add_child_die (node->parent->new_die, node->new_die);
9421     }
9422 }
9423
9424 /* Generate a skeleton tree of DIEs containing any declarations that are
9425    found in the original tree.  We traverse the tree looking for declaration
9426    DIEs, and construct the skeleton from the bottom up whenever we find one.  */
9427
9428 static void
9429 generate_skeleton_bottom_up (skeleton_chain_node *parent)
9430 {
9431   skeleton_chain_node node;
9432   dw_die_ref c;
9433   dw_die_ref first;
9434   dw_die_ref prev = NULL;
9435   dw_die_ref next = NULL;
9436
9437   node.parent = parent;
9438
9439   first = c = parent->old_die->die_child;
9440   if (c)
9441     next = c->die_sib;
9442   if (c) do {
9443     if (prev == NULL || prev->die_sib == c)
9444       prev = c;
9445     c = next;
9446     next = (c == first ? NULL : c->die_sib);
9447     node.old_die = c;
9448     node.new_die = NULL;
9449     if (is_declaration_die (c))
9450       {
9451         /* Clone the existing DIE, move the original to the skeleton
9452            tree (which is in the main CU), and put the clone, with
9453            all the original's children, where the original came from.  */
9454         dw_die_ref clone = clone_die (c);
9455         move_all_children (c, clone);
9456
9457         replace_child (c, clone, prev);
9458         generate_skeleton_ancestor_tree (parent);
9459         add_child_die (parent->new_die, c);
9460         node.new_die = c;
9461         c = clone;
9462       }
9463     generate_skeleton_bottom_up (&node);
9464   } while (next != NULL);
9465 }
9466
9467 /* Wrapper function for generate_skeleton_bottom_up.  */
9468
9469 static dw_die_ref
9470 generate_skeleton (dw_die_ref die)
9471 {
9472   skeleton_chain_node node;
9473
9474   node.old_die = die;
9475   node.new_die = NULL;
9476   node.parent = NULL;
9477
9478   /* If this type definition is nested inside another type,
9479      always leave at least a declaration in its place.  */
9480   if (die->die_parent != NULL && is_type_die (die->die_parent))
9481     node.new_die = clone_as_declaration (die);
9482
9483   generate_skeleton_bottom_up (&node);
9484   return node.new_die;
9485 }
9486
9487 /* Remove the DIE from its parent, possibly replacing it with a cloned
9488    declaration.  The original DIE will be moved to a new compile unit
9489    so that existing references to it follow it to the new location.  If
9490    any of the original DIE's descendants is a declaration, we need to
9491    replace the original DIE with a skeleton tree and move the
9492    declarations back into the skeleton tree.  */
9493
9494 static dw_die_ref
9495 remove_child_or_replace_with_skeleton (dw_die_ref child, dw_die_ref prev)
9496 {
9497   dw_die_ref skeleton;
9498
9499   skeleton = generate_skeleton (child);
9500   if (skeleton == NULL)
9501     remove_child_with_prev (child, prev);
9502   else
9503     {
9504       skeleton->die_id.die_type_node = child->die_id.die_type_node;
9505       replace_child (child, skeleton, prev);
9506     }
9507
9508   return skeleton;
9509 }
9510
9511 /* Traverse the DIE and set up additional .debug_types sections for each
9512    type worthy of being placed in a COMDAT section.  */
9513
9514 static void
9515 break_out_comdat_types (dw_die_ref die)
9516 {
9517   dw_die_ref c;
9518   dw_die_ref first;
9519   dw_die_ref prev = NULL;
9520   dw_die_ref next = NULL;
9521   dw_die_ref unit = NULL;
9522
9523   first = c = die->die_child;
9524   if (c)
9525     next = c->die_sib;
9526   if (c) do {
9527     if (prev == NULL || prev->die_sib == c)
9528       prev = c;
9529     c = next;
9530     next = (c == first ? NULL : c->die_sib);
9531     if (should_move_die_to_comdat (c))
9532       {
9533         dw_die_ref replacement;
9534         comdat_type_node_ref type_node;
9535
9536         /* Create a new type unit DIE as the root for the new tree, and
9537            add it to the list of comdat types.  */
9538         unit = new_die (DW_TAG_type_unit, NULL, NULL);
9539         add_AT_unsigned (unit, DW_AT_language,
9540                          get_AT_unsigned (comp_unit_die, DW_AT_language));
9541         type_node = GGC_CNEW (comdat_type_node);
9542         type_node->root_die = unit;
9543         type_node->next = comdat_type_list;
9544         comdat_type_list = type_node;
9545
9546         /* Generate the type signature.  */
9547         generate_type_signature (c, type_node);
9548
9549         /* Copy the declaration context, attributes, and children of the
9550            declaration into the new compile unit DIE.  */
9551         copy_declaration_context (unit, c);
9552
9553         /* Remove this DIE from the main CU.  */
9554         replacement = remove_child_or_replace_with_skeleton (c, prev);
9555
9556         /* Break out nested types into their own type units.  */
9557         break_out_comdat_types (c);
9558
9559         /* Add the DIE to the new compunit.  */
9560         add_child_die (unit, c);
9561
9562         if (replacement != NULL)
9563           c = replacement;
9564       }
9565     else if (c->die_tag == DW_TAG_namespace
9566              || c->die_tag == DW_TAG_class_type
9567              || c->die_tag == DW_TAG_structure_type
9568              || c->die_tag == DW_TAG_union_type)
9569       {
9570         /* Look for nested types that can be broken out.  */
9571         break_out_comdat_types (c);
9572       }
9573   } while (next != NULL);
9574 }
9575
9576 /* Structure to map a DIE in one CU to its copy in a comdat type unit.  */
9577
9578 struct decl_table_entry
9579 {
9580   dw_die_ref orig;
9581   dw_die_ref copy;
9582 };
9583
9584 /* Routines to manipulate hash table of copied declarations.  */
9585
9586 static hashval_t
9587 htab_decl_hash (const void *of)
9588 {
9589   const struct decl_table_entry *const entry =
9590     (const struct decl_table_entry *) of;
9591
9592   return htab_hash_pointer (entry->orig);
9593 }
9594
9595 static int
9596 htab_decl_eq (const void *of1, const void *of2)
9597 {
9598   const struct decl_table_entry *const entry1 =
9599     (const struct decl_table_entry *) of1;
9600   const struct die_struct *const entry2 = (const struct die_struct *) of2;
9601
9602   return entry1->orig == entry2;
9603 }
9604
9605 static void
9606 htab_decl_del (void *what)
9607 {
9608   struct decl_table_entry *entry = (struct decl_table_entry *) what;
9609
9610   free (entry);
9611 }
9612
9613 /* Copy DIE and its ancestors, up to, but not including, the compile unit
9614    or type unit entry, to a new tree.  Adds the new tree to UNIT and returns
9615    a pointer to the copy of DIE.  If DECL_TABLE is provided, it is used
9616    to check if the ancestor has already been copied into UNIT.  */
9617
9618 static dw_die_ref
9619 copy_ancestor_tree (dw_die_ref unit, dw_die_ref die, htab_t decl_table)
9620 {
9621   dw_die_ref parent = die->die_parent;
9622   dw_die_ref new_parent = unit;
9623   dw_die_ref copy;
9624   void **slot = NULL;
9625   struct decl_table_entry *entry = NULL;
9626
9627   if (decl_table)
9628     {
9629       /* Check if the entry has already been copied to UNIT.  */
9630       slot = htab_find_slot_with_hash (decl_table, die,
9631                                        htab_hash_pointer (die), INSERT);
9632       if (*slot != HTAB_EMPTY_ENTRY)
9633         {
9634           entry = (struct decl_table_entry *) *slot;
9635           return entry->copy;
9636         }
9637
9638       /* Record in DECL_TABLE that DIE has been copied to UNIT.  */
9639       entry = XCNEW (struct decl_table_entry);
9640       entry->orig = die;
9641       entry->copy = NULL;
9642       *slot = entry;
9643     }
9644
9645   if (parent != NULL)
9646     {
9647       dw_die_ref spec = get_AT_ref (parent, DW_AT_specification);
9648       if (spec != NULL)
9649         parent = spec;
9650       if (parent->die_tag != DW_TAG_compile_unit
9651           && parent->die_tag != DW_TAG_type_unit)
9652         new_parent = copy_ancestor_tree (unit, parent, decl_table);
9653     }
9654
9655   copy = clone_as_declaration (die);
9656   add_child_die (new_parent, copy);
9657
9658   if (decl_table != NULL)
9659     {
9660       /* Make sure the copy is marked as part of the type unit.  */
9661       copy->die_mark = 1;
9662       /* Record the pointer to the copy.  */
9663       entry->copy = copy;
9664     }
9665
9666   return copy;
9667 }
9668
9669 /* Walk the DIE and its children, looking for references to incomplete
9670    or trivial types that are unmarked (i.e., that are not in the current
9671    type_unit).  */
9672
9673 static void
9674 copy_decls_walk (dw_die_ref unit, dw_die_ref die, htab_t decl_table)
9675 {
9676   dw_die_ref c;
9677   dw_attr_ref a;
9678   unsigned ix;
9679
9680   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
9681     {
9682       if (AT_class (a) == dw_val_class_die_ref)
9683         {
9684           dw_die_ref targ = AT_ref (a);
9685           comdat_type_node_ref type_node = targ->die_id.die_type_node;
9686           void **slot;
9687           struct decl_table_entry *entry;
9688
9689           if (targ->die_mark != 0 || type_node != NULL)
9690             continue;
9691
9692           slot = htab_find_slot_with_hash (decl_table, targ,
9693                                            htab_hash_pointer (targ), INSERT);
9694
9695           if (*slot != HTAB_EMPTY_ENTRY)
9696             {
9697               /* TARG has already been copied, so we just need to
9698                  modify the reference to point to the copy.  */
9699               entry = (struct decl_table_entry *) *slot;
9700               a->dw_attr_val.v.val_die_ref.die = entry->copy;
9701             }
9702           else
9703             {
9704               dw_die_ref parent = unit;
9705               dw_die_ref copy = clone_tree (targ);
9706
9707               /* Make sure the cloned tree is marked as part of the
9708                  type unit.  */
9709               mark_dies (copy);
9710
9711               /* Record in DECL_TABLE that TARG has been copied.
9712                  Need to do this now, before the recursive call,
9713                  because DECL_TABLE may be expanded and SLOT
9714                  would no longer be a valid pointer.  */
9715               entry = XCNEW (struct decl_table_entry);
9716               entry->orig = targ;
9717               entry->copy = copy;
9718               *slot = entry;
9719
9720               /* If TARG has surrounding context, copy its ancestor tree
9721                  into the new type unit.  */
9722               if (targ->die_parent != NULL
9723                   && targ->die_parent->die_tag != DW_TAG_compile_unit
9724                   && targ->die_parent->die_tag != DW_TAG_type_unit)
9725                 parent = copy_ancestor_tree (unit, targ->die_parent,
9726                                              decl_table);
9727
9728               add_child_die (parent, copy);
9729               a->dw_attr_val.v.val_die_ref.die = copy;
9730
9731               /* Make sure the newly-copied DIE is walked.  If it was
9732                  installed in a previously-added context, it won't
9733                  get visited otherwise.  */
9734               if (parent != unit)
9735                 copy_decls_walk (unit, parent, decl_table);
9736             }
9737         }
9738     }
9739
9740   FOR_EACH_CHILD (die, c, copy_decls_walk (unit, c, decl_table));
9741 }
9742
9743 /* Copy declarations for "unworthy" types into the new comdat section.
9744    Incomplete types, modified types, and certain other types aren't broken
9745    out into comdat sections of their own, so they don't have a signature,
9746    and we need to copy the declaration into the same section so that we
9747    don't have an external reference.  */
9748
9749 static void
9750 copy_decls_for_unworthy_types (dw_die_ref unit)
9751 {
9752   htab_t decl_table;
9753
9754   mark_dies (unit);
9755   decl_table = htab_create (10, htab_decl_hash, htab_decl_eq, htab_decl_del);
9756   copy_decls_walk (unit, unit, decl_table);
9757   htab_delete (decl_table);
9758   unmark_dies (unit);
9759 }
9760
9761 /* Traverse the DIE and add a sibling attribute if it may have the
9762    effect of speeding up access to siblings.  To save some space,
9763    avoid generating sibling attributes for DIE's without children.  */
9764
9765 static void
9766 add_sibling_attributes (dw_die_ref die)
9767 {
9768   dw_die_ref c;
9769
9770   if (! die->die_child)
9771     return;
9772
9773   if (die->die_parent && die != die->die_parent->die_child)
9774     add_AT_die_ref (die, DW_AT_sibling, die->die_sib);
9775
9776   FOR_EACH_CHILD (die, c, add_sibling_attributes (c));
9777 }
9778
9779 /* Output all location lists for the DIE and its children.  */
9780
9781 static void
9782 output_location_lists (dw_die_ref die)
9783 {
9784   dw_die_ref c;
9785   dw_attr_ref a;
9786   unsigned ix;
9787
9788   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
9789     if (AT_class (a) == dw_val_class_loc_list)
9790       output_loc_list (AT_loc_list (a));
9791
9792   FOR_EACH_CHILD (die, c, output_location_lists (c));
9793 }
9794
9795 /* The format of each DIE (and its attribute value pairs) is encoded in an
9796    abbreviation table.  This routine builds the abbreviation table and assigns
9797    a unique abbreviation id for each abbreviation entry.  The children of each
9798    die are visited recursively.  */
9799
9800 static void
9801 build_abbrev_table (dw_die_ref die)
9802 {
9803   unsigned long abbrev_id;
9804   unsigned int n_alloc;
9805   dw_die_ref c;
9806   dw_attr_ref a;
9807   unsigned ix;
9808
9809   /* Scan the DIE references, and mark as external any that refer to
9810      DIEs from other CUs (i.e. those which are not marked).  */
9811   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
9812     if (AT_class (a) == dw_val_class_die_ref
9813         && AT_ref (a)->die_mark == 0)
9814       {
9815         gcc_assert (dwarf_version >= 4 || AT_ref (a)->die_id.die_symbol);
9816         set_AT_ref_external (a, 1);
9817       }
9818
9819   for (abbrev_id = 1; abbrev_id < abbrev_die_table_in_use; ++abbrev_id)
9820     {
9821       dw_die_ref abbrev = abbrev_die_table[abbrev_id];
9822       dw_attr_ref die_a, abbrev_a;
9823       unsigned ix;
9824       bool ok = true;
9825
9826       if (abbrev->die_tag != die->die_tag)
9827         continue;
9828       if ((abbrev->die_child != NULL) != (die->die_child != NULL))
9829         continue;
9830
9831       if (VEC_length (dw_attr_node, abbrev->die_attr)
9832           != VEC_length (dw_attr_node, die->die_attr))
9833         continue;
9834
9835       for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, die_a); ix++)
9836         {
9837           abbrev_a = VEC_index (dw_attr_node, abbrev->die_attr, ix);
9838           if ((abbrev_a->dw_attr != die_a->dw_attr)
9839               || (value_format (abbrev_a) != value_format (die_a)))
9840             {
9841               ok = false;
9842               break;
9843             }
9844         }
9845       if (ok)
9846         break;
9847     }
9848
9849   if (abbrev_id >= abbrev_die_table_in_use)
9850     {
9851       if (abbrev_die_table_in_use >= abbrev_die_table_allocated)
9852         {
9853           n_alloc = abbrev_die_table_allocated + ABBREV_DIE_TABLE_INCREMENT;
9854           abbrev_die_table = GGC_RESIZEVEC (dw_die_ref, abbrev_die_table,
9855                                             n_alloc);
9856
9857           memset (&abbrev_die_table[abbrev_die_table_allocated], 0,
9858                  (n_alloc - abbrev_die_table_allocated) * sizeof (dw_die_ref));
9859           abbrev_die_table_allocated = n_alloc;
9860         }
9861
9862       ++abbrev_die_table_in_use;
9863       abbrev_die_table[abbrev_id] = die;
9864     }
9865
9866   die->die_abbrev = abbrev_id;
9867   FOR_EACH_CHILD (die, c, build_abbrev_table (c));
9868 }
9869 \f
9870 /* Return the power-of-two number of bytes necessary to represent VALUE.  */
9871
9872 static int
9873 constant_size (unsigned HOST_WIDE_INT value)
9874 {
9875   int log;
9876
9877   if (value == 0)
9878     log = 0;
9879   else
9880     log = floor_log2 (value);
9881
9882   log = log / 8;
9883   log = 1 << (floor_log2 (log) + 1);
9884
9885   return log;
9886 }
9887
9888 /* Return the size of a DIE as it is represented in the
9889    .debug_info section.  */
9890
9891 static unsigned long
9892 size_of_die (dw_die_ref die)
9893 {
9894   unsigned long size = 0;
9895   dw_attr_ref a;
9896   unsigned ix;
9897
9898   size += size_of_uleb128 (die->die_abbrev);
9899   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
9900     {
9901       switch (AT_class (a))
9902         {
9903         case dw_val_class_addr:
9904           size += DWARF2_ADDR_SIZE;
9905           break;
9906         case dw_val_class_offset:
9907           size += DWARF_OFFSET_SIZE;
9908           break;
9909         case dw_val_class_loc:
9910           {
9911             unsigned long lsize = size_of_locs (AT_loc (a));
9912
9913             /* Block length.  */
9914             size += constant_size (lsize);
9915             size += lsize;
9916           }
9917           break;
9918         case dw_val_class_loc_list:
9919           size += DWARF_OFFSET_SIZE;
9920           break;
9921         case dw_val_class_range_list:
9922           size += DWARF_OFFSET_SIZE;
9923           break;
9924         case dw_val_class_const:
9925           size += size_of_sleb128 (AT_int (a));
9926           break;
9927         case dw_val_class_unsigned_const:
9928           size += constant_size (AT_unsigned (a));
9929           break;
9930         case dw_val_class_const_double:
9931           size += 2 * HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR;
9932           if (HOST_BITS_PER_WIDE_INT >= 64)
9933             size++; /* block */
9934           break;
9935         case dw_val_class_vec:
9936           size += constant_size (a->dw_attr_val.v.val_vec.length
9937                                  * a->dw_attr_val.v.val_vec.elt_size)
9938                   + a->dw_attr_val.v.val_vec.length
9939                     * a->dw_attr_val.v.val_vec.elt_size; /* block */
9940           break;
9941         case dw_val_class_flag:
9942           size += 1;
9943           break;
9944         case dw_val_class_die_ref:
9945           if (AT_ref_external (a))
9946             {
9947               /* In DWARF4, we use DW_FORM_sig8; for earlier versions
9948                  we use DW_FORM_ref_addr.  In DWARF2, DW_FORM_ref_addr
9949                  is sized by target address length, whereas in DWARF3
9950                  it's always sized as an offset.  */
9951               if (dwarf_version >= 4)
9952                 size += DWARF_TYPE_SIGNATURE_SIZE;
9953               else if (dwarf_version == 2)
9954                 size += DWARF2_ADDR_SIZE;
9955               else
9956                 size += DWARF_OFFSET_SIZE;
9957             }
9958           else
9959             size += DWARF_OFFSET_SIZE;
9960           break;
9961         case dw_val_class_fde_ref:
9962           size += DWARF_OFFSET_SIZE;
9963           break;
9964         case dw_val_class_lbl_id:
9965           size += DWARF2_ADDR_SIZE;
9966           break;
9967         case dw_val_class_lineptr:
9968         case dw_val_class_macptr:
9969           size += DWARF_OFFSET_SIZE;
9970           break;
9971         case dw_val_class_str:
9972           if (AT_string_form (a) == DW_FORM_strp)
9973             size += DWARF_OFFSET_SIZE;
9974           else
9975             size += strlen (a->dw_attr_val.v.val_str->str) + 1;
9976           break;
9977         case dw_val_class_file:
9978           size += constant_size (maybe_emit_file (a->dw_attr_val.v.val_file));
9979           break;
9980         case dw_val_class_data8:
9981           size += 8;
9982           break;
9983         default:
9984           gcc_unreachable ();
9985         }
9986     }
9987
9988   return size;
9989 }
9990
9991 /* Size the debugging information associated with a given DIE.  Visits the
9992    DIE's children recursively.  Updates the global variable next_die_offset, on
9993    each time through.  Uses the current value of next_die_offset to update the
9994    die_offset field in each DIE.  */
9995
9996 static void
9997 calc_die_sizes (dw_die_ref die)
9998 {
9999   dw_die_ref c;
10000
10001   die->die_offset = next_die_offset;
10002   next_die_offset += size_of_die (die);
10003
10004   FOR_EACH_CHILD (die, c, calc_die_sizes (c));
10005
10006   if (die->die_child != NULL)
10007     /* Count the null byte used to terminate sibling lists.  */
10008     next_die_offset += 1;
10009 }
10010
10011 /* Set the marks for a die and its children.  We do this so
10012    that we know whether or not a reference needs to use FORM_ref_addr; only
10013    DIEs in the same CU will be marked.  We used to clear out the offset
10014    and use that as the flag, but ran into ordering problems.  */
10015
10016 static void
10017 mark_dies (dw_die_ref die)
10018 {
10019   dw_die_ref c;
10020
10021   gcc_assert (!die->die_mark);
10022
10023   die->die_mark = 1;
10024   FOR_EACH_CHILD (die, c, mark_dies (c));
10025 }
10026
10027 /* Clear the marks for a die and its children.  */
10028
10029 static void
10030 unmark_dies (dw_die_ref die)
10031 {
10032   dw_die_ref c;
10033
10034   if (dwarf_version < 4)
10035     gcc_assert (die->die_mark);
10036
10037   die->die_mark = 0;
10038   FOR_EACH_CHILD (die, c, unmark_dies (c));
10039 }
10040
10041 /* Clear the marks for a die, its children and referred dies.  */
10042
10043 static void
10044 unmark_all_dies (dw_die_ref die)
10045 {
10046   dw_die_ref c;
10047   dw_attr_ref a;
10048   unsigned ix;
10049
10050   if (!die->die_mark)
10051     return;
10052   die->die_mark = 0;
10053
10054   FOR_EACH_CHILD (die, c, unmark_all_dies (c));
10055
10056   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
10057     if (AT_class (a) == dw_val_class_die_ref)
10058       unmark_all_dies (AT_ref (a));
10059 }
10060
10061 /* Return the size of the .debug_pubnames or .debug_pubtypes table
10062    generated for the compilation unit.  */
10063
10064 static unsigned long
10065 size_of_pubnames (VEC (pubname_entry, gc) * names)
10066 {
10067   unsigned long size;
10068   unsigned i;
10069   pubname_ref p;
10070
10071   size = DWARF_PUBNAMES_HEADER_SIZE;
10072   for (i = 0; VEC_iterate (pubname_entry, names, i, p); i++)
10073     if (names != pubtype_table
10074         || p->die->die_offset != 0
10075         || !flag_eliminate_unused_debug_types)
10076       size += strlen (p->name) + DWARF_OFFSET_SIZE + 1;
10077
10078   size += DWARF_OFFSET_SIZE;
10079   return size;
10080 }
10081
10082 /* Return the size of the information in the .debug_aranges section.  */
10083
10084 static unsigned long
10085 size_of_aranges (void)
10086 {
10087   unsigned long size;
10088
10089   size = DWARF_ARANGES_HEADER_SIZE;
10090
10091   /* Count the address/length pair for this compilation unit.  */
10092   if (text_section_used)
10093     size += 2 * DWARF2_ADDR_SIZE;
10094   if (cold_text_section_used)
10095     size += 2 * DWARF2_ADDR_SIZE;
10096   size += 2 * DWARF2_ADDR_SIZE * arange_table_in_use;
10097
10098   /* Count the two zero words used to terminated the address range table.  */
10099   size += 2 * DWARF2_ADDR_SIZE;
10100   return size;
10101 }
10102 \f
10103 /* Select the encoding of an attribute value.  */
10104
10105 static enum dwarf_form
10106 value_format (dw_attr_ref a)
10107 {
10108   switch (a->dw_attr_val.val_class)
10109     {
10110     case dw_val_class_addr:
10111       /* Only very few attributes allow DW_FORM_addr.  */
10112       switch (a->dw_attr)
10113         {
10114         case DW_AT_low_pc:
10115         case DW_AT_high_pc:
10116         case DW_AT_entry_pc:
10117         case DW_AT_trampoline:
10118           return DW_FORM_addr;
10119         default:
10120           break;
10121         }
10122       switch (DWARF2_ADDR_SIZE)
10123         {
10124         case 1:
10125           return DW_FORM_data1;
10126         case 2:
10127           return DW_FORM_data2;
10128         case 4:
10129           return DW_FORM_data4;
10130         case 8:
10131           return DW_FORM_data8;
10132         default:
10133           gcc_unreachable ();
10134         }
10135     case dw_val_class_range_list:
10136     case dw_val_class_offset:
10137     case dw_val_class_loc_list:
10138       switch (DWARF_OFFSET_SIZE)
10139         {
10140         case 4:
10141           return DW_FORM_data4;
10142         case 8:
10143           return DW_FORM_data8;
10144         default:
10145           gcc_unreachable ();
10146         }
10147     case dw_val_class_loc:
10148       switch (constant_size (size_of_locs (AT_loc (a))))
10149         {
10150         case 1:
10151           return DW_FORM_block1;
10152         case 2:
10153           return DW_FORM_block2;
10154         default:
10155           gcc_unreachable ();
10156         }
10157     case dw_val_class_const:
10158       return DW_FORM_sdata;
10159     case dw_val_class_unsigned_const:
10160       switch (constant_size (AT_unsigned (a)))
10161         {
10162         case 1:
10163           return DW_FORM_data1;
10164         case 2:
10165           return DW_FORM_data2;
10166         case 4:
10167           return DW_FORM_data4;
10168         case 8:
10169           return DW_FORM_data8;
10170         default:
10171           gcc_unreachable ();
10172         }
10173     case dw_val_class_const_double:
10174       switch (HOST_BITS_PER_WIDE_INT)
10175         {
10176         case 8:
10177           return DW_FORM_data2;
10178         case 16:
10179           return DW_FORM_data4;
10180         case 32:
10181           return DW_FORM_data8;
10182         case 64:
10183         default:
10184           return DW_FORM_block1;
10185         }
10186     case dw_val_class_vec:
10187       switch (constant_size (a->dw_attr_val.v.val_vec.length
10188                              * a->dw_attr_val.v.val_vec.elt_size))
10189         {
10190         case 1:
10191           return DW_FORM_block1;
10192         case 2:
10193           return DW_FORM_block2;
10194         case 4:
10195           return DW_FORM_block4;
10196         default:
10197           gcc_unreachable ();
10198         }
10199     case dw_val_class_flag:
10200       return DW_FORM_flag;
10201     case dw_val_class_die_ref:
10202       if (AT_ref_external (a))
10203         return dwarf_version >= 4 ? DW_FORM_sig8 : DW_FORM_ref_addr;
10204       else
10205         return DW_FORM_ref;
10206     case dw_val_class_fde_ref:
10207       return DW_FORM_data;
10208     case dw_val_class_lbl_id:
10209       return DW_FORM_addr;
10210     case dw_val_class_lineptr:
10211     case dw_val_class_macptr:
10212       return DW_FORM_data;
10213     case dw_val_class_str:
10214       return AT_string_form (a);
10215     case dw_val_class_file:
10216       switch (constant_size (maybe_emit_file (a->dw_attr_val.v.val_file)))
10217         {
10218         case 1:
10219           return DW_FORM_data1;
10220         case 2:
10221           return DW_FORM_data2;
10222         case 4:
10223           return DW_FORM_data4;
10224         default:
10225           gcc_unreachable ();
10226         }
10227
10228     case dw_val_class_data8:
10229       return DW_FORM_data8;
10230
10231     default:
10232       gcc_unreachable ();
10233     }
10234 }
10235
10236 /* Output the encoding of an attribute value.  */
10237
10238 static void
10239 output_value_format (dw_attr_ref a)
10240 {
10241   enum dwarf_form form = value_format (a);
10242
10243   dw2_asm_output_data_uleb128 (form, "(%s)", dwarf_form_name (form));
10244 }
10245
10246 /* Output the .debug_abbrev section which defines the DIE abbreviation
10247    table.  */
10248
10249 static void
10250 output_abbrev_section (void)
10251 {
10252   unsigned long abbrev_id;
10253
10254   for (abbrev_id = 1; abbrev_id < abbrev_die_table_in_use; ++abbrev_id)
10255     {
10256       dw_die_ref abbrev = abbrev_die_table[abbrev_id];
10257       unsigned ix;
10258       dw_attr_ref a_attr;
10259
10260       dw2_asm_output_data_uleb128 (abbrev_id, "(abbrev code)");
10261       dw2_asm_output_data_uleb128 (abbrev->die_tag, "(TAG: %s)",
10262                                    dwarf_tag_name (abbrev->die_tag));
10263
10264       if (abbrev->die_child != NULL)
10265         dw2_asm_output_data (1, DW_children_yes, "DW_children_yes");
10266       else
10267         dw2_asm_output_data (1, DW_children_no, "DW_children_no");
10268
10269       for (ix = 0; VEC_iterate (dw_attr_node, abbrev->die_attr, ix, a_attr);
10270            ix++)
10271         {
10272           dw2_asm_output_data_uleb128 (a_attr->dw_attr, "(%s)",
10273                                        dwarf_attr_name (a_attr->dw_attr));
10274           output_value_format (a_attr);
10275         }
10276
10277       dw2_asm_output_data (1, 0, NULL);
10278       dw2_asm_output_data (1, 0, NULL);
10279     }
10280
10281   /* Terminate the table.  */
10282   dw2_asm_output_data (1, 0, NULL);
10283 }
10284
10285 /* Output a symbol we can use to refer to this DIE from another CU.  */
10286
10287 static inline void
10288 output_die_symbol (dw_die_ref die)
10289 {
10290   char *sym = die->die_id.die_symbol;
10291
10292   if (sym == 0)
10293     return;
10294
10295   if (strncmp (sym, DIE_LABEL_PREFIX, sizeof (DIE_LABEL_PREFIX) - 1) == 0)
10296     /* We make these global, not weak; if the target doesn't support
10297        .linkonce, it doesn't support combining the sections, so debugging
10298        will break.  */
10299     targetm.asm_out.globalize_label (asm_out_file, sym);
10300
10301   ASM_OUTPUT_LABEL (asm_out_file, sym);
10302 }
10303
10304 /* Return a new location list, given the begin and end range, and the
10305    expression. gensym tells us whether to generate a new internal symbol for
10306    this location list node, which is done for the head of the list only.  */
10307
10308 static inline dw_loc_list_ref
10309 new_loc_list (dw_loc_descr_ref expr, const char *begin, const char *end,
10310               const char *section, unsigned int gensym)
10311 {
10312   dw_loc_list_ref retlist = GGC_CNEW (dw_loc_list_node);
10313
10314   retlist->begin = begin;
10315   retlist->end = end;
10316   retlist->expr = expr;
10317   retlist->section = section;
10318   if (gensym)
10319     retlist->ll_symbol = gen_internal_sym ("LLST");
10320
10321   return retlist;
10322 }
10323
10324 /* Add a location description expression to a location list.  */
10325
10326 static inline void
10327 add_loc_descr_to_loc_list (dw_loc_list_ref *list_head, dw_loc_descr_ref descr,
10328                            const char *begin, const char *end,
10329                            const char *section)
10330 {
10331   dw_loc_list_ref *d;
10332
10333   /* Find the end of the chain.  */
10334   for (d = list_head; (*d) != NULL; d = &(*d)->dw_loc_next)
10335     ;
10336
10337   /* Add a new location list node to the list.  */
10338   *d = new_loc_list (descr, begin, end, section, 0);
10339 }
10340
10341 /* Output the location list given to us.  */
10342
10343 static void
10344 output_loc_list (dw_loc_list_ref list_head)
10345 {
10346   dw_loc_list_ref curr = list_head;
10347
10348   ASM_OUTPUT_LABEL (asm_out_file, list_head->ll_symbol);
10349
10350   /* Walk the location list, and output each range + expression.  */
10351   for (curr = list_head; curr != NULL; curr = curr->dw_loc_next)
10352     {
10353       unsigned long size;
10354       /* Don't output an entry that starts and ends at the same address.  */
10355       if (strcmp (curr->begin, curr->end) == 0)
10356         continue;
10357       if (!have_multiple_function_sections)
10358         {
10359           dw2_asm_output_delta (DWARF2_ADDR_SIZE, curr->begin, curr->section,
10360                                 "Location list begin address (%s)",
10361                                 list_head->ll_symbol);
10362           dw2_asm_output_delta (DWARF2_ADDR_SIZE, curr->end, curr->section,
10363                                 "Location list end address (%s)",
10364                                 list_head->ll_symbol);
10365         }
10366       else
10367         {
10368           dw2_asm_output_addr (DWARF2_ADDR_SIZE, curr->begin,
10369                                "Location list begin address (%s)",
10370                                list_head->ll_symbol);
10371           dw2_asm_output_addr (DWARF2_ADDR_SIZE, curr->end,
10372                                "Location list end address (%s)",
10373                                list_head->ll_symbol);
10374         }
10375       size = size_of_locs (curr->expr);
10376
10377       /* Output the block length for this list of location operations.  */
10378       gcc_assert (size <= 0xffff);
10379       dw2_asm_output_data (2, size, "%s", "Location expression size");
10380
10381       output_loc_sequence (curr->expr);
10382     }
10383
10384   dw2_asm_output_data (DWARF2_ADDR_SIZE, 0,
10385                        "Location list terminator begin (%s)",
10386                        list_head->ll_symbol);
10387   dw2_asm_output_data (DWARF2_ADDR_SIZE, 0,
10388                        "Location list terminator end (%s)",
10389                        list_head->ll_symbol);
10390 }
10391
10392 /* Output a type signature.  */
10393
10394 static inline void
10395 output_signature (const char *sig, const char *name)
10396 {
10397   int i;
10398
10399   for (i = 0; i < DWARF_TYPE_SIGNATURE_SIZE; i++)
10400     dw2_asm_output_data (1, sig[i], i == 0 ? "%s" : NULL, name);
10401 }
10402
10403 /* Output the DIE and its attributes.  Called recursively to generate
10404    the definitions of each child DIE.  */
10405
10406 static void
10407 output_die (dw_die_ref die)
10408 {
10409   dw_attr_ref a;
10410   dw_die_ref c;
10411   unsigned long size;
10412   unsigned ix;
10413
10414   /* If someone in another CU might refer to us, set up a symbol for
10415      them to point to.  */
10416   if (dwarf_version < 4 && die->die_id.die_symbol)
10417     output_die_symbol (die);
10418
10419   dw2_asm_output_data_uleb128 (die->die_abbrev, "(DIE (0x%lx) %s)",
10420                                (unsigned long)die->die_offset,
10421                                dwarf_tag_name (die->die_tag));
10422
10423   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
10424     {
10425       const char *name = dwarf_attr_name (a->dw_attr);
10426
10427       switch (AT_class (a))
10428         {
10429         case dw_val_class_addr:
10430           dw2_asm_output_addr_rtx (DWARF2_ADDR_SIZE, AT_addr (a), "%s", name);
10431           break;
10432
10433         case dw_val_class_offset:
10434           dw2_asm_output_data (DWARF_OFFSET_SIZE, a->dw_attr_val.v.val_offset,
10435                                "%s", name);
10436           break;
10437
10438         case dw_val_class_range_list:
10439           {
10440             char *p = strchr (ranges_section_label, '\0');
10441
10442             sprintf (p, "+" HOST_WIDE_INT_PRINT_HEX,
10443                      a->dw_attr_val.v.val_offset);
10444             dw2_asm_output_offset (DWARF_OFFSET_SIZE, ranges_section_label,
10445                                    debug_ranges_section, "%s", name);
10446             *p = '\0';
10447           }
10448           break;
10449
10450         case dw_val_class_loc:
10451           size = size_of_locs (AT_loc (a));
10452
10453           /* Output the block length for this list of location operations.  */
10454           dw2_asm_output_data (constant_size (size), size, "%s", name);
10455
10456           output_loc_sequence (AT_loc (a));
10457           break;
10458
10459         case dw_val_class_const:
10460           /* ??? It would be slightly more efficient to use a scheme like is
10461              used for unsigned constants below, but gdb 4.x does not sign
10462              extend.  Gdb 5.x does sign extend.  */
10463           dw2_asm_output_data_sleb128 (AT_int (a), "%s", name);
10464           break;
10465
10466         case dw_val_class_unsigned_const:
10467           dw2_asm_output_data (constant_size (AT_unsigned (a)),
10468                                AT_unsigned (a), "%s", name);
10469           break;
10470
10471         case dw_val_class_const_double:
10472           {
10473             unsigned HOST_WIDE_INT first, second;
10474
10475             if (HOST_BITS_PER_WIDE_INT >= 64)
10476               dw2_asm_output_data (1,
10477                                    2 * HOST_BITS_PER_WIDE_INT
10478                                    / HOST_BITS_PER_CHAR,
10479                                    NULL);
10480
10481             if (WORDS_BIG_ENDIAN)
10482               {
10483                 first = a->dw_attr_val.v.val_double.high;
10484                 second = a->dw_attr_val.v.val_double.low;
10485               }
10486             else
10487               {
10488                 first = a->dw_attr_val.v.val_double.low;
10489                 second = a->dw_attr_val.v.val_double.high;
10490               }
10491
10492             dw2_asm_output_data (HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR,
10493                                  first, name);
10494             dw2_asm_output_data (HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR,
10495                                  second, NULL);
10496           }
10497           break;
10498
10499         case dw_val_class_vec:
10500           {
10501             unsigned int elt_size = a->dw_attr_val.v.val_vec.elt_size;
10502             unsigned int len = a->dw_attr_val.v.val_vec.length;
10503             unsigned int i;
10504             unsigned char *p;
10505
10506             dw2_asm_output_data (constant_size (len * elt_size),
10507                                  len * elt_size, "%s", name);
10508             if (elt_size > sizeof (HOST_WIDE_INT))
10509               {
10510                 elt_size /= 2;
10511                 len *= 2;
10512               }
10513             for (i = 0, p = a->dw_attr_val.v.val_vec.array;
10514                  i < len;
10515                  i++, p += elt_size)
10516               dw2_asm_output_data (elt_size, extract_int (p, elt_size),
10517                                    "fp or vector constant word %u", i);
10518             break;
10519           }
10520
10521         case dw_val_class_flag:
10522           dw2_asm_output_data (1, AT_flag (a), "%s", name);
10523           break;
10524
10525         case dw_val_class_loc_list:
10526           {
10527             char *sym = AT_loc_list (a)->ll_symbol;
10528
10529             gcc_assert (sym);
10530             dw2_asm_output_offset (DWARF_OFFSET_SIZE, sym, debug_loc_section,
10531                                    "%s", name);
10532           }
10533           break;
10534
10535         case dw_val_class_die_ref:
10536           if (AT_ref_external (a))
10537             {
10538               if (dwarf_version >= 4)
10539                 {
10540                   comdat_type_node_ref type_node =
10541                     AT_ref (a)->die_id.die_type_node;
10542
10543                   gcc_assert (type_node);
10544                   output_signature (type_node->signature, name);
10545                 }
10546               else
10547                 {
10548                   char *sym = AT_ref (a)->die_id.die_symbol;
10549                   int size;
10550
10551                   gcc_assert (sym);
10552                   /* In DWARF2, DW_FORM_ref_addr is sized by target address
10553                      length, whereas in DWARF3 it's always sized as an
10554                      offset.  */
10555                   if (dwarf_version == 2)
10556                     size = DWARF2_ADDR_SIZE;
10557                   else
10558                     size = DWARF_OFFSET_SIZE;
10559                   dw2_asm_output_offset (size, sym, debug_info_section, "%s",
10560                                          name);
10561                 }
10562             }
10563           else
10564             {
10565               gcc_assert (AT_ref (a)->die_offset);
10566               dw2_asm_output_data (DWARF_OFFSET_SIZE, AT_ref (a)->die_offset,
10567                                    "%s", name);
10568             }
10569           break;
10570
10571         case dw_val_class_fde_ref:
10572           {
10573             char l1[20];
10574
10575             ASM_GENERATE_INTERNAL_LABEL (l1, FDE_LABEL,
10576                                          a->dw_attr_val.v.val_fde_index * 2);
10577             dw2_asm_output_offset (DWARF_OFFSET_SIZE, l1, debug_frame_section,
10578                                    "%s", name);
10579           }
10580           break;
10581
10582         case dw_val_class_lbl_id:
10583           dw2_asm_output_addr (DWARF2_ADDR_SIZE, AT_lbl (a), "%s", name);
10584           break;
10585
10586         case dw_val_class_lineptr:
10587           dw2_asm_output_offset (DWARF_OFFSET_SIZE, AT_lbl (a),
10588                                  debug_line_section, "%s", name);
10589           break;
10590
10591         case dw_val_class_macptr:
10592           dw2_asm_output_offset (DWARF_OFFSET_SIZE, AT_lbl (a),
10593                                  debug_macinfo_section, "%s", name);
10594           break;
10595
10596         case dw_val_class_str:
10597           if (AT_string_form (a) == DW_FORM_strp)
10598             dw2_asm_output_offset (DWARF_OFFSET_SIZE,
10599                                    a->dw_attr_val.v.val_str->label,
10600                                    debug_str_section,
10601                                    "%s: \"%s\"", name, AT_string (a));
10602           else
10603             dw2_asm_output_nstring (AT_string (a), -1, "%s", name);
10604           break;
10605
10606         case dw_val_class_file:
10607           {
10608             int f = maybe_emit_file (a->dw_attr_val.v.val_file);
10609
10610             dw2_asm_output_data (constant_size (f), f, "%s (%s)", name,
10611                                  a->dw_attr_val.v.val_file->filename);
10612             break;
10613           }
10614
10615         case dw_val_class_data8:
10616           {
10617             int i;
10618
10619             for (i = 0; i < 8; i++)
10620               dw2_asm_output_data (1, a->dw_attr_val.v.val_data8[i],
10621                                    i == 0 ? "%s" : NULL, name);
10622             break;
10623           }
10624
10625         default:
10626           gcc_unreachable ();
10627         }
10628     }
10629
10630   FOR_EACH_CHILD (die, c, output_die (c));
10631
10632   /* Add null byte to terminate sibling list.  */
10633   if (die->die_child != NULL)
10634     dw2_asm_output_data (1, 0, "end of children of DIE 0x%lx",
10635                          (unsigned long) die->die_offset);
10636 }
10637
10638 /* Output the compilation unit that appears at the beginning of the
10639    .debug_info section, and precedes the DIE descriptions.  */
10640
10641 static void
10642 output_compilation_unit_header (void)
10643 {
10644   int ver = dwarf_version;
10645
10646   /* Don't mark the output as DWARF-4 until we make full use of the
10647      version 4 extensions, and gdb supports them.  For now, -gdwarf-4
10648      selects only a few extensions from the DWARF-4 spec.  */
10649   if (ver > 3)
10650     ver = 3;
10651   if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
10652     dw2_asm_output_data (4, 0xffffffff,
10653       "Initial length escape value indicating 64-bit DWARF extension");
10654   dw2_asm_output_data (DWARF_OFFSET_SIZE,
10655                        next_die_offset - DWARF_INITIAL_LENGTH_SIZE,
10656                        "Length of Compilation Unit Info");
10657   dw2_asm_output_data (2, ver, "DWARF version number");
10658   dw2_asm_output_offset (DWARF_OFFSET_SIZE, abbrev_section_label,
10659                          debug_abbrev_section,
10660                          "Offset Into Abbrev. Section");
10661   dw2_asm_output_data (1, DWARF2_ADDR_SIZE, "Pointer Size (in bytes)");
10662 }
10663
10664 /* Output the compilation unit DIE and its children.  */
10665
10666 static void
10667 output_comp_unit (dw_die_ref die, int output_if_empty)
10668 {
10669   const char *secname;
10670   char *oldsym, *tmp;
10671
10672   /* Unless we are outputting main CU, we may throw away empty ones.  */
10673   if (!output_if_empty && die->die_child == NULL)
10674     return;
10675
10676   /* Even if there are no children of this DIE, we must output the information
10677      about the compilation unit.  Otherwise, on an empty translation unit, we
10678      will generate a present, but empty, .debug_info section.  IRIX 6.5 `nm'
10679      will then complain when examining the file.  First mark all the DIEs in
10680      this CU so we know which get local refs.  */
10681   mark_dies (die);
10682
10683   build_abbrev_table (die);
10684
10685   /* Initialize the beginning DIE offset - and calculate sizes/offsets.  */
10686   next_die_offset = DWARF_COMPILE_UNIT_HEADER_SIZE;
10687   calc_die_sizes (die);
10688
10689   oldsym = die->die_id.die_symbol;
10690   if (oldsym)
10691     {
10692       tmp = XALLOCAVEC (char, strlen (oldsym) + 24);
10693
10694       sprintf (tmp, ".gnu.linkonce.wi.%s", oldsym);
10695       secname = tmp;
10696       die->die_id.die_symbol = NULL;
10697       switch_to_section (get_section (secname, SECTION_DEBUG, NULL));
10698     }
10699   else
10700     switch_to_section (debug_info_section);
10701
10702   /* Output debugging information.  */
10703   output_compilation_unit_header ();
10704   output_die (die);
10705
10706   /* Leave the marks on the main CU, so we can check them in
10707      output_pubnames.  */
10708   if (oldsym)
10709     {
10710       unmark_dies (die);
10711       die->die_id.die_symbol = oldsym;
10712     }
10713 }
10714
10715 /* Output a comdat type unit DIE and its children.  */
10716
10717 static void
10718 output_comdat_type_unit (comdat_type_node *node)
10719 {
10720   const char *secname;
10721   char *tmp;
10722   int i;
10723 #if defined (OBJECT_FORMAT_ELF)
10724   tree comdat_key;
10725 #endif
10726
10727   /* First mark all the DIEs in this CU so we know which get local refs.  */
10728   mark_dies (node->root_die);
10729
10730   build_abbrev_table (node->root_die);
10731
10732   /* Initialize the beginning DIE offset - and calculate sizes/offsets.  */
10733   next_die_offset = DWARF_COMDAT_TYPE_UNIT_HEADER_SIZE;
10734   calc_die_sizes (node->root_die);
10735
10736 #if defined (OBJECT_FORMAT_ELF)
10737   secname = ".debug_types";
10738   tmp = XALLOCAVEC (char, 4 + DWARF_TYPE_SIGNATURE_SIZE * 2);
10739   sprintf (tmp, "wt.");
10740   for (i = 0; i < DWARF_TYPE_SIGNATURE_SIZE; i++)
10741     sprintf (tmp + 3 + i * 2, "%02x", node->signature[i] & 0xff);
10742   comdat_key = get_identifier (tmp);
10743   targetm.asm_out.named_section (secname,
10744                                  SECTION_DEBUG | SECTION_LINKONCE,
10745                                  comdat_key);
10746 #else
10747   tmp = XALLOCAVEC (char, 18 + DWARF_TYPE_SIGNATURE_SIZE * 2);
10748   sprintf (tmp, ".gnu.linkonce.wt.");
10749   for (i = 0; i < DWARF_TYPE_SIGNATURE_SIZE; i++)
10750     sprintf (tmp + 17 + i * 2, "%02x", node->signature[i] & 0xff);
10751   secname = tmp;
10752   switch_to_section (get_section (secname, SECTION_DEBUG, NULL));
10753 #endif
10754
10755   /* Output debugging information.  */
10756   output_compilation_unit_header ();
10757   output_signature (node->signature, "Type Signature");
10758   dw2_asm_output_data (DWARF_OFFSET_SIZE, node->type_die->die_offset,
10759                        "Offset to Type DIE");
10760   output_die (node->root_die);
10761
10762   unmark_dies (node->root_die);
10763 }
10764
10765 /* Return the DWARF2/3 pubname associated with a decl.  */
10766
10767 static const char *
10768 dwarf2_name (tree decl, int scope)
10769 {
10770   return lang_hooks.dwarf_name (decl, scope ? 1 : 0);
10771 }
10772
10773 /* Add a new entry to .debug_pubnames if appropriate.  */
10774
10775 static void
10776 add_pubname_string (const char *str, dw_die_ref die)
10777 {
10778   pubname_entry e;
10779
10780   e.die = die;
10781   e.name = xstrdup (str);
10782   VEC_safe_push (pubname_entry, gc, pubname_table, &e);
10783 }
10784
10785 static void
10786 add_pubname (tree decl, dw_die_ref die)
10787 {
10788   if (TREE_PUBLIC (decl))
10789     {
10790       const char *name = dwarf2_name (decl, 1);
10791       if (name)
10792         add_pubname_string (name, die);
10793     }
10794 }
10795
10796 /* Add a new entry to .debug_pubtypes if appropriate.  */
10797
10798 static void
10799 add_pubtype (tree decl, dw_die_ref die)
10800 {
10801   pubname_entry e;
10802
10803   e.name = NULL;
10804   if ((TREE_PUBLIC (decl)
10805        || die->die_parent == comp_unit_die)
10806       && (die->die_tag == DW_TAG_typedef || COMPLETE_TYPE_P (decl)))
10807     {
10808       e.die = die;
10809       if (TYPE_P (decl))
10810         {
10811           if (TYPE_NAME (decl))
10812             {
10813               if (TREE_CODE (TYPE_NAME (decl)) == IDENTIFIER_NODE)
10814                 e.name = IDENTIFIER_POINTER (TYPE_NAME (decl));
10815               else if (TREE_CODE (TYPE_NAME (decl)) == TYPE_DECL
10816                        && DECL_NAME (TYPE_NAME (decl)))
10817                 e.name = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (decl)));
10818               else
10819                e.name = xstrdup ((const char *) get_AT_string (die, DW_AT_name));
10820             }
10821         }
10822       else
10823         {
10824           e.name = dwarf2_name (decl, 1);
10825           if (e.name)
10826             e.name = xstrdup (e.name);
10827         }
10828
10829       /* If we don't have a name for the type, there's no point in adding
10830          it to the table.  */
10831       if (e.name && e.name[0] != '\0')
10832         VEC_safe_push (pubname_entry, gc, pubtype_table, &e);
10833     }
10834 }
10835
10836 /* Output the public names table used to speed up access to externally
10837    visible names; or the public types table used to find type definitions.  */
10838
10839 static void
10840 output_pubnames (VEC (pubname_entry, gc) * names)
10841 {
10842   unsigned i;
10843   unsigned long pubnames_length = size_of_pubnames (names);
10844   pubname_ref pub;
10845
10846   if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
10847     dw2_asm_output_data (4, 0xffffffff,
10848       "Initial length escape value indicating 64-bit DWARF extension");
10849   if (names == pubname_table)
10850     dw2_asm_output_data (DWARF_OFFSET_SIZE, pubnames_length,
10851                          "Length of Public Names Info");
10852   else
10853     dw2_asm_output_data (DWARF_OFFSET_SIZE, pubnames_length,
10854                          "Length of Public Type Names Info");
10855   /* Version number for pubnames/pubtypes is still 2, even in DWARF3.  */
10856   dw2_asm_output_data (2, 2, "DWARF Version");
10857   dw2_asm_output_offset (DWARF_OFFSET_SIZE, debug_info_section_label,
10858                          debug_info_section,
10859                          "Offset of Compilation Unit Info");
10860   dw2_asm_output_data (DWARF_OFFSET_SIZE, next_die_offset,
10861                        "Compilation Unit Length");
10862
10863   for (i = 0; VEC_iterate (pubname_entry, names, i, pub); i++)
10864     {
10865       /* We shouldn't see pubnames for DIEs outside of the main CU.  */
10866       if (names == pubname_table)
10867         gcc_assert (pub->die->die_mark);
10868
10869       if (names != pubtype_table
10870           || pub->die->die_offset != 0
10871           || !flag_eliminate_unused_debug_types)
10872         {
10873           dw2_asm_output_data (DWARF_OFFSET_SIZE, pub->die->die_offset,
10874                                "DIE offset");
10875
10876           dw2_asm_output_nstring (pub->name, -1, "external name");
10877         }
10878     }
10879
10880   dw2_asm_output_data (DWARF_OFFSET_SIZE, 0, NULL);
10881 }
10882
10883 /* Add a new entry to .debug_aranges if appropriate.  */
10884
10885 static void
10886 add_arange (tree decl, dw_die_ref die)
10887 {
10888   if (! DECL_SECTION_NAME (decl))
10889     return;
10890
10891   if (arange_table_in_use == arange_table_allocated)
10892     {
10893       arange_table_allocated += ARANGE_TABLE_INCREMENT;
10894       arange_table = GGC_RESIZEVEC (dw_die_ref, arange_table,
10895                                     arange_table_allocated);
10896       memset (arange_table + arange_table_in_use, 0,
10897               ARANGE_TABLE_INCREMENT * sizeof (dw_die_ref));
10898     }
10899
10900   arange_table[arange_table_in_use++] = die;
10901 }
10902
10903 /* Output the information that goes into the .debug_aranges table.
10904    Namely, define the beginning and ending address range of the
10905    text section generated for this compilation unit.  */
10906
10907 static void
10908 output_aranges (void)
10909 {
10910   unsigned i;
10911   unsigned long aranges_length = size_of_aranges ();
10912
10913   if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
10914     dw2_asm_output_data (4, 0xffffffff,
10915       "Initial length escape value indicating 64-bit DWARF extension");
10916   dw2_asm_output_data (DWARF_OFFSET_SIZE, aranges_length,
10917                        "Length of Address Ranges Info");
10918   /* Version number for aranges is still 2, even in DWARF3.  */
10919   dw2_asm_output_data (2, 2, "DWARF Version");
10920   dw2_asm_output_offset (DWARF_OFFSET_SIZE, debug_info_section_label,
10921                          debug_info_section,
10922                          "Offset of Compilation Unit Info");
10923   dw2_asm_output_data (1, DWARF2_ADDR_SIZE, "Size of Address");
10924   dw2_asm_output_data (1, 0, "Size of Segment Descriptor");
10925
10926   /* We need to align to twice the pointer size here.  */
10927   if (DWARF_ARANGES_PAD_SIZE)
10928     {
10929       /* Pad using a 2 byte words so that padding is correct for any
10930          pointer size.  */
10931       dw2_asm_output_data (2, 0, "Pad to %d byte boundary",
10932                            2 * DWARF2_ADDR_SIZE);
10933       for (i = 2; i < (unsigned) DWARF_ARANGES_PAD_SIZE; i += 2)
10934         dw2_asm_output_data (2, 0, NULL);
10935     }
10936
10937   /* It is necessary not to output these entries if the sections were
10938      not used; if the sections were not used, the length will be 0 and
10939      the address may end up as 0 if the section is discarded by ld
10940      --gc-sections, leaving an invalid (0, 0) entry that can be
10941      confused with the terminator.  */
10942   if (text_section_used)
10943     {
10944       dw2_asm_output_addr (DWARF2_ADDR_SIZE, text_section_label, "Address");
10945       dw2_asm_output_delta (DWARF2_ADDR_SIZE, text_end_label,
10946                             text_section_label, "Length");
10947     }
10948   if (cold_text_section_used)
10949     {
10950       dw2_asm_output_addr (DWARF2_ADDR_SIZE, cold_text_section_label,
10951                            "Address");
10952       dw2_asm_output_delta (DWARF2_ADDR_SIZE, cold_end_label,
10953                             cold_text_section_label, "Length");
10954     }
10955
10956   for (i = 0; i < arange_table_in_use; i++)
10957     {
10958       dw_die_ref die = arange_table[i];
10959
10960       /* We shouldn't see aranges for DIEs outside of the main CU.  */
10961       gcc_assert (die->die_mark);
10962
10963       if (die->die_tag == DW_TAG_subprogram)
10964         {
10965           dw2_asm_output_addr (DWARF2_ADDR_SIZE, get_AT_low_pc (die),
10966                                "Address");
10967           dw2_asm_output_delta (DWARF2_ADDR_SIZE, get_AT_hi_pc (die),
10968                                 get_AT_low_pc (die), "Length");
10969         }
10970       else
10971         {
10972           /* A static variable; extract the symbol from DW_AT_location.
10973              Note that this code isn't currently hit, as we only emit
10974              aranges for functions (jason 9/23/99).  */
10975           dw_attr_ref a = get_AT (die, DW_AT_location);
10976           dw_loc_descr_ref loc;
10977
10978           gcc_assert (a && AT_class (a) == dw_val_class_loc);
10979
10980           loc = AT_loc (a);
10981           gcc_assert (loc->dw_loc_opc == DW_OP_addr);
10982
10983           dw2_asm_output_addr_rtx (DWARF2_ADDR_SIZE,
10984                                    loc->dw_loc_oprnd1.v.val_addr, "Address");
10985           dw2_asm_output_data (DWARF2_ADDR_SIZE,
10986                                get_AT_unsigned (die, DW_AT_byte_size),
10987                                "Length");
10988         }
10989     }
10990
10991   /* Output the terminator words.  */
10992   dw2_asm_output_data (DWARF2_ADDR_SIZE, 0, NULL);
10993   dw2_asm_output_data (DWARF2_ADDR_SIZE, 0, NULL);
10994 }
10995
10996 /* Add a new entry to .debug_ranges.  Return the offset at which it
10997    was placed.  */
10998
10999 static unsigned int
11000 add_ranges_num (int num)
11001 {
11002   unsigned int in_use = ranges_table_in_use;
11003
11004   if (in_use == ranges_table_allocated)
11005     {
11006       ranges_table_allocated += RANGES_TABLE_INCREMENT;
11007       ranges_table = GGC_RESIZEVEC (struct dw_ranges_struct, ranges_table,
11008                                     ranges_table_allocated);
11009       memset (ranges_table + ranges_table_in_use, 0,
11010               RANGES_TABLE_INCREMENT * sizeof (struct dw_ranges_struct));
11011     }
11012
11013   ranges_table[in_use].num = num;
11014   ranges_table_in_use = in_use + 1;
11015
11016   return in_use * 2 * DWARF2_ADDR_SIZE;
11017 }
11018
11019 /* Add a new entry to .debug_ranges corresponding to a block, or a
11020    range terminator if BLOCK is NULL.  */
11021
11022 static unsigned int
11023 add_ranges (const_tree block)
11024 {
11025   return add_ranges_num (block ? BLOCK_NUMBER (block) : 0);
11026 }
11027
11028 /* Add a new entry to .debug_ranges corresponding to a pair of
11029    labels.  */
11030
11031 static unsigned int
11032 add_ranges_by_labels (const char *begin, const char *end)
11033 {
11034   unsigned int in_use = ranges_by_label_in_use;
11035
11036   if (in_use == ranges_by_label_allocated)
11037     {
11038       ranges_by_label_allocated += RANGES_TABLE_INCREMENT;
11039       ranges_by_label = GGC_RESIZEVEC (struct dw_ranges_by_label_struct,
11040                                        ranges_by_label,
11041                                        ranges_by_label_allocated);
11042       memset (ranges_by_label + ranges_by_label_in_use, 0,
11043               RANGES_TABLE_INCREMENT
11044               * sizeof (struct dw_ranges_by_label_struct));
11045     }
11046
11047   ranges_by_label[in_use].begin = begin;
11048   ranges_by_label[in_use].end = end;
11049   ranges_by_label_in_use = in_use + 1;
11050
11051   return add_ranges_num (-(int)in_use - 1);
11052 }
11053
11054 static void
11055 output_ranges (void)
11056 {
11057   unsigned i;
11058   static const char *const start_fmt = "Offset 0x%x";
11059   const char *fmt = start_fmt;
11060
11061   for (i = 0; i < ranges_table_in_use; i++)
11062     {
11063       int block_num = ranges_table[i].num;
11064
11065       if (block_num > 0)
11066         {
11067           char blabel[MAX_ARTIFICIAL_LABEL_BYTES];
11068           char elabel[MAX_ARTIFICIAL_LABEL_BYTES];
11069
11070           ASM_GENERATE_INTERNAL_LABEL (blabel, BLOCK_BEGIN_LABEL, block_num);
11071           ASM_GENERATE_INTERNAL_LABEL (elabel, BLOCK_END_LABEL, block_num);
11072
11073           /* If all code is in the text section, then the compilation
11074              unit base address defaults to DW_AT_low_pc, which is the
11075              base of the text section.  */
11076           if (!have_multiple_function_sections)
11077             {
11078               dw2_asm_output_delta (DWARF2_ADDR_SIZE, blabel,
11079                                     text_section_label,
11080                                     fmt, i * 2 * DWARF2_ADDR_SIZE);
11081               dw2_asm_output_delta (DWARF2_ADDR_SIZE, elabel,
11082                                     text_section_label, NULL);
11083             }
11084
11085           /* Otherwise, the compilation unit base address is zero,
11086              which allows us to use absolute addresses, and not worry
11087              about whether the target supports cross-section
11088              arithmetic.  */
11089           else
11090             {
11091               dw2_asm_output_addr (DWARF2_ADDR_SIZE, blabel,
11092                                    fmt, i * 2 * DWARF2_ADDR_SIZE);
11093               dw2_asm_output_addr (DWARF2_ADDR_SIZE, elabel, NULL);
11094             }
11095
11096           fmt = NULL;
11097         }
11098
11099       /* Negative block_num stands for an index into ranges_by_label.  */
11100       else if (block_num < 0)
11101         {
11102           int lab_idx = - block_num - 1;
11103
11104           if (!have_multiple_function_sections)
11105             {
11106               gcc_unreachable ();
11107 #if 0
11108               /* If we ever use add_ranges_by_labels () for a single
11109                  function section, all we have to do is to take out
11110                  the #if 0 above.  */
11111               dw2_asm_output_delta (DWARF2_ADDR_SIZE,
11112                                     ranges_by_label[lab_idx].begin,
11113                                     text_section_label,
11114                                     fmt, i * 2 * DWARF2_ADDR_SIZE);
11115               dw2_asm_output_delta (DWARF2_ADDR_SIZE,
11116                                     ranges_by_label[lab_idx].end,
11117                                     text_section_label, NULL);
11118 #endif
11119             }
11120           else
11121             {
11122               dw2_asm_output_addr (DWARF2_ADDR_SIZE,
11123                                    ranges_by_label[lab_idx].begin,
11124                                    fmt, i * 2 * DWARF2_ADDR_SIZE);
11125               dw2_asm_output_addr (DWARF2_ADDR_SIZE,
11126                                    ranges_by_label[lab_idx].end,
11127                                    NULL);
11128             }
11129         }
11130       else
11131         {
11132           dw2_asm_output_data (DWARF2_ADDR_SIZE, 0, NULL);
11133           dw2_asm_output_data (DWARF2_ADDR_SIZE, 0, NULL);
11134           fmt = start_fmt;
11135         }
11136     }
11137 }
11138
11139 /* Data structure containing information about input files.  */
11140 struct file_info
11141 {
11142   const char *path;     /* Complete file name.  */
11143   const char *fname;    /* File name part.  */
11144   int length;           /* Length of entire string.  */
11145   struct dwarf_file_data * file_idx;    /* Index in input file table.  */
11146   int dir_idx;          /* Index in directory table.  */
11147 };
11148
11149 /* Data structure containing information about directories with source
11150    files.  */
11151 struct dir_info
11152 {
11153   const char *path;     /* Path including directory name.  */
11154   int length;           /* Path length.  */
11155   int prefix;           /* Index of directory entry which is a prefix.  */
11156   int count;            /* Number of files in this directory.  */
11157   int dir_idx;          /* Index of directory used as base.  */
11158 };
11159
11160 /* Callback function for file_info comparison.  We sort by looking at
11161    the directories in the path.  */
11162
11163 static int
11164 file_info_cmp (const void *p1, const void *p2)
11165 {
11166   const struct file_info *const s1 = (const struct file_info *) p1;
11167   const struct file_info *const s2 = (const struct file_info *) p2;
11168   const unsigned char *cp1;
11169   const unsigned char *cp2;
11170
11171   /* Take care of file names without directories.  We need to make sure that
11172      we return consistent values to qsort since some will get confused if
11173      we return the same value when identical operands are passed in opposite
11174      orders.  So if neither has a directory, return 0 and otherwise return
11175      1 or -1 depending on which one has the directory.  */
11176   if ((s1->path == s1->fname || s2->path == s2->fname))
11177     return (s2->path == s2->fname) - (s1->path == s1->fname);
11178
11179   cp1 = (const unsigned char *) s1->path;
11180   cp2 = (const unsigned char *) s2->path;
11181
11182   while (1)
11183     {
11184       ++cp1;
11185       ++cp2;
11186       /* Reached the end of the first path?  If so, handle like above.  */
11187       if ((cp1 == (const unsigned char *) s1->fname)
11188           || (cp2 == (const unsigned char *) s2->fname))
11189         return ((cp2 == (const unsigned char *) s2->fname)
11190                 - (cp1 == (const unsigned char *) s1->fname));
11191
11192       /* Character of current path component the same?  */
11193       else if (*cp1 != *cp2)
11194         return *cp1 - *cp2;
11195     }
11196 }
11197
11198 struct file_name_acquire_data
11199 {
11200   struct file_info *files;
11201   int used_files;
11202   int max_files;
11203 };
11204
11205 /* Traversal function for the hash table.  */
11206
11207 static int
11208 file_name_acquire (void ** slot, void *data)
11209 {
11210   struct file_name_acquire_data *fnad = (struct file_name_acquire_data *) data;
11211   struct dwarf_file_data *d = (struct dwarf_file_data *) *slot;
11212   struct file_info *fi;
11213   const char *f;
11214
11215   gcc_assert (fnad->max_files >= d->emitted_number);
11216
11217   if (! d->emitted_number)
11218     return 1;
11219
11220   gcc_assert (fnad->max_files != fnad->used_files);
11221
11222   fi = fnad->files + fnad->used_files++;
11223
11224   /* Skip all leading "./".  */
11225   f = d->filename;
11226   while (f[0] == '.' && IS_DIR_SEPARATOR (f[1]))
11227     f += 2;
11228
11229   /* Create a new array entry.  */
11230   fi->path = f;
11231   fi->length = strlen (f);
11232   fi->file_idx = d;
11233
11234   /* Search for the file name part.  */
11235   f = strrchr (f, DIR_SEPARATOR);
11236 #if defined (DIR_SEPARATOR_2)
11237   {
11238     char *g = strrchr (fi->path, DIR_SEPARATOR_2);
11239
11240     if (g != NULL)
11241       {
11242         if (f == NULL || f < g)
11243           f = g;
11244       }
11245   }
11246 #endif
11247
11248   fi->fname = f == NULL ? fi->path : f + 1;
11249   return 1;
11250 }
11251
11252 /* Output the directory table and the file name table.  We try to minimize
11253    the total amount of memory needed.  A heuristic is used to avoid large
11254    slowdowns with many input files.  */
11255
11256 static void
11257 output_file_names (void)
11258 {
11259   struct file_name_acquire_data fnad;
11260   int numfiles;
11261   struct file_info *files;
11262   struct dir_info *dirs;
11263   int *saved;
11264   int *savehere;
11265   int *backmap;
11266   int ndirs;
11267   int idx_offset;
11268   int i;
11269
11270   if (!last_emitted_file)
11271     {
11272       dw2_asm_output_data (1, 0, "End directory table");
11273       dw2_asm_output_data (1, 0, "End file name table");
11274       return;
11275     }
11276
11277   numfiles = last_emitted_file->emitted_number;
11278
11279   /* Allocate the various arrays we need.  */
11280   files = XALLOCAVEC (struct file_info, numfiles);
11281   dirs = XALLOCAVEC (struct dir_info, numfiles);
11282
11283   fnad.files = files;
11284   fnad.used_files = 0;
11285   fnad.max_files = numfiles;
11286   htab_traverse (file_table, file_name_acquire, &fnad);
11287   gcc_assert (fnad.used_files == fnad.max_files);
11288
11289   qsort (files, numfiles, sizeof (files[0]), file_info_cmp);
11290
11291   /* Find all the different directories used.  */
11292   dirs[0].path = files[0].path;
11293   dirs[0].length = files[0].fname - files[0].path;
11294   dirs[0].prefix = -1;
11295   dirs[0].count = 1;
11296   dirs[0].dir_idx = 0;
11297   files[0].dir_idx = 0;
11298   ndirs = 1;
11299
11300   for (i = 1; i < numfiles; i++)
11301     if (files[i].fname - files[i].path == dirs[ndirs - 1].length
11302         && memcmp (dirs[ndirs - 1].path, files[i].path,
11303                    dirs[ndirs - 1].length) == 0)
11304       {
11305         /* Same directory as last entry.  */
11306         files[i].dir_idx = ndirs - 1;
11307         ++dirs[ndirs - 1].count;
11308       }
11309     else
11310       {
11311         int j;
11312
11313         /* This is a new directory.  */
11314         dirs[ndirs].path = files[i].path;
11315         dirs[ndirs].length = files[i].fname - files[i].path;
11316         dirs[ndirs].count = 1;
11317         dirs[ndirs].dir_idx = ndirs;
11318         files[i].dir_idx = ndirs;
11319
11320         /* Search for a prefix.  */
11321         dirs[ndirs].prefix = -1;
11322         for (j = 0; j < ndirs; j++)
11323           if (dirs[j].length < dirs[ndirs].length
11324               && dirs[j].length > 1
11325               && (dirs[ndirs].prefix == -1
11326                   || dirs[j].length > dirs[dirs[ndirs].prefix].length)
11327               && memcmp (dirs[j].path, dirs[ndirs].path, dirs[j].length) == 0)
11328             dirs[ndirs].prefix = j;
11329
11330         ++ndirs;
11331       }
11332
11333   /* Now to the actual work.  We have to find a subset of the directories which
11334      allow expressing the file name using references to the directory table
11335      with the least amount of characters.  We do not do an exhaustive search
11336      where we would have to check out every combination of every single
11337      possible prefix.  Instead we use a heuristic which provides nearly optimal
11338      results in most cases and never is much off.  */
11339   saved = XALLOCAVEC (int, ndirs);
11340   savehere = XALLOCAVEC (int, ndirs);
11341
11342   memset (saved, '\0', ndirs * sizeof (saved[0]));
11343   for (i = 0; i < ndirs; i++)
11344     {
11345       int j;
11346       int total;
11347
11348       /* We can always save some space for the current directory.  But this
11349          does not mean it will be enough to justify adding the directory.  */
11350       savehere[i] = dirs[i].length;
11351       total = (savehere[i] - saved[i]) * dirs[i].count;
11352
11353       for (j = i + 1; j < ndirs; j++)
11354         {
11355           savehere[j] = 0;
11356           if (saved[j] < dirs[i].length)
11357             {
11358               /* Determine whether the dirs[i] path is a prefix of the
11359                  dirs[j] path.  */
11360               int k;
11361
11362               k = dirs[j].prefix;
11363               while (k != -1 && k != (int) i)
11364                 k = dirs[k].prefix;
11365
11366               if (k == (int) i)
11367                 {
11368                   /* Yes it is.  We can possibly save some memory by
11369                      writing the filenames in dirs[j] relative to
11370                      dirs[i].  */
11371                   savehere[j] = dirs[i].length;
11372                   total += (savehere[j] - saved[j]) * dirs[j].count;
11373                 }
11374             }
11375         }
11376
11377       /* Check whether we can save enough to justify adding the dirs[i]
11378          directory.  */
11379       if (total > dirs[i].length + 1)
11380         {
11381           /* It's worthwhile adding.  */
11382           for (j = i; j < ndirs; j++)
11383             if (savehere[j] > 0)
11384               {
11385                 /* Remember how much we saved for this directory so far.  */
11386                 saved[j] = savehere[j];
11387
11388                 /* Remember the prefix directory.  */
11389                 dirs[j].dir_idx = i;
11390               }
11391         }
11392     }
11393
11394   /* Emit the directory name table.  */
11395   idx_offset = dirs[0].length > 0 ? 1 : 0;
11396   for (i = 1 - idx_offset; i < ndirs; i++)
11397     dw2_asm_output_nstring (dirs[i].path,
11398                             dirs[i].length
11399                              - !DWARF2_DIR_SHOULD_END_WITH_SEPARATOR,
11400                             "Directory Entry: 0x%x", i + idx_offset);
11401
11402   dw2_asm_output_data (1, 0, "End directory table");
11403
11404   /* We have to emit them in the order of emitted_number since that's
11405      used in the debug info generation.  To do this efficiently we
11406      generate a back-mapping of the indices first.  */
11407   backmap = XALLOCAVEC (int, numfiles);
11408   for (i = 0; i < numfiles; i++)
11409     backmap[files[i].file_idx->emitted_number - 1] = i;
11410
11411   /* Now write all the file names.  */
11412   for (i = 0; i < numfiles; i++)
11413     {
11414       int file_idx = backmap[i];
11415       int dir_idx = dirs[files[file_idx].dir_idx].dir_idx;
11416
11417 #ifdef VMS_DEBUGGING_INFO
11418 #define MAX_VMS_VERSION_LEN 6 /* ";32768" */
11419
11420       /* Setting these fields can lead to debugger miscomparisons,
11421          but VMS Debug requires them to be set correctly.  */
11422
11423       int ver;
11424       long long cdt;
11425       long siz;
11426       int maxfilelen = strlen (files[file_idx].path)
11427                                + dirs[dir_idx].length
11428                                + MAX_VMS_VERSION_LEN + 1;
11429       char *filebuf = XALLOCAVEC (char, maxfilelen);
11430
11431       vms_file_stats_name (files[file_idx].path, 0, 0, 0, &ver);
11432       snprintf (filebuf, maxfilelen, "%s;%d",
11433                 files[file_idx].path + dirs[dir_idx].length, ver);
11434
11435       dw2_asm_output_nstring
11436         (filebuf, -1, "File Entry: 0x%x", (unsigned) i + 1);
11437
11438       /* Include directory index.  */
11439       dw2_asm_output_data_uleb128 (dir_idx + idx_offset, NULL);
11440
11441       /* Modification time.  */
11442       dw2_asm_output_data_uleb128
11443         ((vms_file_stats_name (files[file_idx].path, &cdt, 0, 0, 0) == 0)
11444           ? cdt : 0,
11445          NULL);
11446
11447       /* File length in bytes.  */
11448       dw2_asm_output_data_uleb128
11449         ((vms_file_stats_name (files[file_idx].path, 0, &siz, 0, 0) == 0)
11450           ? siz : 0,
11451          NULL);
11452 #else
11453       dw2_asm_output_nstring (files[file_idx].path + dirs[dir_idx].length, -1,
11454                               "File Entry: 0x%x", (unsigned) i + 1);
11455
11456       /* Include directory index.  */
11457       dw2_asm_output_data_uleb128 (dir_idx + idx_offset, NULL);
11458
11459       /* Modification time.  */
11460       dw2_asm_output_data_uleb128 (0, NULL);
11461
11462       /* File length in bytes.  */
11463       dw2_asm_output_data_uleb128 (0, NULL);
11464 #endif
11465     }
11466
11467   dw2_asm_output_data (1, 0, "End file name table");
11468 }
11469
11470
11471 /* Output the source line number correspondence information.  This
11472    information goes into the .debug_line section.  */
11473
11474 static void
11475 output_line_info (void)
11476 {
11477   char l1[20], l2[20], p1[20], p2[20];
11478   char line_label[MAX_ARTIFICIAL_LABEL_BYTES];
11479   char prev_line_label[MAX_ARTIFICIAL_LABEL_BYTES];
11480   unsigned opc;
11481   unsigned n_op_args;
11482   unsigned long lt_index;
11483   unsigned long current_line;
11484   long line_offset;
11485   long line_delta;
11486   unsigned long current_file;
11487   unsigned long function;
11488   int ver = dwarf_version;
11489
11490   /* Don't mark the output as DWARF-4 until we make full use of the
11491      version 4 extensions, and gdb supports them.  For now, -gdwarf-4
11492      selects only a few extensions from the DWARF-4 spec.  */
11493   if (ver > 3)
11494     ver = 3;
11495
11496   ASM_GENERATE_INTERNAL_LABEL (l1, LINE_NUMBER_BEGIN_LABEL, 0);
11497   ASM_GENERATE_INTERNAL_LABEL (l2, LINE_NUMBER_END_LABEL, 0);
11498   ASM_GENERATE_INTERNAL_LABEL (p1, LN_PROLOG_AS_LABEL, 0);
11499   ASM_GENERATE_INTERNAL_LABEL (p2, LN_PROLOG_END_LABEL, 0);
11500
11501   if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
11502     dw2_asm_output_data (4, 0xffffffff,
11503       "Initial length escape value indicating 64-bit DWARF extension");
11504   dw2_asm_output_delta (DWARF_OFFSET_SIZE, l2, l1,
11505                         "Length of Source Line Info");
11506   ASM_OUTPUT_LABEL (asm_out_file, l1);
11507
11508   dw2_asm_output_data (2, ver, "DWARF Version");
11509   dw2_asm_output_delta (DWARF_OFFSET_SIZE, p2, p1, "Prolog Length");
11510   ASM_OUTPUT_LABEL (asm_out_file, p1);
11511
11512   /* Define the architecture-dependent minimum instruction length (in
11513    bytes).  In this implementation of DWARF, this field is used for
11514    information purposes only.  Since GCC generates assembly language,
11515    we have no a priori knowledge of how many instruction bytes are
11516    generated for each source line, and therefore can use only the
11517    DW_LNE_set_address and DW_LNS_fixed_advance_pc line information
11518    commands.  Accordingly, we fix this as `1', which is "correct
11519    enough" for all architectures, and don't let the target override.  */
11520   dw2_asm_output_data (1, 1,
11521                        "Minimum Instruction Length");
11522
11523   dw2_asm_output_data (1, DWARF_LINE_DEFAULT_IS_STMT_START,
11524                        "Default is_stmt_start flag");
11525   dw2_asm_output_data (1, DWARF_LINE_BASE,
11526                        "Line Base Value (Special Opcodes)");
11527   dw2_asm_output_data (1, DWARF_LINE_RANGE,
11528                        "Line Range Value (Special Opcodes)");
11529   dw2_asm_output_data (1, DWARF_LINE_OPCODE_BASE,
11530                        "Special Opcode Base");
11531
11532   for (opc = 1; opc < DWARF_LINE_OPCODE_BASE; opc++)
11533     {
11534       switch (opc)
11535         {
11536         case DW_LNS_advance_pc:
11537         case DW_LNS_advance_line:
11538         case DW_LNS_set_file:
11539         case DW_LNS_set_column:
11540         case DW_LNS_fixed_advance_pc:
11541           n_op_args = 1;
11542           break;
11543         default:
11544           n_op_args = 0;
11545           break;
11546         }
11547
11548       dw2_asm_output_data (1, n_op_args, "opcode: 0x%x has %d args",
11549                            opc, n_op_args);
11550     }
11551
11552   /* Write out the information about the files we use.  */
11553   output_file_names ();
11554   ASM_OUTPUT_LABEL (asm_out_file, p2);
11555
11556   /* We used to set the address register to the first location in the text
11557      section here, but that didn't accomplish anything since we already
11558      have a line note for the opening brace of the first function.  */
11559
11560   /* Generate the line number to PC correspondence table, encoded as
11561      a series of state machine operations.  */
11562   current_file = 1;
11563   current_line = 1;
11564
11565   if (cfun && in_cold_section_p)
11566     strcpy (prev_line_label, crtl->subsections.cold_section_label);
11567   else
11568     strcpy (prev_line_label, text_section_label);
11569   for (lt_index = 1; lt_index < line_info_table_in_use; ++lt_index)
11570     {
11571       dw_line_info_ref line_info = &line_info_table[lt_index];
11572
11573 #if 0
11574       /* Disable this optimization for now; GDB wants to see two line notes
11575          at the beginning of a function so it can find the end of the
11576          prologue.  */
11577
11578       /* Don't emit anything for redundant notes.  Just updating the
11579          address doesn't accomplish anything, because we already assume
11580          that anything after the last address is this line.  */
11581       if (line_info->dw_line_num == current_line
11582           && line_info->dw_file_num == current_file)
11583         continue;
11584 #endif
11585
11586       /* Emit debug info for the address of the current line.
11587
11588          Unfortunately, we have little choice here currently, and must always
11589          use the most general form.  GCC does not know the address delta
11590          itself, so we can't use DW_LNS_advance_pc.  Many ports do have length
11591          attributes which will give an upper bound on the address range.  We
11592          could perhaps use length attributes to determine when it is safe to
11593          use DW_LNS_fixed_advance_pc.  */
11594
11595       ASM_GENERATE_INTERNAL_LABEL (line_label, LINE_CODE_LABEL, lt_index);
11596       if (0)
11597         {
11598           /* This can handle deltas up to 0xffff.  This takes 3 bytes.  */
11599           dw2_asm_output_data (1, DW_LNS_fixed_advance_pc,
11600                                "DW_LNS_fixed_advance_pc");
11601           dw2_asm_output_delta (2, line_label, prev_line_label, NULL);
11602         }
11603       else
11604         {
11605           /* This can handle any delta.  This takes
11606              4+DWARF2_ADDR_SIZE bytes.  */
11607           dw2_asm_output_data (1, 0, "DW_LNE_set_address");
11608           dw2_asm_output_data_uleb128 (1 + DWARF2_ADDR_SIZE, NULL);
11609           dw2_asm_output_data (1, DW_LNE_set_address, NULL);
11610           dw2_asm_output_addr (DWARF2_ADDR_SIZE, line_label, NULL);
11611         }
11612
11613       strcpy (prev_line_label, line_label);
11614
11615       /* Emit debug info for the source file of the current line, if
11616          different from the previous line.  */
11617       if (line_info->dw_file_num != current_file)
11618         {
11619           current_file = line_info->dw_file_num;
11620           dw2_asm_output_data (1, DW_LNS_set_file, "DW_LNS_set_file");
11621           dw2_asm_output_data_uleb128 (current_file, "%lu", current_file);
11622         }
11623
11624       /* Emit debug info for the current line number, choosing the encoding
11625          that uses the least amount of space.  */
11626       if (line_info->dw_line_num != current_line)
11627         {
11628           line_offset = line_info->dw_line_num - current_line;
11629           line_delta = line_offset - DWARF_LINE_BASE;
11630           current_line = line_info->dw_line_num;
11631           if (line_delta >= 0 && line_delta < (DWARF_LINE_RANGE - 1))
11632             /* This can handle deltas from -10 to 234, using the current
11633                definitions of DWARF_LINE_BASE and DWARF_LINE_RANGE.  This
11634                takes 1 byte.  */
11635             dw2_asm_output_data (1, DWARF_LINE_OPCODE_BASE + line_delta,
11636                                  "line %lu", current_line);
11637           else
11638             {
11639               /* This can handle any delta.  This takes at least 4 bytes,
11640                  depending on the value being encoded.  */
11641               dw2_asm_output_data (1, DW_LNS_advance_line,
11642                                    "advance to line %lu", current_line);
11643               dw2_asm_output_data_sleb128 (line_offset, NULL);
11644               dw2_asm_output_data (1, DW_LNS_copy, "DW_LNS_copy");
11645             }
11646         }
11647       else
11648         /* We still need to start a new row, so output a copy insn.  */
11649         dw2_asm_output_data (1, DW_LNS_copy, "DW_LNS_copy");
11650     }
11651
11652   /* Emit debug info for the address of the end of the function.  */
11653   if (0)
11654     {
11655       dw2_asm_output_data (1, DW_LNS_fixed_advance_pc,
11656                            "DW_LNS_fixed_advance_pc");
11657       dw2_asm_output_delta (2, text_end_label, prev_line_label, NULL);
11658     }
11659   else
11660     {
11661       dw2_asm_output_data (1, 0, "DW_LNE_set_address");
11662       dw2_asm_output_data_uleb128 (1 + DWARF2_ADDR_SIZE, NULL);
11663       dw2_asm_output_data (1, DW_LNE_set_address, NULL);
11664       dw2_asm_output_addr (DWARF2_ADDR_SIZE, text_end_label, NULL);
11665     }
11666
11667   dw2_asm_output_data (1, 0, "DW_LNE_end_sequence");
11668   dw2_asm_output_data_uleb128 (1, NULL);
11669   dw2_asm_output_data (1, DW_LNE_end_sequence, NULL);
11670
11671   function = 0;
11672   current_file = 1;
11673   current_line = 1;
11674   for (lt_index = 0; lt_index < separate_line_info_table_in_use;)
11675     {
11676       dw_separate_line_info_ref line_info
11677         = &separate_line_info_table[lt_index];
11678
11679 #if 0
11680       /* Don't emit anything for redundant notes.  */
11681       if (line_info->dw_line_num == current_line
11682           && line_info->dw_file_num == current_file
11683           && line_info->function == function)
11684         goto cont;
11685 #endif
11686
11687       /* Emit debug info for the address of the current line.  If this is
11688          a new function, or the first line of a function, then we need
11689          to handle it differently.  */
11690       ASM_GENERATE_INTERNAL_LABEL (line_label, SEPARATE_LINE_CODE_LABEL,
11691                                    lt_index);
11692       if (function != line_info->function)
11693         {
11694           function = line_info->function;
11695
11696           /* Set the address register to the first line in the function.  */
11697           dw2_asm_output_data (1, 0, "DW_LNE_set_address");
11698           dw2_asm_output_data_uleb128 (1 + DWARF2_ADDR_SIZE, NULL);
11699           dw2_asm_output_data (1, DW_LNE_set_address, NULL);
11700           dw2_asm_output_addr (DWARF2_ADDR_SIZE, line_label, NULL);
11701         }
11702       else
11703         {
11704           /* ??? See the DW_LNS_advance_pc comment above.  */
11705           if (0)
11706             {
11707               dw2_asm_output_data (1, DW_LNS_fixed_advance_pc,
11708                                    "DW_LNS_fixed_advance_pc");
11709               dw2_asm_output_delta (2, line_label, prev_line_label, NULL);
11710             }
11711           else
11712             {
11713               dw2_asm_output_data (1, 0, "DW_LNE_set_address");
11714               dw2_asm_output_data_uleb128 (1 + DWARF2_ADDR_SIZE, NULL);
11715               dw2_asm_output_data (1, DW_LNE_set_address, NULL);
11716               dw2_asm_output_addr (DWARF2_ADDR_SIZE, line_label, NULL);
11717             }
11718         }
11719
11720       strcpy (prev_line_label, line_label);
11721
11722       /* Emit debug info for the source file of the current line, if
11723          different from the previous line.  */
11724       if (line_info->dw_file_num != current_file)
11725         {
11726           current_file = line_info->dw_file_num;
11727           dw2_asm_output_data (1, DW_LNS_set_file, "DW_LNS_set_file");
11728           dw2_asm_output_data_uleb128 (current_file, "%lu", current_file);
11729         }
11730
11731       /* Emit debug info for the current line number, choosing the encoding
11732          that uses the least amount of space.  */
11733       if (line_info->dw_line_num != current_line)
11734         {
11735           line_offset = line_info->dw_line_num - current_line;
11736           line_delta = line_offset - DWARF_LINE_BASE;
11737           current_line = line_info->dw_line_num;
11738           if (line_delta >= 0 && line_delta < (DWARF_LINE_RANGE - 1))
11739             dw2_asm_output_data (1, DWARF_LINE_OPCODE_BASE + line_delta,
11740                                  "line %lu", current_line);
11741           else
11742             {
11743               dw2_asm_output_data (1, DW_LNS_advance_line,
11744                                    "advance to line %lu", current_line);
11745               dw2_asm_output_data_sleb128 (line_offset, NULL);
11746               dw2_asm_output_data (1, DW_LNS_copy, "DW_LNS_copy");
11747             }
11748         }
11749       else
11750         dw2_asm_output_data (1, DW_LNS_copy, "DW_LNS_copy");
11751
11752 #if 0
11753     cont:
11754 #endif
11755
11756       lt_index++;
11757
11758       /* If we're done with a function, end its sequence.  */
11759       if (lt_index == separate_line_info_table_in_use
11760           || separate_line_info_table[lt_index].function != function)
11761         {
11762           current_file = 1;
11763           current_line = 1;
11764
11765           /* Emit debug info for the address of the end of the function.  */
11766           ASM_GENERATE_INTERNAL_LABEL (line_label, FUNC_END_LABEL, function);
11767           if (0)
11768             {
11769               dw2_asm_output_data (1, DW_LNS_fixed_advance_pc,
11770                                    "DW_LNS_fixed_advance_pc");
11771               dw2_asm_output_delta (2, line_label, prev_line_label, NULL);
11772             }
11773           else
11774             {
11775               dw2_asm_output_data (1, 0, "DW_LNE_set_address");
11776               dw2_asm_output_data_uleb128 (1 + DWARF2_ADDR_SIZE, NULL);
11777               dw2_asm_output_data (1, DW_LNE_set_address, NULL);
11778               dw2_asm_output_addr (DWARF2_ADDR_SIZE, line_label, NULL);
11779             }
11780
11781           /* Output the marker for the end of this sequence.  */
11782           dw2_asm_output_data (1, 0, "DW_LNE_end_sequence");
11783           dw2_asm_output_data_uleb128 (1, NULL);
11784           dw2_asm_output_data (1, DW_LNE_end_sequence, NULL);
11785         }
11786     }
11787
11788   /* Output the marker for the end of the line number info.  */
11789   ASM_OUTPUT_LABEL (asm_out_file, l2);
11790 }
11791
11792 /* Return the size of the .debug_dcall table for the compilation unit.  */
11793
11794 static unsigned long
11795 size_of_dcall_table (void)
11796 {
11797   unsigned long size;
11798   unsigned int i;
11799   dcall_entry *p;
11800   tree last_poc_decl = NULL;
11801
11802   /* Header:  version + debug info section pointer + pointer size.  */
11803   size = 2 + DWARF_OFFSET_SIZE + 1;
11804
11805   /* Each entry:  code label + DIE offset.  */
11806   for (i = 0; VEC_iterate (dcall_entry, dcall_table, i, p); i++)
11807     {
11808       gcc_assert (p->targ_die != NULL);
11809       /* Insert a "from" entry when the point-of-call DIE offset changes.  */
11810       if (p->poc_decl != last_poc_decl)
11811         {
11812           dw_die_ref poc_die = lookup_decl_die (p->poc_decl);
11813           gcc_assert (poc_die);
11814           last_poc_decl = p->poc_decl;
11815           if (poc_die)
11816             size += (DWARF_OFFSET_SIZE
11817                      + size_of_uleb128 (poc_die->die_offset));
11818         }
11819       size += DWARF_OFFSET_SIZE + size_of_uleb128 (p->targ_die->die_offset);
11820     }
11821
11822   return size;
11823 }
11824
11825 /* Output the direct call table used to disambiguate PC values when
11826    identical function have been merged.  */
11827
11828 static void
11829 output_dcall_table (void)
11830 {
11831   unsigned i;
11832   unsigned long dcall_length = size_of_dcall_table ();
11833   dcall_entry *p;
11834   char poc_label[MAX_ARTIFICIAL_LABEL_BYTES];
11835   tree last_poc_decl = NULL;
11836
11837   if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
11838     dw2_asm_output_data (4, 0xffffffff,
11839       "Initial length escape value indicating 64-bit DWARF extension");
11840   dw2_asm_output_data (DWARF_OFFSET_SIZE, dcall_length,
11841                        "Length of Direct Call Table");
11842   dw2_asm_output_data (2, 4, "Version number");
11843   dw2_asm_output_offset (DWARF_OFFSET_SIZE, debug_info_section_label,
11844                          debug_info_section,
11845                          "Offset of Compilation Unit Info");
11846   dw2_asm_output_data (1, DWARF2_ADDR_SIZE, "Pointer Size (in bytes)");
11847
11848   for (i = 0; VEC_iterate (dcall_entry, dcall_table, i, p); i++)
11849     {
11850       /* Insert a "from" entry when the point-of-call DIE offset changes.  */
11851       if (p->poc_decl != last_poc_decl)
11852         {
11853           dw_die_ref poc_die = lookup_decl_die (p->poc_decl);
11854           last_poc_decl = p->poc_decl;
11855           if (poc_die)
11856             {
11857               dw2_asm_output_data (DWARF_OFFSET_SIZE, 0, "New caller");
11858               dw2_asm_output_data_uleb128 (poc_die->die_offset,
11859                                            "Caller DIE offset");
11860             }
11861         }
11862       ASM_GENERATE_INTERNAL_LABEL (poc_label, "LPOC", p->poc_label_num);
11863       dw2_asm_output_addr (DWARF_OFFSET_SIZE, poc_label, "Point of call");
11864       dw2_asm_output_data_uleb128 (p->targ_die->die_offset,
11865                                    "Callee DIE offset");
11866     }
11867 }
11868 \f
11869 /* Return the size of the .debug_vcall table for the compilation unit.  */
11870
11871 static unsigned long
11872 size_of_vcall_table (void)
11873 {
11874   unsigned long size;
11875   unsigned int i;
11876   vcall_entry *p;
11877
11878   /* Header:  version + pointer size.  */
11879   size = 2 + 1;
11880
11881   /* Each entry:  code label + vtable slot index.  */
11882   for (i = 0; VEC_iterate (vcall_entry, vcall_table, i, p); i++)
11883     size += DWARF_OFFSET_SIZE + size_of_uleb128 (p->vtable_slot);
11884
11885   return size;
11886 }
11887
11888 /* Output the virtual call table used to disambiguate PC values when
11889    identical function have been merged.  */
11890
11891 static void
11892 output_vcall_table (void)
11893 {
11894   unsigned i;
11895   unsigned long vcall_length = size_of_vcall_table ();
11896   vcall_entry *p;
11897   char poc_label[MAX_ARTIFICIAL_LABEL_BYTES];
11898
11899   if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
11900     dw2_asm_output_data (4, 0xffffffff,
11901       "Initial length escape value indicating 64-bit DWARF extension");
11902   dw2_asm_output_data (DWARF_OFFSET_SIZE, vcall_length,
11903                        "Length of Virtual Call Table");
11904   dw2_asm_output_data (2, 4, "Version number");
11905   dw2_asm_output_data (1, DWARF2_ADDR_SIZE, "Pointer Size (in bytes)");
11906
11907   for (i = 0; VEC_iterate (vcall_entry, vcall_table, i, p); i++)
11908     {
11909       ASM_GENERATE_INTERNAL_LABEL (poc_label, "LPOC", p->poc_label_num);
11910       dw2_asm_output_addr (DWARF_OFFSET_SIZE, poc_label, "Point of call");
11911       dw2_asm_output_data_uleb128 (p->vtable_slot, "Vtable slot");
11912     }
11913 }
11914 \f
11915 /* Given a pointer to a tree node for some base type, return a pointer to
11916    a DIE that describes the given type.
11917
11918    This routine must only be called for GCC type nodes that correspond to
11919    Dwarf base (fundamental) types.  */
11920
11921 static dw_die_ref
11922 base_type_die (tree type)
11923 {
11924   dw_die_ref base_type_result;
11925   enum dwarf_type encoding;
11926
11927   if (TREE_CODE (type) == ERROR_MARK || TREE_CODE (type) == VOID_TYPE)
11928     return 0;
11929
11930   /* If this is a subtype that should not be emitted as a subrange type,
11931      use the base type.  See subrange_type_for_debug_p.  */
11932   if (TREE_CODE (type) == INTEGER_TYPE && TREE_TYPE (type) != NULL_TREE)
11933     type = TREE_TYPE (type);
11934
11935   switch (TREE_CODE (type))
11936     {
11937     case INTEGER_TYPE:
11938       if (TYPE_STRING_FLAG (type))
11939         {
11940           if (TYPE_UNSIGNED (type))
11941             encoding = DW_ATE_unsigned_char;
11942           else
11943             encoding = DW_ATE_signed_char;
11944         }
11945       else if (TYPE_UNSIGNED (type))
11946         encoding = DW_ATE_unsigned;
11947       else
11948         encoding = DW_ATE_signed;
11949       break;
11950
11951     case REAL_TYPE:
11952       if (DECIMAL_FLOAT_MODE_P (TYPE_MODE (type)))
11953         {
11954           if (dwarf_version >= 3 || !dwarf_strict)
11955             encoding = DW_ATE_decimal_float;
11956           else
11957             encoding = DW_ATE_lo_user;
11958         }
11959       else
11960         encoding = DW_ATE_float;
11961       break;
11962
11963     case FIXED_POINT_TYPE:
11964       if (!(dwarf_version >= 3 || !dwarf_strict))
11965         encoding = DW_ATE_lo_user;
11966       else if (TYPE_UNSIGNED (type))
11967         encoding = DW_ATE_unsigned_fixed;
11968       else
11969         encoding = DW_ATE_signed_fixed;
11970       break;
11971
11972       /* Dwarf2 doesn't know anything about complex ints, so use
11973          a user defined type for it.  */
11974     case COMPLEX_TYPE:
11975       if (TREE_CODE (TREE_TYPE (type)) == REAL_TYPE)
11976         encoding = DW_ATE_complex_float;
11977       else
11978         encoding = DW_ATE_lo_user;
11979       break;
11980
11981     case BOOLEAN_TYPE:
11982       /* GNU FORTRAN/Ada/C++ BOOLEAN type.  */
11983       encoding = DW_ATE_boolean;
11984       break;
11985
11986     default:
11987       /* No other TREE_CODEs are Dwarf fundamental types.  */
11988       gcc_unreachable ();
11989     }
11990
11991   base_type_result = new_die (DW_TAG_base_type, comp_unit_die, type);
11992
11993   /* This probably indicates a bug.  */
11994   if (! TYPE_NAME (type))
11995     add_name_attribute (base_type_result, "__unknown__");
11996
11997   add_AT_unsigned (base_type_result, DW_AT_byte_size,
11998                    int_size_in_bytes (type));
11999   add_AT_unsigned (base_type_result, DW_AT_encoding, encoding);
12000
12001   return base_type_result;
12002 }
12003
12004 /* Given a pointer to an arbitrary ..._TYPE tree node, return nonzero if the
12005    given input type is a Dwarf "fundamental" type.  Otherwise return null.  */
12006
12007 static inline int
12008 is_base_type (tree type)
12009 {
12010   switch (TREE_CODE (type))
12011     {
12012     case ERROR_MARK:
12013     case VOID_TYPE:
12014     case INTEGER_TYPE:
12015     case REAL_TYPE:
12016     case FIXED_POINT_TYPE:
12017     case COMPLEX_TYPE:
12018     case BOOLEAN_TYPE:
12019       return 1;
12020
12021     case ARRAY_TYPE:
12022     case RECORD_TYPE:
12023     case UNION_TYPE:
12024     case QUAL_UNION_TYPE:
12025     case ENUMERAL_TYPE:
12026     case FUNCTION_TYPE:
12027     case METHOD_TYPE:
12028     case POINTER_TYPE:
12029     case REFERENCE_TYPE:
12030     case OFFSET_TYPE:
12031     case LANG_TYPE:
12032     case VECTOR_TYPE:
12033       return 0;
12034
12035     default:
12036       gcc_unreachable ();
12037     }
12038
12039   return 0;
12040 }
12041
12042 /* Given a pointer to a tree node, assumed to be some kind of a ..._TYPE
12043    node, return the size in bits for the type if it is a constant, or else
12044    return the alignment for the type if the type's size is not constant, or
12045    else return BITS_PER_WORD if the type actually turns out to be an
12046    ERROR_MARK node.  */
12047
12048 static inline unsigned HOST_WIDE_INT
12049 simple_type_size_in_bits (const_tree type)
12050 {
12051   if (TREE_CODE (type) == ERROR_MARK)
12052     return BITS_PER_WORD;
12053   else if (TYPE_SIZE (type) == NULL_TREE)
12054     return 0;
12055   else if (host_integerp (TYPE_SIZE (type), 1))
12056     return tree_low_cst (TYPE_SIZE (type), 1);
12057   else
12058     return TYPE_ALIGN (type);
12059 }
12060
12061 /*  Given a pointer to a tree node for a subrange type, return a pointer
12062     to a DIE that describes the given type.  */
12063
12064 static dw_die_ref
12065 subrange_type_die (tree type, tree low, tree high, dw_die_ref context_die)
12066 {
12067   dw_die_ref subrange_die;
12068   const HOST_WIDE_INT size_in_bytes = int_size_in_bytes (type);
12069
12070   if (context_die == NULL)
12071     context_die = comp_unit_die;
12072
12073   subrange_die = new_die (DW_TAG_subrange_type, context_die, type);
12074
12075   if (int_size_in_bytes (TREE_TYPE (type)) != size_in_bytes)
12076     {
12077       /* The size of the subrange type and its base type do not match,
12078          so we need to generate a size attribute for the subrange type.  */
12079       add_AT_unsigned (subrange_die, DW_AT_byte_size, size_in_bytes);
12080     }
12081
12082   if (low)
12083     add_bound_info (subrange_die, DW_AT_lower_bound, low);
12084   if (high)
12085     add_bound_info (subrange_die, DW_AT_upper_bound, high);
12086
12087   return subrange_die;
12088 }
12089
12090 /* Given a pointer to an arbitrary ..._TYPE tree node, return a debugging
12091    entry that chains various modifiers in front of the given type.  */
12092
12093 static dw_die_ref
12094 modified_type_die (tree type, int is_const_type, int is_volatile_type,
12095                    dw_die_ref context_die)
12096 {
12097   enum tree_code code = TREE_CODE (type);
12098   dw_die_ref mod_type_die;
12099   dw_die_ref sub_die = NULL;
12100   tree item_type = NULL;
12101   tree qualified_type;
12102   tree name, low, high;
12103
12104   if (code == ERROR_MARK)
12105     return NULL;
12106
12107   /* See if we already have the appropriately qualified variant of
12108      this type.  */
12109   qualified_type
12110     = get_qualified_type (type,
12111                           ((is_const_type ? TYPE_QUAL_CONST : 0)
12112                            | (is_volatile_type ? TYPE_QUAL_VOLATILE : 0)));
12113
12114   /* If we do, then we can just use its DIE, if it exists.  */
12115   if (qualified_type)
12116     {
12117       mod_type_die = lookup_type_die (qualified_type);
12118       if (mod_type_die)
12119         return mod_type_die;
12120     }
12121
12122   name = qualified_type ? TYPE_NAME (qualified_type) : NULL;
12123
12124   /* Handle C typedef types.  */
12125   if (name && TREE_CODE (name) == TYPE_DECL && DECL_ORIGINAL_TYPE (name))
12126     {
12127       tree dtype = TREE_TYPE (name);
12128
12129       if (qualified_type == dtype)
12130         {
12131           /* For a named type, use the typedef.  */
12132           gen_type_die (qualified_type, context_die);
12133           return lookup_type_die (qualified_type);
12134         }
12135       else if (is_const_type < TYPE_READONLY (dtype)
12136                || is_volatile_type < TYPE_VOLATILE (dtype)
12137                || (is_const_type <= TYPE_READONLY (dtype)
12138                    && is_volatile_type <= TYPE_VOLATILE (dtype)
12139                    && DECL_ORIGINAL_TYPE (name) != type))
12140         /* cv-unqualified version of named type.  Just use the unnamed
12141            type to which it refers.  */
12142         return modified_type_die (DECL_ORIGINAL_TYPE (name),
12143                                   is_const_type, is_volatile_type,
12144                                   context_die);
12145       /* Else cv-qualified version of named type; fall through.  */
12146     }
12147
12148   if (is_const_type)
12149     {
12150       mod_type_die = new_die (DW_TAG_const_type, comp_unit_die, type);
12151       sub_die = modified_type_die (type, 0, is_volatile_type, context_die);
12152     }
12153   else if (is_volatile_type)
12154     {
12155       mod_type_die = new_die (DW_TAG_volatile_type, comp_unit_die, type);
12156       sub_die = modified_type_die (type, 0, 0, context_die);
12157     }
12158   else if (code == POINTER_TYPE)
12159     {
12160       mod_type_die = new_die (DW_TAG_pointer_type, comp_unit_die, type);
12161       add_AT_unsigned (mod_type_die, DW_AT_byte_size,
12162                        simple_type_size_in_bits (type) / BITS_PER_UNIT);
12163       item_type = TREE_TYPE (type);
12164       if (!ADDR_SPACE_GENERIC_P (TYPE_ADDR_SPACE (item_type)))
12165         add_AT_unsigned (mod_type_die, DW_AT_address_class,
12166                          TYPE_ADDR_SPACE (item_type));
12167     }
12168   else if (code == REFERENCE_TYPE)
12169     {
12170       mod_type_die = new_die (DW_TAG_reference_type, comp_unit_die, type);
12171       add_AT_unsigned (mod_type_die, DW_AT_byte_size,
12172                        simple_type_size_in_bits (type) / BITS_PER_UNIT);
12173       item_type = TREE_TYPE (type);
12174       if (!ADDR_SPACE_GENERIC_P (TYPE_ADDR_SPACE (item_type)))
12175         add_AT_unsigned (mod_type_die, DW_AT_address_class,
12176                          TYPE_ADDR_SPACE (item_type));
12177     }
12178   else if (code == INTEGER_TYPE
12179            && TREE_TYPE (type) != NULL_TREE
12180            && subrange_type_for_debug_p (type, &low, &high))
12181     {
12182       mod_type_die = subrange_type_die (type, low, high, context_die);
12183       item_type = TREE_TYPE (type);
12184     }
12185   else if (is_base_type (type))
12186     mod_type_die = base_type_die (type);
12187   else
12188     {
12189       gen_type_die (type, context_die);
12190
12191       /* We have to get the type_main_variant here (and pass that to the
12192          `lookup_type_die' routine) because the ..._TYPE node we have
12193          might simply be a *copy* of some original type node (where the
12194          copy was created to help us keep track of typedef names) and
12195          that copy might have a different TYPE_UID from the original
12196          ..._TYPE node.  */
12197       if (TREE_CODE (type) != VECTOR_TYPE)
12198         return lookup_type_die (type_main_variant (type));
12199       else
12200         /* Vectors have the debugging information in the type,
12201            not the main variant.  */
12202         return lookup_type_die (type);
12203     }
12204
12205   /* Builtin types don't have a DECL_ORIGINAL_TYPE.  For those,
12206      don't output a DW_TAG_typedef, since there isn't one in the
12207      user's program; just attach a DW_AT_name to the type.
12208      Don't attach a DW_AT_name to DW_TAG_const_type or DW_TAG_volatile_type
12209      if the base type already has the same name.  */
12210   if (name
12211       && ((TREE_CODE (name) != TYPE_DECL
12212            && (qualified_type == TYPE_MAIN_VARIANT (type)
12213                || (!is_const_type && !is_volatile_type)))
12214           || (TREE_CODE (name) == TYPE_DECL
12215               && TREE_TYPE (name) == qualified_type
12216               && DECL_NAME (name))))
12217     {
12218       if (TREE_CODE (name) == TYPE_DECL)
12219         /* Could just call add_name_and_src_coords_attributes here,
12220            but since this is a builtin type it doesn't have any
12221            useful source coordinates anyway.  */
12222         name = DECL_NAME (name);
12223       add_name_attribute (mod_type_die, IDENTIFIER_POINTER (name));
12224     }
12225
12226   if (qualified_type)
12227     equate_type_number_to_die (qualified_type, mod_type_die);
12228
12229   if (item_type)
12230     /* We must do this after the equate_type_number_to_die call, in case
12231        this is a recursive type.  This ensures that the modified_type_die
12232        recursion will terminate even if the type is recursive.  Recursive
12233        types are possible in Ada.  */
12234     sub_die = modified_type_die (item_type,
12235                                  TYPE_READONLY (item_type),
12236                                  TYPE_VOLATILE (item_type),
12237                                  context_die);
12238
12239   if (sub_die != NULL)
12240     add_AT_die_ref (mod_type_die, DW_AT_type, sub_die);
12241
12242   return mod_type_die;
12243 }
12244
12245 /* Generate DIEs for the generic parameters of T.
12246    T must be either a generic type or a generic function.
12247    See http://gcc.gnu.org/wiki/TemplateParmsDwarf for more.  */
12248
12249 static void
12250 gen_generic_params_dies (tree t)
12251 {
12252   tree parms, args;
12253   int parms_num, i;
12254   dw_die_ref die = NULL;
12255
12256   if (!t || (TYPE_P (t) && !COMPLETE_TYPE_P (t)))
12257     return;
12258
12259   if (TYPE_P (t))
12260     die = lookup_type_die (t);
12261   else if (DECL_P (t))
12262     die = lookup_decl_die (t);
12263
12264   gcc_assert (die);
12265
12266   parms = lang_hooks.get_innermost_generic_parms (t);
12267   if (!parms)
12268     /* T has no generic parameter. It means T is neither a generic type
12269        or function. End of story.  */
12270     return;
12271
12272   parms_num = TREE_VEC_LENGTH (parms);
12273   args = lang_hooks.get_innermost_generic_args (t);
12274   for (i = 0; i < parms_num; i++)
12275     {
12276       tree parm, arg, arg_pack_elems;
12277
12278       parm = TREE_VEC_ELT (parms, i);
12279       arg = TREE_VEC_ELT (args, i);
12280       arg_pack_elems = lang_hooks.types.get_argument_pack_elems (arg);
12281       gcc_assert (parm && TREE_VALUE (parm) && arg);
12282
12283       if (parm && TREE_VALUE (parm) && arg)
12284         {
12285           /* If PARM represents a template parameter pack,
12286              emit a DW_TAG_GNU_template_parameter_pack DIE, followed
12287              by DW_TAG_template_*_parameter DIEs for the argument
12288              pack elements of ARG. Note that ARG would then be
12289              an argument pack.  */
12290           if (arg_pack_elems)
12291             template_parameter_pack_die (TREE_VALUE (parm),
12292                                          arg_pack_elems,
12293                                          die);
12294           else
12295             generic_parameter_die (TREE_VALUE (parm), arg,
12296                                    true /* Emit DW_AT_name */, die);
12297         }
12298     }
12299 }
12300
12301 /* Create and return a DIE for PARM which should be
12302    the representation of a generic type parameter.
12303    For instance, in the C++ front end, PARM would be a template parameter.
12304    ARG is the argument to PARM.
12305    EMIT_NAME_P if tree, the DIE will have DW_AT_name attribute set to the
12306    name of the PARM.
12307    PARENT_DIE is the parent DIE which the new created DIE should be added to,
12308    as a child node.  */
12309
12310 static dw_die_ref
12311 generic_parameter_die (tree parm, tree arg,
12312                        bool emit_name_p,
12313                        dw_die_ref parent_die)
12314 {
12315   dw_die_ref tmpl_die = NULL;
12316   const char *name = NULL;
12317
12318   if (!parm || !DECL_NAME (parm) || !arg)
12319     return NULL;
12320
12321   /* We support non-type generic parameters and arguments,
12322      type generic parameters and arguments, as well as
12323      generic generic parameters (a.k.a. template template parameters in C++)
12324      and arguments.  */
12325   if (TREE_CODE (parm) == PARM_DECL)
12326     /* PARM is a nontype generic parameter  */
12327     tmpl_die = new_die (DW_TAG_template_value_param, parent_die, parm);
12328   else if (TREE_CODE (parm) == TYPE_DECL)
12329     /* PARM is a type generic parameter.  */
12330     tmpl_die = new_die (DW_TAG_template_type_param, parent_die, parm);
12331   else if (lang_hooks.decls.generic_generic_parameter_decl_p (parm))
12332     /* PARM is a generic generic parameter.
12333        Its DIE is a GNU extension. It shall have a
12334        DW_AT_name attribute to represent the name of the template template
12335        parameter, and a DW_AT_GNU_template_name attribute to represent the
12336        name of the template template argument.  */
12337     tmpl_die = new_die (DW_TAG_GNU_template_template_param,
12338                         parent_die, parm);
12339   else
12340     gcc_unreachable ();
12341
12342   if (tmpl_die)
12343     {
12344       tree tmpl_type;
12345
12346       /* If PARM is a generic parameter pack, it means we are
12347          emitting debug info for a template argument pack element.
12348          In other terms, ARG is a template argument pack element.
12349          In that case, we don't emit any DW_AT_name attribute for
12350          the die.  */
12351       if (emit_name_p)
12352         {
12353           name = IDENTIFIER_POINTER (DECL_NAME (parm));
12354           gcc_assert (name);
12355           add_AT_string (tmpl_die, DW_AT_name, name);
12356         }
12357
12358       if (!lang_hooks.decls.generic_generic_parameter_decl_p (parm))
12359         {
12360           /* DWARF3, 5.6.8 says if PARM is a non-type generic parameter
12361              TMPL_DIE should have a child DW_AT_type attribute that is set
12362              to the type of the argument to PARM, which is ARG.
12363              If PARM is a type generic parameter, TMPL_DIE should have a
12364              child DW_AT_type that is set to ARG.  */
12365           tmpl_type = TYPE_P (arg) ? arg : TREE_TYPE (arg);
12366           add_type_attribute (tmpl_die, tmpl_type, 0,
12367                               TREE_THIS_VOLATILE (tmpl_type),
12368                               parent_die);
12369         }
12370       else
12371         {
12372           /* So TMPL_DIE is a DIE representing a
12373              a generic generic template parameter, a.k.a template template
12374              parameter in C++ and arg is a template.  */
12375
12376           /* The DW_AT_GNU_template_name attribute of the DIE must be set
12377              to the name of the argument.  */
12378           name = dwarf2_name (TYPE_P (arg) ? TYPE_NAME (arg) : arg, 1);
12379           if (name)
12380             add_AT_string (tmpl_die, DW_AT_GNU_template_name, name);
12381         }
12382
12383       if (TREE_CODE (parm) == PARM_DECL)
12384         /* So PARM is a non-type generic parameter.
12385            DWARF3 5.6.8 says we must set a DW_AT_const_value child
12386            attribute of TMPL_DIE which value represents the value
12387            of ARG.
12388            We must be careful here:
12389            The value of ARG might reference some function decls.
12390            We might currently be emitting debug info for a generic
12391            type and types are emitted before function decls, we don't
12392            know if the function decls referenced by ARG will actually be
12393            emitted after cgraph computations.
12394            So must defer the generation of the DW_AT_const_value to
12395            after cgraph is ready.  */
12396         append_entry_to_tmpl_value_parm_die_table (tmpl_die, arg);
12397     }
12398
12399   return tmpl_die;
12400 }
12401
12402 /* Generate and return a  DW_TAG_GNU_template_parameter_pack DIE representing.
12403    PARM_PACK must be a template parameter pack. The returned DIE
12404    will be child DIE of PARENT_DIE.  */
12405
12406 static dw_die_ref
12407 template_parameter_pack_die (tree parm_pack,
12408                              tree parm_pack_args,
12409                              dw_die_ref parent_die)
12410 {
12411   dw_die_ref die;
12412   int j;
12413
12414   gcc_assert (parent_die && parm_pack);
12415
12416   die = new_die (DW_TAG_GNU_template_parameter_pack, parent_die, parm_pack);
12417   add_name_and_src_coords_attributes (die, parm_pack);
12418   for (j = 0; j < TREE_VEC_LENGTH (parm_pack_args); j++)
12419     generic_parameter_die (parm_pack,
12420                            TREE_VEC_ELT (parm_pack_args, j),
12421                            false /* Don't emit DW_AT_name */,
12422                            die);
12423   return die;
12424 }
12425
12426 /* Given a pointer to an arbitrary ..._TYPE tree node, return true if it is
12427    an enumerated type.  */
12428
12429 static inline int
12430 type_is_enum (const_tree type)
12431 {
12432   return TREE_CODE (type) == ENUMERAL_TYPE;
12433 }
12434
12435 /* Return the DBX register number described by a given RTL node.  */
12436
12437 static unsigned int
12438 dbx_reg_number (const_rtx rtl)
12439 {
12440   unsigned regno = REGNO (rtl);
12441
12442   gcc_assert (regno < FIRST_PSEUDO_REGISTER);
12443
12444 #ifdef LEAF_REG_REMAP
12445   if (current_function_uses_only_leaf_regs)
12446     {
12447       int leaf_reg = LEAF_REG_REMAP (regno);
12448       if (leaf_reg != -1)
12449         regno = (unsigned) leaf_reg;
12450     }
12451 #endif
12452
12453   return DBX_REGISTER_NUMBER (regno);
12454 }
12455
12456 /* Optionally add a DW_OP_piece term to a location description expression.
12457    DW_OP_piece is only added if the location description expression already
12458    doesn't end with DW_OP_piece.  */
12459
12460 static void
12461 add_loc_descr_op_piece (dw_loc_descr_ref *list_head, int size)
12462 {
12463   dw_loc_descr_ref loc;
12464
12465   if (*list_head != NULL)
12466     {
12467       /* Find the end of the chain.  */
12468       for (loc = *list_head; loc->dw_loc_next != NULL; loc = loc->dw_loc_next)
12469         ;
12470
12471       if (loc->dw_loc_opc != DW_OP_piece)
12472         loc->dw_loc_next = new_loc_descr (DW_OP_piece, size, 0);
12473     }
12474 }
12475
12476 /* Return a location descriptor that designates a machine register or
12477    zero if there is none.  */
12478
12479 static dw_loc_descr_ref
12480 reg_loc_descriptor (rtx rtl, enum var_init_status initialized)
12481 {
12482   rtx regs;
12483
12484   if (REGNO (rtl) >= FIRST_PSEUDO_REGISTER)
12485     return 0;
12486
12487   regs = targetm.dwarf_register_span (rtl);
12488
12489   if (hard_regno_nregs[REGNO (rtl)][GET_MODE (rtl)] > 1 || regs)
12490     return multiple_reg_loc_descriptor (rtl, regs, initialized);
12491   else
12492     return one_reg_loc_descriptor (dbx_reg_number (rtl), initialized);
12493 }
12494
12495 /* Return a location descriptor that designates a machine register for
12496    a given hard register number.  */
12497
12498 static dw_loc_descr_ref
12499 one_reg_loc_descriptor (unsigned int regno, enum var_init_status initialized)
12500 {
12501   dw_loc_descr_ref reg_loc_descr;
12502
12503   if (regno <= 31)
12504     reg_loc_descr
12505       = new_loc_descr ((enum dwarf_location_atom) (DW_OP_reg0 + regno), 0, 0);
12506   else
12507     reg_loc_descr = new_loc_descr (DW_OP_regx, regno, 0);
12508
12509   if (initialized == VAR_INIT_STATUS_UNINITIALIZED)
12510     add_loc_descr (&reg_loc_descr, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
12511
12512   return reg_loc_descr;
12513 }
12514
12515 /* Given an RTL of a register, return a location descriptor that
12516    designates a value that spans more than one register.  */
12517
12518 static dw_loc_descr_ref
12519 multiple_reg_loc_descriptor (rtx rtl, rtx regs,
12520                              enum var_init_status initialized)
12521 {
12522   int nregs, size, i;
12523   unsigned reg;
12524   dw_loc_descr_ref loc_result = NULL;
12525
12526   reg = REGNO (rtl);
12527 #ifdef LEAF_REG_REMAP
12528   if (current_function_uses_only_leaf_regs)
12529     {
12530       int leaf_reg = LEAF_REG_REMAP (reg);
12531       if (leaf_reg != -1)
12532         reg = (unsigned) leaf_reg;
12533     }
12534 #endif
12535   gcc_assert ((unsigned) DBX_REGISTER_NUMBER (reg) == dbx_reg_number (rtl));
12536   nregs = hard_regno_nregs[REGNO (rtl)][GET_MODE (rtl)];
12537
12538   /* Simple, contiguous registers.  */
12539   if (regs == NULL_RTX)
12540     {
12541       size = GET_MODE_SIZE (GET_MODE (rtl)) / nregs;
12542
12543       loc_result = NULL;
12544       while (nregs--)
12545         {
12546           dw_loc_descr_ref t;
12547
12548           t = one_reg_loc_descriptor (DBX_REGISTER_NUMBER (reg),
12549                                       VAR_INIT_STATUS_INITIALIZED);
12550           add_loc_descr (&loc_result, t);
12551           add_loc_descr_op_piece (&loc_result, size);
12552           ++reg;
12553         }
12554       return loc_result;
12555     }
12556
12557   /* Now onto stupid register sets in non contiguous locations.  */
12558
12559   gcc_assert (GET_CODE (regs) == PARALLEL);
12560
12561   size = GET_MODE_SIZE (GET_MODE (XVECEXP (regs, 0, 0)));
12562   loc_result = NULL;
12563
12564   for (i = 0; i < XVECLEN (regs, 0); ++i)
12565     {
12566       dw_loc_descr_ref t;
12567
12568       t = one_reg_loc_descriptor (REGNO (XVECEXP (regs, 0, i)),
12569                                   VAR_INIT_STATUS_INITIALIZED);
12570       add_loc_descr (&loc_result, t);
12571       size = GET_MODE_SIZE (GET_MODE (XVECEXP (regs, 0, 0)));
12572       add_loc_descr_op_piece (&loc_result, size);
12573     }
12574
12575   if (loc_result && initialized == VAR_INIT_STATUS_UNINITIALIZED)
12576     add_loc_descr (&loc_result, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
12577   return loc_result;
12578 }
12579
12580 #endif /* DWARF2_DEBUGGING_INFO */
12581
12582 #if defined (DWARF2_DEBUGGING_INFO) || defined (DWARF2_UNWIND_INFO)
12583
12584 /* Return a location descriptor that designates a constant.  */
12585
12586 static dw_loc_descr_ref
12587 int_loc_descriptor (HOST_WIDE_INT i)
12588 {
12589   enum dwarf_location_atom op;
12590
12591   /* Pick the smallest representation of a constant, rather than just
12592      defaulting to the LEB encoding.  */
12593   if (i >= 0)
12594     {
12595       if (i <= 31)
12596         op = (enum dwarf_location_atom) (DW_OP_lit0 + i);
12597       else if (i <= 0xff)
12598         op = DW_OP_const1u;
12599       else if (i <= 0xffff)
12600         op = DW_OP_const2u;
12601       else if (HOST_BITS_PER_WIDE_INT == 32
12602                || i <= 0xffffffff)
12603         op = DW_OP_const4u;
12604       else
12605         op = DW_OP_constu;
12606     }
12607   else
12608     {
12609       if (i >= -0x80)
12610         op = DW_OP_const1s;
12611       else if (i >= -0x8000)
12612         op = DW_OP_const2s;
12613       else if (HOST_BITS_PER_WIDE_INT == 32
12614                || i >= -0x80000000)
12615         op = DW_OP_const4s;
12616       else
12617         op = DW_OP_consts;
12618     }
12619
12620   return new_loc_descr (op, i, 0);
12621 }
12622 #endif
12623
12624 #ifdef DWARF2_DEBUGGING_INFO
12625 /* Return loc description representing "address" of integer value.
12626    This can appear only as toplevel expression.  */
12627
12628 static dw_loc_descr_ref
12629 address_of_int_loc_descriptor (int size, HOST_WIDE_INT i)
12630 {
12631   int litsize;
12632   dw_loc_descr_ref loc_result = NULL;
12633
12634   if (!(dwarf_version >= 4 || !dwarf_strict))
12635     return NULL;
12636
12637   if (i >= 0)
12638     {
12639       if (i <= 31)
12640         litsize = 1;
12641       else if (i <= 0xff)
12642         litsize = 2;
12643       else if (i <= 0xffff)
12644         litsize = 3;
12645       else if (HOST_BITS_PER_WIDE_INT == 32
12646                || i <= 0xffffffff)
12647         litsize = 5;
12648       else
12649         litsize = 1 + size_of_uleb128 ((unsigned HOST_WIDE_INT) i);
12650     }
12651   else
12652     {
12653       if (i >= -0x80)
12654         litsize = 2;
12655       else if (i >= -0x8000)
12656         litsize = 3;
12657       else if (HOST_BITS_PER_WIDE_INT == 32
12658                || i >= -0x80000000)
12659         litsize = 5;
12660       else
12661         litsize = 1 + size_of_sleb128 (i);
12662     }
12663   /* Determine if DW_OP_stack_value or DW_OP_implicit_value
12664      is more compact.  For DW_OP_stack_value we need:
12665      litsize + 1 (DW_OP_stack_value)
12666      and for DW_OP_implicit_value:
12667      1 (DW_OP_implicit_value) + 1 (length) + size.  */
12668   if ((int) DWARF2_ADDR_SIZE >= size && litsize + 1 <= 1 + 1 + size)
12669     {
12670       loc_result = int_loc_descriptor (i);
12671       add_loc_descr (&loc_result,
12672                      new_loc_descr (DW_OP_stack_value, 0, 0));
12673       return loc_result;
12674     }
12675
12676   loc_result = new_loc_descr (DW_OP_implicit_value,
12677                               size, 0);
12678   loc_result->dw_loc_oprnd2.val_class = dw_val_class_const;
12679   loc_result->dw_loc_oprnd2.v.val_int = i;
12680   return loc_result;
12681 }
12682
12683 /* Return a location descriptor that designates a base+offset location.  */
12684
12685 static dw_loc_descr_ref
12686 based_loc_descr (rtx reg, HOST_WIDE_INT offset,
12687                  enum var_init_status initialized)
12688 {
12689   unsigned int regno;
12690   dw_loc_descr_ref result;
12691   dw_fde_ref fde = current_fde ();
12692
12693   /* We only use "frame base" when we're sure we're talking about the
12694      post-prologue local stack frame.  We do this by *not* running
12695      register elimination until this point, and recognizing the special
12696      argument pointer and soft frame pointer rtx's.  */
12697   if (reg == arg_pointer_rtx || reg == frame_pointer_rtx)
12698     {
12699       rtx elim = eliminate_regs (reg, VOIDmode, NULL_RTX);
12700
12701       if (elim != reg)
12702         {
12703           if (GET_CODE (elim) == PLUS)
12704             {
12705               offset += INTVAL (XEXP (elim, 1));
12706               elim = XEXP (elim, 0);
12707             }
12708           gcc_assert ((SUPPORTS_STACK_ALIGNMENT
12709                        && (elim == hard_frame_pointer_rtx
12710                            || elim == stack_pointer_rtx))
12711                       || elim == (frame_pointer_needed
12712                                   ? hard_frame_pointer_rtx
12713                                   : stack_pointer_rtx));
12714
12715           /* If drap register is used to align stack, use frame
12716              pointer + offset to access stack variables.  If stack
12717              is aligned without drap, use stack pointer + offset to
12718              access stack variables.  */
12719           if (crtl->stack_realign_tried
12720               && reg == frame_pointer_rtx)
12721             {
12722               int base_reg
12723                 = DWARF_FRAME_REGNUM ((fde && fde->drap_reg != INVALID_REGNUM)
12724                                       ? HARD_FRAME_POINTER_REGNUM
12725                                       : STACK_POINTER_REGNUM);
12726               return new_reg_loc_descr (base_reg, offset);
12727             }
12728
12729           offset += frame_pointer_fb_offset;
12730           return new_loc_descr (DW_OP_fbreg, offset, 0);
12731         }
12732     }
12733   else if (fde
12734            && fde->drap_reg != INVALID_REGNUM
12735            && (fde->drap_reg == REGNO (reg)
12736                || fde->vdrap_reg == REGNO (reg)))
12737     {
12738       /* Use cfa+offset to represent the location of arguments passed
12739          on stack when drap is used to align stack.  */
12740       return new_loc_descr (DW_OP_fbreg, offset, 0);
12741     }
12742
12743   regno = dbx_reg_number (reg);
12744   if (regno <= 31)
12745     result = new_loc_descr ((enum dwarf_location_atom) (DW_OP_breg0 + regno),
12746                             offset, 0);
12747   else
12748     result = new_loc_descr (DW_OP_bregx, regno, offset);
12749
12750   if (initialized == VAR_INIT_STATUS_UNINITIALIZED)
12751     add_loc_descr (&result, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
12752
12753   return result;
12754 }
12755
12756 /* Return true if this RTL expression describes a base+offset calculation.  */
12757
12758 static inline int
12759 is_based_loc (const_rtx rtl)
12760 {
12761   return (GET_CODE (rtl) == PLUS
12762           && ((REG_P (XEXP (rtl, 0))
12763                && REGNO (XEXP (rtl, 0)) < FIRST_PSEUDO_REGISTER
12764                && CONST_INT_P (XEXP (rtl, 1)))));
12765 }
12766
12767 /* Try to handle TLS MEMs, for which mem_loc_descriptor on XEXP (mem, 0)
12768    failed.  */
12769
12770 static dw_loc_descr_ref
12771 tls_mem_loc_descriptor (rtx mem)
12772 {
12773   tree base;
12774   dw_loc_descr_ref loc_result;
12775
12776   if (MEM_EXPR (mem) == NULL_TREE || MEM_OFFSET (mem) == NULL_RTX)
12777     return NULL;
12778
12779   base = get_base_address (MEM_EXPR (mem));
12780   if (base == NULL
12781       || TREE_CODE (base) != VAR_DECL
12782       || !DECL_THREAD_LOCAL_P (base))
12783     return NULL;
12784
12785   loc_result = loc_descriptor_from_tree (MEM_EXPR (mem), 1);
12786   if (loc_result == NULL)
12787     return NULL;
12788
12789   if (INTVAL (MEM_OFFSET (mem)))
12790     loc_descr_plus_const (&loc_result, INTVAL (MEM_OFFSET (mem)));
12791
12792   return loc_result;
12793 }
12794
12795 /* Output debug info about reason why we failed to expand expression as dwarf
12796    expression.  */
12797
12798 static void
12799 expansion_failed (tree expr, rtx rtl, char const *reason)
12800 {
12801   if (dump_file && (dump_flags & TDF_DETAILS))
12802     {
12803       fprintf (dump_file, "Failed to expand as dwarf: ");
12804       if (expr)
12805         print_generic_expr (dump_file, expr, dump_flags);
12806       if (rtl)
12807         {
12808           fprintf (dump_file, "\n");
12809           print_rtl (dump_file, rtl);
12810         }
12811       fprintf (dump_file, "\nReason: %s\n", reason);
12812     }
12813 }
12814
12815 /* Helper function for const_ok_for_output, called either directly
12816    or via for_each_rtx.  */
12817
12818 static int
12819 const_ok_for_output_1 (rtx *rtlp, void *data ATTRIBUTE_UNUSED)
12820 {
12821   rtx rtl = *rtlp;
12822
12823   if (GET_CODE (rtl) != SYMBOL_REF)
12824     return 0;
12825
12826   if (CONSTANT_POOL_ADDRESS_P (rtl))
12827     {
12828       bool marked;
12829       get_pool_constant_mark (rtl, &marked);
12830       /* If all references to this pool constant were optimized away,
12831          it was not output and thus we can't represent it.  */
12832       if (!marked)
12833         {
12834           expansion_failed (NULL_TREE, rtl,
12835                             "Constant was removed from constant pool.\n");
12836           return 1;
12837         }
12838     }
12839
12840   if (SYMBOL_REF_TLS_MODEL (rtl) != TLS_MODEL_NONE)
12841     return 1;
12842
12843   /* Avoid references to external symbols in debug info, on several targets
12844      the linker might even refuse to link when linking a shared library,
12845      and in many other cases the relocations for .debug_info/.debug_loc are
12846      dropped, so the address becomes zero anyway.  Hidden symbols, guaranteed
12847      to be defined within the same shared library or executable are fine.  */
12848   if (SYMBOL_REF_EXTERNAL_P (rtl))
12849     {
12850       tree decl = SYMBOL_REF_DECL (rtl);
12851
12852       if (decl == NULL || !targetm.binds_local_p (decl))
12853         {
12854           expansion_failed (NULL_TREE, rtl,
12855                             "Symbol not defined in current TU.\n");
12856           return 1;
12857         }
12858     }
12859
12860   return 0;
12861 }
12862
12863 /* Return true if constant RTL can be emitted in DW_OP_addr or
12864    DW_AT_const_value.  TLS SYMBOL_REFs, external SYMBOL_REFs or
12865    non-marked constant pool SYMBOL_REFs can't be referenced in it.  */
12866
12867 static bool
12868 const_ok_for_output (rtx rtl)
12869 {
12870   if (GET_CODE (rtl) == SYMBOL_REF)
12871     return const_ok_for_output_1 (&rtl, NULL) == 0;
12872
12873   if (GET_CODE (rtl) == CONST)
12874     return for_each_rtx (&XEXP (rtl, 0), const_ok_for_output_1, NULL) == 0;
12875
12876   return true;
12877 }
12878
12879 /* The following routine converts the RTL for a variable or parameter
12880    (resident in memory) into an equivalent Dwarf representation of a
12881    mechanism for getting the address of that same variable onto the top of a
12882    hypothetical "address evaluation" stack.
12883
12884    When creating memory location descriptors, we are effectively transforming
12885    the RTL for a memory-resident object into its Dwarf postfix expression
12886    equivalent.  This routine recursively descends an RTL tree, turning
12887    it into Dwarf postfix code as it goes.
12888
12889    MODE is the mode of the memory reference, needed to handle some
12890    autoincrement addressing modes.
12891
12892    CAN_USE_FBREG is a flag whether we can use DW_AT_frame_base in the
12893    location list for RTL.
12894
12895    Return 0 if we can't represent the location.  */
12896
12897 static dw_loc_descr_ref
12898 mem_loc_descriptor (rtx rtl, enum machine_mode mode,
12899                     enum var_init_status initialized)
12900 {
12901   dw_loc_descr_ref mem_loc_result = NULL;
12902   enum dwarf_location_atom op;
12903   dw_loc_descr_ref op0, op1;
12904
12905   /* Note that for a dynamically sized array, the location we will generate a
12906      description of here will be the lowest numbered location which is
12907      actually within the array.  That's *not* necessarily the same as the
12908      zeroth element of the array.  */
12909
12910   rtl = targetm.delegitimize_address (rtl);
12911
12912   switch (GET_CODE (rtl))
12913     {
12914     case POST_INC:
12915     case POST_DEC:
12916     case POST_MODIFY:
12917       return mem_loc_descriptor (XEXP (rtl, 0), mode, initialized);
12918
12919     case SUBREG:
12920       /* The case of a subreg may arise when we have a local (register)
12921          variable or a formal (register) parameter which doesn't quite fill
12922          up an entire register.  For now, just assume that it is
12923          legitimate to make the Dwarf info refer to the whole register which
12924          contains the given subreg.  */
12925       if (!subreg_lowpart_p (rtl))
12926         break;
12927       rtl = SUBREG_REG (rtl);
12928       if (GET_MODE_SIZE (GET_MODE (rtl)) > DWARF2_ADDR_SIZE)
12929         break;
12930       if (GET_MODE_CLASS (GET_MODE (rtl)) != MODE_INT)
12931         break;
12932       mem_loc_result = mem_loc_descriptor (rtl, mode, initialized);
12933       break;
12934
12935     case REG:
12936       /* Whenever a register number forms a part of the description of the
12937          method for calculating the (dynamic) address of a memory resident
12938          object, DWARF rules require the register number be referred to as
12939          a "base register".  This distinction is not based in any way upon
12940          what category of register the hardware believes the given register
12941          belongs to.  This is strictly DWARF terminology we're dealing with
12942          here. Note that in cases where the location of a memory-resident
12943          data object could be expressed as: OP_ADD (OP_BASEREG (basereg),
12944          OP_CONST (0)) the actual DWARF location descriptor that we generate
12945          may just be OP_BASEREG (basereg).  This may look deceptively like
12946          the object in question was allocated to a register (rather than in
12947          memory) so DWARF consumers need to be aware of the subtle
12948          distinction between OP_REG and OP_BASEREG.  */
12949       if (REGNO (rtl) < FIRST_PSEUDO_REGISTER)
12950         mem_loc_result = based_loc_descr (rtl, 0, VAR_INIT_STATUS_INITIALIZED);
12951       else if (stack_realign_drap
12952                && crtl->drap_reg
12953                && crtl->args.internal_arg_pointer == rtl
12954                && REGNO (crtl->drap_reg) < FIRST_PSEUDO_REGISTER)
12955         {
12956           /* If RTL is internal_arg_pointer, which has been optimized
12957              out, use DRAP instead.  */
12958           mem_loc_result = based_loc_descr (crtl->drap_reg, 0,
12959                                             VAR_INIT_STATUS_INITIALIZED);
12960         }
12961       break;
12962
12963     case SIGN_EXTEND:
12964     case ZERO_EXTEND:
12965       op0 = mem_loc_descriptor (XEXP (rtl, 0), mode,
12966                                 VAR_INIT_STATUS_INITIALIZED);
12967       if (op0 == 0)
12968         break;
12969       else
12970         {
12971           int shift = DWARF2_ADDR_SIZE
12972                       - GET_MODE_SIZE (GET_MODE (XEXP (rtl, 0)));
12973           shift *= BITS_PER_UNIT;
12974           if (GET_CODE (rtl) == SIGN_EXTEND)
12975             op = DW_OP_shra;
12976           else
12977             op = DW_OP_shr;
12978           mem_loc_result = op0;
12979           add_loc_descr (&mem_loc_result, int_loc_descriptor (shift));
12980           add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_shl, 0, 0));
12981           add_loc_descr (&mem_loc_result, int_loc_descriptor (shift));
12982           add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0));
12983         }
12984       break;
12985
12986     case MEM:
12987       mem_loc_result = mem_loc_descriptor (XEXP (rtl, 0), GET_MODE (rtl),
12988                                            VAR_INIT_STATUS_INITIALIZED);
12989       if (mem_loc_result == NULL)
12990         mem_loc_result = tls_mem_loc_descriptor (rtl);
12991       if (mem_loc_result != 0)
12992         add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_deref, 0, 0));
12993       break;
12994
12995     case LO_SUM:
12996          rtl = XEXP (rtl, 1);
12997
12998       /* ... fall through ...  */
12999
13000     case LABEL_REF:
13001       /* Some ports can transform a symbol ref into a label ref, because
13002          the symbol ref is too far away and has to be dumped into a constant
13003          pool.  */
13004     case CONST:
13005     case SYMBOL_REF:
13006       /* Alternatively, the symbol in the constant pool might be referenced
13007          by a different symbol.  */
13008       if (GET_CODE (rtl) == SYMBOL_REF && CONSTANT_POOL_ADDRESS_P (rtl))
13009         {
13010           bool marked;
13011           rtx tmp = get_pool_constant_mark (rtl, &marked);
13012
13013           if (GET_CODE (tmp) == SYMBOL_REF)
13014             {
13015               rtl = tmp;
13016               if (CONSTANT_POOL_ADDRESS_P (tmp))
13017                 get_pool_constant_mark (tmp, &marked);
13018               else
13019                 marked = true;
13020             }
13021
13022           /* If all references to this pool constant were optimized away,
13023              it was not output and thus we can't represent it.
13024              FIXME: might try to use DW_OP_const_value here, though
13025              DW_OP_piece complicates it.  */
13026           if (!marked)
13027             {
13028               expansion_failed (NULL_TREE, rtl,
13029                                 "Constant was removed from constant pool.\n");
13030               return 0;
13031             }
13032         }
13033
13034       if (GET_CODE (rtl) == SYMBOL_REF
13035           && SYMBOL_REF_TLS_MODEL (rtl) != TLS_MODEL_NONE)
13036         {
13037           dw_loc_descr_ref temp;
13038
13039           /* If this is not defined, we have no way to emit the data.  */
13040           if (!targetm.have_tls || !targetm.asm_out.output_dwarf_dtprel)
13041             break;
13042
13043           temp = new_loc_descr (DW_OP_addr, 0, 0);
13044           temp->dw_loc_oprnd1.val_class = dw_val_class_addr;
13045           temp->dw_loc_oprnd1.v.val_addr = rtl;
13046           temp->dtprel = true;
13047
13048           mem_loc_result = new_loc_descr (DW_OP_GNU_push_tls_address, 0, 0);
13049           add_loc_descr (&mem_loc_result, temp);
13050
13051           break;
13052         }
13053
13054       if (!const_ok_for_output (rtl))
13055         break;
13056
13057     symref:
13058       mem_loc_result = new_loc_descr (DW_OP_addr, 0, 0);
13059       mem_loc_result->dw_loc_oprnd1.val_class = dw_val_class_addr;
13060       mem_loc_result->dw_loc_oprnd1.v.val_addr = rtl;
13061       VEC_safe_push (rtx, gc, used_rtx_array, rtl);
13062       break;
13063
13064     case CONCAT:
13065     case CONCATN:
13066     case VAR_LOCATION:
13067       expansion_failed (NULL_TREE, rtl,
13068                         "CONCAT/CONCATN/VAR_LOCATION is handled only by loc_descriptor");
13069       return 0;
13070
13071     case PRE_MODIFY:
13072       /* Extract the PLUS expression nested inside and fall into
13073          PLUS code below.  */
13074       rtl = XEXP (rtl, 1);
13075       goto plus;
13076
13077     case PRE_INC:
13078     case PRE_DEC:
13079       /* Turn these into a PLUS expression and fall into the PLUS code
13080          below.  */
13081       rtl = gen_rtx_PLUS (word_mode, XEXP (rtl, 0),
13082                           GEN_INT (GET_CODE (rtl) == PRE_INC
13083                                    ? GET_MODE_UNIT_SIZE (mode)
13084                                    : -GET_MODE_UNIT_SIZE (mode)));
13085
13086       /* ... fall through ...  */
13087
13088     case PLUS:
13089     plus:
13090       if (is_based_loc (rtl))
13091         mem_loc_result = based_loc_descr (XEXP (rtl, 0),
13092                                           INTVAL (XEXP (rtl, 1)),
13093                                           VAR_INIT_STATUS_INITIALIZED);
13094       else
13095         {
13096           mem_loc_result = mem_loc_descriptor (XEXP (rtl, 0), mode,
13097                                                VAR_INIT_STATUS_INITIALIZED);
13098           if (mem_loc_result == 0)
13099             break;
13100
13101           if (CONST_INT_P (XEXP (rtl, 1)))
13102             loc_descr_plus_const (&mem_loc_result, INTVAL (XEXP (rtl, 1)));
13103           else
13104             {
13105               dw_loc_descr_ref mem_loc_result2
13106                 = mem_loc_descriptor (XEXP (rtl, 1), mode,
13107                                       VAR_INIT_STATUS_INITIALIZED);
13108               if (mem_loc_result2 == 0)
13109                 break;
13110               add_loc_descr (&mem_loc_result, mem_loc_result2);
13111               add_loc_descr (&mem_loc_result,
13112                              new_loc_descr (DW_OP_plus, 0, 0));
13113             }
13114         }
13115       break;
13116
13117     /* If a pseudo-reg is optimized away, it is possible for it to
13118        be replaced with a MEM containing a multiply or shift.  */
13119     case MINUS:
13120       op = DW_OP_minus;
13121       goto do_binop;
13122
13123     case MULT:
13124       op = DW_OP_mul;
13125       goto do_binop;
13126
13127     case DIV:
13128       op = DW_OP_div;
13129       goto do_binop;
13130
13131     case MOD:
13132       op = DW_OP_mod;
13133       goto do_binop;
13134
13135     case ASHIFT:
13136       op = DW_OP_shl;
13137       goto do_binop;
13138
13139     case ASHIFTRT:
13140       op = DW_OP_shra;
13141       goto do_binop;
13142
13143     case LSHIFTRT:
13144       op = DW_OP_shr;
13145       goto do_binop;
13146
13147     case AND:
13148       op = DW_OP_and;
13149       goto do_binop;
13150
13151     case IOR:
13152       op = DW_OP_or;
13153       goto do_binop;
13154
13155     case XOR:
13156       op = DW_OP_xor;
13157       goto do_binop;
13158
13159     do_binop:
13160       op0 = mem_loc_descriptor (XEXP (rtl, 0), mode,
13161                                 VAR_INIT_STATUS_INITIALIZED);
13162       op1 = mem_loc_descriptor (XEXP (rtl, 1), mode,
13163                                 VAR_INIT_STATUS_INITIALIZED);
13164
13165       if (op0 == 0 || op1 == 0)
13166         break;
13167
13168       mem_loc_result = op0;
13169       add_loc_descr (&mem_loc_result, op1);
13170       add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0));
13171       break;
13172
13173     case NOT:
13174       op = DW_OP_not;
13175       goto do_unop;
13176
13177     case ABS:
13178       op = DW_OP_abs;
13179       goto do_unop;
13180
13181     case NEG:
13182       op = DW_OP_neg;
13183       goto do_unop;
13184
13185     do_unop:
13186       op0 = mem_loc_descriptor (XEXP (rtl, 0), mode,
13187                                 VAR_INIT_STATUS_INITIALIZED);
13188
13189       if (op0 == 0)
13190         break;
13191
13192       mem_loc_result = op0;
13193       add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0));
13194       break;
13195
13196     case CONST_INT:
13197       mem_loc_result = int_loc_descriptor (INTVAL (rtl));
13198       break;
13199
13200     case EQ:
13201       op = DW_OP_eq;
13202       goto do_scompare;
13203
13204     case GE:
13205       op = DW_OP_ge;
13206       goto do_scompare;
13207
13208     case GT:
13209       op = DW_OP_gt;
13210       goto do_scompare;
13211
13212     case LE:
13213       op = DW_OP_le;
13214       goto do_scompare;
13215
13216     case LT:
13217       op = DW_OP_lt;
13218       goto do_scompare;
13219
13220     case NE:
13221       op = DW_OP_ne;
13222       goto do_scompare;
13223
13224     do_scompare:
13225       if (GET_MODE_CLASS (GET_MODE (XEXP (rtl, 0))) != MODE_INT
13226           || GET_MODE_SIZE (GET_MODE (XEXP (rtl, 0))) > DWARF2_ADDR_SIZE
13227           || GET_MODE (XEXP (rtl, 0)) != GET_MODE (XEXP (rtl, 1)))
13228         break;
13229
13230       op0 = mem_loc_descriptor (XEXP (rtl, 0), mode,
13231                                 VAR_INIT_STATUS_INITIALIZED);
13232       op1 = mem_loc_descriptor (XEXP (rtl, 1), mode,
13233                                 VAR_INIT_STATUS_INITIALIZED);
13234
13235       if (op0 == 0 || op1 == 0)
13236         break;
13237
13238       if (GET_MODE_SIZE (GET_MODE (XEXP (rtl, 0))) < DWARF2_ADDR_SIZE)
13239         {
13240           int shift = DWARF2_ADDR_SIZE
13241                       - GET_MODE_SIZE (GET_MODE (XEXP (rtl, 0)));
13242           shift *= BITS_PER_UNIT;
13243           add_loc_descr (&op0, int_loc_descriptor (shift));
13244           add_loc_descr (&op0, new_loc_descr (DW_OP_shl, 0, 0));
13245           if (CONST_INT_P (XEXP (rtl, 1)))
13246             op1 = int_loc_descriptor (INTVAL (XEXP (rtl, 1)) << shift);
13247           else
13248             {
13249               add_loc_descr (&op1, int_loc_descriptor (shift));
13250               add_loc_descr (&op1, new_loc_descr (DW_OP_shl, 0, 0));
13251             }
13252         }
13253
13254     do_compare:
13255       mem_loc_result = op0;
13256       add_loc_descr (&mem_loc_result, op1);
13257       add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0));
13258       if (STORE_FLAG_VALUE != 1)
13259         {
13260           add_loc_descr (&mem_loc_result,
13261                          int_loc_descriptor (STORE_FLAG_VALUE));
13262           add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_mul, 0, 0));
13263         }
13264       break;
13265
13266     case GEU:
13267       op = DW_OP_ge;
13268       goto do_ucompare;
13269
13270     case GTU:
13271       op = DW_OP_gt;
13272       goto do_ucompare;
13273
13274     case LEU:
13275       op = DW_OP_le;
13276       goto do_ucompare;
13277
13278     case LTU:
13279       op = DW_OP_lt;
13280       goto do_ucompare;
13281
13282     do_ucompare:
13283       if (GET_MODE_CLASS (GET_MODE (XEXP (rtl, 0))) != MODE_INT
13284           || GET_MODE_SIZE (GET_MODE (XEXP (rtl, 0))) > DWARF2_ADDR_SIZE
13285           || GET_MODE (XEXP (rtl, 0)) != GET_MODE (XEXP (rtl, 1)))
13286         break;
13287
13288       op0 = mem_loc_descriptor (XEXP (rtl, 0), mode,
13289                                 VAR_INIT_STATUS_INITIALIZED);
13290       op1 = mem_loc_descriptor (XEXP (rtl, 1), mode,
13291                                 VAR_INIT_STATUS_INITIALIZED);
13292
13293       if (op0 == 0 || op1 == 0)
13294         break;
13295
13296       if (GET_MODE_SIZE (GET_MODE (XEXP (rtl, 0))) < DWARF2_ADDR_SIZE)
13297         {
13298           HOST_WIDE_INT mask = GET_MODE_MASK (GET_MODE (XEXP (rtl, 0)));
13299           add_loc_descr (&op0, int_loc_descriptor (mask));
13300           add_loc_descr (&op0, new_loc_descr (DW_OP_and, 0, 0));
13301           if (CONST_INT_P (XEXP (rtl, 1)))
13302             op1 = int_loc_descriptor (INTVAL (XEXP (rtl, 1)) & mask);
13303           else
13304             {
13305               add_loc_descr (&op1, int_loc_descriptor (mask));
13306               add_loc_descr (&op1, new_loc_descr (DW_OP_and, 0, 0));
13307             }
13308         }
13309       else
13310         {
13311           HOST_WIDE_INT bias = 1;
13312           bias <<= (DWARF2_ADDR_SIZE * BITS_PER_UNIT - 1);
13313           add_loc_descr (&op0, new_loc_descr (DW_OP_plus_uconst, bias, 0));
13314           if (CONST_INT_P (XEXP (rtl, 1)))
13315             op1 = int_loc_descriptor ((unsigned HOST_WIDE_INT) bias
13316                                       + INTVAL (XEXP (rtl, 1)));
13317           else
13318             add_loc_descr (&op1, new_loc_descr (DW_OP_plus_uconst, bias, 0));
13319         }
13320       goto do_compare;
13321
13322     case SMIN:
13323     case SMAX:
13324     case UMIN:
13325     case UMAX:
13326       if (GET_MODE_CLASS (GET_MODE (XEXP (rtl, 0))) != MODE_INT
13327           || GET_MODE_SIZE (GET_MODE (XEXP (rtl, 0))) > DWARF2_ADDR_SIZE
13328           || GET_MODE (XEXP (rtl, 0)) != GET_MODE (XEXP (rtl, 1)))
13329         break;
13330
13331       op0 = mem_loc_descriptor (XEXP (rtl, 0), mode,
13332                                 VAR_INIT_STATUS_INITIALIZED);
13333       op1 = mem_loc_descriptor (XEXP (rtl, 1), mode,
13334                                 VAR_INIT_STATUS_INITIALIZED);
13335
13336       if (op0 == 0 || op1 == 0)
13337         break;
13338
13339       add_loc_descr (&op0, new_loc_descr (DW_OP_dup, 0, 0));
13340       add_loc_descr (&op1, new_loc_descr (DW_OP_swap, 0, 0));
13341       add_loc_descr (&op1, new_loc_descr (DW_OP_over, 0, 0));
13342       if (GET_CODE (rtl) == UMIN || GET_CODE (rtl) == UMAX)
13343         {
13344           if (GET_MODE_SIZE (GET_MODE (XEXP (rtl, 0))) < DWARF2_ADDR_SIZE)
13345             {
13346               HOST_WIDE_INT mask = GET_MODE_MASK (GET_MODE (XEXP (rtl, 0)));
13347               add_loc_descr (&op0, int_loc_descriptor (mask));
13348               add_loc_descr (&op0, new_loc_descr (DW_OP_and, 0, 0));
13349               add_loc_descr (&op1, int_loc_descriptor (mask));
13350               add_loc_descr (&op1, new_loc_descr (DW_OP_and, 0, 0));
13351             }
13352           else
13353             {
13354               HOST_WIDE_INT bias = 1;
13355               bias <<= (DWARF2_ADDR_SIZE * BITS_PER_UNIT - 1);
13356               add_loc_descr (&op0, new_loc_descr (DW_OP_plus_uconst, bias, 0));
13357               add_loc_descr (&op1, new_loc_descr (DW_OP_plus_uconst, bias, 0));
13358             }
13359         }
13360       else if (GET_MODE_SIZE (GET_MODE (XEXP (rtl, 0))) < DWARF2_ADDR_SIZE)
13361         {
13362           int shift = DWARF2_ADDR_SIZE
13363                       - GET_MODE_SIZE (GET_MODE (XEXP (rtl, 0)));
13364           shift *= BITS_PER_UNIT;
13365           add_loc_descr (&op0, int_loc_descriptor (shift));
13366           add_loc_descr (&op0, new_loc_descr (DW_OP_shl, 0, 0));
13367           add_loc_descr (&op1, int_loc_descriptor (shift));
13368           add_loc_descr (&op1, new_loc_descr (DW_OP_shl, 0, 0));
13369         }
13370
13371       if (GET_CODE (rtl) == SMIN || GET_CODE (rtl) == UMIN)
13372         op = DW_OP_lt;
13373       else
13374         op = DW_OP_gt;
13375       mem_loc_result = op0;
13376       add_loc_descr (&mem_loc_result, op1);
13377       add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0));
13378       {
13379         dw_loc_descr_ref bra_node, drop_node;
13380
13381         bra_node = new_loc_descr (DW_OP_bra, 0, 0);
13382         add_loc_descr (&mem_loc_result, bra_node);
13383         add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_swap, 0, 0));
13384         drop_node = new_loc_descr (DW_OP_drop, 0, 0);
13385         add_loc_descr (&mem_loc_result, drop_node);
13386         bra_node->dw_loc_oprnd1.val_class = dw_val_class_loc;
13387         bra_node->dw_loc_oprnd1.v.val_loc = drop_node;
13388       }
13389       break;
13390
13391     case ZERO_EXTRACT:
13392     case SIGN_EXTRACT:
13393       if (CONST_INT_P (XEXP (rtl, 1))
13394           && CONST_INT_P (XEXP (rtl, 2))
13395           && ((unsigned) INTVAL (XEXP (rtl, 1))
13396               + (unsigned) INTVAL (XEXP (rtl, 2))
13397               <= GET_MODE_BITSIZE (GET_MODE (rtl)))
13398           && GET_MODE_BITSIZE (GET_MODE (rtl)) <= DWARF2_ADDR_SIZE
13399           && GET_MODE_BITSIZE (GET_MODE (XEXP (rtl, 0))) <= DWARF2_ADDR_SIZE)
13400         {
13401           int shift, size;
13402           op0 = mem_loc_descriptor (XEXP (rtl, 0), mode,
13403                                     VAR_INIT_STATUS_INITIALIZED);
13404           if (op0 == 0)
13405             break;
13406           if (GET_CODE (rtl) == SIGN_EXTRACT)
13407             op = DW_OP_shra;
13408           else
13409             op = DW_OP_shr;
13410           mem_loc_result = op0;
13411           size = INTVAL (XEXP (rtl, 1));
13412           shift = INTVAL (XEXP (rtl, 2));
13413           if (BITS_BIG_ENDIAN)
13414             shift = GET_MODE_BITSIZE (GET_MODE (XEXP (rtl, 0)))
13415                     - shift - size;
13416           if (shift + size != (int) DWARF2_ADDR_SIZE)
13417             {
13418               add_loc_descr (&mem_loc_result,
13419                              int_loc_descriptor (DWARF2_ADDR_SIZE
13420                                                  - shift - size));
13421               add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_shl, 0, 0));
13422             }
13423           if (size != (int) DWARF2_ADDR_SIZE)
13424             {
13425               add_loc_descr (&mem_loc_result,
13426                              int_loc_descriptor (DWARF2_ADDR_SIZE - size));
13427               add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0));
13428             }
13429         }
13430       break;
13431
13432     case COMPARE:
13433     case IF_THEN_ELSE:
13434     case ROTATE:
13435     case ROTATERT:
13436     case TRUNCATE:
13437       /* In theory, we could implement the above.  */
13438       /* DWARF cannot represent the unsigned compare operations
13439          natively.  */
13440     case SS_MULT:
13441     case US_MULT:
13442     case SS_DIV:
13443     case US_DIV:
13444     case UDIV:
13445     case UMOD:
13446     case UNORDERED:
13447     case ORDERED:
13448     case UNEQ:
13449     case UNGE:
13450     case UNGT:
13451     case UNLE:
13452     case UNLT:
13453     case LTGT:
13454     case FLOAT_EXTEND:
13455     case FLOAT_TRUNCATE:
13456     case FLOAT:
13457     case UNSIGNED_FLOAT:
13458     case FIX:
13459     case UNSIGNED_FIX:
13460     case FRACT_CONVERT:
13461     case UNSIGNED_FRACT_CONVERT:
13462     case SAT_FRACT:
13463     case UNSIGNED_SAT_FRACT:
13464     case SQRT:
13465     case BSWAP:
13466     case FFS:
13467     case CLZ:
13468     case CTZ:
13469     case POPCOUNT:
13470     case PARITY:
13471     case ASM_OPERANDS:
13472     case UNSPEC:
13473     case HIGH:
13474       /* If delegitimize_address couldn't do anything with the UNSPEC, we
13475          can't express it in the debug info.  This can happen e.g. with some
13476          TLS UNSPECs.  */
13477       break;
13478
13479     case CONST_STRING:
13480       resolve_one_addr (&rtl, NULL);
13481       goto symref;
13482
13483     default:
13484 #ifdef ENABLE_CHECKING
13485       print_rtl (stderr, rtl);
13486       gcc_unreachable ();
13487 #else
13488       break;
13489 #endif
13490     }
13491
13492   if (mem_loc_result && initialized == VAR_INIT_STATUS_UNINITIALIZED)
13493     add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
13494
13495   return mem_loc_result;
13496 }
13497
13498 /* Return a descriptor that describes the concatenation of two locations.
13499    This is typically a complex variable.  */
13500
13501 static dw_loc_descr_ref
13502 concat_loc_descriptor (rtx x0, rtx x1, enum var_init_status initialized)
13503 {
13504   dw_loc_descr_ref cc_loc_result = NULL;
13505   dw_loc_descr_ref x0_ref
13506     = loc_descriptor (x0, VOIDmode, VAR_INIT_STATUS_INITIALIZED);
13507   dw_loc_descr_ref x1_ref
13508     = loc_descriptor (x1, VOIDmode, VAR_INIT_STATUS_INITIALIZED);
13509
13510   if (x0_ref == 0 || x1_ref == 0)
13511     return 0;
13512
13513   cc_loc_result = x0_ref;
13514   add_loc_descr_op_piece (&cc_loc_result, GET_MODE_SIZE (GET_MODE (x0)));
13515
13516   add_loc_descr (&cc_loc_result, x1_ref);
13517   add_loc_descr_op_piece (&cc_loc_result, GET_MODE_SIZE (GET_MODE (x1)));
13518
13519   if (initialized == VAR_INIT_STATUS_UNINITIALIZED)
13520     add_loc_descr (&cc_loc_result, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
13521
13522   return cc_loc_result;
13523 }
13524
13525 /* Return a descriptor that describes the concatenation of N
13526    locations.  */
13527
13528 static dw_loc_descr_ref
13529 concatn_loc_descriptor (rtx concatn, enum var_init_status initialized)
13530 {
13531   unsigned int i;
13532   dw_loc_descr_ref cc_loc_result = NULL;
13533   unsigned int n = XVECLEN (concatn, 0);
13534
13535   for (i = 0; i < n; ++i)
13536     {
13537       dw_loc_descr_ref ref;
13538       rtx x = XVECEXP (concatn, 0, i);
13539
13540       ref = loc_descriptor (x, VOIDmode, VAR_INIT_STATUS_INITIALIZED);
13541       if (ref == NULL)
13542         return NULL;
13543
13544       add_loc_descr (&cc_loc_result, ref);
13545       add_loc_descr_op_piece (&cc_loc_result, GET_MODE_SIZE (GET_MODE (x)));
13546     }
13547
13548   if (cc_loc_result && initialized == VAR_INIT_STATUS_UNINITIALIZED)
13549     add_loc_descr (&cc_loc_result, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
13550
13551   return cc_loc_result;
13552 }
13553
13554 /* Output a proper Dwarf location descriptor for a variable or parameter
13555    which is either allocated in a register or in a memory location.  For a
13556    register, we just generate an OP_REG and the register number.  For a
13557    memory location we provide a Dwarf postfix expression describing how to
13558    generate the (dynamic) address of the object onto the address stack.
13559
13560    MODE is mode of the decl if this loc_descriptor is going to be used in
13561    .debug_loc section where DW_OP_stack_value and DW_OP_implicit_value are
13562    allowed, VOIDmode otherwise.
13563
13564    If we don't know how to describe it, return 0.  */
13565
13566 static dw_loc_descr_ref
13567 loc_descriptor (rtx rtl, enum machine_mode mode,
13568                 enum var_init_status initialized)
13569 {
13570   dw_loc_descr_ref loc_result = NULL;
13571
13572   switch (GET_CODE (rtl))
13573     {
13574     case SUBREG:
13575       /* The case of a subreg may arise when we have a local (register)
13576          variable or a formal (register) parameter which doesn't quite fill
13577          up an entire register.  For now, just assume that it is
13578          legitimate to make the Dwarf info refer to the whole register which
13579          contains the given subreg.  */
13580       loc_result = loc_descriptor (SUBREG_REG (rtl), mode, initialized);
13581       break;
13582
13583     case REG:
13584       loc_result = reg_loc_descriptor (rtl, initialized);
13585       break;
13586
13587     case SIGN_EXTEND:
13588     case ZERO_EXTEND:
13589       loc_result = loc_descriptor (XEXP (rtl, 0), mode, initialized);
13590       break;
13591
13592     case MEM:
13593       loc_result = mem_loc_descriptor (XEXP (rtl, 0), GET_MODE (rtl),
13594                                        initialized);
13595       if (loc_result == NULL)
13596         loc_result = tls_mem_loc_descriptor (rtl);
13597       break;
13598
13599     case CONCAT:
13600       loc_result = concat_loc_descriptor (XEXP (rtl, 0), XEXP (rtl, 1),
13601                                           initialized);
13602       break;
13603
13604     case CONCATN:
13605       loc_result = concatn_loc_descriptor (rtl, initialized);
13606       break;
13607
13608     case VAR_LOCATION:
13609       /* Single part.  */
13610       if (GET_CODE (XEXP (rtl, 1)) != PARALLEL)
13611         {
13612           loc_result = loc_descriptor (XEXP (XEXP (rtl, 1), 0), mode,
13613                                        initialized);
13614           break;
13615         }
13616
13617       rtl = XEXP (rtl, 1);
13618       /* FALLTHRU */
13619
13620     case PARALLEL:
13621       {
13622         rtvec par_elems = XVEC (rtl, 0);
13623         int num_elem = GET_NUM_ELEM (par_elems);
13624         enum machine_mode mode;
13625         int i;
13626
13627         /* Create the first one, so we have something to add to.  */
13628         loc_result = loc_descriptor (XEXP (RTVEC_ELT (par_elems, 0), 0),
13629                                      VOIDmode, initialized);
13630         if (loc_result == NULL)
13631           return NULL;
13632         mode = GET_MODE (XEXP (RTVEC_ELT (par_elems, 0), 0));
13633         add_loc_descr_op_piece (&loc_result, GET_MODE_SIZE (mode));
13634         for (i = 1; i < num_elem; i++)
13635           {
13636             dw_loc_descr_ref temp;
13637
13638             temp = loc_descriptor (XEXP (RTVEC_ELT (par_elems, i), 0),
13639                                    VOIDmode, initialized);
13640             if (temp == NULL)
13641               return NULL;
13642             add_loc_descr (&loc_result, temp);
13643             mode = GET_MODE (XEXP (RTVEC_ELT (par_elems, i), 0));
13644             add_loc_descr_op_piece (&loc_result, GET_MODE_SIZE (mode));
13645           }
13646       }
13647       break;
13648
13649     case CONST_INT:
13650       if (mode != VOIDmode && mode != BLKmode)
13651         loc_result = address_of_int_loc_descriptor (GET_MODE_SIZE (mode),
13652                                                     INTVAL (rtl));
13653       break;
13654
13655     case CONST_DOUBLE:
13656       if (mode != VOIDmode && (dwarf_version >= 4 || !dwarf_strict))
13657         {
13658           /* Note that a CONST_DOUBLE rtx could represent either an integer
13659              or a floating-point constant.  A CONST_DOUBLE is used whenever
13660              the constant requires more than one word in order to be
13661              adequately represented.  We output CONST_DOUBLEs as blocks.  */
13662           if (GET_MODE (rtl) != VOIDmode)
13663             mode = GET_MODE (rtl);
13664
13665           loc_result = new_loc_descr (DW_OP_implicit_value,
13666                                       GET_MODE_SIZE (mode), 0);
13667           if (SCALAR_FLOAT_MODE_P (mode))
13668             {
13669               unsigned int length = GET_MODE_SIZE (mode);
13670               unsigned char *array = GGC_NEWVEC (unsigned char, length);
13671
13672               insert_float (rtl, array);
13673               loc_result->dw_loc_oprnd2.val_class = dw_val_class_vec;
13674               loc_result->dw_loc_oprnd2.v.val_vec.length = length / 4;
13675               loc_result->dw_loc_oprnd2.v.val_vec.elt_size = 4;
13676               loc_result->dw_loc_oprnd2.v.val_vec.array = array;
13677             }
13678           else
13679             {
13680               loc_result->dw_loc_oprnd2.val_class = dw_val_class_const_double;
13681               loc_result->dw_loc_oprnd2.v.val_double.high
13682                 = CONST_DOUBLE_HIGH (rtl);
13683               loc_result->dw_loc_oprnd2.v.val_double.low
13684                 = CONST_DOUBLE_LOW (rtl);
13685             }
13686         }
13687       break;
13688
13689     case CONST_VECTOR:
13690       if (mode != VOIDmode && (dwarf_version >= 4 || !dwarf_strict))
13691         {
13692           unsigned int elt_size = GET_MODE_UNIT_SIZE (GET_MODE (rtl));
13693           unsigned int length = CONST_VECTOR_NUNITS (rtl);
13694           unsigned char *array = GGC_NEWVEC (unsigned char, length * elt_size);
13695           unsigned int i;
13696           unsigned char *p;
13697
13698           mode = GET_MODE (rtl);
13699           switch (GET_MODE_CLASS (mode))
13700             {
13701             case MODE_VECTOR_INT:
13702               for (i = 0, p = array; i < length; i++, p += elt_size)
13703                 {
13704                   rtx elt = CONST_VECTOR_ELT (rtl, i);
13705                   HOST_WIDE_INT lo, hi;
13706
13707                   switch (GET_CODE (elt))
13708                     {
13709                     case CONST_INT:
13710                       lo = INTVAL (elt);
13711                       hi = -(lo < 0);
13712                       break;
13713
13714                     case CONST_DOUBLE:
13715                       lo = CONST_DOUBLE_LOW (elt);
13716                       hi = CONST_DOUBLE_HIGH (elt);
13717                       break;
13718
13719                     default:
13720                       gcc_unreachable ();
13721                     }
13722
13723                   if (elt_size <= sizeof (HOST_WIDE_INT))
13724                     insert_int (lo, elt_size, p);
13725                   else
13726                     {
13727                       unsigned char *p0 = p;
13728                       unsigned char *p1 = p + sizeof (HOST_WIDE_INT);
13729
13730                       gcc_assert (elt_size == 2 * sizeof (HOST_WIDE_INT));
13731                       if (WORDS_BIG_ENDIAN)
13732                         {
13733                           p0 = p1;
13734                           p1 = p;
13735                         }
13736                       insert_int (lo, sizeof (HOST_WIDE_INT), p0);
13737                       insert_int (hi, sizeof (HOST_WIDE_INT), p1);
13738                     }
13739                 }
13740               break;
13741
13742             case MODE_VECTOR_FLOAT:
13743               for (i = 0, p = array; i < length; i++, p += elt_size)
13744                 {
13745                   rtx elt = CONST_VECTOR_ELT (rtl, i);
13746                   insert_float (elt, p);
13747                 }
13748               break;
13749
13750             default:
13751               gcc_unreachable ();
13752             }
13753
13754           loc_result = new_loc_descr (DW_OP_implicit_value,
13755                                       length * elt_size, 0);
13756           loc_result->dw_loc_oprnd2.val_class = dw_val_class_vec;
13757           loc_result->dw_loc_oprnd2.v.val_vec.length = length;
13758           loc_result->dw_loc_oprnd2.v.val_vec.elt_size = elt_size;
13759           loc_result->dw_loc_oprnd2.v.val_vec.array = array;
13760         }
13761       break;
13762
13763     case CONST:
13764       if (mode == VOIDmode
13765           || GET_CODE (XEXP (rtl, 0)) == CONST_INT
13766           || GET_CODE (XEXP (rtl, 0)) == CONST_DOUBLE
13767           || GET_CODE (XEXP (rtl, 0)) == CONST_VECTOR)
13768         {
13769           loc_result = loc_descriptor (XEXP (rtl, 0), mode, initialized);
13770           break;
13771         }
13772       /* FALLTHROUGH */
13773     case SYMBOL_REF:
13774       if (!const_ok_for_output (rtl))
13775         break;
13776     case LABEL_REF:
13777       if (mode != VOIDmode && GET_MODE_SIZE (mode) == DWARF2_ADDR_SIZE
13778           && (dwarf_version >= 4 || !dwarf_strict))
13779         {
13780           loc_result = new_loc_descr (DW_OP_implicit_value,
13781                                       DWARF2_ADDR_SIZE, 0);
13782           loc_result->dw_loc_oprnd2.val_class = dw_val_class_addr;
13783           loc_result->dw_loc_oprnd2.v.val_addr = rtl;
13784           VEC_safe_push (rtx, gc, used_rtx_array, rtl);
13785         }
13786       break;
13787
13788     default:
13789       if (GET_MODE_CLASS (mode) == MODE_INT && GET_MODE (rtl) == mode
13790           && GET_MODE_SIZE (GET_MODE (rtl)) <= DWARF2_ADDR_SIZE
13791           && (dwarf_version >= 4 || !dwarf_strict))
13792         {
13793           /* Value expression.  */
13794           loc_result = mem_loc_descriptor (rtl, VOIDmode, initialized);
13795           if (loc_result)
13796             add_loc_descr (&loc_result,
13797                            new_loc_descr (DW_OP_stack_value, 0, 0));
13798         }
13799       break;
13800     }
13801
13802   return loc_result;
13803 }
13804
13805 /* We need to figure out what section we should use as the base for the
13806    address ranges where a given location is valid.
13807    1. If this particular DECL has a section associated with it, use that.
13808    2. If this function has a section associated with it, use that.
13809    3. Otherwise, use the text section.
13810    XXX: If you split a variable across multiple sections, we won't notice.  */
13811
13812 static const char *
13813 secname_for_decl (const_tree decl)
13814 {
13815   const char *secname;
13816
13817   if (VAR_OR_FUNCTION_DECL_P (decl) && DECL_SECTION_NAME (decl))
13818     {
13819       tree sectree = DECL_SECTION_NAME (decl);
13820       secname = TREE_STRING_POINTER (sectree);
13821     }
13822   else if (current_function_decl && DECL_SECTION_NAME (current_function_decl))
13823     {
13824       tree sectree = DECL_SECTION_NAME (current_function_decl);
13825       secname = TREE_STRING_POINTER (sectree);
13826     }
13827   else if (cfun && in_cold_section_p)
13828     secname = crtl->subsections.cold_section_label;
13829   else
13830     secname = text_section_label;
13831
13832   return secname;
13833 }
13834
13835 /* Return true when DECL_BY_REFERENCE is defined and set for DECL.  */
13836
13837 static bool
13838 decl_by_reference_p (tree decl)
13839 {
13840   return ((TREE_CODE (decl) == PARM_DECL || TREE_CODE (decl) == RESULT_DECL
13841            || TREE_CODE (decl) == VAR_DECL)
13842           && DECL_BY_REFERENCE (decl));
13843 }
13844
13845 /* Return single element location list containing loc descr REF.  */
13846
13847 static dw_loc_list_ref
13848 single_element_loc_list (dw_loc_descr_ref ref)
13849 {
13850   return new_loc_list (ref, NULL, NULL, NULL, 0);
13851 }
13852
13853 /* Helper function for dw_loc_list.  Compute proper Dwarf location descriptor
13854    for VARLOC.  */
13855
13856 static dw_loc_descr_ref
13857 dw_loc_list_1 (tree loc, rtx varloc, int want_address,
13858                enum var_init_status initialized)
13859 {
13860   int have_address = 0;
13861   dw_loc_descr_ref descr;
13862   enum machine_mode mode;
13863
13864   if (want_address != 2)
13865     {
13866       gcc_assert (GET_CODE (varloc) == VAR_LOCATION);
13867       /* Single part.  */
13868       if (GET_CODE (XEXP (varloc, 1)) != PARALLEL)
13869         {
13870           varloc = XEXP (XEXP (varloc, 1), 0);
13871           mode = GET_MODE (varloc);
13872           if (MEM_P (varloc))
13873             {
13874               varloc = XEXP (varloc, 0);
13875               have_address = 1;
13876             }
13877           descr = mem_loc_descriptor (varloc, mode, initialized);
13878         }
13879       else
13880         return 0;
13881     }
13882   else
13883     {
13884       descr = loc_descriptor (varloc, DECL_MODE (loc), initialized);
13885       have_address = 1;
13886     }
13887
13888   if (!descr)
13889     return 0;
13890
13891   if (want_address == 2 && !have_address
13892       && (dwarf_version >= 4 || !dwarf_strict))
13893     {
13894       if (int_size_in_bytes (TREE_TYPE (loc)) > DWARF2_ADDR_SIZE)
13895         {
13896           expansion_failed (loc, NULL_RTX,
13897                             "DWARF address size mismatch");
13898           return 0;
13899         }
13900       add_loc_descr (&descr, new_loc_descr (DW_OP_stack_value, 0, 0));
13901       have_address = 1;
13902     }
13903   /* Show if we can't fill the request for an address.  */
13904   if (want_address && !have_address)
13905     {
13906       expansion_failed (loc, NULL_RTX,
13907                         "Want address and only have value");
13908       return 0;
13909     }
13910
13911   /* If we've got an address and don't want one, dereference.  */
13912   if (!want_address && have_address)
13913     {
13914       HOST_WIDE_INT size = int_size_in_bytes (TREE_TYPE (loc));
13915       enum dwarf_location_atom op;
13916
13917       if (size > DWARF2_ADDR_SIZE || size == -1)
13918         {
13919           expansion_failed (loc, NULL_RTX,
13920                             "DWARF address size mismatch");
13921           return 0;
13922         }
13923       else if (size == DWARF2_ADDR_SIZE)
13924         op = DW_OP_deref;
13925       else
13926         op = DW_OP_deref_size;
13927
13928       add_loc_descr (&descr, new_loc_descr (op, size, 0));
13929     }
13930
13931   return descr;
13932 }
13933
13934 /* Return dwarf representation of location list representing for
13935    LOC_LIST of DECL.  WANT_ADDRESS has the same meaning as in
13936    loc_list_from_tree function.  */
13937
13938 static dw_loc_list_ref
13939 dw_loc_list (var_loc_list * loc_list, tree decl, int want_address)
13940 {
13941   const char *endname, *secname;
13942   dw_loc_list_ref list;
13943   rtx varloc;
13944   enum var_init_status initialized;
13945   struct var_loc_node *node;
13946   dw_loc_descr_ref descr;
13947   char label_id[MAX_ARTIFICIAL_LABEL_BYTES];
13948
13949   /* Now that we know what section we are using for a base,
13950      actually construct the list of locations.
13951      The first location information is what is passed to the
13952      function that creates the location list, and the remaining
13953      locations just get added on to that list.
13954      Note that we only know the start address for a location
13955      (IE location changes), so to build the range, we use
13956      the range [current location start, next location start].
13957      This means we have to special case the last node, and generate
13958      a range of [last location start, end of function label].  */
13959
13960   node = loc_list->first;
13961   secname = secname_for_decl (decl);
13962
13963   if (NOTE_VAR_LOCATION_LOC (node->var_loc_note))
13964     initialized = NOTE_VAR_LOCATION_STATUS (node->var_loc_note);
13965   else
13966     initialized = VAR_INIT_STATUS_INITIALIZED;
13967   varloc = NOTE_VAR_LOCATION (node->var_loc_note);
13968   descr = dw_loc_list_1 (decl, varloc, want_address, initialized);
13969
13970   if (loc_list && loc_list->first != loc_list->last)
13971     list = new_loc_list (descr, node->label, node->next->label, secname, 1);
13972   else
13973     return single_element_loc_list (descr);
13974   node = node->next;
13975
13976   if (!node)
13977     return NULL;
13978
13979   for (; node->next; node = node->next)
13980     if (NOTE_VAR_LOCATION_LOC (node->var_loc_note) != NULL_RTX)
13981       {
13982         /* The variable has a location between NODE->LABEL and
13983            NODE->NEXT->LABEL.  */
13984         initialized = NOTE_VAR_LOCATION_STATUS (node->var_loc_note);
13985         varloc = NOTE_VAR_LOCATION (node->var_loc_note);
13986         descr = dw_loc_list_1 (decl, varloc, want_address, initialized);
13987         add_loc_descr_to_loc_list (&list, descr,
13988                                    node->label, node->next->label, secname);
13989       }
13990
13991   /* If the variable has a location at the last label
13992      it keeps its location until the end of function.  */
13993   if (NOTE_VAR_LOCATION_LOC (node->var_loc_note) != NULL_RTX)
13994     {
13995       if (!current_function_decl)
13996         endname = text_end_label;
13997       else
13998         {
13999           ASM_GENERATE_INTERNAL_LABEL (label_id, FUNC_END_LABEL,
14000                                        current_function_funcdef_no);
14001           endname = ggc_strdup (label_id);
14002         }
14003
14004       initialized = NOTE_VAR_LOCATION_STATUS (node->var_loc_note);
14005       varloc = NOTE_VAR_LOCATION (node->var_loc_note);
14006       descr = dw_loc_list_1 (decl, varloc, want_address, initialized);
14007       add_loc_descr_to_loc_list (&list, descr, node->label, endname, secname);
14008     }
14009   return list;
14010 }
14011
14012 /* Return if the loc_list has only single element and thus can be represented
14013    as location description.   */
14014
14015 static bool
14016 single_element_loc_list_p (dw_loc_list_ref list)
14017 {
14018   return (!list->dw_loc_next && !list->begin && !list->end);
14019 }
14020
14021 /* To each location in list LIST add loc descr REF.  */
14022
14023 static void
14024 add_loc_descr_to_each (dw_loc_list_ref list, dw_loc_descr_ref ref)
14025 {
14026   dw_loc_descr_ref copy;
14027   add_loc_descr (&list->expr, ref);
14028   list = list->dw_loc_next;
14029   while (list)
14030     {
14031       copy = GGC_CNEW (dw_loc_descr_node);
14032       memcpy (copy, ref, sizeof (dw_loc_descr_node));
14033       add_loc_descr (&list->expr, copy);
14034       while (copy->dw_loc_next)
14035         {
14036           dw_loc_descr_ref new_copy = GGC_CNEW (dw_loc_descr_node);
14037           memcpy (new_copy, copy->dw_loc_next, sizeof (dw_loc_descr_node));
14038           copy->dw_loc_next = new_copy;
14039           copy = new_copy;
14040         }
14041       list = list->dw_loc_next;
14042     }
14043 }
14044
14045 /* Given two lists RET and LIST
14046    produce location list that is result of adding expression in LIST
14047    to expression in RET on each possition in program.
14048    Might be destructive on both RET and LIST.
14049
14050    TODO: We handle only simple cases of RET or LIST having at most one
14051    element. General case would inolve sorting the lists in program order
14052    and merging them that will need some additional work.
14053    Adding that will improve quality of debug info especially for SRA-ed
14054    structures.  */
14055
14056 static void
14057 add_loc_list (dw_loc_list_ref *ret, dw_loc_list_ref list)
14058 {
14059   if (!list)
14060     return;
14061   if (!*ret)
14062     {
14063       *ret = list;
14064       return;
14065     }
14066   if (!list->dw_loc_next)
14067     {
14068       add_loc_descr_to_each (*ret, list->expr);
14069       return;
14070     }
14071   if (!(*ret)->dw_loc_next)
14072     {
14073       add_loc_descr_to_each (list, (*ret)->expr);
14074       *ret = list;
14075       return;
14076     }
14077   expansion_failed (NULL_TREE, NULL_RTX,
14078                     "Don't know how to merge two non-trivial"
14079                     " location lists.\n");
14080   *ret = NULL;
14081   return;
14082 }
14083
14084 /* LOC is constant expression.  Try a luck, look it up in constant
14085    pool and return its loc_descr of its address.  */
14086
14087 static dw_loc_descr_ref
14088 cst_pool_loc_descr (tree loc)
14089 {
14090   /* Get an RTL for this, if something has been emitted.  */
14091   rtx rtl = lookup_constant_def (loc);
14092   enum machine_mode mode;
14093
14094   if (!rtl || !MEM_P (rtl))
14095     {
14096       gcc_assert (!rtl);
14097       return 0;
14098     }
14099   gcc_assert (GET_CODE (XEXP (rtl, 0)) == SYMBOL_REF);
14100
14101   /* TODO: We might get more coverage if we was actually delaying expansion
14102      of all expressions till end of compilation when constant pools are fully
14103      populated.  */
14104   if (!TREE_ASM_WRITTEN (SYMBOL_REF_DECL (XEXP (rtl, 0))))
14105     {
14106       expansion_failed (loc, NULL_RTX,
14107                         "CST value in contant pool but not marked.");
14108       return 0;
14109     }
14110   mode = GET_MODE (rtl);
14111   rtl = XEXP (rtl, 0);
14112   return mem_loc_descriptor (rtl, mode, VAR_INIT_STATUS_INITIALIZED);
14113 }
14114
14115 /* Return dw_loc_list representing address of addr_expr LOC
14116    by looking for innder INDIRECT_REF expression and turing it
14117    into simple arithmetics.  */
14118
14119 static dw_loc_list_ref
14120 loc_list_for_address_of_addr_expr_of_indirect_ref (tree loc, bool toplev)
14121 {
14122   tree obj, offset;
14123   HOST_WIDE_INT bitsize, bitpos, bytepos;
14124   enum machine_mode mode;
14125   int volatilep;
14126   int unsignedp = TYPE_UNSIGNED (TREE_TYPE (loc));
14127   dw_loc_list_ref list_ret = NULL, list_ret1 = NULL;
14128
14129   obj = get_inner_reference (TREE_OPERAND (loc, 0),
14130                              &bitsize, &bitpos, &offset, &mode,
14131                              &unsignedp, &volatilep, false);
14132   STRIP_NOPS (obj);
14133   if (bitpos % BITS_PER_UNIT)
14134     {
14135       expansion_failed (loc, NULL_RTX, "bitfield access");
14136       return 0;
14137     }
14138   if (!INDIRECT_REF_P (obj))
14139     {
14140       expansion_failed (obj,
14141                         NULL_RTX, "no indirect ref in inner refrence");
14142       return 0;
14143     }
14144   if (!offset && !bitpos)
14145     list_ret = loc_list_from_tree (TREE_OPERAND (obj, 0), toplev ? 2 : 1);
14146   else if (toplev
14147            && int_size_in_bytes (TREE_TYPE (loc)) <= DWARF2_ADDR_SIZE
14148            && (dwarf_version >= 4 || !dwarf_strict))
14149     {
14150       list_ret = loc_list_from_tree (TREE_OPERAND (obj, 0), 0);
14151       if (!list_ret)
14152         return 0;
14153       if (offset)
14154         {
14155           /* Variable offset.  */
14156           list_ret1 = loc_list_from_tree (offset, 0);
14157           if (list_ret1 == 0)
14158             return 0;
14159           add_loc_list (&list_ret, list_ret1);
14160           if (!list_ret)
14161             return 0;
14162           add_loc_descr_to_each (list_ret,
14163                                  new_loc_descr (DW_OP_plus, 0, 0));
14164         }
14165       bytepos = bitpos / BITS_PER_UNIT;
14166       if (bytepos > 0)
14167         add_loc_descr_to_each (list_ret,
14168                                new_loc_descr (DW_OP_plus_uconst,
14169                                               bytepos, 0));
14170       else if (bytepos < 0)
14171         loc_list_plus_const (list_ret, bytepos);
14172       add_loc_descr_to_each (list_ret,
14173                              new_loc_descr (DW_OP_stack_value, 0, 0));
14174     }
14175   return list_ret;
14176 }
14177
14178
14179 /* Generate Dwarf location list representing LOC.
14180    If WANT_ADDRESS is false, expression computing LOC will be computed
14181    If WANT_ADDRESS is 1, expression computing address of LOC will be returned
14182    if WANT_ADDRESS is 2, expression computing address useable in location
14183      will be returned (i.e. DW_OP_reg can be used
14184      to refer to register values).  */
14185
14186 static dw_loc_list_ref
14187 loc_list_from_tree (tree loc, int want_address)
14188 {
14189   dw_loc_descr_ref ret = NULL, ret1 = NULL;
14190   dw_loc_list_ref list_ret = NULL, list_ret1 = NULL;
14191   int have_address = 0;
14192   enum dwarf_location_atom op;
14193
14194   /* ??? Most of the time we do not take proper care for sign/zero
14195      extending the values properly.  Hopefully this won't be a real
14196      problem...  */
14197
14198   switch (TREE_CODE (loc))
14199     {
14200     case ERROR_MARK:
14201       expansion_failed (loc, NULL_RTX, "ERROR_MARK");
14202       return 0;
14203
14204     case PLACEHOLDER_EXPR:
14205       /* This case involves extracting fields from an object to determine the
14206          position of other fields.  We don't try to encode this here.  The
14207          only user of this is Ada, which encodes the needed information using
14208          the names of types.  */
14209       expansion_failed (loc, NULL_RTX, "PLACEHOLDER_EXPR");
14210       return 0;
14211
14212     case CALL_EXPR:
14213       expansion_failed (loc, NULL_RTX, "CALL_EXPR");
14214       /* There are no opcodes for these operations.  */
14215       return 0;
14216
14217     case PREINCREMENT_EXPR:
14218     case PREDECREMENT_EXPR:
14219     case POSTINCREMENT_EXPR:
14220     case POSTDECREMENT_EXPR:
14221       expansion_failed (loc, NULL_RTX, "PRE/POST INDCREMENT/DECREMENT");
14222       /* There are no opcodes for these operations.  */
14223       return 0;
14224
14225     case ADDR_EXPR:
14226       /* If we already want an address, see if there is INDIRECT_REF inside
14227          e.g. for &this->field.  */
14228       if (want_address)
14229         {
14230           list_ret = loc_list_for_address_of_addr_expr_of_indirect_ref
14231                        (loc, want_address == 2);
14232           if (list_ret)
14233             have_address = 1;
14234           else if (decl_address_ip_invariant_p (TREE_OPERAND (loc, 0))
14235                    && (ret = cst_pool_loc_descr (loc)))
14236             have_address = 1;
14237         }
14238         /* Otherwise, process the argument and look for the address.  */
14239       if (!list_ret && !ret)
14240         list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 1);
14241       else
14242         {
14243           if (want_address)
14244             expansion_failed (loc, NULL_RTX, "need address of ADDR_EXPR");
14245           return NULL;
14246         }
14247       break;
14248
14249     case VAR_DECL:
14250       if (DECL_THREAD_LOCAL_P (loc))
14251         {
14252           rtx rtl;
14253           enum dwarf_location_atom first_op;
14254           enum dwarf_location_atom second_op;
14255           bool dtprel = false;
14256
14257           if (targetm.have_tls)
14258             {
14259               /* If this is not defined, we have no way to emit the
14260                  data.  */
14261               if (!targetm.asm_out.output_dwarf_dtprel)
14262                 return 0;
14263
14264                /* The way DW_OP_GNU_push_tls_address is specified, we
14265                   can only look up addresses of objects in the current
14266                   module.  */
14267               if (DECL_EXTERNAL (loc) && !targetm.binds_local_p (loc))
14268                 return 0;
14269               first_op = DW_OP_addr;
14270               dtprel = true;
14271               second_op = DW_OP_GNU_push_tls_address;
14272             }
14273           else
14274             {
14275               if (!targetm.emutls.debug_form_tls_address
14276                   || !(dwarf_version >= 3 || !dwarf_strict))
14277                 return 0;
14278               loc = emutls_decl (loc);
14279               first_op = DW_OP_addr;
14280               second_op = DW_OP_form_tls_address;
14281             }
14282
14283           rtl = rtl_for_decl_location (loc);
14284           if (rtl == NULL_RTX)
14285             return 0;
14286
14287           if (!MEM_P (rtl))
14288             return 0;
14289           rtl = XEXP (rtl, 0);
14290           if (! CONSTANT_P (rtl))
14291             return 0;
14292
14293           ret = new_loc_descr (first_op, 0, 0);
14294           ret->dw_loc_oprnd1.val_class = dw_val_class_addr;
14295           ret->dw_loc_oprnd1.v.val_addr = rtl;
14296           ret->dtprel = dtprel;
14297
14298           ret1 = new_loc_descr (second_op, 0, 0);
14299           add_loc_descr (&ret, ret1);
14300
14301           have_address = 1;
14302           break;
14303         }
14304       /* FALLTHRU */
14305
14306     case PARM_DECL:
14307       if (DECL_HAS_VALUE_EXPR_P (loc))
14308         return loc_list_from_tree (DECL_VALUE_EXPR (loc),
14309                                    want_address);
14310       /* FALLTHRU */
14311
14312     case RESULT_DECL:
14313     case FUNCTION_DECL:
14314       {
14315         rtx rtl;
14316         var_loc_list *loc_list = lookup_decl_loc (loc);
14317
14318         if (loc_list && loc_list->first
14319             && (list_ret = dw_loc_list (loc_list, loc, want_address)))
14320           {
14321             have_address = want_address != 0;
14322             break;
14323           }
14324         rtl = rtl_for_decl_location (loc);
14325         if (rtl == NULL_RTX)
14326           {
14327             expansion_failed (loc, NULL_RTX, "DECL has no RTL");
14328             return 0;
14329           }
14330         else if (CONST_INT_P (rtl))
14331           {
14332             HOST_WIDE_INT val = INTVAL (rtl);
14333             if (TYPE_UNSIGNED (TREE_TYPE (loc)))
14334               val &= GET_MODE_MASK (DECL_MODE (loc));
14335             ret = int_loc_descriptor (val);
14336           }
14337         else if (GET_CODE (rtl) == CONST_STRING)
14338           {
14339             expansion_failed (loc, NULL_RTX, "CONST_STRING");
14340             return 0;
14341           }
14342         else if (CONSTANT_P (rtl) && const_ok_for_output (rtl))
14343           {
14344             ret = new_loc_descr (DW_OP_addr, 0, 0);
14345             ret->dw_loc_oprnd1.val_class = dw_val_class_addr;
14346             ret->dw_loc_oprnd1.v.val_addr = rtl;
14347           }
14348         else
14349           {
14350             enum machine_mode mode;
14351
14352             /* Certain constructs can only be represented at top-level.  */
14353             if (want_address == 2)
14354               {
14355                 ret = loc_descriptor (rtl, VOIDmode,
14356                                       VAR_INIT_STATUS_INITIALIZED);
14357                 have_address = 1;
14358               }
14359             else
14360               {
14361                 mode = GET_MODE (rtl);
14362                 if (MEM_P (rtl))
14363                   {
14364                     rtl = XEXP (rtl, 0);
14365                     have_address = 1;
14366                   }
14367                 ret = mem_loc_descriptor (rtl, mode, VAR_INIT_STATUS_INITIALIZED);
14368               }
14369             if (!ret)
14370               expansion_failed (loc, rtl,
14371                                 "failed to produce loc descriptor for rtl");
14372           }
14373       }
14374       break;
14375
14376     case INDIRECT_REF:
14377     case ALIGN_INDIRECT_REF:
14378     case MISALIGNED_INDIRECT_REF:
14379       list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 0);
14380       have_address = 1;
14381       break;
14382
14383     case COMPOUND_EXPR:
14384       return loc_list_from_tree (TREE_OPERAND (loc, 1), want_address);
14385
14386     CASE_CONVERT:
14387     case VIEW_CONVERT_EXPR:
14388     case SAVE_EXPR:
14389     case MODIFY_EXPR:
14390       return loc_list_from_tree (TREE_OPERAND (loc, 0), want_address);
14391
14392     case COMPONENT_REF:
14393     case BIT_FIELD_REF:
14394     case ARRAY_REF:
14395     case ARRAY_RANGE_REF:
14396     case REALPART_EXPR:
14397     case IMAGPART_EXPR:
14398       {
14399         tree obj, offset;
14400         HOST_WIDE_INT bitsize, bitpos, bytepos;
14401         enum machine_mode mode;
14402         int volatilep;
14403         int unsignedp = TYPE_UNSIGNED (TREE_TYPE (loc));
14404
14405         obj = get_inner_reference (loc, &bitsize, &bitpos, &offset, &mode,
14406                                    &unsignedp, &volatilep, false);
14407
14408         gcc_assert (obj != loc);
14409
14410         list_ret = loc_list_from_tree (obj,
14411                                        want_address == 2
14412                                        && !bitpos && !offset ? 2 : 1);
14413         /* TODO: We can extract value of the small expression via shifting even
14414            for nonzero bitpos.  */
14415         if (list_ret == 0)
14416           return 0;
14417         if (bitpos % BITS_PER_UNIT != 0 || bitsize % BITS_PER_UNIT != 0)
14418           {
14419             expansion_failed (loc, NULL_RTX,
14420                               "bitfield access");
14421             return 0;
14422           }
14423
14424         if (offset != NULL_TREE)
14425           {
14426             /* Variable offset.  */
14427             list_ret1 = loc_list_from_tree (offset, 0);
14428             if (list_ret1 == 0)
14429               return 0;
14430             add_loc_list (&list_ret, list_ret1);
14431             if (!list_ret)
14432               return 0;
14433             add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_plus, 0, 0));
14434           }
14435
14436         bytepos = bitpos / BITS_PER_UNIT;
14437         if (bytepos > 0)
14438           add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_plus_uconst, bytepos, 0));
14439         else if (bytepos < 0)
14440           loc_list_plus_const (list_ret, bytepos);
14441
14442         have_address = 1;
14443         break;
14444       }
14445
14446     case INTEGER_CST:
14447       if ((want_address || !host_integerp (loc, 0))
14448           && (ret = cst_pool_loc_descr (loc)))
14449         have_address = 1;
14450       else if (want_address == 2
14451                && host_integerp (loc, 0)
14452                && (ret = address_of_int_loc_descriptor
14453                            (int_size_in_bytes (TREE_TYPE (loc)),
14454                             tree_low_cst (loc, 0))))
14455         have_address = 1;
14456       else if (host_integerp (loc, 0))
14457         ret = int_loc_descriptor (tree_low_cst (loc, 0));
14458       else
14459         {
14460           expansion_failed (loc, NULL_RTX,
14461                             "Integer operand is not host integer");
14462           return 0;
14463         }
14464       break;
14465
14466     case CONSTRUCTOR:
14467     case REAL_CST:
14468     case STRING_CST:
14469     case COMPLEX_CST:
14470       if ((ret = cst_pool_loc_descr (loc)))
14471         have_address = 1;
14472       else
14473       /* We can construct small constants here using int_loc_descriptor.  */
14474         expansion_failed (loc, NULL_RTX,
14475                           "constructor or constant not in constant pool");
14476       break;
14477
14478     case TRUTH_AND_EXPR:
14479     case TRUTH_ANDIF_EXPR:
14480     case BIT_AND_EXPR:
14481       op = DW_OP_and;
14482       goto do_binop;
14483
14484     case TRUTH_XOR_EXPR:
14485     case BIT_XOR_EXPR:
14486       op = DW_OP_xor;
14487       goto do_binop;
14488
14489     case TRUTH_OR_EXPR:
14490     case TRUTH_ORIF_EXPR:
14491     case BIT_IOR_EXPR:
14492       op = DW_OP_or;
14493       goto do_binop;
14494
14495     case FLOOR_DIV_EXPR:
14496     case CEIL_DIV_EXPR:
14497     case ROUND_DIV_EXPR:
14498     case TRUNC_DIV_EXPR:
14499       op = DW_OP_div;
14500       goto do_binop;
14501
14502     case MINUS_EXPR:
14503       op = DW_OP_minus;
14504       goto do_binop;
14505
14506     case FLOOR_MOD_EXPR:
14507     case CEIL_MOD_EXPR:
14508     case ROUND_MOD_EXPR:
14509     case TRUNC_MOD_EXPR:
14510       op = DW_OP_mod;
14511       goto do_binop;
14512
14513     case MULT_EXPR:
14514       op = DW_OP_mul;
14515       goto do_binop;
14516
14517     case LSHIFT_EXPR:
14518       op = DW_OP_shl;
14519       goto do_binop;
14520
14521     case RSHIFT_EXPR:
14522       op = (TYPE_UNSIGNED (TREE_TYPE (loc)) ? DW_OP_shr : DW_OP_shra);
14523       goto do_binop;
14524
14525     case POINTER_PLUS_EXPR:
14526     case PLUS_EXPR:
14527       if (TREE_CODE (TREE_OPERAND (loc, 1)) == INTEGER_CST
14528           && host_integerp (TREE_OPERAND (loc, 1), 0))
14529         {
14530           list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 0);
14531           if (list_ret == 0)
14532             return 0;
14533
14534           loc_list_plus_const (list_ret, tree_low_cst (TREE_OPERAND (loc, 1), 0));
14535           break;
14536         }
14537
14538       op = DW_OP_plus;
14539       goto do_binop;
14540
14541     case LE_EXPR:
14542       if (TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (loc, 0))))
14543         return 0;
14544
14545       op = DW_OP_le;
14546       goto do_binop;
14547
14548     case GE_EXPR:
14549       if (TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (loc, 0))))
14550         return 0;
14551
14552       op = DW_OP_ge;
14553       goto do_binop;
14554
14555     case LT_EXPR:
14556       if (TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (loc, 0))))
14557         return 0;
14558
14559       op = DW_OP_lt;
14560       goto do_binop;
14561
14562     case GT_EXPR:
14563       if (TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (loc, 0))))
14564         return 0;
14565
14566       op = DW_OP_gt;
14567       goto do_binop;
14568
14569     case EQ_EXPR:
14570       op = DW_OP_eq;
14571       goto do_binop;
14572
14573     case NE_EXPR:
14574       op = DW_OP_ne;
14575       goto do_binop;
14576
14577     do_binop:
14578       list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 0);
14579       list_ret1 = loc_list_from_tree (TREE_OPERAND (loc, 1), 0);
14580       if (list_ret == 0 || list_ret1 == 0)
14581         return 0;
14582
14583       add_loc_list (&list_ret, list_ret1);
14584       if (list_ret == 0)
14585         return 0;
14586       add_loc_descr_to_each (list_ret, new_loc_descr (op, 0, 0));
14587       break;
14588
14589     case TRUTH_NOT_EXPR:
14590     case BIT_NOT_EXPR:
14591       op = DW_OP_not;
14592       goto do_unop;
14593
14594     case ABS_EXPR:
14595       op = DW_OP_abs;
14596       goto do_unop;
14597
14598     case NEGATE_EXPR:
14599       op = DW_OP_neg;
14600       goto do_unop;
14601
14602     do_unop:
14603       list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 0);
14604       if (list_ret == 0)
14605         return 0;
14606
14607       add_loc_descr_to_each (list_ret, new_loc_descr (op, 0, 0));
14608       break;
14609
14610     case MIN_EXPR:
14611     case MAX_EXPR:
14612       {
14613         const enum tree_code code =
14614           TREE_CODE (loc) == MIN_EXPR ? GT_EXPR : LT_EXPR;
14615
14616         loc = build3 (COND_EXPR, TREE_TYPE (loc),
14617                       build2 (code, integer_type_node,
14618                               TREE_OPERAND (loc, 0), TREE_OPERAND (loc, 1)),
14619                       TREE_OPERAND (loc, 1), TREE_OPERAND (loc, 0));
14620       }
14621
14622       /* ... fall through ...  */
14623
14624     case COND_EXPR:
14625       {
14626         dw_loc_descr_ref lhs
14627           = loc_descriptor_from_tree (TREE_OPERAND (loc, 1), 0);
14628         dw_loc_list_ref rhs
14629           = loc_list_from_tree (TREE_OPERAND (loc, 2), 0);
14630         dw_loc_descr_ref bra_node, jump_node, tmp;
14631
14632         list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 0);
14633         if (list_ret == 0 || lhs == 0 || rhs == 0)
14634           return 0;
14635
14636         bra_node = new_loc_descr (DW_OP_bra, 0, 0);
14637         add_loc_descr_to_each (list_ret, bra_node);
14638
14639         add_loc_list (&list_ret, rhs);
14640         jump_node = new_loc_descr (DW_OP_skip, 0, 0);
14641         add_loc_descr_to_each (list_ret, jump_node);
14642
14643         add_loc_descr_to_each (list_ret, lhs);
14644         bra_node->dw_loc_oprnd1.val_class = dw_val_class_loc;
14645         bra_node->dw_loc_oprnd1.v.val_loc = lhs;
14646
14647         /* ??? Need a node to point the skip at.  Use a nop.  */
14648         tmp = new_loc_descr (DW_OP_nop, 0, 0);
14649         add_loc_descr_to_each (list_ret, tmp);
14650         jump_node->dw_loc_oprnd1.val_class = dw_val_class_loc;
14651         jump_node->dw_loc_oprnd1.v.val_loc = tmp;
14652       }
14653       break;
14654
14655     case FIX_TRUNC_EXPR:
14656       return 0;
14657
14658     default:
14659       /* Leave front-end specific codes as simply unknown.  This comes
14660          up, for instance, with the C STMT_EXPR.  */
14661       if ((unsigned int) TREE_CODE (loc)
14662           >= (unsigned int) LAST_AND_UNUSED_TREE_CODE)
14663         {
14664           expansion_failed (loc, NULL_RTX,
14665                             "language specific tree node");
14666           return 0;
14667         }
14668
14669 #ifdef ENABLE_CHECKING
14670       /* Otherwise this is a generic code; we should just lists all of
14671          these explicitly.  We forgot one.  */
14672       gcc_unreachable ();
14673 #else
14674       /* In a release build, we want to degrade gracefully: better to
14675          generate incomplete debugging information than to crash.  */
14676       return NULL;
14677 #endif
14678     }
14679
14680   if (!ret && !list_ret)
14681     return 0;
14682
14683   if (want_address == 2 && !have_address
14684       && (dwarf_version >= 4 || !dwarf_strict))
14685     {
14686       if (int_size_in_bytes (TREE_TYPE (loc)) > DWARF2_ADDR_SIZE)
14687         {
14688           expansion_failed (loc, NULL_RTX,
14689                             "DWARF address size mismatch");
14690           return 0;
14691         }
14692       if (ret)
14693         add_loc_descr (&ret, new_loc_descr (DW_OP_stack_value, 0, 0));
14694       else
14695         add_loc_descr_to_each (list_ret,
14696                                new_loc_descr (DW_OP_stack_value, 0, 0));
14697       have_address = 1;
14698     }
14699   /* Show if we can't fill the request for an address.  */
14700   if (want_address && !have_address)
14701     {
14702       expansion_failed (loc, NULL_RTX,
14703                         "Want address and only have value");
14704       return 0;
14705     }
14706
14707   gcc_assert (!ret || !list_ret);
14708
14709   /* If we've got an address and don't want one, dereference.  */
14710   if (!want_address && have_address)
14711     {
14712       HOST_WIDE_INT size = int_size_in_bytes (TREE_TYPE (loc));
14713
14714       if (size > DWARF2_ADDR_SIZE || size == -1)
14715         {
14716           expansion_failed (loc, NULL_RTX,
14717                             "DWARF address size mismatch");
14718           return 0;
14719         }
14720       else if (size == DWARF2_ADDR_SIZE)
14721         op = DW_OP_deref;
14722       else
14723         op = DW_OP_deref_size;
14724
14725       if (ret)
14726         add_loc_descr (&ret, new_loc_descr (op, size, 0));
14727       else
14728         add_loc_descr_to_each (list_ret, new_loc_descr (op, size, 0));
14729     }
14730   if (ret)
14731     list_ret = single_element_loc_list (ret);
14732
14733   return list_ret;
14734 }
14735
14736 /* Same as above but return only single location expression.  */
14737 static dw_loc_descr_ref
14738 loc_descriptor_from_tree (tree loc, int want_address)
14739 {
14740   dw_loc_list_ref ret = loc_list_from_tree (loc, want_address);
14741   if (!ret)
14742     return NULL;
14743   if (ret->dw_loc_next)
14744     {
14745       expansion_failed (loc, NULL_RTX,
14746                         "Location list where only loc descriptor needed");
14747       return NULL;
14748     }
14749   return ret->expr;
14750 }
14751
14752 /* Given a value, round it up to the lowest multiple of `boundary'
14753    which is not less than the value itself.  */
14754
14755 static inline HOST_WIDE_INT
14756 ceiling (HOST_WIDE_INT value, unsigned int boundary)
14757 {
14758   return (((value + boundary - 1) / boundary) * boundary);
14759 }
14760
14761 /* Given a pointer to what is assumed to be a FIELD_DECL node, return a
14762    pointer to the declared type for the relevant field variable, or return
14763    `integer_type_node' if the given node turns out to be an
14764    ERROR_MARK node.  */
14765
14766 static inline tree
14767 field_type (const_tree decl)
14768 {
14769   tree type;
14770
14771   if (TREE_CODE (decl) == ERROR_MARK)
14772     return integer_type_node;
14773
14774   type = DECL_BIT_FIELD_TYPE (decl);
14775   if (type == NULL_TREE)
14776     type = TREE_TYPE (decl);
14777
14778   return type;
14779 }
14780
14781 /* Given a pointer to a tree node, return the alignment in bits for
14782    it, or else return BITS_PER_WORD if the node actually turns out to
14783    be an ERROR_MARK node.  */
14784
14785 static inline unsigned
14786 simple_type_align_in_bits (const_tree type)
14787 {
14788   return (TREE_CODE (type) != ERROR_MARK) ? TYPE_ALIGN (type) : BITS_PER_WORD;
14789 }
14790
14791 static inline unsigned
14792 simple_decl_align_in_bits (const_tree decl)
14793 {
14794   return (TREE_CODE (decl) != ERROR_MARK) ? DECL_ALIGN (decl) : BITS_PER_WORD;
14795 }
14796
14797 /* Return the result of rounding T up to ALIGN.  */
14798
14799 static inline HOST_WIDE_INT
14800 round_up_to_align (HOST_WIDE_INT t, unsigned int align)
14801 {
14802   /* We must be careful if T is negative because HOST_WIDE_INT can be
14803      either "above" or "below" unsigned int as per the C promotion
14804      rules, depending on the host, thus making the signedness of the
14805      direct multiplication and division unpredictable.  */
14806   unsigned HOST_WIDE_INT u = (unsigned HOST_WIDE_INT) t;
14807
14808   u += align - 1;
14809   u /= align;
14810   u *= align;
14811
14812   return (HOST_WIDE_INT) u;
14813 }
14814
14815 /* Given a pointer to a FIELD_DECL, compute and return the byte offset of the
14816    lowest addressed byte of the "containing object" for the given FIELD_DECL,
14817    or return 0 if we are unable to determine what that offset is, either
14818    because the argument turns out to be a pointer to an ERROR_MARK node, or
14819    because the offset is actually variable.  (We can't handle the latter case
14820    just yet).  */
14821
14822 static HOST_WIDE_INT
14823 field_byte_offset (const_tree decl)
14824 {
14825   HOST_WIDE_INT object_offset_in_bits;
14826   HOST_WIDE_INT bitpos_int;
14827
14828   if (TREE_CODE (decl) == ERROR_MARK)
14829     return 0;
14830
14831   gcc_assert (TREE_CODE (decl) == FIELD_DECL);
14832
14833   /* We cannot yet cope with fields whose positions are variable, so
14834      for now, when we see such things, we simply return 0.  Someday, we may
14835      be able to handle such cases, but it will be damn difficult.  */
14836   if (! host_integerp (bit_position (decl), 0))
14837     return 0;
14838
14839   bitpos_int = int_bit_position (decl);
14840
14841 #ifdef PCC_BITFIELD_TYPE_MATTERS
14842   if (PCC_BITFIELD_TYPE_MATTERS)
14843     {
14844       tree type;
14845       tree field_size_tree;
14846       HOST_WIDE_INT deepest_bitpos;
14847       unsigned HOST_WIDE_INT field_size_in_bits;
14848       unsigned int type_align_in_bits;
14849       unsigned int decl_align_in_bits;
14850       unsigned HOST_WIDE_INT type_size_in_bits;
14851
14852       type = field_type (decl);
14853       type_size_in_bits = simple_type_size_in_bits (type);
14854       type_align_in_bits = simple_type_align_in_bits (type);
14855
14856       field_size_tree = DECL_SIZE (decl);
14857
14858       /* The size could be unspecified if there was an error, or for
14859          a flexible array member.  */
14860       if (!field_size_tree)
14861         field_size_tree = bitsize_zero_node;
14862
14863       /* If the size of the field is not constant, use the type size.  */
14864       if (host_integerp (field_size_tree, 1))
14865         field_size_in_bits = tree_low_cst (field_size_tree, 1);
14866       else
14867         field_size_in_bits = type_size_in_bits;
14868
14869       decl_align_in_bits = simple_decl_align_in_bits (decl);
14870
14871       /* The GCC front-end doesn't make any attempt to keep track of the
14872          starting bit offset (relative to the start of the containing
14873          structure type) of the hypothetical "containing object" for a
14874          bit-field.  Thus, when computing the byte offset value for the
14875          start of the "containing object" of a bit-field, we must deduce
14876          this information on our own. This can be rather tricky to do in
14877          some cases.  For example, handling the following structure type
14878          definition when compiling for an i386/i486 target (which only
14879          aligns long long's to 32-bit boundaries) can be very tricky:
14880
14881          struct S { int field1; long long field2:31; };
14882
14883          Fortunately, there is a simple rule-of-thumb which can be used
14884          in such cases.  When compiling for an i386/i486, GCC will
14885          allocate 8 bytes for the structure shown above.  It decides to
14886          do this based upon one simple rule for bit-field allocation.
14887          GCC allocates each "containing object" for each bit-field at
14888          the first (i.e. lowest addressed) legitimate alignment boundary
14889          (based upon the required minimum alignment for the declared
14890          type of the field) which it can possibly use, subject to the
14891          condition that there is still enough available space remaining
14892          in the containing object (when allocated at the selected point)
14893          to fully accommodate all of the bits of the bit-field itself.
14894
14895          This simple rule makes it obvious why GCC allocates 8 bytes for
14896          each object of the structure type shown above.  When looking
14897          for a place to allocate the "containing object" for `field2',
14898          the compiler simply tries to allocate a 64-bit "containing
14899          object" at each successive 32-bit boundary (starting at zero)
14900          until it finds a place to allocate that 64- bit field such that
14901          at least 31 contiguous (and previously unallocated) bits remain
14902          within that selected 64 bit field.  (As it turns out, for the
14903          example above, the compiler finds it is OK to allocate the
14904          "containing object" 64-bit field at bit-offset zero within the
14905          structure type.)
14906
14907          Here we attempt to work backwards from the limited set of facts
14908          we're given, and we try to deduce from those facts, where GCC
14909          must have believed that the containing object started (within
14910          the structure type). The value we deduce is then used (by the
14911          callers of this routine) to generate DW_AT_location and
14912          DW_AT_bit_offset attributes for fields (both bit-fields and, in
14913          the case of DW_AT_location, regular fields as well).  */
14914
14915       /* Figure out the bit-distance from the start of the structure to
14916          the "deepest" bit of the bit-field.  */
14917       deepest_bitpos = bitpos_int + field_size_in_bits;
14918
14919       /* This is the tricky part.  Use some fancy footwork to deduce
14920          where the lowest addressed bit of the containing object must
14921          be.  */
14922       object_offset_in_bits = deepest_bitpos - type_size_in_bits;
14923
14924       /* Round up to type_align by default.  This works best for
14925          bitfields.  */
14926       object_offset_in_bits
14927         = round_up_to_align (object_offset_in_bits, type_align_in_bits);
14928
14929       if (object_offset_in_bits > bitpos_int)
14930         {
14931           object_offset_in_bits = deepest_bitpos - type_size_in_bits;
14932
14933           /* Round up to decl_align instead.  */
14934           object_offset_in_bits
14935             = round_up_to_align (object_offset_in_bits, decl_align_in_bits);
14936         }
14937     }
14938   else
14939 #endif
14940     object_offset_in_bits = bitpos_int;
14941
14942   return object_offset_in_bits / BITS_PER_UNIT;
14943 }
14944 \f
14945 /* The following routines define various Dwarf attributes and any data
14946    associated with them.  */
14947
14948 /* Add a location description attribute value to a DIE.
14949
14950    This emits location attributes suitable for whole variables and
14951    whole parameters.  Note that the location attributes for struct fields are
14952    generated by the routine `data_member_location_attribute' below.  */
14953
14954 static inline void
14955 add_AT_location_description (dw_die_ref die, enum dwarf_attribute attr_kind,
14956                              dw_loc_list_ref descr)
14957 {
14958   if (descr == 0)
14959     return;
14960   if (single_element_loc_list_p (descr))
14961     add_AT_loc (die, attr_kind, descr->expr);
14962   else
14963     add_AT_loc_list (die, attr_kind, descr);
14964 }
14965
14966 /* Attach the specialized form of location attribute used for data members of
14967    struct and union types.  In the special case of a FIELD_DECL node which
14968    represents a bit-field, the "offset" part of this special location
14969    descriptor must indicate the distance in bytes from the lowest-addressed
14970    byte of the containing struct or union type to the lowest-addressed byte of
14971    the "containing object" for the bit-field.  (See the `field_byte_offset'
14972    function above).
14973
14974    For any given bit-field, the "containing object" is a hypothetical object
14975    (of some integral or enum type) within which the given bit-field lives.  The
14976    type of this hypothetical "containing object" is always the same as the
14977    declared type of the individual bit-field itself (for GCC anyway... the
14978    DWARF spec doesn't actually mandate this).  Note that it is the size (in
14979    bytes) of the hypothetical "containing object" which will be given in the
14980    DW_AT_byte_size attribute for this bit-field.  (See the
14981    `byte_size_attribute' function below.)  It is also used when calculating the
14982    value of the DW_AT_bit_offset attribute.  (See the `bit_offset_attribute'
14983    function below.)  */
14984
14985 static void
14986 add_data_member_location_attribute (dw_die_ref die, tree decl)
14987 {
14988   HOST_WIDE_INT offset;
14989   dw_loc_descr_ref loc_descr = 0;
14990
14991   if (TREE_CODE (decl) == TREE_BINFO)
14992     {
14993       /* We're working on the TAG_inheritance for a base class.  */
14994       if (BINFO_VIRTUAL_P (decl) && is_cxx ())
14995         {
14996           /* For C++ virtual bases we can't just use BINFO_OFFSET, as they
14997              aren't at a fixed offset from all (sub)objects of the same
14998              type.  We need to extract the appropriate offset from our
14999              vtable.  The following dwarf expression means
15000
15001                BaseAddr = ObAddr + *((*ObAddr) - Offset)
15002
15003              This is specific to the V3 ABI, of course.  */
15004
15005           dw_loc_descr_ref tmp;
15006
15007           /* Make a copy of the object address.  */
15008           tmp = new_loc_descr (DW_OP_dup, 0, 0);
15009           add_loc_descr (&loc_descr, tmp);
15010
15011           /* Extract the vtable address.  */
15012           tmp = new_loc_descr (DW_OP_deref, 0, 0);
15013           add_loc_descr (&loc_descr, tmp);
15014
15015           /* Calculate the address of the offset.  */
15016           offset = tree_low_cst (BINFO_VPTR_FIELD (decl), 0);
15017           gcc_assert (offset < 0);
15018
15019           tmp = int_loc_descriptor (-offset);
15020           add_loc_descr (&loc_descr, tmp);
15021           tmp = new_loc_descr (DW_OP_minus, 0, 0);
15022           add_loc_descr (&loc_descr, tmp);
15023
15024           /* Extract the offset.  */
15025           tmp = new_loc_descr (DW_OP_deref, 0, 0);
15026           add_loc_descr (&loc_descr, tmp);
15027
15028           /* Add it to the object address.  */
15029           tmp = new_loc_descr (DW_OP_plus, 0, 0);
15030           add_loc_descr (&loc_descr, tmp);
15031         }
15032       else
15033         offset = tree_low_cst (BINFO_OFFSET (decl), 0);
15034     }
15035   else
15036     offset = field_byte_offset (decl);
15037
15038   if (! loc_descr)
15039     {
15040       if (dwarf_version > 2)
15041         {
15042           /* Don't need to output a location expression, just the constant. */
15043           add_AT_int (die, DW_AT_data_member_location, offset);
15044           return;
15045         }
15046       else
15047         {
15048           enum dwarf_location_atom op;
15049
15050           /* The DWARF2 standard says that we should assume that the structure
15051              address is already on the stack, so we can specify a structure
15052              field address by using DW_OP_plus_uconst.  */
15053
15054 #ifdef MIPS_DEBUGGING_INFO
15055           /* ??? The SGI dwarf reader does not handle the DW_OP_plus_uconst
15056              operator correctly.  It works only if we leave the offset on the
15057              stack.  */
15058           op = DW_OP_constu;
15059 #else
15060           op = DW_OP_plus_uconst;
15061 #endif
15062
15063           loc_descr = new_loc_descr (op, offset, 0);
15064         }
15065     }
15066
15067   add_AT_loc (die, DW_AT_data_member_location, loc_descr);
15068 }
15069
15070 /* Writes integer values to dw_vec_const array.  */
15071
15072 static void
15073 insert_int (HOST_WIDE_INT val, unsigned int size, unsigned char *dest)
15074 {
15075   while (size != 0)
15076     {
15077       *dest++ = val & 0xff;
15078       val >>= 8;
15079       --size;
15080     }
15081 }
15082
15083 /* Reads integers from dw_vec_const array.  Inverse of insert_int.  */
15084
15085 static HOST_WIDE_INT
15086 extract_int (const unsigned char *src, unsigned int size)
15087 {
15088   HOST_WIDE_INT val = 0;
15089
15090   src += size;
15091   while (size != 0)
15092     {
15093       val <<= 8;
15094       val |= *--src & 0xff;
15095       --size;
15096     }
15097   return val;
15098 }
15099
15100 /* Writes floating point values to dw_vec_const array.  */
15101
15102 static void
15103 insert_float (const_rtx rtl, unsigned char *array)
15104 {
15105   REAL_VALUE_TYPE rv;
15106   long val[4];
15107   int i;
15108
15109   REAL_VALUE_FROM_CONST_DOUBLE (rv, rtl);
15110   real_to_target (val, &rv, GET_MODE (rtl));
15111
15112   /* real_to_target puts 32-bit pieces in each long.  Pack them.  */
15113   for (i = 0; i < GET_MODE_SIZE (GET_MODE (rtl)) / 4; i++)
15114     {
15115       insert_int (val[i], 4, array);
15116       array += 4;
15117     }
15118 }
15119
15120 /* Attach a DW_AT_const_value attribute for a variable or a parameter which
15121    does not have a "location" either in memory or in a register.  These
15122    things can arise in GNU C when a constant is passed as an actual parameter
15123    to an inlined function.  They can also arise in C++ where declared
15124    constants do not necessarily get memory "homes".  */
15125
15126 static bool
15127 add_const_value_attribute (dw_die_ref die, rtx rtl)
15128 {
15129   switch (GET_CODE (rtl))
15130     {
15131     case CONST_INT:
15132       {
15133         HOST_WIDE_INT val = INTVAL (rtl);
15134
15135         if (val < 0)
15136           add_AT_int (die, DW_AT_const_value, val);
15137         else
15138           add_AT_unsigned (die, DW_AT_const_value, (unsigned HOST_WIDE_INT) val);
15139       }
15140       return true;
15141
15142     case CONST_DOUBLE:
15143       /* Note that a CONST_DOUBLE rtx could represent either an integer or a
15144          floating-point constant.  A CONST_DOUBLE is used whenever the
15145          constant requires more than one word in order to be adequately
15146          represented.  */
15147       {
15148         enum machine_mode mode = GET_MODE (rtl);
15149
15150         if (SCALAR_FLOAT_MODE_P (mode))
15151           {
15152             unsigned int length = GET_MODE_SIZE (mode);
15153             unsigned char *array = GGC_NEWVEC (unsigned char, length);
15154
15155             insert_float (rtl, array);
15156             add_AT_vec (die, DW_AT_const_value, length / 4, 4, array);
15157           }
15158         else
15159           add_AT_double (die, DW_AT_const_value,
15160                          CONST_DOUBLE_HIGH (rtl), CONST_DOUBLE_LOW (rtl));
15161       }
15162       return true;
15163
15164     case CONST_VECTOR:
15165       {
15166         enum machine_mode mode = GET_MODE (rtl);
15167         unsigned int elt_size = GET_MODE_UNIT_SIZE (mode);
15168         unsigned int length = CONST_VECTOR_NUNITS (rtl);
15169         unsigned char *array = GGC_NEWVEC (unsigned char, length * elt_size);
15170         unsigned int i;
15171         unsigned char *p;
15172
15173         switch (GET_MODE_CLASS (mode))
15174           {
15175           case MODE_VECTOR_INT:
15176             for (i = 0, p = array; i < length; i++, p += elt_size)
15177               {
15178                 rtx elt = CONST_VECTOR_ELT (rtl, i);
15179                 HOST_WIDE_INT lo, hi;
15180
15181                 switch (GET_CODE (elt))
15182                   {
15183                   case CONST_INT:
15184                     lo = INTVAL (elt);
15185                     hi = -(lo < 0);
15186                     break;
15187
15188                   case CONST_DOUBLE:
15189                     lo = CONST_DOUBLE_LOW (elt);
15190                     hi = CONST_DOUBLE_HIGH (elt);
15191                     break;
15192
15193                   default:
15194                     gcc_unreachable ();
15195                   }
15196
15197                 if (elt_size <= sizeof (HOST_WIDE_INT))
15198                   insert_int (lo, elt_size, p);
15199                 else
15200                   {
15201                     unsigned char *p0 = p;
15202                     unsigned char *p1 = p + sizeof (HOST_WIDE_INT);
15203
15204                     gcc_assert (elt_size == 2 * sizeof (HOST_WIDE_INT));
15205                     if (WORDS_BIG_ENDIAN)
15206                       {
15207                         p0 = p1;
15208                         p1 = p;
15209                       }
15210                     insert_int (lo, sizeof (HOST_WIDE_INT), p0);
15211                     insert_int (hi, sizeof (HOST_WIDE_INT), p1);
15212                   }
15213               }
15214             break;
15215
15216           case MODE_VECTOR_FLOAT:
15217             for (i = 0, p = array; i < length; i++, p += elt_size)
15218               {
15219                 rtx elt = CONST_VECTOR_ELT (rtl, i);
15220                 insert_float (elt, p);
15221               }
15222             break;
15223
15224           default:
15225             gcc_unreachable ();
15226           }
15227
15228         add_AT_vec (die, DW_AT_const_value, length, elt_size, array);
15229       }
15230       return true;
15231
15232     case CONST_STRING:
15233       resolve_one_addr (&rtl, NULL);
15234       add_AT_addr (die, DW_AT_const_value, rtl);
15235       VEC_safe_push (rtx, gc, used_rtx_array, rtl);
15236       return true;
15237
15238     case CONST:
15239       if (CONSTANT_P (XEXP (rtl, 0)))
15240         return add_const_value_attribute (die, XEXP (rtl, 0));
15241       /* FALLTHROUGH */
15242     case SYMBOL_REF:
15243       if (!const_ok_for_output (rtl))
15244         return false;
15245     case LABEL_REF:
15246       add_AT_addr (die, DW_AT_const_value, rtl);
15247       VEC_safe_push (rtx, gc, used_rtx_array, rtl);
15248       return true;
15249
15250     case PLUS:
15251       /* In cases where an inlined instance of an inline function is passed
15252          the address of an `auto' variable (which is local to the caller) we
15253          can get a situation where the DECL_RTL of the artificial local
15254          variable (for the inlining) which acts as a stand-in for the
15255          corresponding formal parameter (of the inline function) will look
15256          like (plus:SI (reg:SI FRAME_PTR) (const_int ...)).  This is not
15257          exactly a compile-time constant expression, but it isn't the address
15258          of the (artificial) local variable either.  Rather, it represents the
15259          *value* which the artificial local variable always has during its
15260          lifetime.  We currently have no way to represent such quasi-constant
15261          values in Dwarf, so for now we just punt and generate nothing.  */
15262       return false;
15263
15264     case HIGH:
15265     case CONST_FIXED:
15266       return false;
15267
15268     case MEM:
15269       if (GET_CODE (XEXP (rtl, 0)) == CONST_STRING
15270           && MEM_READONLY_P (rtl)
15271           && GET_MODE (rtl) == BLKmode)
15272         {
15273           add_AT_string (die, DW_AT_const_value, XSTR (XEXP (rtl, 0), 0));
15274           return true;
15275         }
15276       return false;
15277
15278     default:
15279       /* No other kinds of rtx should be possible here.  */
15280       gcc_unreachable ();
15281     }
15282   return false;
15283 }
15284
15285 /* Determine whether the evaluation of EXPR references any variables
15286    or functions which aren't otherwise used (and therefore may not be
15287    output).  */
15288 static tree
15289 reference_to_unused (tree * tp, int * walk_subtrees,
15290                      void * data ATTRIBUTE_UNUSED)
15291 {
15292   if (! EXPR_P (*tp) && ! CONSTANT_CLASS_P (*tp))
15293     *walk_subtrees = 0;
15294
15295   if (DECL_P (*tp) && ! TREE_PUBLIC (*tp) && ! TREE_USED (*tp)
15296       && ! TREE_ASM_WRITTEN (*tp))
15297     return *tp;
15298   /* ???  The C++ FE emits debug information for using decls, so
15299      putting gcc_unreachable here falls over.  See PR31899.  For now
15300      be conservative.  */
15301   else if (!cgraph_global_info_ready
15302            && (TREE_CODE (*tp) == VAR_DECL || TREE_CODE (*tp) == FUNCTION_DECL))
15303     return *tp;
15304   else if (TREE_CODE (*tp) == VAR_DECL)
15305     {
15306       struct varpool_node *node = varpool_node (*tp);
15307       if (!node->needed)
15308         return *tp;
15309     }
15310   else if (TREE_CODE (*tp) == FUNCTION_DECL
15311            && (!DECL_EXTERNAL (*tp) || DECL_DECLARED_INLINE_P (*tp)))
15312     {
15313       /* The call graph machinery must have finished analyzing,
15314          optimizing and gimplifying the CU by now.
15315          So if *TP has no call graph node associated
15316          to it, it means *TP will not be emitted.  */
15317       if (!cgraph_get_node (*tp))
15318         return *tp;
15319     }
15320   else if (TREE_CODE (*tp) == STRING_CST && !TREE_ASM_WRITTEN (*tp))
15321     return *tp;
15322
15323   return NULL_TREE;
15324 }
15325
15326 /* Generate an RTL constant from a decl initializer INIT with decl type TYPE,
15327    for use in a later add_const_value_attribute call.  */
15328
15329 static rtx
15330 rtl_for_decl_init (tree init, tree type)
15331 {
15332   rtx rtl = NULL_RTX;
15333
15334   /* If a variable is initialized with a string constant without embedded
15335      zeros, build CONST_STRING.  */
15336   if (TREE_CODE (init) == STRING_CST && TREE_CODE (type) == ARRAY_TYPE)
15337     {
15338       tree enttype = TREE_TYPE (type);
15339       tree domain = TYPE_DOMAIN (type);
15340       enum machine_mode mode = TYPE_MODE (enttype);
15341
15342       if (GET_MODE_CLASS (mode) == MODE_INT && GET_MODE_SIZE (mode) == 1
15343           && domain
15344           && integer_zerop (TYPE_MIN_VALUE (domain))
15345           && compare_tree_int (TYPE_MAX_VALUE (domain),
15346                                TREE_STRING_LENGTH (init) - 1) == 0
15347           && ((size_t) TREE_STRING_LENGTH (init)
15348               == strlen (TREE_STRING_POINTER (init)) + 1))
15349         {
15350           rtl = gen_rtx_CONST_STRING (VOIDmode,
15351                                       ggc_strdup (TREE_STRING_POINTER (init)));
15352           rtl = gen_rtx_MEM (BLKmode, rtl);
15353           MEM_READONLY_P (rtl) = 1;
15354         }
15355     }
15356   /* Other aggregates, and complex values, could be represented using
15357      CONCAT: FIXME!  */
15358   else if (AGGREGATE_TYPE_P (type) || TREE_CODE (type) == COMPLEX_TYPE)
15359     ;
15360   /* Vectors only work if their mode is supported by the target.
15361      FIXME: generic vectors ought to work too.  */
15362   else if (TREE_CODE (type) == VECTOR_TYPE && TYPE_MODE (type) == BLKmode)
15363     ;
15364   /* If the initializer is something that we know will expand into an
15365      immediate RTL constant, expand it now.  We must be careful not to
15366      reference variables which won't be output.  */
15367   else if (initializer_constant_valid_p (init, type)
15368            && ! walk_tree (&init, reference_to_unused, NULL, NULL))
15369     {
15370       /* Convert vector CONSTRUCTOR initializers to VECTOR_CST if
15371          possible.  */
15372       if (TREE_CODE (type) == VECTOR_TYPE)
15373         switch (TREE_CODE (init))
15374           {
15375           case VECTOR_CST:
15376             break;
15377           case CONSTRUCTOR:
15378             if (TREE_CONSTANT (init))
15379               {
15380                 VEC(constructor_elt,gc) *elts = CONSTRUCTOR_ELTS (init);
15381                 bool constant_p = true;
15382                 tree value;
15383                 unsigned HOST_WIDE_INT ix;
15384
15385                 /* Even when ctor is constant, it might contain non-*_CST
15386                    elements (e.g. { 1.0/0.0 - 1.0/0.0, 0.0 }) and those don't
15387                    belong into VECTOR_CST nodes.  */
15388                 FOR_EACH_CONSTRUCTOR_VALUE (elts, ix, value)
15389                   if (!CONSTANT_CLASS_P (value))
15390                     {
15391                       constant_p = false;
15392                       break;
15393                     }
15394
15395                 if (constant_p)
15396                   {
15397                     init = build_vector_from_ctor (type, elts);
15398                     break;
15399                   }
15400               }
15401             /* FALLTHRU */
15402
15403           default:
15404             return NULL;
15405           }
15406
15407       rtl = expand_expr (init, NULL_RTX, VOIDmode, EXPAND_INITIALIZER);
15408
15409       /* If expand_expr returns a MEM, it wasn't immediate.  */
15410       gcc_assert (!rtl || !MEM_P (rtl));
15411     }
15412
15413   return rtl;
15414 }
15415
15416 /* Generate RTL for the variable DECL to represent its location.  */
15417
15418 static rtx
15419 rtl_for_decl_location (tree decl)
15420 {
15421   rtx rtl;
15422
15423   /* Here we have to decide where we are going to say the parameter "lives"
15424      (as far as the debugger is concerned).  We only have a couple of
15425      choices.  GCC provides us with DECL_RTL and with DECL_INCOMING_RTL.
15426
15427      DECL_RTL normally indicates where the parameter lives during most of the
15428      activation of the function.  If optimization is enabled however, this
15429      could be either NULL or else a pseudo-reg.  Both of those cases indicate
15430      that the parameter doesn't really live anywhere (as far as the code
15431      generation parts of GCC are concerned) during most of the function's
15432      activation.  That will happen (for example) if the parameter is never
15433      referenced within the function.
15434
15435      We could just generate a location descriptor here for all non-NULL
15436      non-pseudo values of DECL_RTL and ignore all of the rest, but we can be
15437      a little nicer than that if we also consider DECL_INCOMING_RTL in cases
15438      where DECL_RTL is NULL or is a pseudo-reg.
15439
15440      Note however that we can only get away with using DECL_INCOMING_RTL as
15441      a backup substitute for DECL_RTL in certain limited cases.  In cases
15442      where DECL_ARG_TYPE (decl) indicates the same type as TREE_TYPE (decl),
15443      we can be sure that the parameter was passed using the same type as it is
15444      declared to have within the function, and that its DECL_INCOMING_RTL
15445      points us to a place where a value of that type is passed.
15446
15447      In cases where DECL_ARG_TYPE (decl) and TREE_TYPE (decl) are different,
15448      we cannot (in general) use DECL_INCOMING_RTL as a substitute for DECL_RTL
15449      because in these cases DECL_INCOMING_RTL points us to a value of some
15450      type which is *different* from the type of the parameter itself.  Thus,
15451      if we tried to use DECL_INCOMING_RTL to generate a location attribute in
15452      such cases, the debugger would end up (for example) trying to fetch a
15453      `float' from a place which actually contains the first part of a
15454      `double'.  That would lead to really incorrect and confusing
15455      output at debug-time.
15456
15457      So, in general, we *do not* use DECL_INCOMING_RTL as a backup for DECL_RTL
15458      in cases where DECL_ARG_TYPE (decl) != TREE_TYPE (decl).  There
15459      are a couple of exceptions however.  On little-endian machines we can
15460      get away with using DECL_INCOMING_RTL even when DECL_ARG_TYPE (decl) is
15461      not the same as TREE_TYPE (decl), but only when DECL_ARG_TYPE (decl) is
15462      an integral type that is smaller than TREE_TYPE (decl). These cases arise
15463      when (on a little-endian machine) a non-prototyped function has a
15464      parameter declared to be of type `short' or `char'.  In such cases,
15465      TREE_TYPE (decl) will be `short' or `char', DECL_ARG_TYPE (decl) will
15466      be `int', and DECL_INCOMING_RTL will point to the lowest-order byte of the
15467      passed `int' value.  If the debugger then uses that address to fetch
15468      a `short' or a `char' (on a little-endian machine) the result will be
15469      the correct data, so we allow for such exceptional cases below.
15470
15471      Note that our goal here is to describe the place where the given formal
15472      parameter lives during most of the function's activation (i.e. between the
15473      end of the prologue and the start of the epilogue).  We'll do that as best
15474      as we can. Note however that if the given formal parameter is modified
15475      sometime during the execution of the function, then a stack backtrace (at
15476      debug-time) will show the function as having been called with the *new*
15477      value rather than the value which was originally passed in.  This happens
15478      rarely enough that it is not a major problem, but it *is* a problem, and
15479      I'd like to fix it.
15480
15481      A future version of dwarf2out.c may generate two additional attributes for
15482      any given DW_TAG_formal_parameter DIE which will describe the "passed
15483      type" and the "passed location" for the given formal parameter in addition
15484      to the attributes we now generate to indicate the "declared type" and the
15485      "active location" for each parameter.  This additional set of attributes
15486      could be used by debuggers for stack backtraces. Separately, note that
15487      sometimes DECL_RTL can be NULL and DECL_INCOMING_RTL can be NULL also.
15488      This happens (for example) for inlined-instances of inline function formal
15489      parameters which are never referenced.  This really shouldn't be
15490      happening.  All PARM_DECL nodes should get valid non-NULL
15491      DECL_INCOMING_RTL values.  FIXME.  */
15492
15493   /* Use DECL_RTL as the "location" unless we find something better.  */
15494   rtl = DECL_RTL_IF_SET (decl);
15495
15496   /* When generating abstract instances, ignore everything except
15497      constants, symbols living in memory, and symbols living in
15498      fixed registers.  */
15499   if (! reload_completed)
15500     {
15501       if (rtl
15502           && (CONSTANT_P (rtl)
15503               || (MEM_P (rtl)
15504                   && CONSTANT_P (XEXP (rtl, 0)))
15505               || (REG_P (rtl)
15506                   && TREE_CODE (decl) == VAR_DECL
15507                   && TREE_STATIC (decl))))
15508         {
15509           rtl = targetm.delegitimize_address (rtl);
15510           return rtl;
15511         }
15512       rtl = NULL_RTX;
15513     }
15514   else if (TREE_CODE (decl) == PARM_DECL)
15515     {
15516       if (rtl == NULL_RTX || is_pseudo_reg (rtl))
15517         {
15518           tree declared_type = TREE_TYPE (decl);
15519           tree passed_type = DECL_ARG_TYPE (decl);
15520           enum machine_mode dmode = TYPE_MODE (declared_type);
15521           enum machine_mode pmode = TYPE_MODE (passed_type);
15522
15523           /* This decl represents a formal parameter which was optimized out.
15524              Note that DECL_INCOMING_RTL may be NULL in here, but we handle
15525              all cases where (rtl == NULL_RTX) just below.  */
15526           if (dmode == pmode)
15527             rtl = DECL_INCOMING_RTL (decl);
15528           else if (SCALAR_INT_MODE_P (dmode)
15529                    && GET_MODE_SIZE (dmode) <= GET_MODE_SIZE (pmode)
15530                    && DECL_INCOMING_RTL (decl))
15531             {
15532               rtx inc = DECL_INCOMING_RTL (decl);
15533               if (REG_P (inc))
15534                 rtl = inc;
15535               else if (MEM_P (inc))
15536                 {
15537                   if (BYTES_BIG_ENDIAN)
15538                     rtl = adjust_address_nv (inc, dmode,
15539                                              GET_MODE_SIZE (pmode)
15540                                              - GET_MODE_SIZE (dmode));
15541                   else
15542                     rtl = inc;
15543                 }
15544             }
15545         }
15546
15547       /* If the parm was passed in registers, but lives on the stack, then
15548          make a big endian correction if the mode of the type of the
15549          parameter is not the same as the mode of the rtl.  */
15550       /* ??? This is the same series of checks that are made in dbxout.c before
15551          we reach the big endian correction code there.  It isn't clear if all
15552          of these checks are necessary here, but keeping them all is the safe
15553          thing to do.  */
15554       else if (MEM_P (rtl)
15555                && XEXP (rtl, 0) != const0_rtx
15556                && ! CONSTANT_P (XEXP (rtl, 0))
15557                /* Not passed in memory.  */
15558                && !MEM_P (DECL_INCOMING_RTL (decl))
15559                /* Not passed by invisible reference.  */
15560                && (!REG_P (XEXP (rtl, 0))
15561                    || REGNO (XEXP (rtl, 0)) == HARD_FRAME_POINTER_REGNUM
15562                    || REGNO (XEXP (rtl, 0)) == STACK_POINTER_REGNUM
15563 #if ARG_POINTER_REGNUM != HARD_FRAME_POINTER_REGNUM
15564                    || REGNO (XEXP (rtl, 0)) == ARG_POINTER_REGNUM
15565 #endif
15566                      )
15567                /* Big endian correction check.  */
15568                && BYTES_BIG_ENDIAN
15569                && TYPE_MODE (TREE_TYPE (decl)) != GET_MODE (rtl)
15570                && (GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (decl)))
15571                    < UNITS_PER_WORD))
15572         {
15573           int offset = (UNITS_PER_WORD
15574                         - GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (decl))));
15575
15576           rtl = gen_rtx_MEM (TYPE_MODE (TREE_TYPE (decl)),
15577                              plus_constant (XEXP (rtl, 0), offset));
15578         }
15579     }
15580   else if (TREE_CODE (decl) == VAR_DECL
15581            && rtl
15582            && MEM_P (rtl)
15583            && GET_MODE (rtl) != TYPE_MODE (TREE_TYPE (decl))
15584            && BYTES_BIG_ENDIAN)
15585     {
15586       int rsize = GET_MODE_SIZE (GET_MODE (rtl));
15587       int dsize = GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (decl)));
15588
15589       /* If a variable is declared "register" yet is smaller than
15590          a register, then if we store the variable to memory, it
15591          looks like we're storing a register-sized value, when in
15592          fact we are not.  We need to adjust the offset of the
15593          storage location to reflect the actual value's bytes,
15594          else gdb will not be able to display it.  */
15595       if (rsize > dsize)
15596         rtl = gen_rtx_MEM (TYPE_MODE (TREE_TYPE (decl)),
15597                            plus_constant (XEXP (rtl, 0), rsize-dsize));
15598     }
15599
15600   /* A variable with no DECL_RTL but a DECL_INITIAL is a compile-time constant,
15601      and will have been substituted directly into all expressions that use it.
15602      C does not have such a concept, but C++ and other languages do.  */
15603   if (!rtl && TREE_CODE (decl) == VAR_DECL && DECL_INITIAL (decl))
15604     rtl = rtl_for_decl_init (DECL_INITIAL (decl), TREE_TYPE (decl));
15605
15606   if (rtl)
15607     rtl = targetm.delegitimize_address (rtl);
15608
15609   /* If we don't look past the constant pool, we risk emitting a
15610      reference to a constant pool entry that isn't referenced from
15611      code, and thus is not emitted.  */
15612   if (rtl)
15613     rtl = avoid_constant_pool_reference (rtl);
15614
15615   /* Try harder to get a rtl.  If this symbol ends up not being emitted
15616      in the current CU, resolve_addr will remove the expression referencing
15617      it.  */
15618   if (rtl == NULL_RTX
15619       && TREE_CODE (decl) == VAR_DECL
15620       && !DECL_EXTERNAL (decl)
15621       && TREE_STATIC (decl)
15622       && DECL_NAME (decl)
15623       && !DECL_HARD_REGISTER (decl)
15624       && DECL_MODE (decl) != VOIDmode)
15625     {
15626       rtl = DECL_RTL (decl);
15627       /* Reset DECL_RTL back, as various parts of the compiler expects
15628          DECL_RTL set meaning it is actually going to be output.  */
15629       SET_DECL_RTL (decl, NULL);
15630       if (!MEM_P (rtl)
15631           || GET_CODE (XEXP (rtl, 0)) != SYMBOL_REF
15632           || SYMBOL_REF_DECL (XEXP (rtl, 0)) != decl)
15633         rtl = NULL_RTX;
15634     }
15635
15636   return rtl;
15637 }
15638
15639 /* Check whether decl is a Fortran COMMON symbol.  If not, NULL_TREE is
15640    returned.  If so, the decl for the COMMON block is returned, and the
15641    value is the offset into the common block for the symbol.  */
15642
15643 static tree
15644 fortran_common (tree decl, HOST_WIDE_INT *value)
15645 {
15646   tree val_expr, cvar;
15647   enum machine_mode mode;
15648   HOST_WIDE_INT bitsize, bitpos;
15649   tree offset;
15650   int volatilep = 0, unsignedp = 0;
15651
15652   /* If the decl isn't a VAR_DECL, or if it isn't static, or if
15653      it does not have a value (the offset into the common area), or if it
15654      is thread local (as opposed to global) then it isn't common, and shouldn't
15655      be handled as such.  */
15656   if (TREE_CODE (decl) != VAR_DECL
15657       || !TREE_STATIC (decl)
15658       || !DECL_HAS_VALUE_EXPR_P (decl)
15659       || !is_fortran ())
15660     return NULL_TREE;
15661
15662   val_expr = DECL_VALUE_EXPR (decl);
15663   if (TREE_CODE (val_expr) != COMPONENT_REF)
15664     return NULL_TREE;
15665
15666   cvar = get_inner_reference (val_expr, &bitsize, &bitpos, &offset,
15667                               &mode, &unsignedp, &volatilep, true);
15668
15669   if (cvar == NULL_TREE
15670       || TREE_CODE (cvar) != VAR_DECL
15671       || DECL_ARTIFICIAL (cvar)
15672       || !TREE_PUBLIC (cvar))
15673     return NULL_TREE;
15674
15675   *value = 0;
15676   if (offset != NULL)
15677     {
15678       if (!host_integerp (offset, 0))
15679         return NULL_TREE;
15680       *value = tree_low_cst (offset, 0);
15681     }
15682   if (bitpos != 0)
15683     *value += bitpos / BITS_PER_UNIT;
15684
15685   return cvar;
15686 }
15687
15688 /* Generate *either* a DW_AT_location attribute or else a DW_AT_const_value
15689    data attribute for a variable or a parameter.  We generate the
15690    DW_AT_const_value attribute only in those cases where the given variable
15691    or parameter does not have a true "location" either in memory or in a
15692    register.  This can happen (for example) when a constant is passed as an
15693    actual argument in a call to an inline function.  (It's possible that
15694    these things can crop up in other ways also.)  Note that one type of
15695    constant value which can be passed into an inlined function is a constant
15696    pointer.  This can happen for example if an actual argument in an inlined
15697    function call evaluates to a compile-time constant address.  */
15698
15699 static bool
15700 add_location_or_const_value_attribute (dw_die_ref die, tree decl,
15701                                        enum dwarf_attribute attr)
15702 {
15703   rtx rtl;
15704   dw_loc_list_ref list;
15705   var_loc_list *loc_list;
15706
15707   if (TREE_CODE (decl) == ERROR_MARK)
15708     return false;
15709
15710   gcc_assert (TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == PARM_DECL
15711               || TREE_CODE (decl) == RESULT_DECL);
15712
15713   /* Try to get some constant RTL for this decl, and use that as the value of
15714      the location.  */
15715
15716   rtl = rtl_for_decl_location (decl);
15717   if (rtl && (CONSTANT_P (rtl) || GET_CODE (rtl) == CONST_STRING)
15718       && add_const_value_attribute (die, rtl))
15719     return true;
15720
15721   /* See if we have single element location list that is equivalent to
15722      a constant value.  That way we are better to use add_const_value_attribute
15723      rather than expanding constant value equivalent.  */
15724   loc_list = lookup_decl_loc (decl);
15725   if (loc_list && loc_list->first && loc_list->first == loc_list->last)
15726     {
15727       struct var_loc_node *node;
15728
15729       node = loc_list->first;
15730       rtl = NOTE_VAR_LOCATION (node->var_loc_note);
15731       if (GET_CODE (rtl) == VAR_LOCATION
15732           && GET_CODE (XEXP (rtl, 1)) != PARALLEL)
15733         rtl = XEXP (XEXP (rtl, 1), 0);
15734       if ((CONSTANT_P (rtl) || GET_CODE (rtl) == CONST_STRING)
15735           && add_const_value_attribute (die, rtl))
15736          return true;
15737     }
15738   list = loc_list_from_tree (decl, decl_by_reference_p (decl) ? 0 : 2);
15739   if (list)
15740     {
15741       add_AT_location_description (die, attr, list);
15742       return true;
15743     }
15744   /* None of that worked, so it must not really have a location;
15745      try adding a constant value attribute from the DECL_INITIAL.  */
15746   return tree_add_const_value_attribute_for_decl (die, decl);
15747 }
15748
15749 /* Add VARIABLE and DIE into deferred locations list.  */
15750
15751 static void
15752 defer_location (tree variable, dw_die_ref die)
15753 {
15754   deferred_locations entry;
15755   entry.variable = variable;
15756   entry.die = die;
15757   VEC_safe_push (deferred_locations, gc, deferred_locations_list, &entry);
15758 }
15759
15760 /* Helper function for tree_add_const_value_attribute.  Natively encode
15761    initializer INIT into an array.  Return true if successful.  */
15762
15763 static bool
15764 native_encode_initializer (tree init, unsigned char *array, int size)
15765 {
15766   tree type;
15767
15768   if (init == NULL_TREE)
15769     return false;
15770
15771   STRIP_NOPS (init);
15772   switch (TREE_CODE (init))
15773     {
15774     case STRING_CST:
15775       type = TREE_TYPE (init);
15776       if (TREE_CODE (type) == ARRAY_TYPE)
15777         {
15778           tree enttype = TREE_TYPE (type);
15779           enum machine_mode mode = TYPE_MODE (enttype);
15780
15781           if (GET_MODE_CLASS (mode) != MODE_INT || GET_MODE_SIZE (mode) != 1)
15782             return false;
15783           if (int_size_in_bytes (type) != size)
15784             return false;
15785           if (size > TREE_STRING_LENGTH (init))
15786             {
15787               memcpy (array, TREE_STRING_POINTER (init),
15788                       TREE_STRING_LENGTH (init));
15789               memset (array + TREE_STRING_LENGTH (init),
15790                       '\0', size - TREE_STRING_LENGTH (init));
15791             }
15792           else
15793             memcpy (array, TREE_STRING_POINTER (init), size);
15794           return true;
15795         }
15796       return false;
15797     case CONSTRUCTOR:
15798       type = TREE_TYPE (init);
15799       if (int_size_in_bytes (type) != size)
15800         return false;
15801       if (TREE_CODE (type) == ARRAY_TYPE)
15802         {
15803           HOST_WIDE_INT min_index;
15804           unsigned HOST_WIDE_INT cnt;
15805           int curpos = 0, fieldsize;
15806           constructor_elt *ce;
15807
15808           if (TYPE_DOMAIN (type) == NULL_TREE
15809               || !host_integerp (TYPE_MIN_VALUE (TYPE_DOMAIN (type)), 0))
15810             return false;
15811
15812           fieldsize = int_size_in_bytes (TREE_TYPE (type));
15813           if (fieldsize <= 0)
15814             return false;
15815
15816           min_index = tree_low_cst (TYPE_MIN_VALUE (TYPE_DOMAIN (type)), 0);
15817           memset (array, '\0', size);
15818           for (cnt = 0;
15819                VEC_iterate (constructor_elt, CONSTRUCTOR_ELTS (init), cnt, ce);
15820                cnt++)
15821             {
15822               tree val = ce->value;
15823               tree index = ce->index;
15824               int pos = curpos;
15825               if (index && TREE_CODE (index) == RANGE_EXPR)
15826                 pos = (tree_low_cst (TREE_OPERAND (index, 0), 0) - min_index)
15827                       * fieldsize;
15828               else if (index)
15829                 pos = (tree_low_cst (index, 0) - min_index) * fieldsize;
15830
15831               if (val)
15832                 {
15833                   STRIP_NOPS (val);
15834                   if (!native_encode_initializer (val, array + pos, fieldsize))
15835                     return false;
15836                 }
15837               curpos = pos + fieldsize;
15838               if (index && TREE_CODE (index) == RANGE_EXPR)
15839                 {
15840                   int count = tree_low_cst (TREE_OPERAND (index, 1), 0)
15841                               - tree_low_cst (TREE_OPERAND (index, 0), 0);
15842                   while (count > 0)
15843                     {
15844                       if (val)
15845                         memcpy (array + curpos, array + pos, fieldsize);
15846                       curpos += fieldsize;
15847                     }
15848                 }
15849               gcc_assert (curpos <= size);
15850             }
15851           return true;
15852         }
15853       else if (TREE_CODE (type) == RECORD_TYPE
15854                || TREE_CODE (type) == UNION_TYPE)
15855         {
15856           tree field = NULL_TREE;
15857           unsigned HOST_WIDE_INT cnt;
15858           constructor_elt *ce;
15859
15860           if (int_size_in_bytes (type) != size)
15861             return false;
15862
15863           if (TREE_CODE (type) == RECORD_TYPE)
15864             field = TYPE_FIELDS (type);
15865
15866           for (cnt = 0;
15867                VEC_iterate (constructor_elt, CONSTRUCTOR_ELTS (init), cnt, ce);
15868                cnt++, field = field ? TREE_CHAIN (field) : 0)
15869             {
15870               tree val = ce->value;
15871               int pos, fieldsize;
15872
15873               if (ce->index != 0)
15874                 field = ce->index;
15875
15876               if (val)
15877                 STRIP_NOPS (val);
15878
15879               if (field == NULL_TREE || DECL_BIT_FIELD (field))
15880                 return false;
15881
15882               if (TREE_CODE (TREE_TYPE (field)) == ARRAY_TYPE
15883                   && TYPE_DOMAIN (TREE_TYPE (field))
15884                   && ! TYPE_MAX_VALUE (TYPE_DOMAIN (TREE_TYPE (field))))
15885                 return false;
15886               else if (DECL_SIZE_UNIT (field) == NULL_TREE
15887                        || !host_integerp (DECL_SIZE_UNIT (field), 0))
15888                 return false;
15889               fieldsize = tree_low_cst (DECL_SIZE_UNIT (field), 0);
15890               pos = int_byte_position (field);
15891               gcc_assert (pos + fieldsize <= size);
15892               if (val
15893                   && !native_encode_initializer (val, array + pos, fieldsize))
15894                 return false;
15895             }
15896           return true;
15897         }
15898       return false;
15899     case VIEW_CONVERT_EXPR:
15900     case NON_LVALUE_EXPR:
15901       return native_encode_initializer (TREE_OPERAND (init, 0), array, size);
15902     default:
15903       return native_encode_expr (init, array, size) == size;
15904     }
15905 }
15906
15907 /* Attach a DW_AT_const_value attribute to DIE. The value of the
15908    attribute is the const value T.  */
15909
15910 static bool
15911 tree_add_const_value_attribute (dw_die_ref die, tree t)
15912 {
15913   tree init;
15914   tree type = TREE_TYPE (t);
15915   rtx rtl;
15916
15917   if (!t || !TREE_TYPE (t) || TREE_TYPE (t) == error_mark_node)
15918     return false;
15919
15920   init = t;
15921   gcc_assert (!DECL_P (init));
15922
15923   rtl = rtl_for_decl_init (init, type);
15924   if (rtl)
15925     return add_const_value_attribute (die, rtl);
15926   /* If the host and target are sane, try harder.  */
15927   else if (CHAR_BIT == 8 && BITS_PER_UNIT == 8
15928            && initializer_constant_valid_p (init, type))
15929     {
15930       HOST_WIDE_INT size = int_size_in_bytes (TREE_TYPE (init));
15931       if (size > 0 && (int) size == size)
15932         {
15933           unsigned char *array = GGC_CNEWVEC (unsigned char, size);
15934
15935           if (native_encode_initializer (init, array, size))
15936             {
15937               add_AT_vec (die, DW_AT_const_value, size, 1, array);
15938               return true;
15939             }
15940         }
15941     }
15942   return false;
15943 }
15944
15945 /* Attach a DW_AT_const_value attribute to VAR_DIE. The value of the
15946    attribute is the const value of T, where T is an integral constant
15947    variable with static storage duration
15948    (so it can't be a PARM_DECL or a RESULT_DECL).  */
15949
15950 static bool
15951 tree_add_const_value_attribute_for_decl (dw_die_ref var_die, tree decl)
15952 {
15953
15954   if (!decl
15955       || (TREE_CODE (decl) != VAR_DECL
15956           && TREE_CODE (decl) != CONST_DECL))
15957     return false;
15958
15959     if (TREE_READONLY (decl)
15960         && ! TREE_THIS_VOLATILE (decl)
15961         && DECL_INITIAL (decl))
15962       /* OK */;
15963     else
15964       return false;
15965
15966   /* Don't add DW_AT_const_value if abstract origin already has one.  */
15967   if (get_AT (var_die, DW_AT_const_value))
15968     return false;
15969
15970   return tree_add_const_value_attribute (var_die, DECL_INITIAL (decl));
15971 }
15972
15973 /* Convert the CFI instructions for the current function into a
15974    location list.  This is used for DW_AT_frame_base when we targeting
15975    a dwarf2 consumer that does not support the dwarf3
15976    DW_OP_call_frame_cfa.  OFFSET is a constant to be added to all CFA
15977    expressions.  */
15978
15979 static dw_loc_list_ref
15980 convert_cfa_to_fb_loc_list (HOST_WIDE_INT offset)
15981 {
15982   dw_fde_ref fde;
15983   dw_loc_list_ref list, *list_tail;
15984   dw_cfi_ref cfi;
15985   dw_cfa_location last_cfa, next_cfa;
15986   const char *start_label, *last_label, *section;
15987   dw_cfa_location remember;
15988
15989   fde = current_fde ();
15990   gcc_assert (fde != NULL);
15991
15992   section = secname_for_decl (current_function_decl);
15993   list_tail = &list;
15994   list = NULL;
15995
15996   memset (&next_cfa, 0, sizeof (next_cfa));
15997   next_cfa.reg = INVALID_REGNUM;
15998   remember = next_cfa;
15999
16000   start_label = fde->dw_fde_begin;
16001
16002   /* ??? Bald assumption that the CIE opcode list does not contain
16003      advance opcodes.  */
16004   for (cfi = cie_cfi_head; cfi; cfi = cfi->dw_cfi_next)
16005     lookup_cfa_1 (cfi, &next_cfa, &remember);
16006
16007   last_cfa = next_cfa;
16008   last_label = start_label;
16009
16010   for (cfi = fde->dw_fde_cfi; cfi; cfi = cfi->dw_cfi_next)
16011     switch (cfi->dw_cfi_opc)
16012       {
16013       case DW_CFA_set_loc:
16014       case DW_CFA_advance_loc1:
16015       case DW_CFA_advance_loc2:
16016       case DW_CFA_advance_loc4:
16017         if (!cfa_equal_p (&last_cfa, &next_cfa))
16018           {
16019             *list_tail = new_loc_list (build_cfa_loc (&last_cfa, offset),
16020                                        start_label, last_label, section,
16021                                        list == NULL);
16022
16023             list_tail = &(*list_tail)->dw_loc_next;
16024             last_cfa = next_cfa;
16025             start_label = last_label;
16026           }
16027         last_label = cfi->dw_cfi_oprnd1.dw_cfi_addr;
16028         break;
16029
16030       case DW_CFA_advance_loc:
16031         /* The encoding is complex enough that we should never emit this.  */
16032         gcc_unreachable ();
16033
16034       default:
16035         lookup_cfa_1 (cfi, &next_cfa, &remember);
16036         break;
16037       }
16038
16039   if (!cfa_equal_p (&last_cfa, &next_cfa))
16040     {
16041       *list_tail = new_loc_list (build_cfa_loc (&last_cfa, offset),
16042                                  start_label, last_label, section,
16043                                  list == NULL);
16044       list_tail = &(*list_tail)->dw_loc_next;
16045       start_label = last_label;
16046     }
16047   *list_tail = new_loc_list (build_cfa_loc (&next_cfa, offset),
16048                              start_label, fde->dw_fde_end, section,
16049                              list == NULL);
16050
16051   return list;
16052 }
16053
16054 /* Compute a displacement from the "steady-state frame pointer" to the
16055    frame base (often the same as the CFA), and store it in
16056    frame_pointer_fb_offset.  OFFSET is added to the displacement
16057    before the latter is negated.  */
16058
16059 static void
16060 compute_frame_pointer_to_fb_displacement (HOST_WIDE_INT offset)
16061 {
16062   rtx reg, elim;
16063
16064 #ifdef FRAME_POINTER_CFA_OFFSET
16065   reg = frame_pointer_rtx;
16066   offset += FRAME_POINTER_CFA_OFFSET (current_function_decl);
16067 #else
16068   reg = arg_pointer_rtx;
16069   offset += ARG_POINTER_CFA_OFFSET (current_function_decl);
16070 #endif
16071
16072   elim = eliminate_regs (reg, VOIDmode, NULL_RTX);
16073   if (GET_CODE (elim) == PLUS)
16074     {
16075       offset += INTVAL (XEXP (elim, 1));
16076       elim = XEXP (elim, 0);
16077     }
16078
16079   gcc_assert ((SUPPORTS_STACK_ALIGNMENT
16080                && (elim == hard_frame_pointer_rtx
16081                    || elim == stack_pointer_rtx))
16082               || elim == (frame_pointer_needed
16083                           ? hard_frame_pointer_rtx
16084                           : stack_pointer_rtx));
16085
16086   frame_pointer_fb_offset = -offset;
16087 }
16088
16089 /* Generate a DW_AT_name attribute given some string value to be included as
16090    the value of the attribute.  */
16091
16092 static void
16093 add_name_attribute (dw_die_ref die, const char *name_string)
16094 {
16095   if (name_string != NULL && *name_string != 0)
16096     {
16097       if (demangle_name_func)
16098         name_string = (*demangle_name_func) (name_string);
16099
16100       add_AT_string (die, DW_AT_name, name_string);
16101     }
16102 }
16103
16104 /* Generate a DW_AT_comp_dir attribute for DIE.  */
16105
16106 static void
16107 add_comp_dir_attribute (dw_die_ref die)
16108 {
16109   const char *wd = get_src_pwd ();
16110   char *wd1;
16111
16112   if (wd == NULL)
16113     return;
16114
16115   if (DWARF2_DIR_SHOULD_END_WITH_SEPARATOR)
16116     {
16117       int wdlen;
16118
16119       wdlen = strlen (wd);
16120       wd1 = GGC_NEWVEC (char, wdlen + 2);
16121       strcpy (wd1, wd);
16122       wd1 [wdlen] = DIR_SEPARATOR;
16123       wd1 [wdlen + 1] = 0;
16124       wd = wd1;
16125     }
16126
16127     add_AT_string (die, DW_AT_comp_dir, remap_debug_filename (wd));
16128 }
16129
16130 /* Given a tree node describing an array bound (either lower or upper) output
16131    a representation for that bound.  */
16132
16133 static void
16134 add_bound_info (dw_die_ref subrange_die, enum dwarf_attribute bound_attr, tree bound)
16135 {
16136   switch (TREE_CODE (bound))
16137     {
16138     case ERROR_MARK:
16139       return;
16140
16141     /* All fixed-bounds are represented by INTEGER_CST nodes.  */
16142     case INTEGER_CST:
16143       {
16144         unsigned int prec = simple_type_size_in_bits (TREE_TYPE (bound));
16145
16146         /* Use the default if possible.  */
16147         if (bound_attr == DW_AT_lower_bound
16148             && (((is_c_family () || is_java ()) && integer_zerop (bound))
16149                 || (is_fortran () && integer_onep (bound))))
16150           ;
16151
16152         /* Otherwise represent the bound as an unsigned value with the
16153            precision of its type.  The precision and signedness of the
16154            type will be necessary to re-interpret it unambiguously.  */
16155         else if (prec < HOST_BITS_PER_WIDE_INT)
16156           {
16157             unsigned HOST_WIDE_INT mask
16158               = ((unsigned HOST_WIDE_INT) 1 << prec) - 1;
16159             add_AT_unsigned (subrange_die, bound_attr,
16160                              TREE_INT_CST_LOW (bound) & mask);
16161           }
16162         else if (prec == HOST_BITS_PER_WIDE_INT
16163                  || TREE_INT_CST_HIGH (bound) == 0)
16164           add_AT_unsigned (subrange_die, bound_attr,
16165                            TREE_INT_CST_LOW (bound));
16166         else
16167           add_AT_double (subrange_die, bound_attr, TREE_INT_CST_HIGH (bound),
16168                          TREE_INT_CST_LOW (bound));
16169       }
16170       break;
16171
16172     CASE_CONVERT:
16173     case VIEW_CONVERT_EXPR:
16174       add_bound_info (subrange_die, bound_attr, TREE_OPERAND (bound, 0));
16175       break;
16176
16177     case SAVE_EXPR:
16178       break;
16179
16180     case VAR_DECL:
16181     case PARM_DECL:
16182     case RESULT_DECL:
16183       {
16184         dw_die_ref decl_die = lookup_decl_die (bound);
16185         dw_loc_list_ref loc;
16186
16187         /* ??? Can this happen, or should the variable have been bound
16188            first?  Probably it can, since I imagine that we try to create
16189            the types of parameters in the order in which they exist in
16190            the list, and won't have created a forward reference to a
16191            later parameter.  */
16192         if (decl_die != NULL)
16193           add_AT_die_ref (subrange_die, bound_attr, decl_die);
16194         else
16195           {
16196             loc = loc_list_from_tree (bound, 0);
16197             add_AT_location_description (subrange_die, bound_attr, loc);
16198           }
16199         break;
16200       }
16201
16202     default:
16203       {
16204         /* Otherwise try to create a stack operation procedure to
16205            evaluate the value of the array bound.  */
16206
16207         dw_die_ref ctx, decl_die;
16208         dw_loc_list_ref list;
16209
16210         list = loc_list_from_tree (bound, 2);
16211         if (list == NULL)
16212           break;
16213
16214         if (current_function_decl == 0)
16215           ctx = comp_unit_die;
16216         else
16217           ctx = lookup_decl_die (current_function_decl);
16218
16219         decl_die = new_die (DW_TAG_variable, ctx, bound);
16220         add_AT_flag (decl_die, DW_AT_artificial, 1);
16221         add_type_attribute (decl_die, TREE_TYPE (bound), 1, 0, ctx);
16222         if (list->dw_loc_next)
16223           add_AT_loc_list (decl_die, DW_AT_location, list);
16224         else
16225           add_AT_loc (decl_die, DW_AT_location, list->expr);
16226
16227         add_AT_die_ref (subrange_die, bound_attr, decl_die);
16228         break;
16229       }
16230     }
16231 }
16232
16233 /* Add subscript info to TYPE_DIE, describing an array TYPE, collapsing
16234    possibly nested array subscripts in a flat sequence if COLLAPSE_P is true.
16235    Note that the block of subscript information for an array type also
16236    includes information about the element type of the given array type.  */
16237
16238 static void
16239 add_subscript_info (dw_die_ref type_die, tree type, bool collapse_p)
16240 {
16241   unsigned dimension_number;
16242   tree lower, upper;
16243   dw_die_ref subrange_die;
16244
16245   for (dimension_number = 0;
16246        TREE_CODE (type) == ARRAY_TYPE && (dimension_number == 0 || collapse_p);
16247        type = TREE_TYPE (type), dimension_number++)
16248     {
16249       tree domain = TYPE_DOMAIN (type);
16250
16251       if (TYPE_STRING_FLAG (type) && is_fortran () && dimension_number > 0)
16252         break;
16253
16254       /* Arrays come in three flavors: Unspecified bounds, fixed bounds,
16255          and (in GNU C only) variable bounds.  Handle all three forms
16256          here.  */
16257       subrange_die = new_die (DW_TAG_subrange_type, type_die, NULL);
16258       if (domain)
16259         {
16260           /* We have an array type with specified bounds.  */
16261           lower = TYPE_MIN_VALUE (domain);
16262           upper = TYPE_MAX_VALUE (domain);
16263
16264           /* Define the index type.  */
16265           if (TREE_TYPE (domain))
16266             {
16267               /* ??? This is probably an Ada unnamed subrange type.  Ignore the
16268                  TREE_TYPE field.  We can't emit debug info for this
16269                  because it is an unnamed integral type.  */
16270               if (TREE_CODE (domain) == INTEGER_TYPE
16271                   && TYPE_NAME (domain) == NULL_TREE
16272                   && TREE_CODE (TREE_TYPE (domain)) == INTEGER_TYPE
16273                   && TYPE_NAME (TREE_TYPE (domain)) == NULL_TREE)
16274                 ;
16275               else
16276                 add_type_attribute (subrange_die, TREE_TYPE (domain), 0, 0,
16277                                     type_die);
16278             }
16279
16280           /* ??? If upper is NULL, the array has unspecified length,
16281              but it does have a lower bound.  This happens with Fortran
16282                dimension arr(N:*)
16283              Since the debugger is definitely going to need to know N
16284              to produce useful results, go ahead and output the lower
16285              bound solo, and hope the debugger can cope.  */
16286
16287           add_bound_info (subrange_die, DW_AT_lower_bound, lower);
16288           if (upper)
16289             add_bound_info (subrange_die, DW_AT_upper_bound, upper);
16290         }
16291
16292       /* Otherwise we have an array type with an unspecified length.  The
16293          DWARF-2 spec does not say how to handle this; let's just leave out the
16294          bounds.  */
16295     }
16296 }
16297
16298 static void
16299 add_byte_size_attribute (dw_die_ref die, tree tree_node)
16300 {
16301   unsigned size;
16302
16303   switch (TREE_CODE (tree_node))
16304     {
16305     case ERROR_MARK:
16306       size = 0;
16307       break;
16308     case ENUMERAL_TYPE:
16309     case RECORD_TYPE:
16310     case UNION_TYPE:
16311     case QUAL_UNION_TYPE:
16312       size = int_size_in_bytes (tree_node);
16313       break;
16314     case FIELD_DECL:
16315       /* For a data member of a struct or union, the DW_AT_byte_size is
16316          generally given as the number of bytes normally allocated for an
16317          object of the *declared* type of the member itself.  This is true
16318          even for bit-fields.  */
16319       size = simple_type_size_in_bits (field_type (tree_node)) / BITS_PER_UNIT;
16320       break;
16321     default:
16322       gcc_unreachable ();
16323     }
16324
16325   /* Note that `size' might be -1 when we get to this point.  If it is, that
16326      indicates that the byte size of the entity in question is variable.  We
16327      have no good way of expressing this fact in Dwarf at the present time,
16328      so just let the -1 pass on through.  */
16329   add_AT_unsigned (die, DW_AT_byte_size, size);
16330 }
16331
16332 /* For a FIELD_DECL node which represents a bit-field, output an attribute
16333    which specifies the distance in bits from the highest order bit of the
16334    "containing object" for the bit-field to the highest order bit of the
16335    bit-field itself.
16336
16337    For any given bit-field, the "containing object" is a hypothetical object
16338    (of some integral or enum type) within which the given bit-field lives.  The
16339    type of this hypothetical "containing object" is always the same as the
16340    declared type of the individual bit-field itself.  The determination of the
16341    exact location of the "containing object" for a bit-field is rather
16342    complicated.  It's handled by the `field_byte_offset' function (above).
16343
16344    Note that it is the size (in bytes) of the hypothetical "containing object"
16345    which will be given in the DW_AT_byte_size attribute for this bit-field.
16346    (See `byte_size_attribute' above).  */
16347
16348 static inline void
16349 add_bit_offset_attribute (dw_die_ref die, tree decl)
16350 {
16351   HOST_WIDE_INT object_offset_in_bytes = field_byte_offset (decl);
16352   tree type = DECL_BIT_FIELD_TYPE (decl);
16353   HOST_WIDE_INT bitpos_int;
16354   HOST_WIDE_INT highest_order_object_bit_offset;
16355   HOST_WIDE_INT highest_order_field_bit_offset;
16356   HOST_WIDE_INT unsigned bit_offset;
16357
16358   /* Must be a field and a bit field.  */
16359   gcc_assert (type && TREE_CODE (decl) == FIELD_DECL);
16360
16361   /* We can't yet handle bit-fields whose offsets are variable, so if we
16362      encounter such things, just return without generating any attribute
16363      whatsoever.  Likewise for variable or too large size.  */
16364   if (! host_integerp (bit_position (decl), 0)
16365       || ! host_integerp (DECL_SIZE (decl), 1))
16366     return;
16367
16368   bitpos_int = int_bit_position (decl);
16369
16370   /* Note that the bit offset is always the distance (in bits) from the
16371      highest-order bit of the "containing object" to the highest-order bit of
16372      the bit-field itself.  Since the "high-order end" of any object or field
16373      is different on big-endian and little-endian machines, the computation
16374      below must take account of these differences.  */
16375   highest_order_object_bit_offset = object_offset_in_bytes * BITS_PER_UNIT;
16376   highest_order_field_bit_offset = bitpos_int;
16377
16378   if (! BYTES_BIG_ENDIAN)
16379     {
16380       highest_order_field_bit_offset += tree_low_cst (DECL_SIZE (decl), 0);
16381       highest_order_object_bit_offset += simple_type_size_in_bits (type);
16382     }
16383
16384   bit_offset
16385     = (! BYTES_BIG_ENDIAN
16386        ? highest_order_object_bit_offset - highest_order_field_bit_offset
16387        : highest_order_field_bit_offset - highest_order_object_bit_offset);
16388
16389   add_AT_unsigned (die, DW_AT_bit_offset, bit_offset);
16390 }
16391
16392 /* For a FIELD_DECL node which represents a bit field, output an attribute
16393    which specifies the length in bits of the given field.  */
16394
16395 static inline void
16396 add_bit_size_attribute (dw_die_ref die, tree decl)
16397 {
16398   /* Must be a field and a bit field.  */
16399   gcc_assert (TREE_CODE (decl) == FIELD_DECL
16400               && DECL_BIT_FIELD_TYPE (decl));
16401
16402   if (host_integerp (DECL_SIZE (decl), 1))
16403     add_AT_unsigned (die, DW_AT_bit_size, tree_low_cst (DECL_SIZE (decl), 1));
16404 }
16405
16406 /* If the compiled language is ANSI C, then add a 'prototyped'
16407    attribute, if arg types are given for the parameters of a function.  */
16408
16409 static inline void
16410 add_prototyped_attribute (dw_die_ref die, tree func_type)
16411 {
16412   if (get_AT_unsigned (comp_unit_die, DW_AT_language) == DW_LANG_C89
16413       && TYPE_ARG_TYPES (func_type) != NULL)
16414     add_AT_flag (die, DW_AT_prototyped, 1);
16415 }
16416
16417 /* Add an 'abstract_origin' attribute below a given DIE.  The DIE is found
16418    by looking in either the type declaration or object declaration
16419    equate table.  */
16420
16421 static inline dw_die_ref
16422 add_abstract_origin_attribute (dw_die_ref die, tree origin)
16423 {
16424   dw_die_ref origin_die = NULL;
16425
16426   if (TREE_CODE (origin) != FUNCTION_DECL)
16427     {
16428       /* We may have gotten separated from the block for the inlined
16429          function, if we're in an exception handler or some such; make
16430          sure that the abstract function has been written out.
16431
16432          Doing this for nested functions is wrong, however; functions are
16433          distinct units, and our context might not even be inline.  */
16434       tree fn = origin;
16435
16436       if (TYPE_P (fn))
16437         fn = TYPE_STUB_DECL (fn);
16438
16439       fn = decl_function_context (fn);
16440       if (fn)
16441         dwarf2out_abstract_function (fn);
16442     }
16443
16444   if (DECL_P (origin))
16445     origin_die = lookup_decl_die (origin);
16446   else if (TYPE_P (origin))
16447     origin_die = lookup_type_die (origin);
16448
16449   /* XXX: Functions that are never lowered don't always have correct block
16450      trees (in the case of java, they simply have no block tree, in some other
16451      languages).  For these functions, there is nothing we can really do to
16452      output correct debug info for inlined functions in all cases.  Rather
16453      than die, we'll just produce deficient debug info now, in that we will
16454      have variables without a proper abstract origin.  In the future, when all
16455      functions are lowered, we should re-add a gcc_assert (origin_die)
16456      here.  */
16457
16458   if (origin_die)
16459     add_AT_die_ref (die, DW_AT_abstract_origin, origin_die);
16460   return origin_die;
16461 }
16462
16463 /* We do not currently support the pure_virtual attribute.  */
16464
16465 static inline void
16466 add_pure_or_virtual_attribute (dw_die_ref die, tree func_decl)
16467 {
16468   if (DECL_VINDEX (func_decl))
16469     {
16470       add_AT_unsigned (die, DW_AT_virtuality, DW_VIRTUALITY_virtual);
16471
16472       if (host_integerp (DECL_VINDEX (func_decl), 0))
16473         add_AT_loc (die, DW_AT_vtable_elem_location,
16474                     new_loc_descr (DW_OP_constu,
16475                                    tree_low_cst (DECL_VINDEX (func_decl), 0),
16476                                    0));
16477
16478       /* GNU extension: Record what type this method came from originally.  */
16479       if (debug_info_level > DINFO_LEVEL_TERSE)
16480         add_AT_die_ref (die, DW_AT_containing_type,
16481                         lookup_type_die (DECL_CONTEXT (func_decl)));
16482     }
16483 }
16484 \f
16485 /* Add source coordinate attributes for the given decl.  */
16486
16487 static void
16488 add_src_coords_attributes (dw_die_ref die, tree decl)
16489 {
16490   expanded_location s = expand_location (DECL_SOURCE_LOCATION (decl));
16491
16492   add_AT_file (die, DW_AT_decl_file, lookup_filename (s.file));
16493   add_AT_unsigned (die, DW_AT_decl_line, s.line);
16494 }
16495
16496 /* Add a DW_AT_name attribute and source coordinate attribute for the
16497    given decl, but only if it actually has a name.  */
16498
16499 static void
16500 add_name_and_src_coords_attributes (dw_die_ref die, tree decl)
16501 {
16502   tree decl_name;
16503
16504   decl_name = DECL_NAME (decl);
16505   if (decl_name != NULL && IDENTIFIER_POINTER (decl_name) != NULL)
16506     {
16507       const char *name = dwarf2_name (decl, 0);
16508       if (name)
16509         add_name_attribute (die, name);
16510       if (! DECL_ARTIFICIAL (decl))
16511         add_src_coords_attributes (die, decl);
16512
16513       if ((TREE_CODE (decl) == FUNCTION_DECL || TREE_CODE (decl) == VAR_DECL)
16514           && TREE_PUBLIC (decl)
16515           && !DECL_ABSTRACT (decl)
16516           && !(TREE_CODE (decl) == VAR_DECL && DECL_REGISTER (decl))
16517           && !is_fortran ())
16518         {
16519           /* Defer until we have an assembler name set.  */
16520           if (!DECL_ASSEMBLER_NAME_SET_P (decl))
16521             {
16522               limbo_die_node *asm_name;
16523
16524               asm_name = GGC_CNEW (limbo_die_node);
16525               asm_name->die = die;
16526               asm_name->created_for = decl;
16527               asm_name->next = deferred_asm_name;
16528               deferred_asm_name = asm_name;
16529             }
16530           else if (DECL_ASSEMBLER_NAME (decl) != DECL_NAME (decl))
16531             add_AT_string (die, DW_AT_MIPS_linkage_name,
16532                            IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl)));
16533         }
16534     }
16535
16536 #ifdef VMS_DEBUGGING_INFO
16537   /* Get the function's name, as described by its RTL.  This may be different
16538      from the DECL_NAME name used in the source file.  */
16539   if (TREE_CODE (decl) == FUNCTION_DECL && TREE_ASM_WRITTEN (decl))
16540     {
16541       add_AT_addr (die, DW_AT_VMS_rtnbeg_pd_address,
16542                    XEXP (DECL_RTL (decl), 0));
16543       VEC_safe_push (rtx, gc, used_rtx_array, XEXP (DECL_RTL (decl), 0));
16544     }
16545 #endif
16546 }
16547
16548 /* Push a new declaration scope.  */
16549
16550 static void
16551 push_decl_scope (tree scope)
16552 {
16553   VEC_safe_push (tree, gc, decl_scope_table, scope);
16554 }
16555
16556 /* Pop a declaration scope.  */
16557
16558 static inline void
16559 pop_decl_scope (void)
16560 {
16561   VEC_pop (tree, decl_scope_table);
16562 }
16563
16564 /* Return the DIE for the scope that immediately contains this type.
16565    Non-named types get global scope.  Named types nested in other
16566    types get their containing scope if it's open, or global scope
16567    otherwise.  All other types (i.e. function-local named types) get
16568    the current active scope.  */
16569
16570 static dw_die_ref
16571 scope_die_for (tree t, dw_die_ref context_die)
16572 {
16573   dw_die_ref scope_die = NULL;
16574   tree containing_scope;
16575   int i;
16576
16577   /* Non-types always go in the current scope.  */
16578   gcc_assert (TYPE_P (t));
16579
16580   containing_scope = TYPE_CONTEXT (t);
16581
16582   /* Use the containing namespace if it was passed in (for a declaration).  */
16583   if (containing_scope && TREE_CODE (containing_scope) == NAMESPACE_DECL)
16584     {
16585       if (context_die == lookup_decl_die (containing_scope))
16586         /* OK */;
16587       else
16588         containing_scope = NULL_TREE;
16589     }
16590
16591   /* Ignore function type "scopes" from the C frontend.  They mean that
16592      a tagged type is local to a parmlist of a function declarator, but
16593      that isn't useful to DWARF.  */
16594   if (containing_scope && TREE_CODE (containing_scope) == FUNCTION_TYPE)
16595     containing_scope = NULL_TREE;
16596
16597   if (containing_scope == NULL_TREE)
16598     scope_die = comp_unit_die;
16599   else if (TYPE_P (containing_scope))
16600     {
16601       /* For types, we can just look up the appropriate DIE.  But
16602          first we check to see if we're in the middle of emitting it
16603          so we know where the new DIE should go.  */
16604       for (i = VEC_length (tree, decl_scope_table) - 1; i >= 0; --i)
16605         if (VEC_index (tree, decl_scope_table, i) == containing_scope)
16606           break;
16607
16608       if (i < 0)
16609         {
16610           gcc_assert (debug_info_level <= DINFO_LEVEL_TERSE
16611                       || TREE_ASM_WRITTEN (containing_scope));
16612
16613           /* If none of the current dies are suitable, we get file scope.  */
16614           scope_die = comp_unit_die;
16615         }
16616       else
16617         scope_die = lookup_type_die (containing_scope);
16618     }
16619   else
16620     scope_die = context_die;
16621
16622   return scope_die;
16623 }
16624
16625 /* Returns nonzero if CONTEXT_DIE is internal to a function.  */
16626
16627 static inline int
16628 local_scope_p (dw_die_ref context_die)
16629 {
16630   for (; context_die; context_die = context_die->die_parent)
16631     if (context_die->die_tag == DW_TAG_inlined_subroutine
16632         || context_die->die_tag == DW_TAG_subprogram)
16633       return 1;
16634
16635   return 0;
16636 }
16637
16638 /* Returns nonzero if CONTEXT_DIE is a class.  */
16639
16640 static inline int
16641 class_scope_p (dw_die_ref context_die)
16642 {
16643   return (context_die
16644           && (context_die->die_tag == DW_TAG_structure_type
16645               || context_die->die_tag == DW_TAG_class_type
16646               || context_die->die_tag == DW_TAG_interface_type
16647               || context_die->die_tag == DW_TAG_union_type));
16648 }
16649
16650 /* Returns nonzero if CONTEXT_DIE is a class or namespace, for deciding
16651    whether or not to treat a DIE in this context as a declaration.  */
16652
16653 static inline int
16654 class_or_namespace_scope_p (dw_die_ref context_die)
16655 {
16656   return (class_scope_p (context_die)
16657           || (context_die && context_die->die_tag == DW_TAG_namespace));
16658 }
16659
16660 /* Many forms of DIEs require a "type description" attribute.  This
16661    routine locates the proper "type descriptor" die for the type given
16662    by 'type', and adds a DW_AT_type attribute below the given die.  */
16663
16664 static void
16665 add_type_attribute (dw_die_ref object_die, tree type, int decl_const,
16666                     int decl_volatile, dw_die_ref context_die)
16667 {
16668   enum tree_code code  = TREE_CODE (type);
16669   dw_die_ref type_die  = NULL;
16670
16671   /* ??? If this type is an unnamed subrange type of an integral, floating-point
16672      or fixed-point type, use the inner type.  This is because we have no
16673      support for unnamed types in base_type_die.  This can happen if this is
16674      an Ada subrange type.  Correct solution is emit a subrange type die.  */
16675   if ((code == INTEGER_TYPE || code == REAL_TYPE || code == FIXED_POINT_TYPE)
16676       && TREE_TYPE (type) != 0 && TYPE_NAME (type) == 0)
16677     type = TREE_TYPE (type), code = TREE_CODE (type);
16678
16679   if (code == ERROR_MARK
16680       /* Handle a special case.  For functions whose return type is void, we
16681          generate *no* type attribute.  (Note that no object may have type
16682          `void', so this only applies to function return types).  */
16683       || code == VOID_TYPE)
16684     return;
16685
16686   type_die = modified_type_die (type,
16687                                 decl_const || TYPE_READONLY (type),
16688                                 decl_volatile || TYPE_VOLATILE (type),
16689                                 context_die);
16690
16691   if (type_die != NULL)
16692     add_AT_die_ref (object_die, DW_AT_type, type_die);
16693 }
16694
16695 /* Given an object die, add the calling convention attribute for the
16696    function call type.  */
16697 static void
16698 add_calling_convention_attribute (dw_die_ref subr_die, tree decl)
16699 {
16700   enum dwarf_calling_convention value = DW_CC_normal;
16701
16702   value = ((enum dwarf_calling_convention)
16703            targetm.dwarf_calling_convention (TREE_TYPE (decl)));
16704
16705   /* DWARF doesn't provide a way to identify a program's source-level
16706      entry point.  DW_AT_calling_convention attributes are only meant
16707      to describe functions' calling conventions.  However, lacking a
16708      better way to signal the Fortran main program, we use this for the
16709      time being, following existing custom.  */
16710   if (is_fortran ()
16711       && !strcmp (IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl)), "MAIN__"))
16712     value = DW_CC_program;
16713
16714   /* Only add the attribute if the backend requests it, and
16715      is not DW_CC_normal.  */
16716   if (value && (value != DW_CC_normal))
16717     add_AT_unsigned (subr_die, DW_AT_calling_convention, value);
16718 }
16719
16720 /* Given a tree pointer to a struct, class, union, or enum type node, return
16721    a pointer to the (string) tag name for the given type, or zero if the type
16722    was declared without a tag.  */
16723
16724 static const char *
16725 type_tag (const_tree type)
16726 {
16727   const char *name = 0;
16728
16729   if (TYPE_NAME (type) != 0)
16730     {
16731       tree t = 0;
16732
16733       /* Find the IDENTIFIER_NODE for the type name.  */
16734       if (TREE_CODE (TYPE_NAME (type)) == IDENTIFIER_NODE)
16735         t = TYPE_NAME (type);
16736
16737       /* The g++ front end makes the TYPE_NAME of *each* tagged type point to
16738          a TYPE_DECL node, regardless of whether or not a `typedef' was
16739          involved.  */
16740       else if (TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
16741                && ! DECL_IGNORED_P (TYPE_NAME (type)))
16742         {
16743           /* We want to be extra verbose.  Don't call dwarf_name if
16744              DECL_NAME isn't set.  The default hook for decl_printable_name
16745              doesn't like that, and in this context it's correct to return
16746              0, instead of "<anonymous>" or the like.  */
16747           if (DECL_NAME (TYPE_NAME (type)))
16748             name = lang_hooks.dwarf_name (TYPE_NAME (type), 2);
16749         }
16750
16751       /* Now get the name as a string, or invent one.  */
16752       if (!name && t != 0)
16753         name = IDENTIFIER_POINTER (t);
16754     }
16755
16756   return (name == 0 || *name == '\0') ? 0 : name;
16757 }
16758
16759 /* Return the type associated with a data member, make a special check
16760    for bit field types.  */
16761
16762 static inline tree
16763 member_declared_type (const_tree member)
16764 {
16765   return (DECL_BIT_FIELD_TYPE (member)
16766           ? DECL_BIT_FIELD_TYPE (member) : TREE_TYPE (member));
16767 }
16768
16769 /* Get the decl's label, as described by its RTL. This may be different
16770    from the DECL_NAME name used in the source file.  */
16771
16772 #if 0
16773 static const char *
16774 decl_start_label (tree decl)
16775 {
16776   rtx x;
16777   const char *fnname;
16778
16779   x = DECL_RTL (decl);
16780   gcc_assert (MEM_P (x));
16781
16782   x = XEXP (x, 0);
16783   gcc_assert (GET_CODE (x) == SYMBOL_REF);
16784
16785   fnname = XSTR (x, 0);
16786   return fnname;
16787 }
16788 #endif
16789 \f
16790 /* These routines generate the internal representation of the DIE's for
16791    the compilation unit.  Debugging information is collected by walking
16792    the declaration trees passed in from dwarf2out_decl().  */
16793
16794 static void
16795 gen_array_type_die (tree type, dw_die_ref context_die)
16796 {
16797   dw_die_ref scope_die = scope_die_for (type, context_die);
16798   dw_die_ref array_die;
16799
16800   /* GNU compilers represent multidimensional array types as sequences of one
16801      dimensional array types whose element types are themselves array types.
16802      We sometimes squish that down to a single array_type DIE with multiple
16803      subscripts in the Dwarf debugging info.  The draft Dwarf specification
16804      say that we are allowed to do this kind of compression in C, because
16805      there is no difference between an array of arrays and a multidimensional
16806      array.  We don't do this for Ada to remain as close as possible to the
16807      actual representation, which is especially important against the language
16808      flexibilty wrt arrays of variable size.  */
16809
16810   bool collapse_nested_arrays = !is_ada ();
16811   tree element_type;
16812
16813   /* Emit DW_TAG_string_type for Fortran character types (with kind 1 only, as
16814      DW_TAG_string_type doesn't have DW_AT_type attribute).  */
16815   if (TYPE_STRING_FLAG (type)
16816       && TREE_CODE (type) == ARRAY_TYPE
16817       && is_fortran ()
16818       && TYPE_MODE (TREE_TYPE (type)) == TYPE_MODE (char_type_node))
16819     {
16820       HOST_WIDE_INT size;
16821
16822       array_die = new_die (DW_TAG_string_type, scope_die, type);
16823       add_name_attribute (array_die, type_tag (type));
16824       equate_type_number_to_die (type, array_die);
16825       size = int_size_in_bytes (type);
16826       if (size >= 0)
16827         add_AT_unsigned (array_die, DW_AT_byte_size, size);
16828       else if (TYPE_DOMAIN (type) != NULL_TREE
16829                && TYPE_MAX_VALUE (TYPE_DOMAIN (type)) != NULL_TREE
16830                && DECL_P (TYPE_MAX_VALUE (TYPE_DOMAIN (type))))
16831         {
16832           tree szdecl = TYPE_MAX_VALUE (TYPE_DOMAIN (type));
16833           dw_loc_list_ref loc = loc_list_from_tree (szdecl, 2);
16834
16835           size = int_size_in_bytes (TREE_TYPE (szdecl));
16836           if (loc && size > 0)
16837             {
16838               add_AT_location_description (array_die, DW_AT_string_length, loc);
16839               if (size != DWARF2_ADDR_SIZE)
16840                 add_AT_unsigned (array_die, DW_AT_byte_size, size);
16841             }
16842         }
16843       return;
16844     }
16845
16846   /* ??? The SGI dwarf reader fails for array of array of enum types
16847      (e.g. const enum machine_mode insn_operand_mode[2][10]) unless the inner
16848      array type comes before the outer array type.  We thus call gen_type_die
16849      before we new_die and must prevent nested array types collapsing for this
16850      target.  */
16851
16852 #ifdef MIPS_DEBUGGING_INFO
16853   gen_type_die (TREE_TYPE (type), context_die);
16854   collapse_nested_arrays = false;
16855 #endif
16856
16857   array_die = new_die (DW_TAG_array_type, scope_die, type);
16858   add_name_attribute (array_die, type_tag (type));
16859   equate_type_number_to_die (type, array_die);
16860
16861   if (TREE_CODE (type) == VECTOR_TYPE)
16862     {
16863       /* The frontend feeds us a representation for the vector as a struct
16864          containing an array.  Pull out the array type.  */
16865       type = TREE_TYPE (TYPE_FIELDS (TYPE_DEBUG_REPRESENTATION_TYPE (type)));
16866       add_AT_flag (array_die, DW_AT_GNU_vector, 1);
16867     }
16868
16869   /* For Fortran multidimensional arrays use DW_ORD_col_major ordering.  */
16870   if (is_fortran ()
16871       && TREE_CODE (type) == ARRAY_TYPE
16872       && TREE_CODE (TREE_TYPE (type)) == ARRAY_TYPE
16873       && !TYPE_STRING_FLAG (TREE_TYPE (type)))
16874     add_AT_unsigned (array_die, DW_AT_ordering, DW_ORD_col_major);
16875
16876 #if 0
16877   /* We default the array ordering.  SDB will probably do
16878      the right things even if DW_AT_ordering is not present.  It's not even
16879      an issue until we start to get into multidimensional arrays anyway.  If
16880      SDB is ever caught doing the Wrong Thing for multi-dimensional arrays,
16881      then we'll have to put the DW_AT_ordering attribute back in.  (But if
16882      and when we find out that we need to put these in, we will only do so
16883      for multidimensional arrays.  */
16884   add_AT_unsigned (array_die, DW_AT_ordering, DW_ORD_row_major);
16885 #endif
16886
16887 #ifdef MIPS_DEBUGGING_INFO
16888   /* The SGI compilers handle arrays of unknown bound by setting
16889      AT_declaration and not emitting any subrange DIEs.  */
16890   if (! TYPE_DOMAIN (type))
16891     add_AT_flag (array_die, DW_AT_declaration, 1);
16892   else
16893 #endif
16894     add_subscript_info (array_die, type, collapse_nested_arrays);
16895
16896   /* Add representation of the type of the elements of this array type and
16897      emit the corresponding DIE if we haven't done it already.  */
16898   element_type = TREE_TYPE (type);
16899   if (collapse_nested_arrays)
16900     while (TREE_CODE (element_type) == ARRAY_TYPE)
16901       {
16902         if (TYPE_STRING_FLAG (element_type) && is_fortran ())
16903           break;
16904         element_type = TREE_TYPE (element_type);
16905       }
16906
16907 #ifndef MIPS_DEBUGGING_INFO
16908   gen_type_die (element_type, context_die);
16909 #endif
16910
16911   add_type_attribute (array_die, element_type, 0, 0, context_die);
16912
16913   if (get_AT (array_die, DW_AT_name))
16914     add_pubtype (type, array_die);
16915 }
16916
16917 static dw_loc_descr_ref
16918 descr_info_loc (tree val, tree base_decl)
16919 {
16920   HOST_WIDE_INT size;
16921   dw_loc_descr_ref loc, loc2;
16922   enum dwarf_location_atom op;
16923
16924   if (val == base_decl)
16925     return new_loc_descr (DW_OP_push_object_address, 0, 0);
16926
16927   switch (TREE_CODE (val))
16928     {
16929     CASE_CONVERT:
16930       return descr_info_loc (TREE_OPERAND (val, 0), base_decl);
16931     case VAR_DECL:
16932       return loc_descriptor_from_tree (val, 0);
16933     case INTEGER_CST:
16934       if (host_integerp (val, 0))
16935         return int_loc_descriptor (tree_low_cst (val, 0));
16936       break;
16937     case INDIRECT_REF:
16938       size = int_size_in_bytes (TREE_TYPE (val));
16939       if (size < 0)
16940         break;
16941       loc = descr_info_loc (TREE_OPERAND (val, 0), base_decl);
16942       if (!loc)
16943         break;
16944       if (size == DWARF2_ADDR_SIZE)
16945         add_loc_descr (&loc, new_loc_descr (DW_OP_deref, 0, 0));
16946       else
16947         add_loc_descr (&loc, new_loc_descr (DW_OP_deref_size, size, 0));
16948       return loc;
16949     case POINTER_PLUS_EXPR:
16950     case PLUS_EXPR:
16951       if (host_integerp (TREE_OPERAND (val, 1), 1)
16952           && (unsigned HOST_WIDE_INT) tree_low_cst (TREE_OPERAND (val, 1), 1)
16953              < 16384)
16954         {
16955           loc = descr_info_loc (TREE_OPERAND (val, 0), base_decl);
16956           if (!loc)
16957             break;
16958           loc_descr_plus_const (&loc, tree_low_cst (TREE_OPERAND (val, 1), 0));
16959         }
16960       else
16961         {
16962           op = DW_OP_plus;
16963         do_binop:
16964           loc = descr_info_loc (TREE_OPERAND (val, 0), base_decl);
16965           if (!loc)
16966             break;
16967           loc2 = descr_info_loc (TREE_OPERAND (val, 1), base_decl);
16968           if (!loc2)
16969             break;
16970           add_loc_descr (&loc, loc2);
16971           add_loc_descr (&loc2, new_loc_descr (op, 0, 0));
16972         }
16973       return loc;
16974     case MINUS_EXPR:
16975       op = DW_OP_minus;
16976       goto do_binop;
16977     case MULT_EXPR:
16978       op = DW_OP_mul;
16979       goto do_binop;
16980     case EQ_EXPR:
16981       op = DW_OP_eq;
16982       goto do_binop;
16983     case NE_EXPR:
16984       op = DW_OP_ne;
16985       goto do_binop;
16986     default:
16987       break;
16988     }
16989   return NULL;
16990 }
16991
16992 static void
16993 add_descr_info_field (dw_die_ref die, enum dwarf_attribute attr,
16994                       tree val, tree base_decl)
16995 {
16996   dw_loc_descr_ref loc;
16997
16998   if (host_integerp (val, 0))
16999     {
17000       add_AT_unsigned (die, attr, tree_low_cst (val, 0));
17001       return;
17002     }
17003
17004   loc = descr_info_loc (val, base_decl);
17005   if (!loc)
17006     return;
17007
17008   add_AT_loc (die, attr, loc);
17009 }
17010
17011 /* This routine generates DIE for array with hidden descriptor, details
17012    are filled into *info by a langhook.  */
17013
17014 static void
17015 gen_descr_array_type_die (tree type, struct array_descr_info *info,
17016                           dw_die_ref context_die)
17017 {
17018   dw_die_ref scope_die = scope_die_for (type, context_die);
17019   dw_die_ref array_die;
17020   int dim;
17021
17022   array_die = new_die (DW_TAG_array_type, scope_die, type);
17023   add_name_attribute (array_die, type_tag (type));
17024   equate_type_number_to_die (type, array_die);
17025
17026   /* For Fortran multidimensional arrays use DW_ORD_col_major ordering.  */
17027   if (is_fortran ()
17028       && info->ndimensions >= 2)
17029     add_AT_unsigned (array_die, DW_AT_ordering, DW_ORD_col_major);
17030
17031   if (info->data_location)
17032     add_descr_info_field (array_die, DW_AT_data_location, info->data_location,
17033                           info->base_decl);
17034   if (info->associated)
17035     add_descr_info_field (array_die, DW_AT_associated, info->associated,
17036                           info->base_decl);
17037   if (info->allocated)
17038     add_descr_info_field (array_die, DW_AT_allocated, info->allocated,
17039                           info->base_decl);
17040
17041   for (dim = 0; dim < info->ndimensions; dim++)
17042     {
17043       dw_die_ref subrange_die
17044         = new_die (DW_TAG_subrange_type, array_die, NULL);
17045
17046       if (info->dimen[dim].lower_bound)
17047         {
17048           /* If it is the default value, omit it.  */
17049           if ((is_c_family () || is_java ())
17050               && integer_zerop (info->dimen[dim].lower_bound))
17051             ;
17052           else if (is_fortran ()
17053                    && integer_onep (info->dimen[dim].lower_bound))
17054             ;
17055           else
17056             add_descr_info_field (subrange_die, DW_AT_lower_bound,
17057                                   info->dimen[dim].lower_bound,
17058                                   info->base_decl);
17059         }
17060       if (info->dimen[dim].upper_bound)
17061         add_descr_info_field (subrange_die, DW_AT_upper_bound,
17062                               info->dimen[dim].upper_bound,
17063                               info->base_decl);
17064       if (info->dimen[dim].stride)
17065         add_descr_info_field (subrange_die, DW_AT_byte_stride,
17066                               info->dimen[dim].stride,
17067                               info->base_decl);
17068     }
17069
17070   gen_type_die (info->element_type, context_die);
17071   add_type_attribute (array_die, info->element_type, 0, 0, context_die);
17072
17073   if (get_AT (array_die, DW_AT_name))
17074     add_pubtype (type, array_die);
17075 }
17076
17077 #if 0
17078 static void
17079 gen_entry_point_die (tree decl, dw_die_ref context_die)
17080 {
17081   tree origin = decl_ultimate_origin (decl);
17082   dw_die_ref decl_die = new_die (DW_TAG_entry_point, context_die, decl);
17083
17084   if (origin != NULL)
17085     add_abstract_origin_attribute (decl_die, origin);
17086   else
17087     {
17088       add_name_and_src_coords_attributes (decl_die, decl);
17089       add_type_attribute (decl_die, TREE_TYPE (TREE_TYPE (decl)),
17090                           0, 0, context_die);
17091     }
17092
17093   if (DECL_ABSTRACT (decl))
17094     equate_decl_number_to_die (decl, decl_die);
17095   else
17096     add_AT_lbl_id (decl_die, DW_AT_low_pc, decl_start_label (decl));
17097 }
17098 #endif
17099
17100 /* Walk through the list of incomplete types again, trying once more to
17101    emit full debugging info for them.  */
17102
17103 static void
17104 retry_incomplete_types (void)
17105 {
17106   int i;
17107
17108   for (i = VEC_length (tree, incomplete_types) - 1; i >= 0; i--)
17109     gen_type_die (VEC_index (tree, incomplete_types, i), comp_unit_die);
17110 }
17111
17112 /* Determine what tag to use for a record type.  */
17113
17114 static enum dwarf_tag
17115 record_type_tag (tree type)
17116 {
17117   if (! lang_hooks.types.classify_record)
17118     return DW_TAG_structure_type;
17119
17120   switch (lang_hooks.types.classify_record (type))
17121     {
17122     case RECORD_IS_STRUCT:
17123       return DW_TAG_structure_type;
17124
17125     case RECORD_IS_CLASS:
17126       return DW_TAG_class_type;
17127
17128     case RECORD_IS_INTERFACE:
17129       if (dwarf_version >= 3 || !dwarf_strict)
17130         return DW_TAG_interface_type;
17131       return DW_TAG_structure_type;
17132
17133     default:
17134       gcc_unreachable ();
17135     }
17136 }
17137
17138 /* Generate a DIE to represent an enumeration type.  Note that these DIEs
17139    include all of the information about the enumeration values also. Each
17140    enumerated type name/value is listed as a child of the enumerated type
17141    DIE.  */
17142
17143 static dw_die_ref
17144 gen_enumeration_type_die (tree type, dw_die_ref context_die)
17145 {
17146   dw_die_ref type_die = lookup_type_die (type);
17147
17148   if (type_die == NULL)
17149     {
17150       type_die = new_die (DW_TAG_enumeration_type,
17151                           scope_die_for (type, context_die), type);
17152       equate_type_number_to_die (type, type_die);
17153       add_name_attribute (type_die, type_tag (type));
17154     }
17155   else if (! TYPE_SIZE (type))
17156     return type_die;
17157   else
17158     remove_AT (type_die, DW_AT_declaration);
17159
17160   /* Handle a GNU C/C++ extension, i.e. incomplete enum types.  If the
17161      given enum type is incomplete, do not generate the DW_AT_byte_size
17162      attribute or the DW_AT_element_list attribute.  */
17163   if (TYPE_SIZE (type))
17164     {
17165       tree link;
17166
17167       TREE_ASM_WRITTEN (type) = 1;
17168       add_byte_size_attribute (type_die, type);
17169       if (TYPE_STUB_DECL (type) != NULL_TREE)
17170         add_src_coords_attributes (type_die, TYPE_STUB_DECL (type));
17171
17172       /* If the first reference to this type was as the return type of an
17173          inline function, then it may not have a parent.  Fix this now.  */
17174       if (type_die->die_parent == NULL)
17175         add_child_die (scope_die_for (type, context_die), type_die);
17176
17177       for (link = TYPE_VALUES (type);
17178            link != NULL; link = TREE_CHAIN (link))
17179         {
17180           dw_die_ref enum_die = new_die (DW_TAG_enumerator, type_die, link);
17181           tree value = TREE_VALUE (link);
17182
17183           add_name_attribute (enum_die,
17184                               IDENTIFIER_POINTER (TREE_PURPOSE (link)));
17185
17186           if (TREE_CODE (value) == CONST_DECL)
17187             value = DECL_INITIAL (value);
17188
17189           if (host_integerp (value, TYPE_UNSIGNED (TREE_TYPE (value))))
17190             /* DWARF2 does not provide a way of indicating whether or
17191                not enumeration constants are signed or unsigned.  GDB
17192                always assumes the values are signed, so we output all
17193                values as if they were signed.  That means that
17194                enumeration constants with very large unsigned values
17195                will appear to have negative values in the debugger.  */
17196             add_AT_int (enum_die, DW_AT_const_value,
17197                         tree_low_cst (value, tree_int_cst_sgn (value) > 0));
17198         }
17199     }
17200   else
17201     add_AT_flag (type_die, DW_AT_declaration, 1);
17202
17203   if (get_AT (type_die, DW_AT_name))
17204     add_pubtype (type, type_die);
17205
17206   return type_die;
17207 }
17208
17209 /* Generate a DIE to represent either a real live formal parameter decl or to
17210    represent just the type of some formal parameter position in some function
17211    type.
17212
17213    Note that this routine is a bit unusual because its argument may be a
17214    ..._DECL node (i.e. either a PARM_DECL or perhaps a VAR_DECL which
17215    represents an inlining of some PARM_DECL) or else some sort of a ..._TYPE
17216    node.  If it's the former then this function is being called to output a
17217    DIE to represent a formal parameter object (or some inlining thereof).  If
17218    it's the latter, then this function is only being called to output a
17219    DW_TAG_formal_parameter DIE to stand as a placeholder for some formal
17220    argument type of some subprogram type.
17221    If EMIT_NAME_P is true, name and source coordinate attributes
17222    are emitted.  */
17223
17224 static dw_die_ref
17225 gen_formal_parameter_die (tree node, tree origin, bool emit_name_p,
17226                           dw_die_ref context_die)
17227 {
17228   tree node_or_origin = node ? node : origin;
17229   dw_die_ref parm_die
17230     = new_die (DW_TAG_formal_parameter, context_die, node);
17231
17232   switch (TREE_CODE_CLASS (TREE_CODE (node_or_origin)))
17233     {
17234     case tcc_declaration:
17235       if (!origin)
17236         origin = decl_ultimate_origin (node);
17237       if (origin != NULL)
17238         add_abstract_origin_attribute (parm_die, origin);
17239       else
17240         {
17241           tree type = TREE_TYPE (node);
17242           if (emit_name_p)
17243             add_name_and_src_coords_attributes (parm_die, node);
17244           if (decl_by_reference_p (node))
17245             add_type_attribute (parm_die, TREE_TYPE (type), 0, 0,
17246                                 context_die);
17247           else
17248             add_type_attribute (parm_die, type,
17249                                 TREE_READONLY (node),
17250                                 TREE_THIS_VOLATILE (node),
17251                                 context_die);
17252           if (DECL_ARTIFICIAL (node))
17253             add_AT_flag (parm_die, DW_AT_artificial, 1);
17254         }
17255
17256       if (node && node != origin)
17257         equate_decl_number_to_die (node, parm_die);
17258       if (! DECL_ABSTRACT (node_or_origin))
17259         add_location_or_const_value_attribute (parm_die, node_or_origin,
17260                                                DW_AT_location);
17261
17262       break;
17263
17264     case tcc_type:
17265       /* We were called with some kind of a ..._TYPE node.  */
17266       add_type_attribute (parm_die, node_or_origin, 0, 0, context_die);
17267       break;
17268
17269     default:
17270       gcc_unreachable ();
17271     }
17272
17273   return parm_die;
17274 }
17275
17276 /* Generate and return a DW_TAG_GNU_formal_parameter_pack. Also generate
17277    children DW_TAG_formal_parameter DIEs representing the arguments of the
17278    parameter pack.
17279
17280    PARM_PACK must be a function parameter pack.
17281    PACK_ARG is the first argument of the parameter pack. Its TREE_CHAIN
17282    must point to the subsequent arguments of the function PACK_ARG belongs to.
17283    SUBR_DIE is the DIE of the function PACK_ARG belongs to.
17284    If NEXT_ARG is non NULL, *NEXT_ARG is set to the function argument
17285    following the last one for which a DIE was generated.  */
17286
17287 static dw_die_ref
17288 gen_formal_parameter_pack_die  (tree parm_pack,
17289                                 tree pack_arg,
17290                                 dw_die_ref subr_die,
17291                                 tree *next_arg)
17292 {
17293   tree arg;
17294   dw_die_ref parm_pack_die;
17295
17296   gcc_assert (parm_pack
17297               && lang_hooks.function_parameter_pack_p (parm_pack)
17298               && subr_die);
17299
17300   parm_pack_die = new_die (DW_TAG_GNU_formal_parameter_pack, subr_die, parm_pack);
17301   add_src_coords_attributes (parm_pack_die, parm_pack);
17302
17303   for (arg = pack_arg; arg; arg = TREE_CHAIN (arg))
17304     {
17305       if (! lang_hooks.decls.function_parm_expanded_from_pack_p (arg,
17306                                                                  parm_pack))
17307         break;
17308       gen_formal_parameter_die (arg, NULL,
17309                                 false /* Don't emit name attribute.  */,
17310                                 parm_pack_die);
17311     }
17312   if (next_arg)
17313     *next_arg = arg;
17314   return parm_pack_die;
17315 }
17316
17317 /* Generate a special type of DIE used as a stand-in for a trailing ellipsis
17318    at the end of an (ANSI prototyped) formal parameters list.  */
17319
17320 static void
17321 gen_unspecified_parameters_die (tree decl_or_type, dw_die_ref context_die)
17322 {
17323   new_die (DW_TAG_unspecified_parameters, context_die, decl_or_type);
17324 }
17325
17326 /* Generate a list of nameless DW_TAG_formal_parameter DIEs (and perhaps a
17327    DW_TAG_unspecified_parameters DIE) to represent the types of the formal
17328    parameters as specified in some function type specification (except for
17329    those which appear as part of a function *definition*).  */
17330
17331 static void
17332 gen_formal_types_die (tree function_or_method_type, dw_die_ref context_die)
17333 {
17334   tree link;
17335   tree formal_type = NULL;
17336   tree first_parm_type;
17337   tree arg;
17338
17339   if (TREE_CODE (function_or_method_type) == FUNCTION_DECL)
17340     {
17341       arg = DECL_ARGUMENTS (function_or_method_type);
17342       function_or_method_type = TREE_TYPE (function_or_method_type);
17343     }
17344   else
17345     arg = NULL_TREE;
17346
17347   first_parm_type = TYPE_ARG_TYPES (function_or_method_type);
17348
17349   /* Make our first pass over the list of formal parameter types and output a
17350      DW_TAG_formal_parameter DIE for each one.  */
17351   for (link = first_parm_type; link; )
17352     {
17353       dw_die_ref parm_die;
17354
17355       formal_type = TREE_VALUE (link);
17356       if (formal_type == void_type_node)
17357         break;
17358
17359       /* Output a (nameless) DIE to represent the formal parameter itself.  */
17360       parm_die = gen_formal_parameter_die (formal_type, NULL,
17361                                            true /* Emit name attribute.  */,
17362                                            context_die);
17363       if ((TREE_CODE (function_or_method_type) == METHOD_TYPE
17364            && link == first_parm_type)
17365           || (arg && DECL_ARTIFICIAL (arg)))
17366         add_AT_flag (parm_die, DW_AT_artificial, 1);
17367
17368       link = TREE_CHAIN (link);
17369       if (arg)
17370         arg = TREE_CHAIN (arg);
17371     }
17372
17373   /* If this function type has an ellipsis, add a
17374      DW_TAG_unspecified_parameters DIE to the end of the parameter list.  */
17375   if (formal_type != void_type_node)
17376     gen_unspecified_parameters_die (function_or_method_type, context_die);
17377
17378   /* Make our second (and final) pass over the list of formal parameter types
17379      and output DIEs to represent those types (as necessary).  */
17380   for (link = TYPE_ARG_TYPES (function_or_method_type);
17381        link && TREE_VALUE (link);
17382        link = TREE_CHAIN (link))
17383     gen_type_die (TREE_VALUE (link), context_die);
17384 }
17385
17386 /* We want to generate the DIE for TYPE so that we can generate the
17387    die for MEMBER, which has been defined; we will need to refer back
17388    to the member declaration nested within TYPE.  If we're trying to
17389    generate minimal debug info for TYPE, processing TYPE won't do the
17390    trick; we need to attach the member declaration by hand.  */
17391
17392 static void
17393 gen_type_die_for_member (tree type, tree member, dw_die_ref context_die)
17394 {
17395   gen_type_die (type, context_die);
17396
17397   /* If we're trying to avoid duplicate debug info, we may not have
17398      emitted the member decl for this function.  Emit it now.  */
17399   if (TYPE_DECL_SUPPRESS_DEBUG (TYPE_STUB_DECL (type))
17400       && ! lookup_decl_die (member))
17401     {
17402       dw_die_ref type_die;
17403       gcc_assert (!decl_ultimate_origin (member));
17404
17405       push_decl_scope (type);
17406       type_die = lookup_type_die (type);
17407       if (TREE_CODE (member) == FUNCTION_DECL)
17408         gen_subprogram_die (member, type_die);
17409       else if (TREE_CODE (member) == FIELD_DECL)
17410         {
17411           /* Ignore the nameless fields that are used to skip bits but handle
17412              C++ anonymous unions and structs.  */
17413           if (DECL_NAME (member) != NULL_TREE
17414               || TREE_CODE (TREE_TYPE (member)) == UNION_TYPE
17415               || TREE_CODE (TREE_TYPE (member)) == RECORD_TYPE)
17416             {
17417               gen_type_die (member_declared_type (member), type_die);
17418               gen_field_die (member, type_die);
17419             }
17420         }
17421       else
17422         gen_variable_die (member, NULL_TREE, type_die);
17423
17424       pop_decl_scope ();
17425     }
17426 }
17427
17428 /* Generate the DWARF2 info for the "abstract" instance of a function which we
17429    may later generate inlined and/or out-of-line instances of.  */
17430
17431 static void
17432 dwarf2out_abstract_function (tree decl)
17433 {
17434   dw_die_ref old_die;
17435   tree save_fn;
17436   tree context;
17437   int was_abstract = DECL_ABSTRACT (decl);
17438   htab_t old_decl_loc_table;
17439
17440   /* Make sure we have the actual abstract inline, not a clone.  */
17441   decl = DECL_ORIGIN (decl);
17442
17443   old_die = lookup_decl_die (decl);
17444   if (old_die && get_AT (old_die, DW_AT_inline))
17445     /* We've already generated the abstract instance.  */
17446     return;
17447
17448   /* We can be called while recursively when seeing block defining inlined subroutine
17449      DIE.  Be sure to not clobber the outer location table nor use it or we would
17450      get locations in abstract instantces.  */
17451   old_decl_loc_table = decl_loc_table;
17452   decl_loc_table = NULL;
17453
17454   /* Be sure we've emitted the in-class declaration DIE (if any) first, so
17455      we don't get confused by DECL_ABSTRACT.  */
17456   if (debug_info_level > DINFO_LEVEL_TERSE)
17457     {
17458       context = decl_class_context (decl);
17459       if (context)
17460         gen_type_die_for_member
17461           (context, decl, decl_function_context (decl) ? NULL : comp_unit_die);
17462     }
17463
17464   /* Pretend we've just finished compiling this function.  */
17465   save_fn = current_function_decl;
17466   current_function_decl = decl;
17467   push_cfun (DECL_STRUCT_FUNCTION (decl));
17468
17469   set_decl_abstract_flags (decl, 1);
17470   dwarf2out_decl (decl);
17471   if (! was_abstract)
17472     set_decl_abstract_flags (decl, 0);
17473
17474   current_function_decl = save_fn;
17475   decl_loc_table = old_decl_loc_table;
17476   pop_cfun ();
17477 }
17478
17479 /* Helper function of premark_used_types() which gets called through
17480    htab_traverse.
17481
17482    Marks the DIE of a given type in *SLOT as perennial, so it never gets
17483    marked as unused by prune_unused_types.  */
17484
17485 static int
17486 premark_used_types_helper (void **slot, void *data ATTRIBUTE_UNUSED)
17487 {
17488   tree type;
17489   dw_die_ref die;
17490
17491   type = (tree) *slot;
17492   die = lookup_type_die (type);
17493   if (die != NULL)
17494     die->die_perennial_p = 1;
17495   return 1;
17496 }
17497
17498 /* Helper function of premark_types_used_by_global_vars which gets called
17499    through htab_traverse.
17500
17501    Marks the DIE of a given type in *SLOT as perennial, so it never gets
17502    marked as unused by prune_unused_types. The DIE of the type is marked
17503    only if the global variable using the type will actually be emitted.  */
17504
17505 static int
17506 premark_types_used_by_global_vars_helper (void **slot,
17507                                           void *data ATTRIBUTE_UNUSED)
17508 {
17509   struct types_used_by_vars_entry *entry;
17510   dw_die_ref die;
17511
17512   entry = (struct types_used_by_vars_entry *) *slot;
17513   gcc_assert (entry->type != NULL
17514               && entry->var_decl != NULL);
17515   die = lookup_type_die (entry->type);
17516   if (die)
17517     {
17518       /* Ask cgraph if the global variable really is to be emitted.
17519          If yes, then we'll keep the DIE of ENTRY->TYPE.  */
17520       struct varpool_node *node = varpool_node (entry->var_decl);
17521       if (node->needed)
17522         {
17523           die->die_perennial_p = 1;
17524           /* Keep the parent DIEs as well.  */
17525           while ((die = die->die_parent) && die->die_perennial_p == 0)
17526             die->die_perennial_p = 1;
17527         }
17528     }
17529   return 1;
17530 }
17531
17532 /* Mark all members of used_types_hash as perennial.  */
17533
17534 static void
17535 premark_used_types (void)
17536 {
17537   if (cfun && cfun->used_types_hash)
17538     htab_traverse (cfun->used_types_hash, premark_used_types_helper, NULL);
17539 }
17540
17541 /* Mark all members of types_used_by_vars_entry as perennial.  */
17542
17543 static void
17544 premark_types_used_by_global_vars (void)
17545 {
17546   if (types_used_by_vars_hash)
17547     htab_traverse (types_used_by_vars_hash,
17548                    premark_types_used_by_global_vars_helper, NULL);
17549 }
17550
17551 /* Generate a DIE to represent a declared function (either file-scope or
17552    block-local).  */
17553
17554 static void
17555 gen_subprogram_die (tree decl, dw_die_ref context_die)
17556 {
17557   char label_id[MAX_ARTIFICIAL_LABEL_BYTES];
17558   tree origin = decl_ultimate_origin (decl);
17559   dw_die_ref subr_die;
17560   tree fn_arg_types;
17561   tree outer_scope;
17562   dw_die_ref old_die = lookup_decl_die (decl);
17563   int declaration = (current_function_decl != decl
17564                      || class_or_namespace_scope_p (context_die));
17565
17566   premark_used_types ();
17567
17568   /* It is possible to have both DECL_ABSTRACT and DECLARATION be true if we
17569      started to generate the abstract instance of an inline, decided to output
17570      its containing class, and proceeded to emit the declaration of the inline
17571      from the member list for the class.  If so, DECLARATION takes priority;
17572      we'll get back to the abstract instance when done with the class.  */
17573
17574   /* The class-scope declaration DIE must be the primary DIE.  */
17575   if (origin && declaration && class_or_namespace_scope_p (context_die))
17576     {
17577       origin = NULL;
17578       gcc_assert (!old_die);
17579     }
17580
17581   /* Now that the C++ front end lazily declares artificial member fns, we
17582      might need to retrofit the declaration into its class.  */
17583   if (!declaration && !origin && !old_die
17584       && DECL_CONTEXT (decl) && TYPE_P (DECL_CONTEXT (decl))
17585       && !class_or_namespace_scope_p (context_die)
17586       && debug_info_level > DINFO_LEVEL_TERSE)
17587     old_die = force_decl_die (decl);
17588
17589   if (origin != NULL)
17590     {
17591       gcc_assert (!declaration || local_scope_p (context_die));
17592
17593       /* Fixup die_parent for the abstract instance of a nested
17594          inline function.  */
17595       if (old_die && old_die->die_parent == NULL)
17596         add_child_die (context_die, old_die);
17597
17598       subr_die = new_die (DW_TAG_subprogram, context_die, decl);
17599       add_abstract_origin_attribute (subr_die, origin);
17600     }
17601   else if (old_die)
17602     {
17603       expanded_location s = expand_location (DECL_SOURCE_LOCATION (decl));
17604       struct dwarf_file_data * file_index = lookup_filename (s.file);
17605
17606       if (!get_AT_flag (old_die, DW_AT_declaration)
17607           /* We can have a normal definition following an inline one in the
17608              case of redefinition of GNU C extern inlines.
17609              It seems reasonable to use AT_specification in this case.  */
17610           && !get_AT (old_die, DW_AT_inline))
17611         {
17612           /* Detect and ignore this case, where we are trying to output
17613              something we have already output.  */
17614           return;
17615         }
17616
17617       /* If the definition comes from the same place as the declaration,
17618          maybe use the old DIE.  We always want the DIE for this function
17619          that has the *_pc attributes to be under comp_unit_die so the
17620          debugger can find it.  We also need to do this for abstract
17621          instances of inlines, since the spec requires the out-of-line copy
17622          to have the same parent.  For local class methods, this doesn't
17623          apply; we just use the old DIE.  */
17624       if ((old_die->die_parent == comp_unit_die || context_die == NULL)
17625           && (DECL_ARTIFICIAL (decl)
17626               || (get_AT_file (old_die, DW_AT_decl_file) == file_index
17627                   && (get_AT_unsigned (old_die, DW_AT_decl_line)
17628                       == (unsigned) s.line))))
17629         {
17630           subr_die = old_die;
17631
17632           /* Clear out the declaration attribute and the formal parameters.
17633              Do not remove all children, because it is possible that this
17634              declaration die was forced using force_decl_die(). In such
17635              cases die that forced declaration die (e.g. TAG_imported_module)
17636              is one of the children that we do not want to remove.  */
17637           remove_AT (subr_die, DW_AT_declaration);
17638           remove_child_TAG (subr_die, DW_TAG_formal_parameter);
17639         }
17640       else
17641         {
17642           subr_die = new_die (DW_TAG_subprogram, context_die, decl);
17643           add_AT_specification (subr_die, old_die);
17644           if (get_AT_file (old_die, DW_AT_decl_file) != file_index)
17645             add_AT_file (subr_die, DW_AT_decl_file, file_index);
17646           if (get_AT_unsigned (old_die, DW_AT_decl_line) != (unsigned) s.line)
17647             add_AT_unsigned (subr_die, DW_AT_decl_line, s.line);
17648         }
17649     }
17650   else
17651     {
17652       subr_die = new_die (DW_TAG_subprogram, context_die, decl);
17653
17654       if (TREE_PUBLIC (decl))
17655         add_AT_flag (subr_die, DW_AT_external, 1);
17656
17657       add_name_and_src_coords_attributes (subr_die, decl);
17658       if (debug_info_level > DINFO_LEVEL_TERSE)
17659         {
17660           add_prototyped_attribute (subr_die, TREE_TYPE (decl));
17661           add_type_attribute (subr_die, TREE_TYPE (TREE_TYPE (decl)),
17662                               0, 0, context_die);
17663         }
17664
17665       add_pure_or_virtual_attribute (subr_die, decl);
17666       if (DECL_ARTIFICIAL (decl))
17667         add_AT_flag (subr_die, DW_AT_artificial, 1);
17668
17669       if (TREE_PROTECTED (decl))
17670         add_AT_unsigned (subr_die, DW_AT_accessibility, DW_ACCESS_protected);
17671       else if (TREE_PRIVATE (decl))
17672         add_AT_unsigned (subr_die, DW_AT_accessibility, DW_ACCESS_private);
17673     }
17674
17675   if (declaration)
17676     {
17677       if (!old_die || !get_AT (old_die, DW_AT_inline))
17678         {
17679           add_AT_flag (subr_die, DW_AT_declaration, 1);
17680
17681           /* If this is an explicit function declaration then generate
17682              a DW_AT_explicit attribute.  */
17683           if (lang_hooks.decls.function_decl_explicit_p (decl)
17684               && (dwarf_version >= 3 || !dwarf_strict))
17685             add_AT_flag (subr_die, DW_AT_explicit, 1);
17686
17687           /* The first time we see a member function, it is in the context of
17688              the class to which it belongs.  We make sure of this by emitting
17689              the class first.  The next time is the definition, which is
17690              handled above.  The two may come from the same source text.
17691
17692              Note that force_decl_die() forces function declaration die. It is
17693              later reused to represent definition.  */
17694           equate_decl_number_to_die (decl, subr_die);
17695         }
17696     }
17697   else if (DECL_ABSTRACT (decl))
17698     {
17699       if (DECL_DECLARED_INLINE_P (decl))
17700         {
17701           if (cgraph_function_possibly_inlined_p (decl))
17702             add_AT_unsigned (subr_die, DW_AT_inline, DW_INL_declared_inlined);
17703           else
17704             add_AT_unsigned (subr_die, DW_AT_inline, DW_INL_declared_not_inlined);
17705         }
17706       else
17707         {
17708           if (cgraph_function_possibly_inlined_p (decl))
17709             add_AT_unsigned (subr_die, DW_AT_inline, DW_INL_inlined);
17710           else
17711             add_AT_unsigned (subr_die, DW_AT_inline, DW_INL_not_inlined);
17712         }
17713
17714       if (DECL_DECLARED_INLINE_P (decl)
17715           && lookup_attribute ("artificial", DECL_ATTRIBUTES (decl)))
17716         add_AT_flag (subr_die, DW_AT_artificial, 1);
17717
17718       equate_decl_number_to_die (decl, subr_die);
17719     }
17720   else if (!DECL_EXTERNAL (decl))
17721     {
17722       HOST_WIDE_INT cfa_fb_offset;
17723
17724       if (!old_die || !get_AT (old_die, DW_AT_inline))
17725         equate_decl_number_to_die (decl, subr_die);
17726
17727       if (!flag_reorder_blocks_and_partition)
17728         {
17729           ASM_GENERATE_INTERNAL_LABEL (label_id, FUNC_BEGIN_LABEL,
17730                                        current_function_funcdef_no);
17731           add_AT_lbl_id (subr_die, DW_AT_low_pc, label_id);
17732           ASM_GENERATE_INTERNAL_LABEL (label_id, FUNC_END_LABEL,
17733                                        current_function_funcdef_no);
17734           add_AT_lbl_id (subr_die, DW_AT_high_pc, label_id);
17735
17736           add_pubname (decl, subr_die);
17737           add_arange (decl, subr_die);
17738         }
17739       else
17740         {  /* Do nothing for now; maybe need to duplicate die, one for
17741               hot section and one for cold section, then use the hot/cold
17742               section begin/end labels to generate the aranges...  */
17743           /*
17744             add_AT_lbl_id (subr_die, DW_AT_low_pc, hot_section_label);
17745             add_AT_lbl_id (subr_die, DW_AT_high_pc, hot_section_end_label);
17746             add_AT_lbl_id (subr_die, DW_AT_lo_user, unlikely_section_label);
17747             add_AT_lbl_id (subr_die, DW_AT_hi_user, cold_section_end_label);
17748
17749             add_pubname (decl, subr_die);
17750             add_arange (decl, subr_die);
17751             add_arange (decl, subr_die);
17752            */
17753         }
17754
17755 #ifdef MIPS_DEBUGGING_INFO
17756       /* Add a reference to the FDE for this routine.  */
17757       add_AT_fde_ref (subr_die, DW_AT_MIPS_fde, current_funcdef_fde);
17758 #endif
17759
17760       cfa_fb_offset = CFA_FRAME_BASE_OFFSET (decl);
17761
17762       /* We define the "frame base" as the function's CFA.  This is more
17763          convenient for several reasons: (1) It's stable across the prologue
17764          and epilogue, which makes it better than just a frame pointer,
17765          (2) With dwarf3, there exists a one-byte encoding that allows us
17766          to reference the .debug_frame data by proxy, but failing that,
17767          (3) We can at least reuse the code inspection and interpretation
17768          code that determines the CFA position at various points in the
17769          function.  */
17770       if (dwarf_version >= 3)
17771         {
17772           dw_loc_descr_ref op = new_loc_descr (DW_OP_call_frame_cfa, 0, 0);
17773           add_AT_loc (subr_die, DW_AT_frame_base, op);
17774         }
17775       else
17776         {
17777           dw_loc_list_ref list = convert_cfa_to_fb_loc_list (cfa_fb_offset);
17778           if (list->dw_loc_next)
17779             add_AT_loc_list (subr_die, DW_AT_frame_base, list);
17780           else
17781             add_AT_loc (subr_die, DW_AT_frame_base, list->expr);
17782         }
17783
17784       /* Compute a displacement from the "steady-state frame pointer" to
17785          the CFA.  The former is what all stack slots and argument slots
17786          will reference in the rtl; the later is what we've told the
17787          debugger about.  We'll need to adjust all frame_base references
17788          by this displacement.  */
17789       compute_frame_pointer_to_fb_displacement (cfa_fb_offset);
17790
17791       if (cfun->static_chain_decl)
17792         add_AT_location_description (subr_die, DW_AT_static_link,
17793                  loc_list_from_tree (cfun->static_chain_decl, 2));
17794     }
17795
17796   /* Generate child dies for template paramaters.  */
17797   if (debug_info_level > DINFO_LEVEL_TERSE)
17798     gen_generic_params_dies (decl);
17799
17800   /* Now output descriptions of the arguments for this function. This gets
17801      (unnecessarily?) complex because of the fact that the DECL_ARGUMENT list
17802      for a FUNCTION_DECL doesn't indicate cases where there was a trailing
17803      `...' at the end of the formal parameter list.  In order to find out if
17804      there was a trailing ellipsis or not, we must instead look at the type
17805      associated with the FUNCTION_DECL.  This will be a node of type
17806      FUNCTION_TYPE. If the chain of type nodes hanging off of this
17807      FUNCTION_TYPE node ends with a void_type_node then there should *not* be
17808      an ellipsis at the end.  */
17809
17810   /* In the case where we are describing a mere function declaration, all we
17811      need to do here (and all we *can* do here) is to describe the *types* of
17812      its formal parameters.  */
17813   if (debug_info_level <= DINFO_LEVEL_TERSE)
17814     ;
17815   else if (declaration)
17816     gen_formal_types_die (decl, subr_die);
17817   else
17818     {
17819       /* Generate DIEs to represent all known formal parameters.  */
17820       tree parm = DECL_ARGUMENTS (decl);
17821       tree generic_decl = lang_hooks.decls.get_generic_function_decl (decl);
17822       tree generic_decl_parm = generic_decl
17823                                 ? DECL_ARGUMENTS (generic_decl)
17824                                 : NULL;
17825
17826       /* Now we want to walk the list of parameters of the function and
17827          emit their relevant DIEs.
17828
17829          We consider the case of DECL being an instance of a generic function
17830          as well as it being a normal function.
17831
17832          If DECL is an instance of a generic function we walk the
17833          parameters of the generic function declaration _and_ the parameters of
17834          DECL itself. This is useful because we want to emit specific DIEs for
17835          function parameter packs and those are declared as part of the
17836          generic function declaration. In that particular case,
17837          the parameter pack yields a DW_TAG_GNU_formal_parameter_pack DIE.
17838          That DIE has children DIEs representing the set of arguments
17839          of the pack. Note that the set of pack arguments can be empty.
17840          In that case, the DW_TAG_GNU_formal_parameter_pack DIE will not have any
17841          children DIE.
17842
17843          Otherwise, we just consider the parameters of DECL.  */
17844       while (generic_decl_parm || parm)
17845         {
17846           if (generic_decl_parm
17847               && lang_hooks.function_parameter_pack_p (generic_decl_parm))
17848             gen_formal_parameter_pack_die (generic_decl_parm,
17849                                            parm, subr_die,
17850                                            &parm);
17851           else if (parm)
17852             {
17853               gen_decl_die (parm, NULL, subr_die);
17854               parm = TREE_CHAIN (parm);
17855             }
17856
17857           if (generic_decl_parm)
17858             generic_decl_parm = TREE_CHAIN (generic_decl_parm);
17859         }
17860
17861       /* Decide whether we need an unspecified_parameters DIE at the end.
17862          There are 2 more cases to do this for: 1) the ansi ... declaration -
17863          this is detectable when the end of the arg list is not a
17864          void_type_node 2) an unprototyped function declaration (not a
17865          definition).  This just means that we have no info about the
17866          parameters at all.  */
17867       fn_arg_types = TYPE_ARG_TYPES (TREE_TYPE (decl));
17868       if (fn_arg_types != NULL)
17869         {
17870           /* This is the prototyped case, check for....  */
17871           if (TREE_VALUE (tree_last (fn_arg_types)) != void_type_node)
17872             gen_unspecified_parameters_die (decl, subr_die);
17873         }
17874       else if (DECL_INITIAL (decl) == NULL_TREE)
17875         gen_unspecified_parameters_die (decl, subr_die);
17876     }
17877
17878   /* Output Dwarf info for all of the stuff within the body of the function
17879      (if it has one - it may be just a declaration).  */
17880   outer_scope = DECL_INITIAL (decl);
17881
17882   /* OUTER_SCOPE is a pointer to the outermost BLOCK node created to represent
17883      a function.  This BLOCK actually represents the outermost binding contour
17884      for the function, i.e. the contour in which the function's formal
17885      parameters and labels get declared. Curiously, it appears that the front
17886      end doesn't actually put the PARM_DECL nodes for the current function onto
17887      the BLOCK_VARS list for this outer scope, but are strung off of the
17888      DECL_ARGUMENTS list for the function instead.
17889
17890      The BLOCK_VARS list for the `outer_scope' does provide us with a list of
17891      the LABEL_DECL nodes for the function however, and we output DWARF info
17892      for those in decls_for_scope.  Just within the `outer_scope' there will be
17893      a BLOCK node representing the function's outermost pair of curly braces,
17894      and any blocks used for the base and member initializers of a C++
17895      constructor function.  */
17896   if (! declaration && TREE_CODE (outer_scope) != ERROR_MARK)
17897     {
17898       /* Emit a DW_TAG_variable DIE for a named return value.  */
17899       if (DECL_NAME (DECL_RESULT (decl)))
17900         gen_decl_die (DECL_RESULT (decl), NULL, subr_die);
17901
17902       current_function_has_inlines = 0;
17903       decls_for_scope (outer_scope, subr_die, 0);
17904
17905 #if 0 && defined (MIPS_DEBUGGING_INFO)
17906       if (current_function_has_inlines)
17907         {
17908           add_AT_flag (subr_die, DW_AT_MIPS_has_inlines, 1);
17909           if (! comp_unit_has_inlines)
17910             {
17911               add_AT_flag (comp_unit_die, DW_AT_MIPS_has_inlines, 1);
17912               comp_unit_has_inlines = 1;
17913             }
17914         }
17915 #endif
17916     }
17917   /* Add the calling convention attribute if requested.  */
17918   add_calling_convention_attribute (subr_die, decl);
17919
17920 }
17921
17922 /* Returns a hash value for X (which really is a die_struct).  */
17923
17924 static hashval_t
17925 common_block_die_table_hash (const void *x)
17926 {
17927   const_dw_die_ref d = (const_dw_die_ref) x;
17928   return (hashval_t) d->decl_id ^ htab_hash_pointer (d->die_parent);
17929 }
17930
17931 /* Return nonzero if decl_id and die_parent of die_struct X is the same
17932    as decl_id and die_parent of die_struct Y.  */
17933
17934 static int
17935 common_block_die_table_eq (const void *x, const void *y)
17936 {
17937   const_dw_die_ref d = (const_dw_die_ref) x;
17938   const_dw_die_ref e = (const_dw_die_ref) y;
17939   return d->decl_id == e->decl_id && d->die_parent == e->die_parent;
17940 }
17941
17942 /* Generate a DIE to represent a declared data object.
17943    Either DECL or ORIGIN must be non-null.  */
17944
17945 static void
17946 gen_variable_die (tree decl, tree origin, dw_die_ref context_die)
17947 {
17948   HOST_WIDE_INT off;
17949   tree com_decl;
17950   tree decl_or_origin = decl ? decl : origin;
17951   dw_die_ref var_die;
17952   dw_die_ref old_die = decl ? lookup_decl_die (decl) : NULL;
17953   dw_die_ref origin_die;
17954   int declaration = (DECL_EXTERNAL (decl_or_origin)
17955                      || class_or_namespace_scope_p (context_die));
17956
17957   if (!origin)
17958     origin = decl_ultimate_origin (decl);
17959
17960   com_decl = fortran_common (decl_or_origin, &off);
17961
17962   /* Symbol in common gets emitted as a child of the common block, in the form
17963      of a data member.  */
17964   if (com_decl)
17965     {
17966       dw_die_ref com_die;
17967       dw_loc_list_ref loc;
17968       die_node com_die_arg;
17969
17970       var_die = lookup_decl_die (decl_or_origin);
17971       if (var_die)
17972         {
17973           if (get_AT (var_die, DW_AT_location) == NULL)
17974             {
17975               loc = loc_list_from_tree (com_decl, off ? 1 : 2);
17976               if (loc)
17977                 {
17978                   if (off)
17979                     {
17980                       /* Optimize the common case.  */
17981                       if (single_element_loc_list_p (loc)
17982                           && loc->expr->dw_loc_opc == DW_OP_addr
17983                           && loc->expr->dw_loc_next == NULL
17984                           && GET_CODE (loc->expr->dw_loc_oprnd1.v.val_addr)
17985                              == SYMBOL_REF)
17986                         loc->expr->dw_loc_oprnd1.v.val_addr
17987                           = plus_constant (loc->expr->dw_loc_oprnd1.v.val_addr, off);
17988                         else
17989                           loc_list_plus_const (loc, off);
17990                     }
17991                   add_AT_location_description (var_die, DW_AT_location, loc);
17992                   remove_AT (var_die, DW_AT_declaration);
17993                 }
17994             }
17995           return;
17996         }
17997
17998       if (common_block_die_table == NULL)
17999         common_block_die_table
18000           = htab_create_ggc (10, common_block_die_table_hash,
18001                              common_block_die_table_eq, NULL);
18002
18003       com_die_arg.decl_id = DECL_UID (com_decl);
18004       com_die_arg.die_parent = context_die;
18005       com_die = (dw_die_ref) htab_find (common_block_die_table, &com_die_arg);
18006       loc = loc_list_from_tree (com_decl, 2);
18007       if (com_die == NULL)
18008         {
18009           const char *cnam
18010             = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (com_decl));
18011           void **slot;
18012
18013           com_die = new_die (DW_TAG_common_block, context_die, decl);
18014           add_name_and_src_coords_attributes (com_die, com_decl);
18015           if (loc)
18016             {
18017               add_AT_location_description (com_die, DW_AT_location, loc);
18018               /* Avoid sharing the same loc descriptor between
18019                  DW_TAG_common_block and DW_TAG_variable.  */
18020               loc = loc_list_from_tree (com_decl, 2);
18021             }
18022           else if (DECL_EXTERNAL (decl))
18023             add_AT_flag (com_die, DW_AT_declaration, 1);
18024           add_pubname_string (cnam, com_die); /* ??? needed? */
18025           com_die->decl_id = DECL_UID (com_decl);
18026           slot = htab_find_slot (common_block_die_table, com_die, INSERT);
18027           *slot = (void *) com_die;
18028         }
18029       else if (get_AT (com_die, DW_AT_location) == NULL && loc)
18030         {
18031           add_AT_location_description (com_die, DW_AT_location, loc);
18032           loc = loc_list_from_tree (com_decl, 2);
18033           remove_AT (com_die, DW_AT_declaration);
18034         }
18035       var_die = new_die (DW_TAG_variable, com_die, decl);
18036       add_name_and_src_coords_attributes (var_die, decl);
18037       add_type_attribute (var_die, TREE_TYPE (decl), TREE_READONLY (decl),
18038                           TREE_THIS_VOLATILE (decl), context_die);
18039       add_AT_flag (var_die, DW_AT_external, 1);
18040       if (loc)
18041         {
18042           if (off)
18043             {
18044               /* Optimize the common case.  */
18045               if (single_element_loc_list_p (loc)
18046                   && loc->expr->dw_loc_opc == DW_OP_addr
18047                   && loc->expr->dw_loc_next == NULL
18048                   && GET_CODE (loc->expr->dw_loc_oprnd1.v.val_addr) == SYMBOL_REF)
18049                 loc->expr->dw_loc_oprnd1.v.val_addr
18050                   = plus_constant (loc->expr->dw_loc_oprnd1.v.val_addr, off);
18051               else
18052                 loc_list_plus_const (loc, off);
18053             }
18054           add_AT_location_description (var_die, DW_AT_location, loc);
18055         }
18056       else if (DECL_EXTERNAL (decl))
18057         add_AT_flag (var_die, DW_AT_declaration, 1);
18058       equate_decl_number_to_die (decl, var_die);
18059       return;
18060     }
18061
18062   /* If the compiler emitted a definition for the DECL declaration
18063      and if we already emitted a DIE for it, don't emit a second
18064      DIE for it again.  */
18065   if (old_die
18066       && declaration)
18067     return;
18068
18069   /* For static data members, the declaration in the class is supposed
18070      to have DW_TAG_member tag; the specification should still be
18071      DW_TAG_variable referencing the DW_TAG_member DIE.  */
18072   if (declaration && class_scope_p (context_die))
18073     var_die = new_die (DW_TAG_member, context_die, decl);
18074   else
18075     var_die = new_die (DW_TAG_variable, context_die, decl);
18076
18077   origin_die = NULL;
18078   if (origin != NULL)
18079     origin_die = add_abstract_origin_attribute (var_die, origin);
18080
18081   /* Loop unrolling can create multiple blocks that refer to the same
18082      static variable, so we must test for the DW_AT_declaration flag.
18083
18084      ??? Loop unrolling/reorder_blocks should perhaps be rewritten to
18085      copy decls and set the DECL_ABSTRACT flag on them instead of
18086      sharing them.
18087
18088      ??? Duplicated blocks have been rewritten to use .debug_ranges.
18089
18090      ??? The declare_in_namespace support causes us to get two DIEs for one
18091      variable, both of which are declarations.  We want to avoid considering
18092      one to be a specification, so we must test that this DIE is not a
18093      declaration.  */
18094   else if (old_die && TREE_STATIC (decl) && ! declaration
18095            && get_AT_flag (old_die, DW_AT_declaration) == 1)
18096     {
18097       /* This is a definition of a C++ class level static.  */
18098       add_AT_specification (var_die, old_die);
18099       if (DECL_NAME (decl))
18100         {
18101           expanded_location s = expand_location (DECL_SOURCE_LOCATION (decl));
18102           struct dwarf_file_data * file_index = lookup_filename (s.file);
18103
18104           if (get_AT_file (old_die, DW_AT_decl_file) != file_index)
18105             add_AT_file (var_die, DW_AT_decl_file, file_index);
18106
18107           if (get_AT_unsigned (old_die, DW_AT_decl_line) != (unsigned) s.line)
18108             add_AT_unsigned (var_die, DW_AT_decl_line, s.line);
18109         }
18110     }
18111   else
18112     {
18113       tree type = TREE_TYPE (decl);
18114
18115       add_name_and_src_coords_attributes (var_die, decl);
18116       if (decl_by_reference_p (decl))
18117         add_type_attribute (var_die, TREE_TYPE (type), 0, 0, context_die);
18118       else
18119         add_type_attribute (var_die, type, TREE_READONLY (decl),
18120                             TREE_THIS_VOLATILE (decl), context_die);
18121
18122       if (TREE_PUBLIC (decl))
18123         add_AT_flag (var_die, DW_AT_external, 1);
18124
18125       if (DECL_ARTIFICIAL (decl))
18126         add_AT_flag (var_die, DW_AT_artificial, 1);
18127
18128       if (TREE_PROTECTED (decl))
18129         add_AT_unsigned (var_die, DW_AT_accessibility, DW_ACCESS_protected);
18130       else if (TREE_PRIVATE (decl))
18131         add_AT_unsigned (var_die, DW_AT_accessibility, DW_ACCESS_private);
18132     }
18133
18134   if (declaration)
18135     add_AT_flag (var_die, DW_AT_declaration, 1);
18136
18137   if (decl && (DECL_ABSTRACT (decl) || declaration))
18138     equate_decl_number_to_die (decl, var_die);
18139
18140   if (! declaration
18141       && (! DECL_ABSTRACT (decl_or_origin)
18142           /* Local static vars are shared between all clones/inlines,
18143              so emit DW_AT_location on the abstract DIE if DECL_RTL is
18144              already set.  */
18145           || (TREE_CODE (decl_or_origin) == VAR_DECL
18146               && TREE_STATIC (decl_or_origin)
18147               && DECL_RTL_SET_P (decl_or_origin)))
18148       /* When abstract origin already has DW_AT_location attribute, no need
18149          to add it again.  */
18150       && (origin_die == NULL || get_AT (origin_die, DW_AT_location) == NULL))
18151     {
18152       if (TREE_CODE (decl_or_origin) == VAR_DECL && TREE_STATIC (decl_or_origin)
18153           && !TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (decl_or_origin)))
18154         defer_location (decl_or_origin, var_die);
18155       else
18156         add_location_or_const_value_attribute (var_die,
18157                                                decl_or_origin,
18158                                                DW_AT_location);
18159       add_pubname (decl_or_origin, var_die);
18160     }
18161   else
18162     tree_add_const_value_attribute_for_decl (var_die, decl_or_origin);
18163 }
18164
18165 /* Generate a DIE to represent a named constant.  */
18166
18167 static void
18168 gen_const_die (tree decl, dw_die_ref context_die)
18169 {
18170   dw_die_ref const_die;
18171   tree type = TREE_TYPE (decl);
18172
18173   const_die = new_die (DW_TAG_constant, context_die, decl);
18174   add_name_and_src_coords_attributes (const_die, decl);
18175   add_type_attribute (const_die, type, 1, 0, context_die);
18176   if (TREE_PUBLIC (decl))
18177     add_AT_flag (const_die, DW_AT_external, 1);
18178   if (DECL_ARTIFICIAL (decl))
18179     add_AT_flag (const_die, DW_AT_artificial, 1);
18180   tree_add_const_value_attribute_for_decl (const_die, decl);
18181 }
18182
18183 /* Generate a DIE to represent a label identifier.  */
18184
18185 static void
18186 gen_label_die (tree decl, dw_die_ref context_die)
18187 {
18188   tree origin = decl_ultimate_origin (decl);
18189   dw_die_ref lbl_die = new_die (DW_TAG_label, context_die, decl);
18190   rtx insn;
18191   char label[MAX_ARTIFICIAL_LABEL_BYTES];
18192
18193   if (origin != NULL)
18194     add_abstract_origin_attribute (lbl_die, origin);
18195   else
18196     add_name_and_src_coords_attributes (lbl_die, decl);
18197
18198   if (DECL_ABSTRACT (decl))
18199     equate_decl_number_to_die (decl, lbl_die);
18200   else
18201     {
18202       insn = DECL_RTL_IF_SET (decl);
18203
18204       /* Deleted labels are programmer specified labels which have been
18205          eliminated because of various optimizations.  We still emit them
18206          here so that it is possible to put breakpoints on them.  */
18207       if (insn
18208           && (LABEL_P (insn)
18209               || ((NOTE_P (insn)
18210                    && NOTE_KIND (insn) == NOTE_INSN_DELETED_LABEL))))
18211         {
18212           /* When optimization is enabled (via -O) some parts of the compiler
18213              (e.g. jump.c and cse.c) may try to delete CODE_LABEL insns which
18214              represent source-level labels which were explicitly declared by
18215              the user.  This really shouldn't be happening though, so catch
18216              it if it ever does happen.  */
18217           gcc_assert (!INSN_DELETED_P (insn));
18218
18219           ASM_GENERATE_INTERNAL_LABEL (label, "L", CODE_LABEL_NUMBER (insn));
18220           add_AT_lbl_id (lbl_die, DW_AT_low_pc, label);
18221         }
18222     }
18223 }
18224
18225 /* A helper function for gen_inlined_subroutine_die.  Add source coordinate
18226    attributes to the DIE for a block STMT, to describe where the inlined
18227    function was called from.  This is similar to add_src_coords_attributes.  */
18228
18229 static inline void
18230 add_call_src_coords_attributes (tree stmt, dw_die_ref die)
18231 {
18232   expanded_location s = expand_location (BLOCK_SOURCE_LOCATION (stmt));
18233
18234   if (dwarf_version >= 3 || !dwarf_strict)
18235     {
18236       add_AT_file (die, DW_AT_call_file, lookup_filename (s.file));
18237       add_AT_unsigned (die, DW_AT_call_line, s.line);
18238     }
18239 }
18240
18241
18242 /* A helper function for gen_lexical_block_die and gen_inlined_subroutine_die.
18243    Add low_pc and high_pc attributes to the DIE for a block STMT.  */
18244
18245 static inline void
18246 add_high_low_attributes (tree stmt, dw_die_ref die)
18247 {
18248   char label[MAX_ARTIFICIAL_LABEL_BYTES];
18249
18250   if (BLOCK_FRAGMENT_CHAIN (stmt)
18251       && (dwarf_version >= 3 || !dwarf_strict))
18252     {
18253       tree chain;
18254
18255       if (inlined_function_outer_scope_p (stmt))
18256         {
18257           ASM_GENERATE_INTERNAL_LABEL (label, BLOCK_BEGIN_LABEL,
18258                                        BLOCK_NUMBER (stmt));
18259           add_AT_lbl_id (die, DW_AT_entry_pc, label);
18260         }
18261
18262       add_AT_range_list (die, DW_AT_ranges, add_ranges (stmt));
18263
18264       chain = BLOCK_FRAGMENT_CHAIN (stmt);
18265       do
18266         {
18267           add_ranges (chain);
18268           chain = BLOCK_FRAGMENT_CHAIN (chain);
18269         }
18270       while (chain);
18271       add_ranges (NULL);
18272     }
18273   else
18274     {
18275       ASM_GENERATE_INTERNAL_LABEL (label, BLOCK_BEGIN_LABEL,
18276                                    BLOCK_NUMBER (stmt));
18277       add_AT_lbl_id (die, DW_AT_low_pc, label);
18278       ASM_GENERATE_INTERNAL_LABEL (label, BLOCK_END_LABEL,
18279                                    BLOCK_NUMBER (stmt));
18280       add_AT_lbl_id (die, DW_AT_high_pc, label);
18281     }
18282 }
18283
18284 /* Generate a DIE for a lexical block.  */
18285
18286 static void
18287 gen_lexical_block_die (tree stmt, dw_die_ref context_die, int depth)
18288 {
18289   dw_die_ref stmt_die = new_die (DW_TAG_lexical_block, context_die, stmt);
18290
18291   if (! BLOCK_ABSTRACT (stmt) && TREE_ASM_WRITTEN (stmt))
18292     add_high_low_attributes (stmt, stmt_die);
18293
18294   decls_for_scope (stmt, stmt_die, depth);
18295 }
18296
18297 /* Generate a DIE for an inlined subprogram.  */
18298
18299 static void
18300 gen_inlined_subroutine_die (tree stmt, dw_die_ref context_die, int depth)
18301 {
18302   tree decl;
18303
18304   /* The instance of function that is effectively being inlined shall not
18305      be abstract.  */
18306   gcc_assert (! BLOCK_ABSTRACT (stmt));
18307
18308   decl = block_ultimate_origin (stmt);
18309
18310   /* Emit info for the abstract instance first, if we haven't yet.  We
18311      must emit this even if the block is abstract, otherwise when we
18312      emit the block below (or elsewhere), we may end up trying to emit
18313      a die whose origin die hasn't been emitted, and crashing.  */
18314   dwarf2out_abstract_function (decl);
18315
18316   if (! BLOCK_ABSTRACT (stmt))
18317     {
18318       dw_die_ref subr_die
18319         = new_die (DW_TAG_inlined_subroutine, context_die, stmt);
18320
18321       add_abstract_origin_attribute (subr_die, decl);
18322       if (TREE_ASM_WRITTEN (stmt))
18323         add_high_low_attributes (stmt, subr_die);
18324       add_call_src_coords_attributes (stmt, subr_die);
18325
18326       decls_for_scope (stmt, subr_die, depth);
18327       current_function_has_inlines = 1;
18328     }
18329 }
18330
18331 /* Generate a DIE for a field in a record, or structure.  */
18332
18333 static void
18334 gen_field_die (tree decl, dw_die_ref context_die)
18335 {
18336   dw_die_ref decl_die;
18337
18338   if (TREE_TYPE (decl) == error_mark_node)
18339     return;
18340
18341   decl_die = new_die (DW_TAG_member, context_die, decl);
18342   add_name_and_src_coords_attributes (decl_die, decl);
18343   add_type_attribute (decl_die, member_declared_type (decl),
18344                       TREE_READONLY (decl), TREE_THIS_VOLATILE (decl),
18345                       context_die);
18346
18347   if (DECL_BIT_FIELD_TYPE (decl))
18348     {
18349       add_byte_size_attribute (decl_die, decl);
18350       add_bit_size_attribute (decl_die, decl);
18351       add_bit_offset_attribute (decl_die, decl);
18352     }
18353
18354   if (TREE_CODE (DECL_FIELD_CONTEXT (decl)) != UNION_TYPE)
18355     add_data_member_location_attribute (decl_die, decl);
18356
18357   if (DECL_ARTIFICIAL (decl))
18358     add_AT_flag (decl_die, DW_AT_artificial, 1);
18359
18360   if (TREE_PROTECTED (decl))
18361     add_AT_unsigned (decl_die, DW_AT_accessibility, DW_ACCESS_protected);
18362   else if (TREE_PRIVATE (decl))
18363     add_AT_unsigned (decl_die, DW_AT_accessibility, DW_ACCESS_private);
18364
18365   /* Equate decl number to die, so that we can look up this decl later on.  */
18366   equate_decl_number_to_die (decl, decl_die);
18367 }
18368
18369 #if 0
18370 /* Don't generate either pointer_type DIEs or reference_type DIEs here.
18371    Use modified_type_die instead.
18372    We keep this code here just in case these types of DIEs may be needed to
18373    represent certain things in other languages (e.g. Pascal) someday.  */
18374
18375 static void
18376 gen_pointer_type_die (tree type, dw_die_ref context_die)
18377 {
18378   dw_die_ref ptr_die
18379     = new_die (DW_TAG_pointer_type, scope_die_for (type, context_die), type);
18380
18381   equate_type_number_to_die (type, ptr_die);
18382   add_type_attribute (ptr_die, TREE_TYPE (type), 0, 0, context_die);
18383   add_AT_unsigned (mod_type_die, DW_AT_byte_size, PTR_SIZE);
18384 }
18385
18386 /* Don't generate either pointer_type DIEs or reference_type DIEs here.
18387    Use modified_type_die instead.
18388    We keep this code here just in case these types of DIEs may be needed to
18389    represent certain things in other languages (e.g. Pascal) someday.  */
18390
18391 static void
18392 gen_reference_type_die (tree type, dw_die_ref context_die)
18393 {
18394   dw_die_ref ref_die
18395     = new_die (DW_TAG_reference_type, scope_die_for (type, context_die), type);
18396
18397   equate_type_number_to_die (type, ref_die);
18398   add_type_attribute (ref_die, TREE_TYPE (type), 0, 0, context_die);
18399   add_AT_unsigned (mod_type_die, DW_AT_byte_size, PTR_SIZE);
18400 }
18401 #endif
18402
18403 /* Generate a DIE for a pointer to a member type.  */
18404
18405 static void
18406 gen_ptr_to_mbr_type_die (tree type, dw_die_ref context_die)
18407 {
18408   dw_die_ref ptr_die
18409     = new_die (DW_TAG_ptr_to_member_type,
18410                scope_die_for (type, context_die), type);
18411
18412   equate_type_number_to_die (type, ptr_die);
18413   add_AT_die_ref (ptr_die, DW_AT_containing_type,
18414                   lookup_type_die (TYPE_OFFSET_BASETYPE (type)));
18415   add_type_attribute (ptr_die, TREE_TYPE (type), 0, 0, context_die);
18416 }
18417
18418 /* Generate the DIE for the compilation unit.  */
18419
18420 static dw_die_ref
18421 gen_compile_unit_die (const char *filename)
18422 {
18423   dw_die_ref die;
18424   char producer[250];
18425   const char *language_string = lang_hooks.name;
18426   int language;
18427
18428   die = new_die (DW_TAG_compile_unit, NULL, NULL);
18429
18430   if (filename)
18431     {
18432       add_name_attribute (die, filename);
18433       /* Don't add cwd for <built-in>.  */
18434       if (!IS_ABSOLUTE_PATH (filename) && filename[0] != '<')
18435         add_comp_dir_attribute (die);
18436     }
18437
18438   sprintf (producer, "%s %s", language_string, version_string);
18439
18440 #ifdef MIPS_DEBUGGING_INFO
18441   /* The MIPS/SGI compilers place the 'cc' command line options in the producer
18442      string.  The SGI debugger looks for -g, -g1, -g2, or -g3; if they do
18443      not appear in the producer string, the debugger reaches the conclusion
18444      that the object file is stripped and has no debugging information.
18445      To get the MIPS/SGI debugger to believe that there is debugging
18446      information in the object file, we add a -g to the producer string.  */
18447   if (debug_info_level > DINFO_LEVEL_TERSE)
18448     strcat (producer, " -g");
18449 #endif
18450
18451   add_AT_string (die, DW_AT_producer, producer);
18452
18453   language = DW_LANG_C89;
18454   if (strcmp (language_string, "GNU C++") == 0)
18455     language = DW_LANG_C_plus_plus;
18456   else if (strcmp (language_string, "GNU F77") == 0)
18457     language = DW_LANG_Fortran77;
18458   else if (strcmp (language_string, "GNU Pascal") == 0)
18459     language = DW_LANG_Pascal83;
18460   else if (dwarf_version >= 3 || !dwarf_strict)
18461     {
18462       if (strcmp (language_string, "GNU Ada") == 0)
18463         language = DW_LANG_Ada95;
18464       else if (strcmp (language_string, "GNU Fortran") == 0)
18465         language = DW_LANG_Fortran95;
18466       else if (strcmp (language_string, "GNU Java") == 0)
18467         language = DW_LANG_Java;
18468       else if (strcmp (language_string, "GNU Objective-C") == 0)
18469         language = DW_LANG_ObjC;
18470       else if (strcmp (language_string, "GNU Objective-C++") == 0)
18471         language = DW_LANG_ObjC_plus_plus;
18472     }
18473
18474   add_AT_unsigned (die, DW_AT_language, language);
18475   return die;
18476 }
18477
18478 /* Generate the DIE for a base class.  */
18479
18480 static void
18481 gen_inheritance_die (tree binfo, tree access, dw_die_ref context_die)
18482 {
18483   dw_die_ref die = new_die (DW_TAG_inheritance, context_die, binfo);
18484
18485   add_type_attribute (die, BINFO_TYPE (binfo), 0, 0, context_die);
18486   add_data_member_location_attribute (die, binfo);
18487
18488   if (BINFO_VIRTUAL_P (binfo))
18489     add_AT_unsigned (die, DW_AT_virtuality, DW_VIRTUALITY_virtual);
18490
18491   if (access == access_public_node)
18492     add_AT_unsigned (die, DW_AT_accessibility, DW_ACCESS_public);
18493   else if (access == access_protected_node)
18494     add_AT_unsigned (die, DW_AT_accessibility, DW_ACCESS_protected);
18495 }
18496
18497 /* Generate a DIE for a class member.  */
18498
18499 static void
18500 gen_member_die (tree type, dw_die_ref context_die)
18501 {
18502   tree member;
18503   tree binfo = TYPE_BINFO (type);
18504   dw_die_ref child;
18505
18506   /* If this is not an incomplete type, output descriptions of each of its
18507      members. Note that as we output the DIEs necessary to represent the
18508      members of this record or union type, we will also be trying to output
18509      DIEs to represent the *types* of those members. However the `type'
18510      function (above) will specifically avoid generating type DIEs for member
18511      types *within* the list of member DIEs for this (containing) type except
18512      for those types (of members) which are explicitly marked as also being
18513      members of this (containing) type themselves.  The g++ front- end can
18514      force any given type to be treated as a member of some other (containing)
18515      type by setting the TYPE_CONTEXT of the given (member) type to point to
18516      the TREE node representing the appropriate (containing) type.  */
18517
18518   /* First output info about the base classes.  */
18519   if (binfo)
18520     {
18521       VEC(tree,gc) *accesses = BINFO_BASE_ACCESSES (binfo);
18522       int i;
18523       tree base;
18524
18525       for (i = 0; BINFO_BASE_ITERATE (binfo, i, base); i++)
18526         gen_inheritance_die (base,
18527                              (accesses ? VEC_index (tree, accesses, i)
18528                               : access_public_node), context_die);
18529     }
18530
18531   /* Now output info about the data members and type members.  */
18532   for (member = TYPE_FIELDS (type); member; member = TREE_CHAIN (member))
18533     {
18534       /* If we thought we were generating minimal debug info for TYPE
18535          and then changed our minds, some of the member declarations
18536          may have already been defined.  Don't define them again, but
18537          do put them in the right order.  */
18538
18539       child = lookup_decl_die (member);
18540       if (child)
18541         splice_child_die (context_die, child);
18542       else
18543         gen_decl_die (member, NULL, context_die);
18544     }
18545
18546   /* Now output info about the function members (if any).  */
18547   for (member = TYPE_METHODS (type); member; member = TREE_CHAIN (member))
18548     {
18549       /* Don't include clones in the member list.  */
18550       if (DECL_ABSTRACT_ORIGIN (member))
18551         continue;
18552
18553       child = lookup_decl_die (member);
18554       if (child)
18555         splice_child_die (context_die, child);
18556       else
18557         gen_decl_die (member, NULL, context_die);
18558     }
18559 }
18560
18561 /* Generate a DIE for a structure or union type.  If TYPE_DECL_SUPPRESS_DEBUG
18562    is set, we pretend that the type was never defined, so we only get the
18563    member DIEs needed by later specification DIEs.  */
18564
18565 static void
18566 gen_struct_or_union_type_die (tree type, dw_die_ref context_die,
18567                                 enum debug_info_usage usage)
18568 {
18569   dw_die_ref type_die = lookup_type_die (type);
18570   dw_die_ref scope_die = 0;
18571   int nested = 0;
18572   int complete = (TYPE_SIZE (type)
18573                   && (! TYPE_STUB_DECL (type)
18574                       || ! TYPE_DECL_SUPPRESS_DEBUG (TYPE_STUB_DECL (type))));
18575   int ns_decl = (context_die && context_die->die_tag == DW_TAG_namespace);
18576   complete = complete && should_emit_struct_debug (type, usage);
18577
18578   if (type_die && ! complete)
18579     return;
18580
18581   if (TYPE_CONTEXT (type) != NULL_TREE
18582       && (AGGREGATE_TYPE_P (TYPE_CONTEXT (type))
18583           || TREE_CODE (TYPE_CONTEXT (type)) == NAMESPACE_DECL))
18584     nested = 1;
18585
18586   scope_die = scope_die_for (type, context_die);
18587
18588   if (! type_die || (nested && scope_die == comp_unit_die))
18589     /* First occurrence of type or toplevel definition of nested class.  */
18590     {
18591       dw_die_ref old_die = type_die;
18592
18593       type_die = new_die (TREE_CODE (type) == RECORD_TYPE
18594                           ? record_type_tag (type) : DW_TAG_union_type,
18595                           scope_die, type);
18596       equate_type_number_to_die (type, type_die);
18597       if (old_die)
18598         add_AT_specification (type_die, old_die);
18599       else
18600         add_name_attribute (type_die, type_tag (type));
18601     }
18602   else
18603     remove_AT (type_die, DW_AT_declaration);
18604
18605   /* Generate child dies for template paramaters.  */
18606   if (debug_info_level > DINFO_LEVEL_TERSE
18607       && COMPLETE_TYPE_P (type))
18608     gen_generic_params_dies (type);
18609
18610   /* If this type has been completed, then give it a byte_size attribute and
18611      then give a list of members.  */
18612   if (complete && !ns_decl)
18613     {
18614       /* Prevent infinite recursion in cases where the type of some member of
18615          this type is expressed in terms of this type itself.  */
18616       TREE_ASM_WRITTEN (type) = 1;
18617       add_byte_size_attribute (type_die, type);
18618       if (TYPE_STUB_DECL (type) != NULL_TREE)
18619         add_src_coords_attributes (type_die, TYPE_STUB_DECL (type));
18620
18621       /* If the first reference to this type was as the return type of an
18622          inline function, then it may not have a parent.  Fix this now.  */
18623       if (type_die->die_parent == NULL)
18624         add_child_die (scope_die, type_die);
18625
18626       push_decl_scope (type);
18627       gen_member_die (type, type_die);
18628       pop_decl_scope ();
18629
18630       /* GNU extension: Record what type our vtable lives in.  */
18631       if (TYPE_VFIELD (type))
18632         {
18633           tree vtype = DECL_FCONTEXT (TYPE_VFIELD (type));
18634
18635           gen_type_die (vtype, context_die);
18636           add_AT_die_ref (type_die, DW_AT_containing_type,
18637                           lookup_type_die (vtype));
18638         }
18639     }
18640   else
18641     {
18642       add_AT_flag (type_die, DW_AT_declaration, 1);
18643
18644       /* We don't need to do this for function-local types.  */
18645       if (TYPE_STUB_DECL (type)
18646           && ! decl_function_context (TYPE_STUB_DECL (type)))
18647         VEC_safe_push (tree, gc, incomplete_types, type);
18648     }
18649
18650   if (get_AT (type_die, DW_AT_name))
18651     add_pubtype (type, type_die);
18652 }
18653
18654 /* Generate a DIE for a subroutine _type_.  */
18655
18656 static void
18657 gen_subroutine_type_die (tree type, dw_die_ref context_die)
18658 {
18659   tree return_type = TREE_TYPE (type);
18660   dw_die_ref subr_die
18661     = new_die (DW_TAG_subroutine_type,
18662                scope_die_for (type, context_die), type);
18663
18664   equate_type_number_to_die (type, subr_die);
18665   add_prototyped_attribute (subr_die, type);
18666   add_type_attribute (subr_die, return_type, 0, 0, context_die);
18667   gen_formal_types_die (type, subr_die);
18668
18669   if (get_AT (subr_die, DW_AT_name))
18670     add_pubtype (type, subr_die);
18671 }
18672
18673 /* Generate a DIE for a type definition.  */
18674
18675 static void
18676 gen_typedef_die (tree decl, dw_die_ref context_die)
18677 {
18678   dw_die_ref type_die;
18679   tree origin;
18680
18681   if (TREE_ASM_WRITTEN (decl))
18682     return;
18683
18684   TREE_ASM_WRITTEN (decl) = 1;
18685   type_die = new_die (DW_TAG_typedef, context_die, decl);
18686   origin = decl_ultimate_origin (decl);
18687   if (origin != NULL)
18688     add_abstract_origin_attribute (type_die, origin);
18689   else
18690     {
18691       tree type;
18692
18693       add_name_and_src_coords_attributes (type_die, decl);
18694       if (DECL_ORIGINAL_TYPE (decl))
18695         {
18696           type = DECL_ORIGINAL_TYPE (decl);
18697
18698           gcc_assert (type != TREE_TYPE (decl));
18699           equate_type_number_to_die (TREE_TYPE (decl), type_die);
18700         }
18701       else
18702         type = TREE_TYPE (decl);
18703
18704       add_type_attribute (type_die, type, TREE_READONLY (decl),
18705                           TREE_THIS_VOLATILE (decl), context_die);
18706     }
18707
18708   if (DECL_ABSTRACT (decl))
18709     equate_decl_number_to_die (decl, type_die);
18710
18711   if (get_AT (type_die, DW_AT_name))
18712     add_pubtype (decl, type_die);
18713 }
18714
18715 /* Generate a type description DIE.  */
18716
18717 static void
18718 gen_type_die_with_usage (tree type, dw_die_ref context_die,
18719                                 enum debug_info_usage usage)
18720 {
18721   int need_pop;
18722   struct array_descr_info info;
18723
18724   if (type == NULL_TREE || type == error_mark_node)
18725     return;
18726
18727   /* If TYPE is a typedef type variant, let's generate debug info
18728      for the parent typedef which TYPE is a type of.  */
18729   if (TYPE_NAME (type) && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
18730       && DECL_ORIGINAL_TYPE (TYPE_NAME (type)))
18731     {
18732       if (TREE_ASM_WRITTEN (type))
18733         return;
18734
18735       /* Prevent broken recursion; we can't hand off to the same type.  */
18736       gcc_assert (DECL_ORIGINAL_TYPE (TYPE_NAME (type)) != type);
18737
18738       /* Use the DIE of the containing namespace as the parent DIE of
18739          the type description DIE we want to generate.  */
18740       if (DECL_CONTEXT (TYPE_NAME (type))
18741           && TREE_CODE (DECL_CONTEXT (TYPE_NAME (type))) == NAMESPACE_DECL)
18742         context_die = get_context_die (DECL_CONTEXT (TYPE_NAME (type)));
18743
18744       TREE_ASM_WRITTEN (type) = 1;
18745       gen_decl_die (TYPE_NAME (type), NULL, context_die);
18746       return;
18747     }
18748
18749   /* If this is an array type with hidden descriptor, handle it first.  */
18750   if (!TREE_ASM_WRITTEN (type)
18751       && lang_hooks.types.get_array_descr_info
18752       && lang_hooks.types.get_array_descr_info (type, &info)
18753       && (dwarf_version >= 3 || !dwarf_strict))
18754     {
18755       gen_descr_array_type_die (type, &info, context_die);
18756       TREE_ASM_WRITTEN (type) = 1;
18757       return;
18758     }
18759
18760   /* We are going to output a DIE to represent the unqualified version
18761      of this type (i.e. without any const or volatile qualifiers) so
18762      get the main variant (i.e. the unqualified version) of this type
18763      now.  (Vectors are special because the debugging info is in the
18764      cloned type itself).  */
18765   if (TREE_CODE (type) != VECTOR_TYPE)
18766     type = type_main_variant (type);
18767
18768   if (TREE_ASM_WRITTEN (type))
18769     return;
18770
18771   switch (TREE_CODE (type))
18772     {
18773     case ERROR_MARK:
18774       break;
18775
18776     case POINTER_TYPE:
18777     case REFERENCE_TYPE:
18778       /* We must set TREE_ASM_WRITTEN in case this is a recursive type.  This
18779          ensures that the gen_type_die recursion will terminate even if the
18780          type is recursive.  Recursive types are possible in Ada.  */
18781       /* ??? We could perhaps do this for all types before the switch
18782          statement.  */
18783       TREE_ASM_WRITTEN (type) = 1;
18784
18785       /* For these types, all that is required is that we output a DIE (or a
18786          set of DIEs) to represent the "basis" type.  */
18787       gen_type_die_with_usage (TREE_TYPE (type), context_die,
18788                                 DINFO_USAGE_IND_USE);
18789       break;
18790
18791     case OFFSET_TYPE:
18792       /* This code is used for C++ pointer-to-data-member types.
18793          Output a description of the relevant class type.  */
18794       gen_type_die_with_usage (TYPE_OFFSET_BASETYPE (type), context_die,
18795                                         DINFO_USAGE_IND_USE);
18796
18797       /* Output a description of the type of the object pointed to.  */
18798       gen_type_die_with_usage (TREE_TYPE (type), context_die,
18799                                         DINFO_USAGE_IND_USE);
18800
18801       /* Now output a DIE to represent this pointer-to-data-member type
18802          itself.  */
18803       gen_ptr_to_mbr_type_die (type, context_die);
18804       break;
18805
18806     case FUNCTION_TYPE:
18807       /* Force out return type (in case it wasn't forced out already).  */
18808       gen_type_die_with_usage (TREE_TYPE (type), context_die,
18809                                         DINFO_USAGE_DIR_USE);
18810       gen_subroutine_type_die (type, context_die);
18811       break;
18812
18813     case METHOD_TYPE:
18814       /* Force out return type (in case it wasn't forced out already).  */
18815       gen_type_die_with_usage (TREE_TYPE (type), context_die,
18816                                         DINFO_USAGE_DIR_USE);
18817       gen_subroutine_type_die (type, context_die);
18818       break;
18819
18820     case ARRAY_TYPE:
18821       gen_array_type_die (type, context_die);
18822       break;
18823
18824     case VECTOR_TYPE:
18825       gen_array_type_die (type, context_die);
18826       break;
18827
18828     case ENUMERAL_TYPE:
18829     case RECORD_TYPE:
18830     case UNION_TYPE:
18831     case QUAL_UNION_TYPE:
18832       /* If this is a nested type whose containing class hasn't been written
18833          out yet, writing it out will cover this one, too.  This does not apply
18834          to instantiations of member class templates; they need to be added to
18835          the containing class as they are generated.  FIXME: This hurts the
18836          idea of combining type decls from multiple TUs, since we can't predict
18837          what set of template instantiations we'll get.  */
18838       if (TYPE_CONTEXT (type)
18839           && AGGREGATE_TYPE_P (TYPE_CONTEXT (type))
18840           && ! TREE_ASM_WRITTEN (TYPE_CONTEXT (type)))
18841         {
18842           gen_type_die_with_usage (TYPE_CONTEXT (type), context_die, usage);
18843
18844           if (TREE_ASM_WRITTEN (type))
18845             return;
18846
18847           /* If that failed, attach ourselves to the stub.  */
18848           push_decl_scope (TYPE_CONTEXT (type));
18849           context_die = lookup_type_die (TYPE_CONTEXT (type));
18850           need_pop = 1;
18851         }
18852       else if (TYPE_CONTEXT (type) != NULL_TREE
18853                && (TREE_CODE (TYPE_CONTEXT (type)) == FUNCTION_DECL))
18854         {
18855           /* If this type is local to a function that hasn't been written
18856              out yet, use a NULL context for now; it will be fixed up in
18857              decls_for_scope.  */
18858           context_die = lookup_decl_die (TYPE_CONTEXT (type));
18859           need_pop = 0;
18860         }
18861       else
18862         {
18863           context_die = declare_in_namespace (type, context_die);
18864           need_pop = 0;
18865         }
18866
18867       if (TREE_CODE (type) == ENUMERAL_TYPE)
18868         {
18869           /* This might have been written out by the call to
18870              declare_in_namespace.  */
18871           if (!TREE_ASM_WRITTEN (type))
18872             gen_enumeration_type_die (type, context_die);
18873         }
18874       else
18875         gen_struct_or_union_type_die (type, context_die, usage);
18876
18877       if (need_pop)
18878         pop_decl_scope ();
18879
18880       /* Don't set TREE_ASM_WRITTEN on an incomplete struct; we want to fix
18881          it up if it is ever completed.  gen_*_type_die will set it for us
18882          when appropriate.  */
18883       return;
18884
18885     case VOID_TYPE:
18886     case INTEGER_TYPE:
18887     case REAL_TYPE:
18888     case FIXED_POINT_TYPE:
18889     case COMPLEX_TYPE:
18890     case BOOLEAN_TYPE:
18891       /* No DIEs needed for fundamental types.  */
18892       break;
18893
18894     case LANG_TYPE:
18895       /* No Dwarf representation currently defined.  */
18896       break;
18897
18898     default:
18899       gcc_unreachable ();
18900     }
18901
18902   TREE_ASM_WRITTEN (type) = 1;
18903 }
18904
18905 static void
18906 gen_type_die (tree type, dw_die_ref context_die)
18907 {
18908   gen_type_die_with_usage (type, context_die, DINFO_USAGE_DIR_USE);
18909 }
18910
18911 /* Generate a DW_TAG_lexical_block DIE followed by DIEs to represent all of the
18912    things which are local to the given block.  */
18913
18914 static void
18915 gen_block_die (tree stmt, dw_die_ref context_die, int depth)
18916 {
18917   int must_output_die = 0;
18918   bool inlined_func;
18919
18920   /* Ignore blocks that are NULL.  */
18921   if (stmt == NULL_TREE)
18922     return;
18923
18924   inlined_func = inlined_function_outer_scope_p (stmt);
18925
18926   /* If the block is one fragment of a non-contiguous block, do not
18927      process the variables, since they will have been done by the
18928      origin block.  Do process subblocks.  */
18929   if (BLOCK_FRAGMENT_ORIGIN (stmt))
18930     {
18931       tree sub;
18932
18933       for (sub = BLOCK_SUBBLOCKS (stmt); sub; sub = BLOCK_CHAIN (sub))
18934         gen_block_die (sub, context_die, depth + 1);
18935
18936       return;
18937     }
18938
18939   /* Determine if we need to output any Dwarf DIEs at all to represent this
18940      block.  */
18941   if (inlined_func)
18942     /* The outer scopes for inlinings *must* always be represented.  We
18943        generate DW_TAG_inlined_subroutine DIEs for them.  (See below.) */
18944     must_output_die = 1;
18945   else
18946     {
18947       /* Determine if this block directly contains any "significant"
18948          local declarations which we will need to output DIEs for.  */
18949       if (debug_info_level > DINFO_LEVEL_TERSE)
18950         /* We are not in terse mode so *any* local declaration counts
18951            as being a "significant" one.  */
18952         must_output_die = ((BLOCK_VARS (stmt) != NULL
18953                             || BLOCK_NUM_NONLOCALIZED_VARS (stmt))
18954                            && (TREE_USED (stmt)
18955                                || TREE_ASM_WRITTEN (stmt)
18956                                || BLOCK_ABSTRACT (stmt)));
18957       else if ((TREE_USED (stmt)
18958                 || TREE_ASM_WRITTEN (stmt)
18959                 || BLOCK_ABSTRACT (stmt))
18960                && !dwarf2out_ignore_block (stmt))
18961         must_output_die = 1;
18962     }
18963
18964   /* It would be a waste of space to generate a Dwarf DW_TAG_lexical_block
18965      DIE for any block which contains no significant local declarations at
18966      all.  Rather, in such cases we just call `decls_for_scope' so that any
18967      needed Dwarf info for any sub-blocks will get properly generated. Note
18968      that in terse mode, our definition of what constitutes a "significant"
18969      local declaration gets restricted to include only inlined function
18970      instances and local (nested) function definitions.  */
18971   if (must_output_die)
18972     {
18973       if (inlined_func)
18974         {
18975           /* If STMT block is abstract, that means we have been called
18976              indirectly from dwarf2out_abstract_function.
18977              That function rightfully marks the descendent blocks (of
18978              the abstract function it is dealing with) as being abstract,
18979              precisely to prevent us from emitting any
18980              DW_TAG_inlined_subroutine DIE as a descendent
18981              of an abstract function instance. So in that case, we should
18982              not call gen_inlined_subroutine_die.
18983
18984              Later though, when cgraph asks dwarf2out to emit info
18985              for the concrete instance of the function decl into which
18986              the concrete instance of STMT got inlined, the later will lead
18987              to the generation of a DW_TAG_inlined_subroutine DIE.  */
18988           if (! BLOCK_ABSTRACT (stmt))
18989             gen_inlined_subroutine_die (stmt, context_die, depth);
18990         }
18991       else
18992         gen_lexical_block_die (stmt, context_die, depth);
18993     }
18994   else
18995     decls_for_scope (stmt, context_die, depth);
18996 }
18997
18998 /* Process variable DECL (or variable with origin ORIGIN) within
18999    block STMT and add it to CONTEXT_DIE.  */
19000 static void
19001 process_scope_var (tree stmt, tree decl, tree origin, dw_die_ref context_die)
19002 {
19003   dw_die_ref die;
19004   tree decl_or_origin = decl ? decl : origin;
19005   tree ultimate_origin = origin ? decl_ultimate_origin (origin) : NULL;
19006
19007   if (ultimate_origin)
19008     origin = ultimate_origin;
19009
19010   if (TREE_CODE (decl_or_origin) == FUNCTION_DECL)
19011     die = lookup_decl_die (decl_or_origin);
19012   else if (TREE_CODE (decl_or_origin) == TYPE_DECL
19013            && TYPE_DECL_IS_STUB (decl_or_origin))
19014     die = lookup_type_die (TREE_TYPE (decl_or_origin));
19015   else
19016     die = NULL;
19017
19018   if (die != NULL && die->die_parent == NULL)
19019     add_child_die (context_die, die);
19020   else if (TREE_CODE (decl_or_origin) == IMPORTED_DECL)
19021     dwarf2out_imported_module_or_decl_1 (decl_or_origin, DECL_NAME (decl_or_origin),
19022                                          stmt, context_die);
19023   else
19024     gen_decl_die (decl, origin, context_die);
19025 }
19026
19027 /* Generate all of the decls declared within a given scope and (recursively)
19028    all of its sub-blocks.  */
19029
19030 static void
19031 decls_for_scope (tree stmt, dw_die_ref context_die, int depth)
19032 {
19033   tree decl;
19034   unsigned int i;
19035   tree subblocks;
19036
19037   /* Ignore NULL blocks.  */
19038   if (stmt == NULL_TREE)
19039     return;
19040
19041   /* Output the DIEs to represent all of the data objects and typedefs
19042      declared directly within this block but not within any nested
19043      sub-blocks.  Also, nested function and tag DIEs have been
19044      generated with a parent of NULL; fix that up now.  */
19045   for (decl = BLOCK_VARS (stmt); decl != NULL; decl = TREE_CHAIN (decl))
19046     process_scope_var (stmt, decl, NULL_TREE, context_die);
19047   for (i = 0; i < BLOCK_NUM_NONLOCALIZED_VARS (stmt); i++)
19048     process_scope_var (stmt, NULL, BLOCK_NONLOCALIZED_VAR (stmt, i),
19049                        context_die);
19050
19051   /* If we're at -g1, we're not interested in subblocks.  */
19052   if (debug_info_level <= DINFO_LEVEL_TERSE)
19053     return;
19054
19055   /* Output the DIEs to represent all sub-blocks (and the items declared
19056      therein) of this block.  */
19057   for (subblocks = BLOCK_SUBBLOCKS (stmt);
19058        subblocks != NULL;
19059        subblocks = BLOCK_CHAIN (subblocks))
19060     gen_block_die (subblocks, context_die, depth + 1);
19061 }
19062
19063 /* Is this a typedef we can avoid emitting?  */
19064
19065 static inline int
19066 is_redundant_typedef (const_tree decl)
19067 {
19068   if (TYPE_DECL_IS_STUB (decl))
19069     return 1;
19070
19071   if (DECL_ARTIFICIAL (decl)
19072       && DECL_CONTEXT (decl)
19073       && is_tagged_type (DECL_CONTEXT (decl))
19074       && TREE_CODE (TYPE_NAME (DECL_CONTEXT (decl))) == TYPE_DECL
19075       && DECL_NAME (decl) == DECL_NAME (TYPE_NAME (DECL_CONTEXT (decl))))
19076     /* Also ignore the artificial member typedef for the class name.  */
19077     return 1;
19078
19079   return 0;
19080 }
19081
19082 /* Returns the DIE for a context.  */
19083
19084 static inline dw_die_ref
19085 get_context_die (tree context)
19086 {
19087   if (context)
19088     {
19089       /* Find die that represents this context.  */
19090       if (TYPE_P (context))
19091         return force_type_die (TYPE_MAIN_VARIANT (context));
19092       else
19093         return force_decl_die (context);
19094     }
19095   return comp_unit_die;
19096 }
19097
19098 /* Returns the DIE for decl.  A DIE will always be returned.  */
19099
19100 static dw_die_ref
19101 force_decl_die (tree decl)
19102 {
19103   dw_die_ref decl_die;
19104   unsigned saved_external_flag;
19105   tree save_fn = NULL_TREE;
19106   decl_die = lookup_decl_die (decl);
19107   if (!decl_die)
19108     {
19109       dw_die_ref context_die = get_context_die (DECL_CONTEXT (decl));
19110
19111       decl_die = lookup_decl_die (decl);
19112       if (decl_die)
19113         return decl_die;
19114
19115       switch (TREE_CODE (decl))
19116         {
19117         case FUNCTION_DECL:
19118           /* Clear current_function_decl, so that gen_subprogram_die thinks
19119              that this is a declaration. At this point, we just want to force
19120              declaration die.  */
19121           save_fn = current_function_decl;
19122           current_function_decl = NULL_TREE;
19123           gen_subprogram_die (decl, context_die);
19124           current_function_decl = save_fn;
19125           break;
19126
19127         case VAR_DECL:
19128           /* Set external flag to force declaration die. Restore it after
19129            gen_decl_die() call.  */
19130           saved_external_flag = DECL_EXTERNAL (decl);
19131           DECL_EXTERNAL (decl) = 1;
19132           gen_decl_die (decl, NULL, context_die);
19133           DECL_EXTERNAL (decl) = saved_external_flag;
19134           break;
19135
19136         case NAMESPACE_DECL:
19137           if (dwarf_version >= 3 || !dwarf_strict)
19138             dwarf2out_decl (decl);
19139           else
19140             /* DWARF2 has neither DW_TAG_module, nor DW_TAG_namespace.  */
19141             decl_die = comp_unit_die;
19142           break;
19143
19144         default:
19145           gcc_unreachable ();
19146         }
19147
19148       /* We should be able to find the DIE now.  */
19149       if (!decl_die)
19150         decl_die = lookup_decl_die (decl);
19151       gcc_assert (decl_die);
19152     }
19153
19154   return decl_die;
19155 }
19156
19157 /* Returns the DIE for TYPE, that must not be a base type.  A DIE is
19158    always returned.  */
19159
19160 static dw_die_ref
19161 force_type_die (tree type)
19162 {
19163   dw_die_ref type_die;
19164
19165   type_die = lookup_type_die (type);
19166   if (!type_die)
19167     {
19168       dw_die_ref context_die = get_context_die (TYPE_CONTEXT (type));
19169
19170       type_die = modified_type_die (type, TYPE_READONLY (type),
19171                                     TYPE_VOLATILE (type), context_die);
19172       gcc_assert (type_die);
19173     }
19174   return type_die;
19175 }
19176
19177 /* Force out any required namespaces to be able to output DECL,
19178    and return the new context_die for it, if it's changed.  */
19179
19180 static dw_die_ref
19181 setup_namespace_context (tree thing, dw_die_ref context_die)
19182 {
19183   tree context = (DECL_P (thing)
19184                   ? DECL_CONTEXT (thing) : TYPE_CONTEXT (thing));
19185   if (context && TREE_CODE (context) == NAMESPACE_DECL)
19186     /* Force out the namespace.  */
19187     context_die = force_decl_die (context);
19188
19189   return context_die;
19190 }
19191
19192 /* Emit a declaration DIE for THING (which is either a DECL or a tagged
19193    type) within its namespace, if appropriate.
19194
19195    For compatibility with older debuggers, namespace DIEs only contain
19196    declarations; all definitions are emitted at CU scope.  */
19197
19198 static dw_die_ref
19199 declare_in_namespace (tree thing, dw_die_ref context_die)
19200 {
19201   dw_die_ref ns_context;
19202
19203   if (debug_info_level <= DINFO_LEVEL_TERSE)
19204     return context_die;
19205
19206   /* If this decl is from an inlined function, then don't try to emit it in its
19207      namespace, as we will get confused.  It would have already been emitted
19208      when the abstract instance of the inline function was emitted anyways.  */
19209   if (DECL_P (thing) && DECL_ABSTRACT_ORIGIN (thing))
19210     return context_die;
19211
19212   ns_context = setup_namespace_context (thing, context_die);
19213
19214   if (ns_context != context_die)
19215     {
19216       if (is_fortran ())
19217         return ns_context;
19218       if (DECL_P (thing))
19219         gen_decl_die (thing, NULL, ns_context);
19220       else
19221         gen_type_die (thing, ns_context);
19222     }
19223   return context_die;
19224 }
19225
19226 /* Generate a DIE for a namespace or namespace alias.  */
19227
19228 static void
19229 gen_namespace_die (tree decl, dw_die_ref context_die)
19230 {
19231   dw_die_ref namespace_die;
19232
19233   /* Namespace aliases have a DECL_ABSTRACT_ORIGIN of the namespace
19234      they are an alias of.  */
19235   if (DECL_ABSTRACT_ORIGIN (decl) == NULL)
19236     {
19237       /* Output a real namespace or module.  */
19238       context_die = setup_namespace_context (decl, comp_unit_die);
19239       namespace_die = new_die (is_fortran ()
19240                                ? DW_TAG_module : DW_TAG_namespace,
19241                                context_die, decl);
19242       /* For Fortran modules defined in different CU don't add src coords.  */
19243       if (namespace_die->die_tag == DW_TAG_module && DECL_EXTERNAL (decl))
19244         {
19245           const char *name = dwarf2_name (decl, 0);
19246           if (name)
19247             add_name_attribute (namespace_die, name);
19248         }
19249       else
19250         add_name_and_src_coords_attributes (namespace_die, decl);
19251       if (DECL_EXTERNAL (decl))
19252         add_AT_flag (namespace_die, DW_AT_declaration, 1);
19253       equate_decl_number_to_die (decl, namespace_die);
19254     }
19255   else
19256     {
19257       /* Output a namespace alias.  */
19258
19259       /* Force out the namespace we are an alias of, if necessary.  */
19260       dw_die_ref origin_die
19261         = force_decl_die (DECL_ABSTRACT_ORIGIN (decl));
19262
19263       if (DECL_CONTEXT (decl) == NULL_TREE
19264           || TREE_CODE (DECL_CONTEXT (decl)) == NAMESPACE_DECL)
19265         context_die = setup_namespace_context (decl, comp_unit_die);
19266       /* Now create the namespace alias DIE.  */
19267       namespace_die = new_die (DW_TAG_imported_declaration, context_die, decl);
19268       add_name_and_src_coords_attributes (namespace_die, decl);
19269       add_AT_die_ref (namespace_die, DW_AT_import, origin_die);
19270       equate_decl_number_to_die (decl, namespace_die);
19271     }
19272 }
19273
19274 /* Generate Dwarf debug information for a decl described by DECL.  */
19275
19276 static void
19277 gen_decl_die (tree decl, tree origin, dw_die_ref context_die)
19278 {
19279   tree decl_or_origin = decl ? decl : origin;
19280   tree class_origin = NULL;
19281
19282   if (DECL_P (decl_or_origin) && DECL_IGNORED_P (decl_or_origin))
19283     return;
19284
19285   switch (TREE_CODE (decl_or_origin))
19286     {
19287     case ERROR_MARK:
19288       break;
19289
19290     case CONST_DECL:
19291       if (!is_fortran ())
19292         {
19293           /* The individual enumerators of an enum type get output when we output
19294              the Dwarf representation of the relevant enum type itself.  */
19295           break;
19296         }
19297
19298       /* Emit its type.  */
19299       gen_type_die (TREE_TYPE (decl), context_die);
19300
19301       /* And its containing namespace.  */
19302       context_die = declare_in_namespace (decl, context_die);
19303
19304       gen_const_die (decl, context_die);
19305       break;
19306
19307     case FUNCTION_DECL:
19308       /* Don't output any DIEs to represent mere function declarations,
19309          unless they are class members or explicit block externs.  */
19310       if (DECL_INITIAL (decl_or_origin) == NULL_TREE
19311           && DECL_CONTEXT (decl_or_origin) == NULL_TREE
19312           && (current_function_decl == NULL_TREE
19313               || DECL_ARTIFICIAL (decl_or_origin)))
19314         break;
19315
19316 #if 0
19317       /* FIXME */
19318       /* This doesn't work because the C frontend sets DECL_ABSTRACT_ORIGIN
19319          on local redeclarations of global functions.  That seems broken.  */
19320       if (current_function_decl != decl)
19321         /* This is only a declaration.  */;
19322 #endif
19323
19324       /* If we're emitting a clone, emit info for the abstract instance.  */
19325       if (origin || DECL_ORIGIN (decl) != decl)
19326         dwarf2out_abstract_function (origin ? origin : DECL_ABSTRACT_ORIGIN (decl));
19327
19328       /* If we're emitting an out-of-line copy of an inline function,
19329          emit info for the abstract instance and set up to refer to it.  */
19330       else if (cgraph_function_possibly_inlined_p (decl)
19331                && ! DECL_ABSTRACT (decl)
19332                && ! class_or_namespace_scope_p (context_die)
19333                /* dwarf2out_abstract_function won't emit a die if this is just
19334                   a declaration.  We must avoid setting DECL_ABSTRACT_ORIGIN in
19335                   that case, because that works only if we have a die.  */
19336                && DECL_INITIAL (decl) != NULL_TREE)
19337         {
19338           dwarf2out_abstract_function (decl);
19339           set_decl_origin_self (decl);
19340         }
19341
19342       /* Otherwise we're emitting the primary DIE for this decl.  */
19343       else if (debug_info_level > DINFO_LEVEL_TERSE)
19344         {
19345           /* Before we describe the FUNCTION_DECL itself, make sure that we
19346              have described its return type.  */
19347           gen_type_die (TREE_TYPE (TREE_TYPE (decl)), context_die);
19348
19349           /* And its virtual context.  */
19350           if (DECL_VINDEX (decl) != NULL_TREE)
19351             gen_type_die (DECL_CONTEXT (decl), context_die);
19352
19353           /* And its containing type.  */
19354           if (!origin)
19355             origin = decl_class_context (decl);
19356           if (origin != NULL_TREE)
19357             gen_type_die_for_member (origin, decl, context_die);
19358
19359           /* And its containing namespace.  */
19360           context_die = declare_in_namespace (decl, context_die);
19361         }
19362
19363       /* Now output a DIE to represent the function itself.  */
19364       if (decl)
19365         gen_subprogram_die (decl, context_die);
19366       break;
19367
19368     case TYPE_DECL:
19369       /* If we are in terse mode, don't generate any DIEs to represent any
19370          actual typedefs.  */
19371       if (debug_info_level <= DINFO_LEVEL_TERSE)
19372         break;
19373
19374       /* In the special case of a TYPE_DECL node representing the declaration
19375          of some type tag, if the given TYPE_DECL is marked as having been
19376          instantiated from some other (original) TYPE_DECL node (e.g. one which
19377          was generated within the original definition of an inline function) we
19378          used to generate a special (abbreviated) DW_TAG_structure_type,
19379          DW_TAG_union_type, or DW_TAG_enumeration_type DIE here.  But nothing
19380          should be actually referencing those DIEs, as variable DIEs with that
19381          type would be emitted already in the abstract origin, so it was always
19382          removed during unused type prunning.  Don't add anything in this
19383          case.  */
19384       if (TYPE_DECL_IS_STUB (decl) && decl_ultimate_origin (decl) != NULL_TREE)
19385         break;
19386
19387       if (is_redundant_typedef (decl))
19388         gen_type_die (TREE_TYPE (decl), context_die);
19389       else
19390         /* Output a DIE to represent the typedef itself.  */
19391         gen_typedef_die (decl, context_die);
19392       break;
19393
19394     case LABEL_DECL:
19395       if (debug_info_level >= DINFO_LEVEL_NORMAL)
19396         gen_label_die (decl, context_die);
19397       break;
19398
19399     case VAR_DECL:
19400     case RESULT_DECL:
19401       /* If we are in terse mode, don't generate any DIEs to represent any
19402          variable declarations or definitions.  */
19403       if (debug_info_level <= DINFO_LEVEL_TERSE)
19404         break;
19405
19406       /* Output any DIEs that are needed to specify the type of this data
19407          object.  */
19408       if (decl_by_reference_p (decl_or_origin))
19409         gen_type_die (TREE_TYPE (TREE_TYPE (decl_or_origin)), context_die);
19410       else
19411         gen_type_die (TREE_TYPE (decl_or_origin), context_die);
19412
19413       /* And its containing type.  */
19414       class_origin = decl_class_context (decl_or_origin);
19415       if (class_origin != NULL_TREE)
19416         gen_type_die_for_member (class_origin, decl_or_origin, context_die);
19417
19418       /* And its containing namespace.  */
19419       context_die = declare_in_namespace (decl_or_origin, context_die);
19420
19421       /* Now output the DIE to represent the data object itself.  This gets
19422          complicated because of the possibility that the VAR_DECL really
19423          represents an inlined instance of a formal parameter for an inline
19424          function.  */
19425       if (!origin)
19426         origin = decl_ultimate_origin (decl);
19427       if (origin != NULL_TREE && TREE_CODE (origin) == PARM_DECL)
19428         gen_formal_parameter_die (decl, origin,
19429                                   true /* Emit name attribute.  */,
19430                                   context_die);
19431       else
19432         gen_variable_die (decl, origin, context_die);
19433       break;
19434
19435     case FIELD_DECL:
19436       /* Ignore the nameless fields that are used to skip bits but handle C++
19437          anonymous unions and structs.  */
19438       if (DECL_NAME (decl) != NULL_TREE
19439           || TREE_CODE (TREE_TYPE (decl)) == UNION_TYPE
19440           || TREE_CODE (TREE_TYPE (decl)) == RECORD_TYPE)
19441         {
19442           gen_type_die (member_declared_type (decl), context_die);
19443           gen_field_die (decl, context_die);
19444         }
19445       break;
19446
19447     case PARM_DECL:
19448       if (DECL_BY_REFERENCE (decl_or_origin))
19449         gen_type_die (TREE_TYPE (TREE_TYPE (decl_or_origin)), context_die);
19450       else
19451         gen_type_die (TREE_TYPE (decl_or_origin), context_die);
19452       gen_formal_parameter_die (decl, origin,
19453                                 true /* Emit name attribute.  */,
19454                                 context_die);
19455       break;
19456
19457     case NAMESPACE_DECL:
19458     case IMPORTED_DECL:
19459       if (dwarf_version >= 3 || !dwarf_strict)
19460         gen_namespace_die (decl, context_die);
19461       break;
19462
19463     default:
19464       /* Probably some frontend-internal decl.  Assume we don't care.  */
19465       gcc_assert ((int)TREE_CODE (decl) > NUM_TREE_CODES);
19466       break;
19467     }
19468 }
19469 \f
19470 /* Output debug information for global decl DECL.  Called from toplev.c after
19471    compilation proper has finished.  */
19472
19473 static void
19474 dwarf2out_global_decl (tree decl)
19475 {
19476   /* Output DWARF2 information for file-scope tentative data object
19477      declarations, file-scope (extern) function declarations (which
19478      had no corresponding body) and file-scope tagged type declarations
19479      and definitions which have not yet been forced out.  */
19480   if (TREE_CODE (decl) != FUNCTION_DECL || !DECL_INITIAL (decl))
19481     dwarf2out_decl (decl);
19482 }
19483
19484 /* Output debug information for type decl DECL.  Called from toplev.c
19485    and from language front ends (to record built-in types).  */
19486 static void
19487 dwarf2out_type_decl (tree decl, int local)
19488 {
19489   if (!local)
19490     dwarf2out_decl (decl);
19491 }
19492
19493 /* Output debug information for imported module or decl DECL.
19494    NAME is non-NULL name in the lexical block if the decl has been renamed.
19495    LEXICAL_BLOCK is the lexical block (which TREE_CODE is a BLOCK)
19496    that DECL belongs to.
19497    LEXICAL_BLOCK_DIE is the DIE of LEXICAL_BLOCK.  */
19498 static void
19499 dwarf2out_imported_module_or_decl_1 (tree decl,
19500                                      tree name,
19501                                      tree lexical_block,
19502                                      dw_die_ref lexical_block_die)
19503 {
19504   expanded_location xloc;
19505   dw_die_ref imported_die = NULL;
19506   dw_die_ref at_import_die;
19507
19508   if (TREE_CODE (decl) == IMPORTED_DECL)
19509     {
19510       xloc = expand_location (DECL_SOURCE_LOCATION (decl));
19511       decl = IMPORTED_DECL_ASSOCIATED_DECL (decl);
19512       gcc_assert (decl);
19513     }
19514   else
19515     xloc = expand_location (input_location);
19516
19517   if (TREE_CODE (decl) == TYPE_DECL || TREE_CODE (decl) == CONST_DECL)
19518     {
19519       if (is_base_type (TREE_TYPE (decl)))
19520         at_import_die = base_type_die (TREE_TYPE (decl));
19521       else
19522         at_import_die = force_type_die (TREE_TYPE (decl));
19523       /* For namespace N { typedef void T; } using N::T; base_type_die
19524          returns NULL, but DW_TAG_imported_declaration requires
19525          the DW_AT_import tag.  Force creation of DW_TAG_typedef.  */
19526       if (!at_import_die)
19527         {
19528           gcc_assert (TREE_CODE (decl) == TYPE_DECL);
19529           gen_typedef_die (decl, get_context_die (DECL_CONTEXT (decl)));
19530           at_import_die = lookup_type_die (TREE_TYPE (decl));
19531           gcc_assert (at_import_die);
19532         }
19533     }
19534   else
19535     {
19536       at_import_die = lookup_decl_die (decl);
19537       if (!at_import_die)
19538         {
19539           /* If we're trying to avoid duplicate debug info, we may not have
19540              emitted the member decl for this field.  Emit it now.  */
19541           if (TREE_CODE (decl) == FIELD_DECL)
19542             {
19543               tree type = DECL_CONTEXT (decl);
19544
19545               if (TYPE_CONTEXT (type)
19546                   && TYPE_P (TYPE_CONTEXT (type))
19547                   && !should_emit_struct_debug (TYPE_CONTEXT (type),
19548                                                 DINFO_USAGE_DIR_USE))
19549                 return;
19550               gen_type_die_for_member (type, decl,
19551                                        get_context_die (TYPE_CONTEXT (type)));
19552             }
19553           at_import_die = force_decl_die (decl);
19554         }
19555     }
19556
19557   if (TREE_CODE (decl) == NAMESPACE_DECL)
19558     {
19559       if (dwarf_version >= 3 || !dwarf_strict)
19560         imported_die = new_die (DW_TAG_imported_module,
19561                                 lexical_block_die,
19562                                 lexical_block);
19563       else
19564         return;
19565     }
19566   else
19567     imported_die = new_die (DW_TAG_imported_declaration,
19568                             lexical_block_die,
19569                             lexical_block);
19570
19571   add_AT_file (imported_die, DW_AT_decl_file, lookup_filename (xloc.file));
19572   add_AT_unsigned (imported_die, DW_AT_decl_line, xloc.line);
19573   if (name)
19574     add_AT_string (imported_die, DW_AT_name,
19575                    IDENTIFIER_POINTER (name));
19576   add_AT_die_ref (imported_die, DW_AT_import, at_import_die);
19577 }
19578
19579 /* Output debug information for imported module or decl DECL.
19580    NAME is non-NULL name in context if the decl has been renamed.
19581    CHILD is true if decl is one of the renamed decls as part of
19582    importing whole module.  */
19583
19584 static void
19585 dwarf2out_imported_module_or_decl (tree decl, tree name, tree context,
19586                                    bool child)
19587 {
19588   /* dw_die_ref at_import_die;  */
19589   dw_die_ref scope_die;
19590
19591   if (debug_info_level <= DINFO_LEVEL_TERSE)
19592     return;
19593
19594   gcc_assert (decl);
19595
19596   /* To emit DW_TAG_imported_module or DW_TAG_imported_decl, we need two DIEs.
19597      We need decl DIE for reference and scope die. First, get DIE for the decl
19598      itself.  */
19599
19600   /* Get the scope die for decl context. Use comp_unit_die for global module
19601      or decl. If die is not found for non globals, force new die.  */
19602   if (context
19603       && TYPE_P (context)
19604       && !should_emit_struct_debug (context, DINFO_USAGE_DIR_USE))
19605     return;
19606
19607   if (!(dwarf_version >= 3 || !dwarf_strict))
19608     return;
19609
19610   scope_die = get_context_die (context);
19611
19612   if (child)
19613     {
19614       gcc_assert (scope_die->die_child);
19615       gcc_assert (scope_die->die_child->die_tag == DW_TAG_imported_module);
19616       gcc_assert (TREE_CODE (decl) != NAMESPACE_DECL);
19617       scope_die = scope_die->die_child;
19618     }
19619
19620   /* OK, now we have DIEs for decl as well as scope. Emit imported die.  */
19621   dwarf2out_imported_module_or_decl_1 (decl, name, context, scope_die);
19622
19623 }
19624
19625 /* Write the debugging output for DECL.  */
19626
19627 void
19628 dwarf2out_decl (tree decl)
19629 {
19630   dw_die_ref context_die = comp_unit_die;
19631
19632   switch (TREE_CODE (decl))
19633     {
19634     case ERROR_MARK:
19635       return;
19636
19637     case FUNCTION_DECL:
19638       /* What we would really like to do here is to filter out all mere
19639          file-scope declarations of file-scope functions which are never
19640          referenced later within this translation unit (and keep all of ones
19641          that *are* referenced later on) but we aren't clairvoyant, so we have
19642          no idea which functions will be referenced in the future (i.e. later
19643          on within the current translation unit). So here we just ignore all
19644          file-scope function declarations which are not also definitions.  If
19645          and when the debugger needs to know something about these functions,
19646          it will have to hunt around and find the DWARF information associated
19647          with the definition of the function.
19648
19649          We can't just check DECL_EXTERNAL to find out which FUNCTION_DECL
19650          nodes represent definitions and which ones represent mere
19651          declarations.  We have to check DECL_INITIAL instead. That's because
19652          the C front-end supports some weird semantics for "extern inline"
19653          function definitions.  These can get inlined within the current
19654          translation unit (and thus, we need to generate Dwarf info for their
19655          abstract instances so that the Dwarf info for the concrete inlined
19656          instances can have something to refer to) but the compiler never
19657          generates any out-of-lines instances of such things (despite the fact
19658          that they *are* definitions).
19659
19660          The important point is that the C front-end marks these "extern
19661          inline" functions as DECL_EXTERNAL, but we need to generate DWARF for
19662          them anyway. Note that the C++ front-end also plays some similar games
19663          for inline function definitions appearing within include files which
19664          also contain `#pragma interface' pragmas.  */
19665       if (DECL_INITIAL (decl) == NULL_TREE)
19666         return;
19667
19668       /* If we're a nested function, initially use a parent of NULL; if we're
19669          a plain function, this will be fixed up in decls_for_scope.  If
19670          we're a method, it will be ignored, since we already have a DIE.  */
19671       if (decl_function_context (decl)
19672           /* But if we're in terse mode, we don't care about scope.  */
19673           && debug_info_level > DINFO_LEVEL_TERSE)
19674         context_die = NULL;
19675       break;
19676
19677     case VAR_DECL:
19678       /* Ignore this VAR_DECL if it refers to a file-scope extern data object
19679          declaration and if the declaration was never even referenced from
19680          within this entire compilation unit.  We suppress these DIEs in
19681          order to save space in the .debug section (by eliminating entries
19682          which are probably useless).  Note that we must not suppress
19683          block-local extern declarations (whether used or not) because that
19684          would screw-up the debugger's name lookup mechanism and cause it to
19685          miss things which really ought to be in scope at a given point.  */
19686       if (DECL_EXTERNAL (decl) && !TREE_USED (decl))
19687         return;
19688
19689       /* For local statics lookup proper context die.  */
19690       if (TREE_STATIC (decl) && decl_function_context (decl))
19691         context_die = lookup_decl_die (DECL_CONTEXT (decl));
19692
19693       /* If we are in terse mode, don't generate any DIEs to represent any
19694          variable declarations or definitions.  */
19695       if (debug_info_level <= DINFO_LEVEL_TERSE)
19696         return;
19697       break;
19698
19699     case CONST_DECL:
19700       if (debug_info_level <= DINFO_LEVEL_TERSE)
19701         return;
19702       if (!is_fortran ())
19703         return;
19704       if (TREE_STATIC (decl) && decl_function_context (decl))
19705         context_die = lookup_decl_die (DECL_CONTEXT (decl));
19706       break;
19707
19708     case NAMESPACE_DECL:
19709     case IMPORTED_DECL:
19710       if (debug_info_level <= DINFO_LEVEL_TERSE)
19711         return;
19712       if (lookup_decl_die (decl) != NULL)
19713         return;
19714       break;
19715
19716     case TYPE_DECL:
19717       /* Don't emit stubs for types unless they are needed by other DIEs.  */
19718       if (TYPE_DECL_SUPPRESS_DEBUG (decl))
19719         return;
19720
19721       /* Don't bother trying to generate any DIEs to represent any of the
19722          normal built-in types for the language we are compiling.  */
19723       if (DECL_IS_BUILTIN (decl))
19724         {
19725           /* OK, we need to generate one for `bool' so GDB knows what type
19726              comparisons have.  */
19727           if (is_cxx ()
19728               && TREE_CODE (TREE_TYPE (decl)) == BOOLEAN_TYPE
19729               && ! DECL_IGNORED_P (decl))
19730             modified_type_die (TREE_TYPE (decl), 0, 0, NULL);
19731
19732           return;
19733         }
19734
19735       /* If we are in terse mode, don't generate any DIEs for types.  */
19736       if (debug_info_level <= DINFO_LEVEL_TERSE)
19737         return;
19738
19739       /* If we're a function-scope tag, initially use a parent of NULL;
19740          this will be fixed up in decls_for_scope.  */
19741       if (decl_function_context (decl))
19742         context_die = NULL;
19743
19744       break;
19745
19746     default:
19747       return;
19748     }
19749
19750   gen_decl_die (decl, NULL, context_die);
19751 }
19752
19753 /* Output a marker (i.e. a label) for the beginning of the generated code for
19754    a lexical block.  */
19755
19756 static void
19757 dwarf2out_begin_block (unsigned int line ATTRIBUTE_UNUSED,
19758                        unsigned int blocknum)
19759 {
19760   switch_to_section (current_function_section ());
19761   ASM_OUTPUT_DEBUG_LABEL (asm_out_file, BLOCK_BEGIN_LABEL, blocknum);
19762 }
19763
19764 /* Output a marker (i.e. a label) for the end of the generated code for a
19765    lexical block.  */
19766
19767 static void
19768 dwarf2out_end_block (unsigned int line ATTRIBUTE_UNUSED, unsigned int blocknum)
19769 {
19770   switch_to_section (current_function_section ());
19771   ASM_OUTPUT_DEBUG_LABEL (asm_out_file, BLOCK_END_LABEL, blocknum);
19772 }
19773
19774 /* Returns nonzero if it is appropriate not to emit any debugging
19775    information for BLOCK, because it doesn't contain any instructions.
19776
19777    Don't allow this for blocks with nested functions or local classes
19778    as we would end up with orphans, and in the presence of scheduling
19779    we may end up calling them anyway.  */
19780
19781 static bool
19782 dwarf2out_ignore_block (const_tree block)
19783 {
19784   tree decl;
19785   unsigned int i;
19786
19787   for (decl = BLOCK_VARS (block); decl; decl = TREE_CHAIN (decl))
19788     if (TREE_CODE (decl) == FUNCTION_DECL
19789         || (TREE_CODE (decl) == TYPE_DECL && TYPE_DECL_IS_STUB (decl)))
19790       return 0;
19791   for (i = 0; i < BLOCK_NUM_NONLOCALIZED_VARS (block); i++)
19792     {
19793       decl = BLOCK_NONLOCALIZED_VAR (block, i);
19794       if (TREE_CODE (decl) == FUNCTION_DECL
19795           || (TREE_CODE (decl) == TYPE_DECL && TYPE_DECL_IS_STUB (decl)))
19796       return 0;
19797     }
19798
19799   return 1;
19800 }
19801
19802 /* Hash table routines for file_hash.  */
19803
19804 static int
19805 file_table_eq (const void *p1_p, const void *p2_p)
19806 {
19807   const struct dwarf_file_data *const p1 =
19808     (const struct dwarf_file_data *) p1_p;
19809   const char *const p2 = (const char *) p2_p;
19810   return strcmp (p1->filename, p2) == 0;
19811 }
19812
19813 static hashval_t
19814 file_table_hash (const void *p_p)
19815 {
19816   const struct dwarf_file_data *const p = (const struct dwarf_file_data *) p_p;
19817   return htab_hash_string (p->filename);
19818 }
19819
19820 /* Lookup FILE_NAME (in the list of filenames that we know about here in
19821    dwarf2out.c) and return its "index".  The index of each (known) filename is
19822    just a unique number which is associated with only that one filename.  We
19823    need such numbers for the sake of generating labels (in the .debug_sfnames
19824    section) and references to those files numbers (in the .debug_srcinfo
19825    and.debug_macinfo sections).  If the filename given as an argument is not
19826    found in our current list, add it to the list and assign it the next
19827    available unique index number.  In order to speed up searches, we remember
19828    the index of the filename was looked up last.  This handles the majority of
19829    all searches.  */
19830
19831 static struct dwarf_file_data *
19832 lookup_filename (const char *file_name)
19833 {
19834   void ** slot;
19835   struct dwarf_file_data * created;
19836
19837   /* Check to see if the file name that was searched on the previous
19838      call matches this file name.  If so, return the index.  */
19839   if (file_table_last_lookup
19840       && (file_name == file_table_last_lookup->filename
19841           || strcmp (file_table_last_lookup->filename, file_name) == 0))
19842     return file_table_last_lookup;
19843
19844   /* Didn't match the previous lookup, search the table.  */
19845   slot = htab_find_slot_with_hash (file_table, file_name,
19846                                    htab_hash_string (file_name), INSERT);
19847   if (*slot)
19848     return (struct dwarf_file_data *) *slot;
19849
19850   created = GGC_NEW (struct dwarf_file_data);
19851   created->filename = file_name;
19852   created->emitted_number = 0;
19853   *slot = created;
19854   return created;
19855 }
19856
19857 /* If the assembler will construct the file table, then translate the compiler
19858    internal file table number into the assembler file table number, and emit
19859    a .file directive if we haven't already emitted one yet.  The file table
19860    numbers are different because we prune debug info for unused variables and
19861    types, which may include filenames.  */
19862
19863 static int
19864 maybe_emit_file (struct dwarf_file_data * fd)
19865 {
19866   if (! fd->emitted_number)
19867     {
19868       if (last_emitted_file)
19869         fd->emitted_number = last_emitted_file->emitted_number + 1;
19870       else
19871         fd->emitted_number = 1;
19872       last_emitted_file = fd;
19873
19874       if (DWARF2_ASM_LINE_DEBUG_INFO)
19875         {
19876           fprintf (asm_out_file, "\t.file %u ", fd->emitted_number);
19877           output_quoted_string (asm_out_file,
19878                                 remap_debug_filename (fd->filename));
19879           fputc ('\n', asm_out_file);
19880         }
19881     }
19882
19883   return fd->emitted_number;
19884 }
19885
19886 /* Schedule generation of a DW_AT_const_value attribute to DIE.
19887    That generation should happen after function debug info has been
19888    generated. The value of the attribute is the constant value of ARG.  */
19889
19890 static void
19891 append_entry_to_tmpl_value_parm_die_table (dw_die_ref die, tree arg)
19892 {
19893   die_arg_entry entry;
19894
19895   if (!die || !arg)
19896     return;
19897
19898   if (!tmpl_value_parm_die_table)
19899     tmpl_value_parm_die_table
19900       = VEC_alloc (die_arg_entry, gc, 32);
19901
19902   entry.die = die;
19903   entry.arg = arg;
19904   VEC_safe_push (die_arg_entry, gc,
19905                  tmpl_value_parm_die_table,
19906                  &entry);
19907 }
19908
19909 /* Add a DW_AT_const_value attribute to DIEs that were scheduled
19910    by append_entry_to_tmpl_value_parm_die_table. This function must
19911    be called after function DIEs have been generated.  */
19912
19913 static void
19914 gen_remaining_tmpl_value_param_die_attribute (void)
19915 {
19916   if (tmpl_value_parm_die_table)
19917     {
19918       unsigned i;
19919       die_arg_entry *e;
19920
19921       for (i = 0;
19922            VEC_iterate (die_arg_entry, tmpl_value_parm_die_table, i, e);
19923            i++)
19924         tree_add_const_value_attribute (e->die, e->arg);
19925     }
19926 }
19927
19928
19929 /* Replace DW_AT_name for the decl with name.  */
19930
19931 static void
19932 dwarf2out_set_name (tree decl, tree name)
19933 {
19934   dw_die_ref die;
19935   dw_attr_ref attr;
19936   const char *dname;
19937
19938   die = TYPE_SYMTAB_DIE (decl);
19939   if (!die)
19940     return;
19941
19942   dname = dwarf2_name (name, 0);
19943   if (!dname)
19944     return;
19945
19946   attr = get_AT (die, DW_AT_name);
19947   if (attr)
19948     {
19949       struct indirect_string_node *node;
19950
19951       node = find_AT_string (dname);
19952       /* replace the string.  */
19953       attr->dw_attr_val.v.val_str = node;
19954     }
19955
19956   else
19957     add_name_attribute (die, dname);
19958 }
19959
19960 /* Called by the final INSN scan whenever we see a direct function call.
19961    Make an entry into the direct call table, recording the point of call
19962    and a reference to the target function's debug entry.  */
19963
19964 static void
19965 dwarf2out_direct_call (tree targ)
19966 {
19967   dcall_entry e;
19968   tree origin = decl_ultimate_origin (targ);
19969
19970   /* If this is a clone, use the abstract origin as the target.  */
19971   if (origin)
19972     targ = origin;
19973
19974   e.poc_label_num = poc_label_num++;
19975   e.poc_decl = current_function_decl;
19976   e.targ_die = force_decl_die (targ);
19977   VEC_safe_push (dcall_entry, gc, dcall_table, &e);
19978
19979   /* Drop a label at the return point to mark the point of call.  */
19980   ASM_OUTPUT_DEBUG_LABEL (asm_out_file, "LPOC", e.poc_label_num);
19981 }
19982
19983 /* Returns a hash value for X (which really is a struct vcall_insn).  */
19984
19985 static hashval_t
19986 vcall_insn_table_hash (const void *x)
19987 {
19988   return (hashval_t) ((const struct vcall_insn *) x)->insn_uid;
19989 }
19990
19991 /* Return nonzero if insn_uid of struct vcall_insn *X is the same as
19992    insnd_uid of *Y.  */
19993
19994 static int
19995 vcall_insn_table_eq (const void *x, const void *y)
19996 {
19997   return (((const struct vcall_insn *) x)->insn_uid
19998           == ((const struct vcall_insn *) y)->insn_uid);
19999 }
20000
20001 /* Associate VTABLE_SLOT with INSN_UID in the VCALL_INSN_TABLE.  */
20002
20003 static void
20004 store_vcall_insn (unsigned int vtable_slot, int insn_uid)
20005 {
20006   struct vcall_insn *item = GGC_NEW (struct vcall_insn);
20007   struct vcall_insn **slot;
20008
20009   gcc_assert (item);
20010   item->insn_uid = insn_uid;
20011   item->vtable_slot = vtable_slot;
20012   slot = (struct vcall_insn **)
20013       htab_find_slot_with_hash (vcall_insn_table, &item,
20014                                 (hashval_t) insn_uid, INSERT);
20015   *slot = item;
20016 }
20017
20018 /* Return the VTABLE_SLOT associated with INSN_UID.  */
20019
20020 static unsigned int
20021 lookup_vcall_insn (unsigned int insn_uid)
20022 {
20023   struct vcall_insn item;
20024   struct vcall_insn *p;
20025
20026   item.insn_uid = insn_uid;
20027   item.vtable_slot = 0;
20028   p = (struct vcall_insn *) htab_find_with_hash (vcall_insn_table,
20029                                                  (void *) &item,
20030                                                  (hashval_t) insn_uid);
20031   if (p == NULL)
20032     return (unsigned int) -1;
20033   return p->vtable_slot;
20034 }
20035
20036
20037 /* Called when lowering indirect calls to RTL.  We make a note of INSN_UID
20038    and the OBJ_TYPE_REF_TOKEN from ADDR.  For C++ virtual calls, the token
20039    is the vtable slot index that we will need to put in the virtual call
20040    table later.  */
20041
20042 static void
20043 dwarf2out_virtual_call_token (tree addr, int insn_uid)
20044 {
20045   if (is_cxx() && TREE_CODE (addr) == OBJ_TYPE_REF)
20046     {
20047       tree token = OBJ_TYPE_REF_TOKEN (addr);
20048       if (TREE_CODE (token) == INTEGER_CST)
20049         store_vcall_insn (TREE_INT_CST_LOW (token), insn_uid);
20050     }
20051 }
20052
20053 /* Called when scheduling RTL, when a CALL_INSN is split.  Copies the
20054    OBJ_TYPE_REF_TOKEN previously associated with OLD_INSN and associates it
20055    with NEW_INSN.  */
20056
20057 static void
20058 dwarf2out_copy_call_info (rtx old_insn, rtx new_insn)
20059 {
20060   unsigned int vtable_slot = lookup_vcall_insn (INSN_UID (old_insn));
20061
20062   if (vtable_slot != (unsigned int) -1)
20063     store_vcall_insn (vtable_slot, INSN_UID (new_insn));
20064 }
20065
20066 /* Called by the final INSN scan whenever we see a virtual function call.
20067    Make an entry into the virtual call table, recording the point of call
20068    and the slot index of the vtable entry used to call the virtual member
20069    function.  The slot index was associated with the INSN_UID during the
20070    lowering to RTL.  */
20071
20072 static void
20073 dwarf2out_virtual_call (int insn_uid)
20074 {
20075   unsigned int vtable_slot = lookup_vcall_insn (insn_uid);
20076   vcall_entry e;
20077
20078   if (vtable_slot == (unsigned int) -1)
20079     return;
20080
20081   e.poc_label_num = poc_label_num++;
20082   e.vtable_slot = vtable_slot;
20083   VEC_safe_push (vcall_entry, gc, vcall_table, &e);
20084
20085   /* Drop a label at the return point to mark the point of call.  */
20086   ASM_OUTPUT_DEBUG_LABEL (asm_out_file, "LPOC", e.poc_label_num);
20087 }
20088
20089 /* Called by the final INSN scan whenever we see a var location.  We
20090    use it to drop labels in the right places, and throw the location in
20091    our lookup table.  */
20092
20093 static void
20094 dwarf2out_var_location (rtx loc_note)
20095 {
20096   char loclabel[MAX_ARTIFICIAL_LABEL_BYTES + 2];
20097   struct var_loc_node *newloc;
20098   rtx next_real;
20099   static const char *last_label;
20100   static const char *last_postcall_label;
20101   static bool last_in_cold_section_p;
20102   tree decl;
20103
20104   if (!DECL_P (NOTE_VAR_LOCATION_DECL (loc_note)))
20105     return;
20106
20107   next_real = next_real_insn (loc_note);
20108   /* If there are no instructions which would be affected by this note,
20109      don't do anything.  */
20110   if (next_real == NULL_RTX)
20111     return;
20112
20113   newloc = GGC_CNEW (struct var_loc_node);
20114   /* If there were no real insns between note we processed last time
20115      and this note, use the label we emitted last time.  */
20116   if (last_var_location_insn == NULL_RTX
20117       || last_var_location_insn != next_real
20118       || last_in_cold_section_p != in_cold_section_p)
20119     {
20120       ASM_GENERATE_INTERNAL_LABEL (loclabel, "LVL", loclabel_num);
20121       ASM_OUTPUT_DEBUG_LABEL (asm_out_file, "LVL", loclabel_num);
20122       loclabel_num++;
20123       last_label = ggc_strdup (loclabel);
20124       last_postcall_label = NULL;
20125     }
20126   newloc->var_loc_note = loc_note;
20127   newloc->next = NULL;
20128
20129   if (!NOTE_DURING_CALL_P (loc_note))
20130     newloc->label = last_label;
20131   else
20132     {
20133       if (!last_postcall_label)
20134         {
20135           sprintf (loclabel, "%s-1", last_label);
20136           last_postcall_label = ggc_strdup (loclabel);
20137         }
20138       newloc->label = last_postcall_label;
20139     }
20140
20141   if (cfun && in_cold_section_p)
20142     newloc->section_label = crtl->subsections.cold_section_label;
20143   else
20144     newloc->section_label = text_section_label;
20145
20146   last_var_location_insn = next_real;
20147   last_in_cold_section_p = in_cold_section_p;
20148   decl = NOTE_VAR_LOCATION_DECL (loc_note);
20149   add_var_loc_to_decl (decl, newloc);
20150 }
20151
20152 /* We need to reset the locations at the beginning of each
20153    function. We can't do this in the end_function hook, because the
20154    declarations that use the locations won't have been output when
20155    that hook is called.  Also compute have_multiple_function_sections here.  */
20156
20157 static void
20158 dwarf2out_begin_function (tree fun)
20159 {
20160   htab_empty (decl_loc_table);
20161
20162   if (function_section (fun) != text_section)
20163     have_multiple_function_sections = true;
20164
20165   dwarf2out_note_section_used ();
20166 }
20167
20168 /* Output a label to mark the beginning of a source code line entry
20169    and record information relating to this source line, in
20170    'line_info_table' for later output of the .debug_line section.  */
20171
20172 static void
20173 dwarf2out_source_line (unsigned int line, const char *filename,
20174                        int discriminator, bool is_stmt)
20175 {
20176   static bool last_is_stmt = true;
20177
20178   if (debug_info_level >= DINFO_LEVEL_NORMAL
20179       && line != 0)
20180     {
20181       int file_num = maybe_emit_file (lookup_filename (filename));
20182
20183       switch_to_section (current_function_section ());
20184
20185       /* If requested, emit something human-readable.  */
20186       if (flag_debug_asm)
20187         fprintf (asm_out_file, "\t%s %s:%d\n", ASM_COMMENT_START,
20188                  filename, line);
20189
20190       if (DWARF2_ASM_LINE_DEBUG_INFO)
20191         {
20192           /* Emit the .loc directive understood by GNU as.  */
20193           fprintf (asm_out_file, "\t.loc %d %d 0", file_num, line);
20194           if (is_stmt != last_is_stmt)
20195             {
20196               fprintf (asm_out_file, " is_stmt %d", is_stmt ? 1 : 0);
20197               last_is_stmt = is_stmt;
20198             }
20199           if (SUPPORTS_DISCRIMINATOR && discriminator != 0)
20200             fprintf (asm_out_file, " discriminator %d", discriminator);
20201           fputc ('\n', asm_out_file);
20202
20203           /* Indicate that line number info exists.  */
20204           line_info_table_in_use++;
20205         }
20206       else if (function_section (current_function_decl) != text_section)
20207         {
20208           dw_separate_line_info_ref line_info;
20209           targetm.asm_out.internal_label (asm_out_file,
20210                                           SEPARATE_LINE_CODE_LABEL,
20211                                           separate_line_info_table_in_use);
20212
20213           /* Expand the line info table if necessary.  */
20214           if (separate_line_info_table_in_use
20215               == separate_line_info_table_allocated)
20216             {
20217               separate_line_info_table_allocated += LINE_INFO_TABLE_INCREMENT;
20218               separate_line_info_table
20219                 = GGC_RESIZEVEC (dw_separate_line_info_entry,
20220                                  separate_line_info_table,
20221                                  separate_line_info_table_allocated);
20222               memset (separate_line_info_table
20223                        + separate_line_info_table_in_use,
20224                       0,
20225                       (LINE_INFO_TABLE_INCREMENT
20226                        * sizeof (dw_separate_line_info_entry)));
20227             }
20228
20229           /* Add the new entry at the end of the line_info_table.  */
20230           line_info
20231             = &separate_line_info_table[separate_line_info_table_in_use++];
20232           line_info->dw_file_num = file_num;
20233           line_info->dw_line_num = line;
20234           line_info->function = current_function_funcdef_no;
20235         }
20236       else
20237         {
20238           dw_line_info_ref line_info;
20239
20240           targetm.asm_out.internal_label (asm_out_file, LINE_CODE_LABEL,
20241                                      line_info_table_in_use);
20242
20243           /* Expand the line info table if necessary.  */
20244           if (line_info_table_in_use == line_info_table_allocated)
20245             {
20246               line_info_table_allocated += LINE_INFO_TABLE_INCREMENT;
20247               line_info_table
20248                 = GGC_RESIZEVEC (dw_line_info_entry, line_info_table,
20249                                  line_info_table_allocated);
20250               memset (line_info_table + line_info_table_in_use, 0,
20251                       LINE_INFO_TABLE_INCREMENT * sizeof (dw_line_info_entry));
20252             }
20253
20254           /* Add the new entry at the end of the line_info_table.  */
20255           line_info = &line_info_table[line_info_table_in_use++];
20256           line_info->dw_file_num = file_num;
20257           line_info->dw_line_num = line;
20258         }
20259     }
20260 }
20261
20262 /* Record the beginning of a new source file.  */
20263
20264 static void
20265 dwarf2out_start_source_file (unsigned int lineno, const char *filename)
20266 {
20267   if (flag_eliminate_dwarf2_dups && dwarf_version < 4)
20268     {
20269       /* Record the beginning of the file for break_out_includes.  */
20270       dw_die_ref bincl_die;
20271
20272       bincl_die = new_die (DW_TAG_GNU_BINCL, comp_unit_die, NULL);
20273       add_AT_string (bincl_die, DW_AT_name, remap_debug_filename (filename));
20274     }
20275
20276   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
20277     {
20278       int file_num = maybe_emit_file (lookup_filename (filename));
20279
20280       switch_to_section (debug_macinfo_section);
20281       dw2_asm_output_data (1, DW_MACINFO_start_file, "Start new file");
20282       dw2_asm_output_data_uleb128 (lineno, "Included from line number %d",
20283                                    lineno);
20284
20285       dw2_asm_output_data_uleb128 (file_num, "file %s", filename);
20286     }
20287 }
20288
20289 /* Record the end of a source file.  */
20290
20291 static void
20292 dwarf2out_end_source_file (unsigned int lineno ATTRIBUTE_UNUSED)
20293 {
20294   if (flag_eliminate_dwarf2_dups && dwarf_version < 4)
20295     /* Record the end of the file for break_out_includes.  */
20296     new_die (DW_TAG_GNU_EINCL, comp_unit_die, NULL);
20297
20298   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
20299     {
20300       switch_to_section (debug_macinfo_section);
20301       dw2_asm_output_data (1, DW_MACINFO_end_file, "End file");
20302     }
20303 }
20304
20305 /* Called from debug_define in toplev.c.  The `buffer' parameter contains
20306    the tail part of the directive line, i.e. the part which is past the
20307    initial whitespace, #, whitespace, directive-name, whitespace part.  */
20308
20309 static void
20310 dwarf2out_define (unsigned int lineno ATTRIBUTE_UNUSED,
20311                   const char *buffer ATTRIBUTE_UNUSED)
20312 {
20313   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
20314     {
20315       switch_to_section (debug_macinfo_section);
20316       dw2_asm_output_data (1, DW_MACINFO_define, "Define macro");
20317       dw2_asm_output_data_uleb128 (lineno, "At line number %d", lineno);
20318       dw2_asm_output_nstring (buffer, -1, "The macro");
20319     }
20320 }
20321
20322 /* Called from debug_undef in toplev.c.  The `buffer' parameter contains
20323    the tail part of the directive line, i.e. the part which is past the
20324    initial whitespace, #, whitespace, directive-name, whitespace part.  */
20325
20326 static void
20327 dwarf2out_undef (unsigned int lineno ATTRIBUTE_UNUSED,
20328                  const char *buffer ATTRIBUTE_UNUSED)
20329 {
20330   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
20331     {
20332       switch_to_section (debug_macinfo_section);
20333       dw2_asm_output_data (1, DW_MACINFO_undef, "Undefine macro");
20334       dw2_asm_output_data_uleb128 (lineno, "At line number %d", lineno);
20335       dw2_asm_output_nstring (buffer, -1, "The macro");
20336     }
20337 }
20338
20339 /* Set up for Dwarf output at the start of compilation.  */
20340
20341 static void
20342 dwarf2out_init (const char *filename ATTRIBUTE_UNUSED)
20343 {
20344   /* Allocate the file_table.  */
20345   file_table = htab_create_ggc (50, file_table_hash,
20346                                 file_table_eq, NULL);
20347
20348   /* Allocate the decl_die_table.  */
20349   decl_die_table = htab_create_ggc (10, decl_die_table_hash,
20350                                     decl_die_table_eq, NULL);
20351
20352   /* Allocate the decl_loc_table.  */
20353   decl_loc_table = htab_create_ggc (10, decl_loc_table_hash,
20354                                     decl_loc_table_eq, NULL);
20355
20356   /* Allocate the initial hunk of the decl_scope_table.  */
20357   decl_scope_table = VEC_alloc (tree, gc, 256);
20358
20359   /* Allocate the initial hunk of the abbrev_die_table.  */
20360   abbrev_die_table = GGC_CNEWVEC (dw_die_ref, ABBREV_DIE_TABLE_INCREMENT);
20361   abbrev_die_table_allocated = ABBREV_DIE_TABLE_INCREMENT;
20362   /* Zero-th entry is allocated, but unused.  */
20363   abbrev_die_table_in_use = 1;
20364
20365   /* Allocate the initial hunk of the line_info_table.  */
20366   line_info_table = GGC_CNEWVEC (dw_line_info_entry, LINE_INFO_TABLE_INCREMENT);
20367   line_info_table_allocated = LINE_INFO_TABLE_INCREMENT;
20368
20369   /* Zero-th entry is allocated, but unused.  */
20370   line_info_table_in_use = 1;
20371
20372   /* Allocate the pubtypes and pubnames vectors.  */
20373   pubname_table = VEC_alloc (pubname_entry, gc, 32);
20374   pubtype_table = VEC_alloc (pubname_entry, gc, 32);
20375
20376   /* Allocate the table that maps insn UIDs to vtable slot indexes.  */
20377   vcall_insn_table = htab_create_ggc (10, vcall_insn_table_hash,
20378                                       vcall_insn_table_eq, NULL);
20379
20380   /* Generate the initial DIE for the .debug section.  Note that the (string)
20381      value given in the DW_AT_name attribute of the DW_TAG_compile_unit DIE
20382      will (typically) be a relative pathname and that this pathname should be
20383      taken as being relative to the directory from which the compiler was
20384      invoked when the given (base) source file was compiled.  We will fill
20385      in this value in dwarf2out_finish.  */
20386   comp_unit_die = gen_compile_unit_die (NULL);
20387
20388   incomplete_types = VEC_alloc (tree, gc, 64);
20389
20390   used_rtx_array = VEC_alloc (rtx, gc, 32);
20391
20392   debug_info_section = get_section (DEBUG_INFO_SECTION,
20393                                     SECTION_DEBUG, NULL);
20394   debug_abbrev_section = get_section (DEBUG_ABBREV_SECTION,
20395                                       SECTION_DEBUG, NULL);
20396   debug_aranges_section = get_section (DEBUG_ARANGES_SECTION,
20397                                        SECTION_DEBUG, NULL);
20398   debug_macinfo_section = get_section (DEBUG_MACINFO_SECTION,
20399                                        SECTION_DEBUG, NULL);
20400   debug_line_section = get_section (DEBUG_LINE_SECTION,
20401                                     SECTION_DEBUG, NULL);
20402   debug_loc_section = get_section (DEBUG_LOC_SECTION,
20403                                    SECTION_DEBUG, NULL);
20404   debug_pubnames_section = get_section (DEBUG_PUBNAMES_SECTION,
20405                                         SECTION_DEBUG, NULL);
20406   debug_pubtypes_section = get_section (DEBUG_PUBTYPES_SECTION,
20407                                         SECTION_DEBUG, NULL);
20408   debug_dcall_section = get_section (DEBUG_DCALL_SECTION,
20409                                      SECTION_DEBUG, NULL);
20410   debug_vcall_section = get_section (DEBUG_VCALL_SECTION,
20411                                      SECTION_DEBUG, NULL);
20412   debug_str_section = get_section (DEBUG_STR_SECTION,
20413                                    DEBUG_STR_SECTION_FLAGS, NULL);
20414   debug_ranges_section = get_section (DEBUG_RANGES_SECTION,
20415                                       SECTION_DEBUG, NULL);
20416   debug_frame_section = get_section (DEBUG_FRAME_SECTION,
20417                                      SECTION_DEBUG, NULL);
20418
20419   ASM_GENERATE_INTERNAL_LABEL (text_end_label, TEXT_END_LABEL, 0);
20420   ASM_GENERATE_INTERNAL_LABEL (abbrev_section_label,
20421                                DEBUG_ABBREV_SECTION_LABEL, 0);
20422   ASM_GENERATE_INTERNAL_LABEL (text_section_label, TEXT_SECTION_LABEL, 0);
20423   ASM_GENERATE_INTERNAL_LABEL (cold_text_section_label,
20424                                COLD_TEXT_SECTION_LABEL, 0);
20425   ASM_GENERATE_INTERNAL_LABEL (cold_end_label, COLD_END_LABEL, 0);
20426
20427   ASM_GENERATE_INTERNAL_LABEL (debug_info_section_label,
20428                                DEBUG_INFO_SECTION_LABEL, 0);
20429   ASM_GENERATE_INTERNAL_LABEL (debug_line_section_label,
20430                                DEBUG_LINE_SECTION_LABEL, 0);
20431   ASM_GENERATE_INTERNAL_LABEL (ranges_section_label,
20432                                DEBUG_RANGES_SECTION_LABEL, 0);
20433   switch_to_section (debug_abbrev_section);
20434   ASM_OUTPUT_LABEL (asm_out_file, abbrev_section_label);
20435   switch_to_section (debug_info_section);
20436   ASM_OUTPUT_LABEL (asm_out_file, debug_info_section_label);
20437   switch_to_section (debug_line_section);
20438   ASM_OUTPUT_LABEL (asm_out_file, debug_line_section_label);
20439
20440   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
20441     {
20442       switch_to_section (debug_macinfo_section);
20443       ASM_GENERATE_INTERNAL_LABEL (macinfo_section_label,
20444                                    DEBUG_MACINFO_SECTION_LABEL, 0);
20445       ASM_OUTPUT_LABEL (asm_out_file, macinfo_section_label);
20446     }
20447
20448   switch_to_section (text_section);
20449   ASM_OUTPUT_LABEL (asm_out_file, text_section_label);
20450   if (flag_reorder_blocks_and_partition)
20451     {
20452       cold_text_section = unlikely_text_section ();
20453       switch_to_section (cold_text_section);
20454       ASM_OUTPUT_LABEL (asm_out_file, cold_text_section_label);
20455     }
20456
20457 }
20458
20459 /* Called before cgraph_optimize starts outputtting functions, variables
20460    and toplevel asms into assembly.  */
20461
20462 static void
20463 dwarf2out_assembly_start (void)
20464 {
20465   if (HAVE_GAS_CFI_SECTIONS_DIRECTIVE && dwarf2out_do_cfi_asm ())
20466     {
20467 #ifndef TARGET_UNWIND_INFO
20468       if (USING_SJLJ_EXCEPTIONS || (!flag_unwind_tables && !flag_exceptions))
20469 #endif
20470         fprintf (asm_out_file, "\t.cfi_sections\t.debug_frame\n");
20471     }
20472 }
20473
20474 /* A helper function for dwarf2out_finish called through
20475    htab_traverse.  Emit one queued .debug_str string.  */
20476
20477 static int
20478 output_indirect_string (void **h, void *v ATTRIBUTE_UNUSED)
20479 {
20480   struct indirect_string_node *node = (struct indirect_string_node *) *h;
20481
20482   if (node->label && node->refcount)
20483     {
20484       switch_to_section (debug_str_section);
20485       ASM_OUTPUT_LABEL (asm_out_file, node->label);
20486       assemble_string (node->str, strlen (node->str) + 1);
20487     }
20488
20489   return 1;
20490 }
20491
20492 #if ENABLE_ASSERT_CHECKING
20493 /* Verify that all marks are clear.  */
20494
20495 static void
20496 verify_marks_clear (dw_die_ref die)
20497 {
20498   dw_die_ref c;
20499
20500   gcc_assert (! die->die_mark);
20501   FOR_EACH_CHILD (die, c, verify_marks_clear (c));
20502 }
20503 #endif /* ENABLE_ASSERT_CHECKING */
20504
20505 /* Clear the marks for a die and its children.
20506    Be cool if the mark isn't set.  */
20507
20508 static void
20509 prune_unmark_dies (dw_die_ref die)
20510 {
20511   dw_die_ref c;
20512
20513   if (die->die_mark)
20514     die->die_mark = 0;
20515   FOR_EACH_CHILD (die, c, prune_unmark_dies (c));
20516 }
20517
20518 /* Given DIE that we're marking as used, find any other dies
20519    it references as attributes and mark them as used.  */
20520
20521 static void
20522 prune_unused_types_walk_attribs (dw_die_ref die)
20523 {
20524   dw_attr_ref a;
20525   unsigned ix;
20526
20527   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
20528     {
20529       if (a->dw_attr_val.val_class == dw_val_class_die_ref)
20530         {
20531           /* A reference to another DIE.
20532              Make sure that it will get emitted.
20533              If it was broken out into a comdat group, don't follow it.  */
20534           if (dwarf_version < 4
20535               || a->dw_attr == DW_AT_specification
20536               || a->dw_attr_val.v.val_die_ref.die->die_id.die_type_node == NULL)
20537             prune_unused_types_mark (a->dw_attr_val.v.val_die_ref.die, 1);
20538         }
20539       /* Set the string's refcount to 0 so that prune_unused_types_mark
20540          accounts properly for it.  */
20541       if (AT_class (a) == dw_val_class_str)
20542         a->dw_attr_val.v.val_str->refcount = 0;
20543     }
20544 }
20545
20546
20547 /* Mark DIE as being used.  If DOKIDS is true, then walk down
20548    to DIE's children.  */
20549
20550 static void
20551 prune_unused_types_mark (dw_die_ref die, int dokids)
20552 {
20553   dw_die_ref c;
20554
20555   if (die->die_mark == 0)
20556     {
20557       /* We haven't done this node yet.  Mark it as used.  */
20558       die->die_mark = 1;
20559
20560       /* We also have to mark its parents as used.
20561          (But we don't want to mark our parents' kids due to this.)  */
20562       if (die->die_parent)
20563         prune_unused_types_mark (die->die_parent, 0);
20564
20565       /* Mark any referenced nodes.  */
20566       prune_unused_types_walk_attribs (die);
20567
20568       /* If this node is a specification,
20569          also mark the definition, if it exists.  */
20570       if (get_AT_flag (die, DW_AT_declaration) && die->die_definition)
20571         prune_unused_types_mark (die->die_definition, 1);
20572     }
20573
20574   if (dokids && die->die_mark != 2)
20575     {
20576       /* We need to walk the children, but haven't done so yet.
20577          Remember that we've walked the kids.  */
20578       die->die_mark = 2;
20579
20580       /* If this is an array type, we need to make sure our
20581          kids get marked, even if they're types.  If we're
20582          breaking out types into comdat sections, do this
20583          for all type definitions.  */
20584       if (die->die_tag == DW_TAG_array_type
20585           || (dwarf_version >= 4
20586               && is_type_die (die) && ! is_declaration_die (die)))
20587         FOR_EACH_CHILD (die, c, prune_unused_types_mark (c, 1));
20588       else
20589         FOR_EACH_CHILD (die, c, prune_unused_types_walk (c));
20590     }
20591 }
20592
20593 /* For local classes, look if any static member functions were emitted
20594    and if so, mark them.  */
20595
20596 static void
20597 prune_unused_types_walk_local_classes (dw_die_ref die)
20598 {
20599   dw_die_ref c;
20600
20601   if (die->die_mark == 2)
20602     return;
20603
20604   switch (die->die_tag)
20605     {
20606     case DW_TAG_structure_type:
20607     case DW_TAG_union_type:
20608     case DW_TAG_class_type:
20609       break;
20610
20611     case DW_TAG_subprogram:
20612       if (!get_AT_flag (die, DW_AT_declaration)
20613           || die->die_definition != NULL)
20614         prune_unused_types_mark (die, 1);
20615       return;
20616
20617     default:
20618       return;
20619     }
20620
20621   /* Mark children.  */
20622   FOR_EACH_CHILD (die, c, prune_unused_types_walk_local_classes (c));
20623 }
20624
20625 /* Walk the tree DIE and mark types that we actually use.  */
20626
20627 static void
20628 prune_unused_types_walk (dw_die_ref die)
20629 {
20630   dw_die_ref c;
20631
20632   /* Don't do anything if this node is already marked and
20633      children have been marked as well.  */
20634   if (die->die_mark == 2)
20635     return;
20636
20637   switch (die->die_tag)
20638     {
20639     case DW_TAG_structure_type:
20640     case DW_TAG_union_type:
20641     case DW_TAG_class_type:
20642       if (die->die_perennial_p)
20643         break;
20644
20645       for (c = die->die_parent; c; c = c->die_parent)
20646         if (c->die_tag == DW_TAG_subprogram)
20647           break;
20648
20649       /* Finding used static member functions inside of classes
20650          is needed just for local classes, because for other classes
20651          static member function DIEs with DW_AT_specification
20652          are emitted outside of the DW_TAG_*_type.  If we ever change
20653          it, we'd need to call this even for non-local classes.  */
20654       if (c)
20655         prune_unused_types_walk_local_classes (die);
20656
20657       /* It's a type node --- don't mark it.  */
20658       return;
20659
20660     case DW_TAG_const_type:
20661     case DW_TAG_packed_type:
20662     case DW_TAG_pointer_type:
20663     case DW_TAG_reference_type:
20664     case DW_TAG_volatile_type:
20665     case DW_TAG_typedef:
20666     case DW_TAG_array_type:
20667     case DW_TAG_interface_type:
20668     case DW_TAG_friend:
20669     case DW_TAG_variant_part:
20670     case DW_TAG_enumeration_type:
20671     case DW_TAG_subroutine_type:
20672     case DW_TAG_string_type:
20673     case DW_TAG_set_type:
20674     case DW_TAG_subrange_type:
20675     case DW_TAG_ptr_to_member_type:
20676     case DW_TAG_file_type:
20677       if (die->die_perennial_p)
20678         break;
20679
20680       /* It's a type node --- don't mark it.  */
20681       return;
20682
20683     default:
20684       /* Mark everything else.  */
20685       break;
20686   }
20687
20688   if (die->die_mark == 0)
20689     {
20690       die->die_mark = 1;
20691
20692       /* Now, mark any dies referenced from here.  */
20693       prune_unused_types_walk_attribs (die);
20694     }
20695
20696   die->die_mark = 2;
20697
20698   /* Mark children.  */
20699   FOR_EACH_CHILD (die, c, prune_unused_types_walk (c));
20700 }
20701
20702 /* Increment the string counts on strings referred to from DIE's
20703    attributes.  */
20704
20705 static void
20706 prune_unused_types_update_strings (dw_die_ref die)
20707 {
20708   dw_attr_ref a;
20709   unsigned ix;
20710
20711   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
20712     if (AT_class (a) == dw_val_class_str)
20713       {
20714         struct indirect_string_node *s = a->dw_attr_val.v.val_str;
20715         s->refcount++;
20716         /* Avoid unnecessarily putting strings that are used less than
20717            twice in the hash table.  */
20718         if (s->refcount
20719             == ((DEBUG_STR_SECTION_FLAGS & SECTION_MERGE) ? 1 : 2))
20720           {
20721             void ** slot;
20722             slot = htab_find_slot_with_hash (debug_str_hash, s->str,
20723                                              htab_hash_string (s->str),
20724                                              INSERT);
20725             gcc_assert (*slot == NULL);
20726             *slot = s;
20727           }
20728       }
20729 }
20730
20731 /* Remove from the tree DIE any dies that aren't marked.  */
20732
20733 static void
20734 prune_unused_types_prune (dw_die_ref die)
20735 {
20736   dw_die_ref c;
20737
20738   gcc_assert (die->die_mark);
20739   prune_unused_types_update_strings (die);
20740
20741   if (! die->die_child)
20742     return;
20743
20744   c = die->die_child;
20745   do {
20746     dw_die_ref prev = c;
20747     for (c = c->die_sib; ! c->die_mark; c = c->die_sib)
20748       if (c == die->die_child)
20749         {
20750           /* No marked children between 'prev' and the end of the list.  */
20751           if (prev == c)
20752             /* No marked children at all.  */
20753             die->die_child = NULL;
20754           else
20755             {
20756               prev->die_sib = c->die_sib;
20757               die->die_child = prev;
20758             }
20759           return;
20760         }
20761
20762     if (c != prev->die_sib)
20763       prev->die_sib = c;
20764     prune_unused_types_prune (c);
20765   } while (c != die->die_child);
20766 }
20767
20768 /* A helper function for dwarf2out_finish called through
20769    htab_traverse.  Clear .debug_str strings that we haven't already
20770    decided to emit.  */
20771
20772 static int
20773 prune_indirect_string (void **h, void *v ATTRIBUTE_UNUSED)
20774 {
20775   struct indirect_string_node *node = (struct indirect_string_node *) *h;
20776
20777   if (!node->label || !node->refcount)
20778     htab_clear_slot (debug_str_hash, h);
20779
20780   return 1;
20781 }
20782
20783 /* Remove dies representing declarations that we never use.  */
20784
20785 static void
20786 prune_unused_types (void)
20787 {
20788   unsigned int i;
20789   limbo_die_node *node;
20790   comdat_type_node *ctnode;
20791   pubname_ref pub;
20792   dcall_entry *dcall;
20793
20794 #if ENABLE_ASSERT_CHECKING
20795   /* All the marks should already be clear.  */
20796   verify_marks_clear (comp_unit_die);
20797   for (node = limbo_die_list; node; node = node->next)
20798     verify_marks_clear (node->die);
20799   for (ctnode = comdat_type_list; ctnode; ctnode = ctnode->next)
20800     verify_marks_clear (ctnode->root_die);
20801 #endif /* ENABLE_ASSERT_CHECKING */
20802
20803   /* Mark types that are used in global variables.  */
20804   premark_types_used_by_global_vars ();
20805
20806   /* Set the mark on nodes that are actually used.  */
20807   prune_unused_types_walk (comp_unit_die);
20808   for (node = limbo_die_list; node; node = node->next)
20809     prune_unused_types_walk (node->die);
20810   for (ctnode = comdat_type_list; ctnode; ctnode = ctnode->next)
20811     {
20812       prune_unused_types_walk (ctnode->root_die);
20813       prune_unused_types_mark (ctnode->type_die, 1);
20814     }
20815
20816   /* Also set the mark on nodes referenced from the
20817      pubname_table or arange_table.  */
20818   for (i = 0; VEC_iterate (pubname_entry, pubname_table, i, pub); i++)
20819     prune_unused_types_mark (pub->die, 1);
20820   for (i = 0; i < arange_table_in_use; i++)
20821     prune_unused_types_mark (arange_table[i], 1);
20822
20823   /* Mark nodes referenced from the direct call table.  */
20824   for (i = 0; VEC_iterate (dcall_entry, dcall_table, i, dcall); i++)
20825     prune_unused_types_mark (dcall->targ_die, 1);
20826
20827   /* Get rid of nodes that aren't marked; and update the string counts.  */
20828   if (debug_str_hash && debug_str_hash_forced)
20829     htab_traverse (debug_str_hash, prune_indirect_string, NULL);
20830   else if (debug_str_hash)
20831     htab_empty (debug_str_hash);
20832   prune_unused_types_prune (comp_unit_die);
20833   for (node = limbo_die_list; node; node = node->next)
20834     prune_unused_types_prune (node->die);
20835   for (ctnode = comdat_type_list; ctnode; ctnode = ctnode->next)
20836     prune_unused_types_prune (ctnode->root_die);
20837
20838   /* Leave the marks clear.  */
20839   prune_unmark_dies (comp_unit_die);
20840   for (node = limbo_die_list; node; node = node->next)
20841     prune_unmark_dies (node->die);
20842   for (ctnode = comdat_type_list; ctnode; ctnode = ctnode->next)
20843     prune_unmark_dies (ctnode->root_die);
20844 }
20845
20846 /* Set the parameter to true if there are any relative pathnames in
20847    the file table.  */
20848 static int
20849 file_table_relative_p (void ** slot, void *param)
20850 {
20851   bool *p = (bool *) param;
20852   struct dwarf_file_data *d = (struct dwarf_file_data *) *slot;
20853   if (!IS_ABSOLUTE_PATH (d->filename))
20854     {
20855       *p = true;
20856       return 0;
20857     }
20858   return 1;
20859 }
20860
20861 /* Routines to manipulate hash table of comdat type units.  */
20862
20863 static hashval_t
20864 htab_ct_hash (const void *of)
20865 {
20866   hashval_t h;
20867   const comdat_type_node *const type_node = (const comdat_type_node *) of;
20868
20869   memcpy (&h, type_node->signature, sizeof (h));
20870   return h;
20871 }
20872
20873 static int
20874 htab_ct_eq (const void *of1, const void *of2)
20875 {
20876   const comdat_type_node *const type_node_1 = (const comdat_type_node *) of1;
20877   const comdat_type_node *const type_node_2 = (const comdat_type_node *) of2;
20878
20879   return (! memcmp (type_node_1->signature, type_node_2->signature,
20880                     DWARF_TYPE_SIGNATURE_SIZE));
20881 }
20882
20883 /* Move a DW_AT_MIPS_linkage_name attribute just added to dw_die_ref
20884    to the location it would have been added, should we know its
20885    DECL_ASSEMBLER_NAME when we added other attributes.  This will
20886    probably improve compactness of debug info, removing equivalent
20887    abbrevs, and hide any differences caused by deferring the
20888    computation of the assembler name, triggered by e.g. PCH.  */
20889
20890 static inline void
20891 move_linkage_attr (dw_die_ref die)
20892 {
20893   unsigned ix = VEC_length (dw_attr_node, die->die_attr);
20894   dw_attr_node linkage = *VEC_index (dw_attr_node, die->die_attr, ix - 1);
20895
20896   gcc_assert (linkage.dw_attr == DW_AT_MIPS_linkage_name);
20897
20898   while (--ix > 0)
20899     {
20900       dw_attr_node *prev = VEC_index (dw_attr_node, die->die_attr, ix - 1);
20901
20902       if (prev->dw_attr == DW_AT_decl_line || prev->dw_attr == DW_AT_name)
20903         break;
20904     }
20905
20906   if (ix != VEC_length (dw_attr_node, die->die_attr) - 1)
20907     {
20908       VEC_pop (dw_attr_node, die->die_attr);
20909       VEC_quick_insert (dw_attr_node, die->die_attr, ix, &linkage);
20910     }
20911 }
20912
20913 /* Helper function for resolve_addr, attempt to resolve
20914    one CONST_STRING, return non-zero if not successful.  Similarly verify that
20915    SYMBOL_REFs refer to variables emitted in the current CU.  */
20916
20917 static int
20918 resolve_one_addr (rtx *addr, void *data ATTRIBUTE_UNUSED)
20919 {
20920   rtx rtl = *addr;
20921
20922   if (GET_CODE (rtl) == CONST_STRING)
20923     {
20924       size_t len = strlen (XSTR (rtl, 0)) + 1;
20925       tree t = build_string (len, XSTR (rtl, 0));
20926       tree tlen = build_int_cst (NULL_TREE, len - 1);
20927       TREE_TYPE (t)
20928         = build_array_type (char_type_node, build_index_type (tlen));
20929       rtl = lookup_constant_def (t);
20930       if (!rtl || !MEM_P (rtl))
20931         return 1;
20932       rtl = XEXP (rtl, 0);
20933       VEC_safe_push (rtx, gc, used_rtx_array, rtl);
20934       *addr = rtl;
20935       return 0;
20936     }
20937
20938   if (GET_CODE (rtl) == SYMBOL_REF
20939       && SYMBOL_REF_DECL (rtl)
20940       && TREE_CODE (SYMBOL_REF_DECL (rtl)) == VAR_DECL
20941       && !TREE_ASM_WRITTEN (SYMBOL_REF_DECL (rtl)))
20942     return 1;
20943
20944   if (GET_CODE (rtl) == CONST
20945       && for_each_rtx (&XEXP (rtl, 0), resolve_one_addr, NULL))
20946     return 1;
20947
20948   return 0;
20949 }
20950
20951 /* Helper function for resolve_addr, handle one location
20952    expression, return false if at least one CONST_STRING or SYMBOL_REF in
20953    the location list couldn't be resolved.  */
20954
20955 static bool
20956 resolve_addr_in_expr (dw_loc_descr_ref loc)
20957 {
20958   for (; loc; loc = loc->dw_loc_next)
20959     if ((loc->dw_loc_opc == DW_OP_addr
20960          && resolve_one_addr (&loc->dw_loc_oprnd1.v.val_addr, NULL))
20961         || (loc->dw_loc_opc == DW_OP_implicit_value
20962             && loc->dw_loc_oprnd2.val_class == dw_val_class_addr
20963             && resolve_one_addr (&loc->dw_loc_oprnd2.v.val_addr, NULL)))
20964       return false;
20965   return true;
20966 }
20967
20968 /* Resolve DW_OP_addr and DW_AT_const_value CONST_STRING arguments to
20969    an address in .rodata section if the string literal is emitted there,
20970    or remove the containing location list or replace DW_AT_const_value
20971    with DW_AT_location and empty location expression, if it isn't found
20972    in .rodata.  Similarly for SYMBOL_REFs, keep only those that refer
20973    to something that has been emitted in the current CU.  */
20974
20975 static void
20976 resolve_addr (dw_die_ref die)
20977 {
20978   dw_die_ref c;
20979   dw_attr_ref a;
20980   dw_loc_list_ref curr;
20981   unsigned ix;
20982
20983   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
20984     switch (AT_class (a))
20985       {
20986       case dw_val_class_loc_list:
20987         for (curr = AT_loc_list (a); curr != NULL; curr = curr->dw_loc_next)
20988           if (!resolve_addr_in_expr (curr->expr))
20989             curr->expr = NULL;
20990         break;
20991       case dw_val_class_loc:
20992         if (!resolve_addr_in_expr (AT_loc (a)))
20993           a->dw_attr_val.v.val_loc = NULL;
20994         break;
20995       case dw_val_class_addr:
20996         if (a->dw_attr == DW_AT_const_value
20997             && resolve_one_addr (&a->dw_attr_val.v.val_addr, NULL))
20998           {
20999             a->dw_attr = DW_AT_location;
21000             a->dw_attr_val.val_class = dw_val_class_loc;
21001             a->dw_attr_val.v.val_loc = NULL;
21002           }
21003         break;
21004       default:
21005         break;
21006       }
21007
21008   FOR_EACH_CHILD (die, c, resolve_addr (c));
21009 }
21010
21011 /* Output stuff that dwarf requires at the end of every file,
21012    and generate the DWARF-2 debugging info.  */
21013
21014 static void
21015 dwarf2out_finish (const char *filename)
21016 {
21017   limbo_die_node *node, *next_node;
21018   comdat_type_node *ctnode;
21019   htab_t comdat_type_table;
21020   dw_die_ref die = 0;
21021   unsigned int i;
21022
21023   gen_remaining_tmpl_value_param_die_attribute ();
21024
21025   /* Add the name for the main input file now.  We delayed this from
21026      dwarf2out_init to avoid complications with PCH.  */
21027   add_name_attribute (comp_unit_die, remap_debug_filename (filename));
21028   if (!IS_ABSOLUTE_PATH (filename))
21029     add_comp_dir_attribute (comp_unit_die);
21030   else if (get_AT (comp_unit_die, DW_AT_comp_dir) == NULL)
21031     {
21032       bool p = false;
21033       htab_traverse (file_table, file_table_relative_p, &p);
21034       if (p)
21035         add_comp_dir_attribute (comp_unit_die);
21036     }
21037
21038   for (i = 0; i < VEC_length (deferred_locations, deferred_locations_list); i++)
21039     {
21040       add_location_or_const_value_attribute (
21041         VEC_index (deferred_locations, deferred_locations_list, i)->die,
21042         VEC_index (deferred_locations, deferred_locations_list, i)->variable,
21043         DW_AT_location);
21044     }
21045
21046   /* Traverse the limbo die list, and add parent/child links.  The only
21047      dies without parents that should be here are concrete instances of
21048      inline functions, and the comp_unit_die.  We can ignore the comp_unit_die.
21049      For concrete instances, we can get the parent die from the abstract
21050      instance.  */
21051   for (node = limbo_die_list; node; node = next_node)
21052     {
21053       next_node = node->next;
21054       die = node->die;
21055
21056       if (die->die_parent == NULL)
21057         {
21058           dw_die_ref origin = get_AT_ref (die, DW_AT_abstract_origin);
21059
21060           if (origin)
21061             add_child_die (origin->die_parent, die);
21062           else if (die == comp_unit_die)
21063             ;
21064           else if (errorcount > 0 || sorrycount > 0)
21065             /* It's OK to be confused by errors in the input.  */
21066             add_child_die (comp_unit_die, die);
21067           else
21068             {
21069               /* In certain situations, the lexical block containing a
21070                  nested function can be optimized away, which results
21071                  in the nested function die being orphaned.  Likewise
21072                  with the return type of that nested function.  Force
21073                  this to be a child of the containing function.
21074
21075                  It may happen that even the containing function got fully
21076                  inlined and optimized out.  In that case we are lost and
21077                  assign the empty child.  This should not be big issue as
21078                  the function is likely unreachable too.  */
21079               tree context = NULL_TREE;
21080
21081               gcc_assert (node->created_for);
21082
21083               if (DECL_P (node->created_for))
21084                 context = DECL_CONTEXT (node->created_for);
21085               else if (TYPE_P (node->created_for))
21086                 context = TYPE_CONTEXT (node->created_for);
21087
21088               gcc_assert (context
21089                           && (TREE_CODE (context) == FUNCTION_DECL
21090                               || TREE_CODE (context) == NAMESPACE_DECL));
21091
21092               origin = lookup_decl_die (context);
21093               if (origin)
21094                 add_child_die (origin, die);
21095               else
21096                 add_child_die (comp_unit_die, die);
21097             }
21098         }
21099     }
21100
21101   limbo_die_list = NULL;
21102
21103   resolve_addr (comp_unit_die);
21104
21105   for (node = deferred_asm_name; node; node = node->next)
21106     {
21107       tree decl = node->created_for;
21108       if (DECL_ASSEMBLER_NAME (decl) != DECL_NAME (decl))
21109         {
21110           add_AT_string (node->die, DW_AT_MIPS_linkage_name,
21111                          IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl)));
21112           move_linkage_attr (node->die);
21113         }
21114     }
21115
21116   deferred_asm_name = NULL;
21117
21118   /* Walk through the list of incomplete types again, trying once more to
21119      emit full debugging info for them.  */
21120   retry_incomplete_types ();
21121
21122   if (flag_eliminate_unused_debug_types)
21123     prune_unused_types ();
21124
21125   /* Generate separate CUs for each of the include files we've seen.
21126      They will go into limbo_die_list.  */
21127   if (flag_eliminate_dwarf2_dups && dwarf_version < 4)
21128     break_out_includes (comp_unit_die);
21129
21130   /* Generate separate COMDAT sections for type DIEs. */
21131   if (dwarf_version >= 4)
21132     {
21133       break_out_comdat_types (comp_unit_die);
21134
21135       /* Each new type_unit DIE was added to the limbo die list when created.
21136          Since these have all been added to comdat_type_list, clear the
21137          limbo die list.  */
21138       limbo_die_list = NULL;
21139
21140       /* For each new comdat type unit, copy declarations for incomplete
21141          types to make the new unit self-contained (i.e., no direct
21142          references to the main compile unit).  */
21143       for (ctnode = comdat_type_list; ctnode != NULL; ctnode = ctnode->next)
21144         copy_decls_for_unworthy_types (ctnode->root_die);
21145       copy_decls_for_unworthy_types (comp_unit_die);
21146
21147       /* In the process of copying declarations from one unit to another,
21148          we may have left some declarations behind that are no longer
21149          referenced.  Prune them.  */
21150       prune_unused_types ();
21151     }
21152
21153   /* Traverse the DIE's and add add sibling attributes to those DIE's
21154      that have children.  */
21155   add_sibling_attributes (comp_unit_die);
21156   for (node = limbo_die_list; node; node = node->next)
21157     add_sibling_attributes (node->die);
21158   for (ctnode = comdat_type_list; ctnode != NULL; ctnode = ctnode->next)
21159     add_sibling_attributes (ctnode->root_die);
21160
21161   /* Output a terminator label for the .text section.  */
21162   switch_to_section (text_section);
21163   targetm.asm_out.internal_label (asm_out_file, TEXT_END_LABEL, 0);
21164   if (flag_reorder_blocks_and_partition)
21165     {
21166       switch_to_section (unlikely_text_section ());
21167       targetm.asm_out.internal_label (asm_out_file, COLD_END_LABEL, 0);
21168     }
21169
21170   /* We can only use the low/high_pc attributes if all of the code was
21171      in .text.  */
21172   if (!have_multiple_function_sections
21173       || !(dwarf_version >= 3 || !dwarf_strict))
21174     {
21175       add_AT_lbl_id (comp_unit_die, DW_AT_low_pc, text_section_label);
21176       add_AT_lbl_id (comp_unit_die, DW_AT_high_pc, text_end_label);
21177     }
21178
21179   else
21180     {
21181       unsigned fde_idx = 0;
21182
21183       /* We need to give .debug_loc and .debug_ranges an appropriate
21184          "base address".  Use zero so that these addresses become
21185          absolute.  Historically, we've emitted the unexpected
21186          DW_AT_entry_pc instead of DW_AT_low_pc for this purpose.
21187          Emit both to give time for other tools to adapt.  */
21188       add_AT_addr (comp_unit_die, DW_AT_low_pc, const0_rtx);
21189       add_AT_addr (comp_unit_die, DW_AT_entry_pc, const0_rtx);
21190
21191       add_AT_range_list (comp_unit_die, DW_AT_ranges,
21192                          add_ranges_by_labels (text_section_label,
21193                                                text_end_label));
21194       if (flag_reorder_blocks_and_partition)
21195         add_ranges_by_labels (cold_text_section_label,
21196                               cold_end_label);
21197
21198       for (fde_idx = 0; fde_idx < fde_table_in_use; fde_idx++)
21199         {
21200           dw_fde_ref fde = &fde_table[fde_idx];
21201
21202           if (fde->dw_fde_switched_sections)
21203             {
21204               if (!fde->in_std_section)
21205                 add_ranges_by_labels (fde->dw_fde_hot_section_label,
21206                                       fde->dw_fde_hot_section_end_label);
21207               if (!fde->cold_in_std_section)
21208                 add_ranges_by_labels (fde->dw_fde_unlikely_section_label,
21209                                       fde->dw_fde_unlikely_section_end_label);
21210             }
21211           else if (!fde->in_std_section)
21212             add_ranges_by_labels (fde->dw_fde_begin,
21213                                   fde->dw_fde_end);
21214         }
21215
21216       add_ranges (NULL);
21217     }
21218
21219   /* Output location list section if necessary.  */
21220   if (have_location_lists)
21221     {
21222       /* Output the location lists info.  */
21223       switch_to_section (debug_loc_section);
21224       ASM_GENERATE_INTERNAL_LABEL (loc_section_label,
21225                                    DEBUG_LOC_SECTION_LABEL, 0);
21226       ASM_OUTPUT_LABEL (asm_out_file, loc_section_label);
21227       output_location_lists (die);
21228     }
21229
21230   if (debug_info_level >= DINFO_LEVEL_NORMAL)
21231     add_AT_lineptr (comp_unit_die, DW_AT_stmt_list,
21232                     debug_line_section_label);
21233
21234   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
21235     add_AT_macptr (comp_unit_die, DW_AT_macro_info, macinfo_section_label);
21236
21237   /* Output all of the compilation units.  We put the main one last so that
21238      the offsets are available to output_pubnames.  */
21239   for (node = limbo_die_list; node; node = node->next)
21240     output_comp_unit (node->die, 0);
21241
21242   comdat_type_table = htab_create (100, htab_ct_hash, htab_ct_eq, NULL);
21243   for (ctnode = comdat_type_list; ctnode != NULL; ctnode = ctnode->next)
21244     {
21245       void **slot = htab_find_slot (comdat_type_table, ctnode, INSERT);
21246
21247       /* Don't output duplicate types.  */
21248       if (*slot != HTAB_EMPTY_ENTRY)
21249         continue;
21250
21251       /* Add a pointer to the line table for the main compilation unit
21252          so that the debugger can make sense of DW_AT_decl_file
21253          attributes.  */
21254       if (debug_info_level >= DINFO_LEVEL_NORMAL)
21255         add_AT_lineptr (ctnode->root_die, DW_AT_stmt_list,
21256                         debug_line_section_label);
21257
21258       output_comdat_type_unit (ctnode);
21259       *slot = ctnode;
21260     }
21261   htab_delete (comdat_type_table);
21262
21263   /* Output the main compilation unit if non-empty or if .debug_macinfo
21264      has been emitted.  */
21265   output_comp_unit (comp_unit_die, debug_info_level >= DINFO_LEVEL_VERBOSE);
21266
21267   /* Output the abbreviation table.  */
21268   switch_to_section (debug_abbrev_section);
21269   output_abbrev_section ();
21270
21271   /* Output public names table if necessary.  */
21272   if (!VEC_empty (pubname_entry, pubname_table))
21273     {
21274       switch_to_section (debug_pubnames_section);
21275       output_pubnames (pubname_table);
21276     }
21277
21278   /* Output public types table if necessary.  */
21279   /* ??? Only defined by DWARF3, but emitted by Darwin for DWARF2.
21280      It shouldn't hurt to emit it always, since pure DWARF2 consumers
21281      simply won't look for the section.  */
21282   if (!VEC_empty (pubname_entry, pubtype_table))
21283     {
21284       switch_to_section (debug_pubtypes_section);
21285       output_pubnames (pubtype_table);
21286     }
21287
21288   /* Output direct and virtual call tables if necessary.  */
21289   if (!VEC_empty (dcall_entry, dcall_table))
21290     {
21291       switch_to_section (debug_dcall_section);
21292       output_dcall_table ();
21293     }
21294   if (!VEC_empty (vcall_entry, vcall_table))
21295     {
21296       switch_to_section (debug_vcall_section);
21297       output_vcall_table ();
21298     }
21299
21300   /* Output the address range information.  We only put functions in the arange
21301      table, so don't write it out if we don't have any.  */
21302   if (fde_table_in_use)
21303     {
21304       switch_to_section (debug_aranges_section);
21305       output_aranges ();
21306     }
21307
21308   /* Output ranges section if necessary.  */
21309   if (ranges_table_in_use)
21310     {
21311       switch_to_section (debug_ranges_section);
21312       ASM_OUTPUT_LABEL (asm_out_file, ranges_section_label);
21313       output_ranges ();
21314     }
21315
21316   /* Output the source line correspondence table.  We must do this
21317      even if there is no line information.  Otherwise, on an empty
21318      translation unit, we will generate a present, but empty,
21319      .debug_info section.  IRIX 6.5 `nm' will then complain when
21320      examining the file.  This is done late so that any filenames
21321      used by the debug_info section are marked as 'used'.  */
21322   if (! DWARF2_ASM_LINE_DEBUG_INFO)
21323     {
21324       switch_to_section (debug_line_section);
21325       output_line_info ();
21326     }
21327
21328   /* Have to end the macro section.  */
21329   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
21330     {
21331       switch_to_section (debug_macinfo_section);
21332       dw2_asm_output_data (1, 0, "End compilation unit");
21333     }
21334
21335   /* If we emitted any DW_FORM_strp form attribute, output the string
21336      table too.  */
21337   if (debug_str_hash)
21338     htab_traverse (debug_str_hash, output_indirect_string, NULL);
21339 }
21340 #else
21341
21342 /* This should never be used, but its address is needed for comparisons.  */
21343 const struct gcc_debug_hooks dwarf2_debug_hooks =
21344 {
21345   0,            /* init */
21346   0,            /* finish */
21347   0,            /* assembly_start */
21348   0,            /* define */
21349   0,            /* undef */
21350   0,            /* start_source_file */
21351   0,            /* end_source_file */
21352   0,            /* begin_block */
21353   0,            /* end_block */
21354   0,            /* ignore_block */
21355   0,            /* source_line */
21356   0,            /* begin_prologue */
21357   0,            /* end_prologue */
21358   0,            /* end_epilogue */
21359   0,            /* begin_function */
21360   0,            /* end_function */
21361   0,            /* function_decl */
21362   0,            /* global_decl */
21363   0,            /* type_decl */
21364   0,            /* imported_module_or_decl */
21365   0,            /* deferred_inline_function */
21366   0,            /* outlining_inline_function */
21367   0,            /* label */
21368   0,            /* handle_pch */
21369   0,            /* var_location */
21370   0,            /* switch_text_section */
21371   0,            /* direct_call */
21372   0,            /* virtual_call_token */
21373   0,            /* copy_call_info */
21374   0,            /* virtual_call */
21375   0,            /* set_name */
21376   0             /* start_end_main_source_file */
21377 };
21378
21379 #endif /* DWARF2_DEBUGGING_INFO */
21380
21381 #include "gt-dwarf2out.h"