OSDN Git Service

* doc/tm.texi (TARGET_HANDLE_C_OPTION): Explain arguments.
[pf3gnuchains/gcc-fork.git] / gcc / dwarf2out.c
1 /* Output Dwarf2 format symbol table information from GCC.
2    Copyright (C) 1992, 1993, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
3    2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 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 void add_ranges_by_labels (dw_die_ref, const char *, const char *,
6066                                   bool *);
6067 static void output_ranges (void);
6068 static void output_line_info (void);
6069 static void output_file_names (void);
6070 static dw_die_ref base_type_die (tree);
6071 static int is_base_type (tree);
6072 static dw_die_ref subrange_type_die (tree, tree, tree, dw_die_ref);
6073 static dw_die_ref modified_type_die (tree, int, int, dw_die_ref);
6074 static dw_die_ref generic_parameter_die (tree, tree, bool, dw_die_ref);
6075 static dw_die_ref template_parameter_pack_die (tree, tree, dw_die_ref);
6076 static int type_is_enum (const_tree);
6077 static unsigned int dbx_reg_number (const_rtx);
6078 static void add_loc_descr_op_piece (dw_loc_descr_ref *, int);
6079 static dw_loc_descr_ref reg_loc_descriptor (rtx, enum var_init_status);
6080 static dw_loc_descr_ref one_reg_loc_descriptor (unsigned int,
6081                                                 enum var_init_status);
6082 static dw_loc_descr_ref multiple_reg_loc_descriptor (rtx, rtx,
6083                                                      enum var_init_status);
6084 static dw_loc_descr_ref based_loc_descr (rtx, HOST_WIDE_INT,
6085                                          enum var_init_status);
6086 static int is_based_loc (const_rtx);
6087 static int resolve_one_addr (rtx *, void *);
6088 static dw_loc_descr_ref mem_loc_descriptor (rtx, enum machine_mode mode,
6089                                             enum var_init_status);
6090 static dw_loc_descr_ref concat_loc_descriptor (rtx, rtx,
6091                                                enum var_init_status);
6092 static dw_loc_descr_ref loc_descriptor (rtx, enum machine_mode mode,
6093                                         enum var_init_status);
6094 static dw_loc_list_ref loc_list_from_tree (tree, int);
6095 static dw_loc_descr_ref loc_descriptor_from_tree (tree, int);
6096 static HOST_WIDE_INT ceiling (HOST_WIDE_INT, unsigned int);
6097 static tree field_type (const_tree);
6098 static unsigned int simple_type_align_in_bits (const_tree);
6099 static unsigned int simple_decl_align_in_bits (const_tree);
6100 static unsigned HOST_WIDE_INT simple_type_size_in_bits (const_tree);
6101 static HOST_WIDE_INT field_byte_offset (const_tree);
6102 static void add_AT_location_description (dw_die_ref, enum dwarf_attribute,
6103                                          dw_loc_list_ref);
6104 static void add_data_member_location_attribute (dw_die_ref, tree);
6105 static bool add_const_value_attribute (dw_die_ref, rtx);
6106 static void insert_int (HOST_WIDE_INT, unsigned, unsigned char *);
6107 static void insert_float (const_rtx, unsigned char *);
6108 static rtx rtl_for_decl_location (tree);
6109 static bool add_location_or_const_value_attribute (dw_die_ref, tree,
6110                                                    enum dwarf_attribute);
6111 static bool tree_add_const_value_attribute (dw_die_ref, tree);
6112 static bool tree_add_const_value_attribute_for_decl (dw_die_ref, tree);
6113 static void add_name_attribute (dw_die_ref, const char *);
6114 static void add_comp_dir_attribute (dw_die_ref);
6115 static void add_bound_info (dw_die_ref, enum dwarf_attribute, tree);
6116 static void add_subscript_info (dw_die_ref, tree, bool);
6117 static void add_byte_size_attribute (dw_die_ref, tree);
6118 static void add_bit_offset_attribute (dw_die_ref, tree);
6119 static void add_bit_size_attribute (dw_die_ref, tree);
6120 static void add_prototyped_attribute (dw_die_ref, tree);
6121 static dw_die_ref add_abstract_origin_attribute (dw_die_ref, tree);
6122 static void add_pure_or_virtual_attribute (dw_die_ref, tree);
6123 static void add_src_coords_attributes (dw_die_ref, tree);
6124 static void add_name_and_src_coords_attributes (dw_die_ref, tree);
6125 static void push_decl_scope (tree);
6126 static void pop_decl_scope (void);
6127 static dw_die_ref scope_die_for (tree, dw_die_ref);
6128 static inline int local_scope_p (dw_die_ref);
6129 static inline int class_scope_p (dw_die_ref);
6130 static inline int class_or_namespace_scope_p (dw_die_ref);
6131 static void add_type_attribute (dw_die_ref, tree, int, int, dw_die_ref);
6132 static void add_calling_convention_attribute (dw_die_ref, tree);
6133 static const char *type_tag (const_tree);
6134 static tree member_declared_type (const_tree);
6135 #if 0
6136 static const char *decl_start_label (tree);
6137 #endif
6138 static void gen_array_type_die (tree, dw_die_ref);
6139 static void gen_descr_array_type_die (tree, struct array_descr_info *, dw_die_ref);
6140 #if 0
6141 static void gen_entry_point_die (tree, dw_die_ref);
6142 #endif
6143 static dw_die_ref gen_enumeration_type_die (tree, dw_die_ref);
6144 static dw_die_ref gen_formal_parameter_die (tree, tree, bool, dw_die_ref);
6145 static dw_die_ref gen_formal_parameter_pack_die  (tree, tree, dw_die_ref, tree*);
6146 static void gen_unspecified_parameters_die (tree, dw_die_ref);
6147 static void gen_formal_types_die (tree, dw_die_ref);
6148 static void gen_subprogram_die (tree, dw_die_ref);
6149 static void gen_variable_die (tree, tree, dw_die_ref);
6150 static void gen_const_die (tree, dw_die_ref);
6151 static void gen_label_die (tree, dw_die_ref);
6152 static void gen_lexical_block_die (tree, dw_die_ref, int);
6153 static void gen_inlined_subroutine_die (tree, dw_die_ref, int);
6154 static void gen_field_die (tree, dw_die_ref);
6155 static void gen_ptr_to_mbr_type_die (tree, dw_die_ref);
6156 static dw_die_ref gen_compile_unit_die (const char *);
6157 static void gen_inheritance_die (tree, tree, dw_die_ref);
6158 static void gen_member_die (tree, dw_die_ref);
6159 static void gen_struct_or_union_type_die (tree, dw_die_ref,
6160                                                 enum debug_info_usage);
6161 static void gen_subroutine_type_die (tree, dw_die_ref);
6162 static void gen_typedef_die (tree, dw_die_ref);
6163 static void gen_type_die (tree, dw_die_ref);
6164 static void gen_block_die (tree, dw_die_ref, int);
6165 static void decls_for_scope (tree, dw_die_ref, int);
6166 static int is_redundant_typedef (const_tree);
6167 static inline dw_die_ref get_context_die (tree);
6168 static void gen_namespace_die (tree, dw_die_ref);
6169 static void gen_decl_die (tree, tree, dw_die_ref);
6170 static dw_die_ref force_decl_die (tree);
6171 static dw_die_ref force_type_die (tree);
6172 static dw_die_ref setup_namespace_context (tree, dw_die_ref);
6173 static dw_die_ref declare_in_namespace (tree, dw_die_ref);
6174 static struct dwarf_file_data * lookup_filename (const char *);
6175 static void retry_incomplete_types (void);
6176 static void gen_type_die_for_member (tree, tree, dw_die_ref);
6177 static void gen_generic_params_dies (tree);
6178 static void splice_child_die (dw_die_ref, dw_die_ref);
6179 static int file_info_cmp (const void *, const void *);
6180 static dw_loc_list_ref new_loc_list (dw_loc_descr_ref, const char *,
6181                                      const char *, const char *);
6182 static void output_loc_list (dw_loc_list_ref);
6183 static char *gen_internal_sym (const char *);
6184
6185 static void prune_unmark_dies (dw_die_ref);
6186 static void prune_unused_types_mark (dw_die_ref, int);
6187 static void prune_unused_types_walk (dw_die_ref);
6188 static void prune_unused_types_walk_attribs (dw_die_ref);
6189 static void prune_unused_types_prune (dw_die_ref);
6190 static void prune_unused_types (void);
6191 static int maybe_emit_file (struct dwarf_file_data *fd);
6192 static void append_entry_to_tmpl_value_parm_die_table (dw_die_ref, tree);
6193 static void gen_remaining_tmpl_value_param_die_attribute (void);
6194
6195 /* Section names used to hold DWARF debugging information.  */
6196 #ifndef DEBUG_INFO_SECTION
6197 #define DEBUG_INFO_SECTION      ".debug_info"
6198 #endif
6199 #ifndef DEBUG_ABBREV_SECTION
6200 #define DEBUG_ABBREV_SECTION    ".debug_abbrev"
6201 #endif
6202 #ifndef DEBUG_ARANGES_SECTION
6203 #define DEBUG_ARANGES_SECTION   ".debug_aranges"
6204 #endif
6205 #ifndef DEBUG_MACINFO_SECTION
6206 #define DEBUG_MACINFO_SECTION   ".debug_macinfo"
6207 #endif
6208 #ifndef DEBUG_LINE_SECTION
6209 #define DEBUG_LINE_SECTION      ".debug_line"
6210 #endif
6211 #ifndef DEBUG_LOC_SECTION
6212 #define DEBUG_LOC_SECTION       ".debug_loc"
6213 #endif
6214 #ifndef DEBUG_PUBNAMES_SECTION
6215 #define DEBUG_PUBNAMES_SECTION  ".debug_pubnames"
6216 #endif
6217 #ifndef DEBUG_PUBTYPES_SECTION
6218 #define DEBUG_PUBTYPES_SECTION  ".debug_pubtypes"
6219 #endif
6220 #ifndef DEBUG_DCALL_SECTION
6221 #define DEBUG_DCALL_SECTION     ".debug_dcall"
6222 #endif
6223 #ifndef DEBUG_VCALL_SECTION
6224 #define DEBUG_VCALL_SECTION     ".debug_vcall"
6225 #endif
6226 #ifndef DEBUG_STR_SECTION
6227 #define DEBUG_STR_SECTION       ".debug_str"
6228 #endif
6229 #ifndef DEBUG_RANGES_SECTION
6230 #define DEBUG_RANGES_SECTION    ".debug_ranges"
6231 #endif
6232
6233 /* Standard ELF section names for compiled code and data.  */
6234 #ifndef TEXT_SECTION_NAME
6235 #define TEXT_SECTION_NAME       ".text"
6236 #endif
6237
6238 /* Section flags for .debug_str section.  */
6239 #define DEBUG_STR_SECTION_FLAGS \
6240   (HAVE_GAS_SHF_MERGE && flag_merge_debug_strings               \
6241    ? SECTION_DEBUG | SECTION_MERGE | SECTION_STRINGS | 1        \
6242    : SECTION_DEBUG)
6243
6244 /* Labels we insert at beginning sections we can reference instead of
6245    the section names themselves.  */
6246
6247 #ifndef TEXT_SECTION_LABEL
6248 #define TEXT_SECTION_LABEL              "Ltext"
6249 #endif
6250 #ifndef COLD_TEXT_SECTION_LABEL
6251 #define COLD_TEXT_SECTION_LABEL         "Ltext_cold"
6252 #endif
6253 #ifndef DEBUG_LINE_SECTION_LABEL
6254 #define DEBUG_LINE_SECTION_LABEL        "Ldebug_line"
6255 #endif
6256 #ifndef DEBUG_INFO_SECTION_LABEL
6257 #define DEBUG_INFO_SECTION_LABEL        "Ldebug_info"
6258 #endif
6259 #ifndef DEBUG_ABBREV_SECTION_LABEL
6260 #define DEBUG_ABBREV_SECTION_LABEL      "Ldebug_abbrev"
6261 #endif
6262 #ifndef DEBUG_LOC_SECTION_LABEL
6263 #define DEBUG_LOC_SECTION_LABEL         "Ldebug_loc"
6264 #endif
6265 #ifndef DEBUG_RANGES_SECTION_LABEL
6266 #define DEBUG_RANGES_SECTION_LABEL      "Ldebug_ranges"
6267 #endif
6268 #ifndef DEBUG_MACINFO_SECTION_LABEL
6269 #define DEBUG_MACINFO_SECTION_LABEL     "Ldebug_macinfo"
6270 #endif
6271
6272 /* Definitions of defaults for formats and names of various special
6273    (artificial) labels which may be generated within this file (when the -g
6274    options is used and DWARF2_DEBUGGING_INFO is in effect.
6275    If necessary, these may be overridden from within the tm.h file, but
6276    typically, overriding these defaults is unnecessary.  */
6277
6278 static char text_end_label[MAX_ARTIFICIAL_LABEL_BYTES];
6279 static char text_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
6280 static char cold_text_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
6281 static char cold_end_label[MAX_ARTIFICIAL_LABEL_BYTES];
6282 static char abbrev_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
6283 static char debug_info_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
6284 static char debug_line_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
6285 static char macinfo_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
6286 static char loc_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
6287 static char ranges_section_label[2 * MAX_ARTIFICIAL_LABEL_BYTES];
6288
6289 #ifndef TEXT_END_LABEL
6290 #define TEXT_END_LABEL          "Letext"
6291 #endif
6292 #ifndef COLD_END_LABEL
6293 #define COLD_END_LABEL          "Letext_cold"
6294 #endif
6295 #ifndef BLOCK_BEGIN_LABEL
6296 #define BLOCK_BEGIN_LABEL       "LBB"
6297 #endif
6298 #ifndef BLOCK_END_LABEL
6299 #define BLOCK_END_LABEL         "LBE"
6300 #endif
6301 #ifndef LINE_CODE_LABEL
6302 #define LINE_CODE_LABEL         "LM"
6303 #endif
6304 #ifndef SEPARATE_LINE_CODE_LABEL
6305 #define SEPARATE_LINE_CODE_LABEL        "LSM"
6306 #endif
6307
6308 \f
6309 /* We allow a language front-end to designate a function that is to be
6310    called to "demangle" any name before it is put into a DIE.  */
6311
6312 static const char *(*demangle_name_func) (const char *);
6313
6314 void
6315 dwarf2out_set_demangle_name_func (const char *(*func) (const char *))
6316 {
6317   demangle_name_func = func;
6318 }
6319
6320 /* Test if rtl node points to a pseudo register.  */
6321
6322 static inline int
6323 is_pseudo_reg (const_rtx rtl)
6324 {
6325   return ((REG_P (rtl) && REGNO (rtl) >= FIRST_PSEUDO_REGISTER)
6326           || (GET_CODE (rtl) == SUBREG
6327               && REGNO (SUBREG_REG (rtl)) >= FIRST_PSEUDO_REGISTER));
6328 }
6329
6330 /* Return a reference to a type, with its const and volatile qualifiers
6331    removed.  */
6332
6333 static inline tree
6334 type_main_variant (tree type)
6335 {
6336   type = TYPE_MAIN_VARIANT (type);
6337
6338   /* ??? There really should be only one main variant among any group of
6339      variants of a given type (and all of the MAIN_VARIANT values for all
6340      members of the group should point to that one type) but sometimes the C
6341      front-end messes this up for array types, so we work around that bug
6342      here.  */
6343   if (TREE_CODE (type) == ARRAY_TYPE)
6344     while (type != TYPE_MAIN_VARIANT (type))
6345       type = TYPE_MAIN_VARIANT (type);
6346
6347   return type;
6348 }
6349
6350 /* Return nonzero if the given type node represents a tagged type.  */
6351
6352 static inline int
6353 is_tagged_type (const_tree type)
6354 {
6355   enum tree_code code = TREE_CODE (type);
6356
6357   return (code == RECORD_TYPE || code == UNION_TYPE
6358           || code == QUAL_UNION_TYPE || code == ENUMERAL_TYPE);
6359 }
6360
6361 /* Convert a DIE tag into its string name.  */
6362
6363 static const char *
6364 dwarf_tag_name (unsigned int tag)
6365 {
6366   switch (tag)
6367     {
6368     case DW_TAG_padding:
6369       return "DW_TAG_padding";
6370     case DW_TAG_array_type:
6371       return "DW_TAG_array_type";
6372     case DW_TAG_class_type:
6373       return "DW_TAG_class_type";
6374     case DW_TAG_entry_point:
6375       return "DW_TAG_entry_point";
6376     case DW_TAG_enumeration_type:
6377       return "DW_TAG_enumeration_type";
6378     case DW_TAG_formal_parameter:
6379       return "DW_TAG_formal_parameter";
6380     case DW_TAG_imported_declaration:
6381       return "DW_TAG_imported_declaration";
6382     case DW_TAG_label:
6383       return "DW_TAG_label";
6384     case DW_TAG_lexical_block:
6385       return "DW_TAG_lexical_block";
6386     case DW_TAG_member:
6387       return "DW_TAG_member";
6388     case DW_TAG_pointer_type:
6389       return "DW_TAG_pointer_type";
6390     case DW_TAG_reference_type:
6391       return "DW_TAG_reference_type";
6392     case DW_TAG_compile_unit:
6393       return "DW_TAG_compile_unit";
6394     case DW_TAG_string_type:
6395       return "DW_TAG_string_type";
6396     case DW_TAG_structure_type:
6397       return "DW_TAG_structure_type";
6398     case DW_TAG_subroutine_type:
6399       return "DW_TAG_subroutine_type";
6400     case DW_TAG_typedef:
6401       return "DW_TAG_typedef";
6402     case DW_TAG_union_type:
6403       return "DW_TAG_union_type";
6404     case DW_TAG_unspecified_parameters:
6405       return "DW_TAG_unspecified_parameters";
6406     case DW_TAG_variant:
6407       return "DW_TAG_variant";
6408     case DW_TAG_common_block:
6409       return "DW_TAG_common_block";
6410     case DW_TAG_common_inclusion:
6411       return "DW_TAG_common_inclusion";
6412     case DW_TAG_inheritance:
6413       return "DW_TAG_inheritance";
6414     case DW_TAG_inlined_subroutine:
6415       return "DW_TAG_inlined_subroutine";
6416     case DW_TAG_module:
6417       return "DW_TAG_module";
6418     case DW_TAG_ptr_to_member_type:
6419       return "DW_TAG_ptr_to_member_type";
6420     case DW_TAG_set_type:
6421       return "DW_TAG_set_type";
6422     case DW_TAG_subrange_type:
6423       return "DW_TAG_subrange_type";
6424     case DW_TAG_with_stmt:
6425       return "DW_TAG_with_stmt";
6426     case DW_TAG_access_declaration:
6427       return "DW_TAG_access_declaration";
6428     case DW_TAG_base_type:
6429       return "DW_TAG_base_type";
6430     case DW_TAG_catch_block:
6431       return "DW_TAG_catch_block";
6432     case DW_TAG_const_type:
6433       return "DW_TAG_const_type";
6434     case DW_TAG_constant:
6435       return "DW_TAG_constant";
6436     case DW_TAG_enumerator:
6437       return "DW_TAG_enumerator";
6438     case DW_TAG_file_type:
6439       return "DW_TAG_file_type";
6440     case DW_TAG_friend:
6441       return "DW_TAG_friend";
6442     case DW_TAG_namelist:
6443       return "DW_TAG_namelist";
6444     case DW_TAG_namelist_item:
6445       return "DW_TAG_namelist_item";
6446     case DW_TAG_packed_type:
6447       return "DW_TAG_packed_type";
6448     case DW_TAG_subprogram:
6449       return "DW_TAG_subprogram";
6450     case DW_TAG_template_type_param:
6451       return "DW_TAG_template_type_param";
6452     case DW_TAG_template_value_param:
6453       return "DW_TAG_template_value_param";
6454     case DW_TAG_thrown_type:
6455       return "DW_TAG_thrown_type";
6456     case DW_TAG_try_block:
6457       return "DW_TAG_try_block";
6458     case DW_TAG_variant_part:
6459       return "DW_TAG_variant_part";
6460     case DW_TAG_variable:
6461       return "DW_TAG_variable";
6462     case DW_TAG_volatile_type:
6463       return "DW_TAG_volatile_type";
6464     case DW_TAG_dwarf_procedure:
6465       return "DW_TAG_dwarf_procedure";
6466     case DW_TAG_restrict_type:
6467       return "DW_TAG_restrict_type";
6468     case DW_TAG_interface_type:
6469       return "DW_TAG_interface_type";
6470     case DW_TAG_namespace:
6471       return "DW_TAG_namespace";
6472     case DW_TAG_imported_module:
6473       return "DW_TAG_imported_module";
6474     case DW_TAG_unspecified_type:
6475       return "DW_TAG_unspecified_type";
6476     case DW_TAG_partial_unit:
6477       return "DW_TAG_partial_unit";
6478     case DW_TAG_imported_unit:
6479       return "DW_TAG_imported_unit";
6480     case DW_TAG_condition:
6481       return "DW_TAG_condition";
6482     case DW_TAG_shared_type:
6483       return "DW_TAG_shared_type";
6484     case DW_TAG_type_unit:
6485       return "DW_TAG_type_unit";
6486     case DW_TAG_rvalue_reference_type:
6487       return "DW_TAG_rvalue_reference_type";
6488     case DW_TAG_template_alias:
6489       return "DW_TAG_template_alias";
6490     case DW_TAG_GNU_template_parameter_pack:
6491       return "DW_TAG_GNU_template_parameter_pack";
6492     case DW_TAG_GNU_formal_parameter_pack:
6493       return "DW_TAG_GNU_formal_parameter_pack";
6494     case DW_TAG_MIPS_loop:
6495       return "DW_TAG_MIPS_loop";
6496     case DW_TAG_format_label:
6497       return "DW_TAG_format_label";
6498     case DW_TAG_function_template:
6499       return "DW_TAG_function_template";
6500     case DW_TAG_class_template:
6501       return "DW_TAG_class_template";
6502     case DW_TAG_GNU_BINCL:
6503       return "DW_TAG_GNU_BINCL";
6504     case DW_TAG_GNU_EINCL:
6505       return "DW_TAG_GNU_EINCL";
6506     case DW_TAG_GNU_template_template_param:
6507       return "DW_TAG_GNU_template_template_param";
6508     default:
6509       return "DW_TAG_<unknown>";
6510     }
6511 }
6512
6513 /* Convert a DWARF attribute code into its string name.  */
6514
6515 static const char *
6516 dwarf_attr_name (unsigned int attr)
6517 {
6518   switch (attr)
6519     {
6520     case DW_AT_sibling:
6521       return "DW_AT_sibling";
6522     case DW_AT_location:
6523       return "DW_AT_location";
6524     case DW_AT_name:
6525       return "DW_AT_name";
6526     case DW_AT_ordering:
6527       return "DW_AT_ordering";
6528     case DW_AT_subscr_data:
6529       return "DW_AT_subscr_data";
6530     case DW_AT_byte_size:
6531       return "DW_AT_byte_size";
6532     case DW_AT_bit_offset:
6533       return "DW_AT_bit_offset";
6534     case DW_AT_bit_size:
6535       return "DW_AT_bit_size";
6536     case DW_AT_element_list:
6537       return "DW_AT_element_list";
6538     case DW_AT_stmt_list:
6539       return "DW_AT_stmt_list";
6540     case DW_AT_low_pc:
6541       return "DW_AT_low_pc";
6542     case DW_AT_high_pc:
6543       return "DW_AT_high_pc";
6544     case DW_AT_language:
6545       return "DW_AT_language";
6546     case DW_AT_member:
6547       return "DW_AT_member";
6548     case DW_AT_discr:
6549       return "DW_AT_discr";
6550     case DW_AT_discr_value:
6551       return "DW_AT_discr_value";
6552     case DW_AT_visibility:
6553       return "DW_AT_visibility";
6554     case DW_AT_import:
6555       return "DW_AT_import";
6556     case DW_AT_string_length:
6557       return "DW_AT_string_length";
6558     case DW_AT_common_reference:
6559       return "DW_AT_common_reference";
6560     case DW_AT_comp_dir:
6561       return "DW_AT_comp_dir";
6562     case DW_AT_const_value:
6563       return "DW_AT_const_value";
6564     case DW_AT_containing_type:
6565       return "DW_AT_containing_type";
6566     case DW_AT_default_value:
6567       return "DW_AT_default_value";
6568     case DW_AT_inline:
6569       return "DW_AT_inline";
6570     case DW_AT_is_optional:
6571       return "DW_AT_is_optional";
6572     case DW_AT_lower_bound:
6573       return "DW_AT_lower_bound";
6574     case DW_AT_producer:
6575       return "DW_AT_producer";
6576     case DW_AT_prototyped:
6577       return "DW_AT_prototyped";
6578     case DW_AT_return_addr:
6579       return "DW_AT_return_addr";
6580     case DW_AT_start_scope:
6581       return "DW_AT_start_scope";
6582     case DW_AT_bit_stride:
6583       return "DW_AT_bit_stride";
6584     case DW_AT_upper_bound:
6585       return "DW_AT_upper_bound";
6586     case DW_AT_abstract_origin:
6587       return "DW_AT_abstract_origin";
6588     case DW_AT_accessibility:
6589       return "DW_AT_accessibility";
6590     case DW_AT_address_class:
6591       return "DW_AT_address_class";
6592     case DW_AT_artificial:
6593       return "DW_AT_artificial";
6594     case DW_AT_base_types:
6595       return "DW_AT_base_types";
6596     case DW_AT_calling_convention:
6597       return "DW_AT_calling_convention";
6598     case DW_AT_count:
6599       return "DW_AT_count";
6600     case DW_AT_data_member_location:
6601       return "DW_AT_data_member_location";
6602     case DW_AT_decl_column:
6603       return "DW_AT_decl_column";
6604     case DW_AT_decl_file:
6605       return "DW_AT_decl_file";
6606     case DW_AT_decl_line:
6607       return "DW_AT_decl_line";
6608     case DW_AT_declaration:
6609       return "DW_AT_declaration";
6610     case DW_AT_discr_list:
6611       return "DW_AT_discr_list";
6612     case DW_AT_encoding:
6613       return "DW_AT_encoding";
6614     case DW_AT_external:
6615       return "DW_AT_external";
6616     case DW_AT_explicit:
6617       return "DW_AT_explicit";
6618     case DW_AT_frame_base:
6619       return "DW_AT_frame_base";
6620     case DW_AT_friend:
6621       return "DW_AT_friend";
6622     case DW_AT_identifier_case:
6623       return "DW_AT_identifier_case";
6624     case DW_AT_macro_info:
6625       return "DW_AT_macro_info";
6626     case DW_AT_namelist_items:
6627       return "DW_AT_namelist_items";
6628     case DW_AT_priority:
6629       return "DW_AT_priority";
6630     case DW_AT_segment:
6631       return "DW_AT_segment";
6632     case DW_AT_specification:
6633       return "DW_AT_specification";
6634     case DW_AT_static_link:
6635       return "DW_AT_static_link";
6636     case DW_AT_type:
6637       return "DW_AT_type";
6638     case DW_AT_use_location:
6639       return "DW_AT_use_location";
6640     case DW_AT_variable_parameter:
6641       return "DW_AT_variable_parameter";
6642     case DW_AT_virtuality:
6643       return "DW_AT_virtuality";
6644     case DW_AT_vtable_elem_location:
6645       return "DW_AT_vtable_elem_location";
6646
6647     case DW_AT_allocated:
6648       return "DW_AT_allocated";
6649     case DW_AT_associated:
6650       return "DW_AT_associated";
6651     case DW_AT_data_location:
6652       return "DW_AT_data_location";
6653     case DW_AT_byte_stride:
6654       return "DW_AT_byte_stride";
6655     case DW_AT_entry_pc:
6656       return "DW_AT_entry_pc";
6657     case DW_AT_use_UTF8:
6658       return "DW_AT_use_UTF8";
6659     case DW_AT_extension:
6660       return "DW_AT_extension";
6661     case DW_AT_ranges:
6662       return "DW_AT_ranges";
6663     case DW_AT_trampoline:
6664       return "DW_AT_trampoline";
6665     case DW_AT_call_column:
6666       return "DW_AT_call_column";
6667     case DW_AT_call_file:
6668       return "DW_AT_call_file";
6669     case DW_AT_call_line:
6670       return "DW_AT_call_line";
6671
6672     case DW_AT_signature:
6673       return "DW_AT_signature";
6674     case DW_AT_main_subprogram:
6675       return "DW_AT_main_subprogram";
6676     case DW_AT_data_bit_offset:
6677       return "DW_AT_data_bit_offset";
6678     case DW_AT_const_expr:
6679       return "DW_AT_const_expr";
6680     case DW_AT_enum_class:
6681       return "DW_AT_enum_class";
6682     case DW_AT_linkage_name:
6683       return "DW_AT_linkage_name";
6684
6685     case DW_AT_MIPS_fde:
6686       return "DW_AT_MIPS_fde";
6687     case DW_AT_MIPS_loop_begin:
6688       return "DW_AT_MIPS_loop_begin";
6689     case DW_AT_MIPS_tail_loop_begin:
6690       return "DW_AT_MIPS_tail_loop_begin";
6691     case DW_AT_MIPS_epilog_begin:
6692       return "DW_AT_MIPS_epilog_begin";
6693     case DW_AT_MIPS_loop_unroll_factor:
6694       return "DW_AT_MIPS_loop_unroll_factor";
6695     case DW_AT_MIPS_software_pipeline_depth:
6696       return "DW_AT_MIPS_software_pipeline_depth";
6697     case DW_AT_MIPS_linkage_name:
6698       return "DW_AT_MIPS_linkage_name";
6699     case DW_AT_MIPS_stride:
6700       return "DW_AT_MIPS_stride";
6701     case DW_AT_MIPS_abstract_name:
6702       return "DW_AT_MIPS_abstract_name";
6703     case DW_AT_MIPS_clone_origin:
6704       return "DW_AT_MIPS_clone_origin";
6705     case DW_AT_MIPS_has_inlines:
6706       return "DW_AT_MIPS_has_inlines";
6707
6708     case DW_AT_sf_names:
6709       return "DW_AT_sf_names";
6710     case DW_AT_src_info:
6711       return "DW_AT_src_info";
6712     case DW_AT_mac_info:
6713       return "DW_AT_mac_info";
6714     case DW_AT_src_coords:
6715       return "DW_AT_src_coords";
6716     case DW_AT_body_begin:
6717       return "DW_AT_body_begin";
6718     case DW_AT_body_end:
6719       return "DW_AT_body_end";
6720     case DW_AT_GNU_vector:
6721       return "DW_AT_GNU_vector";
6722     case DW_AT_GNU_guarded_by:
6723       return "DW_AT_GNU_guarded_by";
6724     case DW_AT_GNU_pt_guarded_by:
6725       return "DW_AT_GNU_pt_guarded_by";
6726     case DW_AT_GNU_guarded:
6727       return "DW_AT_GNU_guarded";
6728     case DW_AT_GNU_pt_guarded:
6729       return "DW_AT_GNU_pt_guarded";
6730     case DW_AT_GNU_locks_excluded:
6731       return "DW_AT_GNU_locks_excluded";
6732     case DW_AT_GNU_exclusive_locks_required:
6733       return "DW_AT_GNU_exclusive_locks_required";
6734     case DW_AT_GNU_shared_locks_required:
6735       return "DW_AT_GNU_shared_locks_required";
6736     case DW_AT_GNU_odr_signature:
6737       return "DW_AT_GNU_odr_signature";
6738     case DW_AT_GNU_template_name:
6739       return "DW_AT_GNU_template_name";
6740
6741     case DW_AT_VMS_rtnbeg_pd_address:
6742       return "DW_AT_VMS_rtnbeg_pd_address";
6743
6744     default:
6745       return "DW_AT_<unknown>";
6746     }
6747 }
6748
6749 /* Convert a DWARF value form code into its string name.  */
6750
6751 static const char *
6752 dwarf_form_name (unsigned int form)
6753 {
6754   switch (form)
6755     {
6756     case DW_FORM_addr:
6757       return "DW_FORM_addr";
6758     case DW_FORM_block2:
6759       return "DW_FORM_block2";
6760     case DW_FORM_block4:
6761       return "DW_FORM_block4";
6762     case DW_FORM_data2:
6763       return "DW_FORM_data2";
6764     case DW_FORM_data4:
6765       return "DW_FORM_data4";
6766     case DW_FORM_data8:
6767       return "DW_FORM_data8";
6768     case DW_FORM_string:
6769       return "DW_FORM_string";
6770     case DW_FORM_block:
6771       return "DW_FORM_block";
6772     case DW_FORM_block1:
6773       return "DW_FORM_block1";
6774     case DW_FORM_data1:
6775       return "DW_FORM_data1";
6776     case DW_FORM_flag:
6777       return "DW_FORM_flag";
6778     case DW_FORM_sdata:
6779       return "DW_FORM_sdata";
6780     case DW_FORM_strp:
6781       return "DW_FORM_strp";
6782     case DW_FORM_udata:
6783       return "DW_FORM_udata";
6784     case DW_FORM_ref_addr:
6785       return "DW_FORM_ref_addr";
6786     case DW_FORM_ref1:
6787       return "DW_FORM_ref1";
6788     case DW_FORM_ref2:
6789       return "DW_FORM_ref2";
6790     case DW_FORM_ref4:
6791       return "DW_FORM_ref4";
6792     case DW_FORM_ref8:
6793       return "DW_FORM_ref8";
6794     case DW_FORM_ref_udata:
6795       return "DW_FORM_ref_udata";
6796     case DW_FORM_indirect:
6797       return "DW_FORM_indirect";
6798     case DW_FORM_sec_offset:
6799       return "DW_FORM_sec_offset";
6800     case DW_FORM_exprloc:
6801       return "DW_FORM_exprloc";
6802     case DW_FORM_flag_present:
6803       return "DW_FORM_flag_present";
6804     case DW_FORM_ref_sig8:
6805       return "DW_FORM_ref_sig8";
6806     default:
6807       return "DW_FORM_<unknown>";
6808     }
6809 }
6810 \f
6811 /* Determine the "ultimate origin" of a decl.  The decl may be an inlined
6812    instance of an inlined instance of a decl which is local to an inline
6813    function, so we have to trace all of the way back through the origin chain
6814    to find out what sort of node actually served as the original seed for the
6815    given block.  */
6816
6817 static tree
6818 decl_ultimate_origin (const_tree decl)
6819 {
6820   if (!CODE_CONTAINS_STRUCT (TREE_CODE (decl), TS_DECL_COMMON))
6821     return NULL_TREE;
6822
6823   /* output_inline_function sets DECL_ABSTRACT_ORIGIN for all the
6824      nodes in the function to point to themselves; ignore that if
6825      we're trying to output the abstract instance of this function.  */
6826   if (DECL_ABSTRACT (decl) && DECL_ABSTRACT_ORIGIN (decl) == decl)
6827     return NULL_TREE;
6828
6829   /* Since the DECL_ABSTRACT_ORIGIN for a DECL is supposed to be the
6830      most distant ancestor, this should never happen.  */
6831   gcc_assert (!DECL_FROM_INLINE (DECL_ORIGIN (decl)));
6832
6833   return DECL_ABSTRACT_ORIGIN (decl);
6834 }
6835
6836 /* Get the class to which DECL belongs, if any.  In g++, the DECL_CONTEXT
6837    of a virtual function may refer to a base class, so we check the 'this'
6838    parameter.  */
6839
6840 static tree
6841 decl_class_context (tree decl)
6842 {
6843   tree context = NULL_TREE;
6844
6845   if (TREE_CODE (decl) != FUNCTION_DECL || ! DECL_VINDEX (decl))
6846     context = DECL_CONTEXT (decl);
6847   else
6848     context = TYPE_MAIN_VARIANT
6849       (TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (TREE_TYPE (decl)))));
6850
6851   if (context && !TYPE_P (context))
6852     context = NULL_TREE;
6853
6854   return context;
6855 }
6856 \f
6857 /* Add an attribute/value pair to a DIE.  */
6858
6859 static inline void
6860 add_dwarf_attr (dw_die_ref die, dw_attr_ref attr)
6861 {
6862   /* Maybe this should be an assert?  */
6863   if (die == NULL)
6864     return;
6865
6866   if (die->die_attr == NULL)
6867     die->die_attr = VEC_alloc (dw_attr_node, gc, 1);
6868   VEC_safe_push (dw_attr_node, gc, die->die_attr, attr);
6869 }
6870
6871 static inline enum dw_val_class
6872 AT_class (dw_attr_ref a)
6873 {
6874   return a->dw_attr_val.val_class;
6875 }
6876
6877 /* Add a flag value attribute to a DIE.  */
6878
6879 static inline void
6880 add_AT_flag (dw_die_ref die, enum dwarf_attribute attr_kind, unsigned int flag)
6881 {
6882   dw_attr_node attr;
6883
6884   attr.dw_attr = attr_kind;
6885   attr.dw_attr_val.val_class = dw_val_class_flag;
6886   attr.dw_attr_val.v.val_flag = flag;
6887   add_dwarf_attr (die, &attr);
6888 }
6889
6890 static inline unsigned
6891 AT_flag (dw_attr_ref a)
6892 {
6893   gcc_assert (a && AT_class (a) == dw_val_class_flag);
6894   return a->dw_attr_val.v.val_flag;
6895 }
6896
6897 /* Add a signed integer attribute value to a DIE.  */
6898
6899 static inline void
6900 add_AT_int (dw_die_ref die, enum dwarf_attribute attr_kind, HOST_WIDE_INT int_val)
6901 {
6902   dw_attr_node attr;
6903
6904   attr.dw_attr = attr_kind;
6905   attr.dw_attr_val.val_class = dw_val_class_const;
6906   attr.dw_attr_val.v.val_int = int_val;
6907   add_dwarf_attr (die, &attr);
6908 }
6909
6910 static inline HOST_WIDE_INT
6911 AT_int (dw_attr_ref a)
6912 {
6913   gcc_assert (a && AT_class (a) == dw_val_class_const);
6914   return a->dw_attr_val.v.val_int;
6915 }
6916
6917 /* Add an unsigned integer attribute value to a DIE.  */
6918
6919 static inline void
6920 add_AT_unsigned (dw_die_ref die, enum dwarf_attribute attr_kind,
6921                  unsigned HOST_WIDE_INT unsigned_val)
6922 {
6923   dw_attr_node attr;
6924
6925   attr.dw_attr = attr_kind;
6926   attr.dw_attr_val.val_class = dw_val_class_unsigned_const;
6927   attr.dw_attr_val.v.val_unsigned = unsigned_val;
6928   add_dwarf_attr (die, &attr);
6929 }
6930
6931 static inline unsigned HOST_WIDE_INT
6932 AT_unsigned (dw_attr_ref a)
6933 {
6934   gcc_assert (a && AT_class (a) == dw_val_class_unsigned_const);
6935   return a->dw_attr_val.v.val_unsigned;
6936 }
6937
6938 /* Add an unsigned double integer attribute value to a DIE.  */
6939
6940 static inline void
6941 add_AT_double (dw_die_ref die, enum dwarf_attribute attr_kind,
6942                HOST_WIDE_INT high, unsigned HOST_WIDE_INT low)
6943 {
6944   dw_attr_node attr;
6945
6946   attr.dw_attr = attr_kind;
6947   attr.dw_attr_val.val_class = dw_val_class_const_double;
6948   attr.dw_attr_val.v.val_double.high = high;
6949   attr.dw_attr_val.v.val_double.low = low;
6950   add_dwarf_attr (die, &attr);
6951 }
6952
6953 /* Add a floating point attribute value to a DIE and return it.  */
6954
6955 static inline void
6956 add_AT_vec (dw_die_ref die, enum dwarf_attribute attr_kind,
6957             unsigned int length, unsigned int elt_size, unsigned char *array)
6958 {
6959   dw_attr_node attr;
6960
6961   attr.dw_attr = attr_kind;
6962   attr.dw_attr_val.val_class = dw_val_class_vec;
6963   attr.dw_attr_val.v.val_vec.length = length;
6964   attr.dw_attr_val.v.val_vec.elt_size = elt_size;
6965   attr.dw_attr_val.v.val_vec.array = array;
6966   add_dwarf_attr (die, &attr);
6967 }
6968
6969 /* Add an 8-byte data attribute value to a DIE.  */
6970
6971 static inline void
6972 add_AT_data8 (dw_die_ref die, enum dwarf_attribute attr_kind,
6973               unsigned char data8[8])
6974 {
6975   dw_attr_node attr;
6976
6977   attr.dw_attr = attr_kind;
6978   attr.dw_attr_val.val_class = dw_val_class_data8;
6979   memcpy (attr.dw_attr_val.v.val_data8, data8, 8);
6980   add_dwarf_attr (die, &attr);
6981 }
6982
6983 /* Hash and equality functions for debug_str_hash.  */
6984
6985 static hashval_t
6986 debug_str_do_hash (const void *x)
6987 {
6988   return htab_hash_string (((const struct indirect_string_node *)x)->str);
6989 }
6990
6991 static int
6992 debug_str_eq (const void *x1, const void *x2)
6993 {
6994   return strcmp ((((const struct indirect_string_node *)x1)->str),
6995                  (const char *)x2) == 0;
6996 }
6997
6998 /* Add STR to the indirect string hash table.  */
6999
7000 static struct indirect_string_node *
7001 find_AT_string (const char *str)
7002 {
7003   struct indirect_string_node *node;
7004   void **slot;
7005
7006   if (! debug_str_hash)
7007     debug_str_hash = htab_create_ggc (10, debug_str_do_hash,
7008                                       debug_str_eq, NULL);
7009
7010   slot = htab_find_slot_with_hash (debug_str_hash, str,
7011                                    htab_hash_string (str), INSERT);
7012   if (*slot == NULL)
7013     {
7014       node = (struct indirect_string_node *)
7015                ggc_alloc_cleared (sizeof (struct indirect_string_node));
7016       node->str = ggc_strdup (str);
7017       *slot = node;
7018     }
7019   else
7020     node = (struct indirect_string_node *) *slot;
7021
7022   node->refcount++;
7023   return node;
7024 }
7025
7026 /* Add a string attribute value to a DIE.  */
7027
7028 static inline void
7029 add_AT_string (dw_die_ref die, enum dwarf_attribute attr_kind, const char *str)
7030 {
7031   dw_attr_node attr;
7032   struct indirect_string_node *node;
7033
7034   node = find_AT_string (str);
7035
7036   attr.dw_attr = attr_kind;
7037   attr.dw_attr_val.val_class = dw_val_class_str;
7038   attr.dw_attr_val.v.val_str = node;
7039   add_dwarf_attr (die, &attr);
7040 }
7041
7042 /* Create a label for an indirect string node, ensuring it is going to
7043    be output, unless its reference count goes down to zero.  */
7044
7045 static inline void
7046 gen_label_for_indirect_string (struct indirect_string_node *node)
7047 {
7048   char label[32];
7049
7050   if (node->label)
7051     return;
7052
7053   ASM_GENERATE_INTERNAL_LABEL (label, "LASF", dw2_string_counter);
7054   ++dw2_string_counter;
7055   node->label = xstrdup (label);
7056 }
7057
7058 /* Create a SYMBOL_REF rtx whose value is the initial address of a
7059    debug string STR.  */
7060
7061 static inline rtx
7062 get_debug_string_label (const char *str)
7063 {
7064   struct indirect_string_node *node = find_AT_string (str);
7065
7066   debug_str_hash_forced = true;
7067
7068   gen_label_for_indirect_string (node);
7069
7070   return gen_rtx_SYMBOL_REF (Pmode, node->label);
7071 }
7072
7073 static inline const char *
7074 AT_string (dw_attr_ref a)
7075 {
7076   gcc_assert (a && AT_class (a) == dw_val_class_str);
7077   return a->dw_attr_val.v.val_str->str;
7078 }
7079
7080 /* Find out whether a string should be output inline in DIE
7081    or out-of-line in .debug_str section.  */
7082
7083 static enum dwarf_form
7084 AT_string_form (dw_attr_ref a)
7085 {
7086   struct indirect_string_node *node;
7087   unsigned int len;
7088
7089   gcc_assert (a && AT_class (a) == dw_val_class_str);
7090
7091   node = a->dw_attr_val.v.val_str;
7092   if (node->form)
7093     return node->form;
7094
7095   len = strlen (node->str) + 1;
7096
7097   /* If the string is shorter or equal to the size of the reference, it is
7098      always better to put it inline.  */
7099   if (len <= DWARF_OFFSET_SIZE || node->refcount == 0)
7100     return node->form = DW_FORM_string;
7101
7102   /* If we cannot expect the linker to merge strings in .debug_str
7103      section, only put it into .debug_str if it is worth even in this
7104      single module.  */
7105   if (DWARF2_INDIRECT_STRING_SUPPORT_MISSING_ON_TARGET
7106       || ((debug_str_section->common.flags & SECTION_MERGE) == 0
7107       && (len - DWARF_OFFSET_SIZE) * node->refcount <= len))
7108     return node->form = DW_FORM_string;
7109
7110   gen_label_for_indirect_string (node);
7111
7112   return node->form = DW_FORM_strp;
7113 }
7114
7115 /* Add a DIE reference attribute value to a DIE.  */
7116
7117 static inline void
7118 add_AT_die_ref (dw_die_ref die, enum dwarf_attribute attr_kind, dw_die_ref targ_die)
7119 {
7120   dw_attr_node attr;
7121
7122   attr.dw_attr = attr_kind;
7123   attr.dw_attr_val.val_class = dw_val_class_die_ref;
7124   attr.dw_attr_val.v.val_die_ref.die = targ_die;
7125   attr.dw_attr_val.v.val_die_ref.external = 0;
7126   add_dwarf_attr (die, &attr);
7127 }
7128
7129 /* Add an AT_specification attribute to a DIE, and also make the back
7130    pointer from the specification to the definition.  */
7131
7132 static inline void
7133 add_AT_specification (dw_die_ref die, dw_die_ref targ_die)
7134 {
7135   add_AT_die_ref (die, DW_AT_specification, targ_die);
7136   gcc_assert (!targ_die->die_definition);
7137   targ_die->die_definition = die;
7138 }
7139
7140 static inline dw_die_ref
7141 AT_ref (dw_attr_ref a)
7142 {
7143   gcc_assert (a && AT_class (a) == dw_val_class_die_ref);
7144   return a->dw_attr_val.v.val_die_ref.die;
7145 }
7146
7147 static inline int
7148 AT_ref_external (dw_attr_ref a)
7149 {
7150   if (a && AT_class (a) == dw_val_class_die_ref)
7151     return a->dw_attr_val.v.val_die_ref.external;
7152
7153   return 0;
7154 }
7155
7156 static inline void
7157 set_AT_ref_external (dw_attr_ref a, int i)
7158 {
7159   gcc_assert (a && AT_class (a) == dw_val_class_die_ref);
7160   a->dw_attr_val.v.val_die_ref.external = i;
7161 }
7162
7163 /* Add an FDE reference attribute value to a DIE.  */
7164
7165 static inline void
7166 add_AT_fde_ref (dw_die_ref die, enum dwarf_attribute attr_kind, unsigned int targ_fde)
7167 {
7168   dw_attr_node attr;
7169
7170   attr.dw_attr = attr_kind;
7171   attr.dw_attr_val.val_class = dw_val_class_fde_ref;
7172   attr.dw_attr_val.v.val_fde_index = targ_fde;
7173   add_dwarf_attr (die, &attr);
7174 }
7175
7176 /* Add a location description attribute value to a DIE.  */
7177
7178 static inline void
7179 add_AT_loc (dw_die_ref die, enum dwarf_attribute attr_kind, dw_loc_descr_ref loc)
7180 {
7181   dw_attr_node attr;
7182
7183   attr.dw_attr = attr_kind;
7184   attr.dw_attr_val.val_class = dw_val_class_loc;
7185   attr.dw_attr_val.v.val_loc = loc;
7186   add_dwarf_attr (die, &attr);
7187 }
7188
7189 static inline dw_loc_descr_ref
7190 AT_loc (dw_attr_ref a)
7191 {
7192   gcc_assert (a && AT_class (a) == dw_val_class_loc);
7193   return a->dw_attr_val.v.val_loc;
7194 }
7195
7196 static inline void
7197 add_AT_loc_list (dw_die_ref die, enum dwarf_attribute attr_kind, dw_loc_list_ref loc_list)
7198 {
7199   dw_attr_node attr;
7200
7201   attr.dw_attr = attr_kind;
7202   attr.dw_attr_val.val_class = dw_val_class_loc_list;
7203   attr.dw_attr_val.v.val_loc_list = loc_list;
7204   add_dwarf_attr (die, &attr);
7205   have_location_lists = true;
7206 }
7207
7208 static inline dw_loc_list_ref
7209 AT_loc_list (dw_attr_ref a)
7210 {
7211   gcc_assert (a && AT_class (a) == dw_val_class_loc_list);
7212   return a->dw_attr_val.v.val_loc_list;
7213 }
7214
7215 static inline dw_loc_list_ref *
7216 AT_loc_list_ptr (dw_attr_ref a)
7217 {
7218   gcc_assert (a && AT_class (a) == dw_val_class_loc_list);
7219   return &a->dw_attr_val.v.val_loc_list;
7220 }
7221
7222 /* Add an address constant attribute value to a DIE.  */
7223
7224 static inline void
7225 add_AT_addr (dw_die_ref die, enum dwarf_attribute attr_kind, rtx addr)
7226 {
7227   dw_attr_node attr;
7228
7229   attr.dw_attr = attr_kind;
7230   attr.dw_attr_val.val_class = dw_val_class_addr;
7231   attr.dw_attr_val.v.val_addr = addr;
7232   add_dwarf_attr (die, &attr);
7233 }
7234
7235 /* Get the RTX from to an address DIE attribute.  */
7236
7237 static inline rtx
7238 AT_addr (dw_attr_ref a)
7239 {
7240   gcc_assert (a && AT_class (a) == dw_val_class_addr);
7241   return a->dw_attr_val.v.val_addr;
7242 }
7243
7244 /* Add a file attribute value to a DIE.  */
7245
7246 static inline void
7247 add_AT_file (dw_die_ref die, enum dwarf_attribute attr_kind,
7248              struct dwarf_file_data *fd)
7249 {
7250   dw_attr_node attr;
7251
7252   attr.dw_attr = attr_kind;
7253   attr.dw_attr_val.val_class = dw_val_class_file;
7254   attr.dw_attr_val.v.val_file = fd;
7255   add_dwarf_attr (die, &attr);
7256 }
7257
7258 /* Get the dwarf_file_data from a file DIE attribute.  */
7259
7260 static inline struct dwarf_file_data *
7261 AT_file (dw_attr_ref a)
7262 {
7263   gcc_assert (a && AT_class (a) == dw_val_class_file);
7264   return a->dw_attr_val.v.val_file;
7265 }
7266
7267 /* Add a label identifier attribute value to a DIE.  */
7268
7269 static inline void
7270 add_AT_lbl_id (dw_die_ref die, enum dwarf_attribute attr_kind, const char *lbl_id)
7271 {
7272   dw_attr_node attr;
7273
7274   attr.dw_attr = attr_kind;
7275   attr.dw_attr_val.val_class = dw_val_class_lbl_id;
7276   attr.dw_attr_val.v.val_lbl_id = xstrdup (lbl_id);
7277   add_dwarf_attr (die, &attr);
7278 }
7279
7280 /* Add a section offset attribute value to a DIE, an offset into the
7281    debug_line section.  */
7282
7283 static inline void
7284 add_AT_lineptr (dw_die_ref die, enum dwarf_attribute attr_kind,
7285                 const char *label)
7286 {
7287   dw_attr_node attr;
7288
7289   attr.dw_attr = attr_kind;
7290   attr.dw_attr_val.val_class = dw_val_class_lineptr;
7291   attr.dw_attr_val.v.val_lbl_id = xstrdup (label);
7292   add_dwarf_attr (die, &attr);
7293 }
7294
7295 /* Add a section offset attribute value to a DIE, an offset into the
7296    debug_macinfo section.  */
7297
7298 static inline void
7299 add_AT_macptr (dw_die_ref die, enum dwarf_attribute attr_kind,
7300                const char *label)
7301 {
7302   dw_attr_node attr;
7303
7304   attr.dw_attr = attr_kind;
7305   attr.dw_attr_val.val_class = dw_val_class_macptr;
7306   attr.dw_attr_val.v.val_lbl_id = xstrdup (label);
7307   add_dwarf_attr (die, &attr);
7308 }
7309
7310 /* Add an offset attribute value to a DIE.  */
7311
7312 static inline void
7313 add_AT_offset (dw_die_ref die, enum dwarf_attribute attr_kind,
7314                unsigned HOST_WIDE_INT offset)
7315 {
7316   dw_attr_node attr;
7317
7318   attr.dw_attr = attr_kind;
7319   attr.dw_attr_val.val_class = dw_val_class_offset;
7320   attr.dw_attr_val.v.val_offset = offset;
7321   add_dwarf_attr (die, &attr);
7322 }
7323
7324 /* Add an range_list attribute value to a DIE.  */
7325
7326 static void
7327 add_AT_range_list (dw_die_ref die, enum dwarf_attribute attr_kind,
7328                    long unsigned int offset)
7329 {
7330   dw_attr_node attr;
7331
7332   attr.dw_attr = attr_kind;
7333   attr.dw_attr_val.val_class = dw_val_class_range_list;
7334   attr.dw_attr_val.v.val_offset = offset;
7335   add_dwarf_attr (die, &attr);
7336 }
7337
7338 static inline const char *
7339 AT_lbl (dw_attr_ref a)
7340 {
7341   gcc_assert (a && (AT_class (a) == dw_val_class_lbl_id
7342                     || AT_class (a) == dw_val_class_lineptr
7343                     || AT_class (a) == dw_val_class_macptr));
7344   return a->dw_attr_val.v.val_lbl_id;
7345 }
7346
7347 /* Get the attribute of type attr_kind.  */
7348
7349 static dw_attr_ref
7350 get_AT (dw_die_ref die, enum dwarf_attribute attr_kind)
7351 {
7352   dw_attr_ref a;
7353   unsigned ix;
7354   dw_die_ref spec = NULL;
7355
7356   if (! die)
7357     return NULL;
7358
7359   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
7360     if (a->dw_attr == attr_kind)
7361       return a;
7362     else if (a->dw_attr == DW_AT_specification
7363              || a->dw_attr == DW_AT_abstract_origin)
7364       spec = AT_ref (a);
7365
7366   if (spec)
7367     return get_AT (spec, attr_kind);
7368
7369   return NULL;
7370 }
7371
7372 /* Return the "low pc" attribute value, typically associated with a subprogram
7373    DIE.  Return null if the "low pc" attribute is either not present, or if it
7374    cannot be represented as an assembler label identifier.  */
7375
7376 static inline const char *
7377 get_AT_low_pc (dw_die_ref die)
7378 {
7379   dw_attr_ref a = get_AT (die, DW_AT_low_pc);
7380
7381   return a ? AT_lbl (a) : NULL;
7382 }
7383
7384 /* Return the "high pc" attribute value, typically associated with a subprogram
7385    DIE.  Return null if the "high pc" attribute is either not present, or if it
7386    cannot be represented as an assembler label identifier.  */
7387
7388 static inline const char *
7389 get_AT_hi_pc (dw_die_ref die)
7390 {
7391   dw_attr_ref a = get_AT (die, DW_AT_high_pc);
7392
7393   return a ? AT_lbl (a) : NULL;
7394 }
7395
7396 /* Return the value of the string attribute designated by ATTR_KIND, or
7397    NULL if it is not present.  */
7398
7399 static inline const char *
7400 get_AT_string (dw_die_ref die, enum dwarf_attribute attr_kind)
7401 {
7402   dw_attr_ref a = get_AT (die, attr_kind);
7403
7404   return a ? AT_string (a) : NULL;
7405 }
7406
7407 /* Return the value of the flag attribute designated by ATTR_KIND, or -1
7408    if it is not present.  */
7409
7410 static inline int
7411 get_AT_flag (dw_die_ref die, enum dwarf_attribute attr_kind)
7412 {
7413   dw_attr_ref a = get_AT (die, attr_kind);
7414
7415   return a ? AT_flag (a) : 0;
7416 }
7417
7418 /* Return the value of the unsigned attribute designated by ATTR_KIND, or 0
7419    if it is not present.  */
7420
7421 static inline unsigned
7422 get_AT_unsigned (dw_die_ref die, enum dwarf_attribute attr_kind)
7423 {
7424   dw_attr_ref a = get_AT (die, attr_kind);
7425
7426   return a ? AT_unsigned (a) : 0;
7427 }
7428
7429 static inline dw_die_ref
7430 get_AT_ref (dw_die_ref die, enum dwarf_attribute attr_kind)
7431 {
7432   dw_attr_ref a = get_AT (die, attr_kind);
7433
7434   return a ? AT_ref (a) : NULL;
7435 }
7436
7437 static inline struct dwarf_file_data *
7438 get_AT_file (dw_die_ref die, enum dwarf_attribute attr_kind)
7439 {
7440   dw_attr_ref a = get_AT (die, attr_kind);
7441
7442   return a ? AT_file (a) : NULL;
7443 }
7444
7445 /* Return TRUE if the language is C or C++.  */
7446
7447 static inline bool
7448 is_c_family (void)
7449 {
7450   unsigned int lang = get_AT_unsigned (comp_unit_die, DW_AT_language);
7451
7452   return (lang == DW_LANG_C || lang == DW_LANG_C89 || lang == DW_LANG_ObjC
7453           || lang == DW_LANG_C99
7454           || lang == DW_LANG_C_plus_plus || lang == DW_LANG_ObjC_plus_plus);
7455 }
7456
7457 /* Return TRUE if the language is C++.  */
7458
7459 static inline bool
7460 is_cxx (void)
7461 {
7462   unsigned int lang = get_AT_unsigned (comp_unit_die, DW_AT_language);
7463
7464   return lang == DW_LANG_C_plus_plus || lang == DW_LANG_ObjC_plus_plus;
7465 }
7466
7467 /* Return TRUE if the language is Fortran.  */
7468
7469 static inline bool
7470 is_fortran (void)
7471 {
7472   unsigned int lang = get_AT_unsigned (comp_unit_die, DW_AT_language);
7473
7474   return (lang == DW_LANG_Fortran77
7475           || lang == DW_LANG_Fortran90
7476           || lang == DW_LANG_Fortran95);
7477 }
7478
7479 /* Return TRUE if the language is Java.  */
7480
7481 static inline bool
7482 is_java (void)
7483 {
7484   unsigned int lang = get_AT_unsigned (comp_unit_die, DW_AT_language);
7485
7486   return lang == DW_LANG_Java;
7487 }
7488
7489 /* Return TRUE if the language is Ada.  */
7490
7491 static inline bool
7492 is_ada (void)
7493 {
7494   unsigned int lang = get_AT_unsigned (comp_unit_die, DW_AT_language);
7495
7496   return lang == DW_LANG_Ada95 || lang == DW_LANG_Ada83;
7497 }
7498
7499 /* Remove the specified attribute if present.  */
7500
7501 static void
7502 remove_AT (dw_die_ref die, enum dwarf_attribute attr_kind)
7503 {
7504   dw_attr_ref a;
7505   unsigned ix;
7506
7507   if (! die)
7508     return;
7509
7510   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
7511     if (a->dw_attr == attr_kind)
7512       {
7513         if (AT_class (a) == dw_val_class_str)
7514           if (a->dw_attr_val.v.val_str->refcount)
7515             a->dw_attr_val.v.val_str->refcount--;
7516
7517         /* VEC_ordered_remove should help reduce the number of abbrevs
7518            that are needed.  */
7519         VEC_ordered_remove (dw_attr_node, die->die_attr, ix);
7520         return;
7521       }
7522 }
7523
7524 /* Remove CHILD from its parent.  PREV must have the property that
7525    PREV->DIE_SIB == CHILD.  Does not alter CHILD.  */
7526
7527 static void
7528 remove_child_with_prev (dw_die_ref child, dw_die_ref prev)
7529 {
7530   gcc_assert (child->die_parent == prev->die_parent);
7531   gcc_assert (prev->die_sib == child);
7532   if (prev == child)
7533     {
7534       gcc_assert (child->die_parent->die_child == child);
7535       prev = NULL;
7536     }
7537   else
7538     prev->die_sib = child->die_sib;
7539   if (child->die_parent->die_child == child)
7540     child->die_parent->die_child = prev;
7541 }
7542
7543 /* Replace OLD_CHILD with NEW_CHILD.  PREV must have the property that
7544    PREV->DIE_SIB == OLD_CHILD.  Does not alter OLD_CHILD.  */
7545
7546 static void
7547 replace_child (dw_die_ref old_child, dw_die_ref new_child, dw_die_ref prev)
7548 {
7549   dw_die_ref parent = old_child->die_parent;
7550
7551   gcc_assert (parent == prev->die_parent);
7552   gcc_assert (prev->die_sib == old_child);
7553
7554   new_child->die_parent = parent;
7555   if (prev == old_child)
7556     {
7557       gcc_assert (parent->die_child == old_child);
7558       new_child->die_sib = new_child;
7559     }
7560   else
7561     {
7562       prev->die_sib = new_child;
7563       new_child->die_sib = old_child->die_sib;
7564     }
7565   if (old_child->die_parent->die_child == old_child)
7566     old_child->die_parent->die_child = new_child;
7567 }
7568
7569 /* Move all children from OLD_PARENT to NEW_PARENT.  */
7570
7571 static void
7572 move_all_children (dw_die_ref old_parent, dw_die_ref new_parent)
7573 {
7574   dw_die_ref c;
7575   new_parent->die_child = old_parent->die_child;
7576   old_parent->die_child = NULL;
7577   FOR_EACH_CHILD (new_parent, c, c->die_parent = new_parent);
7578 }
7579
7580 /* Remove child DIE whose die_tag is TAG.  Do nothing if no child
7581    matches TAG.  */
7582
7583 static void
7584 remove_child_TAG (dw_die_ref die, enum dwarf_tag tag)
7585 {
7586   dw_die_ref c;
7587
7588   c = die->die_child;
7589   if (c) do {
7590     dw_die_ref prev = c;
7591     c = c->die_sib;
7592     while (c->die_tag == tag)
7593       {
7594         remove_child_with_prev (c, prev);
7595         /* Might have removed every child.  */
7596         if (c == c->die_sib)
7597           return;
7598         c = c->die_sib;
7599       }
7600   } while (c != die->die_child);
7601 }
7602
7603 /* Add a CHILD_DIE as the last child of DIE.  */
7604
7605 static void
7606 add_child_die (dw_die_ref die, dw_die_ref child_die)
7607 {
7608   /* FIXME this should probably be an assert.  */
7609   if (! die || ! child_die)
7610     return;
7611   gcc_assert (die != child_die);
7612
7613   child_die->die_parent = die;
7614   if (die->die_child)
7615     {
7616       child_die->die_sib = die->die_child->die_sib;
7617       die->die_child->die_sib = child_die;
7618     }
7619   else
7620     child_die->die_sib = child_die;
7621   die->die_child = child_die;
7622 }
7623
7624 /* Move CHILD, which must be a child of PARENT or the DIE for which PARENT
7625    is the specification, to the end of PARENT's list of children.
7626    This is done by removing and re-adding it.  */
7627
7628 static void
7629 splice_child_die (dw_die_ref parent, dw_die_ref child)
7630 {
7631   dw_die_ref p;
7632
7633   /* We want the declaration DIE from inside the class, not the
7634      specification DIE at toplevel.  */
7635   if (child->die_parent != parent)
7636     {
7637       dw_die_ref tmp = get_AT_ref (child, DW_AT_specification);
7638
7639       if (tmp)
7640         child = tmp;
7641     }
7642
7643   gcc_assert (child->die_parent == parent
7644               || (child->die_parent
7645                   == get_AT_ref (parent, DW_AT_specification)));
7646
7647   for (p = child->die_parent->die_child; ; p = p->die_sib)
7648     if (p->die_sib == child)
7649       {
7650         remove_child_with_prev (child, p);
7651         break;
7652       }
7653
7654   add_child_die (parent, child);
7655 }
7656
7657 /* Return a pointer to a newly created DIE node.  */
7658
7659 static inline dw_die_ref
7660 new_die (enum dwarf_tag tag_value, dw_die_ref parent_die, tree t)
7661 {
7662   dw_die_ref die = GGC_CNEW (die_node);
7663
7664   die->die_tag = tag_value;
7665
7666   if (parent_die != NULL)
7667     add_child_die (parent_die, die);
7668   else
7669     {
7670       limbo_die_node *limbo_node;
7671
7672       limbo_node = GGC_CNEW (limbo_die_node);
7673       limbo_node->die = die;
7674       limbo_node->created_for = t;
7675       limbo_node->next = limbo_die_list;
7676       limbo_die_list = limbo_node;
7677     }
7678
7679   return die;
7680 }
7681
7682 /* Return the DIE associated with the given type specifier.  */
7683
7684 static inline dw_die_ref
7685 lookup_type_die (tree type)
7686 {
7687   return TYPE_SYMTAB_DIE (type);
7688 }
7689
7690 /* Equate a DIE to a given type specifier.  */
7691
7692 static inline void
7693 equate_type_number_to_die (tree type, dw_die_ref type_die)
7694 {
7695   TYPE_SYMTAB_DIE (type) = type_die;
7696 }
7697
7698 /* Returns a hash value for X (which really is a die_struct).  */
7699
7700 static hashval_t
7701 decl_die_table_hash (const void *x)
7702 {
7703   return (hashval_t) ((const_dw_die_ref) x)->decl_id;
7704 }
7705
7706 /* Return nonzero if decl_id of die_struct X is the same as UID of decl *Y.  */
7707
7708 static int
7709 decl_die_table_eq (const void *x, const void *y)
7710 {
7711   return (((const_dw_die_ref) x)->decl_id == DECL_UID ((const_tree) y));
7712 }
7713
7714 /* Return the DIE associated with a given declaration.  */
7715
7716 static inline dw_die_ref
7717 lookup_decl_die (tree decl)
7718 {
7719   return (dw_die_ref) htab_find_with_hash (decl_die_table, decl, DECL_UID (decl));
7720 }
7721
7722 /* Returns a hash value for X (which really is a var_loc_list).  */
7723
7724 static hashval_t
7725 decl_loc_table_hash (const void *x)
7726 {
7727   return (hashval_t) ((const var_loc_list *) x)->decl_id;
7728 }
7729
7730 /* Return nonzero if decl_id of var_loc_list X is the same as
7731    UID of decl *Y.  */
7732
7733 static int
7734 decl_loc_table_eq (const void *x, const void *y)
7735 {
7736   return (((const var_loc_list *) x)->decl_id == DECL_UID ((const_tree) y));
7737 }
7738
7739 /* Return the var_loc list associated with a given declaration.  */
7740
7741 static inline var_loc_list *
7742 lookup_decl_loc (const_tree decl)
7743 {
7744   if (!decl_loc_table)
7745     return NULL;
7746   return (var_loc_list *)
7747     htab_find_with_hash (decl_loc_table, decl, DECL_UID (decl));
7748 }
7749
7750 /* Equate a DIE to a particular declaration.  */
7751
7752 static void
7753 equate_decl_number_to_die (tree decl, dw_die_ref decl_die)
7754 {
7755   unsigned int decl_id = DECL_UID (decl);
7756   void **slot;
7757
7758   slot = htab_find_slot_with_hash (decl_die_table, decl, decl_id, INSERT);
7759   *slot = decl_die;
7760   decl_die->decl_id = decl_id;
7761 }
7762
7763 /* Add a variable location node to the linked list for DECL.  */
7764
7765 static void
7766 add_var_loc_to_decl (tree decl, struct var_loc_node *loc)
7767 {
7768   unsigned int decl_id = DECL_UID (decl);
7769   var_loc_list *temp;
7770   void **slot;
7771
7772   slot = htab_find_slot_with_hash (decl_loc_table, decl, decl_id, INSERT);
7773   if (*slot == NULL)
7774     {
7775       temp = GGC_CNEW (var_loc_list);
7776       temp->decl_id = decl_id;
7777       *slot = temp;
7778     }
7779   else
7780     temp = (var_loc_list *) *slot;
7781
7782   if (temp->last)
7783     {
7784       /* If the current location is the same as the end of the list,
7785          and either both or neither of the locations is uninitialized,
7786          we have nothing to do.  */
7787       if ((!rtx_equal_p (NOTE_VAR_LOCATION_LOC (temp->last->var_loc_note),
7788                          NOTE_VAR_LOCATION_LOC (loc->var_loc_note)))
7789           || ((NOTE_VAR_LOCATION_STATUS (temp->last->var_loc_note)
7790                != NOTE_VAR_LOCATION_STATUS (loc->var_loc_note))
7791               && ((NOTE_VAR_LOCATION_STATUS (temp->last->var_loc_note)
7792                    == VAR_INIT_STATUS_UNINITIALIZED)
7793                   || (NOTE_VAR_LOCATION_STATUS (loc->var_loc_note)
7794                       == VAR_INIT_STATUS_UNINITIALIZED))))
7795         {
7796           /* Add LOC to the end of list and update LAST.  */
7797           temp->last->next = loc;
7798           temp->last = loc;
7799         }
7800     }
7801   else
7802     {
7803       temp->first = loc;
7804       temp->last = loc;
7805     }
7806 }
7807 \f
7808 /* Keep track of the number of spaces used to indent the
7809    output of the debugging routines that print the structure of
7810    the DIE internal representation.  */
7811 static int print_indent;
7812
7813 /* Indent the line the number of spaces given by print_indent.  */
7814
7815 static inline void
7816 print_spaces (FILE *outfile)
7817 {
7818   fprintf (outfile, "%*s", print_indent, "");
7819 }
7820
7821 /* Print a type signature in hex.  */
7822
7823 static inline void
7824 print_signature (FILE *outfile, char *sig)
7825 {
7826   int i;
7827
7828   for (i = 0; i < DWARF_TYPE_SIGNATURE_SIZE; i++)
7829     fprintf (outfile, "%02x", sig[i] & 0xff);
7830 }
7831
7832 /* Print the information associated with a given DIE, and its children.
7833    This routine is a debugging aid only.  */
7834
7835 static void
7836 print_die (dw_die_ref die, FILE *outfile)
7837 {
7838   dw_attr_ref a;
7839   dw_die_ref c;
7840   unsigned ix;
7841
7842   print_spaces (outfile);
7843   fprintf (outfile, "DIE %4ld: %s\n",
7844            die->die_offset, dwarf_tag_name (die->die_tag));
7845   print_spaces (outfile);
7846   fprintf (outfile, "  abbrev id: %lu", die->die_abbrev);
7847   fprintf (outfile, " offset: %ld\n", die->die_offset);
7848   if (dwarf_version >= 4 && die->die_id.die_type_node)
7849     {
7850       print_spaces (outfile);
7851       fprintf (outfile, "  signature: ");
7852       print_signature (outfile, die->die_id.die_type_node->signature);
7853       fprintf (outfile, "\n");
7854     }
7855
7856   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
7857     {
7858       print_spaces (outfile);
7859       fprintf (outfile, "  %s: ", dwarf_attr_name (a->dw_attr));
7860
7861       switch (AT_class (a))
7862         {
7863         case dw_val_class_addr:
7864           fprintf (outfile, "address");
7865           break;
7866         case dw_val_class_offset:
7867           fprintf (outfile, "offset");
7868           break;
7869         case dw_val_class_loc:
7870           fprintf (outfile, "location descriptor");
7871           break;
7872         case dw_val_class_loc_list:
7873           fprintf (outfile, "location list -> label:%s",
7874                    AT_loc_list (a)->ll_symbol);
7875           break;
7876         case dw_val_class_range_list:
7877           fprintf (outfile, "range list");
7878           break;
7879         case dw_val_class_const:
7880           fprintf (outfile, HOST_WIDE_INT_PRINT_DEC, AT_int (a));
7881           break;
7882         case dw_val_class_unsigned_const:
7883           fprintf (outfile, HOST_WIDE_INT_PRINT_UNSIGNED, AT_unsigned (a));
7884           break;
7885         case dw_val_class_const_double:
7886           fprintf (outfile, "constant ("HOST_WIDE_INT_PRINT_DEC","\
7887                             HOST_WIDE_INT_PRINT_UNSIGNED")",
7888                    a->dw_attr_val.v.val_double.high,
7889                    a->dw_attr_val.v.val_double.low);
7890           break;
7891         case dw_val_class_vec:
7892           fprintf (outfile, "floating-point or vector constant");
7893           break;
7894         case dw_val_class_flag:
7895           fprintf (outfile, "%u", AT_flag (a));
7896           break;
7897         case dw_val_class_die_ref:
7898           if (AT_ref (a) != NULL)
7899             {
7900               if (dwarf_version >= 4 && AT_ref (a)->die_id.die_type_node)
7901                 {
7902                   fprintf (outfile, "die -> signature: ");
7903                   print_signature (outfile,
7904                                    AT_ref (a)->die_id.die_type_node->signature);
7905                 }
7906               else if (dwarf_version < 4 && AT_ref (a)->die_id.die_symbol)
7907                 fprintf (outfile, "die -> label: %s",
7908                          AT_ref (a)->die_id.die_symbol);
7909               else
7910                 fprintf (outfile, "die -> %ld", AT_ref (a)->die_offset);
7911             }
7912           else
7913             fprintf (outfile, "die -> <null>");
7914           break;
7915         case dw_val_class_lbl_id:
7916         case dw_val_class_lineptr:
7917         case dw_val_class_macptr:
7918           fprintf (outfile, "label: %s", AT_lbl (a));
7919           break;
7920         case dw_val_class_str:
7921           if (AT_string (a) != NULL)
7922             fprintf (outfile, "\"%s\"", AT_string (a));
7923           else
7924             fprintf (outfile, "<null>");
7925           break;
7926         case dw_val_class_file:
7927           fprintf (outfile, "\"%s\" (%d)", AT_file (a)->filename,
7928                    AT_file (a)->emitted_number);
7929           break;
7930         case dw_val_class_data8:
7931           {
7932             int i;
7933
7934             for (i = 0; i < 8; i++)
7935               fprintf (outfile, "%02x", a->dw_attr_val.v.val_data8[i]);
7936             break;
7937           }
7938         default:
7939           break;
7940         }
7941
7942       fprintf (outfile, "\n");
7943     }
7944
7945   if (die->die_child != NULL)
7946     {
7947       print_indent += 4;
7948       FOR_EACH_CHILD (die, c, print_die (c, outfile));
7949       print_indent -= 4;
7950     }
7951   if (print_indent == 0)
7952     fprintf (outfile, "\n");
7953 }
7954
7955 /* Print the contents of the source code line number correspondence table.
7956    This routine is a debugging aid only.  */
7957
7958 static void
7959 print_dwarf_line_table (FILE *outfile)
7960 {
7961   unsigned i;
7962   dw_line_info_ref line_info;
7963
7964   fprintf (outfile, "\n\nDWARF source line information\n");
7965   for (i = 1; i < line_info_table_in_use; i++)
7966     {
7967       line_info = &line_info_table[i];
7968       fprintf (outfile, "%5d: %4ld %6ld\n", i,
7969                line_info->dw_file_num,
7970                line_info->dw_line_num);
7971     }
7972
7973   fprintf (outfile, "\n\n");
7974 }
7975
7976 /* Print the information collected for a given DIE.  */
7977
7978 void
7979 debug_dwarf_die (dw_die_ref die)
7980 {
7981   print_die (die, stderr);
7982 }
7983
7984 /* Print all DWARF information collected for the compilation unit.
7985    This routine is a debugging aid only.  */
7986
7987 void
7988 debug_dwarf (void)
7989 {
7990   print_indent = 0;
7991   print_die (comp_unit_die, stderr);
7992   if (! DWARF2_ASM_LINE_DEBUG_INFO)
7993     print_dwarf_line_table (stderr);
7994 }
7995 \f
7996 /* Start a new compilation unit DIE for an include file.  OLD_UNIT is the CU
7997    for the enclosing include file, if any.  BINCL_DIE is the DW_TAG_GNU_BINCL
7998    DIE that marks the start of the DIEs for this include file.  */
7999
8000 static dw_die_ref
8001 push_new_compile_unit (dw_die_ref old_unit, dw_die_ref bincl_die)
8002 {
8003   const char *filename = get_AT_string (bincl_die, DW_AT_name);
8004   dw_die_ref new_unit = gen_compile_unit_die (filename);
8005
8006   new_unit->die_sib = old_unit;
8007   return new_unit;
8008 }
8009
8010 /* Close an include-file CU and reopen the enclosing one.  */
8011
8012 static dw_die_ref
8013 pop_compile_unit (dw_die_ref old_unit)
8014 {
8015   dw_die_ref new_unit = old_unit->die_sib;
8016
8017   old_unit->die_sib = NULL;
8018   return new_unit;
8019 }
8020
8021 #define CHECKSUM(FOO) md5_process_bytes (&(FOO), sizeof (FOO), ctx)
8022 #define CHECKSUM_STRING(FOO) md5_process_bytes ((FOO), strlen (FOO), ctx)
8023
8024 /* Calculate the checksum of a location expression.  */
8025
8026 static inline void
8027 loc_checksum (dw_loc_descr_ref loc, struct md5_ctx *ctx)
8028 {
8029   int tem;
8030
8031   tem = (loc->dtprel << 8) | ((unsigned int) loc->dw_loc_opc);
8032   CHECKSUM (tem);
8033   CHECKSUM (loc->dw_loc_oprnd1);
8034   CHECKSUM (loc->dw_loc_oprnd2);
8035 }
8036
8037 /* Calculate the checksum of an attribute.  */
8038
8039 static void
8040 attr_checksum (dw_attr_ref at, struct md5_ctx *ctx, int *mark)
8041 {
8042   dw_loc_descr_ref loc;
8043   rtx r;
8044
8045   CHECKSUM (at->dw_attr);
8046
8047   /* We don't care that this was compiled with a different compiler
8048      snapshot; if the output is the same, that's what matters.  */
8049   if (at->dw_attr == DW_AT_producer)
8050     return;
8051
8052   switch (AT_class (at))
8053     {
8054     case dw_val_class_const:
8055       CHECKSUM (at->dw_attr_val.v.val_int);
8056       break;
8057     case dw_val_class_unsigned_const:
8058       CHECKSUM (at->dw_attr_val.v.val_unsigned);
8059       break;
8060     case dw_val_class_const_double:
8061       CHECKSUM (at->dw_attr_val.v.val_double);
8062       break;
8063     case dw_val_class_vec:
8064       CHECKSUM (at->dw_attr_val.v.val_vec);
8065       break;
8066     case dw_val_class_flag:
8067       CHECKSUM (at->dw_attr_val.v.val_flag);
8068       break;
8069     case dw_val_class_str:
8070       CHECKSUM_STRING (AT_string (at));
8071       break;
8072
8073     case dw_val_class_addr:
8074       r = AT_addr (at);
8075       gcc_assert (GET_CODE (r) == SYMBOL_REF);
8076       CHECKSUM_STRING (XSTR (r, 0));
8077       break;
8078
8079     case dw_val_class_offset:
8080       CHECKSUM (at->dw_attr_val.v.val_offset);
8081       break;
8082
8083     case dw_val_class_loc:
8084       for (loc = AT_loc (at); loc; loc = loc->dw_loc_next)
8085         loc_checksum (loc, ctx);
8086       break;
8087
8088     case dw_val_class_die_ref:
8089       die_checksum (AT_ref (at), ctx, mark);
8090       break;
8091
8092     case dw_val_class_fde_ref:
8093     case dw_val_class_lbl_id:
8094     case dw_val_class_lineptr:
8095     case dw_val_class_macptr:
8096       break;
8097
8098     case dw_val_class_file:
8099       CHECKSUM_STRING (AT_file (at)->filename);
8100       break;
8101
8102     case dw_val_class_data8:
8103       CHECKSUM (at->dw_attr_val.v.val_data8);
8104       break;
8105
8106     default:
8107       break;
8108     }
8109 }
8110
8111 /* Calculate the checksum of a DIE.  */
8112
8113 static void
8114 die_checksum (dw_die_ref die, struct md5_ctx *ctx, int *mark)
8115 {
8116   dw_die_ref c;
8117   dw_attr_ref a;
8118   unsigned ix;
8119
8120   /* To avoid infinite recursion.  */
8121   if (die->die_mark)
8122     {
8123       CHECKSUM (die->die_mark);
8124       return;
8125     }
8126   die->die_mark = ++(*mark);
8127
8128   CHECKSUM (die->die_tag);
8129
8130   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
8131     attr_checksum (a, ctx, mark);
8132
8133   FOR_EACH_CHILD (die, c, die_checksum (c, ctx, mark));
8134 }
8135
8136 #undef CHECKSUM
8137 #undef CHECKSUM_STRING
8138
8139 /* For DWARF-4 types, include the trailing NULL when checksumming strings.  */
8140 #define CHECKSUM(FOO) md5_process_bytes (&(FOO), sizeof (FOO), ctx)
8141 #define CHECKSUM_STRING(FOO) md5_process_bytes ((FOO), strlen (FOO) + 1, ctx)
8142 #define CHECKSUM_SLEB128(FOO) checksum_sleb128 ((FOO), ctx)
8143 #define CHECKSUM_ULEB128(FOO) checksum_uleb128 ((FOO), ctx)
8144 #define CHECKSUM_ATTR(FOO) \
8145   if (FOO) attr_checksum_ordered (die->die_tag, (FOO), ctx, mark)
8146
8147 /* Calculate the checksum of a number in signed LEB128 format.  */
8148
8149 static void
8150 checksum_sleb128 (HOST_WIDE_INT value, struct md5_ctx *ctx)
8151 {
8152   unsigned char byte;
8153   bool more;
8154
8155   while (1)
8156     {
8157       byte = (value & 0x7f);
8158       value >>= 7;
8159       more = !((value == 0 && (byte & 0x40) == 0)
8160                 || (value == -1 && (byte & 0x40) != 0));
8161       if (more)
8162         byte |= 0x80;
8163       CHECKSUM (byte);
8164       if (!more)
8165         break;
8166     }
8167 }
8168
8169 /* Calculate the checksum of a number in unsigned LEB128 format.  */
8170
8171 static void
8172 checksum_uleb128 (unsigned HOST_WIDE_INT value, struct md5_ctx *ctx)
8173 {
8174   while (1)
8175     {
8176       unsigned char byte = (value & 0x7f);
8177       value >>= 7;
8178       if (value != 0)
8179         /* More bytes to follow.  */
8180         byte |= 0x80;
8181       CHECKSUM (byte);
8182       if (value == 0)
8183         break;
8184     }
8185 }
8186
8187 /* Checksum the context of the DIE.  This adds the names of any
8188    surrounding namespaces or structures to the checksum.  */
8189
8190 static void
8191 checksum_die_context (dw_die_ref die, struct md5_ctx *ctx)
8192 {
8193   const char *name;
8194   dw_die_ref spec;
8195   int tag = die->die_tag;
8196
8197   if (tag != DW_TAG_namespace
8198       && tag != DW_TAG_structure_type
8199       && tag != DW_TAG_class_type)
8200     return;
8201
8202   name = get_AT_string (die, DW_AT_name);
8203
8204   spec = get_AT_ref (die, DW_AT_specification);
8205   if (spec != NULL)
8206     die = spec;
8207
8208   if (die->die_parent != NULL)
8209     checksum_die_context (die->die_parent, ctx);
8210
8211   CHECKSUM_ULEB128 ('C');
8212   CHECKSUM_ULEB128 (tag);
8213   if (name != NULL)
8214     CHECKSUM_STRING (name);
8215 }
8216
8217 /* Calculate the checksum of a location expression.  */
8218
8219 static inline void
8220 loc_checksum_ordered (dw_loc_descr_ref loc, struct md5_ctx *ctx)
8221 {
8222   /* Special case for lone DW_OP_plus_uconst: checksum as if the location
8223      were emitted as a DW_FORM_sdata instead of a location expression.  */
8224   if (loc->dw_loc_opc == DW_OP_plus_uconst && loc->dw_loc_next == NULL)
8225     {
8226       CHECKSUM_ULEB128 (DW_FORM_sdata);
8227       CHECKSUM_SLEB128 ((HOST_WIDE_INT) loc->dw_loc_oprnd1.v.val_unsigned);
8228       return;
8229     }
8230
8231   /* Otherwise, just checksum the raw location expression.  */
8232   while (loc != NULL)
8233     {
8234       CHECKSUM_ULEB128 (loc->dw_loc_opc);
8235       CHECKSUM (loc->dw_loc_oprnd1);
8236       CHECKSUM (loc->dw_loc_oprnd2);
8237       loc = loc->dw_loc_next;
8238     }
8239 }
8240
8241 /* Calculate the checksum of an attribute.  */
8242
8243 static void
8244 attr_checksum_ordered (enum dwarf_tag tag, dw_attr_ref at,
8245                        struct md5_ctx *ctx, int *mark)
8246 {
8247   dw_loc_descr_ref loc;
8248   rtx r;
8249
8250   if (AT_class (at) == dw_val_class_die_ref)
8251     {
8252       dw_die_ref target_die = AT_ref (at);
8253
8254       /* For pointer and reference types, we checksum only the (qualified)
8255          name of the target type (if there is a name).  For friend entries,
8256          we checksum only the (qualified) name of the target type or function.
8257          This allows the checksum to remain the same whether the target type
8258          is complete or not.  */
8259       if ((at->dw_attr == DW_AT_type
8260            && (tag == DW_TAG_pointer_type
8261                || tag == DW_TAG_reference_type
8262                || tag == DW_TAG_ptr_to_member_type))
8263           || (at->dw_attr == DW_AT_friend
8264               && tag == DW_TAG_friend))
8265         {
8266           dw_attr_ref name_attr = get_AT (target_die, DW_AT_name);
8267
8268           if (name_attr != NULL)
8269             {
8270               dw_die_ref decl = get_AT_ref (target_die, DW_AT_specification);
8271
8272               if (decl == NULL)
8273                 decl = target_die;
8274               CHECKSUM_ULEB128 ('N');
8275               CHECKSUM_ULEB128 (at->dw_attr);
8276               if (decl->die_parent != NULL)
8277                 checksum_die_context (decl->die_parent, ctx);
8278               CHECKSUM_ULEB128 ('E');
8279               CHECKSUM_STRING (AT_string (name_attr));
8280               return;
8281             }
8282         }
8283
8284       /* For all other references to another DIE, we check to see if the
8285          target DIE has already been visited.  If it has, we emit a
8286          backward reference; if not, we descend recursively.  */
8287       if (target_die->die_mark > 0)
8288         {
8289           CHECKSUM_ULEB128 ('R');
8290           CHECKSUM_ULEB128 (at->dw_attr);
8291           CHECKSUM_ULEB128 (target_die->die_mark);
8292         }
8293       else
8294         {
8295           dw_die_ref decl = get_AT_ref (target_die, DW_AT_specification);
8296
8297           if (decl == NULL)
8298             decl = target_die;
8299           target_die->die_mark = ++(*mark);
8300           CHECKSUM_ULEB128 ('T');
8301           CHECKSUM_ULEB128 (at->dw_attr);
8302           if (decl->die_parent != NULL)
8303             checksum_die_context (decl->die_parent, ctx);
8304           die_checksum_ordered (target_die, ctx, mark);
8305         }
8306       return;
8307     }
8308
8309   CHECKSUM_ULEB128 ('A');
8310   CHECKSUM_ULEB128 (at->dw_attr);
8311
8312   switch (AT_class (at))
8313     {
8314     case dw_val_class_const:
8315       CHECKSUM_ULEB128 (DW_FORM_sdata);
8316       CHECKSUM_SLEB128 (at->dw_attr_val.v.val_int);
8317       break;
8318
8319     case dw_val_class_unsigned_const:
8320       CHECKSUM_ULEB128 (DW_FORM_sdata);
8321       CHECKSUM_SLEB128 ((int) at->dw_attr_val.v.val_unsigned);
8322       break;
8323
8324     case dw_val_class_const_double:
8325       CHECKSUM_ULEB128 (DW_FORM_block);
8326       CHECKSUM_ULEB128 (sizeof (at->dw_attr_val.v.val_double));
8327       CHECKSUM (at->dw_attr_val.v.val_double);
8328       break;
8329
8330     case dw_val_class_vec:
8331       CHECKSUM_ULEB128 (DW_FORM_block);
8332       CHECKSUM_ULEB128 (sizeof (at->dw_attr_val.v.val_vec));
8333       CHECKSUM (at->dw_attr_val.v.val_vec);
8334       break;
8335
8336     case dw_val_class_flag:
8337       CHECKSUM_ULEB128 (DW_FORM_flag);
8338       CHECKSUM_ULEB128 (at->dw_attr_val.v.val_flag ? 1 : 0);
8339       break;
8340
8341     case dw_val_class_str:
8342       CHECKSUM_ULEB128 (DW_FORM_string);
8343       CHECKSUM_STRING (AT_string (at));
8344       break;
8345
8346     case dw_val_class_addr:
8347       r = AT_addr (at);
8348       gcc_assert (GET_CODE (r) == SYMBOL_REF);
8349       CHECKSUM_ULEB128 (DW_FORM_string);
8350       CHECKSUM_STRING (XSTR (r, 0));
8351       break;
8352
8353     case dw_val_class_offset:
8354       CHECKSUM_ULEB128 (DW_FORM_sdata);
8355       CHECKSUM_ULEB128 (at->dw_attr_val.v.val_offset);
8356       break;
8357
8358     case dw_val_class_loc:
8359       for (loc = AT_loc (at); loc; loc = loc->dw_loc_next)
8360         loc_checksum_ordered (loc, ctx);
8361       break;
8362
8363     case dw_val_class_fde_ref:
8364     case dw_val_class_lbl_id:
8365     case dw_val_class_lineptr:
8366     case dw_val_class_macptr:
8367       break;
8368
8369     case dw_val_class_file:
8370       CHECKSUM_ULEB128 (DW_FORM_string);
8371       CHECKSUM_STRING (AT_file (at)->filename);
8372       break;
8373
8374     case dw_val_class_data8:
8375       CHECKSUM (at->dw_attr_val.v.val_data8);
8376       break;
8377
8378     default:
8379       break;
8380     }
8381 }
8382
8383 struct checksum_attributes
8384 {
8385   dw_attr_ref at_name;
8386   dw_attr_ref at_type;
8387   dw_attr_ref at_friend;
8388   dw_attr_ref at_accessibility;
8389   dw_attr_ref at_address_class;
8390   dw_attr_ref at_allocated;
8391   dw_attr_ref at_artificial;
8392   dw_attr_ref at_associated;
8393   dw_attr_ref at_binary_scale;
8394   dw_attr_ref at_bit_offset;
8395   dw_attr_ref at_bit_size;
8396   dw_attr_ref at_bit_stride;
8397   dw_attr_ref at_byte_size;
8398   dw_attr_ref at_byte_stride;
8399   dw_attr_ref at_const_value;
8400   dw_attr_ref at_containing_type;
8401   dw_attr_ref at_count;
8402   dw_attr_ref at_data_location;
8403   dw_attr_ref at_data_member_location;
8404   dw_attr_ref at_decimal_scale;
8405   dw_attr_ref at_decimal_sign;
8406   dw_attr_ref at_default_value;
8407   dw_attr_ref at_digit_count;
8408   dw_attr_ref at_discr;
8409   dw_attr_ref at_discr_list;
8410   dw_attr_ref at_discr_value;
8411   dw_attr_ref at_encoding;
8412   dw_attr_ref at_endianity;
8413   dw_attr_ref at_explicit;
8414   dw_attr_ref at_is_optional;
8415   dw_attr_ref at_location;
8416   dw_attr_ref at_lower_bound;
8417   dw_attr_ref at_mutable;
8418   dw_attr_ref at_ordering;
8419   dw_attr_ref at_picture_string;
8420   dw_attr_ref at_prototyped;
8421   dw_attr_ref at_small;
8422   dw_attr_ref at_segment;
8423   dw_attr_ref at_string_length;
8424   dw_attr_ref at_threads_scaled;
8425   dw_attr_ref at_upper_bound;
8426   dw_attr_ref at_use_location;
8427   dw_attr_ref at_use_UTF8;
8428   dw_attr_ref at_variable_parameter;
8429   dw_attr_ref at_virtuality;
8430   dw_attr_ref at_visibility;
8431   dw_attr_ref at_vtable_elem_location;
8432 };
8433
8434 /* Collect the attributes that we will want to use for the checksum.  */
8435
8436 static void
8437 collect_checksum_attributes (struct checksum_attributes *attrs, dw_die_ref die)
8438 {
8439   dw_attr_ref a;
8440   unsigned ix;
8441
8442   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
8443     {
8444       switch (a->dw_attr)
8445         {
8446         case DW_AT_name:
8447           attrs->at_name = a;
8448           break;
8449         case DW_AT_type:
8450           attrs->at_type = a;
8451           break;
8452         case DW_AT_friend:
8453           attrs->at_friend = a;
8454           break;
8455         case DW_AT_accessibility:
8456           attrs->at_accessibility = a;
8457           break;
8458         case DW_AT_address_class:
8459           attrs->at_address_class = a;
8460           break;
8461         case DW_AT_allocated:
8462           attrs->at_allocated = a;
8463           break;
8464         case DW_AT_artificial:
8465           attrs->at_artificial = a;
8466           break;
8467         case DW_AT_associated:
8468           attrs->at_associated = a;
8469           break;
8470         case DW_AT_binary_scale:
8471           attrs->at_binary_scale = a;
8472           break;
8473         case DW_AT_bit_offset:
8474           attrs->at_bit_offset = a;
8475           break;
8476         case DW_AT_bit_size:
8477           attrs->at_bit_size = a;
8478           break;
8479         case DW_AT_bit_stride:
8480           attrs->at_bit_stride = a;
8481           break;
8482         case DW_AT_byte_size:
8483           attrs->at_byte_size = a;
8484           break;
8485         case DW_AT_byte_stride:
8486           attrs->at_byte_stride = a;
8487           break;
8488         case DW_AT_const_value:
8489           attrs->at_const_value = a;
8490           break;
8491         case DW_AT_containing_type:
8492           attrs->at_containing_type = a;
8493           break;
8494         case DW_AT_count:
8495           attrs->at_count = a;
8496           break;
8497         case DW_AT_data_location:
8498           attrs->at_data_location = a;
8499           break;
8500         case DW_AT_data_member_location:
8501           attrs->at_data_member_location = a;
8502           break;
8503         case DW_AT_decimal_scale:
8504           attrs->at_decimal_scale = a;
8505           break;
8506         case DW_AT_decimal_sign:
8507           attrs->at_decimal_sign = a;
8508           break;
8509         case DW_AT_default_value:
8510           attrs->at_default_value = a;
8511           break;
8512         case DW_AT_digit_count:
8513           attrs->at_digit_count = a;
8514           break;
8515         case DW_AT_discr:
8516           attrs->at_discr = a;
8517           break;
8518         case DW_AT_discr_list:
8519           attrs->at_discr_list = a;
8520           break;
8521         case DW_AT_discr_value:
8522           attrs->at_discr_value = a;
8523           break;
8524         case DW_AT_encoding:
8525           attrs->at_encoding = a;
8526           break;
8527         case DW_AT_endianity:
8528           attrs->at_endianity = a;
8529           break;
8530         case DW_AT_explicit:
8531           attrs->at_explicit = a;
8532           break;
8533         case DW_AT_is_optional:
8534           attrs->at_is_optional = a;
8535           break;
8536         case DW_AT_location:
8537           attrs->at_location = a;
8538           break;
8539         case DW_AT_lower_bound:
8540           attrs->at_lower_bound = a;
8541           break;
8542         case DW_AT_mutable:
8543           attrs->at_mutable = a;
8544           break;
8545         case DW_AT_ordering:
8546           attrs->at_ordering = a;
8547           break;
8548         case DW_AT_picture_string:
8549           attrs->at_picture_string = a;
8550           break;
8551         case DW_AT_prototyped:
8552           attrs->at_prototyped = a;
8553           break;
8554         case DW_AT_small:
8555           attrs->at_small = a;
8556           break;
8557         case DW_AT_segment:
8558           attrs->at_segment = a;
8559           break;
8560         case DW_AT_string_length:
8561           attrs->at_string_length = a;
8562           break;
8563         case DW_AT_threads_scaled:
8564           attrs->at_threads_scaled = a;
8565           break;
8566         case DW_AT_upper_bound:
8567           attrs->at_upper_bound = a;
8568           break;
8569         case DW_AT_use_location:
8570           attrs->at_use_location = a;
8571           break;
8572         case DW_AT_use_UTF8:
8573           attrs->at_use_UTF8 = a;
8574           break;
8575         case DW_AT_variable_parameter:
8576           attrs->at_variable_parameter = a;
8577           break;
8578         case DW_AT_virtuality:
8579           attrs->at_virtuality = a;
8580           break;
8581         case DW_AT_visibility:
8582           attrs->at_visibility = a;
8583           break;
8584         case DW_AT_vtable_elem_location:
8585           attrs->at_vtable_elem_location = a;
8586           break;
8587         default:
8588           break;
8589         }
8590     }
8591 }
8592
8593 /* Calculate the checksum of a DIE, using an ordered subset of attributes.  */
8594
8595 static void
8596 die_checksum_ordered (dw_die_ref die, struct md5_ctx *ctx, int *mark)
8597 {
8598   dw_die_ref c;
8599   dw_die_ref decl;
8600   struct checksum_attributes attrs;
8601
8602   CHECKSUM_ULEB128 ('D');
8603   CHECKSUM_ULEB128 (die->die_tag);
8604
8605   memset (&attrs, 0, sizeof (attrs));
8606
8607   decl = get_AT_ref (die, DW_AT_specification);
8608   if (decl != NULL)
8609     collect_checksum_attributes (&attrs, decl);
8610   collect_checksum_attributes (&attrs, die);
8611
8612   CHECKSUM_ATTR (attrs.at_name);
8613   CHECKSUM_ATTR (attrs.at_accessibility);
8614   CHECKSUM_ATTR (attrs.at_address_class);
8615   CHECKSUM_ATTR (attrs.at_allocated);
8616   CHECKSUM_ATTR (attrs.at_artificial);
8617   CHECKSUM_ATTR (attrs.at_associated);
8618   CHECKSUM_ATTR (attrs.at_binary_scale);
8619   CHECKSUM_ATTR (attrs.at_bit_offset);
8620   CHECKSUM_ATTR (attrs.at_bit_size);
8621   CHECKSUM_ATTR (attrs.at_bit_stride);
8622   CHECKSUM_ATTR (attrs.at_byte_size);
8623   CHECKSUM_ATTR (attrs.at_byte_stride);
8624   CHECKSUM_ATTR (attrs.at_const_value);
8625   CHECKSUM_ATTR (attrs.at_containing_type);
8626   CHECKSUM_ATTR (attrs.at_count);
8627   CHECKSUM_ATTR (attrs.at_data_location);
8628   CHECKSUM_ATTR (attrs.at_data_member_location);
8629   CHECKSUM_ATTR (attrs.at_decimal_scale);
8630   CHECKSUM_ATTR (attrs.at_decimal_sign);
8631   CHECKSUM_ATTR (attrs.at_default_value);
8632   CHECKSUM_ATTR (attrs.at_digit_count);
8633   CHECKSUM_ATTR (attrs.at_discr);
8634   CHECKSUM_ATTR (attrs.at_discr_list);
8635   CHECKSUM_ATTR (attrs.at_discr_value);
8636   CHECKSUM_ATTR (attrs.at_encoding);
8637   CHECKSUM_ATTR (attrs.at_endianity);
8638   CHECKSUM_ATTR (attrs.at_explicit);
8639   CHECKSUM_ATTR (attrs.at_is_optional);
8640   CHECKSUM_ATTR (attrs.at_location);
8641   CHECKSUM_ATTR (attrs.at_lower_bound);
8642   CHECKSUM_ATTR (attrs.at_mutable);
8643   CHECKSUM_ATTR (attrs.at_ordering);
8644   CHECKSUM_ATTR (attrs.at_picture_string);
8645   CHECKSUM_ATTR (attrs.at_prototyped);
8646   CHECKSUM_ATTR (attrs.at_small);
8647   CHECKSUM_ATTR (attrs.at_segment);
8648   CHECKSUM_ATTR (attrs.at_string_length);
8649   CHECKSUM_ATTR (attrs.at_threads_scaled);
8650   CHECKSUM_ATTR (attrs.at_upper_bound);
8651   CHECKSUM_ATTR (attrs.at_use_location);
8652   CHECKSUM_ATTR (attrs.at_use_UTF8);
8653   CHECKSUM_ATTR (attrs.at_variable_parameter);
8654   CHECKSUM_ATTR (attrs.at_virtuality);
8655   CHECKSUM_ATTR (attrs.at_visibility);
8656   CHECKSUM_ATTR (attrs.at_vtable_elem_location);
8657   CHECKSUM_ATTR (attrs.at_type);
8658   CHECKSUM_ATTR (attrs.at_friend);
8659
8660   /* Checksum the child DIEs, except for nested types and member functions.  */
8661   c = die->die_child;
8662   if (c) do {
8663     dw_attr_ref name_attr;
8664
8665     c = c->die_sib;
8666     name_attr = get_AT (c, DW_AT_name);
8667     if ((is_type_die (c) || c->die_tag == DW_TAG_subprogram)
8668         && name_attr != NULL)
8669       {
8670         CHECKSUM_ULEB128 ('S');
8671         CHECKSUM_ULEB128 (c->die_tag);
8672         CHECKSUM_STRING (AT_string (name_attr));
8673       }
8674     else
8675       {
8676         /* Mark this DIE so it gets processed when unmarking.  */
8677         if (c->die_mark == 0)
8678           c->die_mark = -1;
8679         die_checksum_ordered (c, ctx, mark);
8680       }
8681   } while (c != die->die_child);
8682
8683   CHECKSUM_ULEB128 (0);
8684 }
8685
8686 #undef CHECKSUM
8687 #undef CHECKSUM_STRING
8688 #undef CHECKSUM_ATTR
8689 #undef CHECKSUM_LEB128
8690 #undef CHECKSUM_ULEB128
8691
8692 /* Generate the type signature for DIE.  This is computed by generating an
8693    MD5 checksum over the DIE's tag, its relevant attributes, and its
8694    children.  Attributes that are references to other DIEs are processed
8695    by recursion, using the MARK field to prevent infinite recursion.
8696    If the DIE is nested inside a namespace or another type, we also
8697    need to include that context in the signature.  The lower 64 bits
8698    of the resulting MD5 checksum comprise the signature.  */
8699
8700 static void
8701 generate_type_signature (dw_die_ref die, comdat_type_node *type_node)
8702 {
8703   int mark;
8704   const char *name;
8705   unsigned char checksum[16];
8706   struct md5_ctx ctx;
8707   dw_die_ref decl;
8708
8709   name = get_AT_string (die, DW_AT_name);
8710   decl = get_AT_ref (die, DW_AT_specification);
8711
8712   /* First, compute a signature for just the type name (and its surrounding
8713      context, if any.  This is stored in the type unit DIE for link-time
8714      ODR (one-definition rule) checking.  */
8715
8716   if (is_cxx() && name != NULL)
8717     {
8718       md5_init_ctx (&ctx);
8719
8720       /* Checksum the names of surrounding namespaces and structures.  */
8721       if (decl != NULL && decl->die_parent != NULL)
8722         checksum_die_context (decl->die_parent, &ctx);
8723
8724       md5_process_bytes (&die->die_tag, sizeof (die->die_tag), &ctx);
8725       md5_process_bytes (name, strlen (name) + 1, &ctx);
8726       md5_finish_ctx (&ctx, checksum);
8727
8728       add_AT_data8 (type_node->root_die, DW_AT_GNU_odr_signature, &checksum[8]);
8729     }
8730
8731   /* Next, compute the complete type signature.  */
8732
8733   md5_init_ctx (&ctx);
8734   mark = 1;
8735   die->die_mark = mark;
8736
8737   /* Checksum the names of surrounding namespaces and structures.  */
8738   if (decl != NULL && decl->die_parent != NULL)
8739     checksum_die_context (decl->die_parent, &ctx);
8740
8741   /* Checksum the DIE and its children.  */
8742   die_checksum_ordered (die, &ctx, &mark);
8743   unmark_all_dies (die);
8744   md5_finish_ctx (&ctx, checksum);
8745
8746   /* Store the signature in the type node and link the type DIE and the
8747      type node together.  */
8748   memcpy (type_node->signature, &checksum[16 - DWARF_TYPE_SIGNATURE_SIZE],
8749           DWARF_TYPE_SIGNATURE_SIZE);
8750   die->die_id.die_type_node = type_node;
8751   type_node->type_die = die;
8752
8753   /* If the DIE is a specification, link its declaration to the type node
8754      as well.  */
8755   if (decl != NULL)
8756     decl->die_id.die_type_node = type_node;
8757 }
8758
8759 /* Do the location expressions look same?  */
8760 static inline int
8761 same_loc_p (dw_loc_descr_ref loc1, dw_loc_descr_ref loc2, int *mark)
8762 {
8763   return loc1->dw_loc_opc == loc2->dw_loc_opc
8764          && same_dw_val_p (&loc1->dw_loc_oprnd1, &loc2->dw_loc_oprnd1, mark)
8765          && same_dw_val_p (&loc1->dw_loc_oprnd2, &loc2->dw_loc_oprnd2, mark);
8766 }
8767
8768 /* Do the values look the same?  */
8769 static int
8770 same_dw_val_p (const dw_val_node *v1, const dw_val_node *v2, int *mark)
8771 {
8772   dw_loc_descr_ref loc1, loc2;
8773   rtx r1, r2;
8774
8775   if (v1->val_class != v2->val_class)
8776     return 0;
8777
8778   switch (v1->val_class)
8779     {
8780     case dw_val_class_const:
8781       return v1->v.val_int == v2->v.val_int;
8782     case dw_val_class_unsigned_const:
8783       return v1->v.val_unsigned == v2->v.val_unsigned;
8784     case dw_val_class_const_double:
8785       return v1->v.val_double.high == v2->v.val_double.high
8786              && v1->v.val_double.low == v2->v.val_double.low;
8787     case dw_val_class_vec:
8788       if (v1->v.val_vec.length != v2->v.val_vec.length
8789           || v1->v.val_vec.elt_size != v2->v.val_vec.elt_size)
8790         return 0;
8791       if (memcmp (v1->v.val_vec.array, v2->v.val_vec.array,
8792                   v1->v.val_vec.length * v1->v.val_vec.elt_size))
8793         return 0;
8794       return 1;
8795     case dw_val_class_flag:
8796       return v1->v.val_flag == v2->v.val_flag;
8797     case dw_val_class_str:
8798       return !strcmp(v1->v.val_str->str, v2->v.val_str->str);
8799
8800     case dw_val_class_addr:
8801       r1 = v1->v.val_addr;
8802       r2 = v2->v.val_addr;
8803       if (GET_CODE (r1) != GET_CODE (r2))
8804         return 0;
8805       return !rtx_equal_p (r1, r2);
8806
8807     case dw_val_class_offset:
8808       return v1->v.val_offset == v2->v.val_offset;
8809
8810     case dw_val_class_loc:
8811       for (loc1 = v1->v.val_loc, loc2 = v2->v.val_loc;
8812            loc1 && loc2;
8813            loc1 = loc1->dw_loc_next, loc2 = loc2->dw_loc_next)
8814         if (!same_loc_p (loc1, loc2, mark))
8815           return 0;
8816       return !loc1 && !loc2;
8817
8818     case dw_val_class_die_ref:
8819       return same_die_p (v1->v.val_die_ref.die, v2->v.val_die_ref.die, mark);
8820
8821     case dw_val_class_fde_ref:
8822     case dw_val_class_lbl_id:
8823     case dw_val_class_lineptr:
8824     case dw_val_class_macptr:
8825       return 1;
8826
8827     case dw_val_class_file:
8828       return v1->v.val_file == v2->v.val_file;
8829
8830     case dw_val_class_data8:
8831       return !memcmp (v1->v.val_data8, v2->v.val_data8, 8);
8832
8833     default:
8834       return 1;
8835     }
8836 }
8837
8838 /* Do the attributes look the same?  */
8839
8840 static int
8841 same_attr_p (dw_attr_ref at1, dw_attr_ref at2, int *mark)
8842 {
8843   if (at1->dw_attr != at2->dw_attr)
8844     return 0;
8845
8846   /* We don't care that this was compiled with a different compiler
8847      snapshot; if the output is the same, that's what matters. */
8848   if (at1->dw_attr == DW_AT_producer)
8849     return 1;
8850
8851   return same_dw_val_p (&at1->dw_attr_val, &at2->dw_attr_val, mark);
8852 }
8853
8854 /* Do the dies look the same?  */
8855
8856 static int
8857 same_die_p (dw_die_ref die1, dw_die_ref die2, int *mark)
8858 {
8859   dw_die_ref c1, c2;
8860   dw_attr_ref a1;
8861   unsigned ix;
8862
8863   /* To avoid infinite recursion.  */
8864   if (die1->die_mark)
8865     return die1->die_mark == die2->die_mark;
8866   die1->die_mark = die2->die_mark = ++(*mark);
8867
8868   if (die1->die_tag != die2->die_tag)
8869     return 0;
8870
8871   if (VEC_length (dw_attr_node, die1->die_attr)
8872       != VEC_length (dw_attr_node, die2->die_attr))
8873     return 0;
8874
8875   for (ix = 0; VEC_iterate (dw_attr_node, die1->die_attr, ix, a1); ix++)
8876     if (!same_attr_p (a1, VEC_index (dw_attr_node, die2->die_attr, ix), mark))
8877       return 0;
8878
8879   c1 = die1->die_child;
8880   c2 = die2->die_child;
8881   if (! c1)
8882     {
8883       if (c2)
8884         return 0;
8885     }
8886   else
8887     for (;;)
8888       {
8889         if (!same_die_p (c1, c2, mark))
8890           return 0;
8891         c1 = c1->die_sib;
8892         c2 = c2->die_sib;
8893         if (c1 == die1->die_child)
8894           {
8895             if (c2 == die2->die_child)
8896               break;
8897             else
8898               return 0;
8899           }
8900     }
8901
8902   return 1;
8903 }
8904
8905 /* Do the dies look the same?  Wrapper around same_die_p.  */
8906
8907 static int
8908 same_die_p_wrap (dw_die_ref die1, dw_die_ref die2)
8909 {
8910   int mark = 0;
8911   int ret = same_die_p (die1, die2, &mark);
8912
8913   unmark_all_dies (die1);
8914   unmark_all_dies (die2);
8915
8916   return ret;
8917 }
8918
8919 /* The prefix to attach to symbols on DIEs in the current comdat debug
8920    info section.  */
8921 static char *comdat_symbol_id;
8922
8923 /* The index of the current symbol within the current comdat CU.  */
8924 static unsigned int comdat_symbol_number;
8925
8926 /* Calculate the MD5 checksum of the compilation unit DIE UNIT_DIE and its
8927    children, and set comdat_symbol_id accordingly.  */
8928
8929 static void
8930 compute_section_prefix (dw_die_ref unit_die)
8931 {
8932   const char *die_name = get_AT_string (unit_die, DW_AT_name);
8933   const char *base = die_name ? lbasename (die_name) : "anonymous";
8934   char *name = XALLOCAVEC (char, strlen (base) + 64);
8935   char *p;
8936   int i, mark;
8937   unsigned char checksum[16];
8938   struct md5_ctx ctx;
8939
8940   /* Compute the checksum of the DIE, then append part of it as hex digits to
8941      the name filename of the unit.  */
8942
8943   md5_init_ctx (&ctx);
8944   mark = 0;
8945   die_checksum (unit_die, &ctx, &mark);
8946   unmark_all_dies (unit_die);
8947   md5_finish_ctx (&ctx, checksum);
8948
8949   sprintf (name, "%s.", base);
8950   clean_symbol_name (name);
8951
8952   p = name + strlen (name);
8953   for (i = 0; i < 4; i++)
8954     {
8955       sprintf (p, "%.2x", checksum[i]);
8956       p += 2;
8957     }
8958
8959   comdat_symbol_id = unit_die->die_id.die_symbol = xstrdup (name);
8960   comdat_symbol_number = 0;
8961 }
8962
8963 /* Returns nonzero if DIE represents a type, in the sense of TYPE_P.  */
8964
8965 static int
8966 is_type_die (dw_die_ref die)
8967 {
8968   switch (die->die_tag)
8969     {
8970     case DW_TAG_array_type:
8971     case DW_TAG_class_type:
8972     case DW_TAG_interface_type:
8973     case DW_TAG_enumeration_type:
8974     case DW_TAG_pointer_type:
8975     case DW_TAG_reference_type:
8976     case DW_TAG_string_type:
8977     case DW_TAG_structure_type:
8978     case DW_TAG_subroutine_type:
8979     case DW_TAG_union_type:
8980     case DW_TAG_ptr_to_member_type:
8981     case DW_TAG_set_type:
8982     case DW_TAG_subrange_type:
8983     case DW_TAG_base_type:
8984     case DW_TAG_const_type:
8985     case DW_TAG_file_type:
8986     case DW_TAG_packed_type:
8987     case DW_TAG_volatile_type:
8988     case DW_TAG_typedef:
8989       return 1;
8990     default:
8991       return 0;
8992     }
8993 }
8994
8995 /* Returns 1 iff C is the sort of DIE that should go into a COMDAT CU.
8996    Basically, we want to choose the bits that are likely to be shared between
8997    compilations (types) and leave out the bits that are specific to individual
8998    compilations (functions).  */
8999
9000 static int
9001 is_comdat_die (dw_die_ref c)
9002 {
9003   /* I think we want to leave base types and __vtbl_ptr_type in the main CU, as
9004      we do for stabs.  The advantage is a greater likelihood of sharing between
9005      objects that don't include headers in the same order (and therefore would
9006      put the base types in a different comdat).  jason 8/28/00 */
9007
9008   if (c->die_tag == DW_TAG_base_type)
9009     return 0;
9010
9011   if (c->die_tag == DW_TAG_pointer_type
9012       || c->die_tag == DW_TAG_reference_type
9013       || c->die_tag == DW_TAG_const_type
9014       || c->die_tag == DW_TAG_volatile_type)
9015     {
9016       dw_die_ref t = get_AT_ref (c, DW_AT_type);
9017
9018       return t ? is_comdat_die (t) : 0;
9019     }
9020
9021   return is_type_die (c);
9022 }
9023
9024 /* Returns 1 iff C is the sort of DIE that might be referred to from another
9025    compilation unit.  */
9026
9027 static int
9028 is_symbol_die (dw_die_ref c)
9029 {
9030   return (is_type_die (c)
9031           || is_declaration_die (c)
9032           || c->die_tag == DW_TAG_namespace
9033           || c->die_tag == DW_TAG_module);
9034 }
9035
9036 static char *
9037 gen_internal_sym (const char *prefix)
9038 {
9039   char buf[256];
9040
9041   ASM_GENERATE_INTERNAL_LABEL (buf, prefix, label_num++);
9042   return xstrdup (buf);
9043 }
9044
9045 /* Assign symbols to all worthy DIEs under DIE.  */
9046
9047 static void
9048 assign_symbol_names (dw_die_ref die)
9049 {
9050   dw_die_ref c;
9051
9052   if (is_symbol_die (die))
9053     {
9054       if (comdat_symbol_id)
9055         {
9056           char *p = XALLOCAVEC (char, strlen (comdat_symbol_id) + 64);
9057
9058           sprintf (p, "%s.%s.%x", DIE_LABEL_PREFIX,
9059                    comdat_symbol_id, comdat_symbol_number++);
9060           die->die_id.die_symbol = xstrdup (p);
9061         }
9062       else
9063         die->die_id.die_symbol = gen_internal_sym ("LDIE");
9064     }
9065
9066   FOR_EACH_CHILD (die, c, assign_symbol_names (c));
9067 }
9068
9069 struct cu_hash_table_entry
9070 {
9071   dw_die_ref cu;
9072   unsigned min_comdat_num, max_comdat_num;
9073   struct cu_hash_table_entry *next;
9074 };
9075
9076 /* Routines to manipulate hash table of CUs.  */
9077 static hashval_t
9078 htab_cu_hash (const void *of)
9079 {
9080   const struct cu_hash_table_entry *const entry =
9081     (const struct cu_hash_table_entry *) of;
9082
9083   return htab_hash_string (entry->cu->die_id.die_symbol);
9084 }
9085
9086 static int
9087 htab_cu_eq (const void *of1, const void *of2)
9088 {
9089   const struct cu_hash_table_entry *const entry1 =
9090     (const struct cu_hash_table_entry *) of1;
9091   const struct die_struct *const entry2 = (const struct die_struct *) of2;
9092
9093   return !strcmp (entry1->cu->die_id.die_symbol, entry2->die_id.die_symbol);
9094 }
9095
9096 static void
9097 htab_cu_del (void *what)
9098 {
9099   struct cu_hash_table_entry *next,
9100     *entry = (struct cu_hash_table_entry *) what;
9101
9102   while (entry)
9103     {
9104       next = entry->next;
9105       free (entry);
9106       entry = next;
9107     }
9108 }
9109
9110 /* Check whether we have already seen this CU and set up SYM_NUM
9111    accordingly.  */
9112 static int
9113 check_duplicate_cu (dw_die_ref cu, htab_t htable, unsigned int *sym_num)
9114 {
9115   struct cu_hash_table_entry dummy;
9116   struct cu_hash_table_entry **slot, *entry, *last = &dummy;
9117
9118   dummy.max_comdat_num = 0;
9119
9120   slot = (struct cu_hash_table_entry **)
9121     htab_find_slot_with_hash (htable, cu, htab_hash_string (cu->die_id.die_symbol),
9122         INSERT);
9123   entry = *slot;
9124
9125   for (; entry; last = entry, entry = entry->next)
9126     {
9127       if (same_die_p_wrap (cu, entry->cu))
9128         break;
9129     }
9130
9131   if (entry)
9132     {
9133       *sym_num = entry->min_comdat_num;
9134       return 1;
9135     }
9136
9137   entry = XCNEW (struct cu_hash_table_entry);
9138   entry->cu = cu;
9139   entry->min_comdat_num = *sym_num = last->max_comdat_num;
9140   entry->next = *slot;
9141   *slot = entry;
9142
9143   return 0;
9144 }
9145
9146 /* Record SYM_NUM to record of CU in HTABLE.  */
9147 static void
9148 record_comdat_symbol_number (dw_die_ref cu, htab_t htable, unsigned int sym_num)
9149 {
9150   struct cu_hash_table_entry **slot, *entry;
9151
9152   slot = (struct cu_hash_table_entry **)
9153     htab_find_slot_with_hash (htable, cu, htab_hash_string (cu->die_id.die_symbol),
9154         NO_INSERT);
9155   entry = *slot;
9156
9157   entry->max_comdat_num = sym_num;
9158 }
9159
9160 /* Traverse the DIE (which is always comp_unit_die), and set up
9161    additional compilation units for each of the include files we see
9162    bracketed by BINCL/EINCL.  */
9163
9164 static void
9165 break_out_includes (dw_die_ref die)
9166 {
9167   dw_die_ref c;
9168   dw_die_ref unit = NULL;
9169   limbo_die_node *node, **pnode;
9170   htab_t cu_hash_table;
9171
9172   c = die->die_child;
9173   if (c) do {
9174     dw_die_ref prev = c;
9175     c = c->die_sib;
9176     while (c->die_tag == DW_TAG_GNU_BINCL || c->die_tag == DW_TAG_GNU_EINCL
9177            || (unit && is_comdat_die (c)))
9178       {
9179         dw_die_ref next = c->die_sib;
9180
9181         /* This DIE is for a secondary CU; remove it from the main one.  */
9182         remove_child_with_prev (c, prev);
9183
9184         if (c->die_tag == DW_TAG_GNU_BINCL)
9185           unit = push_new_compile_unit (unit, c);
9186         else if (c->die_tag == DW_TAG_GNU_EINCL)
9187           unit = pop_compile_unit (unit);
9188         else
9189           add_child_die (unit, c);
9190         c = next;
9191         if (c == die->die_child)
9192           break;
9193       }
9194   } while (c != die->die_child);
9195
9196 #if 0
9197   /* We can only use this in debugging, since the frontend doesn't check
9198      to make sure that we leave every include file we enter.  */
9199   gcc_assert (!unit);
9200 #endif
9201
9202   assign_symbol_names (die);
9203   cu_hash_table = htab_create (10, htab_cu_hash, htab_cu_eq, htab_cu_del);
9204   for (node = limbo_die_list, pnode = &limbo_die_list;
9205        node;
9206        node = node->next)
9207     {
9208       int is_dupl;
9209
9210       compute_section_prefix (node->die);
9211       is_dupl = check_duplicate_cu (node->die, cu_hash_table,
9212                         &comdat_symbol_number);
9213       assign_symbol_names (node->die);
9214       if (is_dupl)
9215         *pnode = node->next;
9216       else
9217         {
9218           pnode = &node->next;
9219           record_comdat_symbol_number (node->die, cu_hash_table,
9220                 comdat_symbol_number);
9221         }
9222     }
9223   htab_delete (cu_hash_table);
9224 }
9225
9226 /* Return non-zero if this DIE is a declaration.  */
9227
9228 static int
9229 is_declaration_die (dw_die_ref die)
9230 {
9231   dw_attr_ref a;
9232   unsigned ix;
9233
9234   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
9235     if (a->dw_attr == DW_AT_declaration)
9236       return 1;
9237
9238   return 0;
9239 }
9240
9241 /* Return non-zero if this is a type DIE that should be moved to a
9242    COMDAT .debug_types section.  */
9243
9244 static int
9245 should_move_die_to_comdat (dw_die_ref die)
9246 {
9247   switch (die->die_tag)
9248     {
9249     case DW_TAG_class_type:
9250     case DW_TAG_structure_type:
9251     case DW_TAG_enumeration_type:
9252     case DW_TAG_union_type:
9253       /* Don't move declarations or inlined instances.  */
9254       if (is_declaration_die (die) || get_AT (die, DW_AT_abstract_origin))
9255         return 0;
9256       return 1;
9257     case DW_TAG_array_type:
9258     case DW_TAG_interface_type:
9259     case DW_TAG_pointer_type:
9260     case DW_TAG_reference_type:
9261     case DW_TAG_string_type:
9262     case DW_TAG_subroutine_type:
9263     case DW_TAG_ptr_to_member_type:
9264     case DW_TAG_set_type:
9265     case DW_TAG_subrange_type:
9266     case DW_TAG_base_type:
9267     case DW_TAG_const_type:
9268     case DW_TAG_file_type:
9269     case DW_TAG_packed_type:
9270     case DW_TAG_volatile_type:
9271     case DW_TAG_typedef:
9272     default:
9273       return 0;
9274     }
9275 }
9276
9277 /* Make a clone of DIE.  */
9278
9279 static dw_die_ref
9280 clone_die (dw_die_ref die)
9281 {
9282   dw_die_ref clone;
9283   dw_attr_ref a;
9284   unsigned ix;
9285
9286   clone = GGC_CNEW (die_node);
9287   clone->die_tag = die->die_tag;
9288
9289   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
9290     add_dwarf_attr (clone, a);
9291
9292   return clone;
9293 }
9294
9295 /* Make a clone of the tree rooted at DIE.  */
9296
9297 static dw_die_ref
9298 clone_tree (dw_die_ref die)
9299 {
9300   dw_die_ref c;
9301   dw_die_ref clone = clone_die (die);
9302
9303   FOR_EACH_CHILD (die, c, add_child_die (clone, clone_tree(c)));
9304
9305   return clone;
9306 }
9307
9308 /* Make a clone of DIE as a declaration.  */
9309
9310 static dw_die_ref
9311 clone_as_declaration (dw_die_ref die)
9312 {
9313   dw_die_ref clone;
9314   dw_die_ref decl;
9315   dw_attr_ref a;
9316   unsigned ix;
9317
9318   /* If the DIE is already a declaration, just clone it.  */
9319   if (is_declaration_die (die))
9320     return clone_die (die);
9321
9322   /* If the DIE is a specification, just clone its declaration DIE.  */
9323   decl = get_AT_ref (die, DW_AT_specification);
9324   if (decl != NULL)
9325     return clone_die (decl);
9326
9327   clone = GGC_CNEW (die_node);
9328   clone->die_tag = die->die_tag;
9329
9330   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
9331     {
9332       /* We don't want to copy over all attributes.
9333          For example we don't want DW_AT_byte_size because otherwise we will no
9334          longer have a declaration and GDB will treat it as a definition.  */
9335
9336       switch (a->dw_attr)
9337         {
9338         case DW_AT_artificial:
9339         case DW_AT_containing_type:
9340         case DW_AT_external:
9341         case DW_AT_name:
9342         case DW_AT_type:
9343         case DW_AT_virtuality:
9344         case DW_AT_MIPS_linkage_name:
9345           add_dwarf_attr (clone, a);
9346           break;
9347         case DW_AT_byte_size:
9348         default:
9349           break;
9350         }
9351     }
9352
9353   if (die->die_id.die_type_node)
9354     add_AT_die_ref (clone, DW_AT_signature, die);
9355
9356   add_AT_flag (clone, DW_AT_declaration, 1);
9357   return clone;
9358 }
9359
9360 /* Copy the declaration context to the new compile unit DIE.  This includes
9361    any surrounding namespace or type declarations.  If the DIE has an
9362    AT_specification attribute, it also includes attributes and children
9363    attached to the specification.  */
9364
9365 static void
9366 copy_declaration_context (dw_die_ref unit, dw_die_ref die)
9367 {
9368   dw_die_ref decl;
9369   dw_die_ref new_decl;
9370
9371   decl = get_AT_ref (die, DW_AT_specification);
9372   if (decl == NULL)
9373     decl = die;
9374   else
9375     {
9376       unsigned ix;
9377       dw_die_ref c;
9378       dw_attr_ref a;
9379
9380       /* Copy the type node pointer from the new DIE to the original
9381          declaration DIE so we can forward references later.  */
9382       decl->die_id.die_type_node = die->die_id.die_type_node;
9383
9384       remove_AT (die, DW_AT_specification);
9385
9386       for (ix = 0; VEC_iterate (dw_attr_node, decl->die_attr, ix, a); ix++)
9387         {
9388           if (a->dw_attr != DW_AT_name
9389               && a->dw_attr != DW_AT_declaration
9390               && a->dw_attr != DW_AT_external)
9391             add_dwarf_attr (die, a);
9392         }
9393
9394       FOR_EACH_CHILD (decl, c, add_child_die (die, clone_tree(c)));
9395     }
9396
9397   if (decl->die_parent != NULL
9398       && decl->die_parent->die_tag != DW_TAG_compile_unit
9399       && decl->die_parent->die_tag != DW_TAG_type_unit)
9400     {
9401       new_decl = copy_ancestor_tree (unit, decl, NULL);
9402       if (new_decl != NULL)
9403         {
9404           remove_AT (new_decl, DW_AT_signature);
9405           add_AT_specification (die, new_decl);
9406         }
9407     }
9408 }
9409
9410 /* Generate the skeleton ancestor tree for the given NODE, then clone
9411    the DIE and add the clone into the tree.  */
9412
9413 static void
9414 generate_skeleton_ancestor_tree (skeleton_chain_node *node)
9415 {
9416   if (node->new_die != NULL)
9417     return;
9418
9419   node->new_die = clone_as_declaration (node->old_die);
9420
9421   if (node->parent != NULL)
9422     {
9423       generate_skeleton_ancestor_tree (node->parent);
9424       add_child_die (node->parent->new_die, node->new_die);
9425     }
9426 }
9427
9428 /* Generate a skeleton tree of DIEs containing any declarations that are
9429    found in the original tree.  We traverse the tree looking for declaration
9430    DIEs, and construct the skeleton from the bottom up whenever we find one.  */
9431
9432 static void
9433 generate_skeleton_bottom_up (skeleton_chain_node *parent)
9434 {
9435   skeleton_chain_node node;
9436   dw_die_ref c;
9437   dw_die_ref first;
9438   dw_die_ref prev = NULL;
9439   dw_die_ref next = NULL;
9440
9441   node.parent = parent;
9442
9443   first = c = parent->old_die->die_child;
9444   if (c)
9445     next = c->die_sib;
9446   if (c) do {
9447     if (prev == NULL || prev->die_sib == c)
9448       prev = c;
9449     c = next;
9450     next = (c == first ? NULL : c->die_sib);
9451     node.old_die = c;
9452     node.new_die = NULL;
9453     if (is_declaration_die (c))
9454       {
9455         /* Clone the existing DIE, move the original to the skeleton
9456            tree (which is in the main CU), and put the clone, with
9457            all the original's children, where the original came from.  */
9458         dw_die_ref clone = clone_die (c);
9459         move_all_children (c, clone);
9460
9461         replace_child (c, clone, prev);
9462         generate_skeleton_ancestor_tree (parent);
9463         add_child_die (parent->new_die, c);
9464         node.new_die = c;
9465         c = clone;
9466       }
9467     generate_skeleton_bottom_up (&node);
9468   } while (next != NULL);
9469 }
9470
9471 /* Wrapper function for generate_skeleton_bottom_up.  */
9472
9473 static dw_die_ref
9474 generate_skeleton (dw_die_ref die)
9475 {
9476   skeleton_chain_node node;
9477
9478   node.old_die = die;
9479   node.new_die = NULL;
9480   node.parent = NULL;
9481
9482   /* If this type definition is nested inside another type,
9483      always leave at least a declaration in its place.  */
9484   if (die->die_parent != NULL && is_type_die (die->die_parent))
9485     node.new_die = clone_as_declaration (die);
9486
9487   generate_skeleton_bottom_up (&node);
9488   return node.new_die;
9489 }
9490
9491 /* Remove the DIE from its parent, possibly replacing it with a cloned
9492    declaration.  The original DIE will be moved to a new compile unit
9493    so that existing references to it follow it to the new location.  If
9494    any of the original DIE's descendants is a declaration, we need to
9495    replace the original DIE with a skeleton tree and move the
9496    declarations back into the skeleton tree.  */
9497
9498 static dw_die_ref
9499 remove_child_or_replace_with_skeleton (dw_die_ref child, dw_die_ref prev)
9500 {
9501   dw_die_ref skeleton;
9502
9503   skeleton = generate_skeleton (child);
9504   if (skeleton == NULL)
9505     remove_child_with_prev (child, prev);
9506   else
9507     {
9508       skeleton->die_id.die_type_node = child->die_id.die_type_node;
9509       replace_child (child, skeleton, prev);
9510     }
9511
9512   return skeleton;
9513 }
9514
9515 /* Traverse the DIE and set up additional .debug_types sections for each
9516    type worthy of being placed in a COMDAT section.  */
9517
9518 static void
9519 break_out_comdat_types (dw_die_ref die)
9520 {
9521   dw_die_ref c;
9522   dw_die_ref first;
9523   dw_die_ref prev = NULL;
9524   dw_die_ref next = NULL;
9525   dw_die_ref unit = NULL;
9526
9527   first = c = die->die_child;
9528   if (c)
9529     next = c->die_sib;
9530   if (c) do {
9531     if (prev == NULL || prev->die_sib == c)
9532       prev = c;
9533     c = next;
9534     next = (c == first ? NULL : c->die_sib);
9535     if (should_move_die_to_comdat (c))
9536       {
9537         dw_die_ref replacement;
9538         comdat_type_node_ref type_node;
9539
9540         /* Create a new type unit DIE as the root for the new tree, and
9541            add it to the list of comdat types.  */
9542         unit = new_die (DW_TAG_type_unit, NULL, NULL);
9543         add_AT_unsigned (unit, DW_AT_language,
9544                          get_AT_unsigned (comp_unit_die, DW_AT_language));
9545         type_node = GGC_CNEW (comdat_type_node);
9546         type_node->root_die = unit;
9547         type_node->next = comdat_type_list;
9548         comdat_type_list = type_node;
9549
9550         /* Generate the type signature.  */
9551         generate_type_signature (c, type_node);
9552
9553         /* Copy the declaration context, attributes, and children of the
9554            declaration into the new compile unit DIE.  */
9555         copy_declaration_context (unit, c);
9556
9557         /* Remove this DIE from the main CU.  */
9558         replacement = remove_child_or_replace_with_skeleton (c, prev);
9559
9560         /* Break out nested types into their own type units.  */
9561         break_out_comdat_types (c);
9562
9563         /* Add the DIE to the new compunit.  */
9564         add_child_die (unit, c);
9565
9566         if (replacement != NULL)
9567           c = replacement;
9568       }
9569     else if (c->die_tag == DW_TAG_namespace
9570              || c->die_tag == DW_TAG_class_type
9571              || c->die_tag == DW_TAG_structure_type
9572              || c->die_tag == DW_TAG_union_type)
9573       {
9574         /* Look for nested types that can be broken out.  */
9575         break_out_comdat_types (c);
9576       }
9577   } while (next != NULL);
9578 }
9579
9580 /* Structure to map a DIE in one CU to its copy in a comdat type unit.  */
9581
9582 struct decl_table_entry
9583 {
9584   dw_die_ref orig;
9585   dw_die_ref copy;
9586 };
9587
9588 /* Routines to manipulate hash table of copied declarations.  */
9589
9590 static hashval_t
9591 htab_decl_hash (const void *of)
9592 {
9593   const struct decl_table_entry *const entry =
9594     (const struct decl_table_entry *) of;
9595
9596   return htab_hash_pointer (entry->orig);
9597 }
9598
9599 static int
9600 htab_decl_eq (const void *of1, const void *of2)
9601 {
9602   const struct decl_table_entry *const entry1 =
9603     (const struct decl_table_entry *) of1;
9604   const struct die_struct *const entry2 = (const struct die_struct *) of2;
9605
9606   return entry1->orig == entry2;
9607 }
9608
9609 static void
9610 htab_decl_del (void *what)
9611 {
9612   struct decl_table_entry *entry = (struct decl_table_entry *) what;
9613
9614   free (entry);
9615 }
9616
9617 /* Copy DIE and its ancestors, up to, but not including, the compile unit
9618    or type unit entry, to a new tree.  Adds the new tree to UNIT and returns
9619    a pointer to the copy of DIE.  If DECL_TABLE is provided, it is used
9620    to check if the ancestor has already been copied into UNIT.  */
9621
9622 static dw_die_ref
9623 copy_ancestor_tree (dw_die_ref unit, dw_die_ref die, htab_t decl_table)
9624 {
9625   dw_die_ref parent = die->die_parent;
9626   dw_die_ref new_parent = unit;
9627   dw_die_ref copy;
9628   void **slot = NULL;
9629   struct decl_table_entry *entry = NULL;
9630
9631   if (decl_table)
9632     {
9633       /* Check if the entry has already been copied to UNIT.  */
9634       slot = htab_find_slot_with_hash (decl_table, die,
9635                                        htab_hash_pointer (die), INSERT);
9636       if (*slot != HTAB_EMPTY_ENTRY)
9637         {
9638           entry = (struct decl_table_entry *) *slot;
9639           return entry->copy;
9640         }
9641
9642       /* Record in DECL_TABLE that DIE has been copied to UNIT.  */
9643       entry = XCNEW (struct decl_table_entry);
9644       entry->orig = die;
9645       entry->copy = NULL;
9646       *slot = entry;
9647     }
9648
9649   if (parent != NULL)
9650     {
9651       dw_die_ref spec = get_AT_ref (parent, DW_AT_specification);
9652       if (spec != NULL)
9653         parent = spec;
9654       if (parent->die_tag != DW_TAG_compile_unit
9655           && parent->die_tag != DW_TAG_type_unit)
9656         new_parent = copy_ancestor_tree (unit, parent, decl_table);
9657     }
9658
9659   copy = clone_as_declaration (die);
9660   add_child_die (new_parent, copy);
9661
9662   if (decl_table != NULL)
9663     {
9664       /* Make sure the copy is marked as part of the type unit.  */
9665       copy->die_mark = 1;
9666       /* Record the pointer to the copy.  */
9667       entry->copy = copy;
9668     }
9669
9670   return copy;
9671 }
9672
9673 /* Walk the DIE and its children, looking for references to incomplete
9674    or trivial types that are unmarked (i.e., that are not in the current
9675    type_unit).  */
9676
9677 static void
9678 copy_decls_walk (dw_die_ref unit, dw_die_ref die, htab_t decl_table)
9679 {
9680   dw_die_ref c;
9681   dw_attr_ref a;
9682   unsigned ix;
9683
9684   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
9685     {
9686       if (AT_class (a) == dw_val_class_die_ref)
9687         {
9688           dw_die_ref targ = AT_ref (a);
9689           comdat_type_node_ref type_node = targ->die_id.die_type_node;
9690           void **slot;
9691           struct decl_table_entry *entry;
9692
9693           if (targ->die_mark != 0 || type_node != NULL)
9694             continue;
9695
9696           slot = htab_find_slot_with_hash (decl_table, targ,
9697                                            htab_hash_pointer (targ), INSERT);
9698
9699           if (*slot != HTAB_EMPTY_ENTRY)
9700             {
9701               /* TARG has already been copied, so we just need to
9702                  modify the reference to point to the copy.  */
9703               entry = (struct decl_table_entry *) *slot;
9704               a->dw_attr_val.v.val_die_ref.die = entry->copy;
9705             }
9706           else
9707             {
9708               dw_die_ref parent = unit;
9709               dw_die_ref copy = clone_tree (targ);
9710
9711               /* Make sure the cloned tree is marked as part of the
9712                  type unit.  */
9713               mark_dies (copy);
9714
9715               /* Record in DECL_TABLE that TARG has been copied.
9716                  Need to do this now, before the recursive call,
9717                  because DECL_TABLE may be expanded and SLOT
9718                  would no longer be a valid pointer.  */
9719               entry = XCNEW (struct decl_table_entry);
9720               entry->orig = targ;
9721               entry->copy = copy;
9722               *slot = entry;
9723
9724               /* If TARG has surrounding context, copy its ancestor tree
9725                  into the new type unit.  */
9726               if (targ->die_parent != NULL
9727                   && targ->die_parent->die_tag != DW_TAG_compile_unit
9728                   && targ->die_parent->die_tag != DW_TAG_type_unit)
9729                 parent = copy_ancestor_tree (unit, targ->die_parent,
9730                                              decl_table);
9731
9732               add_child_die (parent, copy);
9733               a->dw_attr_val.v.val_die_ref.die = copy;
9734
9735               /* Make sure the newly-copied DIE is walked.  If it was
9736                  installed in a previously-added context, it won't
9737                  get visited otherwise.  */
9738               if (parent != unit)
9739                 copy_decls_walk (unit, parent, decl_table);
9740             }
9741         }
9742     }
9743
9744   FOR_EACH_CHILD (die, c, copy_decls_walk (unit, c, decl_table));
9745 }
9746
9747 /* Copy declarations for "unworthy" types into the new comdat section.
9748    Incomplete types, modified types, and certain other types aren't broken
9749    out into comdat sections of their own, so they don't have a signature,
9750    and we need to copy the declaration into the same section so that we
9751    don't have an external reference.  */
9752
9753 static void
9754 copy_decls_for_unworthy_types (dw_die_ref unit)
9755 {
9756   htab_t decl_table;
9757
9758   mark_dies (unit);
9759   decl_table = htab_create (10, htab_decl_hash, htab_decl_eq, htab_decl_del);
9760   copy_decls_walk (unit, unit, decl_table);
9761   htab_delete (decl_table);
9762   unmark_dies (unit);
9763 }
9764
9765 /* Traverse the DIE and add a sibling attribute if it may have the
9766    effect of speeding up access to siblings.  To save some space,
9767    avoid generating sibling attributes for DIE's without children.  */
9768
9769 static void
9770 add_sibling_attributes (dw_die_ref die)
9771 {
9772   dw_die_ref c;
9773
9774   if (! die->die_child)
9775     return;
9776
9777   if (die->die_parent && die != die->die_parent->die_child)
9778     add_AT_die_ref (die, DW_AT_sibling, die->die_sib);
9779
9780   FOR_EACH_CHILD (die, c, add_sibling_attributes (c));
9781 }
9782
9783 /* Output all location lists for the DIE and its children.  */
9784
9785 static void
9786 output_location_lists (dw_die_ref die)
9787 {
9788   dw_die_ref c;
9789   dw_attr_ref a;
9790   unsigned ix;
9791
9792   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
9793     if (AT_class (a) == dw_val_class_loc_list)
9794       output_loc_list (AT_loc_list (a));
9795
9796   FOR_EACH_CHILD (die, c, output_location_lists (c));
9797 }
9798
9799 /* The format of each DIE (and its attribute value pairs) is encoded in an
9800    abbreviation table.  This routine builds the abbreviation table and assigns
9801    a unique abbreviation id for each abbreviation entry.  The children of each
9802    die are visited recursively.  */
9803
9804 static void
9805 build_abbrev_table (dw_die_ref die)
9806 {
9807   unsigned long abbrev_id;
9808   unsigned int n_alloc;
9809   dw_die_ref c;
9810   dw_attr_ref a;
9811   unsigned ix;
9812
9813   /* Scan the DIE references, and mark as external any that refer to
9814      DIEs from other CUs (i.e. those which are not marked).  */
9815   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
9816     if (AT_class (a) == dw_val_class_die_ref
9817         && AT_ref (a)->die_mark == 0)
9818       {
9819         gcc_assert (dwarf_version >= 4 || AT_ref (a)->die_id.die_symbol);
9820         set_AT_ref_external (a, 1);
9821       }
9822
9823   for (abbrev_id = 1; abbrev_id < abbrev_die_table_in_use; ++abbrev_id)
9824     {
9825       dw_die_ref abbrev = abbrev_die_table[abbrev_id];
9826       dw_attr_ref die_a, abbrev_a;
9827       unsigned ix;
9828       bool ok = true;
9829
9830       if (abbrev->die_tag != die->die_tag)
9831         continue;
9832       if ((abbrev->die_child != NULL) != (die->die_child != NULL))
9833         continue;
9834
9835       if (VEC_length (dw_attr_node, abbrev->die_attr)
9836           != VEC_length (dw_attr_node, die->die_attr))
9837         continue;
9838
9839       for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, die_a); ix++)
9840         {
9841           abbrev_a = VEC_index (dw_attr_node, abbrev->die_attr, ix);
9842           if ((abbrev_a->dw_attr != die_a->dw_attr)
9843               || (value_format (abbrev_a) != value_format (die_a)))
9844             {
9845               ok = false;
9846               break;
9847             }
9848         }
9849       if (ok)
9850         break;
9851     }
9852
9853   if (abbrev_id >= abbrev_die_table_in_use)
9854     {
9855       if (abbrev_die_table_in_use >= abbrev_die_table_allocated)
9856         {
9857           n_alloc = abbrev_die_table_allocated + ABBREV_DIE_TABLE_INCREMENT;
9858           abbrev_die_table = GGC_RESIZEVEC (dw_die_ref, abbrev_die_table,
9859                                             n_alloc);
9860
9861           memset (&abbrev_die_table[abbrev_die_table_allocated], 0,
9862                  (n_alloc - abbrev_die_table_allocated) * sizeof (dw_die_ref));
9863           abbrev_die_table_allocated = n_alloc;
9864         }
9865
9866       ++abbrev_die_table_in_use;
9867       abbrev_die_table[abbrev_id] = die;
9868     }
9869
9870   die->die_abbrev = abbrev_id;
9871   FOR_EACH_CHILD (die, c, build_abbrev_table (c));
9872 }
9873 \f
9874 /* Return the power-of-two number of bytes necessary to represent VALUE.  */
9875
9876 static int
9877 constant_size (unsigned HOST_WIDE_INT value)
9878 {
9879   int log;
9880
9881   if (value == 0)
9882     log = 0;
9883   else
9884     log = floor_log2 (value);
9885
9886   log = log / 8;
9887   log = 1 << (floor_log2 (log) + 1);
9888
9889   return log;
9890 }
9891
9892 /* Return the size of a DIE as it is represented in the
9893    .debug_info section.  */
9894
9895 static unsigned long
9896 size_of_die (dw_die_ref die)
9897 {
9898   unsigned long size = 0;
9899   dw_attr_ref a;
9900   unsigned ix;
9901
9902   size += size_of_uleb128 (die->die_abbrev);
9903   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
9904     {
9905       switch (AT_class (a))
9906         {
9907         case dw_val_class_addr:
9908           size += DWARF2_ADDR_SIZE;
9909           break;
9910         case dw_val_class_offset:
9911           size += DWARF_OFFSET_SIZE;
9912           break;
9913         case dw_val_class_loc:
9914           {
9915             unsigned long lsize = size_of_locs (AT_loc (a));
9916
9917             /* Block length.  */
9918             size += constant_size (lsize);
9919             size += lsize;
9920           }
9921           break;
9922         case dw_val_class_loc_list:
9923           size += DWARF_OFFSET_SIZE;
9924           break;
9925         case dw_val_class_range_list:
9926           size += DWARF_OFFSET_SIZE;
9927           break;
9928         case dw_val_class_const:
9929           size += size_of_sleb128 (AT_int (a));
9930           break;
9931         case dw_val_class_unsigned_const:
9932           size += constant_size (AT_unsigned (a));
9933           break;
9934         case dw_val_class_const_double:
9935           size += 2 * HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR;
9936           if (HOST_BITS_PER_WIDE_INT >= 64)
9937             size++; /* block */
9938           break;
9939         case dw_val_class_vec:
9940           size += constant_size (a->dw_attr_val.v.val_vec.length
9941                                  * a->dw_attr_val.v.val_vec.elt_size)
9942                   + a->dw_attr_val.v.val_vec.length
9943                     * a->dw_attr_val.v.val_vec.elt_size; /* block */
9944           break;
9945         case dw_val_class_flag:
9946           size += 1;
9947           break;
9948         case dw_val_class_die_ref:
9949           if (AT_ref_external (a))
9950             {
9951               /* In DWARF4, we use DW_FORM_sig8; for earlier versions
9952                  we use DW_FORM_ref_addr.  In DWARF2, DW_FORM_ref_addr
9953                  is sized by target address length, whereas in DWARF3
9954                  it's always sized as an offset.  */
9955               if (dwarf_version >= 4)
9956                 size += DWARF_TYPE_SIGNATURE_SIZE;
9957               else if (dwarf_version == 2)
9958                 size += DWARF2_ADDR_SIZE;
9959               else
9960                 size += DWARF_OFFSET_SIZE;
9961             }
9962           else
9963             size += DWARF_OFFSET_SIZE;
9964           break;
9965         case dw_val_class_fde_ref:
9966           size += DWARF_OFFSET_SIZE;
9967           break;
9968         case dw_val_class_lbl_id:
9969           size += DWARF2_ADDR_SIZE;
9970           break;
9971         case dw_val_class_lineptr:
9972         case dw_val_class_macptr:
9973           size += DWARF_OFFSET_SIZE;
9974           break;
9975         case dw_val_class_str:
9976           if (AT_string_form (a) == DW_FORM_strp)
9977             size += DWARF_OFFSET_SIZE;
9978           else
9979             size += strlen (a->dw_attr_val.v.val_str->str) + 1;
9980           break;
9981         case dw_val_class_file:
9982           size += constant_size (maybe_emit_file (a->dw_attr_val.v.val_file));
9983           break;
9984         case dw_val_class_data8:
9985           size += 8;
9986           break;
9987         default:
9988           gcc_unreachable ();
9989         }
9990     }
9991
9992   return size;
9993 }
9994
9995 /* Size the debugging information associated with a given DIE.  Visits the
9996    DIE's children recursively.  Updates the global variable next_die_offset, on
9997    each time through.  Uses the current value of next_die_offset to update the
9998    die_offset field in each DIE.  */
9999
10000 static void
10001 calc_die_sizes (dw_die_ref die)
10002 {
10003   dw_die_ref c;
10004
10005   die->die_offset = next_die_offset;
10006   next_die_offset += size_of_die (die);
10007
10008   FOR_EACH_CHILD (die, c, calc_die_sizes (c));
10009
10010   if (die->die_child != NULL)
10011     /* Count the null byte used to terminate sibling lists.  */
10012     next_die_offset += 1;
10013 }
10014
10015 /* Set the marks for a die and its children.  We do this so
10016    that we know whether or not a reference needs to use FORM_ref_addr; only
10017    DIEs in the same CU will be marked.  We used to clear out the offset
10018    and use that as the flag, but ran into ordering problems.  */
10019
10020 static void
10021 mark_dies (dw_die_ref die)
10022 {
10023   dw_die_ref c;
10024
10025   gcc_assert (!die->die_mark);
10026
10027   die->die_mark = 1;
10028   FOR_EACH_CHILD (die, c, mark_dies (c));
10029 }
10030
10031 /* Clear the marks for a die and its children.  */
10032
10033 static void
10034 unmark_dies (dw_die_ref die)
10035 {
10036   dw_die_ref c;
10037
10038   if (dwarf_version < 4)
10039     gcc_assert (die->die_mark);
10040
10041   die->die_mark = 0;
10042   FOR_EACH_CHILD (die, c, unmark_dies (c));
10043 }
10044
10045 /* Clear the marks for a die, its children and referred dies.  */
10046
10047 static void
10048 unmark_all_dies (dw_die_ref die)
10049 {
10050   dw_die_ref c;
10051   dw_attr_ref a;
10052   unsigned ix;
10053
10054   if (!die->die_mark)
10055     return;
10056   die->die_mark = 0;
10057
10058   FOR_EACH_CHILD (die, c, unmark_all_dies (c));
10059
10060   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
10061     if (AT_class (a) == dw_val_class_die_ref)
10062       unmark_all_dies (AT_ref (a));
10063 }
10064
10065 /* Return the size of the .debug_pubnames or .debug_pubtypes table
10066    generated for the compilation unit.  */
10067
10068 static unsigned long
10069 size_of_pubnames (VEC (pubname_entry, gc) * names)
10070 {
10071   unsigned long size;
10072   unsigned i;
10073   pubname_ref p;
10074
10075   size = DWARF_PUBNAMES_HEADER_SIZE;
10076   for (i = 0; VEC_iterate (pubname_entry, names, i, p); i++)
10077     if (names != pubtype_table
10078         || p->die->die_offset != 0
10079         || !flag_eliminate_unused_debug_types)
10080       size += strlen (p->name) + DWARF_OFFSET_SIZE + 1;
10081
10082   size += DWARF_OFFSET_SIZE;
10083   return size;
10084 }
10085
10086 /* Return the size of the information in the .debug_aranges section.  */
10087
10088 static unsigned long
10089 size_of_aranges (void)
10090 {
10091   unsigned long size;
10092
10093   size = DWARF_ARANGES_HEADER_SIZE;
10094
10095   /* Count the address/length pair for this compilation unit.  */
10096   if (text_section_used)
10097     size += 2 * DWARF2_ADDR_SIZE;
10098   if (cold_text_section_used)
10099     size += 2 * DWARF2_ADDR_SIZE;
10100   size += 2 * DWARF2_ADDR_SIZE * arange_table_in_use;
10101
10102   /* Count the two zero words used to terminated the address range table.  */
10103   size += 2 * DWARF2_ADDR_SIZE;
10104   return size;
10105 }
10106 \f
10107 /* Select the encoding of an attribute value.  */
10108
10109 static enum dwarf_form
10110 value_format (dw_attr_ref a)
10111 {
10112   switch (a->dw_attr_val.val_class)
10113     {
10114     case dw_val_class_addr:
10115       /* Only very few attributes allow DW_FORM_addr.  */
10116       switch (a->dw_attr)
10117         {
10118         case DW_AT_low_pc:
10119         case DW_AT_high_pc:
10120         case DW_AT_entry_pc:
10121         case DW_AT_trampoline:
10122           return DW_FORM_addr;
10123         default:
10124           break;
10125         }
10126       switch (DWARF2_ADDR_SIZE)
10127         {
10128         case 1:
10129           return DW_FORM_data1;
10130         case 2:
10131           return DW_FORM_data2;
10132         case 4:
10133           return DW_FORM_data4;
10134         case 8:
10135           return DW_FORM_data8;
10136         default:
10137           gcc_unreachable ();
10138         }
10139     case dw_val_class_range_list:
10140     case dw_val_class_offset:
10141     case dw_val_class_loc_list:
10142       switch (DWARF_OFFSET_SIZE)
10143         {
10144         case 4:
10145           return DW_FORM_data4;
10146         case 8:
10147           return DW_FORM_data8;
10148         default:
10149           gcc_unreachable ();
10150         }
10151     case dw_val_class_loc:
10152       switch (constant_size (size_of_locs (AT_loc (a))))
10153         {
10154         case 1:
10155           return DW_FORM_block1;
10156         case 2:
10157           return DW_FORM_block2;
10158         default:
10159           gcc_unreachable ();
10160         }
10161     case dw_val_class_const:
10162       return DW_FORM_sdata;
10163     case dw_val_class_unsigned_const:
10164       switch (constant_size (AT_unsigned (a)))
10165         {
10166         case 1:
10167           return DW_FORM_data1;
10168         case 2:
10169           return DW_FORM_data2;
10170         case 4:
10171           return DW_FORM_data4;
10172         case 8:
10173           return DW_FORM_data8;
10174         default:
10175           gcc_unreachable ();
10176         }
10177     case dw_val_class_const_double:
10178       switch (HOST_BITS_PER_WIDE_INT)
10179         {
10180         case 8:
10181           return DW_FORM_data2;
10182         case 16:
10183           return DW_FORM_data4;
10184         case 32:
10185           return DW_FORM_data8;
10186         case 64:
10187         default:
10188           return DW_FORM_block1;
10189         }
10190     case dw_val_class_vec:
10191       switch (constant_size (a->dw_attr_val.v.val_vec.length
10192                              * a->dw_attr_val.v.val_vec.elt_size))
10193         {
10194         case 1:
10195           return DW_FORM_block1;
10196         case 2:
10197           return DW_FORM_block2;
10198         case 4:
10199           return DW_FORM_block4;
10200         default:
10201           gcc_unreachable ();
10202         }
10203     case dw_val_class_flag:
10204       return DW_FORM_flag;
10205     case dw_val_class_die_ref:
10206       if (AT_ref_external (a))
10207         return dwarf_version >= 4 ? DW_FORM_sig8 : DW_FORM_ref_addr;
10208       else
10209         return DW_FORM_ref;
10210     case dw_val_class_fde_ref:
10211       return DW_FORM_data;
10212     case dw_val_class_lbl_id:
10213       return DW_FORM_addr;
10214     case dw_val_class_lineptr:
10215     case dw_val_class_macptr:
10216       return DW_FORM_data;
10217     case dw_val_class_str:
10218       return AT_string_form (a);
10219     case dw_val_class_file:
10220       switch (constant_size (maybe_emit_file (a->dw_attr_val.v.val_file)))
10221         {
10222         case 1:
10223           return DW_FORM_data1;
10224         case 2:
10225           return DW_FORM_data2;
10226         case 4:
10227           return DW_FORM_data4;
10228         default:
10229           gcc_unreachable ();
10230         }
10231
10232     case dw_val_class_data8:
10233       return DW_FORM_data8;
10234
10235     default:
10236       gcc_unreachable ();
10237     }
10238 }
10239
10240 /* Output the encoding of an attribute value.  */
10241
10242 static void
10243 output_value_format (dw_attr_ref a)
10244 {
10245   enum dwarf_form form = value_format (a);
10246
10247   dw2_asm_output_data_uleb128 (form, "(%s)", dwarf_form_name (form));
10248 }
10249
10250 /* Output the .debug_abbrev section which defines the DIE abbreviation
10251    table.  */
10252
10253 static void
10254 output_abbrev_section (void)
10255 {
10256   unsigned long abbrev_id;
10257
10258   for (abbrev_id = 1; abbrev_id < abbrev_die_table_in_use; ++abbrev_id)
10259     {
10260       dw_die_ref abbrev = abbrev_die_table[abbrev_id];
10261       unsigned ix;
10262       dw_attr_ref a_attr;
10263
10264       dw2_asm_output_data_uleb128 (abbrev_id, "(abbrev code)");
10265       dw2_asm_output_data_uleb128 (abbrev->die_tag, "(TAG: %s)",
10266                                    dwarf_tag_name (abbrev->die_tag));
10267
10268       if (abbrev->die_child != NULL)
10269         dw2_asm_output_data (1, DW_children_yes, "DW_children_yes");
10270       else
10271         dw2_asm_output_data (1, DW_children_no, "DW_children_no");
10272
10273       for (ix = 0; VEC_iterate (dw_attr_node, abbrev->die_attr, ix, a_attr);
10274            ix++)
10275         {
10276           dw2_asm_output_data_uleb128 (a_attr->dw_attr, "(%s)",
10277                                        dwarf_attr_name (a_attr->dw_attr));
10278           output_value_format (a_attr);
10279         }
10280
10281       dw2_asm_output_data (1, 0, NULL);
10282       dw2_asm_output_data (1, 0, NULL);
10283     }
10284
10285   /* Terminate the table.  */
10286   dw2_asm_output_data (1, 0, NULL);
10287 }
10288
10289 /* Output a symbol we can use to refer to this DIE from another CU.  */
10290
10291 static inline void
10292 output_die_symbol (dw_die_ref die)
10293 {
10294   char *sym = die->die_id.die_symbol;
10295
10296   if (sym == 0)
10297     return;
10298
10299   if (strncmp (sym, DIE_LABEL_PREFIX, sizeof (DIE_LABEL_PREFIX) - 1) == 0)
10300     /* We make these global, not weak; if the target doesn't support
10301        .linkonce, it doesn't support combining the sections, so debugging
10302        will break.  */
10303     targetm.asm_out.globalize_label (asm_out_file, sym);
10304
10305   ASM_OUTPUT_LABEL (asm_out_file, sym);
10306 }
10307
10308 /* Return a new location list, given the begin and end range, and the
10309    expression.  */
10310
10311 static inline dw_loc_list_ref
10312 new_loc_list (dw_loc_descr_ref expr, const char *begin, const char *end,
10313               const char *section)
10314 {
10315   dw_loc_list_ref retlist = GGC_CNEW (dw_loc_list_node);
10316
10317   retlist->begin = begin;
10318   retlist->end = end;
10319   retlist->expr = expr;
10320   retlist->section = section;
10321
10322   return retlist;
10323 }
10324
10325 /* Generate a new internal symbol for this location list node, if it
10326    hasn't got one yet.  */
10327
10328 static inline void
10329 gen_llsym (dw_loc_list_ref list)
10330 {
10331   gcc_assert (!list->ll_symbol);
10332   list->ll_symbol = gen_internal_sym ("LLST");
10333 }
10334
10335 /* Output the location list given to us.  */
10336
10337 static void
10338 output_loc_list (dw_loc_list_ref list_head)
10339 {
10340   dw_loc_list_ref curr = list_head;
10341
10342   ASM_OUTPUT_LABEL (asm_out_file, list_head->ll_symbol);
10343
10344   /* Walk the location list, and output each range + expression.  */
10345   for (curr = list_head; curr != NULL; curr = curr->dw_loc_next)
10346     {
10347       unsigned long size;
10348       /* Don't output an entry that starts and ends at the same address.  */
10349       if (strcmp (curr->begin, curr->end) == 0)
10350         continue;
10351       if (!have_multiple_function_sections)
10352         {
10353           dw2_asm_output_delta (DWARF2_ADDR_SIZE, curr->begin, curr->section,
10354                                 "Location list begin address (%s)",
10355                                 list_head->ll_symbol);
10356           dw2_asm_output_delta (DWARF2_ADDR_SIZE, curr->end, curr->section,
10357                                 "Location list end address (%s)",
10358                                 list_head->ll_symbol);
10359         }
10360       else
10361         {
10362           dw2_asm_output_addr (DWARF2_ADDR_SIZE, curr->begin,
10363                                "Location list begin address (%s)",
10364                                list_head->ll_symbol);
10365           dw2_asm_output_addr (DWARF2_ADDR_SIZE, curr->end,
10366                                "Location list end address (%s)",
10367                                list_head->ll_symbol);
10368         }
10369       size = size_of_locs (curr->expr);
10370
10371       /* Output the block length for this list of location operations.  */
10372       gcc_assert (size <= 0xffff);
10373       dw2_asm_output_data (2, size, "%s", "Location expression size");
10374
10375       output_loc_sequence (curr->expr);
10376     }
10377
10378   dw2_asm_output_data (DWARF2_ADDR_SIZE, 0,
10379                        "Location list terminator begin (%s)",
10380                        list_head->ll_symbol);
10381   dw2_asm_output_data (DWARF2_ADDR_SIZE, 0,
10382                        "Location list terminator end (%s)",
10383                        list_head->ll_symbol);
10384 }
10385
10386 /* Output a type signature.  */
10387
10388 static inline void
10389 output_signature (const char *sig, const char *name)
10390 {
10391   int i;
10392
10393   for (i = 0; i < DWARF_TYPE_SIGNATURE_SIZE; i++)
10394     dw2_asm_output_data (1, sig[i], i == 0 ? "%s" : NULL, name);
10395 }
10396
10397 /* Output the DIE and its attributes.  Called recursively to generate
10398    the definitions of each child DIE.  */
10399
10400 static void
10401 output_die (dw_die_ref die)
10402 {
10403   dw_attr_ref a;
10404   dw_die_ref c;
10405   unsigned long size;
10406   unsigned ix;
10407
10408   /* If someone in another CU might refer to us, set up a symbol for
10409      them to point to.  */
10410   if (dwarf_version < 4 && die->die_id.die_symbol)
10411     output_die_symbol (die);
10412
10413   dw2_asm_output_data_uleb128 (die->die_abbrev, "(DIE (0x%lx) %s)",
10414                                (unsigned long)die->die_offset,
10415                                dwarf_tag_name (die->die_tag));
10416
10417   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
10418     {
10419       const char *name = dwarf_attr_name (a->dw_attr);
10420
10421       switch (AT_class (a))
10422         {
10423         case dw_val_class_addr:
10424           dw2_asm_output_addr_rtx (DWARF2_ADDR_SIZE, AT_addr (a), "%s", name);
10425           break;
10426
10427         case dw_val_class_offset:
10428           dw2_asm_output_data (DWARF_OFFSET_SIZE, a->dw_attr_val.v.val_offset,
10429                                "%s", name);
10430           break;
10431
10432         case dw_val_class_range_list:
10433           {
10434             char *p = strchr (ranges_section_label, '\0');
10435
10436             sprintf (p, "+" HOST_WIDE_INT_PRINT_HEX,
10437                      a->dw_attr_val.v.val_offset);
10438             dw2_asm_output_offset (DWARF_OFFSET_SIZE, ranges_section_label,
10439                                    debug_ranges_section, "%s", name);
10440             *p = '\0';
10441           }
10442           break;
10443
10444         case dw_val_class_loc:
10445           size = size_of_locs (AT_loc (a));
10446
10447           /* Output the block length for this list of location operations.  */
10448           dw2_asm_output_data (constant_size (size), size, "%s", name);
10449
10450           output_loc_sequence (AT_loc (a));
10451           break;
10452
10453         case dw_val_class_const:
10454           /* ??? It would be slightly more efficient to use a scheme like is
10455              used for unsigned constants below, but gdb 4.x does not sign
10456              extend.  Gdb 5.x does sign extend.  */
10457           dw2_asm_output_data_sleb128 (AT_int (a), "%s", name);
10458           break;
10459
10460         case dw_val_class_unsigned_const:
10461           dw2_asm_output_data (constant_size (AT_unsigned (a)),
10462                                AT_unsigned (a), "%s", name);
10463           break;
10464
10465         case dw_val_class_const_double:
10466           {
10467             unsigned HOST_WIDE_INT first, second;
10468
10469             if (HOST_BITS_PER_WIDE_INT >= 64)
10470               dw2_asm_output_data (1,
10471                                    2 * HOST_BITS_PER_WIDE_INT
10472                                    / HOST_BITS_PER_CHAR,
10473                                    NULL);
10474
10475             if (WORDS_BIG_ENDIAN)
10476               {
10477                 first = a->dw_attr_val.v.val_double.high;
10478                 second = a->dw_attr_val.v.val_double.low;
10479               }
10480             else
10481               {
10482                 first = a->dw_attr_val.v.val_double.low;
10483                 second = a->dw_attr_val.v.val_double.high;
10484               }
10485
10486             dw2_asm_output_data (HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR,
10487                                  first, name);
10488             dw2_asm_output_data (HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR,
10489                                  second, NULL);
10490           }
10491           break;
10492
10493         case dw_val_class_vec:
10494           {
10495             unsigned int elt_size = a->dw_attr_val.v.val_vec.elt_size;
10496             unsigned int len = a->dw_attr_val.v.val_vec.length;
10497             unsigned int i;
10498             unsigned char *p;
10499
10500             dw2_asm_output_data (constant_size (len * elt_size),
10501                                  len * elt_size, "%s", name);
10502             if (elt_size > sizeof (HOST_WIDE_INT))
10503               {
10504                 elt_size /= 2;
10505                 len *= 2;
10506               }
10507             for (i = 0, p = a->dw_attr_val.v.val_vec.array;
10508                  i < len;
10509                  i++, p += elt_size)
10510               dw2_asm_output_data (elt_size, extract_int (p, elt_size),
10511                                    "fp or vector constant word %u", i);
10512             break;
10513           }
10514
10515         case dw_val_class_flag:
10516           dw2_asm_output_data (1, AT_flag (a), "%s", name);
10517           break;
10518
10519         case dw_val_class_loc_list:
10520           {
10521             char *sym = AT_loc_list (a)->ll_symbol;
10522
10523             gcc_assert (sym);
10524             dw2_asm_output_offset (DWARF_OFFSET_SIZE, sym, debug_loc_section,
10525                                    "%s", name);
10526           }
10527           break;
10528
10529         case dw_val_class_die_ref:
10530           if (AT_ref_external (a))
10531             {
10532               if (dwarf_version >= 4)
10533                 {
10534                   comdat_type_node_ref type_node =
10535                     AT_ref (a)->die_id.die_type_node;
10536
10537                   gcc_assert (type_node);
10538                   output_signature (type_node->signature, name);
10539                 }
10540               else
10541                 {
10542                   char *sym = AT_ref (a)->die_id.die_symbol;
10543                   int size;
10544
10545                   gcc_assert (sym);
10546                   /* In DWARF2, DW_FORM_ref_addr is sized by target address
10547                      length, whereas in DWARF3 it's always sized as an
10548                      offset.  */
10549                   if (dwarf_version == 2)
10550                     size = DWARF2_ADDR_SIZE;
10551                   else
10552                     size = DWARF_OFFSET_SIZE;
10553                   dw2_asm_output_offset (size, sym, debug_info_section, "%s",
10554                                          name);
10555                 }
10556             }
10557           else
10558             {
10559               gcc_assert (AT_ref (a)->die_offset);
10560               dw2_asm_output_data (DWARF_OFFSET_SIZE, AT_ref (a)->die_offset,
10561                                    "%s", name);
10562             }
10563           break;
10564
10565         case dw_val_class_fde_ref:
10566           {
10567             char l1[20];
10568
10569             ASM_GENERATE_INTERNAL_LABEL (l1, FDE_LABEL,
10570                                          a->dw_attr_val.v.val_fde_index * 2);
10571             dw2_asm_output_offset (DWARF_OFFSET_SIZE, l1, debug_frame_section,
10572                                    "%s", name);
10573           }
10574           break;
10575
10576         case dw_val_class_lbl_id:
10577           dw2_asm_output_addr (DWARF2_ADDR_SIZE, AT_lbl (a), "%s", name);
10578           break;
10579
10580         case dw_val_class_lineptr:
10581           dw2_asm_output_offset (DWARF_OFFSET_SIZE, AT_lbl (a),
10582                                  debug_line_section, "%s", name);
10583           break;
10584
10585         case dw_val_class_macptr:
10586           dw2_asm_output_offset (DWARF_OFFSET_SIZE, AT_lbl (a),
10587                                  debug_macinfo_section, "%s", name);
10588           break;
10589
10590         case dw_val_class_str:
10591           if (AT_string_form (a) == DW_FORM_strp)
10592             dw2_asm_output_offset (DWARF_OFFSET_SIZE,
10593                                    a->dw_attr_val.v.val_str->label,
10594                                    debug_str_section,
10595                                    "%s: \"%s\"", name, AT_string (a));
10596           else
10597             dw2_asm_output_nstring (AT_string (a), -1, "%s", name);
10598           break;
10599
10600         case dw_val_class_file:
10601           {
10602             int f = maybe_emit_file (a->dw_attr_val.v.val_file);
10603
10604             dw2_asm_output_data (constant_size (f), f, "%s (%s)", name,
10605                                  a->dw_attr_val.v.val_file->filename);
10606             break;
10607           }
10608
10609         case dw_val_class_data8:
10610           {
10611             int i;
10612
10613             for (i = 0; i < 8; i++)
10614               dw2_asm_output_data (1, a->dw_attr_val.v.val_data8[i],
10615                                    i == 0 ? "%s" : NULL, name);
10616             break;
10617           }
10618
10619         default:
10620           gcc_unreachable ();
10621         }
10622     }
10623
10624   FOR_EACH_CHILD (die, c, output_die (c));
10625
10626   /* Add null byte to terminate sibling list.  */
10627   if (die->die_child != NULL)
10628     dw2_asm_output_data (1, 0, "end of children of DIE 0x%lx",
10629                          (unsigned long) die->die_offset);
10630 }
10631
10632 /* Output the compilation unit that appears at the beginning of the
10633    .debug_info section, and precedes the DIE descriptions.  */
10634
10635 static void
10636 output_compilation_unit_header (void)
10637 {
10638   int ver = dwarf_version;
10639
10640   /* Don't mark the output as DWARF-4 until we make full use of the
10641      version 4 extensions, and gdb supports them.  For now, -gdwarf-4
10642      selects only a few extensions from the DWARF-4 spec.  */
10643   if (ver > 3)
10644     ver = 3;
10645   if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
10646     dw2_asm_output_data (4, 0xffffffff,
10647       "Initial length escape value indicating 64-bit DWARF extension");
10648   dw2_asm_output_data (DWARF_OFFSET_SIZE,
10649                        next_die_offset - DWARF_INITIAL_LENGTH_SIZE,
10650                        "Length of Compilation Unit Info");
10651   dw2_asm_output_data (2, ver, "DWARF version number");
10652   dw2_asm_output_offset (DWARF_OFFSET_SIZE, abbrev_section_label,
10653                          debug_abbrev_section,
10654                          "Offset Into Abbrev. Section");
10655   dw2_asm_output_data (1, DWARF2_ADDR_SIZE, "Pointer Size (in bytes)");
10656 }
10657
10658 /* Output the compilation unit DIE and its children.  */
10659
10660 static void
10661 output_comp_unit (dw_die_ref die, int output_if_empty)
10662 {
10663   const char *secname;
10664   char *oldsym, *tmp;
10665
10666   /* Unless we are outputting main CU, we may throw away empty ones.  */
10667   if (!output_if_empty && die->die_child == NULL)
10668     return;
10669
10670   /* Even if there are no children of this DIE, we must output the information
10671      about the compilation unit.  Otherwise, on an empty translation unit, we
10672      will generate a present, but empty, .debug_info section.  IRIX 6.5 `nm'
10673      will then complain when examining the file.  First mark all the DIEs in
10674      this CU so we know which get local refs.  */
10675   mark_dies (die);
10676
10677   build_abbrev_table (die);
10678
10679   /* Initialize the beginning DIE offset - and calculate sizes/offsets.  */
10680   next_die_offset = DWARF_COMPILE_UNIT_HEADER_SIZE;
10681   calc_die_sizes (die);
10682
10683   oldsym = die->die_id.die_symbol;
10684   if (oldsym)
10685     {
10686       tmp = XALLOCAVEC (char, strlen (oldsym) + 24);
10687
10688       sprintf (tmp, ".gnu.linkonce.wi.%s", oldsym);
10689       secname = tmp;
10690       die->die_id.die_symbol = NULL;
10691       switch_to_section (get_section (secname, SECTION_DEBUG, NULL));
10692     }
10693   else
10694     switch_to_section (debug_info_section);
10695
10696   /* Output debugging information.  */
10697   output_compilation_unit_header ();
10698   output_die (die);
10699
10700   /* Leave the marks on the main CU, so we can check them in
10701      output_pubnames.  */
10702   if (oldsym)
10703     {
10704       unmark_dies (die);
10705       die->die_id.die_symbol = oldsym;
10706     }
10707 }
10708
10709 /* Output a comdat type unit DIE and its children.  */
10710
10711 static void
10712 output_comdat_type_unit (comdat_type_node *node)
10713 {
10714   const char *secname;
10715   char *tmp;
10716   int i;
10717 #if defined (OBJECT_FORMAT_ELF)
10718   tree comdat_key;
10719 #endif
10720
10721   /* First mark all the DIEs in this CU so we know which get local refs.  */
10722   mark_dies (node->root_die);
10723
10724   build_abbrev_table (node->root_die);
10725
10726   /* Initialize the beginning DIE offset - and calculate sizes/offsets.  */
10727   next_die_offset = DWARF_COMDAT_TYPE_UNIT_HEADER_SIZE;
10728   calc_die_sizes (node->root_die);
10729
10730 #if defined (OBJECT_FORMAT_ELF)
10731   secname = ".debug_types";
10732   tmp = XALLOCAVEC (char, 4 + DWARF_TYPE_SIGNATURE_SIZE * 2);
10733   sprintf (tmp, "wt.");
10734   for (i = 0; i < DWARF_TYPE_SIGNATURE_SIZE; i++)
10735     sprintf (tmp + 3 + i * 2, "%02x", node->signature[i] & 0xff);
10736   comdat_key = get_identifier (tmp);
10737   targetm.asm_out.named_section (secname,
10738                                  SECTION_DEBUG | SECTION_LINKONCE,
10739                                  comdat_key);
10740 #else
10741   tmp = XALLOCAVEC (char, 18 + DWARF_TYPE_SIGNATURE_SIZE * 2);
10742   sprintf (tmp, ".gnu.linkonce.wt.");
10743   for (i = 0; i < DWARF_TYPE_SIGNATURE_SIZE; i++)
10744     sprintf (tmp + 17 + i * 2, "%02x", node->signature[i] & 0xff);
10745   secname = tmp;
10746   switch_to_section (get_section (secname, SECTION_DEBUG, NULL));
10747 #endif
10748
10749   /* Output debugging information.  */
10750   output_compilation_unit_header ();
10751   output_signature (node->signature, "Type Signature");
10752   dw2_asm_output_data (DWARF_OFFSET_SIZE, node->type_die->die_offset,
10753                        "Offset to Type DIE");
10754   output_die (node->root_die);
10755
10756   unmark_dies (node->root_die);
10757 }
10758
10759 /* Return the DWARF2/3 pubname associated with a decl.  */
10760
10761 static const char *
10762 dwarf2_name (tree decl, int scope)
10763 {
10764   return lang_hooks.dwarf_name (decl, scope ? 1 : 0);
10765 }
10766
10767 /* Add a new entry to .debug_pubnames if appropriate.  */
10768
10769 static void
10770 add_pubname_string (const char *str, dw_die_ref die)
10771 {
10772   pubname_entry e;
10773
10774   e.die = die;
10775   e.name = xstrdup (str);
10776   VEC_safe_push (pubname_entry, gc, pubname_table, &e);
10777 }
10778
10779 static void
10780 add_pubname (tree decl, dw_die_ref die)
10781 {
10782   if (TREE_PUBLIC (decl))
10783     {
10784       const char *name = dwarf2_name (decl, 1);
10785       if (name)
10786         add_pubname_string (name, die);
10787     }
10788 }
10789
10790 /* Add a new entry to .debug_pubtypes if appropriate.  */
10791
10792 static void
10793 add_pubtype (tree decl, dw_die_ref die)
10794 {
10795   pubname_entry e;
10796
10797   e.name = NULL;
10798   if ((TREE_PUBLIC (decl)
10799        || die->die_parent == comp_unit_die)
10800       && (die->die_tag == DW_TAG_typedef || COMPLETE_TYPE_P (decl)))
10801     {
10802       e.die = die;
10803       if (TYPE_P (decl))
10804         {
10805           if (TYPE_NAME (decl))
10806             {
10807               if (TREE_CODE (TYPE_NAME (decl)) == IDENTIFIER_NODE)
10808                 e.name = IDENTIFIER_POINTER (TYPE_NAME (decl));
10809               else if (TREE_CODE (TYPE_NAME (decl)) == TYPE_DECL
10810                        && DECL_NAME (TYPE_NAME (decl)))
10811                 e.name = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (decl)));
10812               else
10813                e.name = xstrdup ((const char *) get_AT_string (die, DW_AT_name));
10814             }
10815         }
10816       else
10817         {
10818           e.name = dwarf2_name (decl, 1);
10819           if (e.name)
10820             e.name = xstrdup (e.name);
10821         }
10822
10823       /* If we don't have a name for the type, there's no point in adding
10824          it to the table.  */
10825       if (e.name && e.name[0] != '\0')
10826         VEC_safe_push (pubname_entry, gc, pubtype_table, &e);
10827     }
10828 }
10829
10830 /* Output the public names table used to speed up access to externally
10831    visible names; or the public types table used to find type definitions.  */
10832
10833 static void
10834 output_pubnames (VEC (pubname_entry, gc) * names)
10835 {
10836   unsigned i;
10837   unsigned long pubnames_length = size_of_pubnames (names);
10838   pubname_ref pub;
10839
10840   if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
10841     dw2_asm_output_data (4, 0xffffffff,
10842       "Initial length escape value indicating 64-bit DWARF extension");
10843   if (names == pubname_table)
10844     dw2_asm_output_data (DWARF_OFFSET_SIZE, pubnames_length,
10845                          "Length of Public Names Info");
10846   else
10847     dw2_asm_output_data (DWARF_OFFSET_SIZE, pubnames_length,
10848                          "Length of Public Type Names Info");
10849   /* Version number for pubnames/pubtypes is still 2, even in DWARF3.  */
10850   dw2_asm_output_data (2, 2, "DWARF Version");
10851   dw2_asm_output_offset (DWARF_OFFSET_SIZE, debug_info_section_label,
10852                          debug_info_section,
10853                          "Offset of Compilation Unit Info");
10854   dw2_asm_output_data (DWARF_OFFSET_SIZE, next_die_offset,
10855                        "Compilation Unit Length");
10856
10857   for (i = 0; VEC_iterate (pubname_entry, names, i, pub); i++)
10858     {
10859       /* We shouldn't see pubnames for DIEs outside of the main CU.  */
10860       if (names == pubname_table)
10861         gcc_assert (pub->die->die_mark);
10862
10863       if (names != pubtype_table
10864           || pub->die->die_offset != 0
10865           || !flag_eliminate_unused_debug_types)
10866         {
10867           dw2_asm_output_data (DWARF_OFFSET_SIZE, pub->die->die_offset,
10868                                "DIE offset");
10869
10870           dw2_asm_output_nstring (pub->name, -1, "external name");
10871         }
10872     }
10873
10874   dw2_asm_output_data (DWARF_OFFSET_SIZE, 0, NULL);
10875 }
10876
10877 /* Add a new entry to .debug_aranges if appropriate.  */
10878
10879 static void
10880 add_arange (tree decl, dw_die_ref die)
10881 {
10882   if (! DECL_SECTION_NAME (decl))
10883     return;
10884
10885   if (arange_table_in_use == arange_table_allocated)
10886     {
10887       arange_table_allocated += ARANGE_TABLE_INCREMENT;
10888       arange_table = GGC_RESIZEVEC (dw_die_ref, arange_table,
10889                                     arange_table_allocated);
10890       memset (arange_table + arange_table_in_use, 0,
10891               ARANGE_TABLE_INCREMENT * sizeof (dw_die_ref));
10892     }
10893
10894   arange_table[arange_table_in_use++] = die;
10895 }
10896
10897 /* Output the information that goes into the .debug_aranges table.
10898    Namely, define the beginning and ending address range of the
10899    text section generated for this compilation unit.  */
10900
10901 static void
10902 output_aranges (void)
10903 {
10904   unsigned i;
10905   unsigned long aranges_length = size_of_aranges ();
10906
10907   if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
10908     dw2_asm_output_data (4, 0xffffffff,
10909       "Initial length escape value indicating 64-bit DWARF extension");
10910   dw2_asm_output_data (DWARF_OFFSET_SIZE, aranges_length,
10911                        "Length of Address Ranges Info");
10912   /* Version number for aranges is still 2, even in DWARF3.  */
10913   dw2_asm_output_data (2, 2, "DWARF Version");
10914   dw2_asm_output_offset (DWARF_OFFSET_SIZE, debug_info_section_label,
10915                          debug_info_section,
10916                          "Offset of Compilation Unit Info");
10917   dw2_asm_output_data (1, DWARF2_ADDR_SIZE, "Size of Address");
10918   dw2_asm_output_data (1, 0, "Size of Segment Descriptor");
10919
10920   /* We need to align to twice the pointer size here.  */
10921   if (DWARF_ARANGES_PAD_SIZE)
10922     {
10923       /* Pad using a 2 byte words so that padding is correct for any
10924          pointer size.  */
10925       dw2_asm_output_data (2, 0, "Pad to %d byte boundary",
10926                            2 * DWARF2_ADDR_SIZE);
10927       for (i = 2; i < (unsigned) DWARF_ARANGES_PAD_SIZE; i += 2)
10928         dw2_asm_output_data (2, 0, NULL);
10929     }
10930
10931   /* It is necessary not to output these entries if the sections were
10932      not used; if the sections were not used, the length will be 0 and
10933      the address may end up as 0 if the section is discarded by ld
10934      --gc-sections, leaving an invalid (0, 0) entry that can be
10935      confused with the terminator.  */
10936   if (text_section_used)
10937     {
10938       dw2_asm_output_addr (DWARF2_ADDR_SIZE, text_section_label, "Address");
10939       dw2_asm_output_delta (DWARF2_ADDR_SIZE, text_end_label,
10940                             text_section_label, "Length");
10941     }
10942   if (cold_text_section_used)
10943     {
10944       dw2_asm_output_addr (DWARF2_ADDR_SIZE, cold_text_section_label,
10945                            "Address");
10946       dw2_asm_output_delta (DWARF2_ADDR_SIZE, cold_end_label,
10947                             cold_text_section_label, "Length");
10948     }
10949
10950   for (i = 0; i < arange_table_in_use; i++)
10951     {
10952       dw_die_ref die = arange_table[i];
10953
10954       /* We shouldn't see aranges for DIEs outside of the main CU.  */
10955       gcc_assert (die->die_mark);
10956
10957       if (die->die_tag == DW_TAG_subprogram)
10958         {
10959           dw2_asm_output_addr (DWARF2_ADDR_SIZE, get_AT_low_pc (die),
10960                                "Address");
10961           dw2_asm_output_delta (DWARF2_ADDR_SIZE, get_AT_hi_pc (die),
10962                                 get_AT_low_pc (die), "Length");
10963         }
10964       else
10965         {
10966           /* A static variable; extract the symbol from DW_AT_location.
10967              Note that this code isn't currently hit, as we only emit
10968              aranges for functions (jason 9/23/99).  */
10969           dw_attr_ref a = get_AT (die, DW_AT_location);
10970           dw_loc_descr_ref loc;
10971
10972           gcc_assert (a && AT_class (a) == dw_val_class_loc);
10973
10974           loc = AT_loc (a);
10975           gcc_assert (loc->dw_loc_opc == DW_OP_addr);
10976
10977           dw2_asm_output_addr_rtx (DWARF2_ADDR_SIZE,
10978                                    loc->dw_loc_oprnd1.v.val_addr, "Address");
10979           dw2_asm_output_data (DWARF2_ADDR_SIZE,
10980                                get_AT_unsigned (die, DW_AT_byte_size),
10981                                "Length");
10982         }
10983     }
10984
10985   /* Output the terminator words.  */
10986   dw2_asm_output_data (DWARF2_ADDR_SIZE, 0, NULL);
10987   dw2_asm_output_data (DWARF2_ADDR_SIZE, 0, NULL);
10988 }
10989
10990 /* Add a new entry to .debug_ranges.  Return the offset at which it
10991    was placed.  */
10992
10993 static unsigned int
10994 add_ranges_num (int num)
10995 {
10996   unsigned int in_use = ranges_table_in_use;
10997
10998   if (in_use == ranges_table_allocated)
10999     {
11000       ranges_table_allocated += RANGES_TABLE_INCREMENT;
11001       ranges_table = GGC_RESIZEVEC (struct dw_ranges_struct, ranges_table,
11002                                     ranges_table_allocated);
11003       memset (ranges_table + ranges_table_in_use, 0,
11004               RANGES_TABLE_INCREMENT * sizeof (struct dw_ranges_struct));
11005     }
11006
11007   ranges_table[in_use].num = num;
11008   ranges_table_in_use = in_use + 1;
11009
11010   return in_use * 2 * DWARF2_ADDR_SIZE;
11011 }
11012
11013 /* Add a new entry to .debug_ranges corresponding to a block, or a
11014    range terminator if BLOCK is NULL.  */
11015
11016 static unsigned int
11017 add_ranges (const_tree block)
11018 {
11019   return add_ranges_num (block ? BLOCK_NUMBER (block) : 0);
11020 }
11021
11022 /* Add a new entry to .debug_ranges corresponding to a pair of
11023    labels.  */
11024
11025 static void
11026 add_ranges_by_labels (dw_die_ref die, const char *begin, const char *end,
11027                       bool *added)
11028 {
11029   unsigned int in_use = ranges_by_label_in_use;
11030   unsigned int offset;
11031
11032   if (in_use == ranges_by_label_allocated)
11033     {
11034       ranges_by_label_allocated += RANGES_TABLE_INCREMENT;
11035       ranges_by_label = GGC_RESIZEVEC (struct dw_ranges_by_label_struct,
11036                                        ranges_by_label,
11037                                        ranges_by_label_allocated);
11038       memset (ranges_by_label + ranges_by_label_in_use, 0,
11039               RANGES_TABLE_INCREMENT
11040               * sizeof (struct dw_ranges_by_label_struct));
11041     }
11042
11043   ranges_by_label[in_use].begin = begin;
11044   ranges_by_label[in_use].end = end;
11045   ranges_by_label_in_use = in_use + 1;
11046
11047   offset = add_ranges_num (-(int)in_use - 1);
11048   if (!*added)
11049     {
11050       add_AT_range_list (die, DW_AT_ranges, offset);
11051       *added = true;
11052     }
11053 }
11054
11055 static void
11056 output_ranges (void)
11057 {
11058   unsigned i;
11059   static const char *const start_fmt = "Offset 0x%x";
11060   const char *fmt = start_fmt;
11061
11062   for (i = 0; i < ranges_table_in_use; i++)
11063     {
11064       int block_num = ranges_table[i].num;
11065
11066       if (block_num > 0)
11067         {
11068           char blabel[MAX_ARTIFICIAL_LABEL_BYTES];
11069           char elabel[MAX_ARTIFICIAL_LABEL_BYTES];
11070
11071           ASM_GENERATE_INTERNAL_LABEL (blabel, BLOCK_BEGIN_LABEL, block_num);
11072           ASM_GENERATE_INTERNAL_LABEL (elabel, BLOCK_END_LABEL, block_num);
11073
11074           /* If all code is in the text section, then the compilation
11075              unit base address defaults to DW_AT_low_pc, which is the
11076              base of the text section.  */
11077           if (!have_multiple_function_sections)
11078             {
11079               dw2_asm_output_delta (DWARF2_ADDR_SIZE, blabel,
11080                                     text_section_label,
11081                                     fmt, i * 2 * DWARF2_ADDR_SIZE);
11082               dw2_asm_output_delta (DWARF2_ADDR_SIZE, elabel,
11083                                     text_section_label, NULL);
11084             }
11085
11086           /* Otherwise, the compilation unit base address is zero,
11087              which allows us to use absolute addresses, and not worry
11088              about whether the target supports cross-section
11089              arithmetic.  */
11090           else
11091             {
11092               dw2_asm_output_addr (DWARF2_ADDR_SIZE, blabel,
11093                                    fmt, i * 2 * DWARF2_ADDR_SIZE);
11094               dw2_asm_output_addr (DWARF2_ADDR_SIZE, elabel, NULL);
11095             }
11096
11097           fmt = NULL;
11098         }
11099
11100       /* Negative block_num stands for an index into ranges_by_label.  */
11101       else if (block_num < 0)
11102         {
11103           int lab_idx = - block_num - 1;
11104
11105           if (!have_multiple_function_sections)
11106             {
11107               gcc_unreachable ();
11108 #if 0
11109               /* If we ever use add_ranges_by_labels () for a single
11110                  function section, all we have to do is to take out
11111                  the #if 0 above.  */
11112               dw2_asm_output_delta (DWARF2_ADDR_SIZE,
11113                                     ranges_by_label[lab_idx].begin,
11114                                     text_section_label,
11115                                     fmt, i * 2 * DWARF2_ADDR_SIZE);
11116               dw2_asm_output_delta (DWARF2_ADDR_SIZE,
11117                                     ranges_by_label[lab_idx].end,
11118                                     text_section_label, NULL);
11119 #endif
11120             }
11121           else
11122             {
11123               dw2_asm_output_addr (DWARF2_ADDR_SIZE,
11124                                    ranges_by_label[lab_idx].begin,
11125                                    fmt, i * 2 * DWARF2_ADDR_SIZE);
11126               dw2_asm_output_addr (DWARF2_ADDR_SIZE,
11127                                    ranges_by_label[lab_idx].end,
11128                                    NULL);
11129             }
11130         }
11131       else
11132         {
11133           dw2_asm_output_data (DWARF2_ADDR_SIZE, 0, NULL);
11134           dw2_asm_output_data (DWARF2_ADDR_SIZE, 0, NULL);
11135           fmt = start_fmt;
11136         }
11137     }
11138 }
11139
11140 /* Data structure containing information about input files.  */
11141 struct file_info
11142 {
11143   const char *path;     /* Complete file name.  */
11144   const char *fname;    /* File name part.  */
11145   int length;           /* Length of entire string.  */
11146   struct dwarf_file_data * file_idx;    /* Index in input file table.  */
11147   int dir_idx;          /* Index in directory table.  */
11148 };
11149
11150 /* Data structure containing information about directories with source
11151    files.  */
11152 struct dir_info
11153 {
11154   const char *path;     /* Path including directory name.  */
11155   int length;           /* Path length.  */
11156   int prefix;           /* Index of directory entry which is a prefix.  */
11157   int count;            /* Number of files in this directory.  */
11158   int dir_idx;          /* Index of directory used as base.  */
11159 };
11160
11161 /* Callback function for file_info comparison.  We sort by looking at
11162    the directories in the path.  */
11163
11164 static int
11165 file_info_cmp (const void *p1, const void *p2)
11166 {
11167   const struct file_info *const s1 = (const struct file_info *) p1;
11168   const struct file_info *const s2 = (const struct file_info *) p2;
11169   const unsigned char *cp1;
11170   const unsigned char *cp2;
11171
11172   /* Take care of file names without directories.  We need to make sure that
11173      we return consistent values to qsort since some will get confused if
11174      we return the same value when identical operands are passed in opposite
11175      orders.  So if neither has a directory, return 0 and otherwise return
11176      1 or -1 depending on which one has the directory.  */
11177   if ((s1->path == s1->fname || s2->path == s2->fname))
11178     return (s2->path == s2->fname) - (s1->path == s1->fname);
11179
11180   cp1 = (const unsigned char *) s1->path;
11181   cp2 = (const unsigned char *) s2->path;
11182
11183   while (1)
11184     {
11185       ++cp1;
11186       ++cp2;
11187       /* Reached the end of the first path?  If so, handle like above.  */
11188       if ((cp1 == (const unsigned char *) s1->fname)
11189           || (cp2 == (const unsigned char *) s2->fname))
11190         return ((cp2 == (const unsigned char *) s2->fname)
11191                 - (cp1 == (const unsigned char *) s1->fname));
11192
11193       /* Character of current path component the same?  */
11194       else if (*cp1 != *cp2)
11195         return *cp1 - *cp2;
11196     }
11197 }
11198
11199 struct file_name_acquire_data
11200 {
11201   struct file_info *files;
11202   int used_files;
11203   int max_files;
11204 };
11205
11206 /* Traversal function for the hash table.  */
11207
11208 static int
11209 file_name_acquire (void ** slot, void *data)
11210 {
11211   struct file_name_acquire_data *fnad = (struct file_name_acquire_data *) data;
11212   struct dwarf_file_data *d = (struct dwarf_file_data *) *slot;
11213   struct file_info *fi;
11214   const char *f;
11215
11216   gcc_assert (fnad->max_files >= d->emitted_number);
11217
11218   if (! d->emitted_number)
11219     return 1;
11220
11221   gcc_assert (fnad->max_files != fnad->used_files);
11222
11223   fi = fnad->files + fnad->used_files++;
11224
11225   /* Skip all leading "./".  */
11226   f = d->filename;
11227   while (f[0] == '.' && IS_DIR_SEPARATOR (f[1]))
11228     f += 2;
11229
11230   /* Create a new array entry.  */
11231   fi->path = f;
11232   fi->length = strlen (f);
11233   fi->file_idx = d;
11234
11235   /* Search for the file name part.  */
11236   f = strrchr (f, DIR_SEPARATOR);
11237 #if defined (DIR_SEPARATOR_2)
11238   {
11239     char *g = strrchr (fi->path, DIR_SEPARATOR_2);
11240
11241     if (g != NULL)
11242       {
11243         if (f == NULL || f < g)
11244           f = g;
11245       }
11246   }
11247 #endif
11248
11249   fi->fname = f == NULL ? fi->path : f + 1;
11250   return 1;
11251 }
11252
11253 /* Output the directory table and the file name table.  We try to minimize
11254    the total amount of memory needed.  A heuristic is used to avoid large
11255    slowdowns with many input files.  */
11256
11257 static void
11258 output_file_names (void)
11259 {
11260   struct file_name_acquire_data fnad;
11261   int numfiles;
11262   struct file_info *files;
11263   struct dir_info *dirs;
11264   int *saved;
11265   int *savehere;
11266   int *backmap;
11267   int ndirs;
11268   int idx_offset;
11269   int i;
11270
11271   if (!last_emitted_file)
11272     {
11273       dw2_asm_output_data (1, 0, "End directory table");
11274       dw2_asm_output_data (1, 0, "End file name table");
11275       return;
11276     }
11277
11278   numfiles = last_emitted_file->emitted_number;
11279
11280   /* Allocate the various arrays we need.  */
11281   files = XALLOCAVEC (struct file_info, numfiles);
11282   dirs = XALLOCAVEC (struct dir_info, numfiles);
11283
11284   fnad.files = files;
11285   fnad.used_files = 0;
11286   fnad.max_files = numfiles;
11287   htab_traverse (file_table, file_name_acquire, &fnad);
11288   gcc_assert (fnad.used_files == fnad.max_files);
11289
11290   qsort (files, numfiles, sizeof (files[0]), file_info_cmp);
11291
11292   /* Find all the different directories used.  */
11293   dirs[0].path = files[0].path;
11294   dirs[0].length = files[0].fname - files[0].path;
11295   dirs[0].prefix = -1;
11296   dirs[0].count = 1;
11297   dirs[0].dir_idx = 0;
11298   files[0].dir_idx = 0;
11299   ndirs = 1;
11300
11301   for (i = 1; i < numfiles; i++)
11302     if (files[i].fname - files[i].path == dirs[ndirs - 1].length
11303         && memcmp (dirs[ndirs - 1].path, files[i].path,
11304                    dirs[ndirs - 1].length) == 0)
11305       {
11306         /* Same directory as last entry.  */
11307         files[i].dir_idx = ndirs - 1;
11308         ++dirs[ndirs - 1].count;
11309       }
11310     else
11311       {
11312         int j;
11313
11314         /* This is a new directory.  */
11315         dirs[ndirs].path = files[i].path;
11316         dirs[ndirs].length = files[i].fname - files[i].path;
11317         dirs[ndirs].count = 1;
11318         dirs[ndirs].dir_idx = ndirs;
11319         files[i].dir_idx = ndirs;
11320
11321         /* Search for a prefix.  */
11322         dirs[ndirs].prefix = -1;
11323         for (j = 0; j < ndirs; j++)
11324           if (dirs[j].length < dirs[ndirs].length
11325               && dirs[j].length > 1
11326               && (dirs[ndirs].prefix == -1
11327                   || dirs[j].length > dirs[dirs[ndirs].prefix].length)
11328               && memcmp (dirs[j].path, dirs[ndirs].path, dirs[j].length) == 0)
11329             dirs[ndirs].prefix = j;
11330
11331         ++ndirs;
11332       }
11333
11334   /* Now to the actual work.  We have to find a subset of the directories which
11335      allow expressing the file name using references to the directory table
11336      with the least amount of characters.  We do not do an exhaustive search
11337      where we would have to check out every combination of every single
11338      possible prefix.  Instead we use a heuristic which provides nearly optimal
11339      results in most cases and never is much off.  */
11340   saved = XALLOCAVEC (int, ndirs);
11341   savehere = XALLOCAVEC (int, ndirs);
11342
11343   memset (saved, '\0', ndirs * sizeof (saved[0]));
11344   for (i = 0; i < ndirs; i++)
11345     {
11346       int j;
11347       int total;
11348
11349       /* We can always save some space for the current directory.  But this
11350          does not mean it will be enough to justify adding the directory.  */
11351       savehere[i] = dirs[i].length;
11352       total = (savehere[i] - saved[i]) * dirs[i].count;
11353
11354       for (j = i + 1; j < ndirs; j++)
11355         {
11356           savehere[j] = 0;
11357           if (saved[j] < dirs[i].length)
11358             {
11359               /* Determine whether the dirs[i] path is a prefix of the
11360                  dirs[j] path.  */
11361               int k;
11362
11363               k = dirs[j].prefix;
11364               while (k != -1 && k != (int) i)
11365                 k = dirs[k].prefix;
11366
11367               if (k == (int) i)
11368                 {
11369                   /* Yes it is.  We can possibly save some memory by
11370                      writing the filenames in dirs[j] relative to
11371                      dirs[i].  */
11372                   savehere[j] = dirs[i].length;
11373                   total += (savehere[j] - saved[j]) * dirs[j].count;
11374                 }
11375             }
11376         }
11377
11378       /* Check whether we can save enough to justify adding the dirs[i]
11379          directory.  */
11380       if (total > dirs[i].length + 1)
11381         {
11382           /* It's worthwhile adding.  */
11383           for (j = i; j < ndirs; j++)
11384             if (savehere[j] > 0)
11385               {
11386                 /* Remember how much we saved for this directory so far.  */
11387                 saved[j] = savehere[j];
11388
11389                 /* Remember the prefix directory.  */
11390                 dirs[j].dir_idx = i;
11391               }
11392         }
11393     }
11394
11395   /* Emit the directory name table.  */
11396   idx_offset = dirs[0].length > 0 ? 1 : 0;
11397   for (i = 1 - idx_offset; i < ndirs; i++)
11398     dw2_asm_output_nstring (dirs[i].path,
11399                             dirs[i].length
11400                              - !DWARF2_DIR_SHOULD_END_WITH_SEPARATOR,
11401                             "Directory Entry: 0x%x", i + idx_offset);
11402
11403   dw2_asm_output_data (1, 0, "End directory table");
11404
11405   /* We have to emit them in the order of emitted_number since that's
11406      used in the debug info generation.  To do this efficiently we
11407      generate a back-mapping of the indices first.  */
11408   backmap = XALLOCAVEC (int, numfiles);
11409   for (i = 0; i < numfiles; i++)
11410     backmap[files[i].file_idx->emitted_number - 1] = i;
11411
11412   /* Now write all the file names.  */
11413   for (i = 0; i < numfiles; i++)
11414     {
11415       int file_idx = backmap[i];
11416       int dir_idx = dirs[files[file_idx].dir_idx].dir_idx;
11417
11418 #ifdef VMS_DEBUGGING_INFO
11419 #define MAX_VMS_VERSION_LEN 6 /* ";32768" */
11420
11421       /* Setting these fields can lead to debugger miscomparisons,
11422          but VMS Debug requires them to be set correctly.  */
11423
11424       int ver;
11425       long long cdt;
11426       long siz;
11427       int maxfilelen = strlen (files[file_idx].path)
11428                                + dirs[dir_idx].length
11429                                + MAX_VMS_VERSION_LEN + 1;
11430       char *filebuf = XALLOCAVEC (char, maxfilelen);
11431
11432       vms_file_stats_name (files[file_idx].path, 0, 0, 0, &ver);
11433       snprintf (filebuf, maxfilelen, "%s;%d",
11434                 files[file_idx].path + dirs[dir_idx].length, ver);
11435
11436       dw2_asm_output_nstring
11437         (filebuf, -1, "File Entry: 0x%x", (unsigned) i + 1);
11438
11439       /* Include directory index.  */
11440       dw2_asm_output_data_uleb128 (dir_idx + idx_offset, NULL);
11441
11442       /* Modification time.  */
11443       dw2_asm_output_data_uleb128
11444         ((vms_file_stats_name (files[file_idx].path, &cdt, 0, 0, 0) == 0)
11445           ? cdt : 0,
11446          NULL);
11447
11448       /* File length in bytes.  */
11449       dw2_asm_output_data_uleb128
11450         ((vms_file_stats_name (files[file_idx].path, 0, &siz, 0, 0) == 0)
11451           ? siz : 0,
11452          NULL);
11453 #else
11454       dw2_asm_output_nstring (files[file_idx].path + dirs[dir_idx].length, -1,
11455                               "File Entry: 0x%x", (unsigned) i + 1);
11456
11457       /* Include directory index.  */
11458       dw2_asm_output_data_uleb128 (dir_idx + idx_offset, NULL);
11459
11460       /* Modification time.  */
11461       dw2_asm_output_data_uleb128 (0, NULL);
11462
11463       /* File length in bytes.  */
11464       dw2_asm_output_data_uleb128 (0, NULL);
11465 #endif
11466     }
11467
11468   dw2_asm_output_data (1, 0, "End file name table");
11469 }
11470
11471
11472 /* Output the source line number correspondence information.  This
11473    information goes into the .debug_line section.  */
11474
11475 static void
11476 output_line_info (void)
11477 {
11478   char l1[20], l2[20], p1[20], p2[20];
11479   char line_label[MAX_ARTIFICIAL_LABEL_BYTES];
11480   char prev_line_label[MAX_ARTIFICIAL_LABEL_BYTES];
11481   unsigned opc;
11482   unsigned n_op_args;
11483   unsigned long lt_index;
11484   unsigned long current_line;
11485   long line_offset;
11486   long line_delta;
11487   unsigned long current_file;
11488   unsigned long function;
11489   int ver = dwarf_version;
11490
11491   /* Don't mark the output as DWARF-4 until we make full use of the
11492      version 4 extensions, and gdb supports them.  For now, -gdwarf-4
11493      selects only a few extensions from the DWARF-4 spec.  */
11494   if (ver > 3)
11495     ver = 3;
11496
11497   ASM_GENERATE_INTERNAL_LABEL (l1, LINE_NUMBER_BEGIN_LABEL, 0);
11498   ASM_GENERATE_INTERNAL_LABEL (l2, LINE_NUMBER_END_LABEL, 0);
11499   ASM_GENERATE_INTERNAL_LABEL (p1, LN_PROLOG_AS_LABEL, 0);
11500   ASM_GENERATE_INTERNAL_LABEL (p2, LN_PROLOG_END_LABEL, 0);
11501
11502   if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
11503     dw2_asm_output_data (4, 0xffffffff,
11504       "Initial length escape value indicating 64-bit DWARF extension");
11505   dw2_asm_output_delta (DWARF_OFFSET_SIZE, l2, l1,
11506                         "Length of Source Line Info");
11507   ASM_OUTPUT_LABEL (asm_out_file, l1);
11508
11509   dw2_asm_output_data (2, ver, "DWARF Version");
11510   dw2_asm_output_delta (DWARF_OFFSET_SIZE, p2, p1, "Prolog Length");
11511   ASM_OUTPUT_LABEL (asm_out_file, p1);
11512
11513   /* Define the architecture-dependent minimum instruction length (in
11514    bytes).  In this implementation of DWARF, this field is used for
11515    information purposes only.  Since GCC generates assembly language,
11516    we have no a priori knowledge of how many instruction bytes are
11517    generated for each source line, and therefore can use only the
11518    DW_LNE_set_address and DW_LNS_fixed_advance_pc line information
11519    commands.  Accordingly, we fix this as `1', which is "correct
11520    enough" for all architectures, and don't let the target override.  */
11521   dw2_asm_output_data (1, 1,
11522                        "Minimum Instruction Length");
11523
11524   dw2_asm_output_data (1, DWARF_LINE_DEFAULT_IS_STMT_START,
11525                        "Default is_stmt_start flag");
11526   dw2_asm_output_data (1, DWARF_LINE_BASE,
11527                        "Line Base Value (Special Opcodes)");
11528   dw2_asm_output_data (1, DWARF_LINE_RANGE,
11529                        "Line Range Value (Special Opcodes)");
11530   dw2_asm_output_data (1, DWARF_LINE_OPCODE_BASE,
11531                        "Special Opcode Base");
11532
11533   for (opc = 1; opc < DWARF_LINE_OPCODE_BASE; opc++)
11534     {
11535       switch (opc)
11536         {
11537         case DW_LNS_advance_pc:
11538         case DW_LNS_advance_line:
11539         case DW_LNS_set_file:
11540         case DW_LNS_set_column:
11541         case DW_LNS_fixed_advance_pc:
11542           n_op_args = 1;
11543           break;
11544         default:
11545           n_op_args = 0;
11546           break;
11547         }
11548
11549       dw2_asm_output_data (1, n_op_args, "opcode: 0x%x has %d args",
11550                            opc, n_op_args);
11551     }
11552
11553   /* Write out the information about the files we use.  */
11554   output_file_names ();
11555   ASM_OUTPUT_LABEL (asm_out_file, p2);
11556
11557   /* We used to set the address register to the first location in the text
11558      section here, but that didn't accomplish anything since we already
11559      have a line note for the opening brace of the first function.  */
11560
11561   /* Generate the line number to PC correspondence table, encoded as
11562      a series of state machine operations.  */
11563   current_file = 1;
11564   current_line = 1;
11565
11566   if (cfun && in_cold_section_p)
11567     strcpy (prev_line_label, crtl->subsections.cold_section_label);
11568   else
11569     strcpy (prev_line_label, text_section_label);
11570   for (lt_index = 1; lt_index < line_info_table_in_use; ++lt_index)
11571     {
11572       dw_line_info_ref line_info = &line_info_table[lt_index];
11573
11574 #if 0
11575       /* Disable this optimization for now; GDB wants to see two line notes
11576          at the beginning of a function so it can find the end of the
11577          prologue.  */
11578
11579       /* Don't emit anything for redundant notes.  Just updating the
11580          address doesn't accomplish anything, because we already assume
11581          that anything after the last address is this line.  */
11582       if (line_info->dw_line_num == current_line
11583           && line_info->dw_file_num == current_file)
11584         continue;
11585 #endif
11586
11587       /* Emit debug info for the address of the current line.
11588
11589          Unfortunately, we have little choice here currently, and must always
11590          use the most general form.  GCC does not know the address delta
11591          itself, so we can't use DW_LNS_advance_pc.  Many ports do have length
11592          attributes which will give an upper bound on the address range.  We
11593          could perhaps use length attributes to determine when it is safe to
11594          use DW_LNS_fixed_advance_pc.  */
11595
11596       ASM_GENERATE_INTERNAL_LABEL (line_label, LINE_CODE_LABEL, lt_index);
11597       if (0)
11598         {
11599           /* This can handle deltas up to 0xffff.  This takes 3 bytes.  */
11600           dw2_asm_output_data (1, DW_LNS_fixed_advance_pc,
11601                                "DW_LNS_fixed_advance_pc");
11602           dw2_asm_output_delta (2, line_label, prev_line_label, NULL);
11603         }
11604       else
11605         {
11606           /* This can handle any delta.  This takes
11607              4+DWARF2_ADDR_SIZE bytes.  */
11608           dw2_asm_output_data (1, 0, "DW_LNE_set_address");
11609           dw2_asm_output_data_uleb128 (1 + DWARF2_ADDR_SIZE, NULL);
11610           dw2_asm_output_data (1, DW_LNE_set_address, NULL);
11611           dw2_asm_output_addr (DWARF2_ADDR_SIZE, line_label, NULL);
11612         }
11613
11614       strcpy (prev_line_label, line_label);
11615
11616       /* Emit debug info for the source file of the current line, if
11617          different from the previous line.  */
11618       if (line_info->dw_file_num != current_file)
11619         {
11620           current_file = line_info->dw_file_num;
11621           dw2_asm_output_data (1, DW_LNS_set_file, "DW_LNS_set_file");
11622           dw2_asm_output_data_uleb128 (current_file, "%lu", current_file);
11623         }
11624
11625       /* Emit debug info for the current line number, choosing the encoding
11626          that uses the least amount of space.  */
11627       if (line_info->dw_line_num != current_line)
11628         {
11629           line_offset = line_info->dw_line_num - current_line;
11630           line_delta = line_offset - DWARF_LINE_BASE;
11631           current_line = line_info->dw_line_num;
11632           if (line_delta >= 0 && line_delta < (DWARF_LINE_RANGE - 1))
11633             /* This can handle deltas from -10 to 234, using the current
11634                definitions of DWARF_LINE_BASE and DWARF_LINE_RANGE.  This
11635                takes 1 byte.  */
11636             dw2_asm_output_data (1, DWARF_LINE_OPCODE_BASE + line_delta,
11637                                  "line %lu", current_line);
11638           else
11639             {
11640               /* This can handle any delta.  This takes at least 4 bytes,
11641                  depending on the value being encoded.  */
11642               dw2_asm_output_data (1, DW_LNS_advance_line,
11643                                    "advance to line %lu", current_line);
11644               dw2_asm_output_data_sleb128 (line_offset, NULL);
11645               dw2_asm_output_data (1, DW_LNS_copy, "DW_LNS_copy");
11646             }
11647         }
11648       else
11649         /* We still need to start a new row, so output a copy insn.  */
11650         dw2_asm_output_data (1, DW_LNS_copy, "DW_LNS_copy");
11651     }
11652
11653   /* Emit debug info for the address of the end of the function.  */
11654   if (0)
11655     {
11656       dw2_asm_output_data (1, DW_LNS_fixed_advance_pc,
11657                            "DW_LNS_fixed_advance_pc");
11658       dw2_asm_output_delta (2, text_end_label, prev_line_label, NULL);
11659     }
11660   else
11661     {
11662       dw2_asm_output_data (1, 0, "DW_LNE_set_address");
11663       dw2_asm_output_data_uleb128 (1 + DWARF2_ADDR_SIZE, NULL);
11664       dw2_asm_output_data (1, DW_LNE_set_address, NULL);
11665       dw2_asm_output_addr (DWARF2_ADDR_SIZE, text_end_label, NULL);
11666     }
11667
11668   dw2_asm_output_data (1, 0, "DW_LNE_end_sequence");
11669   dw2_asm_output_data_uleb128 (1, NULL);
11670   dw2_asm_output_data (1, DW_LNE_end_sequence, NULL);
11671
11672   function = 0;
11673   current_file = 1;
11674   current_line = 1;
11675   for (lt_index = 0; lt_index < separate_line_info_table_in_use;)
11676     {
11677       dw_separate_line_info_ref line_info
11678         = &separate_line_info_table[lt_index];
11679
11680 #if 0
11681       /* Don't emit anything for redundant notes.  */
11682       if (line_info->dw_line_num == current_line
11683           && line_info->dw_file_num == current_file
11684           && line_info->function == function)
11685         goto cont;
11686 #endif
11687
11688       /* Emit debug info for the address of the current line.  If this is
11689          a new function, or the first line of a function, then we need
11690          to handle it differently.  */
11691       ASM_GENERATE_INTERNAL_LABEL (line_label, SEPARATE_LINE_CODE_LABEL,
11692                                    lt_index);
11693       if (function != line_info->function)
11694         {
11695           function = line_info->function;
11696
11697           /* Set the address register to the first line in the function.  */
11698           dw2_asm_output_data (1, 0, "DW_LNE_set_address");
11699           dw2_asm_output_data_uleb128 (1 + DWARF2_ADDR_SIZE, NULL);
11700           dw2_asm_output_data (1, DW_LNE_set_address, NULL);
11701           dw2_asm_output_addr (DWARF2_ADDR_SIZE, line_label, NULL);
11702         }
11703       else
11704         {
11705           /* ??? See the DW_LNS_advance_pc comment above.  */
11706           if (0)
11707             {
11708               dw2_asm_output_data (1, DW_LNS_fixed_advance_pc,
11709                                    "DW_LNS_fixed_advance_pc");
11710               dw2_asm_output_delta (2, line_label, prev_line_label, NULL);
11711             }
11712           else
11713             {
11714               dw2_asm_output_data (1, 0, "DW_LNE_set_address");
11715               dw2_asm_output_data_uleb128 (1 + DWARF2_ADDR_SIZE, NULL);
11716               dw2_asm_output_data (1, DW_LNE_set_address, NULL);
11717               dw2_asm_output_addr (DWARF2_ADDR_SIZE, line_label, NULL);
11718             }
11719         }
11720
11721       strcpy (prev_line_label, line_label);
11722
11723       /* Emit debug info for the source file of the current line, if
11724          different from the previous line.  */
11725       if (line_info->dw_file_num != current_file)
11726         {
11727           current_file = line_info->dw_file_num;
11728           dw2_asm_output_data (1, DW_LNS_set_file, "DW_LNS_set_file");
11729           dw2_asm_output_data_uleb128 (current_file, "%lu", current_file);
11730         }
11731
11732       /* Emit debug info for the current line number, choosing the encoding
11733          that uses the least amount of space.  */
11734       if (line_info->dw_line_num != current_line)
11735         {
11736           line_offset = line_info->dw_line_num - current_line;
11737           line_delta = line_offset - DWARF_LINE_BASE;
11738           current_line = line_info->dw_line_num;
11739           if (line_delta >= 0 && line_delta < (DWARF_LINE_RANGE - 1))
11740             dw2_asm_output_data (1, DWARF_LINE_OPCODE_BASE + line_delta,
11741                                  "line %lu", current_line);
11742           else
11743             {
11744               dw2_asm_output_data (1, DW_LNS_advance_line,
11745                                    "advance to line %lu", current_line);
11746               dw2_asm_output_data_sleb128 (line_offset, NULL);
11747               dw2_asm_output_data (1, DW_LNS_copy, "DW_LNS_copy");
11748             }
11749         }
11750       else
11751         dw2_asm_output_data (1, DW_LNS_copy, "DW_LNS_copy");
11752
11753 #if 0
11754     cont:
11755 #endif
11756
11757       lt_index++;
11758
11759       /* If we're done with a function, end its sequence.  */
11760       if (lt_index == separate_line_info_table_in_use
11761           || separate_line_info_table[lt_index].function != function)
11762         {
11763           current_file = 1;
11764           current_line = 1;
11765
11766           /* Emit debug info for the address of the end of the function.  */
11767           ASM_GENERATE_INTERNAL_LABEL (line_label, FUNC_END_LABEL, function);
11768           if (0)
11769             {
11770               dw2_asm_output_data (1, DW_LNS_fixed_advance_pc,
11771                                    "DW_LNS_fixed_advance_pc");
11772               dw2_asm_output_delta (2, line_label, prev_line_label, NULL);
11773             }
11774           else
11775             {
11776               dw2_asm_output_data (1, 0, "DW_LNE_set_address");
11777               dw2_asm_output_data_uleb128 (1 + DWARF2_ADDR_SIZE, NULL);
11778               dw2_asm_output_data (1, DW_LNE_set_address, NULL);
11779               dw2_asm_output_addr (DWARF2_ADDR_SIZE, line_label, NULL);
11780             }
11781
11782           /* Output the marker for the end of this sequence.  */
11783           dw2_asm_output_data (1, 0, "DW_LNE_end_sequence");
11784           dw2_asm_output_data_uleb128 (1, NULL);
11785           dw2_asm_output_data (1, DW_LNE_end_sequence, NULL);
11786         }
11787     }
11788
11789   /* Output the marker for the end of the line number info.  */
11790   ASM_OUTPUT_LABEL (asm_out_file, l2);
11791 }
11792
11793 /* Return the size of the .debug_dcall table for the compilation unit.  */
11794
11795 static unsigned long
11796 size_of_dcall_table (void)
11797 {
11798   unsigned long size;
11799   unsigned int i;
11800   dcall_entry *p;
11801   tree last_poc_decl = NULL;
11802
11803   /* Header:  version + debug info section pointer + pointer size.  */
11804   size = 2 + DWARF_OFFSET_SIZE + 1;
11805
11806   /* Each entry:  code label + DIE offset.  */
11807   for (i = 0; VEC_iterate (dcall_entry, dcall_table, i, p); i++)
11808     {
11809       gcc_assert (p->targ_die != NULL);
11810       /* Insert a "from" entry when the point-of-call DIE offset changes.  */
11811       if (p->poc_decl != last_poc_decl)
11812         {
11813           dw_die_ref poc_die = lookup_decl_die (p->poc_decl);
11814           gcc_assert (poc_die);
11815           last_poc_decl = p->poc_decl;
11816           if (poc_die)
11817             size += (DWARF_OFFSET_SIZE
11818                      + size_of_uleb128 (poc_die->die_offset));
11819         }
11820       size += DWARF_OFFSET_SIZE + size_of_uleb128 (p->targ_die->die_offset);
11821     }
11822
11823   return size;
11824 }
11825
11826 /* Output the direct call table used to disambiguate PC values when
11827    identical function have been merged.  */
11828
11829 static void
11830 output_dcall_table (void)
11831 {
11832   unsigned i;
11833   unsigned long dcall_length = size_of_dcall_table ();
11834   dcall_entry *p;
11835   char poc_label[MAX_ARTIFICIAL_LABEL_BYTES];
11836   tree last_poc_decl = NULL;
11837
11838   if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
11839     dw2_asm_output_data (4, 0xffffffff,
11840       "Initial length escape value indicating 64-bit DWARF extension");
11841   dw2_asm_output_data (DWARF_OFFSET_SIZE, dcall_length,
11842                        "Length of Direct Call Table");
11843   dw2_asm_output_data (2, 4, "Version number");
11844   dw2_asm_output_offset (DWARF_OFFSET_SIZE, debug_info_section_label,
11845                          debug_info_section,
11846                          "Offset of Compilation Unit Info");
11847   dw2_asm_output_data (1, DWARF2_ADDR_SIZE, "Pointer Size (in bytes)");
11848
11849   for (i = 0; VEC_iterate (dcall_entry, dcall_table, i, p); i++)
11850     {
11851       /* Insert a "from" entry when the point-of-call DIE offset changes.  */
11852       if (p->poc_decl != last_poc_decl)
11853         {
11854           dw_die_ref poc_die = lookup_decl_die (p->poc_decl);
11855           last_poc_decl = p->poc_decl;
11856           if (poc_die)
11857             {
11858               dw2_asm_output_data (DWARF_OFFSET_SIZE, 0, "New caller");
11859               dw2_asm_output_data_uleb128 (poc_die->die_offset,
11860                                            "Caller DIE offset");
11861             }
11862         }
11863       ASM_GENERATE_INTERNAL_LABEL (poc_label, "LPOC", p->poc_label_num);
11864       dw2_asm_output_addr (DWARF_OFFSET_SIZE, poc_label, "Point of call");
11865       dw2_asm_output_data_uleb128 (p->targ_die->die_offset,
11866                                    "Callee DIE offset");
11867     }
11868 }
11869 \f
11870 /* Return the size of the .debug_vcall table for the compilation unit.  */
11871
11872 static unsigned long
11873 size_of_vcall_table (void)
11874 {
11875   unsigned long size;
11876   unsigned int i;
11877   vcall_entry *p;
11878
11879   /* Header:  version + pointer size.  */
11880   size = 2 + 1;
11881
11882   /* Each entry:  code label + vtable slot index.  */
11883   for (i = 0; VEC_iterate (vcall_entry, vcall_table, i, p); i++)
11884     size += DWARF_OFFSET_SIZE + size_of_uleb128 (p->vtable_slot);
11885
11886   return size;
11887 }
11888
11889 /* Output the virtual call table used to disambiguate PC values when
11890    identical function have been merged.  */
11891
11892 static void
11893 output_vcall_table (void)
11894 {
11895   unsigned i;
11896   unsigned long vcall_length = size_of_vcall_table ();
11897   vcall_entry *p;
11898   char poc_label[MAX_ARTIFICIAL_LABEL_BYTES];
11899
11900   if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
11901     dw2_asm_output_data (4, 0xffffffff,
11902       "Initial length escape value indicating 64-bit DWARF extension");
11903   dw2_asm_output_data (DWARF_OFFSET_SIZE, vcall_length,
11904                        "Length of Virtual Call Table");
11905   dw2_asm_output_data (2, 4, "Version number");
11906   dw2_asm_output_data (1, DWARF2_ADDR_SIZE, "Pointer Size (in bytes)");
11907
11908   for (i = 0; VEC_iterate (vcall_entry, vcall_table, i, p); i++)
11909     {
11910       ASM_GENERATE_INTERNAL_LABEL (poc_label, "LPOC", p->poc_label_num);
11911       dw2_asm_output_addr (DWARF_OFFSET_SIZE, poc_label, "Point of call");
11912       dw2_asm_output_data_uleb128 (p->vtable_slot, "Vtable slot");
11913     }
11914 }
11915 \f
11916 /* Given a pointer to a tree node for some base type, return a pointer to
11917    a DIE that describes the given type.
11918
11919    This routine must only be called for GCC type nodes that correspond to
11920    Dwarf base (fundamental) types.  */
11921
11922 static dw_die_ref
11923 base_type_die (tree type)
11924 {
11925   dw_die_ref base_type_result;
11926   enum dwarf_type encoding;
11927
11928   if (TREE_CODE (type) == ERROR_MARK || TREE_CODE (type) == VOID_TYPE)
11929     return 0;
11930
11931   /* If this is a subtype that should not be emitted as a subrange type,
11932      use the base type.  See subrange_type_for_debug_p.  */
11933   if (TREE_CODE (type) == INTEGER_TYPE && TREE_TYPE (type) != NULL_TREE)
11934     type = TREE_TYPE (type);
11935
11936   switch (TREE_CODE (type))
11937     {
11938     case INTEGER_TYPE:
11939       if (TYPE_STRING_FLAG (type))
11940         {
11941           if (TYPE_UNSIGNED (type))
11942             encoding = DW_ATE_unsigned_char;
11943           else
11944             encoding = DW_ATE_signed_char;
11945         }
11946       else if (TYPE_UNSIGNED (type))
11947         encoding = DW_ATE_unsigned;
11948       else
11949         encoding = DW_ATE_signed;
11950       break;
11951
11952     case REAL_TYPE:
11953       if (DECIMAL_FLOAT_MODE_P (TYPE_MODE (type)))
11954         {
11955           if (dwarf_version >= 3 || !dwarf_strict)
11956             encoding = DW_ATE_decimal_float;
11957           else
11958             encoding = DW_ATE_lo_user;
11959         }
11960       else
11961         encoding = DW_ATE_float;
11962       break;
11963
11964     case FIXED_POINT_TYPE:
11965       if (!(dwarf_version >= 3 || !dwarf_strict))
11966         encoding = DW_ATE_lo_user;
11967       else if (TYPE_UNSIGNED (type))
11968         encoding = DW_ATE_unsigned_fixed;
11969       else
11970         encoding = DW_ATE_signed_fixed;
11971       break;
11972
11973       /* Dwarf2 doesn't know anything about complex ints, so use
11974          a user defined type for it.  */
11975     case COMPLEX_TYPE:
11976       if (TREE_CODE (TREE_TYPE (type)) == REAL_TYPE)
11977         encoding = DW_ATE_complex_float;
11978       else
11979         encoding = DW_ATE_lo_user;
11980       break;
11981
11982     case BOOLEAN_TYPE:
11983       /* GNU FORTRAN/Ada/C++ BOOLEAN type.  */
11984       encoding = DW_ATE_boolean;
11985       break;
11986
11987     default:
11988       /* No other TREE_CODEs are Dwarf fundamental types.  */
11989       gcc_unreachable ();
11990     }
11991
11992   base_type_result = new_die (DW_TAG_base_type, comp_unit_die, type);
11993
11994   /* This probably indicates a bug.  */
11995   if (! TYPE_NAME (type))
11996     add_name_attribute (base_type_result, "__unknown__");
11997
11998   add_AT_unsigned (base_type_result, DW_AT_byte_size,
11999                    int_size_in_bytes (type));
12000   add_AT_unsigned (base_type_result, DW_AT_encoding, encoding);
12001
12002   return base_type_result;
12003 }
12004
12005 /* Given a pointer to an arbitrary ..._TYPE tree node, return nonzero if the
12006    given input type is a Dwarf "fundamental" type.  Otherwise return null.  */
12007
12008 static inline int
12009 is_base_type (tree type)
12010 {
12011   switch (TREE_CODE (type))
12012     {
12013     case ERROR_MARK:
12014     case VOID_TYPE:
12015     case INTEGER_TYPE:
12016     case REAL_TYPE:
12017     case FIXED_POINT_TYPE:
12018     case COMPLEX_TYPE:
12019     case BOOLEAN_TYPE:
12020       return 1;
12021
12022     case ARRAY_TYPE:
12023     case RECORD_TYPE:
12024     case UNION_TYPE:
12025     case QUAL_UNION_TYPE:
12026     case ENUMERAL_TYPE:
12027     case FUNCTION_TYPE:
12028     case METHOD_TYPE:
12029     case POINTER_TYPE:
12030     case REFERENCE_TYPE:
12031     case OFFSET_TYPE:
12032     case LANG_TYPE:
12033     case VECTOR_TYPE:
12034       return 0;
12035
12036     default:
12037       gcc_unreachable ();
12038     }
12039
12040   return 0;
12041 }
12042
12043 /* Given a pointer to a tree node, assumed to be some kind of a ..._TYPE
12044    node, return the size in bits for the type if it is a constant, or else
12045    return the alignment for the type if the type's size is not constant, or
12046    else return BITS_PER_WORD if the type actually turns out to be an
12047    ERROR_MARK node.  */
12048
12049 static inline unsigned HOST_WIDE_INT
12050 simple_type_size_in_bits (const_tree type)
12051 {
12052   if (TREE_CODE (type) == ERROR_MARK)
12053     return BITS_PER_WORD;
12054   else if (TYPE_SIZE (type) == NULL_TREE)
12055     return 0;
12056   else if (host_integerp (TYPE_SIZE (type), 1))
12057     return tree_low_cst (TYPE_SIZE (type), 1);
12058   else
12059     return TYPE_ALIGN (type);
12060 }
12061
12062 /*  Given a pointer to a tree node for a subrange type, return a pointer
12063     to a DIE that describes the given type.  */
12064
12065 static dw_die_ref
12066 subrange_type_die (tree type, tree low, tree high, dw_die_ref context_die)
12067 {
12068   dw_die_ref subrange_die;
12069   const HOST_WIDE_INT size_in_bytes = int_size_in_bytes (type);
12070
12071   if (context_die == NULL)
12072     context_die = comp_unit_die;
12073
12074   subrange_die = new_die (DW_TAG_subrange_type, context_die, type);
12075
12076   if (int_size_in_bytes (TREE_TYPE (type)) != size_in_bytes)
12077     {
12078       /* The size of the subrange type and its base type do not match,
12079          so we need to generate a size attribute for the subrange type.  */
12080       add_AT_unsigned (subrange_die, DW_AT_byte_size, size_in_bytes);
12081     }
12082
12083   if (low)
12084     add_bound_info (subrange_die, DW_AT_lower_bound, low);
12085   if (high)
12086     add_bound_info (subrange_die, DW_AT_upper_bound, high);
12087
12088   return subrange_die;
12089 }
12090
12091 /* Given a pointer to an arbitrary ..._TYPE tree node, return a debugging
12092    entry that chains various modifiers in front of the given type.  */
12093
12094 static dw_die_ref
12095 modified_type_die (tree type, int is_const_type, int is_volatile_type,
12096                    dw_die_ref context_die)
12097 {
12098   enum tree_code code = TREE_CODE (type);
12099   dw_die_ref mod_type_die;
12100   dw_die_ref sub_die = NULL;
12101   tree item_type = NULL;
12102   tree qualified_type;
12103   tree name, low, high;
12104
12105   if (code == ERROR_MARK)
12106     return NULL;
12107
12108   /* See if we already have the appropriately qualified variant of
12109      this type.  */
12110   qualified_type
12111     = get_qualified_type (type,
12112                           ((is_const_type ? TYPE_QUAL_CONST : 0)
12113                            | (is_volatile_type ? TYPE_QUAL_VOLATILE : 0)));
12114
12115   /* If we do, then we can just use its DIE, if it exists.  */
12116   if (qualified_type)
12117     {
12118       mod_type_die = lookup_type_die (qualified_type);
12119       if (mod_type_die)
12120         return mod_type_die;
12121     }
12122
12123   name = qualified_type ? TYPE_NAME (qualified_type) : NULL;
12124
12125   /* Handle C typedef types.  */
12126   if (name && TREE_CODE (name) == TYPE_DECL && DECL_ORIGINAL_TYPE (name))
12127     {
12128       tree dtype = TREE_TYPE (name);
12129
12130       if (qualified_type == dtype)
12131         {
12132           /* For a named type, use the typedef.  */
12133           gen_type_die (qualified_type, context_die);
12134           return lookup_type_die (qualified_type);
12135         }
12136       else if (is_const_type < TYPE_READONLY (dtype)
12137                || is_volatile_type < TYPE_VOLATILE (dtype)
12138                || (is_const_type <= TYPE_READONLY (dtype)
12139                    && is_volatile_type <= TYPE_VOLATILE (dtype)
12140                    && DECL_ORIGINAL_TYPE (name) != type))
12141         /* cv-unqualified version of named type.  Just use the unnamed
12142            type to which it refers.  */
12143         return modified_type_die (DECL_ORIGINAL_TYPE (name),
12144                                   is_const_type, is_volatile_type,
12145                                   context_die);
12146       /* Else cv-qualified version of named type; fall through.  */
12147     }
12148
12149   if (is_const_type)
12150     {
12151       mod_type_die = new_die (DW_TAG_const_type, comp_unit_die, type);
12152       sub_die = modified_type_die (type, 0, is_volatile_type, context_die);
12153     }
12154   else if (is_volatile_type)
12155     {
12156       mod_type_die = new_die (DW_TAG_volatile_type, comp_unit_die, type);
12157       sub_die = modified_type_die (type, 0, 0, context_die);
12158     }
12159   else if (code == POINTER_TYPE)
12160     {
12161       mod_type_die = new_die (DW_TAG_pointer_type, comp_unit_die, type);
12162       add_AT_unsigned (mod_type_die, DW_AT_byte_size,
12163                        simple_type_size_in_bits (type) / BITS_PER_UNIT);
12164       item_type = TREE_TYPE (type);
12165       if (!ADDR_SPACE_GENERIC_P (TYPE_ADDR_SPACE (item_type)))
12166         add_AT_unsigned (mod_type_die, DW_AT_address_class,
12167                          TYPE_ADDR_SPACE (item_type));
12168     }
12169   else if (code == REFERENCE_TYPE)
12170     {
12171       mod_type_die = new_die (DW_TAG_reference_type, comp_unit_die, type);
12172       add_AT_unsigned (mod_type_die, DW_AT_byte_size,
12173                        simple_type_size_in_bits (type) / BITS_PER_UNIT);
12174       item_type = TREE_TYPE (type);
12175       if (!ADDR_SPACE_GENERIC_P (TYPE_ADDR_SPACE (item_type)))
12176         add_AT_unsigned (mod_type_die, DW_AT_address_class,
12177                          TYPE_ADDR_SPACE (item_type));
12178     }
12179   else if (code == INTEGER_TYPE
12180            && TREE_TYPE (type) != NULL_TREE
12181            && subrange_type_for_debug_p (type, &low, &high))
12182     {
12183       mod_type_die = subrange_type_die (type, low, high, context_die);
12184       item_type = TREE_TYPE (type);
12185     }
12186   else if (is_base_type (type))
12187     mod_type_die = base_type_die (type);
12188   else
12189     {
12190       gen_type_die (type, context_die);
12191
12192       /* We have to get the type_main_variant here (and pass that to the
12193          `lookup_type_die' routine) because the ..._TYPE node we have
12194          might simply be a *copy* of some original type node (where the
12195          copy was created to help us keep track of typedef names) and
12196          that copy might have a different TYPE_UID from the original
12197          ..._TYPE node.  */
12198       if (TREE_CODE (type) != VECTOR_TYPE)
12199         return lookup_type_die (type_main_variant (type));
12200       else
12201         /* Vectors have the debugging information in the type,
12202            not the main variant.  */
12203         return lookup_type_die (type);
12204     }
12205
12206   /* Builtin types don't have a DECL_ORIGINAL_TYPE.  For those,
12207      don't output a DW_TAG_typedef, since there isn't one in the
12208      user's program; just attach a DW_AT_name to the type.
12209      Don't attach a DW_AT_name to DW_TAG_const_type or DW_TAG_volatile_type
12210      if the base type already has the same name.  */
12211   if (name
12212       && ((TREE_CODE (name) != TYPE_DECL
12213            && (qualified_type == TYPE_MAIN_VARIANT (type)
12214                || (!is_const_type && !is_volatile_type)))
12215           || (TREE_CODE (name) == TYPE_DECL
12216               && TREE_TYPE (name) == qualified_type
12217               && DECL_NAME (name))))
12218     {
12219       if (TREE_CODE (name) == TYPE_DECL)
12220         /* Could just call add_name_and_src_coords_attributes here,
12221            but since this is a builtin type it doesn't have any
12222            useful source coordinates anyway.  */
12223         name = DECL_NAME (name);
12224       add_name_attribute (mod_type_die, IDENTIFIER_POINTER (name));
12225     }
12226
12227   if (qualified_type)
12228     equate_type_number_to_die (qualified_type, mod_type_die);
12229
12230   if (item_type)
12231     /* We must do this after the equate_type_number_to_die call, in case
12232        this is a recursive type.  This ensures that the modified_type_die
12233        recursion will terminate even if the type is recursive.  Recursive
12234        types are possible in Ada.  */
12235     sub_die = modified_type_die (item_type,
12236                                  TYPE_READONLY (item_type),
12237                                  TYPE_VOLATILE (item_type),
12238                                  context_die);
12239
12240   if (sub_die != NULL)
12241     add_AT_die_ref (mod_type_die, DW_AT_type, sub_die);
12242
12243   return mod_type_die;
12244 }
12245
12246 /* Generate DIEs for the generic parameters of T.
12247    T must be either a generic type or a generic function.
12248    See http://gcc.gnu.org/wiki/TemplateParmsDwarf for more.  */
12249
12250 static void
12251 gen_generic_params_dies (tree t)
12252 {
12253   tree parms, args;
12254   int parms_num, i;
12255   dw_die_ref die = NULL;
12256
12257   if (!t || (TYPE_P (t) && !COMPLETE_TYPE_P (t)))
12258     return;
12259
12260   if (TYPE_P (t))
12261     die = lookup_type_die (t);
12262   else if (DECL_P (t))
12263     die = lookup_decl_die (t);
12264
12265   gcc_assert (die);
12266
12267   parms = lang_hooks.get_innermost_generic_parms (t);
12268   if (!parms)
12269     /* T has no generic parameter. It means T is neither a generic type
12270        or function. End of story.  */
12271     return;
12272
12273   parms_num = TREE_VEC_LENGTH (parms);
12274   args = lang_hooks.get_innermost_generic_args (t);
12275   for (i = 0; i < parms_num; i++)
12276     {
12277       tree parm, arg, arg_pack_elems;
12278
12279       parm = TREE_VEC_ELT (parms, i);
12280       arg = TREE_VEC_ELT (args, i);
12281       arg_pack_elems = lang_hooks.types.get_argument_pack_elems (arg);
12282       gcc_assert (parm && TREE_VALUE (parm) && arg);
12283
12284       if (parm && TREE_VALUE (parm) && arg)
12285         {
12286           /* If PARM represents a template parameter pack,
12287              emit a DW_TAG_GNU_template_parameter_pack DIE, followed
12288              by DW_TAG_template_*_parameter DIEs for the argument
12289              pack elements of ARG. Note that ARG would then be
12290              an argument pack.  */
12291           if (arg_pack_elems)
12292             template_parameter_pack_die (TREE_VALUE (parm),
12293                                          arg_pack_elems,
12294                                          die);
12295           else
12296             generic_parameter_die (TREE_VALUE (parm), arg,
12297                                    true /* Emit DW_AT_name */, die);
12298         }
12299     }
12300 }
12301
12302 /* Create and return a DIE for PARM which should be
12303    the representation of a generic type parameter.
12304    For instance, in the C++ front end, PARM would be a template parameter.
12305    ARG is the argument to PARM.
12306    EMIT_NAME_P if tree, the DIE will have DW_AT_name attribute set to the
12307    name of the PARM.
12308    PARENT_DIE is the parent DIE which the new created DIE should be added to,
12309    as a child node.  */
12310
12311 static dw_die_ref
12312 generic_parameter_die (tree parm, tree arg,
12313                        bool emit_name_p,
12314                        dw_die_ref parent_die)
12315 {
12316   dw_die_ref tmpl_die = NULL;
12317   const char *name = NULL;
12318
12319   if (!parm || !DECL_NAME (parm) || !arg)
12320     return NULL;
12321
12322   /* We support non-type generic parameters and arguments,
12323      type generic parameters and arguments, as well as
12324      generic generic parameters (a.k.a. template template parameters in C++)
12325      and arguments.  */
12326   if (TREE_CODE (parm) == PARM_DECL)
12327     /* PARM is a nontype generic parameter  */
12328     tmpl_die = new_die (DW_TAG_template_value_param, parent_die, parm);
12329   else if (TREE_CODE (parm) == TYPE_DECL)
12330     /* PARM is a type generic parameter.  */
12331     tmpl_die = new_die (DW_TAG_template_type_param, parent_die, parm);
12332   else if (lang_hooks.decls.generic_generic_parameter_decl_p (parm))
12333     /* PARM is a generic generic parameter.
12334        Its DIE is a GNU extension. It shall have a
12335        DW_AT_name attribute to represent the name of the template template
12336        parameter, and a DW_AT_GNU_template_name attribute to represent the
12337        name of the template template argument.  */
12338     tmpl_die = new_die (DW_TAG_GNU_template_template_param,
12339                         parent_die, parm);
12340   else
12341     gcc_unreachable ();
12342
12343   if (tmpl_die)
12344     {
12345       tree tmpl_type;
12346
12347       /* If PARM is a generic parameter pack, it means we are
12348          emitting debug info for a template argument pack element.
12349          In other terms, ARG is a template argument pack element.
12350          In that case, we don't emit any DW_AT_name attribute for
12351          the die.  */
12352       if (emit_name_p)
12353         {
12354           name = IDENTIFIER_POINTER (DECL_NAME (parm));
12355           gcc_assert (name);
12356           add_AT_string (tmpl_die, DW_AT_name, name);
12357         }
12358
12359       if (!lang_hooks.decls.generic_generic_parameter_decl_p (parm))
12360         {
12361           /* DWARF3, 5.6.8 says if PARM is a non-type generic parameter
12362              TMPL_DIE should have a child DW_AT_type attribute that is set
12363              to the type of the argument to PARM, which is ARG.
12364              If PARM is a type generic parameter, TMPL_DIE should have a
12365              child DW_AT_type that is set to ARG.  */
12366           tmpl_type = TYPE_P (arg) ? arg : TREE_TYPE (arg);
12367           add_type_attribute (tmpl_die, tmpl_type, 0,
12368                               TREE_THIS_VOLATILE (tmpl_type),
12369                               parent_die);
12370         }
12371       else
12372         {
12373           /* So TMPL_DIE is a DIE representing a
12374              a generic generic template parameter, a.k.a template template
12375              parameter in C++ and arg is a template.  */
12376
12377           /* The DW_AT_GNU_template_name attribute of the DIE must be set
12378              to the name of the argument.  */
12379           name = dwarf2_name (TYPE_P (arg) ? TYPE_NAME (arg) : arg, 1);
12380           if (name)
12381             add_AT_string (tmpl_die, DW_AT_GNU_template_name, name);
12382         }
12383
12384       if (TREE_CODE (parm) == PARM_DECL)
12385         /* So PARM is a non-type generic parameter.
12386            DWARF3 5.6.8 says we must set a DW_AT_const_value child
12387            attribute of TMPL_DIE which value represents the value
12388            of ARG.
12389            We must be careful here:
12390            The value of ARG might reference some function decls.
12391            We might currently be emitting debug info for a generic
12392            type and types are emitted before function decls, we don't
12393            know if the function decls referenced by ARG will actually be
12394            emitted after cgraph computations.
12395            So must defer the generation of the DW_AT_const_value to
12396            after cgraph is ready.  */
12397         append_entry_to_tmpl_value_parm_die_table (tmpl_die, arg);
12398     }
12399
12400   return tmpl_die;
12401 }
12402
12403 /* Generate and return a  DW_TAG_GNU_template_parameter_pack DIE representing.
12404    PARM_PACK must be a template parameter pack. The returned DIE
12405    will be child DIE of PARENT_DIE.  */
12406
12407 static dw_die_ref
12408 template_parameter_pack_die (tree parm_pack,
12409                              tree parm_pack_args,
12410                              dw_die_ref parent_die)
12411 {
12412   dw_die_ref die;
12413   int j;
12414
12415   gcc_assert (parent_die && parm_pack);
12416
12417   die = new_die (DW_TAG_GNU_template_parameter_pack, parent_die, parm_pack);
12418   add_name_and_src_coords_attributes (die, parm_pack);
12419   for (j = 0; j < TREE_VEC_LENGTH (parm_pack_args); j++)
12420     generic_parameter_die (parm_pack,
12421                            TREE_VEC_ELT (parm_pack_args, j),
12422                            false /* Don't emit DW_AT_name */,
12423                            die);
12424   return die;
12425 }
12426
12427 /* Given a pointer to an arbitrary ..._TYPE tree node, return true if it is
12428    an enumerated type.  */
12429
12430 static inline int
12431 type_is_enum (const_tree type)
12432 {
12433   return TREE_CODE (type) == ENUMERAL_TYPE;
12434 }
12435
12436 /* Return the DBX register number described by a given RTL node.  */
12437
12438 static unsigned int
12439 dbx_reg_number (const_rtx rtl)
12440 {
12441   unsigned regno = REGNO (rtl);
12442
12443   gcc_assert (regno < FIRST_PSEUDO_REGISTER);
12444
12445 #ifdef LEAF_REG_REMAP
12446   if (current_function_uses_only_leaf_regs)
12447     {
12448       int leaf_reg = LEAF_REG_REMAP (regno);
12449       if (leaf_reg != -1)
12450         regno = (unsigned) leaf_reg;
12451     }
12452 #endif
12453
12454   return DBX_REGISTER_NUMBER (regno);
12455 }
12456
12457 /* Optionally add a DW_OP_piece term to a location description expression.
12458    DW_OP_piece is only added if the location description expression already
12459    doesn't end with DW_OP_piece.  */
12460
12461 static void
12462 add_loc_descr_op_piece (dw_loc_descr_ref *list_head, int size)
12463 {
12464   dw_loc_descr_ref loc;
12465
12466   if (*list_head != NULL)
12467     {
12468       /* Find the end of the chain.  */
12469       for (loc = *list_head; loc->dw_loc_next != NULL; loc = loc->dw_loc_next)
12470         ;
12471
12472       if (loc->dw_loc_opc != DW_OP_piece)
12473         loc->dw_loc_next = new_loc_descr (DW_OP_piece, size, 0);
12474     }
12475 }
12476
12477 /* Return a location descriptor that designates a machine register or
12478    zero if there is none.  */
12479
12480 static dw_loc_descr_ref
12481 reg_loc_descriptor (rtx rtl, enum var_init_status initialized)
12482 {
12483   rtx regs;
12484
12485   if (REGNO (rtl) >= FIRST_PSEUDO_REGISTER)
12486     return 0;
12487
12488   regs = targetm.dwarf_register_span (rtl);
12489
12490   if (hard_regno_nregs[REGNO (rtl)][GET_MODE (rtl)] > 1 || regs)
12491     return multiple_reg_loc_descriptor (rtl, regs, initialized);
12492   else
12493     return one_reg_loc_descriptor (dbx_reg_number (rtl), initialized);
12494 }
12495
12496 /* Return a location descriptor that designates a machine register for
12497    a given hard register number.  */
12498
12499 static dw_loc_descr_ref
12500 one_reg_loc_descriptor (unsigned int regno, enum var_init_status initialized)
12501 {
12502   dw_loc_descr_ref reg_loc_descr;
12503
12504   if (regno <= 31)
12505     reg_loc_descr
12506       = new_loc_descr ((enum dwarf_location_atom) (DW_OP_reg0 + regno), 0, 0);
12507   else
12508     reg_loc_descr = new_loc_descr (DW_OP_regx, regno, 0);
12509
12510   if (initialized == VAR_INIT_STATUS_UNINITIALIZED)
12511     add_loc_descr (&reg_loc_descr, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
12512
12513   return reg_loc_descr;
12514 }
12515
12516 /* Given an RTL of a register, return a location descriptor that
12517    designates a value that spans more than one register.  */
12518
12519 static dw_loc_descr_ref
12520 multiple_reg_loc_descriptor (rtx rtl, rtx regs,
12521                              enum var_init_status initialized)
12522 {
12523   int nregs, size, i;
12524   unsigned reg;
12525   dw_loc_descr_ref loc_result = NULL;
12526
12527   reg = REGNO (rtl);
12528 #ifdef LEAF_REG_REMAP
12529   if (current_function_uses_only_leaf_regs)
12530     {
12531       int leaf_reg = LEAF_REG_REMAP (reg);
12532       if (leaf_reg != -1)
12533         reg = (unsigned) leaf_reg;
12534     }
12535 #endif
12536   gcc_assert ((unsigned) DBX_REGISTER_NUMBER (reg) == dbx_reg_number (rtl));
12537   nregs = hard_regno_nregs[REGNO (rtl)][GET_MODE (rtl)];
12538
12539   /* Simple, contiguous registers.  */
12540   if (regs == NULL_RTX)
12541     {
12542       size = GET_MODE_SIZE (GET_MODE (rtl)) / nregs;
12543
12544       loc_result = NULL;
12545       while (nregs--)
12546         {
12547           dw_loc_descr_ref t;
12548
12549           t = one_reg_loc_descriptor (DBX_REGISTER_NUMBER (reg),
12550                                       VAR_INIT_STATUS_INITIALIZED);
12551           add_loc_descr (&loc_result, t);
12552           add_loc_descr_op_piece (&loc_result, size);
12553           ++reg;
12554         }
12555       return loc_result;
12556     }
12557
12558   /* Now onto stupid register sets in non contiguous locations.  */
12559
12560   gcc_assert (GET_CODE (regs) == PARALLEL);
12561
12562   size = GET_MODE_SIZE (GET_MODE (XVECEXP (regs, 0, 0)));
12563   loc_result = NULL;
12564
12565   for (i = 0; i < XVECLEN (regs, 0); ++i)
12566     {
12567       dw_loc_descr_ref t;
12568
12569       t = one_reg_loc_descriptor (REGNO (XVECEXP (regs, 0, i)),
12570                                   VAR_INIT_STATUS_INITIALIZED);
12571       add_loc_descr (&loc_result, t);
12572       size = GET_MODE_SIZE (GET_MODE (XVECEXP (regs, 0, 0)));
12573       add_loc_descr_op_piece (&loc_result, size);
12574     }
12575
12576   if (loc_result && initialized == VAR_INIT_STATUS_UNINITIALIZED)
12577     add_loc_descr (&loc_result, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
12578   return loc_result;
12579 }
12580
12581 #endif /* DWARF2_DEBUGGING_INFO */
12582
12583 #if defined (DWARF2_DEBUGGING_INFO) || defined (DWARF2_UNWIND_INFO)
12584
12585 /* Return a location descriptor that designates a constant.  */
12586
12587 static dw_loc_descr_ref
12588 int_loc_descriptor (HOST_WIDE_INT i)
12589 {
12590   enum dwarf_location_atom op;
12591
12592   /* Pick the smallest representation of a constant, rather than just
12593      defaulting to the LEB encoding.  */
12594   if (i >= 0)
12595     {
12596       if (i <= 31)
12597         op = (enum dwarf_location_atom) (DW_OP_lit0 + i);
12598       else if (i <= 0xff)
12599         op = DW_OP_const1u;
12600       else if (i <= 0xffff)
12601         op = DW_OP_const2u;
12602       else if (HOST_BITS_PER_WIDE_INT == 32
12603                || i <= 0xffffffff)
12604         op = DW_OP_const4u;
12605       else
12606         op = DW_OP_constu;
12607     }
12608   else
12609     {
12610       if (i >= -0x80)
12611         op = DW_OP_const1s;
12612       else if (i >= -0x8000)
12613         op = DW_OP_const2s;
12614       else if (HOST_BITS_PER_WIDE_INT == 32
12615                || i >= -0x80000000)
12616         op = DW_OP_const4s;
12617       else
12618         op = DW_OP_consts;
12619     }
12620
12621   return new_loc_descr (op, i, 0);
12622 }
12623 #endif
12624
12625 #ifdef DWARF2_DEBUGGING_INFO
12626 /* Return loc description representing "address" of integer value.
12627    This can appear only as toplevel expression.  */
12628
12629 static dw_loc_descr_ref
12630 address_of_int_loc_descriptor (int size, HOST_WIDE_INT i)
12631 {
12632   int litsize;
12633   dw_loc_descr_ref loc_result = NULL;
12634
12635   if (!(dwarf_version >= 4 || !dwarf_strict))
12636     return NULL;
12637
12638   if (i >= 0)
12639     {
12640       if (i <= 31)
12641         litsize = 1;
12642       else if (i <= 0xff)
12643         litsize = 2;
12644       else if (i <= 0xffff)
12645         litsize = 3;
12646       else if (HOST_BITS_PER_WIDE_INT == 32
12647                || i <= 0xffffffff)
12648         litsize = 5;
12649       else
12650         litsize = 1 + size_of_uleb128 ((unsigned HOST_WIDE_INT) i);
12651     }
12652   else
12653     {
12654       if (i >= -0x80)
12655         litsize = 2;
12656       else if (i >= -0x8000)
12657         litsize = 3;
12658       else if (HOST_BITS_PER_WIDE_INT == 32
12659                || i >= -0x80000000)
12660         litsize = 5;
12661       else
12662         litsize = 1 + size_of_sleb128 (i);
12663     }
12664   /* Determine if DW_OP_stack_value or DW_OP_implicit_value
12665      is more compact.  For DW_OP_stack_value we need:
12666      litsize + 1 (DW_OP_stack_value)
12667      and for DW_OP_implicit_value:
12668      1 (DW_OP_implicit_value) + 1 (length) + size.  */
12669   if ((int) DWARF2_ADDR_SIZE >= size && litsize + 1 <= 1 + 1 + size)
12670     {
12671       loc_result = int_loc_descriptor (i);
12672       add_loc_descr (&loc_result,
12673                      new_loc_descr (DW_OP_stack_value, 0, 0));
12674       return loc_result;
12675     }
12676
12677   loc_result = new_loc_descr (DW_OP_implicit_value,
12678                               size, 0);
12679   loc_result->dw_loc_oprnd2.val_class = dw_val_class_const;
12680   loc_result->dw_loc_oprnd2.v.val_int = i;
12681   return loc_result;
12682 }
12683
12684 /* Return a location descriptor that designates a base+offset location.  */
12685
12686 static dw_loc_descr_ref
12687 based_loc_descr (rtx reg, HOST_WIDE_INT offset,
12688                  enum var_init_status initialized)
12689 {
12690   unsigned int regno;
12691   dw_loc_descr_ref result;
12692   dw_fde_ref fde = current_fde ();
12693
12694   /* We only use "frame base" when we're sure we're talking about the
12695      post-prologue local stack frame.  We do this by *not* running
12696      register elimination until this point, and recognizing the special
12697      argument pointer and soft frame pointer rtx's.  */
12698   if (reg == arg_pointer_rtx || reg == frame_pointer_rtx)
12699     {
12700       rtx elim = eliminate_regs (reg, VOIDmode, NULL_RTX);
12701
12702       if (elim != reg)
12703         {
12704           if (GET_CODE (elim) == PLUS)
12705             {
12706               offset += INTVAL (XEXP (elim, 1));
12707               elim = XEXP (elim, 0);
12708             }
12709           gcc_assert ((SUPPORTS_STACK_ALIGNMENT
12710                        && (elim == hard_frame_pointer_rtx
12711                            || elim == stack_pointer_rtx))
12712                       || elim == (frame_pointer_needed
12713                                   ? hard_frame_pointer_rtx
12714                                   : stack_pointer_rtx));
12715
12716           /* If drap register is used to align stack, use frame
12717              pointer + offset to access stack variables.  If stack
12718              is aligned without drap, use stack pointer + offset to
12719              access stack variables.  */
12720           if (crtl->stack_realign_tried
12721               && reg == frame_pointer_rtx)
12722             {
12723               int base_reg
12724                 = DWARF_FRAME_REGNUM ((fde && fde->drap_reg != INVALID_REGNUM)
12725                                       ? HARD_FRAME_POINTER_REGNUM
12726                                       : STACK_POINTER_REGNUM);
12727               return new_reg_loc_descr (base_reg, offset);
12728             }
12729
12730           offset += frame_pointer_fb_offset;
12731           return new_loc_descr (DW_OP_fbreg, offset, 0);
12732         }
12733     }
12734   else if (fde
12735            && fde->drap_reg != INVALID_REGNUM
12736            && (fde->drap_reg == REGNO (reg)
12737                || fde->vdrap_reg == REGNO (reg)))
12738     {
12739       /* Use cfa+offset to represent the location of arguments passed
12740          on stack when drap is used to align stack.  */
12741       return new_loc_descr (DW_OP_fbreg, offset, 0);
12742     }
12743
12744   regno = dbx_reg_number (reg);
12745   if (regno <= 31)
12746     result = new_loc_descr ((enum dwarf_location_atom) (DW_OP_breg0 + regno),
12747                             offset, 0);
12748   else
12749     result = new_loc_descr (DW_OP_bregx, regno, offset);
12750
12751   if (initialized == VAR_INIT_STATUS_UNINITIALIZED)
12752     add_loc_descr (&result, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
12753
12754   return result;
12755 }
12756
12757 /* Return true if this RTL expression describes a base+offset calculation.  */
12758
12759 static inline int
12760 is_based_loc (const_rtx rtl)
12761 {
12762   return (GET_CODE (rtl) == PLUS
12763           && ((REG_P (XEXP (rtl, 0))
12764                && REGNO (XEXP (rtl, 0)) < FIRST_PSEUDO_REGISTER
12765                && CONST_INT_P (XEXP (rtl, 1)))));
12766 }
12767
12768 /* Try to handle TLS MEMs, for which mem_loc_descriptor on XEXP (mem, 0)
12769    failed.  */
12770
12771 static dw_loc_descr_ref
12772 tls_mem_loc_descriptor (rtx mem)
12773 {
12774   tree base;
12775   dw_loc_descr_ref loc_result;
12776
12777   if (MEM_EXPR (mem) == NULL_TREE || MEM_OFFSET (mem) == NULL_RTX)
12778     return NULL;
12779
12780   base = get_base_address (MEM_EXPR (mem));
12781   if (base == NULL
12782       || TREE_CODE (base) != VAR_DECL
12783       || !DECL_THREAD_LOCAL_P (base))
12784     return NULL;
12785
12786   loc_result = loc_descriptor_from_tree (MEM_EXPR (mem), 1);
12787   if (loc_result == NULL)
12788     return NULL;
12789
12790   if (INTVAL (MEM_OFFSET (mem)))
12791     loc_descr_plus_const (&loc_result, INTVAL (MEM_OFFSET (mem)));
12792
12793   return loc_result;
12794 }
12795
12796 /* Output debug info about reason why we failed to expand expression as dwarf
12797    expression.  */
12798
12799 static void
12800 expansion_failed (tree expr, rtx rtl, char const *reason)
12801 {
12802   if (dump_file && (dump_flags & TDF_DETAILS))
12803     {
12804       fprintf (dump_file, "Failed to expand as dwarf: ");
12805       if (expr)
12806         print_generic_expr (dump_file, expr, dump_flags);
12807       if (rtl)
12808         {
12809           fprintf (dump_file, "\n");
12810           print_rtl (dump_file, rtl);
12811         }
12812       fprintf (dump_file, "\nReason: %s\n", reason);
12813     }
12814 }
12815
12816 /* Helper function for const_ok_for_output, called either directly
12817    or via for_each_rtx.  */
12818
12819 static int
12820 const_ok_for_output_1 (rtx *rtlp, void *data ATTRIBUTE_UNUSED)
12821 {
12822   rtx rtl = *rtlp;
12823
12824   if (GET_CODE (rtl) != SYMBOL_REF)
12825     return 0;
12826
12827   if (CONSTANT_POOL_ADDRESS_P (rtl))
12828     {
12829       bool marked;
12830       get_pool_constant_mark (rtl, &marked);
12831       /* If all references to this pool constant were optimized away,
12832          it was not output and thus we can't represent it.  */
12833       if (!marked)
12834         {
12835           expansion_failed (NULL_TREE, rtl,
12836                             "Constant was removed from constant pool.\n");
12837           return 1;
12838         }
12839     }
12840
12841   if (SYMBOL_REF_TLS_MODEL (rtl) != TLS_MODEL_NONE)
12842     return 1;
12843
12844   /* Avoid references to external symbols in debug info, on several targets
12845      the linker might even refuse to link when linking a shared library,
12846      and in many other cases the relocations for .debug_info/.debug_loc are
12847      dropped, so the address becomes zero anyway.  Hidden symbols, guaranteed
12848      to be defined within the same shared library or executable are fine.  */
12849   if (SYMBOL_REF_EXTERNAL_P (rtl))
12850     {
12851       tree decl = SYMBOL_REF_DECL (rtl);
12852
12853       if (decl == NULL || !targetm.binds_local_p (decl))
12854         {
12855           expansion_failed (NULL_TREE, rtl,
12856                             "Symbol not defined in current TU.\n");
12857           return 1;
12858         }
12859     }
12860
12861   return 0;
12862 }
12863
12864 /* Return true if constant RTL can be emitted in DW_OP_addr or
12865    DW_AT_const_value.  TLS SYMBOL_REFs, external SYMBOL_REFs or
12866    non-marked constant pool SYMBOL_REFs can't be referenced in it.  */
12867
12868 static bool
12869 const_ok_for_output (rtx rtl)
12870 {
12871   if (GET_CODE (rtl) == SYMBOL_REF)
12872     return const_ok_for_output_1 (&rtl, NULL) == 0;
12873
12874   if (GET_CODE (rtl) == CONST)
12875     return for_each_rtx (&XEXP (rtl, 0), const_ok_for_output_1, NULL) == 0;
12876
12877   return true;
12878 }
12879
12880 /* The following routine converts the RTL for a variable or parameter
12881    (resident in memory) into an equivalent Dwarf representation of a
12882    mechanism for getting the address of that same variable onto the top of a
12883    hypothetical "address evaluation" stack.
12884
12885    When creating memory location descriptors, we are effectively transforming
12886    the RTL for a memory-resident object into its Dwarf postfix expression
12887    equivalent.  This routine recursively descends an RTL tree, turning
12888    it into Dwarf postfix code as it goes.
12889
12890    MODE is the mode of the memory reference, needed to handle some
12891    autoincrement addressing modes.
12892
12893    CAN_USE_FBREG is a flag whether we can use DW_AT_frame_base in the
12894    location list for RTL.
12895
12896    Return 0 if we can't represent the location.  */
12897
12898 static dw_loc_descr_ref
12899 mem_loc_descriptor (rtx rtl, enum machine_mode mode,
12900                     enum var_init_status initialized)
12901 {
12902   dw_loc_descr_ref mem_loc_result = NULL;
12903   enum dwarf_location_atom op;
12904   dw_loc_descr_ref op0, op1;
12905
12906   /* Note that for a dynamically sized array, the location we will generate a
12907      description of here will be the lowest numbered location which is
12908      actually within the array.  That's *not* necessarily the same as the
12909      zeroth element of the array.  */
12910
12911   rtl = targetm.delegitimize_address (rtl);
12912
12913   switch (GET_CODE (rtl))
12914     {
12915     case POST_INC:
12916     case POST_DEC:
12917     case POST_MODIFY:
12918       return mem_loc_descriptor (XEXP (rtl, 0), mode, initialized);
12919
12920     case SUBREG:
12921       /* The case of a subreg may arise when we have a local (register)
12922          variable or a formal (register) parameter which doesn't quite fill
12923          up an entire register.  For now, just assume that it is
12924          legitimate to make the Dwarf info refer to the whole register which
12925          contains the given subreg.  */
12926       if (!subreg_lowpart_p (rtl))
12927         break;
12928       rtl = SUBREG_REG (rtl);
12929       if (GET_MODE_SIZE (GET_MODE (rtl)) > DWARF2_ADDR_SIZE)
12930         break;
12931       if (GET_MODE_CLASS (GET_MODE (rtl)) != MODE_INT)
12932         break;
12933       mem_loc_result = mem_loc_descriptor (rtl, mode, initialized);
12934       break;
12935
12936     case REG:
12937       /* Whenever a register number forms a part of the description of the
12938          method for calculating the (dynamic) address of a memory resident
12939          object, DWARF rules require the register number be referred to as
12940          a "base register".  This distinction is not based in any way upon
12941          what category of register the hardware believes the given register
12942          belongs to.  This is strictly DWARF terminology we're dealing with
12943          here. Note that in cases where the location of a memory-resident
12944          data object could be expressed as: OP_ADD (OP_BASEREG (basereg),
12945          OP_CONST (0)) the actual DWARF location descriptor that we generate
12946          may just be OP_BASEREG (basereg).  This may look deceptively like
12947          the object in question was allocated to a register (rather than in
12948          memory) so DWARF consumers need to be aware of the subtle
12949          distinction between OP_REG and OP_BASEREG.  */
12950       if (REGNO (rtl) < FIRST_PSEUDO_REGISTER)
12951         mem_loc_result = based_loc_descr (rtl, 0, VAR_INIT_STATUS_INITIALIZED);
12952       else if (stack_realign_drap
12953                && crtl->drap_reg
12954                && crtl->args.internal_arg_pointer == rtl
12955                && REGNO (crtl->drap_reg) < FIRST_PSEUDO_REGISTER)
12956         {
12957           /* If RTL is internal_arg_pointer, which has been optimized
12958              out, use DRAP instead.  */
12959           mem_loc_result = based_loc_descr (crtl->drap_reg, 0,
12960                                             VAR_INIT_STATUS_INITIALIZED);
12961         }
12962       break;
12963
12964     case SIGN_EXTEND:
12965     case ZERO_EXTEND:
12966       op0 = mem_loc_descriptor (XEXP (rtl, 0), mode,
12967                                 VAR_INIT_STATUS_INITIALIZED);
12968       if (op0 == 0)
12969         break;
12970       else
12971         {
12972           int shift = DWARF2_ADDR_SIZE
12973                       - GET_MODE_SIZE (GET_MODE (XEXP (rtl, 0)));
12974           shift *= BITS_PER_UNIT;
12975           if (GET_CODE (rtl) == SIGN_EXTEND)
12976             op = DW_OP_shra;
12977           else
12978             op = DW_OP_shr;
12979           mem_loc_result = op0;
12980           add_loc_descr (&mem_loc_result, int_loc_descriptor (shift));
12981           add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_shl, 0, 0));
12982           add_loc_descr (&mem_loc_result, int_loc_descriptor (shift));
12983           add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0));
12984         }
12985       break;
12986
12987     case MEM:
12988       mem_loc_result = mem_loc_descriptor (XEXP (rtl, 0), GET_MODE (rtl),
12989                                            VAR_INIT_STATUS_INITIALIZED);
12990       if (mem_loc_result == NULL)
12991         mem_loc_result = tls_mem_loc_descriptor (rtl);
12992       if (mem_loc_result != 0)
12993         add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_deref, 0, 0));
12994       break;
12995
12996     case LO_SUM:
12997          rtl = XEXP (rtl, 1);
12998
12999       /* ... fall through ...  */
13000
13001     case LABEL_REF:
13002       /* Some ports can transform a symbol ref into a label ref, because
13003          the symbol ref is too far away and has to be dumped into a constant
13004          pool.  */
13005     case CONST:
13006     case SYMBOL_REF:
13007       /* Alternatively, the symbol in the constant pool might be referenced
13008          by a different symbol.  */
13009       if (GET_CODE (rtl) == SYMBOL_REF && CONSTANT_POOL_ADDRESS_P (rtl))
13010         {
13011           bool marked;
13012           rtx tmp = get_pool_constant_mark (rtl, &marked);
13013
13014           if (GET_CODE (tmp) == SYMBOL_REF)
13015             {
13016               rtl = tmp;
13017               if (CONSTANT_POOL_ADDRESS_P (tmp))
13018                 get_pool_constant_mark (tmp, &marked);
13019               else
13020                 marked = true;
13021             }
13022
13023           /* If all references to this pool constant were optimized away,
13024              it was not output and thus we can't represent it.
13025              FIXME: might try to use DW_OP_const_value here, though
13026              DW_OP_piece complicates it.  */
13027           if (!marked)
13028             {
13029               expansion_failed (NULL_TREE, rtl,
13030                                 "Constant was removed from constant pool.\n");
13031               return 0;
13032             }
13033         }
13034
13035       if (GET_CODE (rtl) == SYMBOL_REF
13036           && SYMBOL_REF_TLS_MODEL (rtl) != TLS_MODEL_NONE)
13037         {
13038           dw_loc_descr_ref temp;
13039
13040           /* If this is not defined, we have no way to emit the data.  */
13041           if (!targetm.have_tls || !targetm.asm_out.output_dwarf_dtprel)
13042             break;
13043
13044           temp = new_loc_descr (DW_OP_addr, 0, 0);
13045           temp->dw_loc_oprnd1.val_class = dw_val_class_addr;
13046           temp->dw_loc_oprnd1.v.val_addr = rtl;
13047           temp->dtprel = true;
13048
13049           mem_loc_result = new_loc_descr (DW_OP_GNU_push_tls_address, 0, 0);
13050           add_loc_descr (&mem_loc_result, temp);
13051
13052           break;
13053         }
13054
13055       if (!const_ok_for_output (rtl))
13056         break;
13057
13058     symref:
13059       mem_loc_result = new_loc_descr (DW_OP_addr, 0, 0);
13060       mem_loc_result->dw_loc_oprnd1.val_class = dw_val_class_addr;
13061       mem_loc_result->dw_loc_oprnd1.v.val_addr = rtl;
13062       VEC_safe_push (rtx, gc, used_rtx_array, rtl);
13063       break;
13064
13065     case CONCAT:
13066     case CONCATN:
13067     case VAR_LOCATION:
13068       expansion_failed (NULL_TREE, rtl,
13069                         "CONCAT/CONCATN/VAR_LOCATION is handled only by loc_descriptor");
13070       return 0;
13071
13072     case PRE_MODIFY:
13073       /* Extract the PLUS expression nested inside and fall into
13074          PLUS code below.  */
13075       rtl = XEXP (rtl, 1);
13076       goto plus;
13077
13078     case PRE_INC:
13079     case PRE_DEC:
13080       /* Turn these into a PLUS expression and fall into the PLUS code
13081          below.  */
13082       rtl = gen_rtx_PLUS (word_mode, XEXP (rtl, 0),
13083                           GEN_INT (GET_CODE (rtl) == PRE_INC
13084                                    ? GET_MODE_UNIT_SIZE (mode)
13085                                    : -GET_MODE_UNIT_SIZE (mode)));
13086
13087       /* ... fall through ...  */
13088
13089     case PLUS:
13090     plus:
13091       if (is_based_loc (rtl))
13092         mem_loc_result = based_loc_descr (XEXP (rtl, 0),
13093                                           INTVAL (XEXP (rtl, 1)),
13094                                           VAR_INIT_STATUS_INITIALIZED);
13095       else
13096         {
13097           mem_loc_result = mem_loc_descriptor (XEXP (rtl, 0), mode,
13098                                                VAR_INIT_STATUS_INITIALIZED);
13099           if (mem_loc_result == 0)
13100             break;
13101
13102           if (CONST_INT_P (XEXP (rtl, 1)))
13103             loc_descr_plus_const (&mem_loc_result, INTVAL (XEXP (rtl, 1)));
13104           else
13105             {
13106               dw_loc_descr_ref mem_loc_result2
13107                 = mem_loc_descriptor (XEXP (rtl, 1), mode,
13108                                       VAR_INIT_STATUS_INITIALIZED);
13109               if (mem_loc_result2 == 0)
13110                 break;
13111               add_loc_descr (&mem_loc_result, mem_loc_result2);
13112               add_loc_descr (&mem_loc_result,
13113                              new_loc_descr (DW_OP_plus, 0, 0));
13114             }
13115         }
13116       break;
13117
13118     /* If a pseudo-reg is optimized away, it is possible for it to
13119        be replaced with a MEM containing a multiply or shift.  */
13120     case MINUS:
13121       op = DW_OP_minus;
13122       goto do_binop;
13123
13124     case MULT:
13125       op = DW_OP_mul;
13126       goto do_binop;
13127
13128     case DIV:
13129       op = DW_OP_div;
13130       goto do_binop;
13131
13132     case UMOD:
13133       op = DW_OP_mod;
13134       goto do_binop;
13135
13136     case ASHIFT:
13137       op = DW_OP_shl;
13138       goto do_binop;
13139
13140     case ASHIFTRT:
13141       op = DW_OP_shra;
13142       goto do_binop;
13143
13144     case LSHIFTRT:
13145       op = DW_OP_shr;
13146       goto do_binop;
13147
13148     case AND:
13149       op = DW_OP_and;
13150       goto do_binop;
13151
13152     case IOR:
13153       op = DW_OP_or;
13154       goto do_binop;
13155
13156     case XOR:
13157       op = DW_OP_xor;
13158       goto do_binop;
13159
13160     do_binop:
13161       op0 = mem_loc_descriptor (XEXP (rtl, 0), mode,
13162                                 VAR_INIT_STATUS_INITIALIZED);
13163       op1 = mem_loc_descriptor (XEXP (rtl, 1), mode,
13164                                 VAR_INIT_STATUS_INITIALIZED);
13165
13166       if (op0 == 0 || op1 == 0)
13167         break;
13168
13169       mem_loc_result = op0;
13170       add_loc_descr (&mem_loc_result, op1);
13171       add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0));
13172       break;
13173
13174     case MOD:
13175       op0 = mem_loc_descriptor (XEXP (rtl, 0), mode,
13176                                 VAR_INIT_STATUS_INITIALIZED);
13177       op1 = mem_loc_descriptor (XEXP (rtl, 1), mode,
13178                                 VAR_INIT_STATUS_INITIALIZED);
13179
13180       if (op0 == 0 || op1 == 0)
13181         break;
13182
13183       mem_loc_result = op0;
13184       add_loc_descr (&mem_loc_result, op1);
13185       add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_over, 0, 0));
13186       add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_over, 0, 0));
13187       add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_div, 0, 0));
13188       add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_mul, 0, 0));
13189       add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_minus, 0, 0));
13190       break;
13191
13192     case NOT:
13193       op = DW_OP_not;
13194       goto do_unop;
13195
13196     case ABS:
13197       op = DW_OP_abs;
13198       goto do_unop;
13199
13200     case NEG:
13201       op = DW_OP_neg;
13202       goto do_unop;
13203
13204     do_unop:
13205       op0 = mem_loc_descriptor (XEXP (rtl, 0), mode,
13206                                 VAR_INIT_STATUS_INITIALIZED);
13207
13208       if (op0 == 0)
13209         break;
13210
13211       mem_loc_result = op0;
13212       add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0));
13213       break;
13214
13215     case CONST_INT:
13216       mem_loc_result = int_loc_descriptor (INTVAL (rtl));
13217       break;
13218
13219     case EQ:
13220       op = DW_OP_eq;
13221       goto do_scompare;
13222
13223     case GE:
13224       op = DW_OP_ge;
13225       goto do_scompare;
13226
13227     case GT:
13228       op = DW_OP_gt;
13229       goto do_scompare;
13230
13231     case LE:
13232       op = DW_OP_le;
13233       goto do_scompare;
13234
13235     case LT:
13236       op = DW_OP_lt;
13237       goto do_scompare;
13238
13239     case NE:
13240       op = DW_OP_ne;
13241       goto do_scompare;
13242
13243     do_scompare:
13244       if (GET_MODE_CLASS (GET_MODE (XEXP (rtl, 0))) != MODE_INT
13245           || GET_MODE_SIZE (GET_MODE (XEXP (rtl, 0))) > DWARF2_ADDR_SIZE
13246           || GET_MODE (XEXP (rtl, 0)) != GET_MODE (XEXP (rtl, 1)))
13247         break;
13248
13249       op0 = mem_loc_descriptor (XEXP (rtl, 0), mode,
13250                                 VAR_INIT_STATUS_INITIALIZED);
13251       op1 = mem_loc_descriptor (XEXP (rtl, 1), mode,
13252                                 VAR_INIT_STATUS_INITIALIZED);
13253
13254       if (op0 == 0 || op1 == 0)
13255         break;
13256
13257       if (GET_MODE_SIZE (GET_MODE (XEXP (rtl, 0))) < DWARF2_ADDR_SIZE)
13258         {
13259           int shift = DWARF2_ADDR_SIZE
13260                       - GET_MODE_SIZE (GET_MODE (XEXP (rtl, 0)));
13261           shift *= BITS_PER_UNIT;
13262           add_loc_descr (&op0, int_loc_descriptor (shift));
13263           add_loc_descr (&op0, new_loc_descr (DW_OP_shl, 0, 0));
13264           if (CONST_INT_P (XEXP (rtl, 1)))
13265             op1 = int_loc_descriptor (INTVAL (XEXP (rtl, 1)) << shift);
13266           else
13267             {
13268               add_loc_descr (&op1, int_loc_descriptor (shift));
13269               add_loc_descr (&op1, new_loc_descr (DW_OP_shl, 0, 0));
13270             }
13271         }
13272
13273     do_compare:
13274       mem_loc_result = op0;
13275       add_loc_descr (&mem_loc_result, op1);
13276       add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0));
13277       if (STORE_FLAG_VALUE != 1)
13278         {
13279           add_loc_descr (&mem_loc_result,
13280                          int_loc_descriptor (STORE_FLAG_VALUE));
13281           add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_mul, 0, 0));
13282         }
13283       break;
13284
13285     case GEU:
13286       op = DW_OP_ge;
13287       goto do_ucompare;
13288
13289     case GTU:
13290       op = DW_OP_gt;
13291       goto do_ucompare;
13292
13293     case LEU:
13294       op = DW_OP_le;
13295       goto do_ucompare;
13296
13297     case LTU:
13298       op = DW_OP_lt;
13299       goto do_ucompare;
13300
13301     do_ucompare:
13302       if (GET_MODE_CLASS (GET_MODE (XEXP (rtl, 0))) != MODE_INT
13303           || GET_MODE_SIZE (GET_MODE (XEXP (rtl, 0))) > DWARF2_ADDR_SIZE
13304           || GET_MODE (XEXP (rtl, 0)) != GET_MODE (XEXP (rtl, 1)))
13305         break;
13306
13307       op0 = mem_loc_descriptor (XEXP (rtl, 0), mode,
13308                                 VAR_INIT_STATUS_INITIALIZED);
13309       op1 = mem_loc_descriptor (XEXP (rtl, 1), mode,
13310                                 VAR_INIT_STATUS_INITIALIZED);
13311
13312       if (op0 == 0 || op1 == 0)
13313         break;
13314
13315       if (GET_MODE_SIZE (GET_MODE (XEXP (rtl, 0))) < DWARF2_ADDR_SIZE)
13316         {
13317           HOST_WIDE_INT mask = GET_MODE_MASK (GET_MODE (XEXP (rtl, 0)));
13318           add_loc_descr (&op0, int_loc_descriptor (mask));
13319           add_loc_descr (&op0, new_loc_descr (DW_OP_and, 0, 0));
13320           if (CONST_INT_P (XEXP (rtl, 1)))
13321             op1 = int_loc_descriptor (INTVAL (XEXP (rtl, 1)) & mask);
13322           else
13323             {
13324               add_loc_descr (&op1, int_loc_descriptor (mask));
13325               add_loc_descr (&op1, new_loc_descr (DW_OP_and, 0, 0));
13326             }
13327         }
13328       else
13329         {
13330           HOST_WIDE_INT bias = 1;
13331           bias <<= (DWARF2_ADDR_SIZE * BITS_PER_UNIT - 1);
13332           add_loc_descr (&op0, new_loc_descr (DW_OP_plus_uconst, bias, 0));
13333           if (CONST_INT_P (XEXP (rtl, 1)))
13334             op1 = int_loc_descriptor ((unsigned HOST_WIDE_INT) bias
13335                                       + INTVAL (XEXP (rtl, 1)));
13336           else
13337             add_loc_descr (&op1, new_loc_descr (DW_OP_plus_uconst, bias, 0));
13338         }
13339       goto do_compare;
13340
13341     case SMIN:
13342     case SMAX:
13343     case UMIN:
13344     case UMAX:
13345       if (GET_MODE_CLASS (GET_MODE (XEXP (rtl, 0))) != MODE_INT
13346           || GET_MODE_SIZE (GET_MODE (XEXP (rtl, 0))) > DWARF2_ADDR_SIZE
13347           || GET_MODE (XEXP (rtl, 0)) != GET_MODE (XEXP (rtl, 1)))
13348         break;
13349
13350       op0 = mem_loc_descriptor (XEXP (rtl, 0), mode,
13351                                 VAR_INIT_STATUS_INITIALIZED);
13352       op1 = mem_loc_descriptor (XEXP (rtl, 1), mode,
13353                                 VAR_INIT_STATUS_INITIALIZED);
13354
13355       if (op0 == 0 || op1 == 0)
13356         break;
13357
13358       add_loc_descr (&op0, new_loc_descr (DW_OP_dup, 0, 0));
13359       add_loc_descr (&op1, new_loc_descr (DW_OP_swap, 0, 0));
13360       add_loc_descr (&op1, new_loc_descr (DW_OP_over, 0, 0));
13361       if (GET_CODE (rtl) == UMIN || GET_CODE (rtl) == UMAX)
13362         {
13363           if (GET_MODE_SIZE (GET_MODE (XEXP (rtl, 0))) < DWARF2_ADDR_SIZE)
13364             {
13365               HOST_WIDE_INT mask = GET_MODE_MASK (GET_MODE (XEXP (rtl, 0)));
13366               add_loc_descr (&op0, int_loc_descriptor (mask));
13367               add_loc_descr (&op0, new_loc_descr (DW_OP_and, 0, 0));
13368               add_loc_descr (&op1, int_loc_descriptor (mask));
13369               add_loc_descr (&op1, new_loc_descr (DW_OP_and, 0, 0));
13370             }
13371           else
13372             {
13373               HOST_WIDE_INT bias = 1;
13374               bias <<= (DWARF2_ADDR_SIZE * BITS_PER_UNIT - 1);
13375               add_loc_descr (&op0, new_loc_descr (DW_OP_plus_uconst, bias, 0));
13376               add_loc_descr (&op1, new_loc_descr (DW_OP_plus_uconst, bias, 0));
13377             }
13378         }
13379       else if (GET_MODE_SIZE (GET_MODE (XEXP (rtl, 0))) < DWARF2_ADDR_SIZE)
13380         {
13381           int shift = DWARF2_ADDR_SIZE
13382                       - GET_MODE_SIZE (GET_MODE (XEXP (rtl, 0)));
13383           shift *= BITS_PER_UNIT;
13384           add_loc_descr (&op0, int_loc_descriptor (shift));
13385           add_loc_descr (&op0, new_loc_descr (DW_OP_shl, 0, 0));
13386           add_loc_descr (&op1, int_loc_descriptor (shift));
13387           add_loc_descr (&op1, new_loc_descr (DW_OP_shl, 0, 0));
13388         }
13389
13390       if (GET_CODE (rtl) == SMIN || GET_CODE (rtl) == UMIN)
13391         op = DW_OP_lt;
13392       else
13393         op = DW_OP_gt;
13394       mem_loc_result = op0;
13395       add_loc_descr (&mem_loc_result, op1);
13396       add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0));
13397       {
13398         dw_loc_descr_ref bra_node, drop_node;
13399
13400         bra_node = new_loc_descr (DW_OP_bra, 0, 0);
13401         add_loc_descr (&mem_loc_result, bra_node);
13402         add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_swap, 0, 0));
13403         drop_node = new_loc_descr (DW_OP_drop, 0, 0);
13404         add_loc_descr (&mem_loc_result, drop_node);
13405         bra_node->dw_loc_oprnd1.val_class = dw_val_class_loc;
13406         bra_node->dw_loc_oprnd1.v.val_loc = drop_node;
13407       }
13408       break;
13409
13410     case ZERO_EXTRACT:
13411     case SIGN_EXTRACT:
13412       if (CONST_INT_P (XEXP (rtl, 1))
13413           && CONST_INT_P (XEXP (rtl, 2))
13414           && ((unsigned) INTVAL (XEXP (rtl, 1))
13415               + (unsigned) INTVAL (XEXP (rtl, 2))
13416               <= GET_MODE_BITSIZE (GET_MODE (rtl)))
13417           && GET_MODE_BITSIZE (GET_MODE (rtl)) <= DWARF2_ADDR_SIZE
13418           && GET_MODE_BITSIZE (GET_MODE (XEXP (rtl, 0))) <= DWARF2_ADDR_SIZE)
13419         {
13420           int shift, size;
13421           op0 = mem_loc_descriptor (XEXP (rtl, 0), mode,
13422                                     VAR_INIT_STATUS_INITIALIZED);
13423           if (op0 == 0)
13424             break;
13425           if (GET_CODE (rtl) == SIGN_EXTRACT)
13426             op = DW_OP_shra;
13427           else
13428             op = DW_OP_shr;
13429           mem_loc_result = op0;
13430           size = INTVAL (XEXP (rtl, 1));
13431           shift = INTVAL (XEXP (rtl, 2));
13432           if (BITS_BIG_ENDIAN)
13433             shift = GET_MODE_BITSIZE (GET_MODE (XEXP (rtl, 0)))
13434                     - shift - size;
13435           if (shift + size != (int) DWARF2_ADDR_SIZE)
13436             {
13437               add_loc_descr (&mem_loc_result,
13438                              int_loc_descriptor (DWARF2_ADDR_SIZE
13439                                                  - shift - size));
13440               add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_shl, 0, 0));
13441             }
13442           if (size != (int) DWARF2_ADDR_SIZE)
13443             {
13444               add_loc_descr (&mem_loc_result,
13445                              int_loc_descriptor (DWARF2_ADDR_SIZE - size));
13446               add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0));
13447             }
13448         }
13449       break;
13450
13451     case COMPARE:
13452     case IF_THEN_ELSE:
13453     case ROTATE:
13454     case ROTATERT:
13455     case TRUNCATE:
13456       /* In theory, we could implement the above.  */
13457       /* DWARF cannot represent the unsigned compare operations
13458          natively.  */
13459     case SS_MULT:
13460     case US_MULT:
13461     case SS_DIV:
13462     case US_DIV:
13463     case SS_PLUS:
13464     case US_PLUS:
13465     case SS_MINUS:
13466     case US_MINUS:
13467     case SS_NEG:
13468     case US_NEG:
13469     case SS_ABS:
13470     case SS_ASHIFT:
13471     case US_ASHIFT:
13472     case SS_TRUNCATE:
13473     case US_TRUNCATE:
13474     case UDIV:
13475     case UNORDERED:
13476     case ORDERED:
13477     case UNEQ:
13478     case UNGE:
13479     case UNGT:
13480     case UNLE:
13481     case UNLT:
13482     case LTGT:
13483     case FLOAT_EXTEND:
13484     case FLOAT_TRUNCATE:
13485     case FLOAT:
13486     case UNSIGNED_FLOAT:
13487     case FIX:
13488     case UNSIGNED_FIX:
13489     case FRACT_CONVERT:
13490     case UNSIGNED_FRACT_CONVERT:
13491     case SAT_FRACT:
13492     case UNSIGNED_SAT_FRACT:
13493     case SQRT:
13494     case BSWAP:
13495     case FFS:
13496     case CLZ:
13497     case CTZ:
13498     case POPCOUNT:
13499     case PARITY:
13500     case ASM_OPERANDS:
13501     case UNSPEC:
13502     case HIGH:
13503       /* If delegitimize_address couldn't do anything with the UNSPEC, we
13504          can't express it in the debug info.  This can happen e.g. with some
13505          TLS UNSPECs.  */
13506       break;
13507
13508     case CONST_STRING:
13509       resolve_one_addr (&rtl, NULL);
13510       goto symref;
13511
13512     default:
13513 #ifdef ENABLE_CHECKING
13514       print_rtl (stderr, rtl);
13515       gcc_unreachable ();
13516 #else
13517       break;
13518 #endif
13519     }
13520
13521   if (mem_loc_result && initialized == VAR_INIT_STATUS_UNINITIALIZED)
13522     add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
13523
13524   return mem_loc_result;
13525 }
13526
13527 /* Return a descriptor that describes the concatenation of two locations.
13528    This is typically a complex variable.  */
13529
13530 static dw_loc_descr_ref
13531 concat_loc_descriptor (rtx x0, rtx x1, enum var_init_status initialized)
13532 {
13533   dw_loc_descr_ref cc_loc_result = NULL;
13534   dw_loc_descr_ref x0_ref
13535     = loc_descriptor (x0, VOIDmode, VAR_INIT_STATUS_INITIALIZED);
13536   dw_loc_descr_ref x1_ref
13537     = loc_descriptor (x1, VOIDmode, VAR_INIT_STATUS_INITIALIZED);
13538
13539   if (x0_ref == 0 || x1_ref == 0)
13540     return 0;
13541
13542   cc_loc_result = x0_ref;
13543   add_loc_descr_op_piece (&cc_loc_result, GET_MODE_SIZE (GET_MODE (x0)));
13544
13545   add_loc_descr (&cc_loc_result, x1_ref);
13546   add_loc_descr_op_piece (&cc_loc_result, GET_MODE_SIZE (GET_MODE (x1)));
13547
13548   if (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 /* Return a descriptor that describes the concatenation of N
13555    locations.  */
13556
13557 static dw_loc_descr_ref
13558 concatn_loc_descriptor (rtx concatn, enum var_init_status initialized)
13559 {
13560   unsigned int i;
13561   dw_loc_descr_ref cc_loc_result = NULL;
13562   unsigned int n = XVECLEN (concatn, 0);
13563
13564   for (i = 0; i < n; ++i)
13565     {
13566       dw_loc_descr_ref ref;
13567       rtx x = XVECEXP (concatn, 0, i);
13568
13569       ref = loc_descriptor (x, VOIDmode, VAR_INIT_STATUS_INITIALIZED);
13570       if (ref == NULL)
13571         return NULL;
13572
13573       add_loc_descr (&cc_loc_result, ref);
13574       add_loc_descr_op_piece (&cc_loc_result, GET_MODE_SIZE (GET_MODE (x)));
13575     }
13576
13577   if (cc_loc_result && initialized == VAR_INIT_STATUS_UNINITIALIZED)
13578     add_loc_descr (&cc_loc_result, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
13579
13580   return cc_loc_result;
13581 }
13582
13583 /* Output a proper Dwarf location descriptor for a variable or parameter
13584    which is either allocated in a register or in a memory location.  For a
13585    register, we just generate an OP_REG and the register number.  For a
13586    memory location we provide a Dwarf postfix expression describing how to
13587    generate the (dynamic) address of the object onto the address stack.
13588
13589    MODE is mode of the decl if this loc_descriptor is going to be used in
13590    .debug_loc section where DW_OP_stack_value and DW_OP_implicit_value are
13591    allowed, VOIDmode otherwise.
13592
13593    If we don't know how to describe it, return 0.  */
13594
13595 static dw_loc_descr_ref
13596 loc_descriptor (rtx rtl, enum machine_mode mode,
13597                 enum var_init_status initialized)
13598 {
13599   dw_loc_descr_ref loc_result = NULL;
13600
13601   switch (GET_CODE (rtl))
13602     {
13603     case SUBREG:
13604       /* The case of a subreg may arise when we have a local (register)
13605          variable or a formal (register) parameter which doesn't quite fill
13606          up an entire register.  For now, just assume that it is
13607          legitimate to make the Dwarf info refer to the whole register which
13608          contains the given subreg.  */
13609       loc_result = loc_descriptor (SUBREG_REG (rtl), mode, initialized);
13610       break;
13611
13612     case REG:
13613       loc_result = reg_loc_descriptor (rtl, initialized);
13614       break;
13615
13616     case SIGN_EXTEND:
13617     case ZERO_EXTEND:
13618       loc_result = loc_descriptor (XEXP (rtl, 0), mode, initialized);
13619       break;
13620
13621     case MEM:
13622       loc_result = mem_loc_descriptor (XEXP (rtl, 0), GET_MODE (rtl),
13623                                        initialized);
13624       if (loc_result == NULL)
13625         loc_result = tls_mem_loc_descriptor (rtl);
13626       break;
13627
13628     case CONCAT:
13629       loc_result = concat_loc_descriptor (XEXP (rtl, 0), XEXP (rtl, 1),
13630                                           initialized);
13631       break;
13632
13633     case CONCATN:
13634       loc_result = concatn_loc_descriptor (rtl, initialized);
13635       break;
13636
13637     case VAR_LOCATION:
13638       /* Single part.  */
13639       if (GET_CODE (XEXP (rtl, 1)) != PARALLEL)
13640         {
13641           loc_result = loc_descriptor (XEXP (XEXP (rtl, 1), 0), mode,
13642                                        initialized);
13643           break;
13644         }
13645
13646       rtl = XEXP (rtl, 1);
13647       /* FALLTHRU */
13648
13649     case PARALLEL:
13650       {
13651         rtvec par_elems = XVEC (rtl, 0);
13652         int num_elem = GET_NUM_ELEM (par_elems);
13653         enum machine_mode mode;
13654         int i;
13655
13656         /* Create the first one, so we have something to add to.  */
13657         loc_result = loc_descriptor (XEXP (RTVEC_ELT (par_elems, 0), 0),
13658                                      VOIDmode, initialized);
13659         if (loc_result == NULL)
13660           return NULL;
13661         mode = GET_MODE (XEXP (RTVEC_ELT (par_elems, 0), 0));
13662         add_loc_descr_op_piece (&loc_result, GET_MODE_SIZE (mode));
13663         for (i = 1; i < num_elem; i++)
13664           {
13665             dw_loc_descr_ref temp;
13666
13667             temp = loc_descriptor (XEXP (RTVEC_ELT (par_elems, i), 0),
13668                                    VOIDmode, initialized);
13669             if (temp == NULL)
13670               return NULL;
13671             add_loc_descr (&loc_result, temp);
13672             mode = GET_MODE (XEXP (RTVEC_ELT (par_elems, i), 0));
13673             add_loc_descr_op_piece (&loc_result, GET_MODE_SIZE (mode));
13674           }
13675       }
13676       break;
13677
13678     case CONST_INT:
13679       if (mode != VOIDmode && mode != BLKmode)
13680         loc_result = address_of_int_loc_descriptor (GET_MODE_SIZE (mode),
13681                                                     INTVAL (rtl));
13682       break;
13683
13684     case CONST_DOUBLE:
13685       if (mode == VOIDmode)
13686         mode = GET_MODE (rtl);
13687
13688       if (mode != VOIDmode && (dwarf_version >= 4 || !dwarf_strict))
13689         {
13690           gcc_assert (mode == GET_MODE (rtl) || VOIDmode == GET_MODE (rtl));
13691
13692           /* Note that a CONST_DOUBLE rtx could represent either an integer
13693              or a floating-point constant.  A CONST_DOUBLE is used whenever
13694              the constant requires more than one word in order to be
13695              adequately represented.  We output CONST_DOUBLEs as blocks.  */
13696           loc_result = new_loc_descr (DW_OP_implicit_value,
13697                                       GET_MODE_SIZE (mode), 0);
13698           if (SCALAR_FLOAT_MODE_P (mode))
13699             {
13700               unsigned int length = GET_MODE_SIZE (mode);
13701               unsigned char *array = GGC_NEWVEC (unsigned char, length);
13702
13703               insert_float (rtl, array);
13704               loc_result->dw_loc_oprnd2.val_class = dw_val_class_vec;
13705               loc_result->dw_loc_oprnd2.v.val_vec.length = length / 4;
13706               loc_result->dw_loc_oprnd2.v.val_vec.elt_size = 4;
13707               loc_result->dw_loc_oprnd2.v.val_vec.array = array;
13708             }
13709           else
13710             {
13711               loc_result->dw_loc_oprnd2.val_class = dw_val_class_const_double;
13712               loc_result->dw_loc_oprnd2.v.val_double.high
13713                 = CONST_DOUBLE_HIGH (rtl);
13714               loc_result->dw_loc_oprnd2.v.val_double.low
13715                 = CONST_DOUBLE_LOW (rtl);
13716             }
13717         }
13718       break;
13719
13720     case CONST_VECTOR:
13721       if (mode == VOIDmode)
13722         mode = GET_MODE (rtl);
13723
13724       if (mode != VOIDmode && (dwarf_version >= 4 || !dwarf_strict))
13725         {
13726           unsigned int elt_size = GET_MODE_UNIT_SIZE (GET_MODE (rtl));
13727           unsigned int length = CONST_VECTOR_NUNITS (rtl);
13728           unsigned char *array = GGC_NEWVEC (unsigned char, length * elt_size);
13729           unsigned int i;
13730           unsigned char *p;
13731
13732           gcc_assert (mode == GET_MODE (rtl) || VOIDmode == GET_MODE (rtl));
13733           switch (GET_MODE_CLASS (mode))
13734             {
13735             case MODE_VECTOR_INT:
13736               for (i = 0, p = array; i < length; i++, p += elt_size)
13737                 {
13738                   rtx elt = CONST_VECTOR_ELT (rtl, i);
13739                   HOST_WIDE_INT lo, hi;
13740
13741                   switch (GET_CODE (elt))
13742                     {
13743                     case CONST_INT:
13744                       lo = INTVAL (elt);
13745                       hi = -(lo < 0);
13746                       break;
13747
13748                     case CONST_DOUBLE:
13749                       lo = CONST_DOUBLE_LOW (elt);
13750                       hi = CONST_DOUBLE_HIGH (elt);
13751                       break;
13752
13753                     default:
13754                       gcc_unreachable ();
13755                     }
13756
13757                   if (elt_size <= sizeof (HOST_WIDE_INT))
13758                     insert_int (lo, elt_size, p);
13759                   else
13760                     {
13761                       unsigned char *p0 = p;
13762                       unsigned char *p1 = p + sizeof (HOST_WIDE_INT);
13763
13764                       gcc_assert (elt_size == 2 * sizeof (HOST_WIDE_INT));
13765                       if (WORDS_BIG_ENDIAN)
13766                         {
13767                           p0 = p1;
13768                           p1 = p;
13769                         }
13770                       insert_int (lo, sizeof (HOST_WIDE_INT), p0);
13771                       insert_int (hi, sizeof (HOST_WIDE_INT), p1);
13772                     }
13773                 }
13774               break;
13775
13776             case MODE_VECTOR_FLOAT:
13777               for (i = 0, p = array; i < length; i++, p += elt_size)
13778                 {
13779                   rtx elt = CONST_VECTOR_ELT (rtl, i);
13780                   insert_float (elt, p);
13781                 }
13782               break;
13783
13784             default:
13785               gcc_unreachable ();
13786             }
13787
13788           loc_result = new_loc_descr (DW_OP_implicit_value,
13789                                       length * elt_size, 0);
13790           loc_result->dw_loc_oprnd2.val_class = dw_val_class_vec;
13791           loc_result->dw_loc_oprnd2.v.val_vec.length = length;
13792           loc_result->dw_loc_oprnd2.v.val_vec.elt_size = elt_size;
13793           loc_result->dw_loc_oprnd2.v.val_vec.array = array;
13794         }
13795       break;
13796
13797     case CONST:
13798       if (mode == VOIDmode
13799           || GET_CODE (XEXP (rtl, 0)) == CONST_INT
13800           || GET_CODE (XEXP (rtl, 0)) == CONST_DOUBLE
13801           || GET_CODE (XEXP (rtl, 0)) == CONST_VECTOR)
13802         {
13803           loc_result = loc_descriptor (XEXP (rtl, 0), mode, initialized);
13804           break;
13805         }
13806       /* FALLTHROUGH */
13807     case SYMBOL_REF:
13808       if (!const_ok_for_output (rtl))
13809         break;
13810     case LABEL_REF:
13811       if (mode != VOIDmode && GET_MODE_SIZE (mode) == DWARF2_ADDR_SIZE
13812           && (dwarf_version >= 4 || !dwarf_strict))
13813         {
13814           loc_result = new_loc_descr (DW_OP_addr, 0, 0);
13815           loc_result->dw_loc_oprnd1.val_class = dw_val_class_addr;
13816           loc_result->dw_loc_oprnd1.v.val_addr = rtl;
13817           add_loc_descr (&loc_result, new_loc_descr (DW_OP_stack_value, 0, 0));
13818           VEC_safe_push (rtx, gc, used_rtx_array, rtl);
13819         }
13820       break;
13821
13822     default:
13823       if (GET_MODE_CLASS (mode) == MODE_INT && GET_MODE (rtl) == mode
13824           && GET_MODE_SIZE (GET_MODE (rtl)) <= DWARF2_ADDR_SIZE
13825           && (dwarf_version >= 4 || !dwarf_strict))
13826         {
13827           /* Value expression.  */
13828           loc_result = mem_loc_descriptor (rtl, VOIDmode, initialized);
13829           if (loc_result)
13830             add_loc_descr (&loc_result,
13831                            new_loc_descr (DW_OP_stack_value, 0, 0));
13832         }
13833       break;
13834     }
13835
13836   return loc_result;
13837 }
13838
13839 /* We need to figure out what section we should use as the base for the
13840    address ranges where a given location is valid.
13841    1. If this particular DECL has a section associated with it, use that.
13842    2. If this function has a section associated with it, use that.
13843    3. Otherwise, use the text section.
13844    XXX: If you split a variable across multiple sections, we won't notice.  */
13845
13846 static const char *
13847 secname_for_decl (const_tree decl)
13848 {
13849   const char *secname;
13850
13851   if (VAR_OR_FUNCTION_DECL_P (decl) && DECL_SECTION_NAME (decl))
13852     {
13853       tree sectree = DECL_SECTION_NAME (decl);
13854       secname = TREE_STRING_POINTER (sectree);
13855     }
13856   else if (current_function_decl && DECL_SECTION_NAME (current_function_decl))
13857     {
13858       tree sectree = DECL_SECTION_NAME (current_function_decl);
13859       secname = TREE_STRING_POINTER (sectree);
13860     }
13861   else if (cfun && in_cold_section_p)
13862     secname = crtl->subsections.cold_section_label;
13863   else
13864     secname = text_section_label;
13865
13866   return secname;
13867 }
13868
13869 /* Return true when DECL_BY_REFERENCE is defined and set for DECL.  */
13870
13871 static bool
13872 decl_by_reference_p (tree decl)
13873 {
13874   return ((TREE_CODE (decl) == PARM_DECL || TREE_CODE (decl) == RESULT_DECL
13875            || TREE_CODE (decl) == VAR_DECL)
13876           && DECL_BY_REFERENCE (decl));
13877 }
13878
13879 /* Helper function for dw_loc_list.  Compute proper Dwarf location descriptor
13880    for VARLOC.  */
13881
13882 static dw_loc_descr_ref
13883 dw_loc_list_1 (tree loc, rtx varloc, int want_address,
13884                enum var_init_status initialized)
13885 {
13886   int have_address = 0;
13887   dw_loc_descr_ref descr;
13888   enum machine_mode mode;
13889
13890   if (want_address != 2)
13891     {
13892       gcc_assert (GET_CODE (varloc) == VAR_LOCATION);
13893       /* Single part.  */
13894       if (GET_CODE (XEXP (varloc, 1)) != PARALLEL)
13895         {
13896           varloc = XEXP (XEXP (varloc, 1), 0);
13897           mode = GET_MODE (varloc);
13898           if (MEM_P (varloc))
13899             {
13900               varloc = XEXP (varloc, 0);
13901               have_address = 1;
13902             }
13903           descr = mem_loc_descriptor (varloc, mode, initialized);
13904         }
13905       else
13906         return 0;
13907     }
13908   else
13909     {
13910       descr = loc_descriptor (varloc, DECL_MODE (loc), initialized);
13911       have_address = 1;
13912     }
13913
13914   if (!descr)
13915     return 0;
13916
13917   if (want_address == 2 && !have_address
13918       && (dwarf_version >= 4 || !dwarf_strict))
13919     {
13920       if (int_size_in_bytes (TREE_TYPE (loc)) > DWARF2_ADDR_SIZE)
13921         {
13922           expansion_failed (loc, NULL_RTX,
13923                             "DWARF address size mismatch");
13924           return 0;
13925         }
13926       add_loc_descr (&descr, new_loc_descr (DW_OP_stack_value, 0, 0));
13927       have_address = 1;
13928     }
13929   /* Show if we can't fill the request for an address.  */
13930   if (want_address && !have_address)
13931     {
13932       expansion_failed (loc, NULL_RTX,
13933                         "Want address and only have value");
13934       return 0;
13935     }
13936
13937   /* If we've got an address and don't want one, dereference.  */
13938   if (!want_address && have_address)
13939     {
13940       HOST_WIDE_INT size = int_size_in_bytes (TREE_TYPE (loc));
13941       enum dwarf_location_atom op;
13942
13943       if (size > DWARF2_ADDR_SIZE || size == -1)
13944         {
13945           expansion_failed (loc, NULL_RTX,
13946                             "DWARF address size mismatch");
13947           return 0;
13948         }
13949       else if (size == DWARF2_ADDR_SIZE)
13950         op = DW_OP_deref;
13951       else
13952         op = DW_OP_deref_size;
13953
13954       add_loc_descr (&descr, new_loc_descr (op, size, 0));
13955     }
13956
13957   return descr;
13958 }
13959
13960 /* Return the dwarf representation of the location list LOC_LIST of
13961    DECL.  WANT_ADDRESS has the same meaning as in loc_list_from_tree
13962    function.  */
13963
13964 static dw_loc_list_ref
13965 dw_loc_list (var_loc_list *loc_list, tree decl, int want_address)
13966 {
13967   const char *endname, *secname;
13968   rtx varloc;
13969   enum var_init_status initialized;
13970   struct var_loc_node *node;
13971   dw_loc_descr_ref descr;
13972   char label_id[MAX_ARTIFICIAL_LABEL_BYTES];
13973   dw_loc_list_ref list = NULL;
13974   dw_loc_list_ref *listp = &list;
13975
13976   /* Now that we know what section we are using for a base,
13977      actually construct the list of locations.
13978      The first location information is what is passed to the
13979      function that creates the location list, and the remaining
13980      locations just get added on to that list.
13981      Note that we only know the start address for a location
13982      (IE location changes), so to build the range, we use
13983      the range [current location start, next location start].
13984      This means we have to special case the last node, and generate
13985      a range of [last location start, end of function label].  */
13986
13987   secname = secname_for_decl (decl);
13988
13989   for (node = loc_list->first; node->next; node = node->next)
13990     if (NOTE_VAR_LOCATION_LOC (node->var_loc_note) != NULL_RTX)
13991       {
13992         /* The variable has a location between NODE->LABEL and
13993            NODE->NEXT->LABEL.  */
13994         initialized = NOTE_VAR_LOCATION_STATUS (node->var_loc_note);
13995         varloc = NOTE_VAR_LOCATION (node->var_loc_note);
13996         descr = dw_loc_list_1 (decl, varloc, want_address, initialized);
13997         if (descr)
13998           {
13999             *listp = new_loc_list (descr, node->label, node->next->label,
14000                                    secname);
14001             listp = &(*listp)->dw_loc_next;
14002           }
14003       }
14004
14005   /* If the variable has a location at the last label
14006      it keeps its location until the end of function.  */
14007   if (NOTE_VAR_LOCATION_LOC (node->var_loc_note) != NULL_RTX)
14008     {
14009       initialized = NOTE_VAR_LOCATION_STATUS (node->var_loc_note);
14010       varloc = NOTE_VAR_LOCATION (node->var_loc_note);
14011       descr = dw_loc_list_1 (decl, varloc, want_address, initialized);
14012       if (descr)
14013         {
14014           if (!current_function_decl)
14015             endname = text_end_label;
14016           else
14017             {
14018               ASM_GENERATE_INTERNAL_LABEL (label_id, FUNC_END_LABEL,
14019                                            current_function_funcdef_no);
14020               endname = ggc_strdup (label_id);
14021             }
14022
14023           *listp = new_loc_list (descr, node->label, endname, secname);
14024           listp = &(*listp)->dw_loc_next;
14025         }
14026     }
14027
14028   /* Try to avoid the overhead of a location list emitting a location
14029      expression instead, but only if we didn't have more than one
14030      location entry in the first place.  If some entries were not
14031      representable, we don't want to pretend a single entry that was
14032      applies to the entire scope in which the variable is
14033      available.  */
14034   if (list && loc_list->first->next)
14035     gen_llsym (list);
14036
14037   return list;
14038 }
14039
14040 /* Return if the loc_list has only single element and thus can be represented
14041    as location description.   */
14042
14043 static bool
14044 single_element_loc_list_p (dw_loc_list_ref list)
14045 {
14046   gcc_assert (!list->dw_loc_next || list->ll_symbol);
14047   return !list->ll_symbol;
14048 }
14049
14050 /* To each location in list LIST add loc descr REF.  */
14051
14052 static void
14053 add_loc_descr_to_each (dw_loc_list_ref list, dw_loc_descr_ref ref)
14054 {
14055   dw_loc_descr_ref copy;
14056   add_loc_descr (&list->expr, ref);
14057   list = list->dw_loc_next;
14058   while (list)
14059     {
14060       copy = GGC_CNEW (dw_loc_descr_node);
14061       memcpy (copy, ref, sizeof (dw_loc_descr_node));
14062       add_loc_descr (&list->expr, copy);
14063       while (copy->dw_loc_next)
14064         {
14065           dw_loc_descr_ref new_copy = GGC_CNEW (dw_loc_descr_node);
14066           memcpy (new_copy, copy->dw_loc_next, sizeof (dw_loc_descr_node));
14067           copy->dw_loc_next = new_copy;
14068           copy = new_copy;
14069         }
14070       list = list->dw_loc_next;
14071     }
14072 }
14073
14074 /* Given two lists RET and LIST
14075    produce location list that is result of adding expression in LIST
14076    to expression in RET on each possition in program.
14077    Might be destructive on both RET and LIST.
14078
14079    TODO: We handle only simple cases of RET or LIST having at most one
14080    element. General case would inolve sorting the lists in program order
14081    and merging them that will need some additional work.
14082    Adding that will improve quality of debug info especially for SRA-ed
14083    structures.  */
14084
14085 static void
14086 add_loc_list (dw_loc_list_ref *ret, dw_loc_list_ref list)
14087 {
14088   if (!list)
14089     return;
14090   if (!*ret)
14091     {
14092       *ret = list;
14093       return;
14094     }
14095   if (!list->dw_loc_next)
14096     {
14097       add_loc_descr_to_each (*ret, list->expr);
14098       return;
14099     }
14100   if (!(*ret)->dw_loc_next)
14101     {
14102       add_loc_descr_to_each (list, (*ret)->expr);
14103       *ret = list;
14104       return;
14105     }
14106   expansion_failed (NULL_TREE, NULL_RTX,
14107                     "Don't know how to merge two non-trivial"
14108                     " location lists.\n");
14109   *ret = NULL;
14110   return;
14111 }
14112
14113 /* LOC is constant expression.  Try a luck, look it up in constant
14114    pool and return its loc_descr of its address.  */
14115
14116 static dw_loc_descr_ref
14117 cst_pool_loc_descr (tree loc)
14118 {
14119   /* Get an RTL for this, if something has been emitted.  */
14120   rtx rtl = lookup_constant_def (loc);
14121   enum machine_mode mode;
14122
14123   if (!rtl || !MEM_P (rtl))
14124     {
14125       gcc_assert (!rtl);
14126       return 0;
14127     }
14128   gcc_assert (GET_CODE (XEXP (rtl, 0)) == SYMBOL_REF);
14129
14130   /* TODO: We might get more coverage if we was actually delaying expansion
14131      of all expressions till end of compilation when constant pools are fully
14132      populated.  */
14133   if (!TREE_ASM_WRITTEN (SYMBOL_REF_DECL (XEXP (rtl, 0))))
14134     {
14135       expansion_failed (loc, NULL_RTX,
14136                         "CST value in contant pool but not marked.");
14137       return 0;
14138     }
14139   mode = GET_MODE (rtl);
14140   rtl = XEXP (rtl, 0);
14141   return mem_loc_descriptor (rtl, mode, VAR_INIT_STATUS_INITIALIZED);
14142 }
14143
14144 /* Return dw_loc_list representing address of addr_expr LOC
14145    by looking for innder INDIRECT_REF expression and turing it
14146    into simple arithmetics.  */
14147
14148 static dw_loc_list_ref
14149 loc_list_for_address_of_addr_expr_of_indirect_ref (tree loc, bool toplev)
14150 {
14151   tree obj, offset;
14152   HOST_WIDE_INT bitsize, bitpos, bytepos;
14153   enum machine_mode mode;
14154   int volatilep;
14155   int unsignedp = TYPE_UNSIGNED (TREE_TYPE (loc));
14156   dw_loc_list_ref list_ret = NULL, list_ret1 = NULL;
14157
14158   obj = get_inner_reference (TREE_OPERAND (loc, 0),
14159                              &bitsize, &bitpos, &offset, &mode,
14160                              &unsignedp, &volatilep, false);
14161   STRIP_NOPS (obj);
14162   if (bitpos % BITS_PER_UNIT)
14163     {
14164       expansion_failed (loc, NULL_RTX, "bitfield access");
14165       return 0;
14166     }
14167   if (!INDIRECT_REF_P (obj))
14168     {
14169       expansion_failed (obj,
14170                         NULL_RTX, "no indirect ref in inner refrence");
14171       return 0;
14172     }
14173   if (!offset && !bitpos)
14174     list_ret = loc_list_from_tree (TREE_OPERAND (obj, 0), toplev ? 2 : 1);
14175   else if (toplev
14176            && int_size_in_bytes (TREE_TYPE (loc)) <= DWARF2_ADDR_SIZE
14177            && (dwarf_version >= 4 || !dwarf_strict))
14178     {
14179       list_ret = loc_list_from_tree (TREE_OPERAND (obj, 0), 0);
14180       if (!list_ret)
14181         return 0;
14182       if (offset)
14183         {
14184           /* Variable offset.  */
14185           list_ret1 = loc_list_from_tree (offset, 0);
14186           if (list_ret1 == 0)
14187             return 0;
14188           add_loc_list (&list_ret, list_ret1);
14189           if (!list_ret)
14190             return 0;
14191           add_loc_descr_to_each (list_ret,
14192                                  new_loc_descr (DW_OP_plus, 0, 0));
14193         }
14194       bytepos = bitpos / BITS_PER_UNIT;
14195       if (bytepos > 0)
14196         add_loc_descr_to_each (list_ret,
14197                                new_loc_descr (DW_OP_plus_uconst,
14198                                               bytepos, 0));
14199       else if (bytepos < 0)
14200         loc_list_plus_const (list_ret, bytepos);
14201       add_loc_descr_to_each (list_ret,
14202                              new_loc_descr (DW_OP_stack_value, 0, 0));
14203     }
14204   return list_ret;
14205 }
14206
14207
14208 /* Generate Dwarf location list representing LOC.
14209    If WANT_ADDRESS is false, expression computing LOC will be computed
14210    If WANT_ADDRESS is 1, expression computing address of LOC will be returned
14211    if WANT_ADDRESS is 2, expression computing address useable in location
14212      will be returned (i.e. DW_OP_reg can be used
14213      to refer to register values).  */
14214
14215 static dw_loc_list_ref
14216 loc_list_from_tree (tree loc, int want_address)
14217 {
14218   dw_loc_descr_ref ret = NULL, ret1 = NULL;
14219   dw_loc_list_ref list_ret = NULL, list_ret1 = NULL;
14220   int have_address = 0;
14221   enum dwarf_location_atom op;
14222
14223   /* ??? Most of the time we do not take proper care for sign/zero
14224      extending the values properly.  Hopefully this won't be a real
14225      problem...  */
14226
14227   switch (TREE_CODE (loc))
14228     {
14229     case ERROR_MARK:
14230       expansion_failed (loc, NULL_RTX, "ERROR_MARK");
14231       return 0;
14232
14233     case PLACEHOLDER_EXPR:
14234       /* This case involves extracting fields from an object to determine the
14235          position of other fields.  We don't try to encode this here.  The
14236          only user of this is Ada, which encodes the needed information using
14237          the names of types.  */
14238       expansion_failed (loc, NULL_RTX, "PLACEHOLDER_EXPR");
14239       return 0;
14240
14241     case CALL_EXPR:
14242       expansion_failed (loc, NULL_RTX, "CALL_EXPR");
14243       /* There are no opcodes for these operations.  */
14244       return 0;
14245
14246     case PREINCREMENT_EXPR:
14247     case PREDECREMENT_EXPR:
14248     case POSTINCREMENT_EXPR:
14249     case POSTDECREMENT_EXPR:
14250       expansion_failed (loc, NULL_RTX, "PRE/POST INDCREMENT/DECREMENT");
14251       /* There are no opcodes for these operations.  */
14252       return 0;
14253
14254     case ADDR_EXPR:
14255       /* If we already want an address, see if there is INDIRECT_REF inside
14256          e.g. for &this->field.  */
14257       if (want_address)
14258         {
14259           list_ret = loc_list_for_address_of_addr_expr_of_indirect_ref
14260                        (loc, want_address == 2);
14261           if (list_ret)
14262             have_address = 1;
14263           else if (decl_address_ip_invariant_p (TREE_OPERAND (loc, 0))
14264                    && (ret = cst_pool_loc_descr (loc)))
14265             have_address = 1;
14266         }
14267         /* Otherwise, process the argument and look for the address.  */
14268       if (!list_ret && !ret)
14269         list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 1);
14270       else
14271         {
14272           if (want_address)
14273             expansion_failed (loc, NULL_RTX, "need address of ADDR_EXPR");
14274           return NULL;
14275         }
14276       break;
14277
14278     case VAR_DECL:
14279       if (DECL_THREAD_LOCAL_P (loc))
14280         {
14281           rtx rtl;
14282           enum dwarf_location_atom first_op;
14283           enum dwarf_location_atom second_op;
14284           bool dtprel = false;
14285
14286           if (targetm.have_tls)
14287             {
14288               /* If this is not defined, we have no way to emit the
14289                  data.  */
14290               if (!targetm.asm_out.output_dwarf_dtprel)
14291                 return 0;
14292
14293                /* The way DW_OP_GNU_push_tls_address is specified, we
14294                   can only look up addresses of objects in the current
14295                   module.  */
14296               if (DECL_EXTERNAL (loc) && !targetm.binds_local_p (loc))
14297                 return 0;
14298               first_op = DW_OP_addr;
14299               dtprel = true;
14300               second_op = DW_OP_GNU_push_tls_address;
14301             }
14302           else
14303             {
14304               if (!targetm.emutls.debug_form_tls_address
14305                   || !(dwarf_version >= 3 || !dwarf_strict))
14306                 return 0;
14307               loc = emutls_decl (loc);
14308               first_op = DW_OP_addr;
14309               second_op = DW_OP_form_tls_address;
14310             }
14311
14312           rtl = rtl_for_decl_location (loc);
14313           if (rtl == NULL_RTX)
14314             return 0;
14315
14316           if (!MEM_P (rtl))
14317             return 0;
14318           rtl = XEXP (rtl, 0);
14319           if (! CONSTANT_P (rtl))
14320             return 0;
14321
14322           ret = new_loc_descr (first_op, 0, 0);
14323           ret->dw_loc_oprnd1.val_class = dw_val_class_addr;
14324           ret->dw_loc_oprnd1.v.val_addr = rtl;
14325           ret->dtprel = dtprel;
14326
14327           ret1 = new_loc_descr (second_op, 0, 0);
14328           add_loc_descr (&ret, ret1);
14329
14330           have_address = 1;
14331           break;
14332         }
14333       /* FALLTHRU */
14334
14335     case PARM_DECL:
14336       if (DECL_HAS_VALUE_EXPR_P (loc))
14337         return loc_list_from_tree (DECL_VALUE_EXPR (loc),
14338                                    want_address);
14339       /* FALLTHRU */
14340
14341     case RESULT_DECL:
14342     case FUNCTION_DECL:
14343       {
14344         rtx rtl;
14345         var_loc_list *loc_list = lookup_decl_loc (loc);
14346
14347         if (loc_list && loc_list->first)
14348           {
14349             list_ret = dw_loc_list (loc_list, loc, want_address);
14350             have_address = want_address != 0;
14351             break;
14352           }
14353         rtl = rtl_for_decl_location (loc);
14354         if (rtl == NULL_RTX)
14355           {
14356             expansion_failed (loc, NULL_RTX, "DECL has no RTL");
14357             return 0;
14358           }
14359         else if (CONST_INT_P (rtl))
14360           {
14361             HOST_WIDE_INT val = INTVAL (rtl);
14362             if (TYPE_UNSIGNED (TREE_TYPE (loc)))
14363               val &= GET_MODE_MASK (DECL_MODE (loc));
14364             ret = int_loc_descriptor (val);
14365           }
14366         else if (GET_CODE (rtl) == CONST_STRING)
14367           {
14368             expansion_failed (loc, NULL_RTX, "CONST_STRING");
14369             return 0;
14370           }
14371         else if (CONSTANT_P (rtl) && const_ok_for_output (rtl))
14372           {
14373             ret = new_loc_descr (DW_OP_addr, 0, 0);
14374             ret->dw_loc_oprnd1.val_class = dw_val_class_addr;
14375             ret->dw_loc_oprnd1.v.val_addr = rtl;
14376           }
14377         else
14378           {
14379             enum machine_mode mode;
14380
14381             /* Certain constructs can only be represented at top-level.  */
14382             if (want_address == 2)
14383               {
14384                 ret = loc_descriptor (rtl, VOIDmode,
14385                                       VAR_INIT_STATUS_INITIALIZED);
14386                 have_address = 1;
14387               }
14388             else
14389               {
14390                 mode = GET_MODE (rtl);
14391                 if (MEM_P (rtl))
14392                   {
14393                     rtl = XEXP (rtl, 0);
14394                     have_address = 1;
14395                   }
14396                 ret = mem_loc_descriptor (rtl, mode, VAR_INIT_STATUS_INITIALIZED);
14397               }
14398             if (!ret)
14399               expansion_failed (loc, rtl,
14400                                 "failed to produce loc descriptor for rtl");
14401           }
14402       }
14403       break;
14404
14405     case INDIRECT_REF:
14406     case ALIGN_INDIRECT_REF:
14407     case MISALIGNED_INDIRECT_REF:
14408       list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 0);
14409       have_address = 1;
14410       break;
14411
14412     case COMPOUND_EXPR:
14413       return loc_list_from_tree (TREE_OPERAND (loc, 1), want_address);
14414
14415     CASE_CONVERT:
14416     case VIEW_CONVERT_EXPR:
14417     case SAVE_EXPR:
14418     case MODIFY_EXPR:
14419       return loc_list_from_tree (TREE_OPERAND (loc, 0), want_address);
14420
14421     case COMPONENT_REF:
14422     case BIT_FIELD_REF:
14423     case ARRAY_REF:
14424     case ARRAY_RANGE_REF:
14425     case REALPART_EXPR:
14426     case IMAGPART_EXPR:
14427       {
14428         tree obj, offset;
14429         HOST_WIDE_INT bitsize, bitpos, bytepos;
14430         enum machine_mode mode;
14431         int volatilep;
14432         int unsignedp = TYPE_UNSIGNED (TREE_TYPE (loc));
14433
14434         obj = get_inner_reference (loc, &bitsize, &bitpos, &offset, &mode,
14435                                    &unsignedp, &volatilep, false);
14436
14437         gcc_assert (obj != loc);
14438
14439         list_ret = loc_list_from_tree (obj,
14440                                        want_address == 2
14441                                        && !bitpos && !offset ? 2 : 1);
14442         /* TODO: We can extract value of the small expression via shifting even
14443            for nonzero bitpos.  */
14444         if (list_ret == 0)
14445           return 0;
14446         if (bitpos % BITS_PER_UNIT != 0 || bitsize % BITS_PER_UNIT != 0)
14447           {
14448             expansion_failed (loc, NULL_RTX,
14449                               "bitfield access");
14450             return 0;
14451           }
14452
14453         if (offset != NULL_TREE)
14454           {
14455             /* Variable offset.  */
14456             list_ret1 = loc_list_from_tree (offset, 0);
14457             if (list_ret1 == 0)
14458               return 0;
14459             add_loc_list (&list_ret, list_ret1);
14460             if (!list_ret)
14461               return 0;
14462             add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_plus, 0, 0));
14463           }
14464
14465         bytepos = bitpos / BITS_PER_UNIT;
14466         if (bytepos > 0)
14467           add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_plus_uconst, bytepos, 0));
14468         else if (bytepos < 0)
14469           loc_list_plus_const (list_ret, bytepos);
14470
14471         have_address = 1;
14472         break;
14473       }
14474
14475     case INTEGER_CST:
14476       if ((want_address || !host_integerp (loc, 0))
14477           && (ret = cst_pool_loc_descr (loc)))
14478         have_address = 1;
14479       else if (want_address == 2
14480                && host_integerp (loc, 0)
14481                && (ret = address_of_int_loc_descriptor
14482                            (int_size_in_bytes (TREE_TYPE (loc)),
14483                             tree_low_cst (loc, 0))))
14484         have_address = 1;
14485       else if (host_integerp (loc, 0))
14486         ret = int_loc_descriptor (tree_low_cst (loc, 0));
14487       else
14488         {
14489           expansion_failed (loc, NULL_RTX,
14490                             "Integer operand is not host integer");
14491           return 0;
14492         }
14493       break;
14494
14495     case CONSTRUCTOR:
14496     case REAL_CST:
14497     case STRING_CST:
14498     case COMPLEX_CST:
14499       if ((ret = cst_pool_loc_descr (loc)))
14500         have_address = 1;
14501       else
14502       /* We can construct small constants here using int_loc_descriptor.  */
14503         expansion_failed (loc, NULL_RTX,
14504                           "constructor or constant not in constant pool");
14505       break;
14506
14507     case TRUTH_AND_EXPR:
14508     case TRUTH_ANDIF_EXPR:
14509     case BIT_AND_EXPR:
14510       op = DW_OP_and;
14511       goto do_binop;
14512
14513     case TRUTH_XOR_EXPR:
14514     case BIT_XOR_EXPR:
14515       op = DW_OP_xor;
14516       goto do_binop;
14517
14518     case TRUTH_OR_EXPR:
14519     case TRUTH_ORIF_EXPR:
14520     case BIT_IOR_EXPR:
14521       op = DW_OP_or;
14522       goto do_binop;
14523
14524     case FLOOR_DIV_EXPR:
14525     case CEIL_DIV_EXPR:
14526     case ROUND_DIV_EXPR:
14527     case TRUNC_DIV_EXPR:
14528       if (TYPE_UNSIGNED (TREE_TYPE (loc)))
14529         return 0;
14530       op = DW_OP_div;
14531       goto do_binop;
14532
14533     case MINUS_EXPR:
14534       op = DW_OP_minus;
14535       goto do_binop;
14536
14537     case FLOOR_MOD_EXPR:
14538     case CEIL_MOD_EXPR:
14539     case ROUND_MOD_EXPR:
14540     case TRUNC_MOD_EXPR:
14541       if (TYPE_UNSIGNED (TREE_TYPE (loc)))
14542         {
14543           op = DW_OP_mod;
14544           goto do_binop;
14545         }
14546       list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 0);
14547       list_ret1 = loc_list_from_tree (TREE_OPERAND (loc, 1), 0);
14548       if (list_ret == 0 || list_ret1 == 0)
14549         return 0;
14550
14551       add_loc_list (&list_ret, list_ret1);
14552       if (list_ret == 0)
14553         return 0;
14554       add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_over, 0, 0));
14555       add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_over, 0, 0));
14556       add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_div, 0, 0));
14557       add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_mul, 0, 0));
14558       add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_minus, 0, 0));
14559       break;
14560
14561     case MULT_EXPR:
14562       op = DW_OP_mul;
14563       goto do_binop;
14564
14565     case LSHIFT_EXPR:
14566       op = DW_OP_shl;
14567       goto do_binop;
14568
14569     case RSHIFT_EXPR:
14570       op = (TYPE_UNSIGNED (TREE_TYPE (loc)) ? DW_OP_shr : DW_OP_shra);
14571       goto do_binop;
14572
14573     case POINTER_PLUS_EXPR:
14574     case PLUS_EXPR:
14575       if (TREE_CODE (TREE_OPERAND (loc, 1)) == INTEGER_CST
14576           && host_integerp (TREE_OPERAND (loc, 1), 0))
14577         {
14578           list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 0);
14579           if (list_ret == 0)
14580             return 0;
14581
14582           loc_list_plus_const (list_ret, tree_low_cst (TREE_OPERAND (loc, 1), 0));
14583           break;
14584         }
14585
14586       op = DW_OP_plus;
14587       goto do_binop;
14588
14589     case LE_EXPR:
14590       if (TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (loc, 0))))
14591         return 0;
14592
14593       op = DW_OP_le;
14594       goto do_binop;
14595
14596     case GE_EXPR:
14597       if (TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (loc, 0))))
14598         return 0;
14599
14600       op = DW_OP_ge;
14601       goto do_binop;
14602
14603     case LT_EXPR:
14604       if (TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (loc, 0))))
14605         return 0;
14606
14607       op = DW_OP_lt;
14608       goto do_binop;
14609
14610     case GT_EXPR:
14611       if (TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (loc, 0))))
14612         return 0;
14613
14614       op = DW_OP_gt;
14615       goto do_binop;
14616
14617     case EQ_EXPR:
14618       op = DW_OP_eq;
14619       goto do_binop;
14620
14621     case NE_EXPR:
14622       op = DW_OP_ne;
14623       goto do_binop;
14624
14625     do_binop:
14626       list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 0);
14627       list_ret1 = loc_list_from_tree (TREE_OPERAND (loc, 1), 0);
14628       if (list_ret == 0 || list_ret1 == 0)
14629         return 0;
14630
14631       add_loc_list (&list_ret, list_ret1);
14632       if (list_ret == 0)
14633         return 0;
14634       add_loc_descr_to_each (list_ret, new_loc_descr (op, 0, 0));
14635       break;
14636
14637     case TRUTH_NOT_EXPR:
14638     case BIT_NOT_EXPR:
14639       op = DW_OP_not;
14640       goto do_unop;
14641
14642     case ABS_EXPR:
14643       op = DW_OP_abs;
14644       goto do_unop;
14645
14646     case NEGATE_EXPR:
14647       op = DW_OP_neg;
14648       goto do_unop;
14649
14650     do_unop:
14651       list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 0);
14652       if (list_ret == 0)
14653         return 0;
14654
14655       add_loc_descr_to_each (list_ret, new_loc_descr (op, 0, 0));
14656       break;
14657
14658     case MIN_EXPR:
14659     case MAX_EXPR:
14660       {
14661         const enum tree_code code =
14662           TREE_CODE (loc) == MIN_EXPR ? GT_EXPR : LT_EXPR;
14663
14664         loc = build3 (COND_EXPR, TREE_TYPE (loc),
14665                       build2 (code, integer_type_node,
14666                               TREE_OPERAND (loc, 0), TREE_OPERAND (loc, 1)),
14667                       TREE_OPERAND (loc, 1), TREE_OPERAND (loc, 0));
14668       }
14669
14670       /* ... fall through ...  */
14671
14672     case COND_EXPR:
14673       {
14674         dw_loc_descr_ref lhs
14675           = loc_descriptor_from_tree (TREE_OPERAND (loc, 1), 0);
14676         dw_loc_list_ref rhs
14677           = loc_list_from_tree (TREE_OPERAND (loc, 2), 0);
14678         dw_loc_descr_ref bra_node, jump_node, tmp;
14679
14680         list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 0);
14681         if (list_ret == 0 || lhs == 0 || rhs == 0)
14682           return 0;
14683
14684         bra_node = new_loc_descr (DW_OP_bra, 0, 0);
14685         add_loc_descr_to_each (list_ret, bra_node);
14686
14687         add_loc_list (&list_ret, rhs);
14688         jump_node = new_loc_descr (DW_OP_skip, 0, 0);
14689         add_loc_descr_to_each (list_ret, jump_node);
14690
14691         add_loc_descr_to_each (list_ret, lhs);
14692         bra_node->dw_loc_oprnd1.val_class = dw_val_class_loc;
14693         bra_node->dw_loc_oprnd1.v.val_loc = lhs;
14694
14695         /* ??? Need a node to point the skip at.  Use a nop.  */
14696         tmp = new_loc_descr (DW_OP_nop, 0, 0);
14697         add_loc_descr_to_each (list_ret, tmp);
14698         jump_node->dw_loc_oprnd1.val_class = dw_val_class_loc;
14699         jump_node->dw_loc_oprnd1.v.val_loc = tmp;
14700       }
14701       break;
14702
14703     case FIX_TRUNC_EXPR:
14704       return 0;
14705
14706     default:
14707       /* Leave front-end specific codes as simply unknown.  This comes
14708          up, for instance, with the C STMT_EXPR.  */
14709       if ((unsigned int) TREE_CODE (loc)
14710           >= (unsigned int) LAST_AND_UNUSED_TREE_CODE)
14711         {
14712           expansion_failed (loc, NULL_RTX,
14713                             "language specific tree node");
14714           return 0;
14715         }
14716
14717 #ifdef ENABLE_CHECKING
14718       /* Otherwise this is a generic code; we should just lists all of
14719          these explicitly.  We forgot one.  */
14720       gcc_unreachable ();
14721 #else
14722       /* In a release build, we want to degrade gracefully: better to
14723          generate incomplete debugging information than to crash.  */
14724       return NULL;
14725 #endif
14726     }
14727
14728   if (!ret && !list_ret)
14729     return 0;
14730
14731   if (want_address == 2 && !have_address
14732       && (dwarf_version >= 4 || !dwarf_strict))
14733     {
14734       if (int_size_in_bytes (TREE_TYPE (loc)) > DWARF2_ADDR_SIZE)
14735         {
14736           expansion_failed (loc, NULL_RTX,
14737                             "DWARF address size mismatch");
14738           return 0;
14739         }
14740       if (ret)
14741         add_loc_descr (&ret, new_loc_descr (DW_OP_stack_value, 0, 0));
14742       else
14743         add_loc_descr_to_each (list_ret,
14744                                new_loc_descr (DW_OP_stack_value, 0, 0));
14745       have_address = 1;
14746     }
14747   /* Show if we can't fill the request for an address.  */
14748   if (want_address && !have_address)
14749     {
14750       expansion_failed (loc, NULL_RTX,
14751                         "Want address and only have value");
14752       return 0;
14753     }
14754
14755   gcc_assert (!ret || !list_ret);
14756
14757   /* If we've got an address and don't want one, dereference.  */
14758   if (!want_address && have_address)
14759     {
14760       HOST_WIDE_INT size = int_size_in_bytes (TREE_TYPE (loc));
14761
14762       if (size > DWARF2_ADDR_SIZE || size == -1)
14763         {
14764           expansion_failed (loc, NULL_RTX,
14765                             "DWARF address size mismatch");
14766           return 0;
14767         }
14768       else if (size == DWARF2_ADDR_SIZE)
14769         op = DW_OP_deref;
14770       else
14771         op = DW_OP_deref_size;
14772
14773       if (ret)
14774         add_loc_descr (&ret, new_loc_descr (op, size, 0));
14775       else
14776         add_loc_descr_to_each (list_ret, new_loc_descr (op, size, 0));
14777     }
14778   if (ret)
14779     list_ret = new_loc_list (ret, NULL, NULL, NULL);
14780
14781   return list_ret;
14782 }
14783
14784 /* Same as above but return only single location expression.  */
14785 static dw_loc_descr_ref
14786 loc_descriptor_from_tree (tree loc, int want_address)
14787 {
14788   dw_loc_list_ref ret = loc_list_from_tree (loc, want_address);
14789   if (!ret)
14790     return NULL;
14791   if (ret->dw_loc_next)
14792     {
14793       expansion_failed (loc, NULL_RTX,
14794                         "Location list where only loc descriptor needed");
14795       return NULL;
14796     }
14797   return ret->expr;
14798 }
14799
14800 /* Given a value, round it up to the lowest multiple of `boundary'
14801    which is not less than the value itself.  */
14802
14803 static inline HOST_WIDE_INT
14804 ceiling (HOST_WIDE_INT value, unsigned int boundary)
14805 {
14806   return (((value + boundary - 1) / boundary) * boundary);
14807 }
14808
14809 /* Given a pointer to what is assumed to be a FIELD_DECL node, return a
14810    pointer to the declared type for the relevant field variable, or return
14811    `integer_type_node' if the given node turns out to be an
14812    ERROR_MARK node.  */
14813
14814 static inline tree
14815 field_type (const_tree decl)
14816 {
14817   tree type;
14818
14819   if (TREE_CODE (decl) == ERROR_MARK)
14820     return integer_type_node;
14821
14822   type = DECL_BIT_FIELD_TYPE (decl);
14823   if (type == NULL_TREE)
14824     type = TREE_TYPE (decl);
14825
14826   return type;
14827 }
14828
14829 /* Given a pointer to a tree node, return the alignment in bits for
14830    it, or else return BITS_PER_WORD if the node actually turns out to
14831    be an ERROR_MARK node.  */
14832
14833 static inline unsigned
14834 simple_type_align_in_bits (const_tree type)
14835 {
14836   return (TREE_CODE (type) != ERROR_MARK) ? TYPE_ALIGN (type) : BITS_PER_WORD;
14837 }
14838
14839 static inline unsigned
14840 simple_decl_align_in_bits (const_tree decl)
14841 {
14842   return (TREE_CODE (decl) != ERROR_MARK) ? DECL_ALIGN (decl) : BITS_PER_WORD;
14843 }
14844
14845 /* Return the result of rounding T up to ALIGN.  */
14846
14847 static inline HOST_WIDE_INT
14848 round_up_to_align (HOST_WIDE_INT t, unsigned int align)
14849 {
14850   /* We must be careful if T is negative because HOST_WIDE_INT can be
14851      either "above" or "below" unsigned int as per the C promotion
14852      rules, depending on the host, thus making the signedness of the
14853      direct multiplication and division unpredictable.  */
14854   unsigned HOST_WIDE_INT u = (unsigned HOST_WIDE_INT) t;
14855
14856   u += align - 1;
14857   u /= align;
14858   u *= align;
14859
14860   return (HOST_WIDE_INT) u;
14861 }
14862
14863 /* Given a pointer to a FIELD_DECL, compute and return the byte offset of the
14864    lowest addressed byte of the "containing object" for the given FIELD_DECL,
14865    or return 0 if we are unable to determine what that offset is, either
14866    because the argument turns out to be a pointer to an ERROR_MARK node, or
14867    because the offset is actually variable.  (We can't handle the latter case
14868    just yet).  */
14869
14870 static HOST_WIDE_INT
14871 field_byte_offset (const_tree decl)
14872 {
14873   HOST_WIDE_INT object_offset_in_bits;
14874   HOST_WIDE_INT bitpos_int;
14875
14876   if (TREE_CODE (decl) == ERROR_MARK)
14877     return 0;
14878
14879   gcc_assert (TREE_CODE (decl) == FIELD_DECL);
14880
14881   /* We cannot yet cope with fields whose positions are variable, so
14882      for now, when we see such things, we simply return 0.  Someday, we may
14883      be able to handle such cases, but it will be damn difficult.  */
14884   if (! host_integerp (bit_position (decl), 0))
14885     return 0;
14886
14887   bitpos_int = int_bit_position (decl);
14888
14889 #ifdef PCC_BITFIELD_TYPE_MATTERS
14890   if (PCC_BITFIELD_TYPE_MATTERS)
14891     {
14892       tree type;
14893       tree field_size_tree;
14894       HOST_WIDE_INT deepest_bitpos;
14895       unsigned HOST_WIDE_INT field_size_in_bits;
14896       unsigned int type_align_in_bits;
14897       unsigned int decl_align_in_bits;
14898       unsigned HOST_WIDE_INT type_size_in_bits;
14899
14900       type = field_type (decl);
14901       type_size_in_bits = simple_type_size_in_bits (type);
14902       type_align_in_bits = simple_type_align_in_bits (type);
14903
14904       field_size_tree = DECL_SIZE (decl);
14905
14906       /* The size could be unspecified if there was an error, or for
14907          a flexible array member.  */
14908       if (!field_size_tree)
14909         field_size_tree = bitsize_zero_node;
14910
14911       /* If the size of the field is not constant, use the type size.  */
14912       if (host_integerp (field_size_tree, 1))
14913         field_size_in_bits = tree_low_cst (field_size_tree, 1);
14914       else
14915         field_size_in_bits = type_size_in_bits;
14916
14917       decl_align_in_bits = simple_decl_align_in_bits (decl);
14918
14919       /* The GCC front-end doesn't make any attempt to keep track of the
14920          starting bit offset (relative to the start of the containing
14921          structure type) of the hypothetical "containing object" for a
14922          bit-field.  Thus, when computing the byte offset value for the
14923          start of the "containing object" of a bit-field, we must deduce
14924          this information on our own. This can be rather tricky to do in
14925          some cases.  For example, handling the following structure type
14926          definition when compiling for an i386/i486 target (which only
14927          aligns long long's to 32-bit boundaries) can be very tricky:
14928
14929          struct S { int field1; long long field2:31; };
14930
14931          Fortunately, there is a simple rule-of-thumb which can be used
14932          in such cases.  When compiling for an i386/i486, GCC will
14933          allocate 8 bytes for the structure shown above.  It decides to
14934          do this based upon one simple rule for bit-field allocation.
14935          GCC allocates each "containing object" for each bit-field at
14936          the first (i.e. lowest addressed) legitimate alignment boundary
14937          (based upon the required minimum alignment for the declared
14938          type of the field) which it can possibly use, subject to the
14939          condition that there is still enough available space remaining
14940          in the containing object (when allocated at the selected point)
14941          to fully accommodate all of the bits of the bit-field itself.
14942
14943          This simple rule makes it obvious why GCC allocates 8 bytes for
14944          each object of the structure type shown above.  When looking
14945          for a place to allocate the "containing object" for `field2',
14946          the compiler simply tries to allocate a 64-bit "containing
14947          object" at each successive 32-bit boundary (starting at zero)
14948          until it finds a place to allocate that 64- bit field such that
14949          at least 31 contiguous (and previously unallocated) bits remain
14950          within that selected 64 bit field.  (As it turns out, for the
14951          example above, the compiler finds it is OK to allocate the
14952          "containing object" 64-bit field at bit-offset zero within the
14953          structure type.)
14954
14955          Here we attempt to work backwards from the limited set of facts
14956          we're given, and we try to deduce from those facts, where GCC
14957          must have believed that the containing object started (within
14958          the structure type). The value we deduce is then used (by the
14959          callers of this routine) to generate DW_AT_location and
14960          DW_AT_bit_offset attributes for fields (both bit-fields and, in
14961          the case of DW_AT_location, regular fields as well).  */
14962
14963       /* Figure out the bit-distance from the start of the structure to
14964          the "deepest" bit of the bit-field.  */
14965       deepest_bitpos = bitpos_int + field_size_in_bits;
14966
14967       /* This is the tricky part.  Use some fancy footwork to deduce
14968          where the lowest addressed bit of the containing object must
14969          be.  */
14970       object_offset_in_bits = deepest_bitpos - type_size_in_bits;
14971
14972       /* Round up to type_align by default.  This works best for
14973          bitfields.  */
14974       object_offset_in_bits
14975         = round_up_to_align (object_offset_in_bits, type_align_in_bits);
14976
14977       if (object_offset_in_bits > bitpos_int)
14978         {
14979           object_offset_in_bits = deepest_bitpos - type_size_in_bits;
14980
14981           /* Round up to decl_align instead.  */
14982           object_offset_in_bits
14983             = round_up_to_align (object_offset_in_bits, decl_align_in_bits);
14984         }
14985     }
14986   else
14987 #endif
14988     object_offset_in_bits = bitpos_int;
14989
14990   return object_offset_in_bits / BITS_PER_UNIT;
14991 }
14992 \f
14993 /* The following routines define various Dwarf attributes and any data
14994    associated with them.  */
14995
14996 /* Add a location description attribute value to a DIE.
14997
14998    This emits location attributes suitable for whole variables and
14999    whole parameters.  Note that the location attributes for struct fields are
15000    generated by the routine `data_member_location_attribute' below.  */
15001
15002 static inline void
15003 add_AT_location_description (dw_die_ref die, enum dwarf_attribute attr_kind,
15004                              dw_loc_list_ref descr)
15005 {
15006   if (descr == 0)
15007     return;
15008   if (single_element_loc_list_p (descr))
15009     add_AT_loc (die, attr_kind, descr->expr);
15010   else
15011     add_AT_loc_list (die, attr_kind, descr);
15012 }
15013
15014 /* Attach the specialized form of location attribute used for data members of
15015    struct and union types.  In the special case of a FIELD_DECL node which
15016    represents a bit-field, the "offset" part of this special location
15017    descriptor must indicate the distance in bytes from the lowest-addressed
15018    byte of the containing struct or union type to the lowest-addressed byte of
15019    the "containing object" for the bit-field.  (See the `field_byte_offset'
15020    function above).
15021
15022    For any given bit-field, the "containing object" is a hypothetical object
15023    (of some integral or enum type) within which the given bit-field lives.  The
15024    type of this hypothetical "containing object" is always the same as the
15025    declared type of the individual bit-field itself (for GCC anyway... the
15026    DWARF spec doesn't actually mandate this).  Note that it is the size (in
15027    bytes) of the hypothetical "containing object" which will be given in the
15028    DW_AT_byte_size attribute for this bit-field.  (See the
15029    `byte_size_attribute' function below.)  It is also used when calculating the
15030    value of the DW_AT_bit_offset attribute.  (See the `bit_offset_attribute'
15031    function below.)  */
15032
15033 static void
15034 add_data_member_location_attribute (dw_die_ref die, tree decl)
15035 {
15036   HOST_WIDE_INT offset;
15037   dw_loc_descr_ref loc_descr = 0;
15038
15039   if (TREE_CODE (decl) == TREE_BINFO)
15040     {
15041       /* We're working on the TAG_inheritance for a base class.  */
15042       if (BINFO_VIRTUAL_P (decl) && is_cxx ())
15043         {
15044           /* For C++ virtual bases we can't just use BINFO_OFFSET, as they
15045              aren't at a fixed offset from all (sub)objects of the same
15046              type.  We need to extract the appropriate offset from our
15047              vtable.  The following dwarf expression means
15048
15049                BaseAddr = ObAddr + *((*ObAddr) - Offset)
15050
15051              This is specific to the V3 ABI, of course.  */
15052
15053           dw_loc_descr_ref tmp;
15054
15055           /* Make a copy of the object address.  */
15056           tmp = new_loc_descr (DW_OP_dup, 0, 0);
15057           add_loc_descr (&loc_descr, tmp);
15058
15059           /* Extract the vtable address.  */
15060           tmp = new_loc_descr (DW_OP_deref, 0, 0);
15061           add_loc_descr (&loc_descr, tmp);
15062
15063           /* Calculate the address of the offset.  */
15064           offset = tree_low_cst (BINFO_VPTR_FIELD (decl), 0);
15065           gcc_assert (offset < 0);
15066
15067           tmp = int_loc_descriptor (-offset);
15068           add_loc_descr (&loc_descr, tmp);
15069           tmp = new_loc_descr (DW_OP_minus, 0, 0);
15070           add_loc_descr (&loc_descr, tmp);
15071
15072           /* Extract the offset.  */
15073           tmp = new_loc_descr (DW_OP_deref, 0, 0);
15074           add_loc_descr (&loc_descr, tmp);
15075
15076           /* Add it to the object address.  */
15077           tmp = new_loc_descr (DW_OP_plus, 0, 0);
15078           add_loc_descr (&loc_descr, tmp);
15079         }
15080       else
15081         offset = tree_low_cst (BINFO_OFFSET (decl), 0);
15082     }
15083   else
15084     offset = field_byte_offset (decl);
15085
15086   if (! loc_descr)
15087     {
15088       if (dwarf_version > 2)
15089         {
15090           /* Don't need to output a location expression, just the constant. */
15091           add_AT_int (die, DW_AT_data_member_location, offset);
15092           return;
15093         }
15094       else
15095         {
15096           enum dwarf_location_atom op;
15097
15098           /* The DWARF2 standard says that we should assume that the structure
15099              address is already on the stack, so we can specify a structure
15100              field address by using DW_OP_plus_uconst.  */
15101
15102 #ifdef MIPS_DEBUGGING_INFO
15103           /* ??? The SGI dwarf reader does not handle the DW_OP_plus_uconst
15104              operator correctly.  It works only if we leave the offset on the
15105              stack.  */
15106           op = DW_OP_constu;
15107 #else
15108           op = DW_OP_plus_uconst;
15109 #endif
15110
15111           loc_descr = new_loc_descr (op, offset, 0);
15112         }
15113     }
15114
15115   add_AT_loc (die, DW_AT_data_member_location, loc_descr);
15116 }
15117
15118 /* Writes integer values to dw_vec_const array.  */
15119
15120 static void
15121 insert_int (HOST_WIDE_INT val, unsigned int size, unsigned char *dest)
15122 {
15123   while (size != 0)
15124     {
15125       *dest++ = val & 0xff;
15126       val >>= 8;
15127       --size;
15128     }
15129 }
15130
15131 /* Reads integers from dw_vec_const array.  Inverse of insert_int.  */
15132
15133 static HOST_WIDE_INT
15134 extract_int (const unsigned char *src, unsigned int size)
15135 {
15136   HOST_WIDE_INT val = 0;
15137
15138   src += size;
15139   while (size != 0)
15140     {
15141       val <<= 8;
15142       val |= *--src & 0xff;
15143       --size;
15144     }
15145   return val;
15146 }
15147
15148 /* Writes floating point values to dw_vec_const array.  */
15149
15150 static void
15151 insert_float (const_rtx rtl, unsigned char *array)
15152 {
15153   REAL_VALUE_TYPE rv;
15154   long val[4];
15155   int i;
15156
15157   REAL_VALUE_FROM_CONST_DOUBLE (rv, rtl);
15158   real_to_target (val, &rv, GET_MODE (rtl));
15159
15160   /* real_to_target puts 32-bit pieces in each long.  Pack them.  */
15161   for (i = 0; i < GET_MODE_SIZE (GET_MODE (rtl)) / 4; i++)
15162     {
15163       insert_int (val[i], 4, array);
15164       array += 4;
15165     }
15166 }
15167
15168 /* Attach a DW_AT_const_value attribute for a variable or a parameter which
15169    does not have a "location" either in memory or in a register.  These
15170    things can arise in GNU C when a constant is passed as an actual parameter
15171    to an inlined function.  They can also arise in C++ where declared
15172    constants do not necessarily get memory "homes".  */
15173
15174 static bool
15175 add_const_value_attribute (dw_die_ref die, rtx rtl)
15176 {
15177   switch (GET_CODE (rtl))
15178     {
15179     case CONST_INT:
15180       {
15181         HOST_WIDE_INT val = INTVAL (rtl);
15182
15183         if (val < 0)
15184           add_AT_int (die, DW_AT_const_value, val);
15185         else
15186           add_AT_unsigned (die, DW_AT_const_value, (unsigned HOST_WIDE_INT) val);
15187       }
15188       return true;
15189
15190     case CONST_DOUBLE:
15191       /* Note that a CONST_DOUBLE rtx could represent either an integer or a
15192          floating-point constant.  A CONST_DOUBLE is used whenever the
15193          constant requires more than one word in order to be adequately
15194          represented.  */
15195       {
15196         enum machine_mode mode = GET_MODE (rtl);
15197
15198         if (SCALAR_FLOAT_MODE_P (mode))
15199           {
15200             unsigned int length = GET_MODE_SIZE (mode);
15201             unsigned char *array = GGC_NEWVEC (unsigned char, length);
15202
15203             insert_float (rtl, array);
15204             add_AT_vec (die, DW_AT_const_value, length / 4, 4, array);
15205           }
15206         else
15207           add_AT_double (die, DW_AT_const_value,
15208                          CONST_DOUBLE_HIGH (rtl), CONST_DOUBLE_LOW (rtl));
15209       }
15210       return true;
15211
15212     case CONST_VECTOR:
15213       {
15214         enum machine_mode mode = GET_MODE (rtl);
15215         unsigned int elt_size = GET_MODE_UNIT_SIZE (mode);
15216         unsigned int length = CONST_VECTOR_NUNITS (rtl);
15217         unsigned char *array = GGC_NEWVEC (unsigned char, length * elt_size);
15218         unsigned int i;
15219         unsigned char *p;
15220
15221         switch (GET_MODE_CLASS (mode))
15222           {
15223           case MODE_VECTOR_INT:
15224             for (i = 0, p = array; i < length; i++, p += elt_size)
15225               {
15226                 rtx elt = CONST_VECTOR_ELT (rtl, i);
15227                 HOST_WIDE_INT lo, hi;
15228
15229                 switch (GET_CODE (elt))
15230                   {
15231                   case CONST_INT:
15232                     lo = INTVAL (elt);
15233                     hi = -(lo < 0);
15234                     break;
15235
15236                   case CONST_DOUBLE:
15237                     lo = CONST_DOUBLE_LOW (elt);
15238                     hi = CONST_DOUBLE_HIGH (elt);
15239                     break;
15240
15241                   default:
15242                     gcc_unreachable ();
15243                   }
15244
15245                 if (elt_size <= sizeof (HOST_WIDE_INT))
15246                   insert_int (lo, elt_size, p);
15247                 else
15248                   {
15249                     unsigned char *p0 = p;
15250                     unsigned char *p1 = p + sizeof (HOST_WIDE_INT);
15251
15252                     gcc_assert (elt_size == 2 * sizeof (HOST_WIDE_INT));
15253                     if (WORDS_BIG_ENDIAN)
15254                       {
15255                         p0 = p1;
15256                         p1 = p;
15257                       }
15258                     insert_int (lo, sizeof (HOST_WIDE_INT), p0);
15259                     insert_int (hi, sizeof (HOST_WIDE_INT), p1);
15260                   }
15261               }
15262             break;
15263
15264           case MODE_VECTOR_FLOAT:
15265             for (i = 0, p = array; i < length; i++, p += elt_size)
15266               {
15267                 rtx elt = CONST_VECTOR_ELT (rtl, i);
15268                 insert_float (elt, p);
15269               }
15270             break;
15271
15272           default:
15273             gcc_unreachable ();
15274           }
15275
15276         add_AT_vec (die, DW_AT_const_value, length, elt_size, array);
15277       }
15278       return true;
15279
15280     case CONST_STRING:
15281       if (dwarf_version >= 4 || !dwarf_strict)
15282         {
15283           dw_loc_descr_ref loc_result;
15284           resolve_one_addr (&rtl, NULL);
15285         rtl_addr:
15286           loc_result = new_loc_descr (DW_OP_addr, 0, 0);
15287           loc_result->dw_loc_oprnd1.val_class = dw_val_class_addr;
15288           loc_result->dw_loc_oprnd1.v.val_addr = rtl;
15289           add_loc_descr (&loc_result, new_loc_descr (DW_OP_stack_value, 0, 0));
15290           add_AT_loc (die, DW_AT_location, loc_result);
15291           VEC_safe_push (rtx, gc, used_rtx_array, rtl);
15292           return true;
15293         }
15294       return false;
15295
15296     case CONST:
15297       if (CONSTANT_P (XEXP (rtl, 0)))
15298         return add_const_value_attribute (die, XEXP (rtl, 0));
15299       /* FALLTHROUGH */
15300     case SYMBOL_REF:
15301       if (!const_ok_for_output (rtl))
15302         return false;
15303     case LABEL_REF:
15304       if (dwarf_version >= 4 || !dwarf_strict)
15305         goto rtl_addr;
15306       return false;
15307
15308     case PLUS:
15309       /* In cases where an inlined instance of an inline function is passed
15310          the address of an `auto' variable (which is local to the caller) we
15311          can get a situation where the DECL_RTL of the artificial local
15312          variable (for the inlining) which acts as a stand-in for the
15313          corresponding formal parameter (of the inline function) will look
15314          like (plus:SI (reg:SI FRAME_PTR) (const_int ...)).  This is not
15315          exactly a compile-time constant expression, but it isn't the address
15316          of the (artificial) local variable either.  Rather, it represents the
15317          *value* which the artificial local variable always has during its
15318          lifetime.  We currently have no way to represent such quasi-constant
15319          values in Dwarf, so for now we just punt and generate nothing.  */
15320       return false;
15321
15322     case HIGH:
15323     case CONST_FIXED:
15324       return false;
15325
15326     case MEM:
15327       if (GET_CODE (XEXP (rtl, 0)) == CONST_STRING
15328           && MEM_READONLY_P (rtl)
15329           && GET_MODE (rtl) == BLKmode)
15330         {
15331           add_AT_string (die, DW_AT_const_value, XSTR (XEXP (rtl, 0), 0));
15332           return true;
15333         }
15334       return false;
15335
15336     default:
15337       /* No other kinds of rtx should be possible here.  */
15338       gcc_unreachable ();
15339     }
15340   return false;
15341 }
15342
15343 /* Determine whether the evaluation of EXPR references any variables
15344    or functions which aren't otherwise used (and therefore may not be
15345    output).  */
15346 static tree
15347 reference_to_unused (tree * tp, int * walk_subtrees,
15348                      void * data ATTRIBUTE_UNUSED)
15349 {
15350   if (! EXPR_P (*tp) && ! CONSTANT_CLASS_P (*tp))
15351     *walk_subtrees = 0;
15352
15353   if (DECL_P (*tp) && ! TREE_PUBLIC (*tp) && ! TREE_USED (*tp)
15354       && ! TREE_ASM_WRITTEN (*tp))
15355     return *tp;
15356   /* ???  The C++ FE emits debug information for using decls, so
15357      putting gcc_unreachable here falls over.  See PR31899.  For now
15358      be conservative.  */
15359   else if (!cgraph_global_info_ready
15360            && (TREE_CODE (*tp) == VAR_DECL || TREE_CODE (*tp) == FUNCTION_DECL))
15361     return *tp;
15362   else if (TREE_CODE (*tp) == VAR_DECL)
15363     {
15364       struct varpool_node *node = varpool_node (*tp);
15365       if (!node->needed)
15366         return *tp;
15367     }
15368   else if (TREE_CODE (*tp) == FUNCTION_DECL
15369            && (!DECL_EXTERNAL (*tp) || DECL_DECLARED_INLINE_P (*tp)))
15370     {
15371       /* The call graph machinery must have finished analyzing,
15372          optimizing and gimplifying the CU by now.
15373          So if *TP has no call graph node associated
15374          to it, it means *TP will not be emitted.  */
15375       if (!cgraph_get_node (*tp))
15376         return *tp;
15377     }
15378   else if (TREE_CODE (*tp) == STRING_CST && !TREE_ASM_WRITTEN (*tp))
15379     return *tp;
15380
15381   return NULL_TREE;
15382 }
15383
15384 /* Generate an RTL constant from a decl initializer INIT with decl type TYPE,
15385    for use in a later add_const_value_attribute call.  */
15386
15387 static rtx
15388 rtl_for_decl_init (tree init, tree type)
15389 {
15390   rtx rtl = NULL_RTX;
15391
15392   /* If a variable is initialized with a string constant without embedded
15393      zeros, build CONST_STRING.  */
15394   if (TREE_CODE (init) == STRING_CST && TREE_CODE (type) == ARRAY_TYPE)
15395     {
15396       tree enttype = TREE_TYPE (type);
15397       tree domain = TYPE_DOMAIN (type);
15398       enum machine_mode mode = TYPE_MODE (enttype);
15399
15400       if (GET_MODE_CLASS (mode) == MODE_INT && GET_MODE_SIZE (mode) == 1
15401           && domain
15402           && integer_zerop (TYPE_MIN_VALUE (domain))
15403           && compare_tree_int (TYPE_MAX_VALUE (domain),
15404                                TREE_STRING_LENGTH (init) - 1) == 0
15405           && ((size_t) TREE_STRING_LENGTH (init)
15406               == strlen (TREE_STRING_POINTER (init)) + 1))
15407         {
15408           rtl = gen_rtx_CONST_STRING (VOIDmode,
15409                                       ggc_strdup (TREE_STRING_POINTER (init)));
15410           rtl = gen_rtx_MEM (BLKmode, rtl);
15411           MEM_READONLY_P (rtl) = 1;
15412         }
15413     }
15414   /* Other aggregates, and complex values, could be represented using
15415      CONCAT: FIXME!  */
15416   else if (AGGREGATE_TYPE_P (type) || TREE_CODE (type) == COMPLEX_TYPE)
15417     ;
15418   /* Vectors only work if their mode is supported by the target.
15419      FIXME: generic vectors ought to work too.  */
15420   else if (TREE_CODE (type) == VECTOR_TYPE && TYPE_MODE (type) == BLKmode)
15421     ;
15422   /* If the initializer is something that we know will expand into an
15423      immediate RTL constant, expand it now.  We must be careful not to
15424      reference variables which won't be output.  */
15425   else if (initializer_constant_valid_p (init, type)
15426            && ! walk_tree (&init, reference_to_unused, NULL, NULL))
15427     {
15428       /* Convert vector CONSTRUCTOR initializers to VECTOR_CST if
15429          possible.  */
15430       if (TREE_CODE (type) == VECTOR_TYPE)
15431         switch (TREE_CODE (init))
15432           {
15433           case VECTOR_CST:
15434             break;
15435           case CONSTRUCTOR:
15436             if (TREE_CONSTANT (init))
15437               {
15438                 VEC(constructor_elt,gc) *elts = CONSTRUCTOR_ELTS (init);
15439                 bool constant_p = true;
15440                 tree value;
15441                 unsigned HOST_WIDE_INT ix;
15442
15443                 /* Even when ctor is constant, it might contain non-*_CST
15444                    elements (e.g. { 1.0/0.0 - 1.0/0.0, 0.0 }) and those don't
15445                    belong into VECTOR_CST nodes.  */
15446                 FOR_EACH_CONSTRUCTOR_VALUE (elts, ix, value)
15447                   if (!CONSTANT_CLASS_P (value))
15448                     {
15449                       constant_p = false;
15450                       break;
15451                     }
15452
15453                 if (constant_p)
15454                   {
15455                     init = build_vector_from_ctor (type, elts);
15456                     break;
15457                   }
15458               }
15459             /* FALLTHRU */
15460
15461           default:
15462             return NULL;
15463           }
15464
15465       rtl = expand_expr (init, NULL_RTX, VOIDmode, EXPAND_INITIALIZER);
15466
15467       /* If expand_expr returns a MEM, it wasn't immediate.  */
15468       gcc_assert (!rtl || !MEM_P (rtl));
15469     }
15470
15471   return rtl;
15472 }
15473
15474 /* Generate RTL for the variable DECL to represent its location.  */
15475
15476 static rtx
15477 rtl_for_decl_location (tree decl)
15478 {
15479   rtx rtl;
15480
15481   /* Here we have to decide where we are going to say the parameter "lives"
15482      (as far as the debugger is concerned).  We only have a couple of
15483      choices.  GCC provides us with DECL_RTL and with DECL_INCOMING_RTL.
15484
15485      DECL_RTL normally indicates where the parameter lives during most of the
15486      activation of the function.  If optimization is enabled however, this
15487      could be either NULL or else a pseudo-reg.  Both of those cases indicate
15488      that the parameter doesn't really live anywhere (as far as the code
15489      generation parts of GCC are concerned) during most of the function's
15490      activation.  That will happen (for example) if the parameter is never
15491      referenced within the function.
15492
15493      We could just generate a location descriptor here for all non-NULL
15494      non-pseudo values of DECL_RTL and ignore all of the rest, but we can be
15495      a little nicer than that if we also consider DECL_INCOMING_RTL in cases
15496      where DECL_RTL is NULL or is a pseudo-reg.
15497
15498      Note however that we can only get away with using DECL_INCOMING_RTL as
15499      a backup substitute for DECL_RTL in certain limited cases.  In cases
15500      where DECL_ARG_TYPE (decl) indicates the same type as TREE_TYPE (decl),
15501      we can be sure that the parameter was passed using the same type as it is
15502      declared to have within the function, and that its DECL_INCOMING_RTL
15503      points us to a place where a value of that type is passed.
15504
15505      In cases where DECL_ARG_TYPE (decl) and TREE_TYPE (decl) are different,
15506      we cannot (in general) use DECL_INCOMING_RTL as a substitute for DECL_RTL
15507      because in these cases DECL_INCOMING_RTL points us to a value of some
15508      type which is *different* from the type of the parameter itself.  Thus,
15509      if we tried to use DECL_INCOMING_RTL to generate a location attribute in
15510      such cases, the debugger would end up (for example) trying to fetch a
15511      `float' from a place which actually contains the first part of a
15512      `double'.  That would lead to really incorrect and confusing
15513      output at debug-time.
15514
15515      So, in general, we *do not* use DECL_INCOMING_RTL as a backup for DECL_RTL
15516      in cases where DECL_ARG_TYPE (decl) != TREE_TYPE (decl).  There
15517      are a couple of exceptions however.  On little-endian machines we can
15518      get away with using DECL_INCOMING_RTL even when DECL_ARG_TYPE (decl) is
15519      not the same as TREE_TYPE (decl), but only when DECL_ARG_TYPE (decl) is
15520      an integral type that is smaller than TREE_TYPE (decl). These cases arise
15521      when (on a little-endian machine) a non-prototyped function has a
15522      parameter declared to be of type `short' or `char'.  In such cases,
15523      TREE_TYPE (decl) will be `short' or `char', DECL_ARG_TYPE (decl) will
15524      be `int', and DECL_INCOMING_RTL will point to the lowest-order byte of the
15525      passed `int' value.  If the debugger then uses that address to fetch
15526      a `short' or a `char' (on a little-endian machine) the result will be
15527      the correct data, so we allow for such exceptional cases below.
15528
15529      Note that our goal here is to describe the place where the given formal
15530      parameter lives during most of the function's activation (i.e. between the
15531      end of the prologue and the start of the epilogue).  We'll do that as best
15532      as we can. Note however that if the given formal parameter is modified
15533      sometime during the execution of the function, then a stack backtrace (at
15534      debug-time) will show the function as having been called with the *new*
15535      value rather than the value which was originally passed in.  This happens
15536      rarely enough that it is not a major problem, but it *is* a problem, and
15537      I'd like to fix it.
15538
15539      A future version of dwarf2out.c may generate two additional attributes for
15540      any given DW_TAG_formal_parameter DIE which will describe the "passed
15541      type" and the "passed location" for the given formal parameter in addition
15542      to the attributes we now generate to indicate the "declared type" and the
15543      "active location" for each parameter.  This additional set of attributes
15544      could be used by debuggers for stack backtraces. Separately, note that
15545      sometimes DECL_RTL can be NULL and DECL_INCOMING_RTL can be NULL also.
15546      This happens (for example) for inlined-instances of inline function formal
15547      parameters which are never referenced.  This really shouldn't be
15548      happening.  All PARM_DECL nodes should get valid non-NULL
15549      DECL_INCOMING_RTL values.  FIXME.  */
15550
15551   /* Use DECL_RTL as the "location" unless we find something better.  */
15552   rtl = DECL_RTL_IF_SET (decl);
15553
15554   /* When generating abstract instances, ignore everything except
15555      constants, symbols living in memory, and symbols living in
15556      fixed registers.  */
15557   if (! reload_completed)
15558     {
15559       if (rtl
15560           && (CONSTANT_P (rtl)
15561               || (MEM_P (rtl)
15562                   && CONSTANT_P (XEXP (rtl, 0)))
15563               || (REG_P (rtl)
15564                   && TREE_CODE (decl) == VAR_DECL
15565                   && TREE_STATIC (decl))))
15566         {
15567           rtl = targetm.delegitimize_address (rtl);
15568           return rtl;
15569         }
15570       rtl = NULL_RTX;
15571     }
15572   else if (TREE_CODE (decl) == PARM_DECL)
15573     {
15574       if (rtl == NULL_RTX || is_pseudo_reg (rtl))
15575         {
15576           tree declared_type = TREE_TYPE (decl);
15577           tree passed_type = DECL_ARG_TYPE (decl);
15578           enum machine_mode dmode = TYPE_MODE (declared_type);
15579           enum machine_mode pmode = TYPE_MODE (passed_type);
15580
15581           /* This decl represents a formal parameter which was optimized out.
15582              Note that DECL_INCOMING_RTL may be NULL in here, but we handle
15583              all cases where (rtl == NULL_RTX) just below.  */
15584           if (dmode == pmode)
15585             rtl = DECL_INCOMING_RTL (decl);
15586           else if (SCALAR_INT_MODE_P (dmode)
15587                    && GET_MODE_SIZE (dmode) <= GET_MODE_SIZE (pmode)
15588                    && DECL_INCOMING_RTL (decl))
15589             {
15590               rtx inc = DECL_INCOMING_RTL (decl);
15591               if (REG_P (inc))
15592                 rtl = inc;
15593               else if (MEM_P (inc))
15594                 {
15595                   if (BYTES_BIG_ENDIAN)
15596                     rtl = adjust_address_nv (inc, dmode,
15597                                              GET_MODE_SIZE (pmode)
15598                                              - GET_MODE_SIZE (dmode));
15599                   else
15600                     rtl = inc;
15601                 }
15602             }
15603         }
15604
15605       /* If the parm was passed in registers, but lives on the stack, then
15606          make a big endian correction if the mode of the type of the
15607          parameter is not the same as the mode of the rtl.  */
15608       /* ??? This is the same series of checks that are made in dbxout.c before
15609          we reach the big endian correction code there.  It isn't clear if all
15610          of these checks are necessary here, but keeping them all is the safe
15611          thing to do.  */
15612       else if (MEM_P (rtl)
15613                && XEXP (rtl, 0) != const0_rtx
15614                && ! CONSTANT_P (XEXP (rtl, 0))
15615                /* Not passed in memory.  */
15616                && !MEM_P (DECL_INCOMING_RTL (decl))
15617                /* Not passed by invisible reference.  */
15618                && (!REG_P (XEXP (rtl, 0))
15619                    || REGNO (XEXP (rtl, 0)) == HARD_FRAME_POINTER_REGNUM
15620                    || REGNO (XEXP (rtl, 0)) == STACK_POINTER_REGNUM
15621 #if ARG_POINTER_REGNUM != HARD_FRAME_POINTER_REGNUM
15622                    || REGNO (XEXP (rtl, 0)) == ARG_POINTER_REGNUM
15623 #endif
15624                      )
15625                /* Big endian correction check.  */
15626                && BYTES_BIG_ENDIAN
15627                && TYPE_MODE (TREE_TYPE (decl)) != GET_MODE (rtl)
15628                && (GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (decl)))
15629                    < UNITS_PER_WORD))
15630         {
15631           int offset = (UNITS_PER_WORD
15632                         - GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (decl))));
15633
15634           rtl = gen_rtx_MEM (TYPE_MODE (TREE_TYPE (decl)),
15635                              plus_constant (XEXP (rtl, 0), offset));
15636         }
15637     }
15638   else if (TREE_CODE (decl) == VAR_DECL
15639            && rtl
15640            && MEM_P (rtl)
15641            && GET_MODE (rtl) != TYPE_MODE (TREE_TYPE (decl))
15642            && BYTES_BIG_ENDIAN)
15643     {
15644       int rsize = GET_MODE_SIZE (GET_MODE (rtl));
15645       int dsize = GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (decl)));
15646
15647       /* If a variable is declared "register" yet is smaller than
15648          a register, then if we store the variable to memory, it
15649          looks like we're storing a register-sized value, when in
15650          fact we are not.  We need to adjust the offset of the
15651          storage location to reflect the actual value's bytes,
15652          else gdb will not be able to display it.  */
15653       if (rsize > dsize)
15654         rtl = gen_rtx_MEM (TYPE_MODE (TREE_TYPE (decl)),
15655                            plus_constant (XEXP (rtl, 0), rsize-dsize));
15656     }
15657
15658   /* A variable with no DECL_RTL but a DECL_INITIAL is a compile-time constant,
15659      and will have been substituted directly into all expressions that use it.
15660      C does not have such a concept, but C++ and other languages do.  */
15661   if (!rtl && TREE_CODE (decl) == VAR_DECL && DECL_INITIAL (decl))
15662     rtl = rtl_for_decl_init (DECL_INITIAL (decl), TREE_TYPE (decl));
15663
15664   if (rtl)
15665     rtl = targetm.delegitimize_address (rtl);
15666
15667   /* If we don't look past the constant pool, we risk emitting a
15668      reference to a constant pool entry that isn't referenced from
15669      code, and thus is not emitted.  */
15670   if (rtl)
15671     rtl = avoid_constant_pool_reference (rtl);
15672
15673   /* Try harder to get a rtl.  If this symbol ends up not being emitted
15674      in the current CU, resolve_addr will remove the expression referencing
15675      it.  */
15676   if (rtl == NULL_RTX
15677       && TREE_CODE (decl) == VAR_DECL
15678       && !DECL_EXTERNAL (decl)
15679       && TREE_STATIC (decl)
15680       && DECL_NAME (decl)
15681       && !DECL_HARD_REGISTER (decl)
15682       && DECL_MODE (decl) != VOIDmode)
15683     {
15684       rtl = DECL_RTL (decl);
15685       /* Reset DECL_RTL back, as various parts of the compiler expects
15686          DECL_RTL set meaning it is actually going to be output.  */
15687       SET_DECL_RTL (decl, NULL);
15688       if (!MEM_P (rtl)
15689           || GET_CODE (XEXP (rtl, 0)) != SYMBOL_REF
15690           || SYMBOL_REF_DECL (XEXP (rtl, 0)) != decl)
15691         rtl = NULL_RTX;
15692     }
15693
15694   return rtl;
15695 }
15696
15697 /* Check whether decl is a Fortran COMMON symbol.  If not, NULL_TREE is
15698    returned.  If so, the decl for the COMMON block is returned, and the
15699    value is the offset into the common block for the symbol.  */
15700
15701 static tree
15702 fortran_common (tree decl, HOST_WIDE_INT *value)
15703 {
15704   tree val_expr, cvar;
15705   enum machine_mode mode;
15706   HOST_WIDE_INT bitsize, bitpos;
15707   tree offset;
15708   int volatilep = 0, unsignedp = 0;
15709
15710   /* If the decl isn't a VAR_DECL, or if it isn't static, or if
15711      it does not have a value (the offset into the common area), or if it
15712      is thread local (as opposed to global) then it isn't common, and shouldn't
15713      be handled as such.  */
15714   if (TREE_CODE (decl) != VAR_DECL
15715       || !TREE_STATIC (decl)
15716       || !DECL_HAS_VALUE_EXPR_P (decl)
15717       || !is_fortran ())
15718     return NULL_TREE;
15719
15720   val_expr = DECL_VALUE_EXPR (decl);
15721   if (TREE_CODE (val_expr) != COMPONENT_REF)
15722     return NULL_TREE;
15723
15724   cvar = get_inner_reference (val_expr, &bitsize, &bitpos, &offset,
15725                               &mode, &unsignedp, &volatilep, true);
15726
15727   if (cvar == NULL_TREE
15728       || TREE_CODE (cvar) != VAR_DECL
15729       || DECL_ARTIFICIAL (cvar)
15730       || !TREE_PUBLIC (cvar))
15731     return NULL_TREE;
15732
15733   *value = 0;
15734   if (offset != NULL)
15735     {
15736       if (!host_integerp (offset, 0))
15737         return NULL_TREE;
15738       *value = tree_low_cst (offset, 0);
15739     }
15740   if (bitpos != 0)
15741     *value += bitpos / BITS_PER_UNIT;
15742
15743   return cvar;
15744 }
15745
15746 /* Generate *either* a DW_AT_location attribute or else a DW_AT_const_value
15747    data attribute for a variable or a parameter.  We generate the
15748    DW_AT_const_value attribute only in those cases where the given variable
15749    or parameter does not have a true "location" either in memory or in a
15750    register.  This can happen (for example) when a constant is passed as an
15751    actual argument in a call to an inline function.  (It's possible that
15752    these things can crop up in other ways also.)  Note that one type of
15753    constant value which can be passed into an inlined function is a constant
15754    pointer.  This can happen for example if an actual argument in an inlined
15755    function call evaluates to a compile-time constant address.  */
15756
15757 static bool
15758 add_location_or_const_value_attribute (dw_die_ref die, tree decl,
15759                                        enum dwarf_attribute attr)
15760 {
15761   rtx rtl;
15762   dw_loc_list_ref list;
15763   var_loc_list *loc_list;
15764
15765   if (TREE_CODE (decl) == ERROR_MARK)
15766     return false;
15767
15768   gcc_assert (TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == PARM_DECL
15769               || TREE_CODE (decl) == RESULT_DECL);
15770
15771   /* Try to get some constant RTL for this decl, and use that as the value of
15772      the location.  */
15773
15774   rtl = rtl_for_decl_location (decl);
15775   if (rtl && (CONSTANT_P (rtl) || GET_CODE (rtl) == CONST_STRING)
15776       && add_const_value_attribute (die, rtl))
15777     return true;
15778
15779   /* See if we have single element location list that is equivalent to
15780      a constant value.  That way we are better to use add_const_value_attribute
15781      rather than expanding constant value equivalent.  */
15782   loc_list = lookup_decl_loc (decl);
15783   if (loc_list
15784       && loc_list->first
15785       && loc_list->first == loc_list->last
15786       && NOTE_VAR_LOCATION (loc_list->first->var_loc_note)
15787       && NOTE_VAR_LOCATION_LOC (loc_list->first->var_loc_note))
15788     {
15789       struct var_loc_node *node;
15790
15791       node = loc_list->first;
15792       rtl = NOTE_VAR_LOCATION_LOC (node->var_loc_note);
15793       if (GET_CODE (rtl) != PARALLEL)
15794         rtl = XEXP (rtl, 0);
15795       if ((CONSTANT_P (rtl) || GET_CODE (rtl) == CONST_STRING)
15796           && add_const_value_attribute (die, rtl))
15797          return true;
15798     }
15799   list = loc_list_from_tree (decl, decl_by_reference_p (decl) ? 0 : 2);
15800   if (list)
15801     {
15802       add_AT_location_description (die, attr, list);
15803       return true;
15804     }
15805   /* None of that worked, so it must not really have a location;
15806      try adding a constant value attribute from the DECL_INITIAL.  */
15807   return tree_add_const_value_attribute_for_decl (die, decl);
15808 }
15809
15810 /* Add VARIABLE and DIE into deferred locations list.  */
15811
15812 static void
15813 defer_location (tree variable, dw_die_ref die)
15814 {
15815   deferred_locations entry;
15816   entry.variable = variable;
15817   entry.die = die;
15818   VEC_safe_push (deferred_locations, gc, deferred_locations_list, &entry);
15819 }
15820
15821 /* Helper function for tree_add_const_value_attribute.  Natively encode
15822    initializer INIT into an array.  Return true if successful.  */
15823
15824 static bool
15825 native_encode_initializer (tree init, unsigned char *array, int size)
15826 {
15827   tree type;
15828
15829   if (init == NULL_TREE)
15830     return false;
15831
15832   STRIP_NOPS (init);
15833   switch (TREE_CODE (init))
15834     {
15835     case STRING_CST:
15836       type = TREE_TYPE (init);
15837       if (TREE_CODE (type) == ARRAY_TYPE)
15838         {
15839           tree enttype = TREE_TYPE (type);
15840           enum machine_mode mode = TYPE_MODE (enttype);
15841
15842           if (GET_MODE_CLASS (mode) != MODE_INT || GET_MODE_SIZE (mode) != 1)
15843             return false;
15844           if (int_size_in_bytes (type) != size)
15845             return false;
15846           if (size > TREE_STRING_LENGTH (init))
15847             {
15848               memcpy (array, TREE_STRING_POINTER (init),
15849                       TREE_STRING_LENGTH (init));
15850               memset (array + TREE_STRING_LENGTH (init),
15851                       '\0', size - TREE_STRING_LENGTH (init));
15852             }
15853           else
15854             memcpy (array, TREE_STRING_POINTER (init), size);
15855           return true;
15856         }
15857       return false;
15858     case CONSTRUCTOR:
15859       type = TREE_TYPE (init);
15860       if (int_size_in_bytes (type) != size)
15861         return false;
15862       if (TREE_CODE (type) == ARRAY_TYPE)
15863         {
15864           HOST_WIDE_INT min_index;
15865           unsigned HOST_WIDE_INT cnt;
15866           int curpos = 0, fieldsize;
15867           constructor_elt *ce;
15868
15869           if (TYPE_DOMAIN (type) == NULL_TREE
15870               || !host_integerp (TYPE_MIN_VALUE (TYPE_DOMAIN (type)), 0))
15871             return false;
15872
15873           fieldsize = int_size_in_bytes (TREE_TYPE (type));
15874           if (fieldsize <= 0)
15875             return false;
15876
15877           min_index = tree_low_cst (TYPE_MIN_VALUE (TYPE_DOMAIN (type)), 0);
15878           memset (array, '\0', size);
15879           for (cnt = 0;
15880                VEC_iterate (constructor_elt, CONSTRUCTOR_ELTS (init), cnt, ce);
15881                cnt++)
15882             {
15883               tree val = ce->value;
15884               tree index = ce->index;
15885               int pos = curpos;
15886               if (index && TREE_CODE (index) == RANGE_EXPR)
15887                 pos = (tree_low_cst (TREE_OPERAND (index, 0), 0) - min_index)
15888                       * fieldsize;
15889               else if (index)
15890                 pos = (tree_low_cst (index, 0) - min_index) * fieldsize;
15891
15892               if (val)
15893                 {
15894                   STRIP_NOPS (val);
15895                   if (!native_encode_initializer (val, array + pos, fieldsize))
15896                     return false;
15897                 }
15898               curpos = pos + fieldsize;
15899               if (index && TREE_CODE (index) == RANGE_EXPR)
15900                 {
15901                   int count = tree_low_cst (TREE_OPERAND (index, 1), 0)
15902                               - tree_low_cst (TREE_OPERAND (index, 0), 0);
15903                   while (count > 0)
15904                     {
15905                       if (val)
15906                         memcpy (array + curpos, array + pos, fieldsize);
15907                       curpos += fieldsize;
15908                     }
15909                 }
15910               gcc_assert (curpos <= size);
15911             }
15912           return true;
15913         }
15914       else if (TREE_CODE (type) == RECORD_TYPE
15915                || TREE_CODE (type) == UNION_TYPE)
15916         {
15917           tree field = NULL_TREE;
15918           unsigned HOST_WIDE_INT cnt;
15919           constructor_elt *ce;
15920
15921           if (int_size_in_bytes (type) != size)
15922             return false;
15923
15924           if (TREE_CODE (type) == RECORD_TYPE)
15925             field = TYPE_FIELDS (type);
15926
15927           for (cnt = 0;
15928                VEC_iterate (constructor_elt, CONSTRUCTOR_ELTS (init), cnt, ce);
15929                cnt++, field = field ? TREE_CHAIN (field) : 0)
15930             {
15931               tree val = ce->value;
15932               int pos, fieldsize;
15933
15934               if (ce->index != 0)
15935                 field = ce->index;
15936
15937               if (val)
15938                 STRIP_NOPS (val);
15939
15940               if (field == NULL_TREE || DECL_BIT_FIELD (field))
15941                 return false;
15942
15943               if (TREE_CODE (TREE_TYPE (field)) == ARRAY_TYPE
15944                   && TYPE_DOMAIN (TREE_TYPE (field))
15945                   && ! TYPE_MAX_VALUE (TYPE_DOMAIN (TREE_TYPE (field))))
15946                 return false;
15947               else if (DECL_SIZE_UNIT (field) == NULL_TREE
15948                        || !host_integerp (DECL_SIZE_UNIT (field), 0))
15949                 return false;
15950               fieldsize = tree_low_cst (DECL_SIZE_UNIT (field), 0);
15951               pos = int_byte_position (field);
15952               gcc_assert (pos + fieldsize <= size);
15953               if (val
15954                   && !native_encode_initializer (val, array + pos, fieldsize))
15955                 return false;
15956             }
15957           return true;
15958         }
15959       return false;
15960     case VIEW_CONVERT_EXPR:
15961     case NON_LVALUE_EXPR:
15962       return native_encode_initializer (TREE_OPERAND (init, 0), array, size);
15963     default:
15964       return native_encode_expr (init, array, size) == size;
15965     }
15966 }
15967
15968 /* Attach a DW_AT_const_value attribute to DIE. The value of the
15969    attribute is the const value T.  */
15970
15971 static bool
15972 tree_add_const_value_attribute (dw_die_ref die, tree t)
15973 {
15974   tree init;
15975   tree type = TREE_TYPE (t);
15976   rtx rtl;
15977
15978   if (!t || !TREE_TYPE (t) || TREE_TYPE (t) == error_mark_node)
15979     return false;
15980
15981   init = t;
15982   gcc_assert (!DECL_P (init));
15983
15984   rtl = rtl_for_decl_init (init, type);
15985   if (rtl)
15986     return add_const_value_attribute (die, rtl);
15987   /* If the host and target are sane, try harder.  */
15988   else if (CHAR_BIT == 8 && BITS_PER_UNIT == 8
15989            && initializer_constant_valid_p (init, type))
15990     {
15991       HOST_WIDE_INT size = int_size_in_bytes (TREE_TYPE (init));
15992       if (size > 0 && (int) size == size)
15993         {
15994           unsigned char *array = GGC_CNEWVEC (unsigned char, size);
15995
15996           if (native_encode_initializer (init, array, size))
15997             {
15998               add_AT_vec (die, DW_AT_const_value, size, 1, array);
15999               return true;
16000             }
16001         }
16002     }
16003   return false;
16004 }
16005
16006 /* Attach a DW_AT_const_value attribute to VAR_DIE. The value of the
16007    attribute is the const value of T, where T is an integral constant
16008    variable with static storage duration
16009    (so it can't be a PARM_DECL or a RESULT_DECL).  */
16010
16011 static bool
16012 tree_add_const_value_attribute_for_decl (dw_die_ref var_die, tree decl)
16013 {
16014
16015   if (!decl
16016       || (TREE_CODE (decl) != VAR_DECL
16017           && TREE_CODE (decl) != CONST_DECL))
16018     return false;
16019
16020     if (TREE_READONLY (decl)
16021         && ! TREE_THIS_VOLATILE (decl)
16022         && DECL_INITIAL (decl))
16023       /* OK */;
16024     else
16025       return false;
16026
16027   /* Don't add DW_AT_const_value if abstract origin already has one.  */
16028   if (get_AT (var_die, DW_AT_const_value))
16029     return false;
16030
16031   return tree_add_const_value_attribute (var_die, DECL_INITIAL (decl));
16032 }
16033
16034 /* Convert the CFI instructions for the current function into a
16035    location list.  This is used for DW_AT_frame_base when we targeting
16036    a dwarf2 consumer that does not support the dwarf3
16037    DW_OP_call_frame_cfa.  OFFSET is a constant to be added to all CFA
16038    expressions.  */
16039
16040 static dw_loc_list_ref
16041 convert_cfa_to_fb_loc_list (HOST_WIDE_INT offset)
16042 {
16043   dw_fde_ref fde;
16044   dw_loc_list_ref list, *list_tail;
16045   dw_cfi_ref cfi;
16046   dw_cfa_location last_cfa, next_cfa;
16047   const char *start_label, *last_label, *section;
16048   dw_cfa_location remember;
16049
16050   fde = current_fde ();
16051   gcc_assert (fde != NULL);
16052
16053   section = secname_for_decl (current_function_decl);
16054   list_tail = &list;
16055   list = NULL;
16056
16057   memset (&next_cfa, 0, sizeof (next_cfa));
16058   next_cfa.reg = INVALID_REGNUM;
16059   remember = next_cfa;
16060
16061   start_label = fde->dw_fde_begin;
16062
16063   /* ??? Bald assumption that the CIE opcode list does not contain
16064      advance opcodes.  */
16065   for (cfi = cie_cfi_head; cfi; cfi = cfi->dw_cfi_next)
16066     lookup_cfa_1 (cfi, &next_cfa, &remember);
16067
16068   last_cfa = next_cfa;
16069   last_label = start_label;
16070
16071   for (cfi = fde->dw_fde_cfi; cfi; cfi = cfi->dw_cfi_next)
16072     switch (cfi->dw_cfi_opc)
16073       {
16074       case DW_CFA_set_loc:
16075       case DW_CFA_advance_loc1:
16076       case DW_CFA_advance_loc2:
16077       case DW_CFA_advance_loc4:
16078         if (!cfa_equal_p (&last_cfa, &next_cfa))
16079           {
16080             *list_tail = new_loc_list (build_cfa_loc (&last_cfa, offset),
16081                                        start_label, last_label, section);
16082
16083             list_tail = &(*list_tail)->dw_loc_next;
16084             last_cfa = next_cfa;
16085             start_label = last_label;
16086           }
16087         last_label = cfi->dw_cfi_oprnd1.dw_cfi_addr;
16088         break;
16089
16090       case DW_CFA_advance_loc:
16091         /* The encoding is complex enough that we should never emit this.  */
16092         gcc_unreachable ();
16093
16094       default:
16095         lookup_cfa_1 (cfi, &next_cfa, &remember);
16096         break;
16097       }
16098
16099   if (!cfa_equal_p (&last_cfa, &next_cfa))
16100     {
16101       *list_tail = new_loc_list (build_cfa_loc (&last_cfa, offset),
16102                                  start_label, last_label, section);
16103       list_tail = &(*list_tail)->dw_loc_next;
16104       start_label = last_label;
16105     }
16106
16107   *list_tail = new_loc_list (build_cfa_loc (&next_cfa, offset),
16108                              start_label, fde->dw_fde_end, section);
16109
16110   if (list && list->dw_loc_next)
16111     gen_llsym (list);
16112
16113   return list;
16114 }
16115
16116 /* Compute a displacement from the "steady-state frame pointer" to the
16117    frame base (often the same as the CFA), and store it in
16118    frame_pointer_fb_offset.  OFFSET is added to the displacement
16119    before the latter is negated.  */
16120
16121 static void
16122 compute_frame_pointer_to_fb_displacement (HOST_WIDE_INT offset)
16123 {
16124   rtx reg, elim;
16125
16126 #ifdef FRAME_POINTER_CFA_OFFSET
16127   reg = frame_pointer_rtx;
16128   offset += FRAME_POINTER_CFA_OFFSET (current_function_decl);
16129 #else
16130   reg = arg_pointer_rtx;
16131   offset += ARG_POINTER_CFA_OFFSET (current_function_decl);
16132 #endif
16133
16134   elim = eliminate_regs (reg, VOIDmode, NULL_RTX);
16135   if (GET_CODE (elim) == PLUS)
16136     {
16137       offset += INTVAL (XEXP (elim, 1));
16138       elim = XEXP (elim, 0);
16139     }
16140
16141   gcc_assert ((SUPPORTS_STACK_ALIGNMENT
16142                && (elim == hard_frame_pointer_rtx
16143                    || elim == stack_pointer_rtx))
16144               || elim == (frame_pointer_needed
16145                           ? hard_frame_pointer_rtx
16146                           : stack_pointer_rtx));
16147
16148   frame_pointer_fb_offset = -offset;
16149 }
16150
16151 /* Generate a DW_AT_name attribute given some string value to be included as
16152    the value of the attribute.  */
16153
16154 static void
16155 add_name_attribute (dw_die_ref die, const char *name_string)
16156 {
16157   if (name_string != NULL && *name_string != 0)
16158     {
16159       if (demangle_name_func)
16160         name_string = (*demangle_name_func) (name_string);
16161
16162       add_AT_string (die, DW_AT_name, name_string);
16163     }
16164 }
16165
16166 /* Generate a DW_AT_comp_dir attribute for DIE.  */
16167
16168 static void
16169 add_comp_dir_attribute (dw_die_ref die)
16170 {
16171   const char *wd = get_src_pwd ();
16172   char *wd1;
16173
16174   if (wd == NULL)
16175     return;
16176
16177   if (DWARF2_DIR_SHOULD_END_WITH_SEPARATOR)
16178     {
16179       int wdlen;
16180
16181       wdlen = strlen (wd);
16182       wd1 = GGC_NEWVEC (char, wdlen + 2);
16183       strcpy (wd1, wd);
16184       wd1 [wdlen] = DIR_SEPARATOR;
16185       wd1 [wdlen + 1] = 0;
16186       wd = wd1;
16187     }
16188
16189     add_AT_string (die, DW_AT_comp_dir, remap_debug_filename (wd));
16190 }
16191
16192 /* Given a tree node describing an array bound (either lower or upper) output
16193    a representation for that bound.  */
16194
16195 static void
16196 add_bound_info (dw_die_ref subrange_die, enum dwarf_attribute bound_attr, tree bound)
16197 {
16198   switch (TREE_CODE (bound))
16199     {
16200     case ERROR_MARK:
16201       return;
16202
16203     /* All fixed-bounds are represented by INTEGER_CST nodes.  */
16204     case INTEGER_CST:
16205       {
16206         unsigned int prec = simple_type_size_in_bits (TREE_TYPE (bound));
16207
16208         /* Use the default if possible.  */
16209         if (bound_attr == DW_AT_lower_bound
16210             && (((is_c_family () || is_java ()) && integer_zerop (bound))
16211                 || (is_fortran () && integer_onep (bound))))
16212           ;
16213
16214         /* Otherwise represent the bound as an unsigned value with the
16215            precision of its type.  The precision and signedness of the
16216            type will be necessary to re-interpret it unambiguously.  */
16217         else if (prec < HOST_BITS_PER_WIDE_INT)
16218           {
16219             unsigned HOST_WIDE_INT mask
16220               = ((unsigned HOST_WIDE_INT) 1 << prec) - 1;
16221             add_AT_unsigned (subrange_die, bound_attr,
16222                              TREE_INT_CST_LOW (bound) & mask);
16223           }
16224         else if (prec == HOST_BITS_PER_WIDE_INT
16225                  || TREE_INT_CST_HIGH (bound) == 0)
16226           add_AT_unsigned (subrange_die, bound_attr,
16227                            TREE_INT_CST_LOW (bound));
16228         else
16229           add_AT_double (subrange_die, bound_attr, TREE_INT_CST_HIGH (bound),
16230                          TREE_INT_CST_LOW (bound));
16231       }
16232       break;
16233
16234     CASE_CONVERT:
16235     case VIEW_CONVERT_EXPR:
16236       add_bound_info (subrange_die, bound_attr, TREE_OPERAND (bound, 0));
16237       break;
16238
16239     case SAVE_EXPR:
16240       break;
16241
16242     case VAR_DECL:
16243     case PARM_DECL:
16244     case RESULT_DECL:
16245       {
16246         dw_die_ref decl_die = lookup_decl_die (bound);
16247         dw_loc_list_ref loc;
16248
16249         /* ??? Can this happen, or should the variable have been bound
16250            first?  Probably it can, since I imagine that we try to create
16251            the types of parameters in the order in which they exist in
16252            the list, and won't have created a forward reference to a
16253            later parameter.  */
16254         if (decl_die != NULL)
16255           add_AT_die_ref (subrange_die, bound_attr, decl_die);
16256         else
16257           {
16258             loc = loc_list_from_tree (bound, 0);
16259             add_AT_location_description (subrange_die, bound_attr, loc);
16260           }
16261         break;
16262       }
16263
16264     default:
16265       {
16266         /* Otherwise try to create a stack operation procedure to
16267            evaluate the value of the array bound.  */
16268
16269         dw_die_ref ctx, decl_die;
16270         dw_loc_list_ref list;
16271
16272         list = loc_list_from_tree (bound, 2);
16273         if (list == NULL)
16274           break;
16275
16276         if (current_function_decl == 0)
16277           ctx = comp_unit_die;
16278         else
16279           ctx = lookup_decl_die (current_function_decl);
16280
16281         decl_die = new_die (DW_TAG_variable, ctx, bound);
16282         add_AT_flag (decl_die, DW_AT_artificial, 1);
16283         add_type_attribute (decl_die, TREE_TYPE (bound), 1, 0, ctx);
16284         if (list->dw_loc_next)
16285           add_AT_loc_list (decl_die, DW_AT_location, list);
16286         else
16287           add_AT_loc (decl_die, DW_AT_location, list->expr);
16288
16289         add_AT_die_ref (subrange_die, bound_attr, decl_die);
16290         break;
16291       }
16292     }
16293 }
16294
16295 /* Add subscript info to TYPE_DIE, describing an array TYPE, collapsing
16296    possibly nested array subscripts in a flat sequence if COLLAPSE_P is true.
16297    Note that the block of subscript information for an array type also
16298    includes information about the element type of the given array type.  */
16299
16300 static void
16301 add_subscript_info (dw_die_ref type_die, tree type, bool collapse_p)
16302 {
16303   unsigned dimension_number;
16304   tree lower, upper;
16305   dw_die_ref subrange_die;
16306
16307   for (dimension_number = 0;
16308        TREE_CODE (type) == ARRAY_TYPE && (dimension_number == 0 || collapse_p);
16309        type = TREE_TYPE (type), dimension_number++)
16310     {
16311       tree domain = TYPE_DOMAIN (type);
16312
16313       if (TYPE_STRING_FLAG (type) && is_fortran () && dimension_number > 0)
16314         break;
16315
16316       /* Arrays come in three flavors: Unspecified bounds, fixed bounds,
16317          and (in GNU C only) variable bounds.  Handle all three forms
16318          here.  */
16319       subrange_die = new_die (DW_TAG_subrange_type, type_die, NULL);
16320       if (domain)
16321         {
16322           /* We have an array type with specified bounds.  */
16323           lower = TYPE_MIN_VALUE (domain);
16324           upper = TYPE_MAX_VALUE (domain);
16325
16326           /* Define the index type.  */
16327           if (TREE_TYPE (domain))
16328             {
16329               /* ??? This is probably an Ada unnamed subrange type.  Ignore the
16330                  TREE_TYPE field.  We can't emit debug info for this
16331                  because it is an unnamed integral type.  */
16332               if (TREE_CODE (domain) == INTEGER_TYPE
16333                   && TYPE_NAME (domain) == NULL_TREE
16334                   && TREE_CODE (TREE_TYPE (domain)) == INTEGER_TYPE
16335                   && TYPE_NAME (TREE_TYPE (domain)) == NULL_TREE)
16336                 ;
16337               else
16338                 add_type_attribute (subrange_die, TREE_TYPE (domain), 0, 0,
16339                                     type_die);
16340             }
16341
16342           /* ??? If upper is NULL, the array has unspecified length,
16343              but it does have a lower bound.  This happens with Fortran
16344                dimension arr(N:*)
16345              Since the debugger is definitely going to need to know N
16346              to produce useful results, go ahead and output the lower
16347              bound solo, and hope the debugger can cope.  */
16348
16349           add_bound_info (subrange_die, DW_AT_lower_bound, lower);
16350           if (upper)
16351             add_bound_info (subrange_die, DW_AT_upper_bound, upper);
16352         }
16353
16354       /* Otherwise we have an array type with an unspecified length.  The
16355          DWARF-2 spec does not say how to handle this; let's just leave out the
16356          bounds.  */
16357     }
16358 }
16359
16360 static void
16361 add_byte_size_attribute (dw_die_ref die, tree tree_node)
16362 {
16363   unsigned size;
16364
16365   switch (TREE_CODE (tree_node))
16366     {
16367     case ERROR_MARK:
16368       size = 0;
16369       break;
16370     case ENUMERAL_TYPE:
16371     case RECORD_TYPE:
16372     case UNION_TYPE:
16373     case QUAL_UNION_TYPE:
16374       size = int_size_in_bytes (tree_node);
16375       break;
16376     case FIELD_DECL:
16377       /* For a data member of a struct or union, the DW_AT_byte_size is
16378          generally given as the number of bytes normally allocated for an
16379          object of the *declared* type of the member itself.  This is true
16380          even for bit-fields.  */
16381       size = simple_type_size_in_bits (field_type (tree_node)) / BITS_PER_UNIT;
16382       break;
16383     default:
16384       gcc_unreachable ();
16385     }
16386
16387   /* Note that `size' might be -1 when we get to this point.  If it is, that
16388      indicates that the byte size of the entity in question is variable.  We
16389      have no good way of expressing this fact in Dwarf at the present time,
16390      so just let the -1 pass on through.  */
16391   add_AT_unsigned (die, DW_AT_byte_size, size);
16392 }
16393
16394 /* For a FIELD_DECL node which represents a bit-field, output an attribute
16395    which specifies the distance in bits from the highest order bit of the
16396    "containing object" for the bit-field to the highest order bit of the
16397    bit-field itself.
16398
16399    For any given bit-field, the "containing object" is a hypothetical object
16400    (of some integral or enum type) within which the given bit-field lives.  The
16401    type of this hypothetical "containing object" is always the same as the
16402    declared type of the individual bit-field itself.  The determination of the
16403    exact location of the "containing object" for a bit-field is rather
16404    complicated.  It's handled by the `field_byte_offset' function (above).
16405
16406    Note that it is the size (in bytes) of the hypothetical "containing object"
16407    which will be given in the DW_AT_byte_size attribute for this bit-field.
16408    (See `byte_size_attribute' above).  */
16409
16410 static inline void
16411 add_bit_offset_attribute (dw_die_ref die, tree decl)
16412 {
16413   HOST_WIDE_INT object_offset_in_bytes = field_byte_offset (decl);
16414   tree type = DECL_BIT_FIELD_TYPE (decl);
16415   HOST_WIDE_INT bitpos_int;
16416   HOST_WIDE_INT highest_order_object_bit_offset;
16417   HOST_WIDE_INT highest_order_field_bit_offset;
16418   HOST_WIDE_INT unsigned bit_offset;
16419
16420   /* Must be a field and a bit field.  */
16421   gcc_assert (type && TREE_CODE (decl) == FIELD_DECL);
16422
16423   /* We can't yet handle bit-fields whose offsets are variable, so if we
16424      encounter such things, just return without generating any attribute
16425      whatsoever.  Likewise for variable or too large size.  */
16426   if (! host_integerp (bit_position (decl), 0)
16427       || ! host_integerp (DECL_SIZE (decl), 1))
16428     return;
16429
16430   bitpos_int = int_bit_position (decl);
16431
16432   /* Note that the bit offset is always the distance (in bits) from the
16433      highest-order bit of the "containing object" to the highest-order bit of
16434      the bit-field itself.  Since the "high-order end" of any object or field
16435      is different on big-endian and little-endian machines, the computation
16436      below must take account of these differences.  */
16437   highest_order_object_bit_offset = object_offset_in_bytes * BITS_PER_UNIT;
16438   highest_order_field_bit_offset = bitpos_int;
16439
16440   if (! BYTES_BIG_ENDIAN)
16441     {
16442       highest_order_field_bit_offset += tree_low_cst (DECL_SIZE (decl), 0);
16443       highest_order_object_bit_offset += simple_type_size_in_bits (type);
16444     }
16445
16446   bit_offset
16447     = (! BYTES_BIG_ENDIAN
16448        ? highest_order_object_bit_offset - highest_order_field_bit_offset
16449        : highest_order_field_bit_offset - highest_order_object_bit_offset);
16450
16451   add_AT_unsigned (die, DW_AT_bit_offset, bit_offset);
16452 }
16453
16454 /* For a FIELD_DECL node which represents a bit field, output an attribute
16455    which specifies the length in bits of the given field.  */
16456
16457 static inline void
16458 add_bit_size_attribute (dw_die_ref die, tree decl)
16459 {
16460   /* Must be a field and a bit field.  */
16461   gcc_assert (TREE_CODE (decl) == FIELD_DECL
16462               && DECL_BIT_FIELD_TYPE (decl));
16463
16464   if (host_integerp (DECL_SIZE (decl), 1))
16465     add_AT_unsigned (die, DW_AT_bit_size, tree_low_cst (DECL_SIZE (decl), 1));
16466 }
16467
16468 /* If the compiled language is ANSI C, then add a 'prototyped'
16469    attribute, if arg types are given for the parameters of a function.  */
16470
16471 static inline void
16472 add_prototyped_attribute (dw_die_ref die, tree func_type)
16473 {
16474   if (get_AT_unsigned (comp_unit_die, DW_AT_language) == DW_LANG_C89
16475       && TYPE_ARG_TYPES (func_type) != NULL)
16476     add_AT_flag (die, DW_AT_prototyped, 1);
16477 }
16478
16479 /* Add an 'abstract_origin' attribute below a given DIE.  The DIE is found
16480    by looking in either the type declaration or object declaration
16481    equate table.  */
16482
16483 static inline dw_die_ref
16484 add_abstract_origin_attribute (dw_die_ref die, tree origin)
16485 {
16486   dw_die_ref origin_die = NULL;
16487
16488   if (TREE_CODE (origin) != FUNCTION_DECL)
16489     {
16490       /* We may have gotten separated from the block for the inlined
16491          function, if we're in an exception handler or some such; make
16492          sure that the abstract function has been written out.
16493
16494          Doing this for nested functions is wrong, however; functions are
16495          distinct units, and our context might not even be inline.  */
16496       tree fn = origin;
16497
16498       if (TYPE_P (fn))
16499         fn = TYPE_STUB_DECL (fn);
16500
16501       fn = decl_function_context (fn);
16502       if (fn)
16503         dwarf2out_abstract_function (fn);
16504     }
16505
16506   if (DECL_P (origin))
16507     origin_die = lookup_decl_die (origin);
16508   else if (TYPE_P (origin))
16509     origin_die = lookup_type_die (origin);
16510
16511   /* XXX: Functions that are never lowered don't always have correct block
16512      trees (in the case of java, they simply have no block tree, in some other
16513      languages).  For these functions, there is nothing we can really do to
16514      output correct debug info for inlined functions in all cases.  Rather
16515      than die, we'll just produce deficient debug info now, in that we will
16516      have variables without a proper abstract origin.  In the future, when all
16517      functions are lowered, we should re-add a gcc_assert (origin_die)
16518      here.  */
16519
16520   if (origin_die)
16521     add_AT_die_ref (die, DW_AT_abstract_origin, origin_die);
16522   return origin_die;
16523 }
16524
16525 /* We do not currently support the pure_virtual attribute.  */
16526
16527 static inline void
16528 add_pure_or_virtual_attribute (dw_die_ref die, tree func_decl)
16529 {
16530   if (DECL_VINDEX (func_decl))
16531     {
16532       add_AT_unsigned (die, DW_AT_virtuality, DW_VIRTUALITY_virtual);
16533
16534       if (host_integerp (DECL_VINDEX (func_decl), 0))
16535         add_AT_loc (die, DW_AT_vtable_elem_location,
16536                     new_loc_descr (DW_OP_constu,
16537                                    tree_low_cst (DECL_VINDEX (func_decl), 0),
16538                                    0));
16539
16540       /* GNU extension: Record what type this method came from originally.  */
16541       if (debug_info_level > DINFO_LEVEL_TERSE
16542           && DECL_CONTEXT (func_decl))
16543         add_AT_die_ref (die, DW_AT_containing_type,
16544                         lookup_type_die (DECL_CONTEXT (func_decl)));
16545     }
16546 }
16547 \f
16548 /* Add source coordinate attributes for the given decl.  */
16549
16550 static void
16551 add_src_coords_attributes (dw_die_ref die, tree decl)
16552 {
16553   expanded_location s = expand_location (DECL_SOURCE_LOCATION (decl));
16554
16555   add_AT_file (die, DW_AT_decl_file, lookup_filename (s.file));
16556   add_AT_unsigned (die, DW_AT_decl_line, s.line);
16557 }
16558
16559 /* Add a DW_AT_name attribute and source coordinate attribute for the
16560    given decl, but only if it actually has a name.  */
16561
16562 static void
16563 add_name_and_src_coords_attributes (dw_die_ref die, tree decl)
16564 {
16565   tree decl_name;
16566
16567   decl_name = DECL_NAME (decl);
16568   if (decl_name != NULL && IDENTIFIER_POINTER (decl_name) != NULL)
16569     {
16570       const char *name = dwarf2_name (decl, 0);
16571       if (name)
16572         add_name_attribute (die, name);
16573       if (! DECL_ARTIFICIAL (decl))
16574         add_src_coords_attributes (die, decl);
16575
16576       if ((TREE_CODE (decl) == FUNCTION_DECL || TREE_CODE (decl) == VAR_DECL)
16577           && TREE_PUBLIC (decl)
16578           && !DECL_ABSTRACT (decl)
16579           && !(TREE_CODE (decl) == VAR_DECL && DECL_REGISTER (decl))
16580           && !is_fortran ())
16581         {
16582           /* Defer until we have an assembler name set.  */
16583           if (!DECL_ASSEMBLER_NAME_SET_P (decl))
16584             {
16585               limbo_die_node *asm_name;
16586
16587               asm_name = GGC_CNEW (limbo_die_node);
16588               asm_name->die = die;
16589               asm_name->created_for = decl;
16590               asm_name->next = deferred_asm_name;
16591               deferred_asm_name = asm_name;
16592             }
16593           else if (DECL_ASSEMBLER_NAME (decl) != DECL_NAME (decl))
16594             add_AT_string (die, DW_AT_MIPS_linkage_name,
16595                            IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl)));
16596         }
16597     }
16598
16599 #ifdef VMS_DEBUGGING_INFO
16600   /* Get the function's name, as described by its RTL.  This may be different
16601      from the DECL_NAME name used in the source file.  */
16602   if (TREE_CODE (decl) == FUNCTION_DECL && TREE_ASM_WRITTEN (decl))
16603     {
16604       add_AT_addr (die, DW_AT_VMS_rtnbeg_pd_address,
16605                    XEXP (DECL_RTL (decl), 0));
16606       VEC_safe_push (rtx, gc, used_rtx_array, XEXP (DECL_RTL (decl), 0));
16607     }
16608 #endif
16609 }
16610
16611 /* Push a new declaration scope.  */
16612
16613 static void
16614 push_decl_scope (tree scope)
16615 {
16616   VEC_safe_push (tree, gc, decl_scope_table, scope);
16617 }
16618
16619 /* Pop a declaration scope.  */
16620
16621 static inline void
16622 pop_decl_scope (void)
16623 {
16624   VEC_pop (tree, decl_scope_table);
16625 }
16626
16627 /* Return the DIE for the scope that immediately contains this type.
16628    Non-named types get global scope.  Named types nested in other
16629    types get their containing scope if it's open, or global scope
16630    otherwise.  All other types (i.e. function-local named types) get
16631    the current active scope.  */
16632
16633 static dw_die_ref
16634 scope_die_for (tree t, dw_die_ref context_die)
16635 {
16636   dw_die_ref scope_die = NULL;
16637   tree containing_scope;
16638   int i;
16639
16640   /* Non-types always go in the current scope.  */
16641   gcc_assert (TYPE_P (t));
16642
16643   containing_scope = TYPE_CONTEXT (t);
16644
16645   /* Use the containing namespace if it was passed in (for a declaration).  */
16646   if (containing_scope && TREE_CODE (containing_scope) == NAMESPACE_DECL)
16647     {
16648       if (context_die == lookup_decl_die (containing_scope))
16649         /* OK */;
16650       else
16651         containing_scope = NULL_TREE;
16652     }
16653
16654   /* Ignore function type "scopes" from the C frontend.  They mean that
16655      a tagged type is local to a parmlist of a function declarator, but
16656      that isn't useful to DWARF.  */
16657   if (containing_scope && TREE_CODE (containing_scope) == FUNCTION_TYPE)
16658     containing_scope = NULL_TREE;
16659
16660   if (containing_scope == NULL_TREE)
16661     scope_die = comp_unit_die;
16662   else if (TYPE_P (containing_scope))
16663     {
16664       /* For types, we can just look up the appropriate DIE.  But
16665          first we check to see if we're in the middle of emitting it
16666          so we know where the new DIE should go.  */
16667       for (i = VEC_length (tree, decl_scope_table) - 1; i >= 0; --i)
16668         if (VEC_index (tree, decl_scope_table, i) == containing_scope)
16669           break;
16670
16671       if (i < 0)
16672         {
16673           gcc_assert (debug_info_level <= DINFO_LEVEL_TERSE
16674                       || TREE_ASM_WRITTEN (containing_scope));
16675
16676           /* If none of the current dies are suitable, we get file scope.  */
16677           scope_die = comp_unit_die;
16678         }
16679       else
16680         scope_die = lookup_type_die (containing_scope);
16681     }
16682   else
16683     scope_die = context_die;
16684
16685   return scope_die;
16686 }
16687
16688 /* Returns nonzero if CONTEXT_DIE is internal to a function.  */
16689
16690 static inline int
16691 local_scope_p (dw_die_ref context_die)
16692 {
16693   for (; context_die; context_die = context_die->die_parent)
16694     if (context_die->die_tag == DW_TAG_inlined_subroutine
16695         || context_die->die_tag == DW_TAG_subprogram)
16696       return 1;
16697
16698   return 0;
16699 }
16700
16701 /* Returns nonzero if CONTEXT_DIE is a class.  */
16702
16703 static inline int
16704 class_scope_p (dw_die_ref context_die)
16705 {
16706   return (context_die
16707           && (context_die->die_tag == DW_TAG_structure_type
16708               || context_die->die_tag == DW_TAG_class_type
16709               || context_die->die_tag == DW_TAG_interface_type
16710               || context_die->die_tag == DW_TAG_union_type));
16711 }
16712
16713 /* Returns nonzero if CONTEXT_DIE is a class or namespace, for deciding
16714    whether or not to treat a DIE in this context as a declaration.  */
16715
16716 static inline int
16717 class_or_namespace_scope_p (dw_die_ref context_die)
16718 {
16719   return (class_scope_p (context_die)
16720           || (context_die && context_die->die_tag == DW_TAG_namespace));
16721 }
16722
16723 /* Many forms of DIEs require a "type description" attribute.  This
16724    routine locates the proper "type descriptor" die for the type given
16725    by 'type', and adds a DW_AT_type attribute below the given die.  */
16726
16727 static void
16728 add_type_attribute (dw_die_ref object_die, tree type, int decl_const,
16729                     int decl_volatile, dw_die_ref context_die)
16730 {
16731   enum tree_code code  = TREE_CODE (type);
16732   dw_die_ref type_die  = NULL;
16733
16734   /* ??? If this type is an unnamed subrange type of an integral, floating-point
16735      or fixed-point type, use the inner type.  This is because we have no
16736      support for unnamed types in base_type_die.  This can happen if this is
16737      an Ada subrange type.  Correct solution is emit a subrange type die.  */
16738   if ((code == INTEGER_TYPE || code == REAL_TYPE || code == FIXED_POINT_TYPE)
16739       && TREE_TYPE (type) != 0 && TYPE_NAME (type) == 0)
16740     type = TREE_TYPE (type), code = TREE_CODE (type);
16741
16742   if (code == ERROR_MARK
16743       /* Handle a special case.  For functions whose return type is void, we
16744          generate *no* type attribute.  (Note that no object may have type
16745          `void', so this only applies to function return types).  */
16746       || code == VOID_TYPE)
16747     return;
16748
16749   type_die = modified_type_die (type,
16750                                 decl_const || TYPE_READONLY (type),
16751                                 decl_volatile || TYPE_VOLATILE (type),
16752                                 context_die);
16753
16754   if (type_die != NULL)
16755     add_AT_die_ref (object_die, DW_AT_type, type_die);
16756 }
16757
16758 /* Given an object die, add the calling convention attribute for the
16759    function call type.  */
16760 static void
16761 add_calling_convention_attribute (dw_die_ref subr_die, tree decl)
16762 {
16763   enum dwarf_calling_convention value = DW_CC_normal;
16764
16765   value = ((enum dwarf_calling_convention)
16766            targetm.dwarf_calling_convention (TREE_TYPE (decl)));
16767
16768   /* DWARF doesn't provide a way to identify a program's source-level
16769      entry point.  DW_AT_calling_convention attributes are only meant
16770      to describe functions' calling conventions.  However, lacking a
16771      better way to signal the Fortran main program, we use this for the
16772      time being, following existing custom.  */
16773   if (is_fortran ()
16774       && !strcmp (IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl)), "MAIN__"))
16775     value = DW_CC_program;
16776
16777   /* Only add the attribute if the backend requests it, and
16778      is not DW_CC_normal.  */
16779   if (value && (value != DW_CC_normal))
16780     add_AT_unsigned (subr_die, DW_AT_calling_convention, value);
16781 }
16782
16783 /* Given a tree pointer to a struct, class, union, or enum type node, return
16784    a pointer to the (string) tag name for the given type, or zero if the type
16785    was declared without a tag.  */
16786
16787 static const char *
16788 type_tag (const_tree type)
16789 {
16790   const char *name = 0;
16791
16792   if (TYPE_NAME (type) != 0)
16793     {
16794       tree t = 0;
16795
16796       /* Find the IDENTIFIER_NODE for the type name.  */
16797       if (TREE_CODE (TYPE_NAME (type)) == IDENTIFIER_NODE)
16798         t = TYPE_NAME (type);
16799
16800       /* The g++ front end makes the TYPE_NAME of *each* tagged type point to
16801          a TYPE_DECL node, regardless of whether or not a `typedef' was
16802          involved.  */
16803       else if (TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
16804                && ! DECL_IGNORED_P (TYPE_NAME (type)))
16805         {
16806           /* We want to be extra verbose.  Don't call dwarf_name if
16807              DECL_NAME isn't set.  The default hook for decl_printable_name
16808              doesn't like that, and in this context it's correct to return
16809              0, instead of "<anonymous>" or the like.  */
16810           if (DECL_NAME (TYPE_NAME (type)))
16811             name = lang_hooks.dwarf_name (TYPE_NAME (type), 2);
16812         }
16813
16814       /* Now get the name as a string, or invent one.  */
16815       if (!name && t != 0)
16816         name = IDENTIFIER_POINTER (t);
16817     }
16818
16819   return (name == 0 || *name == '\0') ? 0 : name;
16820 }
16821
16822 /* Return the type associated with a data member, make a special check
16823    for bit field types.  */
16824
16825 static inline tree
16826 member_declared_type (const_tree member)
16827 {
16828   return (DECL_BIT_FIELD_TYPE (member)
16829           ? DECL_BIT_FIELD_TYPE (member) : TREE_TYPE (member));
16830 }
16831
16832 /* Get the decl's label, as described by its RTL. This may be different
16833    from the DECL_NAME name used in the source file.  */
16834
16835 #if 0
16836 static const char *
16837 decl_start_label (tree decl)
16838 {
16839   rtx x;
16840   const char *fnname;
16841
16842   x = DECL_RTL (decl);
16843   gcc_assert (MEM_P (x));
16844
16845   x = XEXP (x, 0);
16846   gcc_assert (GET_CODE (x) == SYMBOL_REF);
16847
16848   fnname = XSTR (x, 0);
16849   return fnname;
16850 }
16851 #endif
16852 \f
16853 /* These routines generate the internal representation of the DIE's for
16854    the compilation unit.  Debugging information is collected by walking
16855    the declaration trees passed in from dwarf2out_decl().  */
16856
16857 static void
16858 gen_array_type_die (tree type, dw_die_ref context_die)
16859 {
16860   dw_die_ref scope_die = scope_die_for (type, context_die);
16861   dw_die_ref array_die;
16862
16863   /* GNU compilers represent multidimensional array types as sequences of one
16864      dimensional array types whose element types are themselves array types.
16865      We sometimes squish that down to a single array_type DIE with multiple
16866      subscripts in the Dwarf debugging info.  The draft Dwarf specification
16867      say that we are allowed to do this kind of compression in C, because
16868      there is no difference between an array of arrays and a multidimensional
16869      array.  We don't do this for Ada to remain as close as possible to the
16870      actual representation, which is especially important against the language
16871      flexibilty wrt arrays of variable size.  */
16872
16873   bool collapse_nested_arrays = !is_ada ();
16874   tree element_type;
16875
16876   /* Emit DW_TAG_string_type for Fortran character types (with kind 1 only, as
16877      DW_TAG_string_type doesn't have DW_AT_type attribute).  */
16878   if (TYPE_STRING_FLAG (type)
16879       && TREE_CODE (type) == ARRAY_TYPE
16880       && is_fortran ()
16881       && TYPE_MODE (TREE_TYPE (type)) == TYPE_MODE (char_type_node))
16882     {
16883       HOST_WIDE_INT size;
16884
16885       array_die = new_die (DW_TAG_string_type, scope_die, type);
16886       add_name_attribute (array_die, type_tag (type));
16887       equate_type_number_to_die (type, array_die);
16888       size = int_size_in_bytes (type);
16889       if (size >= 0)
16890         add_AT_unsigned (array_die, DW_AT_byte_size, size);
16891       else if (TYPE_DOMAIN (type) != NULL_TREE
16892                && TYPE_MAX_VALUE (TYPE_DOMAIN (type)) != NULL_TREE
16893                && DECL_P (TYPE_MAX_VALUE (TYPE_DOMAIN (type))))
16894         {
16895           tree szdecl = TYPE_MAX_VALUE (TYPE_DOMAIN (type));
16896           dw_loc_list_ref loc = loc_list_from_tree (szdecl, 2);
16897
16898           size = int_size_in_bytes (TREE_TYPE (szdecl));
16899           if (loc && size > 0)
16900             {
16901               add_AT_location_description (array_die, DW_AT_string_length, loc);
16902               if (size != DWARF2_ADDR_SIZE)
16903                 add_AT_unsigned (array_die, DW_AT_byte_size, size);
16904             }
16905         }
16906       return;
16907     }
16908
16909   /* ??? The SGI dwarf reader fails for array of array of enum types
16910      (e.g. const enum machine_mode insn_operand_mode[2][10]) unless the inner
16911      array type comes before the outer array type.  We thus call gen_type_die
16912      before we new_die and must prevent nested array types collapsing for this
16913      target.  */
16914
16915 #ifdef MIPS_DEBUGGING_INFO
16916   gen_type_die (TREE_TYPE (type), context_die);
16917   collapse_nested_arrays = false;
16918 #endif
16919
16920   array_die = new_die (DW_TAG_array_type, scope_die, type);
16921   add_name_attribute (array_die, type_tag (type));
16922   equate_type_number_to_die (type, array_die);
16923
16924   if (TREE_CODE (type) == VECTOR_TYPE)
16925     {
16926       /* The frontend feeds us a representation for the vector as a struct
16927          containing an array.  Pull out the array type.  */
16928       type = TREE_TYPE (TYPE_FIELDS (TYPE_DEBUG_REPRESENTATION_TYPE (type)));
16929       add_AT_flag (array_die, DW_AT_GNU_vector, 1);
16930     }
16931
16932   /* For Fortran multidimensional arrays use DW_ORD_col_major ordering.  */
16933   if (is_fortran ()
16934       && TREE_CODE (type) == ARRAY_TYPE
16935       && TREE_CODE (TREE_TYPE (type)) == ARRAY_TYPE
16936       && !TYPE_STRING_FLAG (TREE_TYPE (type)))
16937     add_AT_unsigned (array_die, DW_AT_ordering, DW_ORD_col_major);
16938
16939 #if 0
16940   /* We default the array ordering.  SDB will probably do
16941      the right things even if DW_AT_ordering is not present.  It's not even
16942      an issue until we start to get into multidimensional arrays anyway.  If
16943      SDB is ever caught doing the Wrong Thing for multi-dimensional arrays,
16944      then we'll have to put the DW_AT_ordering attribute back in.  (But if
16945      and when we find out that we need to put these in, we will only do so
16946      for multidimensional arrays.  */
16947   add_AT_unsigned (array_die, DW_AT_ordering, DW_ORD_row_major);
16948 #endif
16949
16950 #ifdef MIPS_DEBUGGING_INFO
16951   /* The SGI compilers handle arrays of unknown bound by setting
16952      AT_declaration and not emitting any subrange DIEs.  */
16953   if (! TYPE_DOMAIN (type))
16954     add_AT_flag (array_die, DW_AT_declaration, 1);
16955   else
16956 #endif
16957     add_subscript_info (array_die, type, collapse_nested_arrays);
16958
16959   /* Add representation of the type of the elements of this array type and
16960      emit the corresponding DIE if we haven't done it already.  */
16961   element_type = TREE_TYPE (type);
16962   if (collapse_nested_arrays)
16963     while (TREE_CODE (element_type) == ARRAY_TYPE)
16964       {
16965         if (TYPE_STRING_FLAG (element_type) && is_fortran ())
16966           break;
16967         element_type = TREE_TYPE (element_type);
16968       }
16969
16970 #ifndef MIPS_DEBUGGING_INFO
16971   gen_type_die (element_type, context_die);
16972 #endif
16973
16974   add_type_attribute (array_die, element_type, 0, 0, context_die);
16975
16976   if (get_AT (array_die, DW_AT_name))
16977     add_pubtype (type, array_die);
16978 }
16979
16980 static dw_loc_descr_ref
16981 descr_info_loc (tree val, tree base_decl)
16982 {
16983   HOST_WIDE_INT size;
16984   dw_loc_descr_ref loc, loc2;
16985   enum dwarf_location_atom op;
16986
16987   if (val == base_decl)
16988     return new_loc_descr (DW_OP_push_object_address, 0, 0);
16989
16990   switch (TREE_CODE (val))
16991     {
16992     CASE_CONVERT:
16993       return descr_info_loc (TREE_OPERAND (val, 0), base_decl);
16994     case VAR_DECL:
16995       return loc_descriptor_from_tree (val, 0);
16996     case INTEGER_CST:
16997       if (host_integerp (val, 0))
16998         return int_loc_descriptor (tree_low_cst (val, 0));
16999       break;
17000     case INDIRECT_REF:
17001       size = int_size_in_bytes (TREE_TYPE (val));
17002       if (size < 0)
17003         break;
17004       loc = descr_info_loc (TREE_OPERAND (val, 0), base_decl);
17005       if (!loc)
17006         break;
17007       if (size == DWARF2_ADDR_SIZE)
17008         add_loc_descr (&loc, new_loc_descr (DW_OP_deref, 0, 0));
17009       else
17010         add_loc_descr (&loc, new_loc_descr (DW_OP_deref_size, size, 0));
17011       return loc;
17012     case POINTER_PLUS_EXPR:
17013     case PLUS_EXPR:
17014       if (host_integerp (TREE_OPERAND (val, 1), 1)
17015           && (unsigned HOST_WIDE_INT) tree_low_cst (TREE_OPERAND (val, 1), 1)
17016              < 16384)
17017         {
17018           loc = descr_info_loc (TREE_OPERAND (val, 0), base_decl);
17019           if (!loc)
17020             break;
17021           loc_descr_plus_const (&loc, tree_low_cst (TREE_OPERAND (val, 1), 0));
17022         }
17023       else
17024         {
17025           op = DW_OP_plus;
17026         do_binop:
17027           loc = descr_info_loc (TREE_OPERAND (val, 0), base_decl);
17028           if (!loc)
17029             break;
17030           loc2 = descr_info_loc (TREE_OPERAND (val, 1), base_decl);
17031           if (!loc2)
17032             break;
17033           add_loc_descr (&loc, loc2);
17034           add_loc_descr (&loc2, new_loc_descr (op, 0, 0));
17035         }
17036       return loc;
17037     case MINUS_EXPR:
17038       op = DW_OP_minus;
17039       goto do_binop;
17040     case MULT_EXPR:
17041       op = DW_OP_mul;
17042       goto do_binop;
17043     case EQ_EXPR:
17044       op = DW_OP_eq;
17045       goto do_binop;
17046     case NE_EXPR:
17047       op = DW_OP_ne;
17048       goto do_binop;
17049     default:
17050       break;
17051     }
17052   return NULL;
17053 }
17054
17055 static void
17056 add_descr_info_field (dw_die_ref die, enum dwarf_attribute attr,
17057                       tree val, tree base_decl)
17058 {
17059   dw_loc_descr_ref loc;
17060
17061   if (host_integerp (val, 0))
17062     {
17063       add_AT_unsigned (die, attr, tree_low_cst (val, 0));
17064       return;
17065     }
17066
17067   loc = descr_info_loc (val, base_decl);
17068   if (!loc)
17069     return;
17070
17071   add_AT_loc (die, attr, loc);
17072 }
17073
17074 /* This routine generates DIE for array with hidden descriptor, details
17075    are filled into *info by a langhook.  */
17076
17077 static void
17078 gen_descr_array_type_die (tree type, struct array_descr_info *info,
17079                           dw_die_ref context_die)
17080 {
17081   dw_die_ref scope_die = scope_die_for (type, context_die);
17082   dw_die_ref array_die;
17083   int dim;
17084
17085   array_die = new_die (DW_TAG_array_type, scope_die, type);
17086   add_name_attribute (array_die, type_tag (type));
17087   equate_type_number_to_die (type, array_die);
17088
17089   /* For Fortran multidimensional arrays use DW_ORD_col_major ordering.  */
17090   if (is_fortran ()
17091       && info->ndimensions >= 2)
17092     add_AT_unsigned (array_die, DW_AT_ordering, DW_ORD_col_major);
17093
17094   if (info->data_location)
17095     add_descr_info_field (array_die, DW_AT_data_location, info->data_location,
17096                           info->base_decl);
17097   if (info->associated)
17098     add_descr_info_field (array_die, DW_AT_associated, info->associated,
17099                           info->base_decl);
17100   if (info->allocated)
17101     add_descr_info_field (array_die, DW_AT_allocated, info->allocated,
17102                           info->base_decl);
17103
17104   for (dim = 0; dim < info->ndimensions; dim++)
17105     {
17106       dw_die_ref subrange_die
17107         = new_die (DW_TAG_subrange_type, array_die, NULL);
17108
17109       if (info->dimen[dim].lower_bound)
17110         {
17111           /* If it is the default value, omit it.  */
17112           if ((is_c_family () || is_java ())
17113               && integer_zerop (info->dimen[dim].lower_bound))
17114             ;
17115           else if (is_fortran ()
17116                    && integer_onep (info->dimen[dim].lower_bound))
17117             ;
17118           else
17119             add_descr_info_field (subrange_die, DW_AT_lower_bound,
17120                                   info->dimen[dim].lower_bound,
17121                                   info->base_decl);
17122         }
17123       if (info->dimen[dim].upper_bound)
17124         add_descr_info_field (subrange_die, DW_AT_upper_bound,
17125                               info->dimen[dim].upper_bound,
17126                               info->base_decl);
17127       if (info->dimen[dim].stride)
17128         add_descr_info_field (subrange_die, DW_AT_byte_stride,
17129                               info->dimen[dim].stride,
17130                               info->base_decl);
17131     }
17132
17133   gen_type_die (info->element_type, context_die);
17134   add_type_attribute (array_die, info->element_type, 0, 0, context_die);
17135
17136   if (get_AT (array_die, DW_AT_name))
17137     add_pubtype (type, array_die);
17138 }
17139
17140 #if 0
17141 static void
17142 gen_entry_point_die (tree decl, dw_die_ref context_die)
17143 {
17144   tree origin = decl_ultimate_origin (decl);
17145   dw_die_ref decl_die = new_die (DW_TAG_entry_point, context_die, decl);
17146
17147   if (origin != NULL)
17148     add_abstract_origin_attribute (decl_die, origin);
17149   else
17150     {
17151       add_name_and_src_coords_attributes (decl_die, decl);
17152       add_type_attribute (decl_die, TREE_TYPE (TREE_TYPE (decl)),
17153                           0, 0, context_die);
17154     }
17155
17156   if (DECL_ABSTRACT (decl))
17157     equate_decl_number_to_die (decl, decl_die);
17158   else
17159     add_AT_lbl_id (decl_die, DW_AT_low_pc, decl_start_label (decl));
17160 }
17161 #endif
17162
17163 /* Walk through the list of incomplete types again, trying once more to
17164    emit full debugging info for them.  */
17165
17166 static void
17167 retry_incomplete_types (void)
17168 {
17169   int i;
17170
17171   for (i = VEC_length (tree, incomplete_types) - 1; i >= 0; i--)
17172     gen_type_die (VEC_index (tree, incomplete_types, i), comp_unit_die);
17173 }
17174
17175 /* Determine what tag to use for a record type.  */
17176
17177 static enum dwarf_tag
17178 record_type_tag (tree type)
17179 {
17180   if (! lang_hooks.types.classify_record)
17181     return DW_TAG_structure_type;
17182
17183   switch (lang_hooks.types.classify_record (type))
17184     {
17185     case RECORD_IS_STRUCT:
17186       return DW_TAG_structure_type;
17187
17188     case RECORD_IS_CLASS:
17189       return DW_TAG_class_type;
17190
17191     case RECORD_IS_INTERFACE:
17192       if (dwarf_version >= 3 || !dwarf_strict)
17193         return DW_TAG_interface_type;
17194       return DW_TAG_structure_type;
17195
17196     default:
17197       gcc_unreachable ();
17198     }
17199 }
17200
17201 /* Generate a DIE to represent an enumeration type.  Note that these DIEs
17202    include all of the information about the enumeration values also. Each
17203    enumerated type name/value is listed as a child of the enumerated type
17204    DIE.  */
17205
17206 static dw_die_ref
17207 gen_enumeration_type_die (tree type, dw_die_ref context_die)
17208 {
17209   dw_die_ref type_die = lookup_type_die (type);
17210
17211   if (type_die == NULL)
17212     {
17213       type_die = new_die (DW_TAG_enumeration_type,
17214                           scope_die_for (type, context_die), type);
17215       equate_type_number_to_die (type, type_die);
17216       add_name_attribute (type_die, type_tag (type));
17217     }
17218   else if (! TYPE_SIZE (type))
17219     return type_die;
17220   else
17221     remove_AT (type_die, DW_AT_declaration);
17222
17223   /* Handle a GNU C/C++ extension, i.e. incomplete enum types.  If the
17224      given enum type is incomplete, do not generate the DW_AT_byte_size
17225      attribute or the DW_AT_element_list attribute.  */
17226   if (TYPE_SIZE (type))
17227     {
17228       tree link;
17229
17230       TREE_ASM_WRITTEN (type) = 1;
17231       add_byte_size_attribute (type_die, type);
17232       if (TYPE_STUB_DECL (type) != NULL_TREE)
17233         add_src_coords_attributes (type_die, TYPE_STUB_DECL (type));
17234
17235       /* If the first reference to this type was as the return type of an
17236          inline function, then it may not have a parent.  Fix this now.  */
17237       if (type_die->die_parent == NULL)
17238         add_child_die (scope_die_for (type, context_die), type_die);
17239
17240       for (link = TYPE_VALUES (type);
17241            link != NULL; link = TREE_CHAIN (link))
17242         {
17243           dw_die_ref enum_die = new_die (DW_TAG_enumerator, type_die, link);
17244           tree value = TREE_VALUE (link);
17245
17246           add_name_attribute (enum_die,
17247                               IDENTIFIER_POINTER (TREE_PURPOSE (link)));
17248
17249           if (TREE_CODE (value) == CONST_DECL)
17250             value = DECL_INITIAL (value);
17251
17252           if (host_integerp (value, TYPE_UNSIGNED (TREE_TYPE (value))))
17253             /* DWARF2 does not provide a way of indicating whether or
17254                not enumeration constants are signed or unsigned.  GDB
17255                always assumes the values are signed, so we output all
17256                values as if they were signed.  That means that
17257                enumeration constants with very large unsigned values
17258                will appear to have negative values in the debugger.  */
17259             add_AT_int (enum_die, DW_AT_const_value,
17260                         tree_low_cst (value, tree_int_cst_sgn (value) > 0));
17261         }
17262     }
17263   else
17264     add_AT_flag (type_die, DW_AT_declaration, 1);
17265
17266   if (get_AT (type_die, DW_AT_name))
17267     add_pubtype (type, type_die);
17268
17269   return type_die;
17270 }
17271
17272 /* Generate a DIE to represent either a real live formal parameter decl or to
17273    represent just the type of some formal parameter position in some function
17274    type.
17275
17276    Note that this routine is a bit unusual because its argument may be a
17277    ..._DECL node (i.e. either a PARM_DECL or perhaps a VAR_DECL which
17278    represents an inlining of some PARM_DECL) or else some sort of a ..._TYPE
17279    node.  If it's the former then this function is being called to output a
17280    DIE to represent a formal parameter object (or some inlining thereof).  If
17281    it's the latter, then this function is only being called to output a
17282    DW_TAG_formal_parameter DIE to stand as a placeholder for some formal
17283    argument type of some subprogram type.
17284    If EMIT_NAME_P is true, name and source coordinate attributes
17285    are emitted.  */
17286
17287 static dw_die_ref
17288 gen_formal_parameter_die (tree node, tree origin, bool emit_name_p,
17289                           dw_die_ref context_die)
17290 {
17291   tree node_or_origin = node ? node : origin;
17292   dw_die_ref parm_die
17293     = new_die (DW_TAG_formal_parameter, context_die, node);
17294
17295   switch (TREE_CODE_CLASS (TREE_CODE (node_or_origin)))
17296     {
17297     case tcc_declaration:
17298       if (!origin)
17299         origin = decl_ultimate_origin (node);
17300       if (origin != NULL)
17301         add_abstract_origin_attribute (parm_die, origin);
17302       else
17303         {
17304           tree type = TREE_TYPE (node);
17305           if (emit_name_p)
17306             add_name_and_src_coords_attributes (parm_die, node);
17307           if (decl_by_reference_p (node))
17308             add_type_attribute (parm_die, TREE_TYPE (type), 0, 0,
17309                                 context_die);
17310           else
17311             add_type_attribute (parm_die, type,
17312                                 TREE_READONLY (node),
17313                                 TREE_THIS_VOLATILE (node),
17314                                 context_die);
17315           if (DECL_ARTIFICIAL (node))
17316             add_AT_flag (parm_die, DW_AT_artificial, 1);
17317         }
17318
17319       if (node && node != origin)
17320         equate_decl_number_to_die (node, parm_die);
17321       if (! DECL_ABSTRACT (node_or_origin))
17322         add_location_or_const_value_attribute (parm_die, node_or_origin,
17323                                                DW_AT_location);
17324
17325       break;
17326
17327     case tcc_type:
17328       /* We were called with some kind of a ..._TYPE node.  */
17329       add_type_attribute (parm_die, node_or_origin, 0, 0, context_die);
17330       break;
17331
17332     default:
17333       gcc_unreachable ();
17334     }
17335
17336   return parm_die;
17337 }
17338
17339 /* Generate and return a DW_TAG_GNU_formal_parameter_pack. Also generate
17340    children DW_TAG_formal_parameter DIEs representing the arguments of the
17341    parameter pack.
17342
17343    PARM_PACK must be a function parameter pack.
17344    PACK_ARG is the first argument of the parameter pack. Its TREE_CHAIN
17345    must point to the subsequent arguments of the function PACK_ARG belongs to.
17346    SUBR_DIE is the DIE of the function PACK_ARG belongs to.
17347    If NEXT_ARG is non NULL, *NEXT_ARG is set to the function argument
17348    following the last one for which a DIE was generated.  */
17349
17350 static dw_die_ref
17351 gen_formal_parameter_pack_die  (tree parm_pack,
17352                                 tree pack_arg,
17353                                 dw_die_ref subr_die,
17354                                 tree *next_arg)
17355 {
17356   tree arg;
17357   dw_die_ref parm_pack_die;
17358
17359   gcc_assert (parm_pack
17360               && lang_hooks.function_parameter_pack_p (parm_pack)
17361               && subr_die);
17362
17363   parm_pack_die = new_die (DW_TAG_GNU_formal_parameter_pack, subr_die, parm_pack);
17364   add_src_coords_attributes (parm_pack_die, parm_pack);
17365
17366   for (arg = pack_arg; arg; arg = TREE_CHAIN (arg))
17367     {
17368       if (! lang_hooks.decls.function_parm_expanded_from_pack_p (arg,
17369                                                                  parm_pack))
17370         break;
17371       gen_formal_parameter_die (arg, NULL,
17372                                 false /* Don't emit name attribute.  */,
17373                                 parm_pack_die);
17374     }
17375   if (next_arg)
17376     *next_arg = arg;
17377   return parm_pack_die;
17378 }
17379
17380 /* Generate a special type of DIE used as a stand-in for a trailing ellipsis
17381    at the end of an (ANSI prototyped) formal parameters list.  */
17382
17383 static void
17384 gen_unspecified_parameters_die (tree decl_or_type, dw_die_ref context_die)
17385 {
17386   new_die (DW_TAG_unspecified_parameters, context_die, decl_or_type);
17387 }
17388
17389 /* Generate a list of nameless DW_TAG_formal_parameter DIEs (and perhaps a
17390    DW_TAG_unspecified_parameters DIE) to represent the types of the formal
17391    parameters as specified in some function type specification (except for
17392    those which appear as part of a function *definition*).  */
17393
17394 static void
17395 gen_formal_types_die (tree function_or_method_type, dw_die_ref context_die)
17396 {
17397   tree link;
17398   tree formal_type = NULL;
17399   tree first_parm_type;
17400   tree arg;
17401
17402   if (TREE_CODE (function_or_method_type) == FUNCTION_DECL)
17403     {
17404       arg = DECL_ARGUMENTS (function_or_method_type);
17405       function_or_method_type = TREE_TYPE (function_or_method_type);
17406     }
17407   else
17408     arg = NULL_TREE;
17409
17410   first_parm_type = TYPE_ARG_TYPES (function_or_method_type);
17411
17412   /* Make our first pass over the list of formal parameter types and output a
17413      DW_TAG_formal_parameter DIE for each one.  */
17414   for (link = first_parm_type; link; )
17415     {
17416       dw_die_ref parm_die;
17417
17418       formal_type = TREE_VALUE (link);
17419       if (formal_type == void_type_node)
17420         break;
17421
17422       /* Output a (nameless) DIE to represent the formal parameter itself.  */
17423       parm_die = gen_formal_parameter_die (formal_type, NULL,
17424                                            true /* Emit name attribute.  */,
17425                                            context_die);
17426       if ((TREE_CODE (function_or_method_type) == METHOD_TYPE
17427            && link == first_parm_type)
17428           || (arg && DECL_ARTIFICIAL (arg)))
17429         add_AT_flag (parm_die, DW_AT_artificial, 1);
17430
17431       link = TREE_CHAIN (link);
17432       if (arg)
17433         arg = TREE_CHAIN (arg);
17434     }
17435
17436   /* If this function type has an ellipsis, add a
17437      DW_TAG_unspecified_parameters DIE to the end of the parameter list.  */
17438   if (formal_type != void_type_node)
17439     gen_unspecified_parameters_die (function_or_method_type, context_die);
17440
17441   /* Make our second (and final) pass over the list of formal parameter types
17442      and output DIEs to represent those types (as necessary).  */
17443   for (link = TYPE_ARG_TYPES (function_or_method_type);
17444        link && TREE_VALUE (link);
17445        link = TREE_CHAIN (link))
17446     gen_type_die (TREE_VALUE (link), context_die);
17447 }
17448
17449 /* We want to generate the DIE for TYPE so that we can generate the
17450    die for MEMBER, which has been defined; we will need to refer back
17451    to the member declaration nested within TYPE.  If we're trying to
17452    generate minimal debug info for TYPE, processing TYPE won't do the
17453    trick; we need to attach the member declaration by hand.  */
17454
17455 static void
17456 gen_type_die_for_member (tree type, tree member, dw_die_ref context_die)
17457 {
17458   gen_type_die (type, context_die);
17459
17460   /* If we're trying to avoid duplicate debug info, we may not have
17461      emitted the member decl for this function.  Emit it now.  */
17462   if (TYPE_STUB_DECL (type)
17463       && TYPE_DECL_SUPPRESS_DEBUG (TYPE_STUB_DECL (type))
17464       && ! lookup_decl_die (member))
17465     {
17466       dw_die_ref type_die;
17467       gcc_assert (!decl_ultimate_origin (member));
17468
17469       push_decl_scope (type);
17470       type_die = lookup_type_die (type);
17471       if (TREE_CODE (member) == FUNCTION_DECL)
17472         gen_subprogram_die (member, type_die);
17473       else if (TREE_CODE (member) == FIELD_DECL)
17474         {
17475           /* Ignore the nameless fields that are used to skip bits but handle
17476              C++ anonymous unions and structs.  */
17477           if (DECL_NAME (member) != NULL_TREE
17478               || TREE_CODE (TREE_TYPE (member)) == UNION_TYPE
17479               || TREE_CODE (TREE_TYPE (member)) == RECORD_TYPE)
17480             {
17481               gen_type_die (member_declared_type (member), type_die);
17482               gen_field_die (member, type_die);
17483             }
17484         }
17485       else
17486         gen_variable_die (member, NULL_TREE, type_die);
17487
17488       pop_decl_scope ();
17489     }
17490 }
17491
17492 /* Generate the DWARF2 info for the "abstract" instance of a function which we
17493    may later generate inlined and/or out-of-line instances of.  */
17494
17495 static void
17496 dwarf2out_abstract_function (tree decl)
17497 {
17498   dw_die_ref old_die;
17499   tree save_fn;
17500   tree context;
17501   int was_abstract;
17502   htab_t old_decl_loc_table;
17503
17504   /* Make sure we have the actual abstract inline, not a clone.  */
17505   decl = DECL_ORIGIN (decl);
17506
17507   old_die = lookup_decl_die (decl);
17508   if (old_die && get_AT (old_die, DW_AT_inline))
17509     /* We've already generated the abstract instance.  */
17510     return;
17511
17512   /* We can be called while recursively when seeing block defining inlined subroutine
17513      DIE.  Be sure to not clobber the outer location table nor use it or we would
17514      get locations in abstract instantces.  */
17515   old_decl_loc_table = decl_loc_table;
17516   decl_loc_table = NULL;
17517
17518   /* Be sure we've emitted the in-class declaration DIE (if any) first, so
17519      we don't get confused by DECL_ABSTRACT.  */
17520   if (debug_info_level > DINFO_LEVEL_TERSE)
17521     {
17522       context = decl_class_context (decl);
17523       if (context)
17524         gen_type_die_for_member
17525           (context, decl, decl_function_context (decl) ? NULL : comp_unit_die);
17526     }
17527
17528   /* Pretend we've just finished compiling this function.  */
17529   save_fn = current_function_decl;
17530   current_function_decl = decl;
17531   push_cfun (DECL_STRUCT_FUNCTION (decl));
17532
17533   was_abstract = DECL_ABSTRACT (decl);
17534   set_decl_abstract_flags (decl, 1);
17535   dwarf2out_decl (decl);
17536   if (! was_abstract)
17537     set_decl_abstract_flags (decl, 0);
17538
17539   current_function_decl = save_fn;
17540   decl_loc_table = old_decl_loc_table;
17541   pop_cfun ();
17542 }
17543
17544 /* Helper function of premark_used_types() which gets called through
17545    htab_traverse.
17546
17547    Marks the DIE of a given type in *SLOT as perennial, so it never gets
17548    marked as unused by prune_unused_types.  */
17549
17550 static int
17551 premark_used_types_helper (void **slot, void *data ATTRIBUTE_UNUSED)
17552 {
17553   tree type;
17554   dw_die_ref die;
17555
17556   type = (tree) *slot;
17557   die = lookup_type_die (type);
17558   if (die != NULL)
17559     die->die_perennial_p = 1;
17560   return 1;
17561 }
17562
17563 /* Helper function of premark_types_used_by_global_vars which gets called
17564    through htab_traverse.
17565
17566    Marks the DIE of a given type in *SLOT as perennial, so it never gets
17567    marked as unused by prune_unused_types. The DIE of the type is marked
17568    only if the global variable using the type will actually be emitted.  */
17569
17570 static int
17571 premark_types_used_by_global_vars_helper (void **slot,
17572                                           void *data ATTRIBUTE_UNUSED)
17573 {
17574   struct types_used_by_vars_entry *entry;
17575   dw_die_ref die;
17576
17577   entry = (struct types_used_by_vars_entry *) *slot;
17578   gcc_assert (entry->type != NULL
17579               && entry->var_decl != NULL);
17580   die = lookup_type_die (entry->type);
17581   if (die)
17582     {
17583       /* Ask cgraph if the global variable really is to be emitted.
17584          If yes, then we'll keep the DIE of ENTRY->TYPE.  */
17585       struct varpool_node *node = varpool_node (entry->var_decl);
17586       if (node->needed)
17587         {
17588           die->die_perennial_p = 1;
17589           /* Keep the parent DIEs as well.  */
17590           while ((die = die->die_parent) && die->die_perennial_p == 0)
17591             die->die_perennial_p = 1;
17592         }
17593     }
17594   return 1;
17595 }
17596
17597 /* Mark all members of used_types_hash as perennial.  */
17598
17599 static void
17600 premark_used_types (void)
17601 {
17602   if (cfun && cfun->used_types_hash)
17603     htab_traverse (cfun->used_types_hash, premark_used_types_helper, NULL);
17604 }
17605
17606 /* Mark all members of types_used_by_vars_entry as perennial.  */
17607
17608 static void
17609 premark_types_used_by_global_vars (void)
17610 {
17611   if (types_used_by_vars_hash)
17612     htab_traverse (types_used_by_vars_hash,
17613                    premark_types_used_by_global_vars_helper, NULL);
17614 }
17615
17616 /* Generate a DIE to represent a declared function (either file-scope or
17617    block-local).  */
17618
17619 static void
17620 gen_subprogram_die (tree decl, dw_die_ref context_die)
17621 {
17622   char label_id[MAX_ARTIFICIAL_LABEL_BYTES];
17623   tree origin = decl_ultimate_origin (decl);
17624   dw_die_ref subr_die;
17625   tree fn_arg_types;
17626   tree outer_scope;
17627   dw_die_ref old_die = lookup_decl_die (decl);
17628   int declaration = (current_function_decl != decl
17629                      || class_or_namespace_scope_p (context_die));
17630
17631   premark_used_types ();
17632
17633   /* It is possible to have both DECL_ABSTRACT and DECLARATION be true if we
17634      started to generate the abstract instance of an inline, decided to output
17635      its containing class, and proceeded to emit the declaration of the inline
17636      from the member list for the class.  If so, DECLARATION takes priority;
17637      we'll get back to the abstract instance when done with the class.  */
17638
17639   /* The class-scope declaration DIE must be the primary DIE.  */
17640   if (origin && declaration && class_or_namespace_scope_p (context_die))
17641     {
17642       origin = NULL;
17643       gcc_assert (!old_die);
17644     }
17645
17646   /* Now that the C++ front end lazily declares artificial member fns, we
17647      might need to retrofit the declaration into its class.  */
17648   if (!declaration && !origin && !old_die
17649       && DECL_CONTEXT (decl) && TYPE_P (DECL_CONTEXT (decl))
17650       && !class_or_namespace_scope_p (context_die)
17651       && debug_info_level > DINFO_LEVEL_TERSE)
17652     old_die = force_decl_die (decl);
17653
17654   if (origin != NULL)
17655     {
17656       gcc_assert (!declaration || local_scope_p (context_die));
17657
17658       /* Fixup die_parent for the abstract instance of a nested
17659          inline function.  */
17660       if (old_die && old_die->die_parent == NULL)
17661         add_child_die (context_die, old_die);
17662
17663       subr_die = new_die (DW_TAG_subprogram, context_die, decl);
17664       add_abstract_origin_attribute (subr_die, origin);
17665     }
17666   else if (old_die)
17667     {
17668       expanded_location s = expand_location (DECL_SOURCE_LOCATION (decl));
17669       struct dwarf_file_data * file_index = lookup_filename (s.file);
17670
17671       if (!get_AT_flag (old_die, DW_AT_declaration)
17672           /* We can have a normal definition following an inline one in the
17673              case of redefinition of GNU C extern inlines.
17674              It seems reasonable to use AT_specification in this case.  */
17675           && !get_AT (old_die, DW_AT_inline))
17676         {
17677           /* Detect and ignore this case, where we are trying to output
17678              something we have already output.  */
17679           return;
17680         }
17681
17682       /* If the definition comes from the same place as the declaration,
17683          maybe use the old DIE.  We always want the DIE for this function
17684          that has the *_pc attributes to be under comp_unit_die so the
17685          debugger can find it.  We also need to do this for abstract
17686          instances of inlines, since the spec requires the out-of-line copy
17687          to have the same parent.  For local class methods, this doesn't
17688          apply; we just use the old DIE.  */
17689       if ((old_die->die_parent == comp_unit_die || context_die == NULL)
17690           && (DECL_ARTIFICIAL (decl)
17691               || (get_AT_file (old_die, DW_AT_decl_file) == file_index
17692                   && (get_AT_unsigned (old_die, DW_AT_decl_line)
17693                       == (unsigned) s.line))))
17694         {
17695           subr_die = old_die;
17696
17697           /* Clear out the declaration attribute and the formal parameters.
17698              Do not remove all children, because it is possible that this
17699              declaration die was forced using force_decl_die(). In such
17700              cases die that forced declaration die (e.g. TAG_imported_module)
17701              is one of the children that we do not want to remove.  */
17702           remove_AT (subr_die, DW_AT_declaration);
17703           remove_child_TAG (subr_die, DW_TAG_formal_parameter);
17704         }
17705       else
17706         {
17707           subr_die = new_die (DW_TAG_subprogram, context_die, decl);
17708           add_AT_specification (subr_die, old_die);
17709           if (get_AT_file (old_die, DW_AT_decl_file) != file_index)
17710             add_AT_file (subr_die, DW_AT_decl_file, file_index);
17711           if (get_AT_unsigned (old_die, DW_AT_decl_line) != (unsigned) s.line)
17712             add_AT_unsigned (subr_die, DW_AT_decl_line, s.line);
17713         }
17714     }
17715   else
17716     {
17717       subr_die = new_die (DW_TAG_subprogram, context_die, decl);
17718
17719       if (TREE_PUBLIC (decl))
17720         add_AT_flag (subr_die, DW_AT_external, 1);
17721
17722       add_name_and_src_coords_attributes (subr_die, decl);
17723       if (debug_info_level > DINFO_LEVEL_TERSE)
17724         {
17725           add_prototyped_attribute (subr_die, TREE_TYPE (decl));
17726           add_type_attribute (subr_die, TREE_TYPE (TREE_TYPE (decl)),
17727                               0, 0, context_die);
17728         }
17729
17730       add_pure_or_virtual_attribute (subr_die, decl);
17731       if (DECL_ARTIFICIAL (decl))
17732         add_AT_flag (subr_die, DW_AT_artificial, 1);
17733
17734       if (TREE_PROTECTED (decl))
17735         add_AT_unsigned (subr_die, DW_AT_accessibility, DW_ACCESS_protected);
17736       else if (TREE_PRIVATE (decl))
17737         add_AT_unsigned (subr_die, DW_AT_accessibility, DW_ACCESS_private);
17738     }
17739
17740   if (declaration)
17741     {
17742       if (!old_die || !get_AT (old_die, DW_AT_inline))
17743         {
17744           add_AT_flag (subr_die, DW_AT_declaration, 1);
17745
17746           /* If this is an explicit function declaration then generate
17747              a DW_AT_explicit attribute.  */
17748           if (lang_hooks.decls.function_decl_explicit_p (decl)
17749               && (dwarf_version >= 3 || !dwarf_strict))
17750             add_AT_flag (subr_die, DW_AT_explicit, 1);
17751
17752           /* The first time we see a member function, it is in the context of
17753              the class to which it belongs.  We make sure of this by emitting
17754              the class first.  The next time is the definition, which is
17755              handled above.  The two may come from the same source text.
17756
17757              Note that force_decl_die() forces function declaration die. It is
17758              later reused to represent definition.  */
17759           equate_decl_number_to_die (decl, subr_die);
17760         }
17761     }
17762   else if (DECL_ABSTRACT (decl))
17763     {
17764       if (DECL_DECLARED_INLINE_P (decl))
17765         {
17766           if (cgraph_function_possibly_inlined_p (decl))
17767             add_AT_unsigned (subr_die, DW_AT_inline, DW_INL_declared_inlined);
17768           else
17769             add_AT_unsigned (subr_die, DW_AT_inline, DW_INL_declared_not_inlined);
17770         }
17771       else
17772         {
17773           if (cgraph_function_possibly_inlined_p (decl))
17774             add_AT_unsigned (subr_die, DW_AT_inline, DW_INL_inlined);
17775           else
17776             add_AT_unsigned (subr_die, DW_AT_inline, DW_INL_not_inlined);
17777         }
17778
17779       if (DECL_DECLARED_INLINE_P (decl)
17780           && lookup_attribute ("artificial", DECL_ATTRIBUTES (decl)))
17781         add_AT_flag (subr_die, DW_AT_artificial, 1);
17782
17783       equate_decl_number_to_die (decl, subr_die);
17784     }
17785   else if (!DECL_EXTERNAL (decl))
17786     {
17787       HOST_WIDE_INT cfa_fb_offset;
17788
17789       if (!old_die || !get_AT (old_die, DW_AT_inline))
17790         equate_decl_number_to_die (decl, subr_die);
17791
17792       if (!flag_reorder_blocks_and_partition)
17793         {
17794           ASM_GENERATE_INTERNAL_LABEL (label_id, FUNC_BEGIN_LABEL,
17795                                        current_function_funcdef_no);
17796           add_AT_lbl_id (subr_die, DW_AT_low_pc, label_id);
17797           ASM_GENERATE_INTERNAL_LABEL (label_id, FUNC_END_LABEL,
17798                                        current_function_funcdef_no);
17799           add_AT_lbl_id (subr_die, DW_AT_high_pc, label_id);
17800
17801           add_pubname (decl, subr_die);
17802           add_arange (decl, subr_die);
17803         }
17804       else
17805         {  /* Do nothing for now; maybe need to duplicate die, one for
17806               hot section and one for cold section, then use the hot/cold
17807               section begin/end labels to generate the aranges...  */
17808           /*
17809             add_AT_lbl_id (subr_die, DW_AT_low_pc, hot_section_label);
17810             add_AT_lbl_id (subr_die, DW_AT_high_pc, hot_section_end_label);
17811             add_AT_lbl_id (subr_die, DW_AT_lo_user, unlikely_section_label);
17812             add_AT_lbl_id (subr_die, DW_AT_hi_user, cold_section_end_label);
17813
17814             add_pubname (decl, subr_die);
17815             add_arange (decl, subr_die);
17816             add_arange (decl, subr_die);
17817            */
17818         }
17819
17820 #ifdef MIPS_DEBUGGING_INFO
17821       /* Add a reference to the FDE for this routine.  */
17822       add_AT_fde_ref (subr_die, DW_AT_MIPS_fde, current_funcdef_fde);
17823 #endif
17824
17825       cfa_fb_offset = CFA_FRAME_BASE_OFFSET (decl);
17826
17827       /* We define the "frame base" as the function's CFA.  This is more
17828          convenient for several reasons: (1) It's stable across the prologue
17829          and epilogue, which makes it better than just a frame pointer,
17830          (2) With dwarf3, there exists a one-byte encoding that allows us
17831          to reference the .debug_frame data by proxy, but failing that,
17832          (3) We can at least reuse the code inspection and interpretation
17833          code that determines the CFA position at various points in the
17834          function.  */
17835       if (dwarf_version >= 3)
17836         {
17837           dw_loc_descr_ref op = new_loc_descr (DW_OP_call_frame_cfa, 0, 0);
17838           add_AT_loc (subr_die, DW_AT_frame_base, op);
17839         }
17840       else
17841         {
17842           dw_loc_list_ref list = convert_cfa_to_fb_loc_list (cfa_fb_offset);
17843           if (list->dw_loc_next)
17844             add_AT_loc_list (subr_die, DW_AT_frame_base, list);
17845           else
17846             add_AT_loc (subr_die, DW_AT_frame_base, list->expr);
17847         }
17848
17849       /* Compute a displacement from the "steady-state frame pointer" to
17850          the CFA.  The former is what all stack slots and argument slots
17851          will reference in the rtl; the later is what we've told the
17852          debugger about.  We'll need to adjust all frame_base references
17853          by this displacement.  */
17854       compute_frame_pointer_to_fb_displacement (cfa_fb_offset);
17855
17856       if (cfun->static_chain_decl)
17857         add_AT_location_description (subr_die, DW_AT_static_link,
17858                  loc_list_from_tree (cfun->static_chain_decl, 2));
17859     }
17860
17861   /* Generate child dies for template paramaters.  */
17862   if (debug_info_level > DINFO_LEVEL_TERSE)
17863     gen_generic_params_dies (decl);
17864
17865   /* Now output descriptions of the arguments for this function. This gets
17866      (unnecessarily?) complex because of the fact that the DECL_ARGUMENT list
17867      for a FUNCTION_DECL doesn't indicate cases where there was a trailing
17868      `...' at the end of the formal parameter list.  In order to find out if
17869      there was a trailing ellipsis or not, we must instead look at the type
17870      associated with the FUNCTION_DECL.  This will be a node of type
17871      FUNCTION_TYPE. If the chain of type nodes hanging off of this
17872      FUNCTION_TYPE node ends with a void_type_node then there should *not* be
17873      an ellipsis at the end.  */
17874
17875   /* In the case where we are describing a mere function declaration, all we
17876      need to do here (and all we *can* do here) is to describe the *types* of
17877      its formal parameters.  */
17878   if (debug_info_level <= DINFO_LEVEL_TERSE)
17879     ;
17880   else if (declaration)
17881     gen_formal_types_die (decl, subr_die);
17882   else
17883     {
17884       /* Generate DIEs to represent all known formal parameters.  */
17885       tree parm = DECL_ARGUMENTS (decl);
17886       tree generic_decl = lang_hooks.decls.get_generic_function_decl (decl);
17887       tree generic_decl_parm = generic_decl
17888                                 ? DECL_ARGUMENTS (generic_decl)
17889                                 : NULL;
17890
17891       /* Now we want to walk the list of parameters of the function and
17892          emit their relevant DIEs.
17893
17894          We consider the case of DECL being an instance of a generic function
17895          as well as it being a normal function.
17896
17897          If DECL is an instance of a generic function we walk the
17898          parameters of the generic function declaration _and_ the parameters of
17899          DECL itself. This is useful because we want to emit specific DIEs for
17900          function parameter packs and those are declared as part of the
17901          generic function declaration. In that particular case,
17902          the parameter pack yields a DW_TAG_GNU_formal_parameter_pack DIE.
17903          That DIE has children DIEs representing the set of arguments
17904          of the pack. Note that the set of pack arguments can be empty.
17905          In that case, the DW_TAG_GNU_formal_parameter_pack DIE will not have any
17906          children DIE.
17907
17908          Otherwise, we just consider the parameters of DECL.  */
17909       while (generic_decl_parm || parm)
17910         {
17911           if (generic_decl_parm
17912               && lang_hooks.function_parameter_pack_p (generic_decl_parm))
17913             gen_formal_parameter_pack_die (generic_decl_parm,
17914                                            parm, subr_die,
17915                                            &parm);
17916           else if (parm)
17917             {
17918               gen_decl_die (parm, NULL, subr_die);
17919               parm = TREE_CHAIN (parm);
17920             }
17921
17922           if (generic_decl_parm)
17923             generic_decl_parm = TREE_CHAIN (generic_decl_parm);
17924         }
17925
17926       /* Decide whether we need an unspecified_parameters DIE at the end.
17927          There are 2 more cases to do this for: 1) the ansi ... declaration -
17928          this is detectable when the end of the arg list is not a
17929          void_type_node 2) an unprototyped function declaration (not a
17930          definition).  This just means that we have no info about the
17931          parameters at all.  */
17932       fn_arg_types = TYPE_ARG_TYPES (TREE_TYPE (decl));
17933       if (fn_arg_types != NULL)
17934         {
17935           /* This is the prototyped case, check for....  */
17936           if (TREE_VALUE (tree_last (fn_arg_types)) != void_type_node)
17937             gen_unspecified_parameters_die (decl, subr_die);
17938         }
17939       else if (DECL_INITIAL (decl) == NULL_TREE)
17940         gen_unspecified_parameters_die (decl, subr_die);
17941     }
17942
17943   /* Output Dwarf info for all of the stuff within the body of the function
17944      (if it has one - it may be just a declaration).  */
17945   outer_scope = DECL_INITIAL (decl);
17946
17947   /* OUTER_SCOPE is a pointer to the outermost BLOCK node created to represent
17948      a function.  This BLOCK actually represents the outermost binding contour
17949      for the function, i.e. the contour in which the function's formal
17950      parameters and labels get declared. Curiously, it appears that the front
17951      end doesn't actually put the PARM_DECL nodes for the current function onto
17952      the BLOCK_VARS list for this outer scope, but are strung off of the
17953      DECL_ARGUMENTS list for the function instead.
17954
17955      The BLOCK_VARS list for the `outer_scope' does provide us with a list of
17956      the LABEL_DECL nodes for the function however, and we output DWARF info
17957      for those in decls_for_scope.  Just within the `outer_scope' there will be
17958      a BLOCK node representing the function's outermost pair of curly braces,
17959      and any blocks used for the base and member initializers of a C++
17960      constructor function.  */
17961   if (! declaration && TREE_CODE (outer_scope) != ERROR_MARK)
17962     {
17963       /* Emit a DW_TAG_variable DIE for a named return value.  */
17964       if (DECL_NAME (DECL_RESULT (decl)))
17965         gen_decl_die (DECL_RESULT (decl), NULL, subr_die);
17966
17967       current_function_has_inlines = 0;
17968       decls_for_scope (outer_scope, subr_die, 0);
17969
17970 #if 0 && defined (MIPS_DEBUGGING_INFO)
17971       if (current_function_has_inlines)
17972         {
17973           add_AT_flag (subr_die, DW_AT_MIPS_has_inlines, 1);
17974           if (! comp_unit_has_inlines)
17975             {
17976               add_AT_flag (comp_unit_die, DW_AT_MIPS_has_inlines, 1);
17977               comp_unit_has_inlines = 1;
17978             }
17979         }
17980 #endif
17981     }
17982   /* Add the calling convention attribute if requested.  */
17983   add_calling_convention_attribute (subr_die, decl);
17984
17985 }
17986
17987 /* Returns a hash value for X (which really is a die_struct).  */
17988
17989 static hashval_t
17990 common_block_die_table_hash (const void *x)
17991 {
17992   const_dw_die_ref d = (const_dw_die_ref) x;
17993   return (hashval_t) d->decl_id ^ htab_hash_pointer (d->die_parent);
17994 }
17995
17996 /* Return nonzero if decl_id and die_parent of die_struct X is the same
17997    as decl_id and die_parent of die_struct Y.  */
17998
17999 static int
18000 common_block_die_table_eq (const void *x, const void *y)
18001 {
18002   const_dw_die_ref d = (const_dw_die_ref) x;
18003   const_dw_die_ref e = (const_dw_die_ref) y;
18004   return d->decl_id == e->decl_id && d->die_parent == e->die_parent;
18005 }
18006
18007 /* Generate a DIE to represent a declared data object.
18008    Either DECL or ORIGIN must be non-null.  */
18009
18010 static void
18011 gen_variable_die (tree decl, tree origin, dw_die_ref context_die)
18012 {
18013   HOST_WIDE_INT off;
18014   tree com_decl;
18015   tree decl_or_origin = decl ? decl : origin;
18016   dw_die_ref var_die;
18017   dw_die_ref old_die = decl ? lookup_decl_die (decl) : NULL;
18018   dw_die_ref origin_die;
18019   int declaration = (DECL_EXTERNAL (decl_or_origin)
18020                      || class_or_namespace_scope_p (context_die));
18021
18022   if (!origin)
18023     origin = decl_ultimate_origin (decl);
18024
18025   com_decl = fortran_common (decl_or_origin, &off);
18026
18027   /* Symbol in common gets emitted as a child of the common block, in the form
18028      of a data member.  */
18029   if (com_decl)
18030     {
18031       dw_die_ref com_die;
18032       dw_loc_list_ref loc;
18033       die_node com_die_arg;
18034
18035       var_die = lookup_decl_die (decl_or_origin);
18036       if (var_die)
18037         {
18038           if (get_AT (var_die, DW_AT_location) == NULL)
18039             {
18040               loc = loc_list_from_tree (com_decl, off ? 1 : 2);
18041               if (loc)
18042                 {
18043                   if (off)
18044                     {
18045                       /* Optimize the common case.  */
18046                       if (single_element_loc_list_p (loc)
18047                           && loc->expr->dw_loc_opc == DW_OP_addr
18048                           && loc->expr->dw_loc_next == NULL
18049                           && GET_CODE (loc->expr->dw_loc_oprnd1.v.val_addr)
18050                              == SYMBOL_REF)
18051                         loc->expr->dw_loc_oprnd1.v.val_addr
18052                           = plus_constant (loc->expr->dw_loc_oprnd1.v.val_addr, off);
18053                         else
18054                           loc_list_plus_const (loc, off);
18055                     }
18056                   add_AT_location_description (var_die, DW_AT_location, loc);
18057                   remove_AT (var_die, DW_AT_declaration);
18058                 }
18059             }
18060           return;
18061         }
18062
18063       if (common_block_die_table == NULL)
18064         common_block_die_table
18065           = htab_create_ggc (10, common_block_die_table_hash,
18066                              common_block_die_table_eq, NULL);
18067
18068       com_die_arg.decl_id = DECL_UID (com_decl);
18069       com_die_arg.die_parent = context_die;
18070       com_die = (dw_die_ref) htab_find (common_block_die_table, &com_die_arg);
18071       loc = loc_list_from_tree (com_decl, 2);
18072       if (com_die == NULL)
18073         {
18074           const char *cnam
18075             = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (com_decl));
18076           void **slot;
18077
18078           com_die = new_die (DW_TAG_common_block, context_die, decl);
18079           add_name_and_src_coords_attributes (com_die, com_decl);
18080           if (loc)
18081             {
18082               add_AT_location_description (com_die, DW_AT_location, loc);
18083               /* Avoid sharing the same loc descriptor between
18084                  DW_TAG_common_block and DW_TAG_variable.  */
18085               loc = loc_list_from_tree (com_decl, 2);
18086             }
18087           else if (DECL_EXTERNAL (decl))
18088             add_AT_flag (com_die, DW_AT_declaration, 1);
18089           add_pubname_string (cnam, com_die); /* ??? needed? */
18090           com_die->decl_id = DECL_UID (com_decl);
18091           slot = htab_find_slot (common_block_die_table, com_die, INSERT);
18092           *slot = (void *) com_die;
18093         }
18094       else if (get_AT (com_die, DW_AT_location) == NULL && loc)
18095         {
18096           add_AT_location_description (com_die, DW_AT_location, loc);
18097           loc = loc_list_from_tree (com_decl, 2);
18098           remove_AT (com_die, DW_AT_declaration);
18099         }
18100       var_die = new_die (DW_TAG_variable, com_die, decl);
18101       add_name_and_src_coords_attributes (var_die, decl);
18102       add_type_attribute (var_die, TREE_TYPE (decl), TREE_READONLY (decl),
18103                           TREE_THIS_VOLATILE (decl), context_die);
18104       add_AT_flag (var_die, DW_AT_external, 1);
18105       if (loc)
18106         {
18107           if (off)
18108             {
18109               /* Optimize the common case.  */
18110               if (single_element_loc_list_p (loc)
18111                   && loc->expr->dw_loc_opc == DW_OP_addr
18112                   && loc->expr->dw_loc_next == NULL
18113                   && GET_CODE (loc->expr->dw_loc_oprnd1.v.val_addr) == SYMBOL_REF)
18114                 loc->expr->dw_loc_oprnd1.v.val_addr
18115                   = plus_constant (loc->expr->dw_loc_oprnd1.v.val_addr, off);
18116               else
18117                 loc_list_plus_const (loc, off);
18118             }
18119           add_AT_location_description (var_die, DW_AT_location, loc);
18120         }
18121       else if (DECL_EXTERNAL (decl))
18122         add_AT_flag (var_die, DW_AT_declaration, 1);
18123       equate_decl_number_to_die (decl, var_die);
18124       return;
18125     }
18126
18127   /* If the compiler emitted a definition for the DECL declaration
18128      and if we already emitted a DIE for it, don't emit a second
18129      DIE for it again.  */
18130   if (old_die
18131       && declaration)
18132     return;
18133
18134   /* For static data members, the declaration in the class is supposed
18135      to have DW_TAG_member tag; the specification should still be
18136      DW_TAG_variable referencing the DW_TAG_member DIE.  */
18137   if (declaration && class_scope_p (context_die))
18138     var_die = new_die (DW_TAG_member, context_die, decl);
18139   else
18140     var_die = new_die (DW_TAG_variable, context_die, decl);
18141
18142   origin_die = NULL;
18143   if (origin != NULL)
18144     origin_die = add_abstract_origin_attribute (var_die, origin);
18145
18146   /* Loop unrolling can create multiple blocks that refer to the same
18147      static variable, so we must test for the DW_AT_declaration flag.
18148
18149      ??? Loop unrolling/reorder_blocks should perhaps be rewritten to
18150      copy decls and set the DECL_ABSTRACT flag on them instead of
18151      sharing them.
18152
18153      ??? Duplicated blocks have been rewritten to use .debug_ranges.
18154
18155      ??? The declare_in_namespace support causes us to get two DIEs for one
18156      variable, both of which are declarations.  We want to avoid considering
18157      one to be a specification, so we must test that this DIE is not a
18158      declaration.  */
18159   else if (old_die && TREE_STATIC (decl) && ! declaration
18160            && get_AT_flag (old_die, DW_AT_declaration) == 1)
18161     {
18162       /* This is a definition of a C++ class level static.  */
18163       add_AT_specification (var_die, old_die);
18164       if (DECL_NAME (decl))
18165         {
18166           expanded_location s = expand_location (DECL_SOURCE_LOCATION (decl));
18167           struct dwarf_file_data * file_index = lookup_filename (s.file);
18168
18169           if (get_AT_file (old_die, DW_AT_decl_file) != file_index)
18170             add_AT_file (var_die, DW_AT_decl_file, file_index);
18171
18172           if (get_AT_unsigned (old_die, DW_AT_decl_line) != (unsigned) s.line)
18173             add_AT_unsigned (var_die, DW_AT_decl_line, s.line);
18174         }
18175     }
18176   else
18177     {
18178       tree type = TREE_TYPE (decl);
18179
18180       add_name_and_src_coords_attributes (var_die, decl);
18181       if (decl_by_reference_p (decl))
18182         add_type_attribute (var_die, TREE_TYPE (type), 0, 0, context_die);
18183       else
18184         add_type_attribute (var_die, type, TREE_READONLY (decl),
18185                             TREE_THIS_VOLATILE (decl), context_die);
18186
18187       if (TREE_PUBLIC (decl))
18188         add_AT_flag (var_die, DW_AT_external, 1);
18189
18190       if (DECL_ARTIFICIAL (decl))
18191         add_AT_flag (var_die, DW_AT_artificial, 1);
18192
18193       if (TREE_PROTECTED (decl))
18194         add_AT_unsigned (var_die, DW_AT_accessibility, DW_ACCESS_protected);
18195       else if (TREE_PRIVATE (decl))
18196         add_AT_unsigned (var_die, DW_AT_accessibility, DW_ACCESS_private);
18197     }
18198
18199   if (declaration)
18200     add_AT_flag (var_die, DW_AT_declaration, 1);
18201
18202   if (decl && (DECL_ABSTRACT (decl) || declaration))
18203     equate_decl_number_to_die (decl, var_die);
18204
18205   if (! declaration
18206       && (! DECL_ABSTRACT (decl_or_origin)
18207           /* Local static vars are shared between all clones/inlines,
18208              so emit DW_AT_location on the abstract DIE if DECL_RTL is
18209              already set.  */
18210           || (TREE_CODE (decl_or_origin) == VAR_DECL
18211               && TREE_STATIC (decl_or_origin)
18212               && DECL_RTL_SET_P (decl_or_origin)))
18213       /* When abstract origin already has DW_AT_location attribute, no need
18214          to add it again.  */
18215       && (origin_die == NULL || get_AT (origin_die, DW_AT_location) == NULL))
18216     {
18217       if (TREE_CODE (decl_or_origin) == VAR_DECL && TREE_STATIC (decl_or_origin)
18218           && !TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (decl_or_origin)))
18219         defer_location (decl_or_origin, var_die);
18220       else
18221         add_location_or_const_value_attribute (var_die,
18222                                                decl_or_origin,
18223                                                DW_AT_location);
18224       add_pubname (decl_or_origin, var_die);
18225     }
18226   else
18227     tree_add_const_value_attribute_for_decl (var_die, decl_or_origin);
18228 }
18229
18230 /* Generate a DIE to represent a named constant.  */
18231
18232 static void
18233 gen_const_die (tree decl, dw_die_ref context_die)
18234 {
18235   dw_die_ref const_die;
18236   tree type = TREE_TYPE (decl);
18237
18238   const_die = new_die (DW_TAG_constant, context_die, decl);
18239   add_name_and_src_coords_attributes (const_die, decl);
18240   add_type_attribute (const_die, type, 1, 0, context_die);
18241   if (TREE_PUBLIC (decl))
18242     add_AT_flag (const_die, DW_AT_external, 1);
18243   if (DECL_ARTIFICIAL (decl))
18244     add_AT_flag (const_die, DW_AT_artificial, 1);
18245   tree_add_const_value_attribute_for_decl (const_die, decl);
18246 }
18247
18248 /* Generate a DIE to represent a label identifier.  */
18249
18250 static void
18251 gen_label_die (tree decl, dw_die_ref context_die)
18252 {
18253   tree origin = decl_ultimate_origin (decl);
18254   dw_die_ref lbl_die = new_die (DW_TAG_label, context_die, decl);
18255   rtx insn;
18256   char label[MAX_ARTIFICIAL_LABEL_BYTES];
18257
18258   if (origin != NULL)
18259     add_abstract_origin_attribute (lbl_die, origin);
18260   else
18261     add_name_and_src_coords_attributes (lbl_die, decl);
18262
18263   if (DECL_ABSTRACT (decl))
18264     equate_decl_number_to_die (decl, lbl_die);
18265   else
18266     {
18267       insn = DECL_RTL_IF_SET (decl);
18268
18269       /* Deleted labels are programmer specified labels which have been
18270          eliminated because of various optimizations.  We still emit them
18271          here so that it is possible to put breakpoints on them.  */
18272       if (insn
18273           && (LABEL_P (insn)
18274               || ((NOTE_P (insn)
18275                    && NOTE_KIND (insn) == NOTE_INSN_DELETED_LABEL))))
18276         {
18277           /* When optimization is enabled (via -O) some parts of the compiler
18278              (e.g. jump.c and cse.c) may try to delete CODE_LABEL insns which
18279              represent source-level labels which were explicitly declared by
18280              the user.  This really shouldn't be happening though, so catch
18281              it if it ever does happen.  */
18282           gcc_assert (!INSN_DELETED_P (insn));
18283
18284           ASM_GENERATE_INTERNAL_LABEL (label, "L", CODE_LABEL_NUMBER (insn));
18285           add_AT_lbl_id (lbl_die, DW_AT_low_pc, label);
18286         }
18287     }
18288 }
18289
18290 /* A helper function for gen_inlined_subroutine_die.  Add source coordinate
18291    attributes to the DIE for a block STMT, to describe where the inlined
18292    function was called from.  This is similar to add_src_coords_attributes.  */
18293
18294 static inline void
18295 add_call_src_coords_attributes (tree stmt, dw_die_ref die)
18296 {
18297   expanded_location s = expand_location (BLOCK_SOURCE_LOCATION (stmt));
18298
18299   if (dwarf_version >= 3 || !dwarf_strict)
18300     {
18301       add_AT_file (die, DW_AT_call_file, lookup_filename (s.file));
18302       add_AT_unsigned (die, DW_AT_call_line, s.line);
18303     }
18304 }
18305
18306
18307 /* A helper function for gen_lexical_block_die and gen_inlined_subroutine_die.
18308    Add low_pc and high_pc attributes to the DIE for a block STMT.  */
18309
18310 static inline void
18311 add_high_low_attributes (tree stmt, dw_die_ref die)
18312 {
18313   char label[MAX_ARTIFICIAL_LABEL_BYTES];
18314
18315   if (BLOCK_FRAGMENT_CHAIN (stmt)
18316       && (dwarf_version >= 3 || !dwarf_strict))
18317     {
18318       tree chain;
18319
18320       if (inlined_function_outer_scope_p (stmt))
18321         {
18322           ASM_GENERATE_INTERNAL_LABEL (label, BLOCK_BEGIN_LABEL,
18323                                        BLOCK_NUMBER (stmt));
18324           add_AT_lbl_id (die, DW_AT_entry_pc, label);
18325         }
18326
18327       add_AT_range_list (die, DW_AT_ranges, add_ranges (stmt));
18328
18329       chain = BLOCK_FRAGMENT_CHAIN (stmt);
18330       do
18331         {
18332           add_ranges (chain);
18333           chain = BLOCK_FRAGMENT_CHAIN (chain);
18334         }
18335       while (chain);
18336       add_ranges (NULL);
18337     }
18338   else
18339     {
18340       ASM_GENERATE_INTERNAL_LABEL (label, BLOCK_BEGIN_LABEL,
18341                                    BLOCK_NUMBER (stmt));
18342       add_AT_lbl_id (die, DW_AT_low_pc, label);
18343       ASM_GENERATE_INTERNAL_LABEL (label, BLOCK_END_LABEL,
18344                                    BLOCK_NUMBER (stmt));
18345       add_AT_lbl_id (die, DW_AT_high_pc, label);
18346     }
18347 }
18348
18349 /* Generate a DIE for a lexical block.  */
18350
18351 static void
18352 gen_lexical_block_die (tree stmt, dw_die_ref context_die, int depth)
18353 {
18354   dw_die_ref stmt_die = new_die (DW_TAG_lexical_block, context_die, stmt);
18355
18356   if (! BLOCK_ABSTRACT (stmt) && TREE_ASM_WRITTEN (stmt))
18357     add_high_low_attributes (stmt, stmt_die);
18358
18359   decls_for_scope (stmt, stmt_die, depth);
18360 }
18361
18362 /* Generate a DIE for an inlined subprogram.  */
18363
18364 static void
18365 gen_inlined_subroutine_die (tree stmt, dw_die_ref context_die, int depth)
18366 {
18367   tree decl;
18368
18369   /* The instance of function that is effectively being inlined shall not
18370      be abstract.  */
18371   gcc_assert (! BLOCK_ABSTRACT (stmt));
18372
18373   decl = block_ultimate_origin (stmt);
18374
18375   /* Emit info for the abstract instance first, if we haven't yet.  We
18376      must emit this even if the block is abstract, otherwise when we
18377      emit the block below (or elsewhere), we may end up trying to emit
18378      a die whose origin die hasn't been emitted, and crashing.  */
18379   dwarf2out_abstract_function (decl);
18380
18381   if (! BLOCK_ABSTRACT (stmt))
18382     {
18383       dw_die_ref subr_die
18384         = new_die (DW_TAG_inlined_subroutine, context_die, stmt);
18385
18386       add_abstract_origin_attribute (subr_die, decl);
18387       if (TREE_ASM_WRITTEN (stmt))
18388         add_high_low_attributes (stmt, subr_die);
18389       add_call_src_coords_attributes (stmt, subr_die);
18390
18391       decls_for_scope (stmt, subr_die, depth);
18392       current_function_has_inlines = 1;
18393     }
18394 }
18395
18396 /* Generate a DIE for a field in a record, or structure.  */
18397
18398 static void
18399 gen_field_die (tree decl, dw_die_ref context_die)
18400 {
18401   dw_die_ref decl_die;
18402
18403   if (TREE_TYPE (decl) == error_mark_node)
18404     return;
18405
18406   decl_die = new_die (DW_TAG_member, context_die, decl);
18407   add_name_and_src_coords_attributes (decl_die, decl);
18408   add_type_attribute (decl_die, member_declared_type (decl),
18409                       TREE_READONLY (decl), TREE_THIS_VOLATILE (decl),
18410                       context_die);
18411
18412   if (DECL_BIT_FIELD_TYPE (decl))
18413     {
18414       add_byte_size_attribute (decl_die, decl);
18415       add_bit_size_attribute (decl_die, decl);
18416       add_bit_offset_attribute (decl_die, decl);
18417     }
18418
18419   if (TREE_CODE (DECL_FIELD_CONTEXT (decl)) != UNION_TYPE)
18420     add_data_member_location_attribute (decl_die, decl);
18421
18422   if (DECL_ARTIFICIAL (decl))
18423     add_AT_flag (decl_die, DW_AT_artificial, 1);
18424
18425   if (TREE_PROTECTED (decl))
18426     add_AT_unsigned (decl_die, DW_AT_accessibility, DW_ACCESS_protected);
18427   else if (TREE_PRIVATE (decl))
18428     add_AT_unsigned (decl_die, DW_AT_accessibility, DW_ACCESS_private);
18429
18430   /* Equate decl number to die, so that we can look up this decl later on.  */
18431   equate_decl_number_to_die (decl, decl_die);
18432 }
18433
18434 #if 0
18435 /* Don't generate either pointer_type DIEs or reference_type DIEs here.
18436    Use modified_type_die instead.
18437    We keep this code here just in case these types of DIEs may be needed to
18438    represent certain things in other languages (e.g. Pascal) someday.  */
18439
18440 static void
18441 gen_pointer_type_die (tree type, dw_die_ref context_die)
18442 {
18443   dw_die_ref ptr_die
18444     = new_die (DW_TAG_pointer_type, scope_die_for (type, context_die), type);
18445
18446   equate_type_number_to_die (type, ptr_die);
18447   add_type_attribute (ptr_die, TREE_TYPE (type), 0, 0, context_die);
18448   add_AT_unsigned (mod_type_die, DW_AT_byte_size, PTR_SIZE);
18449 }
18450
18451 /* Don't generate either pointer_type DIEs or reference_type DIEs here.
18452    Use modified_type_die instead.
18453    We keep this code here just in case these types of DIEs may be needed to
18454    represent certain things in other languages (e.g. Pascal) someday.  */
18455
18456 static void
18457 gen_reference_type_die (tree type, dw_die_ref context_die)
18458 {
18459   dw_die_ref ref_die
18460     = new_die (DW_TAG_reference_type, scope_die_for (type, context_die), type);
18461
18462   equate_type_number_to_die (type, ref_die);
18463   add_type_attribute (ref_die, TREE_TYPE (type), 0, 0, context_die);
18464   add_AT_unsigned (mod_type_die, DW_AT_byte_size, PTR_SIZE);
18465 }
18466 #endif
18467
18468 /* Generate a DIE for a pointer to a member type.  */
18469
18470 static void
18471 gen_ptr_to_mbr_type_die (tree type, dw_die_ref context_die)
18472 {
18473   dw_die_ref ptr_die
18474     = new_die (DW_TAG_ptr_to_member_type,
18475                scope_die_for (type, context_die), type);
18476
18477   equate_type_number_to_die (type, ptr_die);
18478   add_AT_die_ref (ptr_die, DW_AT_containing_type,
18479                   lookup_type_die (TYPE_OFFSET_BASETYPE (type)));
18480   add_type_attribute (ptr_die, TREE_TYPE (type), 0, 0, context_die);
18481 }
18482
18483 /* Generate the DIE for the compilation unit.  */
18484
18485 static dw_die_ref
18486 gen_compile_unit_die (const char *filename)
18487 {
18488   dw_die_ref die;
18489   char producer[250];
18490   const char *language_string = lang_hooks.name;
18491   int language;
18492
18493   die = new_die (DW_TAG_compile_unit, NULL, NULL);
18494
18495   if (filename)
18496     {
18497       add_name_attribute (die, filename);
18498       /* Don't add cwd for <built-in>.  */
18499       if (!IS_ABSOLUTE_PATH (filename) && filename[0] != '<')
18500         add_comp_dir_attribute (die);
18501     }
18502
18503   sprintf (producer, "%s %s", language_string, version_string);
18504
18505 #ifdef MIPS_DEBUGGING_INFO
18506   /* The MIPS/SGI compilers place the 'cc' command line options in the producer
18507      string.  The SGI debugger looks for -g, -g1, -g2, or -g3; if they do
18508      not appear in the producer string, the debugger reaches the conclusion
18509      that the object file is stripped and has no debugging information.
18510      To get the MIPS/SGI debugger to believe that there is debugging
18511      information in the object file, we add a -g to the producer string.  */
18512   if (debug_info_level > DINFO_LEVEL_TERSE)
18513     strcat (producer, " -g");
18514 #endif
18515
18516   add_AT_string (die, DW_AT_producer, producer);
18517
18518   language = DW_LANG_C89;
18519   if (strcmp (language_string, "GNU C++") == 0)
18520     language = DW_LANG_C_plus_plus;
18521   else if (strcmp (language_string, "GNU F77") == 0)
18522     language = DW_LANG_Fortran77;
18523   else if (strcmp (language_string, "GNU Pascal") == 0)
18524     language = DW_LANG_Pascal83;
18525   else if (dwarf_version >= 3 || !dwarf_strict)
18526     {
18527       if (strcmp (language_string, "GNU Ada") == 0)
18528         language = DW_LANG_Ada95;
18529       else if (strcmp (language_string, "GNU Fortran") == 0)
18530         language = DW_LANG_Fortran95;
18531       else if (strcmp (language_string, "GNU Java") == 0)
18532         language = DW_LANG_Java;
18533       else if (strcmp (language_string, "GNU Objective-C") == 0)
18534         language = DW_LANG_ObjC;
18535       else if (strcmp (language_string, "GNU Objective-C++") == 0)
18536         language = DW_LANG_ObjC_plus_plus;
18537     }
18538
18539   add_AT_unsigned (die, DW_AT_language, language);
18540   return die;
18541 }
18542
18543 /* Generate the DIE for a base class.  */
18544
18545 static void
18546 gen_inheritance_die (tree binfo, tree access, dw_die_ref context_die)
18547 {
18548   dw_die_ref die = new_die (DW_TAG_inheritance, context_die, binfo);
18549
18550   add_type_attribute (die, BINFO_TYPE (binfo), 0, 0, context_die);
18551   add_data_member_location_attribute (die, binfo);
18552
18553   if (BINFO_VIRTUAL_P (binfo))
18554     add_AT_unsigned (die, DW_AT_virtuality, DW_VIRTUALITY_virtual);
18555
18556   if (access == access_public_node)
18557     add_AT_unsigned (die, DW_AT_accessibility, DW_ACCESS_public);
18558   else if (access == access_protected_node)
18559     add_AT_unsigned (die, DW_AT_accessibility, DW_ACCESS_protected);
18560 }
18561
18562 /* Generate a DIE for a class member.  */
18563
18564 static void
18565 gen_member_die (tree type, dw_die_ref context_die)
18566 {
18567   tree member;
18568   tree binfo = TYPE_BINFO (type);
18569   dw_die_ref child;
18570
18571   /* If this is not an incomplete type, output descriptions of each of its
18572      members. Note that as we output the DIEs necessary to represent the
18573      members of this record or union type, we will also be trying to output
18574      DIEs to represent the *types* of those members. However the `type'
18575      function (above) will specifically avoid generating type DIEs for member
18576      types *within* the list of member DIEs for this (containing) type except
18577      for those types (of members) which are explicitly marked as also being
18578      members of this (containing) type themselves.  The g++ front- end can
18579      force any given type to be treated as a member of some other (containing)
18580      type by setting the TYPE_CONTEXT of the given (member) type to point to
18581      the TREE node representing the appropriate (containing) type.  */
18582
18583   /* First output info about the base classes.  */
18584   if (binfo)
18585     {
18586       VEC(tree,gc) *accesses = BINFO_BASE_ACCESSES (binfo);
18587       int i;
18588       tree base;
18589
18590       for (i = 0; BINFO_BASE_ITERATE (binfo, i, base); i++)
18591         gen_inheritance_die (base,
18592                              (accesses ? VEC_index (tree, accesses, i)
18593                               : access_public_node), context_die);
18594     }
18595
18596   /* Now output info about the data members and type members.  */
18597   for (member = TYPE_FIELDS (type); member; member = TREE_CHAIN (member))
18598     {
18599       /* If we thought we were generating minimal debug info for TYPE
18600          and then changed our minds, some of the member declarations
18601          may have already been defined.  Don't define them again, but
18602          do put them in the right order.  */
18603
18604       child = lookup_decl_die (member);
18605       if (child)
18606         splice_child_die (context_die, child);
18607       else
18608         gen_decl_die (member, NULL, context_die);
18609     }
18610
18611   /* Now output info about the function members (if any).  */
18612   for (member = TYPE_METHODS (type); member; member = TREE_CHAIN (member))
18613     {
18614       /* Don't include clones in the member list.  */
18615       if (DECL_ABSTRACT_ORIGIN (member))
18616         continue;
18617
18618       child = lookup_decl_die (member);
18619       if (child)
18620         splice_child_die (context_die, child);
18621       else
18622         gen_decl_die (member, NULL, context_die);
18623     }
18624 }
18625
18626 /* Generate a DIE for a structure or union type.  If TYPE_DECL_SUPPRESS_DEBUG
18627    is set, we pretend that the type was never defined, so we only get the
18628    member DIEs needed by later specification DIEs.  */
18629
18630 static void
18631 gen_struct_or_union_type_die (tree type, dw_die_ref context_die,
18632                                 enum debug_info_usage usage)
18633 {
18634   dw_die_ref type_die = lookup_type_die (type);
18635   dw_die_ref scope_die = 0;
18636   int nested = 0;
18637   int complete = (TYPE_SIZE (type)
18638                   && (! TYPE_STUB_DECL (type)
18639                       || ! TYPE_DECL_SUPPRESS_DEBUG (TYPE_STUB_DECL (type))));
18640   int ns_decl = (context_die && context_die->die_tag == DW_TAG_namespace);
18641   complete = complete && should_emit_struct_debug (type, usage);
18642
18643   if (type_die && ! complete)
18644     return;
18645
18646   if (TYPE_CONTEXT (type) != NULL_TREE
18647       && (AGGREGATE_TYPE_P (TYPE_CONTEXT (type))
18648           || TREE_CODE (TYPE_CONTEXT (type)) == NAMESPACE_DECL))
18649     nested = 1;
18650
18651   scope_die = scope_die_for (type, context_die);
18652
18653   if (! type_die || (nested && scope_die == comp_unit_die))
18654     /* First occurrence of type or toplevel definition of nested class.  */
18655     {
18656       dw_die_ref old_die = type_die;
18657
18658       type_die = new_die (TREE_CODE (type) == RECORD_TYPE
18659                           ? record_type_tag (type) : DW_TAG_union_type,
18660                           scope_die, type);
18661       equate_type_number_to_die (type, type_die);
18662       if (old_die)
18663         add_AT_specification (type_die, old_die);
18664       else
18665         add_name_attribute (type_die, type_tag (type));
18666     }
18667   else
18668     remove_AT (type_die, DW_AT_declaration);
18669
18670   /* Generate child dies for template paramaters.  */
18671   if (debug_info_level > DINFO_LEVEL_TERSE
18672       && COMPLETE_TYPE_P (type))
18673     gen_generic_params_dies (type);
18674
18675   /* If this type has been completed, then give it a byte_size attribute and
18676      then give a list of members.  */
18677   if (complete && !ns_decl)
18678     {
18679       /* Prevent infinite recursion in cases where the type of some member of
18680          this type is expressed in terms of this type itself.  */
18681       TREE_ASM_WRITTEN (type) = 1;
18682       add_byte_size_attribute (type_die, type);
18683       if (TYPE_STUB_DECL (type) != NULL_TREE)
18684         add_src_coords_attributes (type_die, TYPE_STUB_DECL (type));
18685
18686       /* If the first reference to this type was as the return type of an
18687          inline function, then it may not have a parent.  Fix this now.  */
18688       if (type_die->die_parent == NULL)
18689         add_child_die (scope_die, type_die);
18690
18691       push_decl_scope (type);
18692       gen_member_die (type, type_die);
18693       pop_decl_scope ();
18694
18695       /* GNU extension: Record what type our vtable lives in.  */
18696       if (TYPE_VFIELD (type))
18697         {
18698           tree vtype = DECL_FCONTEXT (TYPE_VFIELD (type));
18699
18700           gen_type_die (vtype, context_die);
18701           add_AT_die_ref (type_die, DW_AT_containing_type,
18702                           lookup_type_die (vtype));
18703         }
18704     }
18705   else
18706     {
18707       add_AT_flag (type_die, DW_AT_declaration, 1);
18708
18709       /* We don't need to do this for function-local types.  */
18710       if (TYPE_STUB_DECL (type)
18711           && ! decl_function_context (TYPE_STUB_DECL (type)))
18712         VEC_safe_push (tree, gc, incomplete_types, type);
18713     }
18714
18715   if (get_AT (type_die, DW_AT_name))
18716     add_pubtype (type, type_die);
18717 }
18718
18719 /* Generate a DIE for a subroutine _type_.  */
18720
18721 static void
18722 gen_subroutine_type_die (tree type, dw_die_ref context_die)
18723 {
18724   tree return_type = TREE_TYPE (type);
18725   dw_die_ref subr_die
18726     = new_die (DW_TAG_subroutine_type,
18727                scope_die_for (type, context_die), type);
18728
18729   equate_type_number_to_die (type, subr_die);
18730   add_prototyped_attribute (subr_die, type);
18731   add_type_attribute (subr_die, return_type, 0, 0, context_die);
18732   gen_formal_types_die (type, subr_die);
18733
18734   if (get_AT (subr_die, DW_AT_name))
18735     add_pubtype (type, subr_die);
18736 }
18737
18738 /* Generate a DIE for a type definition.  */
18739
18740 static void
18741 gen_typedef_die (tree decl, dw_die_ref context_die)
18742 {
18743   dw_die_ref type_die;
18744   tree origin;
18745
18746   if (TREE_ASM_WRITTEN (decl))
18747     return;
18748
18749   TREE_ASM_WRITTEN (decl) = 1;
18750   type_die = new_die (DW_TAG_typedef, context_die, decl);
18751   origin = decl_ultimate_origin (decl);
18752   if (origin != NULL)
18753     add_abstract_origin_attribute (type_die, origin);
18754   else
18755     {
18756       tree type;
18757
18758       add_name_and_src_coords_attributes (type_die, decl);
18759       if (DECL_ORIGINAL_TYPE (decl))
18760         {
18761           type = DECL_ORIGINAL_TYPE (decl);
18762
18763           gcc_assert (type != TREE_TYPE (decl));
18764           equate_type_number_to_die (TREE_TYPE (decl), type_die);
18765         }
18766       else
18767         type = TREE_TYPE (decl);
18768
18769       add_type_attribute (type_die, type, TREE_READONLY (decl),
18770                           TREE_THIS_VOLATILE (decl), context_die);
18771     }
18772
18773   if (DECL_ABSTRACT (decl))
18774     equate_decl_number_to_die (decl, type_die);
18775
18776   if (get_AT (type_die, DW_AT_name))
18777     add_pubtype (decl, type_die);
18778 }
18779
18780 /* Generate a type description DIE.  */
18781
18782 static void
18783 gen_type_die_with_usage (tree type, dw_die_ref context_die,
18784                                 enum debug_info_usage usage)
18785 {
18786   int need_pop;
18787   struct array_descr_info info;
18788
18789   if (type == NULL_TREE || type == error_mark_node)
18790     return;
18791
18792   /* If TYPE is a typedef type variant, let's generate debug info
18793      for the parent typedef which TYPE is a type of.  */
18794   if (TYPE_NAME (type) && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
18795       && DECL_ORIGINAL_TYPE (TYPE_NAME (type)))
18796     {
18797       if (TREE_ASM_WRITTEN (type))
18798         return;
18799
18800       /* Prevent broken recursion; we can't hand off to the same type.  */
18801       gcc_assert (DECL_ORIGINAL_TYPE (TYPE_NAME (type)) != type);
18802
18803       /* Use the DIE of the containing namespace as the parent DIE of
18804          the type description DIE we want to generate.  */
18805       if (DECL_CONTEXT (TYPE_NAME (type))
18806           && TREE_CODE (DECL_CONTEXT (TYPE_NAME (type))) == NAMESPACE_DECL)
18807         context_die = get_context_die (DECL_CONTEXT (TYPE_NAME (type)));
18808
18809       TREE_ASM_WRITTEN (type) = 1;
18810       gen_decl_die (TYPE_NAME (type), NULL, context_die);
18811       return;
18812     }
18813
18814   /* If this is an array type with hidden descriptor, handle it first.  */
18815   if (!TREE_ASM_WRITTEN (type)
18816       && lang_hooks.types.get_array_descr_info
18817       && lang_hooks.types.get_array_descr_info (type, &info)
18818       && (dwarf_version >= 3 || !dwarf_strict))
18819     {
18820       gen_descr_array_type_die (type, &info, context_die);
18821       TREE_ASM_WRITTEN (type) = 1;
18822       return;
18823     }
18824
18825   /* We are going to output a DIE to represent the unqualified version
18826      of this type (i.e. without any const or volatile qualifiers) so
18827      get the main variant (i.e. the unqualified version) of this type
18828      now.  (Vectors are special because the debugging info is in the
18829      cloned type itself).  */
18830   if (TREE_CODE (type) != VECTOR_TYPE)
18831     type = type_main_variant (type);
18832
18833   if (TREE_ASM_WRITTEN (type))
18834     return;
18835
18836   switch (TREE_CODE (type))
18837     {
18838     case ERROR_MARK:
18839       break;
18840
18841     case POINTER_TYPE:
18842     case REFERENCE_TYPE:
18843       /* We must set TREE_ASM_WRITTEN in case this is a recursive type.  This
18844          ensures that the gen_type_die recursion will terminate even if the
18845          type is recursive.  Recursive types are possible in Ada.  */
18846       /* ??? We could perhaps do this for all types before the switch
18847          statement.  */
18848       TREE_ASM_WRITTEN (type) = 1;
18849
18850       /* For these types, all that is required is that we output a DIE (or a
18851          set of DIEs) to represent the "basis" type.  */
18852       gen_type_die_with_usage (TREE_TYPE (type), context_die,
18853                                 DINFO_USAGE_IND_USE);
18854       break;
18855
18856     case OFFSET_TYPE:
18857       /* This code is used for C++ pointer-to-data-member types.
18858          Output a description of the relevant class type.  */
18859       gen_type_die_with_usage (TYPE_OFFSET_BASETYPE (type), context_die,
18860                                         DINFO_USAGE_IND_USE);
18861
18862       /* Output a description of the type of the object pointed to.  */
18863       gen_type_die_with_usage (TREE_TYPE (type), context_die,
18864                                         DINFO_USAGE_IND_USE);
18865
18866       /* Now output a DIE to represent this pointer-to-data-member type
18867          itself.  */
18868       gen_ptr_to_mbr_type_die (type, context_die);
18869       break;
18870
18871     case FUNCTION_TYPE:
18872       /* Force out return type (in case it wasn't forced out already).  */
18873       gen_type_die_with_usage (TREE_TYPE (type), context_die,
18874                                         DINFO_USAGE_DIR_USE);
18875       gen_subroutine_type_die (type, context_die);
18876       break;
18877
18878     case METHOD_TYPE:
18879       /* Force out return type (in case it wasn't forced out already).  */
18880       gen_type_die_with_usage (TREE_TYPE (type), context_die,
18881                                         DINFO_USAGE_DIR_USE);
18882       gen_subroutine_type_die (type, context_die);
18883       break;
18884
18885     case ARRAY_TYPE:
18886       gen_array_type_die (type, context_die);
18887       break;
18888
18889     case VECTOR_TYPE:
18890       gen_array_type_die (type, context_die);
18891       break;
18892
18893     case ENUMERAL_TYPE:
18894     case RECORD_TYPE:
18895     case UNION_TYPE:
18896     case QUAL_UNION_TYPE:
18897       /* If this is a nested type whose containing class hasn't been written
18898          out yet, writing it out will cover this one, too.  This does not apply
18899          to instantiations of member class templates; they need to be added to
18900          the containing class as they are generated.  FIXME: This hurts the
18901          idea of combining type decls from multiple TUs, since we can't predict
18902          what set of template instantiations we'll get.  */
18903       if (TYPE_CONTEXT (type)
18904           && AGGREGATE_TYPE_P (TYPE_CONTEXT (type))
18905           && ! TREE_ASM_WRITTEN (TYPE_CONTEXT (type)))
18906         {
18907           gen_type_die_with_usage (TYPE_CONTEXT (type), context_die, usage);
18908
18909           if (TREE_ASM_WRITTEN (type))
18910             return;
18911
18912           /* If that failed, attach ourselves to the stub.  */
18913           push_decl_scope (TYPE_CONTEXT (type));
18914           context_die = lookup_type_die (TYPE_CONTEXT (type));
18915           need_pop = 1;
18916         }
18917       else if (TYPE_CONTEXT (type) != NULL_TREE
18918                && (TREE_CODE (TYPE_CONTEXT (type)) == FUNCTION_DECL))
18919         {
18920           /* If this type is local to a function that hasn't been written
18921              out yet, use a NULL context for now; it will be fixed up in
18922              decls_for_scope.  */
18923           context_die = lookup_decl_die (TYPE_CONTEXT (type));
18924           need_pop = 0;
18925         }
18926       else
18927         {
18928           context_die = declare_in_namespace (type, context_die);
18929           need_pop = 0;
18930         }
18931
18932       if (TREE_CODE (type) == ENUMERAL_TYPE)
18933         {
18934           /* This might have been written out by the call to
18935              declare_in_namespace.  */
18936           if (!TREE_ASM_WRITTEN (type))
18937             gen_enumeration_type_die (type, context_die);
18938         }
18939       else
18940         gen_struct_or_union_type_die (type, context_die, usage);
18941
18942       if (need_pop)
18943         pop_decl_scope ();
18944
18945       /* Don't set TREE_ASM_WRITTEN on an incomplete struct; we want to fix
18946          it up if it is ever completed.  gen_*_type_die will set it for us
18947          when appropriate.  */
18948       return;
18949
18950     case VOID_TYPE:
18951     case INTEGER_TYPE:
18952     case REAL_TYPE:
18953     case FIXED_POINT_TYPE:
18954     case COMPLEX_TYPE:
18955     case BOOLEAN_TYPE:
18956       /* No DIEs needed for fundamental types.  */
18957       break;
18958
18959     case LANG_TYPE:
18960       /* No Dwarf representation currently defined.  */
18961       break;
18962
18963     default:
18964       gcc_unreachable ();
18965     }
18966
18967   TREE_ASM_WRITTEN (type) = 1;
18968 }
18969
18970 static void
18971 gen_type_die (tree type, dw_die_ref context_die)
18972 {
18973   gen_type_die_with_usage (type, context_die, DINFO_USAGE_DIR_USE);
18974 }
18975
18976 /* Generate a DW_TAG_lexical_block DIE followed by DIEs to represent all of the
18977    things which are local to the given block.  */
18978
18979 static void
18980 gen_block_die (tree stmt, dw_die_ref context_die, int depth)
18981 {
18982   int must_output_die = 0;
18983   bool inlined_func;
18984
18985   /* Ignore blocks that are NULL.  */
18986   if (stmt == NULL_TREE)
18987     return;
18988
18989   inlined_func = inlined_function_outer_scope_p (stmt);
18990
18991   /* If the block is one fragment of a non-contiguous block, do not
18992      process the variables, since they will have been done by the
18993      origin block.  Do process subblocks.  */
18994   if (BLOCK_FRAGMENT_ORIGIN (stmt))
18995     {
18996       tree sub;
18997
18998       for (sub = BLOCK_SUBBLOCKS (stmt); sub; sub = BLOCK_CHAIN (sub))
18999         gen_block_die (sub, context_die, depth + 1);
19000
19001       return;
19002     }
19003
19004   /* Determine if we need to output any Dwarf DIEs at all to represent this
19005      block.  */
19006   if (inlined_func)
19007     /* The outer scopes for inlinings *must* always be represented.  We
19008        generate DW_TAG_inlined_subroutine DIEs for them.  (See below.) */
19009     must_output_die = 1;
19010   else
19011     {
19012       /* Determine if this block directly contains any "significant"
19013          local declarations which we will need to output DIEs for.  */
19014       if (debug_info_level > DINFO_LEVEL_TERSE)
19015         /* We are not in terse mode so *any* local declaration counts
19016            as being a "significant" one.  */
19017         must_output_die = ((BLOCK_VARS (stmt) != NULL
19018                             || BLOCK_NUM_NONLOCALIZED_VARS (stmt))
19019                            && (TREE_USED (stmt)
19020                                || TREE_ASM_WRITTEN (stmt)
19021                                || BLOCK_ABSTRACT (stmt)));
19022       else if ((TREE_USED (stmt)
19023                 || TREE_ASM_WRITTEN (stmt)
19024                 || BLOCK_ABSTRACT (stmt))
19025                && !dwarf2out_ignore_block (stmt))
19026         must_output_die = 1;
19027     }
19028
19029   /* It would be a waste of space to generate a Dwarf DW_TAG_lexical_block
19030      DIE for any block which contains no significant local declarations at
19031      all.  Rather, in such cases we just call `decls_for_scope' so that any
19032      needed Dwarf info for any sub-blocks will get properly generated. Note
19033      that in terse mode, our definition of what constitutes a "significant"
19034      local declaration gets restricted to include only inlined function
19035      instances and local (nested) function definitions.  */
19036   if (must_output_die)
19037     {
19038       if (inlined_func)
19039         {
19040           /* If STMT block is abstract, that means we have been called
19041              indirectly from dwarf2out_abstract_function.
19042              That function rightfully marks the descendent blocks (of
19043              the abstract function it is dealing with) as being abstract,
19044              precisely to prevent us from emitting any
19045              DW_TAG_inlined_subroutine DIE as a descendent
19046              of an abstract function instance. So in that case, we should
19047              not call gen_inlined_subroutine_die.
19048
19049              Later though, when cgraph asks dwarf2out to emit info
19050              for the concrete instance of the function decl into which
19051              the concrete instance of STMT got inlined, the later will lead
19052              to the generation of a DW_TAG_inlined_subroutine DIE.  */
19053           if (! BLOCK_ABSTRACT (stmt))
19054             gen_inlined_subroutine_die (stmt, context_die, depth);
19055         }
19056       else
19057         gen_lexical_block_die (stmt, context_die, depth);
19058     }
19059   else
19060     decls_for_scope (stmt, context_die, depth);
19061 }
19062
19063 /* Process variable DECL (or variable with origin ORIGIN) within
19064    block STMT and add it to CONTEXT_DIE.  */
19065 static void
19066 process_scope_var (tree stmt, tree decl, tree origin, dw_die_ref context_die)
19067 {
19068   dw_die_ref die;
19069   tree decl_or_origin = decl ? decl : origin;
19070   tree ultimate_origin = origin ? decl_ultimate_origin (origin) : NULL;
19071
19072   if (ultimate_origin)
19073     origin = ultimate_origin;
19074
19075   if (TREE_CODE (decl_or_origin) == FUNCTION_DECL)
19076     die = lookup_decl_die (decl_or_origin);
19077   else if (TREE_CODE (decl_or_origin) == TYPE_DECL
19078            && TYPE_DECL_IS_STUB (decl_or_origin))
19079     die = lookup_type_die (TREE_TYPE (decl_or_origin));
19080   else
19081     die = NULL;
19082
19083   if (die != NULL && die->die_parent == NULL)
19084     add_child_die (context_die, die);
19085   else if (TREE_CODE (decl_or_origin) == IMPORTED_DECL)
19086     dwarf2out_imported_module_or_decl_1 (decl_or_origin, DECL_NAME (decl_or_origin),
19087                                          stmt, context_die);
19088   else
19089     gen_decl_die (decl, origin, context_die);
19090 }
19091
19092 /* Generate all of the decls declared within a given scope and (recursively)
19093    all of its sub-blocks.  */
19094
19095 static void
19096 decls_for_scope (tree stmt, dw_die_ref context_die, int depth)
19097 {
19098   tree decl;
19099   unsigned int i;
19100   tree subblocks;
19101
19102   /* Ignore NULL blocks.  */
19103   if (stmt == NULL_TREE)
19104     return;
19105
19106   /* Output the DIEs to represent all of the data objects and typedefs
19107      declared directly within this block but not within any nested
19108      sub-blocks.  Also, nested function and tag DIEs have been
19109      generated with a parent of NULL; fix that up now.  */
19110   for (decl = BLOCK_VARS (stmt); decl != NULL; decl = TREE_CHAIN (decl))
19111     process_scope_var (stmt, decl, NULL_TREE, context_die);
19112   for (i = 0; i < BLOCK_NUM_NONLOCALIZED_VARS (stmt); i++)
19113     process_scope_var (stmt, NULL, BLOCK_NONLOCALIZED_VAR (stmt, i),
19114                        context_die);
19115
19116   /* If we're at -g1, we're not interested in subblocks.  */
19117   if (debug_info_level <= DINFO_LEVEL_TERSE)
19118     return;
19119
19120   /* Output the DIEs to represent all sub-blocks (and the items declared
19121      therein) of this block.  */
19122   for (subblocks = BLOCK_SUBBLOCKS (stmt);
19123        subblocks != NULL;
19124        subblocks = BLOCK_CHAIN (subblocks))
19125     gen_block_die (subblocks, context_die, depth + 1);
19126 }
19127
19128 /* Is this a typedef we can avoid emitting?  */
19129
19130 static inline int
19131 is_redundant_typedef (const_tree decl)
19132 {
19133   if (TYPE_DECL_IS_STUB (decl))
19134     return 1;
19135
19136   if (DECL_ARTIFICIAL (decl)
19137       && DECL_CONTEXT (decl)
19138       && is_tagged_type (DECL_CONTEXT (decl))
19139       && TREE_CODE (TYPE_NAME (DECL_CONTEXT (decl))) == TYPE_DECL
19140       && DECL_NAME (decl) == DECL_NAME (TYPE_NAME (DECL_CONTEXT (decl))))
19141     /* Also ignore the artificial member typedef for the class name.  */
19142     return 1;
19143
19144   return 0;
19145 }
19146
19147 /* Returns the DIE for a context.  */
19148
19149 static inline dw_die_ref
19150 get_context_die (tree context)
19151 {
19152   if (context)
19153     {
19154       /* Find die that represents this context.  */
19155       if (TYPE_P (context))
19156         return force_type_die (TYPE_MAIN_VARIANT (context));
19157       else
19158         return force_decl_die (context);
19159     }
19160   return comp_unit_die;
19161 }
19162
19163 /* Returns the DIE for decl.  A DIE will always be returned.  */
19164
19165 static dw_die_ref
19166 force_decl_die (tree decl)
19167 {
19168   dw_die_ref decl_die;
19169   unsigned saved_external_flag;
19170   tree save_fn = NULL_TREE;
19171   decl_die = lookup_decl_die (decl);
19172   if (!decl_die)
19173     {
19174       dw_die_ref context_die = get_context_die (DECL_CONTEXT (decl));
19175
19176       decl_die = lookup_decl_die (decl);
19177       if (decl_die)
19178         return decl_die;
19179
19180       switch (TREE_CODE (decl))
19181         {
19182         case FUNCTION_DECL:
19183           /* Clear current_function_decl, so that gen_subprogram_die thinks
19184              that this is a declaration. At this point, we just want to force
19185              declaration die.  */
19186           save_fn = current_function_decl;
19187           current_function_decl = NULL_TREE;
19188           gen_subprogram_die (decl, context_die);
19189           current_function_decl = save_fn;
19190           break;
19191
19192         case VAR_DECL:
19193           /* Set external flag to force declaration die. Restore it after
19194            gen_decl_die() call.  */
19195           saved_external_flag = DECL_EXTERNAL (decl);
19196           DECL_EXTERNAL (decl) = 1;
19197           gen_decl_die (decl, NULL, context_die);
19198           DECL_EXTERNAL (decl) = saved_external_flag;
19199           break;
19200
19201         case NAMESPACE_DECL:
19202           if (dwarf_version >= 3 || !dwarf_strict)
19203             dwarf2out_decl (decl);
19204           else
19205             /* DWARF2 has neither DW_TAG_module, nor DW_TAG_namespace.  */
19206             decl_die = comp_unit_die;
19207           break;
19208
19209         default:
19210           gcc_unreachable ();
19211         }
19212
19213       /* We should be able to find the DIE now.  */
19214       if (!decl_die)
19215         decl_die = lookup_decl_die (decl);
19216       gcc_assert (decl_die);
19217     }
19218
19219   return decl_die;
19220 }
19221
19222 /* Returns the DIE for TYPE, that must not be a base type.  A DIE is
19223    always returned.  */
19224
19225 static dw_die_ref
19226 force_type_die (tree type)
19227 {
19228   dw_die_ref type_die;
19229
19230   type_die = lookup_type_die (type);
19231   if (!type_die)
19232     {
19233       dw_die_ref context_die = get_context_die (TYPE_CONTEXT (type));
19234
19235       type_die = modified_type_die (type, TYPE_READONLY (type),
19236                                     TYPE_VOLATILE (type), context_die);
19237       gcc_assert (type_die);
19238     }
19239   return type_die;
19240 }
19241
19242 /* Force out any required namespaces to be able to output DECL,
19243    and return the new context_die for it, if it's changed.  */
19244
19245 static dw_die_ref
19246 setup_namespace_context (tree thing, dw_die_ref context_die)
19247 {
19248   tree context = (DECL_P (thing)
19249                   ? DECL_CONTEXT (thing) : TYPE_CONTEXT (thing));
19250   if (context && TREE_CODE (context) == NAMESPACE_DECL)
19251     /* Force out the namespace.  */
19252     context_die = force_decl_die (context);
19253
19254   return context_die;
19255 }
19256
19257 /* Emit a declaration DIE for THING (which is either a DECL or a tagged
19258    type) within its namespace, if appropriate.
19259
19260    For compatibility with older debuggers, namespace DIEs only contain
19261    declarations; all definitions are emitted at CU scope.  */
19262
19263 static dw_die_ref
19264 declare_in_namespace (tree thing, dw_die_ref context_die)
19265 {
19266   dw_die_ref ns_context;
19267
19268   if (debug_info_level <= DINFO_LEVEL_TERSE)
19269     return context_die;
19270
19271   /* If this decl is from an inlined function, then don't try to emit it in its
19272      namespace, as we will get confused.  It would have already been emitted
19273      when the abstract instance of the inline function was emitted anyways.  */
19274   if (DECL_P (thing) && DECL_ABSTRACT_ORIGIN (thing))
19275     return context_die;
19276
19277   ns_context = setup_namespace_context (thing, context_die);
19278
19279   if (ns_context != context_die)
19280     {
19281       if (is_fortran ())
19282         return ns_context;
19283       if (DECL_P (thing))
19284         gen_decl_die (thing, NULL, ns_context);
19285       else
19286         gen_type_die (thing, ns_context);
19287     }
19288   return context_die;
19289 }
19290
19291 /* Generate a DIE for a namespace or namespace alias.  */
19292
19293 static void
19294 gen_namespace_die (tree decl, dw_die_ref context_die)
19295 {
19296   dw_die_ref namespace_die;
19297
19298   /* Namespace aliases have a DECL_ABSTRACT_ORIGIN of the namespace
19299      they are an alias of.  */
19300   if (DECL_ABSTRACT_ORIGIN (decl) == NULL)
19301     {
19302       /* Output a real namespace or module.  */
19303       context_die = setup_namespace_context (decl, comp_unit_die);
19304       namespace_die = new_die (is_fortran ()
19305                                ? DW_TAG_module : DW_TAG_namespace,
19306                                context_die, decl);
19307       /* For Fortran modules defined in different CU don't add src coords.  */
19308       if (namespace_die->die_tag == DW_TAG_module && DECL_EXTERNAL (decl))
19309         {
19310           const char *name = dwarf2_name (decl, 0);
19311           if (name)
19312             add_name_attribute (namespace_die, name);
19313         }
19314       else
19315         add_name_and_src_coords_attributes (namespace_die, decl);
19316       if (DECL_EXTERNAL (decl))
19317         add_AT_flag (namespace_die, DW_AT_declaration, 1);
19318       equate_decl_number_to_die (decl, namespace_die);
19319     }
19320   else
19321     {
19322       /* Output a namespace alias.  */
19323
19324       /* Force out the namespace we are an alias of, if necessary.  */
19325       dw_die_ref origin_die
19326         = force_decl_die (DECL_ABSTRACT_ORIGIN (decl));
19327
19328       if (DECL_CONTEXT (decl) == NULL_TREE
19329           || TREE_CODE (DECL_CONTEXT (decl)) == NAMESPACE_DECL)
19330         context_die = setup_namespace_context (decl, comp_unit_die);
19331       /* Now create the namespace alias DIE.  */
19332       namespace_die = new_die (DW_TAG_imported_declaration, context_die, decl);
19333       add_name_and_src_coords_attributes (namespace_die, decl);
19334       add_AT_die_ref (namespace_die, DW_AT_import, origin_die);
19335       equate_decl_number_to_die (decl, namespace_die);
19336     }
19337 }
19338
19339 /* Generate Dwarf debug information for a decl described by DECL.  */
19340
19341 static void
19342 gen_decl_die (tree decl, tree origin, dw_die_ref context_die)
19343 {
19344   tree decl_or_origin = decl ? decl : origin;
19345   tree class_origin = NULL;
19346
19347   if (DECL_P (decl_or_origin) && DECL_IGNORED_P (decl_or_origin))
19348     return;
19349
19350   switch (TREE_CODE (decl_or_origin))
19351     {
19352     case ERROR_MARK:
19353       break;
19354
19355     case CONST_DECL:
19356       if (!is_fortran ())
19357         {
19358           /* The individual enumerators of an enum type get output when we output
19359              the Dwarf representation of the relevant enum type itself.  */
19360           break;
19361         }
19362
19363       /* Emit its type.  */
19364       gen_type_die (TREE_TYPE (decl), context_die);
19365
19366       /* And its containing namespace.  */
19367       context_die = declare_in_namespace (decl, context_die);
19368
19369       gen_const_die (decl, context_die);
19370       break;
19371
19372     case FUNCTION_DECL:
19373       /* Don't output any DIEs to represent mere function declarations,
19374          unless they are class members or explicit block externs.  */
19375       if (DECL_INITIAL (decl_or_origin) == NULL_TREE
19376           && DECL_CONTEXT (decl_or_origin) == NULL_TREE
19377           && (current_function_decl == NULL_TREE
19378               || DECL_ARTIFICIAL (decl_or_origin)))
19379         break;
19380
19381 #if 0
19382       /* FIXME */
19383       /* This doesn't work because the C frontend sets DECL_ABSTRACT_ORIGIN
19384          on local redeclarations of global functions.  That seems broken.  */
19385       if (current_function_decl != decl)
19386         /* This is only a declaration.  */;
19387 #endif
19388
19389       /* If we're emitting a clone, emit info for the abstract instance.  */
19390       if (origin || DECL_ORIGIN (decl) != decl)
19391         dwarf2out_abstract_function (origin ? origin : DECL_ABSTRACT_ORIGIN (decl));
19392
19393       /* If we're emitting an out-of-line copy of an inline function,
19394          emit info for the abstract instance and set up to refer to it.  */
19395       else if (cgraph_function_possibly_inlined_p (decl)
19396                && ! DECL_ABSTRACT (decl)
19397                && ! class_or_namespace_scope_p (context_die)
19398                /* dwarf2out_abstract_function won't emit a die if this is just
19399                   a declaration.  We must avoid setting DECL_ABSTRACT_ORIGIN in
19400                   that case, because that works only if we have a die.  */
19401                && DECL_INITIAL (decl) != NULL_TREE)
19402         {
19403           dwarf2out_abstract_function (decl);
19404           set_decl_origin_self (decl);
19405         }
19406
19407       /* Otherwise we're emitting the primary DIE for this decl.  */
19408       else if (debug_info_level > DINFO_LEVEL_TERSE)
19409         {
19410           /* Before we describe the FUNCTION_DECL itself, make sure that we
19411              have described its return type.  */
19412           gen_type_die (TREE_TYPE (TREE_TYPE (decl)), context_die);
19413
19414           /* And its virtual context.  */
19415           if (DECL_VINDEX (decl) != NULL_TREE)
19416             gen_type_die (DECL_CONTEXT (decl), context_die);
19417
19418           /* And its containing type.  */
19419           if (!origin)
19420             origin = decl_class_context (decl);
19421           if (origin != NULL_TREE)
19422             gen_type_die_for_member (origin, decl, context_die);
19423
19424           /* And its containing namespace.  */
19425           context_die = declare_in_namespace (decl, context_die);
19426         }
19427
19428       /* Now output a DIE to represent the function itself.  */
19429       if (decl)
19430         gen_subprogram_die (decl, context_die);
19431       break;
19432
19433     case TYPE_DECL:
19434       /* If we are in terse mode, don't generate any DIEs to represent any
19435          actual typedefs.  */
19436       if (debug_info_level <= DINFO_LEVEL_TERSE)
19437         break;
19438
19439       /* In the special case of a TYPE_DECL node representing the declaration
19440          of some type tag, if the given TYPE_DECL is marked as having been
19441          instantiated from some other (original) TYPE_DECL node (e.g. one which
19442          was generated within the original definition of an inline function) we
19443          used to generate a special (abbreviated) DW_TAG_structure_type,
19444          DW_TAG_union_type, or DW_TAG_enumeration_type DIE here.  But nothing
19445          should be actually referencing those DIEs, as variable DIEs with that
19446          type would be emitted already in the abstract origin, so it was always
19447          removed during unused type prunning.  Don't add anything in this
19448          case.  */
19449       if (TYPE_DECL_IS_STUB (decl) && decl_ultimate_origin (decl) != NULL_TREE)
19450         break;
19451
19452       if (is_redundant_typedef (decl))
19453         gen_type_die (TREE_TYPE (decl), context_die);
19454       else
19455         /* Output a DIE to represent the typedef itself.  */
19456         gen_typedef_die (decl, context_die);
19457       break;
19458
19459     case LABEL_DECL:
19460       if (debug_info_level >= DINFO_LEVEL_NORMAL)
19461         gen_label_die (decl, context_die);
19462       break;
19463
19464     case VAR_DECL:
19465     case RESULT_DECL:
19466       /* If we are in terse mode, don't generate any DIEs to represent any
19467          variable declarations or definitions.  */
19468       if (debug_info_level <= DINFO_LEVEL_TERSE)
19469         break;
19470
19471       /* Output any DIEs that are needed to specify the type of this data
19472          object.  */
19473       if (decl_by_reference_p (decl_or_origin))
19474         gen_type_die (TREE_TYPE (TREE_TYPE (decl_or_origin)), context_die);
19475       else
19476         gen_type_die (TREE_TYPE (decl_or_origin), context_die);
19477
19478       /* And its containing type.  */
19479       class_origin = decl_class_context (decl_or_origin);
19480       if (class_origin != NULL_TREE)
19481         gen_type_die_for_member (class_origin, decl_or_origin, context_die);
19482
19483       /* And its containing namespace.  */
19484       context_die = declare_in_namespace (decl_or_origin, context_die);
19485
19486       /* Now output the DIE to represent the data object itself.  This gets
19487          complicated because of the possibility that the VAR_DECL really
19488          represents an inlined instance of a formal parameter for an inline
19489          function.  */
19490       if (!origin)
19491         origin = decl_ultimate_origin (decl);
19492       if (origin != NULL_TREE && TREE_CODE (origin) == PARM_DECL)
19493         gen_formal_parameter_die (decl, origin,
19494                                   true /* Emit name attribute.  */,
19495                                   context_die);
19496       else
19497         gen_variable_die (decl, origin, context_die);
19498       break;
19499
19500     case FIELD_DECL:
19501       /* Ignore the nameless fields that are used to skip bits but handle C++
19502          anonymous unions and structs.  */
19503       if (DECL_NAME (decl) != NULL_TREE
19504           || TREE_CODE (TREE_TYPE (decl)) == UNION_TYPE
19505           || TREE_CODE (TREE_TYPE (decl)) == RECORD_TYPE)
19506         {
19507           gen_type_die (member_declared_type (decl), context_die);
19508           gen_field_die (decl, context_die);
19509         }
19510       break;
19511
19512     case PARM_DECL:
19513       if (DECL_BY_REFERENCE (decl_or_origin))
19514         gen_type_die (TREE_TYPE (TREE_TYPE (decl_or_origin)), context_die);
19515       else
19516         gen_type_die (TREE_TYPE (decl_or_origin), context_die);
19517       gen_formal_parameter_die (decl, origin,
19518                                 true /* Emit name attribute.  */,
19519                                 context_die);
19520       break;
19521
19522     case NAMESPACE_DECL:
19523     case IMPORTED_DECL:
19524       if (dwarf_version >= 3 || !dwarf_strict)
19525         gen_namespace_die (decl, context_die);
19526       break;
19527
19528     default:
19529       /* Probably some frontend-internal decl.  Assume we don't care.  */
19530       gcc_assert ((int)TREE_CODE (decl) > NUM_TREE_CODES);
19531       break;
19532     }
19533 }
19534 \f
19535 /* Output debug information for global decl DECL.  Called from toplev.c after
19536    compilation proper has finished.  */
19537
19538 static void
19539 dwarf2out_global_decl (tree decl)
19540 {
19541   /* Output DWARF2 information for file-scope tentative data object
19542      declarations, file-scope (extern) function declarations (which
19543      had no corresponding body) and file-scope tagged type declarations
19544      and definitions which have not yet been forced out.  */
19545   if (TREE_CODE (decl) != FUNCTION_DECL || !DECL_INITIAL (decl))
19546     dwarf2out_decl (decl);
19547 }
19548
19549 /* Output debug information for type decl DECL.  Called from toplev.c
19550    and from language front ends (to record built-in types).  */
19551 static void
19552 dwarf2out_type_decl (tree decl, int local)
19553 {
19554   if (!local)
19555     dwarf2out_decl (decl);
19556 }
19557
19558 /* Output debug information for imported module or decl DECL.
19559    NAME is non-NULL name in the lexical block if the decl has been renamed.
19560    LEXICAL_BLOCK is the lexical block (which TREE_CODE is a BLOCK)
19561    that DECL belongs to.
19562    LEXICAL_BLOCK_DIE is the DIE of LEXICAL_BLOCK.  */
19563 static void
19564 dwarf2out_imported_module_or_decl_1 (tree decl,
19565                                      tree name,
19566                                      tree lexical_block,
19567                                      dw_die_ref lexical_block_die)
19568 {
19569   expanded_location xloc;
19570   dw_die_ref imported_die = NULL;
19571   dw_die_ref at_import_die;
19572
19573   if (TREE_CODE (decl) == IMPORTED_DECL)
19574     {
19575       xloc = expand_location (DECL_SOURCE_LOCATION (decl));
19576       decl = IMPORTED_DECL_ASSOCIATED_DECL (decl);
19577       gcc_assert (decl);
19578     }
19579   else
19580     xloc = expand_location (input_location);
19581
19582   if (TREE_CODE (decl) == TYPE_DECL || TREE_CODE (decl) == CONST_DECL)
19583     {
19584       if (is_base_type (TREE_TYPE (decl)))
19585         at_import_die = base_type_die (TREE_TYPE (decl));
19586       else
19587         at_import_die = force_type_die (TREE_TYPE (decl));
19588       /* For namespace N { typedef void T; } using N::T; base_type_die
19589          returns NULL, but DW_TAG_imported_declaration requires
19590          the DW_AT_import tag.  Force creation of DW_TAG_typedef.  */
19591       if (!at_import_die)
19592         {
19593           gcc_assert (TREE_CODE (decl) == TYPE_DECL);
19594           gen_typedef_die (decl, get_context_die (DECL_CONTEXT (decl)));
19595           at_import_die = lookup_type_die (TREE_TYPE (decl));
19596           gcc_assert (at_import_die);
19597         }
19598     }
19599   else
19600     {
19601       at_import_die = lookup_decl_die (decl);
19602       if (!at_import_die)
19603         {
19604           /* If we're trying to avoid duplicate debug info, we may not have
19605              emitted the member decl for this field.  Emit it now.  */
19606           if (TREE_CODE (decl) == FIELD_DECL)
19607             {
19608               tree type = DECL_CONTEXT (decl);
19609
19610               if (TYPE_CONTEXT (type)
19611                   && TYPE_P (TYPE_CONTEXT (type))
19612                   && !should_emit_struct_debug (TYPE_CONTEXT (type),
19613                                                 DINFO_USAGE_DIR_USE))
19614                 return;
19615               gen_type_die_for_member (type, decl,
19616                                        get_context_die (TYPE_CONTEXT (type)));
19617             }
19618           at_import_die = force_decl_die (decl);
19619         }
19620     }
19621
19622   if (TREE_CODE (decl) == NAMESPACE_DECL)
19623     {
19624       if (dwarf_version >= 3 || !dwarf_strict)
19625         imported_die = new_die (DW_TAG_imported_module,
19626                                 lexical_block_die,
19627                                 lexical_block);
19628       else
19629         return;
19630     }
19631   else
19632     imported_die = new_die (DW_TAG_imported_declaration,
19633                             lexical_block_die,
19634                             lexical_block);
19635
19636   add_AT_file (imported_die, DW_AT_decl_file, lookup_filename (xloc.file));
19637   add_AT_unsigned (imported_die, DW_AT_decl_line, xloc.line);
19638   if (name)
19639     add_AT_string (imported_die, DW_AT_name,
19640                    IDENTIFIER_POINTER (name));
19641   add_AT_die_ref (imported_die, DW_AT_import, at_import_die);
19642 }
19643
19644 /* Output debug information for imported module or decl DECL.
19645    NAME is non-NULL name in context if the decl has been renamed.
19646    CHILD is true if decl is one of the renamed decls as part of
19647    importing whole module.  */
19648
19649 static void
19650 dwarf2out_imported_module_or_decl (tree decl, tree name, tree context,
19651                                    bool child)
19652 {
19653   /* dw_die_ref at_import_die;  */
19654   dw_die_ref scope_die;
19655
19656   if (debug_info_level <= DINFO_LEVEL_TERSE)
19657     return;
19658
19659   gcc_assert (decl);
19660
19661   /* To emit DW_TAG_imported_module or DW_TAG_imported_decl, we need two DIEs.
19662      We need decl DIE for reference and scope die. First, get DIE for the decl
19663      itself.  */
19664
19665   /* Get the scope die for decl context. Use comp_unit_die for global module
19666      or decl. If die is not found for non globals, force new die.  */
19667   if (context
19668       && TYPE_P (context)
19669       && !should_emit_struct_debug (context, DINFO_USAGE_DIR_USE))
19670     return;
19671
19672   if (!(dwarf_version >= 3 || !dwarf_strict))
19673     return;
19674
19675   scope_die = get_context_die (context);
19676
19677   if (child)
19678     {
19679       gcc_assert (scope_die->die_child);
19680       gcc_assert (scope_die->die_child->die_tag == DW_TAG_imported_module);
19681       gcc_assert (TREE_CODE (decl) != NAMESPACE_DECL);
19682       scope_die = scope_die->die_child;
19683     }
19684
19685   /* OK, now we have DIEs for decl as well as scope. Emit imported die.  */
19686   dwarf2out_imported_module_or_decl_1 (decl, name, context, scope_die);
19687
19688 }
19689
19690 /* Write the debugging output for DECL.  */
19691
19692 void
19693 dwarf2out_decl (tree decl)
19694 {
19695   dw_die_ref context_die = comp_unit_die;
19696
19697   switch (TREE_CODE (decl))
19698     {
19699     case ERROR_MARK:
19700       return;
19701
19702     case FUNCTION_DECL:
19703       /* What we would really like to do here is to filter out all mere
19704          file-scope declarations of file-scope functions which are never
19705          referenced later within this translation unit (and keep all of ones
19706          that *are* referenced later on) but we aren't clairvoyant, so we have
19707          no idea which functions will be referenced in the future (i.e. later
19708          on within the current translation unit). So here we just ignore all
19709          file-scope function declarations which are not also definitions.  If
19710          and when the debugger needs to know something about these functions,
19711          it will have to hunt around and find the DWARF information associated
19712          with the definition of the function.
19713
19714          We can't just check DECL_EXTERNAL to find out which FUNCTION_DECL
19715          nodes represent definitions and which ones represent mere
19716          declarations.  We have to check DECL_INITIAL instead. That's because
19717          the C front-end supports some weird semantics for "extern inline"
19718          function definitions.  These can get inlined within the current
19719          translation unit (and thus, we need to generate Dwarf info for their
19720          abstract instances so that the Dwarf info for the concrete inlined
19721          instances can have something to refer to) but the compiler never
19722          generates any out-of-lines instances of such things (despite the fact
19723          that they *are* definitions).
19724
19725          The important point is that the C front-end marks these "extern
19726          inline" functions as DECL_EXTERNAL, but we need to generate DWARF for
19727          them anyway. Note that the C++ front-end also plays some similar games
19728          for inline function definitions appearing within include files which
19729          also contain `#pragma interface' pragmas.  */
19730       if (DECL_INITIAL (decl) == NULL_TREE)
19731         return;
19732
19733       /* If we're a nested function, initially use a parent of NULL; if we're
19734          a plain function, this will be fixed up in decls_for_scope.  If
19735          we're a method, it will be ignored, since we already have a DIE.  */
19736       if (decl_function_context (decl)
19737           /* But if we're in terse mode, we don't care about scope.  */
19738           && debug_info_level > DINFO_LEVEL_TERSE)
19739         context_die = NULL;
19740       break;
19741
19742     case VAR_DECL:
19743       /* Ignore this VAR_DECL if it refers to a file-scope extern data object
19744          declaration and if the declaration was never even referenced from
19745          within this entire compilation unit.  We suppress these DIEs in
19746          order to save space in the .debug section (by eliminating entries
19747          which are probably useless).  Note that we must not suppress
19748          block-local extern declarations (whether used or not) because that
19749          would screw-up the debugger's name lookup mechanism and cause it to
19750          miss things which really ought to be in scope at a given point.  */
19751       if (DECL_EXTERNAL (decl) && !TREE_USED (decl))
19752         return;
19753
19754       /* For local statics lookup proper context die.  */
19755       if (TREE_STATIC (decl) && decl_function_context (decl))
19756         context_die = lookup_decl_die (DECL_CONTEXT (decl));
19757
19758       /* If we are in terse mode, don't generate any DIEs to represent any
19759          variable declarations or definitions.  */
19760       if (debug_info_level <= DINFO_LEVEL_TERSE)
19761         return;
19762       break;
19763
19764     case CONST_DECL:
19765       if (debug_info_level <= DINFO_LEVEL_TERSE)
19766         return;
19767       if (!is_fortran ())
19768         return;
19769       if (TREE_STATIC (decl) && decl_function_context (decl))
19770         context_die = lookup_decl_die (DECL_CONTEXT (decl));
19771       break;
19772
19773     case NAMESPACE_DECL:
19774     case IMPORTED_DECL:
19775       if (debug_info_level <= DINFO_LEVEL_TERSE)
19776         return;
19777       if (lookup_decl_die (decl) != NULL)
19778         return;
19779       break;
19780
19781     case TYPE_DECL:
19782       /* Don't emit stubs for types unless they are needed by other DIEs.  */
19783       if (TYPE_DECL_SUPPRESS_DEBUG (decl))
19784         return;
19785
19786       /* Don't bother trying to generate any DIEs to represent any of the
19787          normal built-in types for the language we are compiling.  */
19788       if (DECL_IS_BUILTIN (decl))
19789         {
19790           /* OK, we need to generate one for `bool' so GDB knows what type
19791              comparisons have.  */
19792           if (is_cxx ()
19793               && TREE_CODE (TREE_TYPE (decl)) == BOOLEAN_TYPE
19794               && ! DECL_IGNORED_P (decl))
19795             modified_type_die (TREE_TYPE (decl), 0, 0, NULL);
19796
19797           return;
19798         }
19799
19800       /* If we are in terse mode, don't generate any DIEs for types.  */
19801       if (debug_info_level <= DINFO_LEVEL_TERSE)
19802         return;
19803
19804       /* If we're a function-scope tag, initially use a parent of NULL;
19805          this will be fixed up in decls_for_scope.  */
19806       if (decl_function_context (decl))
19807         context_die = NULL;
19808
19809       break;
19810
19811     default:
19812       return;
19813     }
19814
19815   gen_decl_die (decl, NULL, context_die);
19816 }
19817
19818 /* Output a marker (i.e. a label) for the beginning of the generated code for
19819    a lexical block.  */
19820
19821 static void
19822 dwarf2out_begin_block (unsigned int line ATTRIBUTE_UNUSED,
19823                        unsigned int blocknum)
19824 {
19825   switch_to_section (current_function_section ());
19826   ASM_OUTPUT_DEBUG_LABEL (asm_out_file, BLOCK_BEGIN_LABEL, blocknum);
19827 }
19828
19829 /* Output a marker (i.e. a label) for the end of the generated code for a
19830    lexical block.  */
19831
19832 static void
19833 dwarf2out_end_block (unsigned int line ATTRIBUTE_UNUSED, unsigned int blocknum)
19834 {
19835   switch_to_section (current_function_section ());
19836   ASM_OUTPUT_DEBUG_LABEL (asm_out_file, BLOCK_END_LABEL, blocknum);
19837 }
19838
19839 /* Returns nonzero if it is appropriate not to emit any debugging
19840    information for BLOCK, because it doesn't contain any instructions.
19841
19842    Don't allow this for blocks with nested functions or local classes
19843    as we would end up with orphans, and in the presence of scheduling
19844    we may end up calling them anyway.  */
19845
19846 static bool
19847 dwarf2out_ignore_block (const_tree block)
19848 {
19849   tree decl;
19850   unsigned int i;
19851
19852   for (decl = BLOCK_VARS (block); decl; decl = TREE_CHAIN (decl))
19853     if (TREE_CODE (decl) == FUNCTION_DECL
19854         || (TREE_CODE (decl) == TYPE_DECL && TYPE_DECL_IS_STUB (decl)))
19855       return 0;
19856   for (i = 0; i < BLOCK_NUM_NONLOCALIZED_VARS (block); i++)
19857     {
19858       decl = BLOCK_NONLOCALIZED_VAR (block, i);
19859       if (TREE_CODE (decl) == FUNCTION_DECL
19860           || (TREE_CODE (decl) == TYPE_DECL && TYPE_DECL_IS_STUB (decl)))
19861       return 0;
19862     }
19863
19864   return 1;
19865 }
19866
19867 /* Hash table routines for file_hash.  */
19868
19869 static int
19870 file_table_eq (const void *p1_p, const void *p2_p)
19871 {
19872   const struct dwarf_file_data *const p1 =
19873     (const struct dwarf_file_data *) p1_p;
19874   const char *const p2 = (const char *) p2_p;
19875   return strcmp (p1->filename, p2) == 0;
19876 }
19877
19878 static hashval_t
19879 file_table_hash (const void *p_p)
19880 {
19881   const struct dwarf_file_data *const p = (const struct dwarf_file_data *) p_p;
19882   return htab_hash_string (p->filename);
19883 }
19884
19885 /* Lookup FILE_NAME (in the list of filenames that we know about here in
19886    dwarf2out.c) and return its "index".  The index of each (known) filename is
19887    just a unique number which is associated with only that one filename.  We
19888    need such numbers for the sake of generating labels (in the .debug_sfnames
19889    section) and references to those files numbers (in the .debug_srcinfo
19890    and.debug_macinfo sections).  If the filename given as an argument is not
19891    found in our current list, add it to the list and assign it the next
19892    available unique index number.  In order to speed up searches, we remember
19893    the index of the filename was looked up last.  This handles the majority of
19894    all searches.  */
19895
19896 static struct dwarf_file_data *
19897 lookup_filename (const char *file_name)
19898 {
19899   void ** slot;
19900   struct dwarf_file_data * created;
19901
19902   /* Check to see if the file name that was searched on the previous
19903      call matches this file name.  If so, return the index.  */
19904   if (file_table_last_lookup
19905       && (file_name == file_table_last_lookup->filename
19906           || strcmp (file_table_last_lookup->filename, file_name) == 0))
19907     return file_table_last_lookup;
19908
19909   /* Didn't match the previous lookup, search the table.  */
19910   slot = htab_find_slot_with_hash (file_table, file_name,
19911                                    htab_hash_string (file_name), INSERT);
19912   if (*slot)
19913     return (struct dwarf_file_data *) *slot;
19914
19915   created = GGC_NEW (struct dwarf_file_data);
19916   created->filename = file_name;
19917   created->emitted_number = 0;
19918   *slot = created;
19919   return created;
19920 }
19921
19922 /* If the assembler will construct the file table, then translate the compiler
19923    internal file table number into the assembler file table number, and emit
19924    a .file directive if we haven't already emitted one yet.  The file table
19925    numbers are different because we prune debug info for unused variables and
19926    types, which may include filenames.  */
19927
19928 static int
19929 maybe_emit_file (struct dwarf_file_data * fd)
19930 {
19931   if (! fd->emitted_number)
19932     {
19933       if (last_emitted_file)
19934         fd->emitted_number = last_emitted_file->emitted_number + 1;
19935       else
19936         fd->emitted_number = 1;
19937       last_emitted_file = fd;
19938
19939       if (DWARF2_ASM_LINE_DEBUG_INFO)
19940         {
19941           fprintf (asm_out_file, "\t.file %u ", fd->emitted_number);
19942           output_quoted_string (asm_out_file,
19943                                 remap_debug_filename (fd->filename));
19944           fputc ('\n', asm_out_file);
19945         }
19946     }
19947
19948   return fd->emitted_number;
19949 }
19950
19951 /* Schedule generation of a DW_AT_const_value attribute to DIE.
19952    That generation should happen after function debug info has been
19953    generated. The value of the attribute is the constant value of ARG.  */
19954
19955 static void
19956 append_entry_to_tmpl_value_parm_die_table (dw_die_ref die, tree arg)
19957 {
19958   die_arg_entry entry;
19959
19960   if (!die || !arg)
19961     return;
19962
19963   if (!tmpl_value_parm_die_table)
19964     tmpl_value_parm_die_table
19965       = VEC_alloc (die_arg_entry, gc, 32);
19966
19967   entry.die = die;
19968   entry.arg = arg;
19969   VEC_safe_push (die_arg_entry, gc,
19970                  tmpl_value_parm_die_table,
19971                  &entry);
19972 }
19973
19974 /* Add a DW_AT_const_value attribute to DIEs that were scheduled
19975    by append_entry_to_tmpl_value_parm_die_table. This function must
19976    be called after function DIEs have been generated.  */
19977
19978 static void
19979 gen_remaining_tmpl_value_param_die_attribute (void)
19980 {
19981   if (tmpl_value_parm_die_table)
19982     {
19983       unsigned i;
19984       die_arg_entry *e;
19985
19986       for (i = 0;
19987            VEC_iterate (die_arg_entry, tmpl_value_parm_die_table, i, e);
19988            i++)
19989         tree_add_const_value_attribute (e->die, e->arg);
19990     }
19991 }
19992
19993
19994 /* Replace DW_AT_name for the decl with name.  */
19995
19996 static void
19997 dwarf2out_set_name (tree decl, tree name)
19998 {
19999   dw_die_ref die;
20000   dw_attr_ref attr;
20001   const char *dname;
20002
20003   die = TYPE_SYMTAB_DIE (decl);
20004   if (!die)
20005     return;
20006
20007   dname = dwarf2_name (name, 0);
20008   if (!dname)
20009     return;
20010
20011   attr = get_AT (die, DW_AT_name);
20012   if (attr)
20013     {
20014       struct indirect_string_node *node;
20015
20016       node = find_AT_string (dname);
20017       /* replace the string.  */
20018       attr->dw_attr_val.v.val_str = node;
20019     }
20020
20021   else
20022     add_name_attribute (die, dname);
20023 }
20024
20025 /* Called by the final INSN scan whenever we see a direct function call.
20026    Make an entry into the direct call table, recording the point of call
20027    and a reference to the target function's debug entry.  */
20028
20029 static void
20030 dwarf2out_direct_call (tree targ)
20031 {
20032   dcall_entry e;
20033   tree origin = decl_ultimate_origin (targ);
20034
20035   /* If this is a clone, use the abstract origin as the target.  */
20036   if (origin)
20037     targ = origin;
20038
20039   e.poc_label_num = poc_label_num++;
20040   e.poc_decl = current_function_decl;
20041   e.targ_die = force_decl_die (targ);
20042   VEC_safe_push (dcall_entry, gc, dcall_table, &e);
20043
20044   /* Drop a label at the return point to mark the point of call.  */
20045   ASM_OUTPUT_DEBUG_LABEL (asm_out_file, "LPOC", e.poc_label_num);
20046 }
20047
20048 /* Returns a hash value for X (which really is a struct vcall_insn).  */
20049
20050 static hashval_t
20051 vcall_insn_table_hash (const void *x)
20052 {
20053   return (hashval_t) ((const struct vcall_insn *) x)->insn_uid;
20054 }
20055
20056 /* Return nonzero if insn_uid of struct vcall_insn *X is the same as
20057    insnd_uid of *Y.  */
20058
20059 static int
20060 vcall_insn_table_eq (const void *x, const void *y)
20061 {
20062   return (((const struct vcall_insn *) x)->insn_uid
20063           == ((const struct vcall_insn *) y)->insn_uid);
20064 }
20065
20066 /* Associate VTABLE_SLOT with INSN_UID in the VCALL_INSN_TABLE.  */
20067
20068 static void
20069 store_vcall_insn (unsigned int vtable_slot, int insn_uid)
20070 {
20071   struct vcall_insn *item = GGC_NEW (struct vcall_insn);
20072   struct vcall_insn **slot;
20073
20074   gcc_assert (item);
20075   item->insn_uid = insn_uid;
20076   item->vtable_slot = vtable_slot;
20077   slot = (struct vcall_insn **)
20078       htab_find_slot_with_hash (vcall_insn_table, &item,
20079                                 (hashval_t) insn_uid, INSERT);
20080   *slot = item;
20081 }
20082
20083 /* Return the VTABLE_SLOT associated with INSN_UID.  */
20084
20085 static unsigned int
20086 lookup_vcall_insn (unsigned int insn_uid)
20087 {
20088   struct vcall_insn item;
20089   struct vcall_insn *p;
20090
20091   item.insn_uid = insn_uid;
20092   item.vtable_slot = 0;
20093   p = (struct vcall_insn *) htab_find_with_hash (vcall_insn_table,
20094                                                  (void *) &item,
20095                                                  (hashval_t) insn_uid);
20096   if (p == NULL)
20097     return (unsigned int) -1;
20098   return p->vtable_slot;
20099 }
20100
20101
20102 /* Called when lowering indirect calls to RTL.  We make a note of INSN_UID
20103    and the OBJ_TYPE_REF_TOKEN from ADDR.  For C++ virtual calls, the token
20104    is the vtable slot index that we will need to put in the virtual call
20105    table later.  */
20106
20107 static void
20108 dwarf2out_virtual_call_token (tree addr, int insn_uid)
20109 {
20110   if (is_cxx() && TREE_CODE (addr) == OBJ_TYPE_REF)
20111     {
20112       tree token = OBJ_TYPE_REF_TOKEN (addr);
20113       if (TREE_CODE (token) == INTEGER_CST)
20114         store_vcall_insn (TREE_INT_CST_LOW (token), insn_uid);
20115     }
20116 }
20117
20118 /* Called when scheduling RTL, when a CALL_INSN is split.  Copies the
20119    OBJ_TYPE_REF_TOKEN previously associated with OLD_INSN and associates it
20120    with NEW_INSN.  */
20121
20122 static void
20123 dwarf2out_copy_call_info (rtx old_insn, rtx new_insn)
20124 {
20125   unsigned int vtable_slot = lookup_vcall_insn (INSN_UID (old_insn));
20126
20127   if (vtable_slot != (unsigned int) -1)
20128     store_vcall_insn (vtable_slot, INSN_UID (new_insn));
20129 }
20130
20131 /* Called by the final INSN scan whenever we see a virtual function call.
20132    Make an entry into the virtual call table, recording the point of call
20133    and the slot index of the vtable entry used to call the virtual member
20134    function.  The slot index was associated with the INSN_UID during the
20135    lowering to RTL.  */
20136
20137 static void
20138 dwarf2out_virtual_call (int insn_uid)
20139 {
20140   unsigned int vtable_slot = lookup_vcall_insn (insn_uid);
20141   vcall_entry e;
20142
20143   if (vtable_slot == (unsigned int) -1)
20144     return;
20145
20146   e.poc_label_num = poc_label_num++;
20147   e.vtable_slot = vtable_slot;
20148   VEC_safe_push (vcall_entry, gc, vcall_table, &e);
20149
20150   /* Drop a label at the return point to mark the point of call.  */
20151   ASM_OUTPUT_DEBUG_LABEL (asm_out_file, "LPOC", e.poc_label_num);
20152 }
20153
20154 /* Called by the final INSN scan whenever we see a var location.  We
20155    use it to drop labels in the right places, and throw the location in
20156    our lookup table.  */
20157
20158 static void
20159 dwarf2out_var_location (rtx loc_note)
20160 {
20161   char loclabel[MAX_ARTIFICIAL_LABEL_BYTES + 2];
20162   struct var_loc_node *newloc;
20163   rtx next_real;
20164   static const char *last_label;
20165   static const char *last_postcall_label;
20166   static bool last_in_cold_section_p;
20167   tree decl;
20168
20169   if (!DECL_P (NOTE_VAR_LOCATION_DECL (loc_note)))
20170     return;
20171
20172   next_real = next_real_insn (loc_note);
20173   /* If there are no instructions which would be affected by this note,
20174      don't do anything.  */
20175   if (next_real == NULL_RTX)
20176     return;
20177
20178   newloc = GGC_CNEW (struct var_loc_node);
20179   /* If there were no real insns between note we processed last time
20180      and this note, use the label we emitted last time.  */
20181   if (last_var_location_insn == NULL_RTX
20182       || last_var_location_insn != next_real
20183       || last_in_cold_section_p != in_cold_section_p)
20184     {
20185       ASM_GENERATE_INTERNAL_LABEL (loclabel, "LVL", loclabel_num);
20186       ASM_OUTPUT_DEBUG_LABEL (asm_out_file, "LVL", loclabel_num);
20187       loclabel_num++;
20188       last_label = ggc_strdup (loclabel);
20189       last_postcall_label = NULL;
20190     }
20191   newloc->var_loc_note = loc_note;
20192   newloc->next = NULL;
20193
20194   if (!NOTE_DURING_CALL_P (loc_note))
20195     newloc->label = last_label;
20196   else
20197     {
20198       if (!last_postcall_label)
20199         {
20200           sprintf (loclabel, "%s-1", last_label);
20201           last_postcall_label = ggc_strdup (loclabel);
20202         }
20203       newloc->label = last_postcall_label;
20204     }
20205
20206   if (cfun && in_cold_section_p)
20207     newloc->section_label = crtl->subsections.cold_section_label;
20208   else
20209     newloc->section_label = text_section_label;
20210
20211   last_var_location_insn = next_real;
20212   last_in_cold_section_p = in_cold_section_p;
20213   decl = NOTE_VAR_LOCATION_DECL (loc_note);
20214   add_var_loc_to_decl (decl, newloc);
20215 }
20216
20217 /* We need to reset the locations at the beginning of each
20218    function. We can't do this in the end_function hook, because the
20219    declarations that use the locations won't have been output when
20220    that hook is called.  Also compute have_multiple_function_sections here.  */
20221
20222 static void
20223 dwarf2out_begin_function (tree fun)
20224 {
20225   htab_empty (decl_loc_table);
20226
20227   if (function_section (fun) != text_section)
20228     have_multiple_function_sections = true;
20229
20230   dwarf2out_note_section_used ();
20231 }
20232
20233 /* Output a label to mark the beginning of a source code line entry
20234    and record information relating to this source line, in
20235    'line_info_table' for later output of the .debug_line section.  */
20236
20237 static void
20238 dwarf2out_source_line (unsigned int line, const char *filename,
20239                        int discriminator, bool is_stmt)
20240 {
20241   static bool last_is_stmt = true;
20242
20243   if (debug_info_level >= DINFO_LEVEL_NORMAL
20244       && line != 0)
20245     {
20246       int file_num = maybe_emit_file (lookup_filename (filename));
20247
20248       switch_to_section (current_function_section ());
20249
20250       /* If requested, emit something human-readable.  */
20251       if (flag_debug_asm)
20252         fprintf (asm_out_file, "\t%s %s:%d\n", ASM_COMMENT_START,
20253                  filename, line);
20254
20255       if (DWARF2_ASM_LINE_DEBUG_INFO)
20256         {
20257           /* Emit the .loc directive understood by GNU as.  */
20258           fprintf (asm_out_file, "\t.loc %d %d 0", file_num, line);
20259           if (is_stmt != last_is_stmt)
20260             {
20261               fprintf (asm_out_file, " is_stmt %d", is_stmt ? 1 : 0);
20262               last_is_stmt = is_stmt;
20263             }
20264           if (SUPPORTS_DISCRIMINATOR && discriminator != 0)
20265             fprintf (asm_out_file, " discriminator %d", discriminator);
20266           fputc ('\n', asm_out_file);
20267
20268           /* Indicate that line number info exists.  */
20269           line_info_table_in_use++;
20270         }
20271       else if (function_section (current_function_decl) != text_section)
20272         {
20273           dw_separate_line_info_ref line_info;
20274           targetm.asm_out.internal_label (asm_out_file,
20275                                           SEPARATE_LINE_CODE_LABEL,
20276                                           separate_line_info_table_in_use);
20277
20278           /* Expand the line info table if necessary.  */
20279           if (separate_line_info_table_in_use
20280               == separate_line_info_table_allocated)
20281             {
20282               separate_line_info_table_allocated += LINE_INFO_TABLE_INCREMENT;
20283               separate_line_info_table
20284                 = GGC_RESIZEVEC (dw_separate_line_info_entry,
20285                                  separate_line_info_table,
20286                                  separate_line_info_table_allocated);
20287               memset (separate_line_info_table
20288                        + separate_line_info_table_in_use,
20289                       0,
20290                       (LINE_INFO_TABLE_INCREMENT
20291                        * sizeof (dw_separate_line_info_entry)));
20292             }
20293
20294           /* Add the new entry at the end of the line_info_table.  */
20295           line_info
20296             = &separate_line_info_table[separate_line_info_table_in_use++];
20297           line_info->dw_file_num = file_num;
20298           line_info->dw_line_num = line;
20299           line_info->function = current_function_funcdef_no;
20300         }
20301       else
20302         {
20303           dw_line_info_ref line_info;
20304
20305           targetm.asm_out.internal_label (asm_out_file, LINE_CODE_LABEL,
20306                                      line_info_table_in_use);
20307
20308           /* Expand the line info table if necessary.  */
20309           if (line_info_table_in_use == line_info_table_allocated)
20310             {
20311               line_info_table_allocated += LINE_INFO_TABLE_INCREMENT;
20312               line_info_table
20313                 = GGC_RESIZEVEC (dw_line_info_entry, line_info_table,
20314                                  line_info_table_allocated);
20315               memset (line_info_table + line_info_table_in_use, 0,
20316                       LINE_INFO_TABLE_INCREMENT * sizeof (dw_line_info_entry));
20317             }
20318
20319           /* Add the new entry at the end of the line_info_table.  */
20320           line_info = &line_info_table[line_info_table_in_use++];
20321           line_info->dw_file_num = file_num;
20322           line_info->dw_line_num = line;
20323         }
20324     }
20325 }
20326
20327 /* Record the beginning of a new source file.  */
20328
20329 static void
20330 dwarf2out_start_source_file (unsigned int lineno, const char *filename)
20331 {
20332   if (flag_eliminate_dwarf2_dups && dwarf_version < 4)
20333     {
20334       /* Record the beginning of the file for break_out_includes.  */
20335       dw_die_ref bincl_die;
20336
20337       bincl_die = new_die (DW_TAG_GNU_BINCL, comp_unit_die, NULL);
20338       add_AT_string (bincl_die, DW_AT_name, remap_debug_filename (filename));
20339     }
20340
20341   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
20342     {
20343       int file_num = maybe_emit_file (lookup_filename (filename));
20344
20345       switch_to_section (debug_macinfo_section);
20346       dw2_asm_output_data (1, DW_MACINFO_start_file, "Start new file");
20347       dw2_asm_output_data_uleb128 (lineno, "Included from line number %d",
20348                                    lineno);
20349
20350       dw2_asm_output_data_uleb128 (file_num, "file %s", filename);
20351     }
20352 }
20353
20354 /* Record the end of a source file.  */
20355
20356 static void
20357 dwarf2out_end_source_file (unsigned int lineno ATTRIBUTE_UNUSED)
20358 {
20359   if (flag_eliminate_dwarf2_dups && dwarf_version < 4)
20360     /* Record the end of the file for break_out_includes.  */
20361     new_die (DW_TAG_GNU_EINCL, comp_unit_die, NULL);
20362
20363   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
20364     {
20365       switch_to_section (debug_macinfo_section);
20366       dw2_asm_output_data (1, DW_MACINFO_end_file, "End file");
20367     }
20368 }
20369
20370 /* Called from debug_define in toplev.c.  The `buffer' parameter contains
20371    the tail part of the directive line, i.e. the part which is past the
20372    initial whitespace, #, whitespace, directive-name, whitespace part.  */
20373
20374 static void
20375 dwarf2out_define (unsigned int lineno ATTRIBUTE_UNUSED,
20376                   const char *buffer ATTRIBUTE_UNUSED)
20377 {
20378   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
20379     {
20380       switch_to_section (debug_macinfo_section);
20381       dw2_asm_output_data (1, DW_MACINFO_define, "Define macro");
20382       dw2_asm_output_data_uleb128 (lineno, "At line number %d", lineno);
20383       dw2_asm_output_nstring (buffer, -1, "The macro");
20384     }
20385 }
20386
20387 /* Called from debug_undef in toplev.c.  The `buffer' parameter contains
20388    the tail part of the directive line, i.e. the part which is past the
20389    initial whitespace, #, whitespace, directive-name, whitespace part.  */
20390
20391 static void
20392 dwarf2out_undef (unsigned int lineno ATTRIBUTE_UNUSED,
20393                  const char *buffer ATTRIBUTE_UNUSED)
20394 {
20395   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
20396     {
20397       switch_to_section (debug_macinfo_section);
20398       dw2_asm_output_data (1, DW_MACINFO_undef, "Undefine macro");
20399       dw2_asm_output_data_uleb128 (lineno, "At line number %d", lineno);
20400       dw2_asm_output_nstring (buffer, -1, "The macro");
20401     }
20402 }
20403
20404 /* Set up for Dwarf output at the start of compilation.  */
20405
20406 static void
20407 dwarf2out_init (const char *filename ATTRIBUTE_UNUSED)
20408 {
20409   /* Allocate the file_table.  */
20410   file_table = htab_create_ggc (50, file_table_hash,
20411                                 file_table_eq, NULL);
20412
20413   /* Allocate the decl_die_table.  */
20414   decl_die_table = htab_create_ggc (10, decl_die_table_hash,
20415                                     decl_die_table_eq, NULL);
20416
20417   /* Allocate the decl_loc_table.  */
20418   decl_loc_table = htab_create_ggc (10, decl_loc_table_hash,
20419                                     decl_loc_table_eq, NULL);
20420
20421   /* Allocate the initial hunk of the decl_scope_table.  */
20422   decl_scope_table = VEC_alloc (tree, gc, 256);
20423
20424   /* Allocate the initial hunk of the abbrev_die_table.  */
20425   abbrev_die_table = GGC_CNEWVEC (dw_die_ref, ABBREV_DIE_TABLE_INCREMENT);
20426   abbrev_die_table_allocated = ABBREV_DIE_TABLE_INCREMENT;
20427   /* Zero-th entry is allocated, but unused.  */
20428   abbrev_die_table_in_use = 1;
20429
20430   /* Allocate the initial hunk of the line_info_table.  */
20431   line_info_table = GGC_CNEWVEC (dw_line_info_entry, LINE_INFO_TABLE_INCREMENT);
20432   line_info_table_allocated = LINE_INFO_TABLE_INCREMENT;
20433
20434   /* Zero-th entry is allocated, but unused.  */
20435   line_info_table_in_use = 1;
20436
20437   /* Allocate the pubtypes and pubnames vectors.  */
20438   pubname_table = VEC_alloc (pubname_entry, gc, 32);
20439   pubtype_table = VEC_alloc (pubname_entry, gc, 32);
20440
20441   /* Allocate the table that maps insn UIDs to vtable slot indexes.  */
20442   vcall_insn_table = htab_create_ggc (10, vcall_insn_table_hash,
20443                                       vcall_insn_table_eq, NULL);
20444
20445   /* Generate the initial DIE for the .debug section.  Note that the (string)
20446      value given in the DW_AT_name attribute of the DW_TAG_compile_unit DIE
20447      will (typically) be a relative pathname and that this pathname should be
20448      taken as being relative to the directory from which the compiler was
20449      invoked when the given (base) source file was compiled.  We will fill
20450      in this value in dwarf2out_finish.  */
20451   comp_unit_die = gen_compile_unit_die (NULL);
20452
20453   incomplete_types = VEC_alloc (tree, gc, 64);
20454
20455   used_rtx_array = VEC_alloc (rtx, gc, 32);
20456
20457   debug_info_section = get_section (DEBUG_INFO_SECTION,
20458                                     SECTION_DEBUG, NULL);
20459   debug_abbrev_section = get_section (DEBUG_ABBREV_SECTION,
20460                                       SECTION_DEBUG, NULL);
20461   debug_aranges_section = get_section (DEBUG_ARANGES_SECTION,
20462                                        SECTION_DEBUG, NULL);
20463   debug_macinfo_section = get_section (DEBUG_MACINFO_SECTION,
20464                                        SECTION_DEBUG, NULL);
20465   debug_line_section = get_section (DEBUG_LINE_SECTION,
20466                                     SECTION_DEBUG, NULL);
20467   debug_loc_section = get_section (DEBUG_LOC_SECTION,
20468                                    SECTION_DEBUG, NULL);
20469   debug_pubnames_section = get_section (DEBUG_PUBNAMES_SECTION,
20470                                         SECTION_DEBUG, NULL);
20471   debug_pubtypes_section = get_section (DEBUG_PUBTYPES_SECTION,
20472                                         SECTION_DEBUG, NULL);
20473   debug_dcall_section = get_section (DEBUG_DCALL_SECTION,
20474                                      SECTION_DEBUG, NULL);
20475   debug_vcall_section = get_section (DEBUG_VCALL_SECTION,
20476                                      SECTION_DEBUG, NULL);
20477   debug_str_section = get_section (DEBUG_STR_SECTION,
20478                                    DEBUG_STR_SECTION_FLAGS, NULL);
20479   debug_ranges_section = get_section (DEBUG_RANGES_SECTION,
20480                                       SECTION_DEBUG, NULL);
20481   debug_frame_section = get_section (DEBUG_FRAME_SECTION,
20482                                      SECTION_DEBUG, NULL);
20483
20484   ASM_GENERATE_INTERNAL_LABEL (text_end_label, TEXT_END_LABEL, 0);
20485   ASM_GENERATE_INTERNAL_LABEL (abbrev_section_label,
20486                                DEBUG_ABBREV_SECTION_LABEL, 0);
20487   ASM_GENERATE_INTERNAL_LABEL (text_section_label, TEXT_SECTION_LABEL, 0);
20488   ASM_GENERATE_INTERNAL_LABEL (cold_text_section_label,
20489                                COLD_TEXT_SECTION_LABEL, 0);
20490   ASM_GENERATE_INTERNAL_LABEL (cold_end_label, COLD_END_LABEL, 0);
20491
20492   ASM_GENERATE_INTERNAL_LABEL (debug_info_section_label,
20493                                DEBUG_INFO_SECTION_LABEL, 0);
20494   ASM_GENERATE_INTERNAL_LABEL (debug_line_section_label,
20495                                DEBUG_LINE_SECTION_LABEL, 0);
20496   ASM_GENERATE_INTERNAL_LABEL (ranges_section_label,
20497                                DEBUG_RANGES_SECTION_LABEL, 0);
20498   switch_to_section (debug_abbrev_section);
20499   ASM_OUTPUT_LABEL (asm_out_file, abbrev_section_label);
20500   switch_to_section (debug_info_section);
20501   ASM_OUTPUT_LABEL (asm_out_file, debug_info_section_label);
20502   switch_to_section (debug_line_section);
20503   ASM_OUTPUT_LABEL (asm_out_file, debug_line_section_label);
20504
20505   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
20506     {
20507       switch_to_section (debug_macinfo_section);
20508       ASM_GENERATE_INTERNAL_LABEL (macinfo_section_label,
20509                                    DEBUG_MACINFO_SECTION_LABEL, 0);
20510       ASM_OUTPUT_LABEL (asm_out_file, macinfo_section_label);
20511     }
20512
20513   switch_to_section (text_section);
20514   ASM_OUTPUT_LABEL (asm_out_file, text_section_label);
20515   if (flag_reorder_blocks_and_partition)
20516     {
20517       cold_text_section = unlikely_text_section ();
20518       switch_to_section (cold_text_section);
20519       ASM_OUTPUT_LABEL (asm_out_file, cold_text_section_label);
20520     }
20521
20522 }
20523
20524 /* Called before cgraph_optimize starts outputtting functions, variables
20525    and toplevel asms into assembly.  */
20526
20527 static void
20528 dwarf2out_assembly_start (void)
20529 {
20530   if (HAVE_GAS_CFI_SECTIONS_DIRECTIVE && dwarf2out_do_cfi_asm ())
20531     {
20532 #ifndef TARGET_UNWIND_INFO
20533       if (USING_SJLJ_EXCEPTIONS || (!flag_unwind_tables && !flag_exceptions))
20534 #endif
20535         fprintf (asm_out_file, "\t.cfi_sections\t.debug_frame\n");
20536     }
20537 }
20538
20539 /* A helper function for dwarf2out_finish called through
20540    htab_traverse.  Emit one queued .debug_str string.  */
20541
20542 static int
20543 output_indirect_string (void **h, void *v ATTRIBUTE_UNUSED)
20544 {
20545   struct indirect_string_node *node = (struct indirect_string_node *) *h;
20546
20547   if (node->label && node->refcount)
20548     {
20549       switch_to_section (debug_str_section);
20550       ASM_OUTPUT_LABEL (asm_out_file, node->label);
20551       assemble_string (node->str, strlen (node->str) + 1);
20552     }
20553
20554   return 1;
20555 }
20556
20557 #if ENABLE_ASSERT_CHECKING
20558 /* Verify that all marks are clear.  */
20559
20560 static void
20561 verify_marks_clear (dw_die_ref die)
20562 {
20563   dw_die_ref c;
20564
20565   gcc_assert (! die->die_mark);
20566   FOR_EACH_CHILD (die, c, verify_marks_clear (c));
20567 }
20568 #endif /* ENABLE_ASSERT_CHECKING */
20569
20570 /* Clear the marks for a die and its children.
20571    Be cool if the mark isn't set.  */
20572
20573 static void
20574 prune_unmark_dies (dw_die_ref die)
20575 {
20576   dw_die_ref c;
20577
20578   if (die->die_mark)
20579     die->die_mark = 0;
20580   FOR_EACH_CHILD (die, c, prune_unmark_dies (c));
20581 }
20582
20583 /* Given DIE that we're marking as used, find any other dies
20584    it references as attributes and mark them as used.  */
20585
20586 static void
20587 prune_unused_types_walk_attribs (dw_die_ref die)
20588 {
20589   dw_attr_ref a;
20590   unsigned ix;
20591
20592   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
20593     {
20594       if (a->dw_attr_val.val_class == dw_val_class_die_ref)
20595         {
20596           /* A reference to another DIE.
20597              Make sure that it will get emitted.
20598              If it was broken out into a comdat group, don't follow it.  */
20599           if (dwarf_version < 4
20600               || a->dw_attr == DW_AT_specification
20601               || a->dw_attr_val.v.val_die_ref.die->die_id.die_type_node == NULL)
20602             prune_unused_types_mark (a->dw_attr_val.v.val_die_ref.die, 1);
20603         }
20604       /* Set the string's refcount to 0 so that prune_unused_types_mark
20605          accounts properly for it.  */
20606       if (AT_class (a) == dw_val_class_str)
20607         a->dw_attr_val.v.val_str->refcount = 0;
20608     }
20609 }
20610
20611
20612 /* Mark DIE as being used.  If DOKIDS is true, then walk down
20613    to DIE's children.  */
20614
20615 static void
20616 prune_unused_types_mark (dw_die_ref die, int dokids)
20617 {
20618   dw_die_ref c;
20619
20620   if (die->die_mark == 0)
20621     {
20622       /* We haven't done this node yet.  Mark it as used.  */
20623       die->die_mark = 1;
20624
20625       /* We also have to mark its parents as used.
20626          (But we don't want to mark our parents' kids due to this.)  */
20627       if (die->die_parent)
20628         prune_unused_types_mark (die->die_parent, 0);
20629
20630       /* Mark any referenced nodes.  */
20631       prune_unused_types_walk_attribs (die);
20632
20633       /* If this node is a specification,
20634          also mark the definition, if it exists.  */
20635       if (get_AT_flag (die, DW_AT_declaration) && die->die_definition)
20636         prune_unused_types_mark (die->die_definition, 1);
20637     }
20638
20639   if (dokids && die->die_mark != 2)
20640     {
20641       /* We need to walk the children, but haven't done so yet.
20642          Remember that we've walked the kids.  */
20643       die->die_mark = 2;
20644
20645       /* If this is an array type, we need to make sure our
20646          kids get marked, even if they're types.  If we're
20647          breaking out types into comdat sections, do this
20648          for all type definitions.  */
20649       if (die->die_tag == DW_TAG_array_type
20650           || (dwarf_version >= 4
20651               && is_type_die (die) && ! is_declaration_die (die)))
20652         FOR_EACH_CHILD (die, c, prune_unused_types_mark (c, 1));
20653       else
20654         FOR_EACH_CHILD (die, c, prune_unused_types_walk (c));
20655     }
20656 }
20657
20658 /* For local classes, look if any static member functions were emitted
20659    and if so, mark them.  */
20660
20661 static void
20662 prune_unused_types_walk_local_classes (dw_die_ref die)
20663 {
20664   dw_die_ref c;
20665
20666   if (die->die_mark == 2)
20667     return;
20668
20669   switch (die->die_tag)
20670     {
20671     case DW_TAG_structure_type:
20672     case DW_TAG_union_type:
20673     case DW_TAG_class_type:
20674       break;
20675
20676     case DW_TAG_subprogram:
20677       if (!get_AT_flag (die, DW_AT_declaration)
20678           || die->die_definition != NULL)
20679         prune_unused_types_mark (die, 1);
20680       return;
20681
20682     default:
20683       return;
20684     }
20685
20686   /* Mark children.  */
20687   FOR_EACH_CHILD (die, c, prune_unused_types_walk_local_classes (c));
20688 }
20689
20690 /* Walk the tree DIE and mark types that we actually use.  */
20691
20692 static void
20693 prune_unused_types_walk (dw_die_ref die)
20694 {
20695   dw_die_ref c;
20696
20697   /* Don't do anything if this node is already marked and
20698      children have been marked as well.  */
20699   if (die->die_mark == 2)
20700     return;
20701
20702   switch (die->die_tag)
20703     {
20704     case DW_TAG_structure_type:
20705     case DW_TAG_union_type:
20706     case DW_TAG_class_type:
20707       if (die->die_perennial_p)
20708         break;
20709
20710       for (c = die->die_parent; c; c = c->die_parent)
20711         if (c->die_tag == DW_TAG_subprogram)
20712           break;
20713
20714       /* Finding used static member functions inside of classes
20715          is needed just for local classes, because for other classes
20716          static member function DIEs with DW_AT_specification
20717          are emitted outside of the DW_TAG_*_type.  If we ever change
20718          it, we'd need to call this even for non-local classes.  */
20719       if (c)
20720         prune_unused_types_walk_local_classes (die);
20721
20722       /* It's a type node --- don't mark it.  */
20723       return;
20724
20725     case DW_TAG_const_type:
20726     case DW_TAG_packed_type:
20727     case DW_TAG_pointer_type:
20728     case DW_TAG_reference_type:
20729     case DW_TAG_volatile_type:
20730     case DW_TAG_typedef:
20731     case DW_TAG_array_type:
20732     case DW_TAG_interface_type:
20733     case DW_TAG_friend:
20734     case DW_TAG_variant_part:
20735     case DW_TAG_enumeration_type:
20736     case DW_TAG_subroutine_type:
20737     case DW_TAG_string_type:
20738     case DW_TAG_set_type:
20739     case DW_TAG_subrange_type:
20740     case DW_TAG_ptr_to_member_type:
20741     case DW_TAG_file_type:
20742       if (die->die_perennial_p)
20743         break;
20744
20745       /* It's a type node --- don't mark it.  */
20746       return;
20747
20748     default:
20749       /* Mark everything else.  */
20750       break;
20751   }
20752
20753   if (die->die_mark == 0)
20754     {
20755       die->die_mark = 1;
20756
20757       /* Now, mark any dies referenced from here.  */
20758       prune_unused_types_walk_attribs (die);
20759     }
20760
20761   die->die_mark = 2;
20762
20763   /* Mark children.  */
20764   FOR_EACH_CHILD (die, c, prune_unused_types_walk (c));
20765 }
20766
20767 /* Increment the string counts on strings referred to from DIE's
20768    attributes.  */
20769
20770 static void
20771 prune_unused_types_update_strings (dw_die_ref die)
20772 {
20773   dw_attr_ref a;
20774   unsigned ix;
20775
20776   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
20777     if (AT_class (a) == dw_val_class_str)
20778       {
20779         struct indirect_string_node *s = a->dw_attr_val.v.val_str;
20780         s->refcount++;
20781         /* Avoid unnecessarily putting strings that are used less than
20782            twice in the hash table.  */
20783         if (s->refcount
20784             == ((DEBUG_STR_SECTION_FLAGS & SECTION_MERGE) ? 1 : 2))
20785           {
20786             void ** slot;
20787             slot = htab_find_slot_with_hash (debug_str_hash, s->str,
20788                                              htab_hash_string (s->str),
20789                                              INSERT);
20790             gcc_assert (*slot == NULL);
20791             *slot = s;
20792           }
20793       }
20794 }
20795
20796 /* Remove from the tree DIE any dies that aren't marked.  */
20797
20798 static void
20799 prune_unused_types_prune (dw_die_ref die)
20800 {
20801   dw_die_ref c;
20802
20803   gcc_assert (die->die_mark);
20804   prune_unused_types_update_strings (die);
20805
20806   if (! die->die_child)
20807     return;
20808
20809   c = die->die_child;
20810   do {
20811     dw_die_ref prev = c;
20812     for (c = c->die_sib; ! c->die_mark; c = c->die_sib)
20813       if (c == die->die_child)
20814         {
20815           /* No marked children between 'prev' and the end of the list.  */
20816           if (prev == c)
20817             /* No marked children at all.  */
20818             die->die_child = NULL;
20819           else
20820             {
20821               prev->die_sib = c->die_sib;
20822               die->die_child = prev;
20823             }
20824           return;
20825         }
20826
20827     if (c != prev->die_sib)
20828       prev->die_sib = c;
20829     prune_unused_types_prune (c);
20830   } while (c != die->die_child);
20831 }
20832
20833 /* A helper function for dwarf2out_finish called through
20834    htab_traverse.  Clear .debug_str strings that we haven't already
20835    decided to emit.  */
20836
20837 static int
20838 prune_indirect_string (void **h, void *v ATTRIBUTE_UNUSED)
20839 {
20840   struct indirect_string_node *node = (struct indirect_string_node *) *h;
20841
20842   if (!node->label || !node->refcount)
20843     htab_clear_slot (debug_str_hash, h);
20844
20845   return 1;
20846 }
20847
20848 /* Remove dies representing declarations that we never use.  */
20849
20850 static void
20851 prune_unused_types (void)
20852 {
20853   unsigned int i;
20854   limbo_die_node *node;
20855   comdat_type_node *ctnode;
20856   pubname_ref pub;
20857   dcall_entry *dcall;
20858
20859 #if ENABLE_ASSERT_CHECKING
20860   /* All the marks should already be clear.  */
20861   verify_marks_clear (comp_unit_die);
20862   for (node = limbo_die_list; node; node = node->next)
20863     verify_marks_clear (node->die);
20864   for (ctnode = comdat_type_list; ctnode; ctnode = ctnode->next)
20865     verify_marks_clear (ctnode->root_die);
20866 #endif /* ENABLE_ASSERT_CHECKING */
20867
20868   /* Mark types that are used in global variables.  */
20869   premark_types_used_by_global_vars ();
20870
20871   /* Set the mark on nodes that are actually used.  */
20872   prune_unused_types_walk (comp_unit_die);
20873   for (node = limbo_die_list; node; node = node->next)
20874     prune_unused_types_walk (node->die);
20875   for (ctnode = comdat_type_list; ctnode; ctnode = ctnode->next)
20876     {
20877       prune_unused_types_walk (ctnode->root_die);
20878       prune_unused_types_mark (ctnode->type_die, 1);
20879     }
20880
20881   /* Also set the mark on nodes referenced from the
20882      pubname_table or arange_table.  */
20883   for (i = 0; VEC_iterate (pubname_entry, pubname_table, i, pub); i++)
20884     prune_unused_types_mark (pub->die, 1);
20885   for (i = 0; i < arange_table_in_use; i++)
20886     prune_unused_types_mark (arange_table[i], 1);
20887
20888   /* Mark nodes referenced from the direct call table.  */
20889   for (i = 0; VEC_iterate (dcall_entry, dcall_table, i, dcall); i++)
20890     prune_unused_types_mark (dcall->targ_die, 1);
20891
20892   /* Get rid of nodes that aren't marked; and update the string counts.  */
20893   if (debug_str_hash && debug_str_hash_forced)
20894     htab_traverse (debug_str_hash, prune_indirect_string, NULL);
20895   else if (debug_str_hash)
20896     htab_empty (debug_str_hash);
20897   prune_unused_types_prune (comp_unit_die);
20898   for (node = limbo_die_list; node; node = node->next)
20899     prune_unused_types_prune (node->die);
20900   for (ctnode = comdat_type_list; ctnode; ctnode = ctnode->next)
20901     prune_unused_types_prune (ctnode->root_die);
20902
20903   /* Leave the marks clear.  */
20904   prune_unmark_dies (comp_unit_die);
20905   for (node = limbo_die_list; node; node = node->next)
20906     prune_unmark_dies (node->die);
20907   for (ctnode = comdat_type_list; ctnode; ctnode = ctnode->next)
20908     prune_unmark_dies (ctnode->root_die);
20909 }
20910
20911 /* Set the parameter to true if there are any relative pathnames in
20912    the file table.  */
20913 static int
20914 file_table_relative_p (void ** slot, void *param)
20915 {
20916   bool *p = (bool *) param;
20917   struct dwarf_file_data *d = (struct dwarf_file_data *) *slot;
20918   if (!IS_ABSOLUTE_PATH (d->filename))
20919     {
20920       *p = true;
20921       return 0;
20922     }
20923   return 1;
20924 }
20925
20926 /* Routines to manipulate hash table of comdat type units.  */
20927
20928 static hashval_t
20929 htab_ct_hash (const void *of)
20930 {
20931   hashval_t h;
20932   const comdat_type_node *const type_node = (const comdat_type_node *) of;
20933
20934   memcpy (&h, type_node->signature, sizeof (h));
20935   return h;
20936 }
20937
20938 static int
20939 htab_ct_eq (const void *of1, const void *of2)
20940 {
20941   const comdat_type_node *const type_node_1 = (const comdat_type_node *) of1;
20942   const comdat_type_node *const type_node_2 = (const comdat_type_node *) of2;
20943
20944   return (! memcmp (type_node_1->signature, type_node_2->signature,
20945                     DWARF_TYPE_SIGNATURE_SIZE));
20946 }
20947
20948 /* Move a DW_AT_MIPS_linkage_name attribute just added to dw_die_ref
20949    to the location it would have been added, should we know its
20950    DECL_ASSEMBLER_NAME when we added other attributes.  This will
20951    probably improve compactness of debug info, removing equivalent
20952    abbrevs, and hide any differences caused by deferring the
20953    computation of the assembler name, triggered by e.g. PCH.  */
20954
20955 static inline void
20956 move_linkage_attr (dw_die_ref die)
20957 {
20958   unsigned ix = VEC_length (dw_attr_node, die->die_attr);
20959   dw_attr_node linkage = *VEC_index (dw_attr_node, die->die_attr, ix - 1);
20960
20961   gcc_assert (linkage.dw_attr == DW_AT_MIPS_linkage_name);
20962
20963   while (--ix > 0)
20964     {
20965       dw_attr_node *prev = VEC_index (dw_attr_node, die->die_attr, ix - 1);
20966
20967       if (prev->dw_attr == DW_AT_decl_line || prev->dw_attr == DW_AT_name)
20968         break;
20969     }
20970
20971   if (ix != VEC_length (dw_attr_node, die->die_attr) - 1)
20972     {
20973       VEC_pop (dw_attr_node, die->die_attr);
20974       VEC_quick_insert (dw_attr_node, die->die_attr, ix, &linkage);
20975     }
20976 }
20977
20978 /* Helper function for resolve_addr, attempt to resolve
20979    one CONST_STRING, return non-zero if not successful.  Similarly verify that
20980    SYMBOL_REFs refer to variables emitted in the current CU.  */
20981
20982 static int
20983 resolve_one_addr (rtx *addr, void *data ATTRIBUTE_UNUSED)
20984 {
20985   rtx rtl = *addr;
20986
20987   if (GET_CODE (rtl) == CONST_STRING)
20988     {
20989       size_t len = strlen (XSTR (rtl, 0)) + 1;
20990       tree t = build_string (len, XSTR (rtl, 0));
20991       tree tlen = build_int_cst (NULL_TREE, len - 1);
20992       TREE_TYPE (t)
20993         = build_array_type (char_type_node, build_index_type (tlen));
20994       rtl = lookup_constant_def (t);
20995       if (!rtl || !MEM_P (rtl))
20996         return 1;
20997       rtl = XEXP (rtl, 0);
20998       VEC_safe_push (rtx, gc, used_rtx_array, rtl);
20999       *addr = rtl;
21000       return 0;
21001     }
21002
21003   if (GET_CODE (rtl) == SYMBOL_REF
21004       && SYMBOL_REF_DECL (rtl)
21005       && TREE_CODE (SYMBOL_REF_DECL (rtl)) == VAR_DECL
21006       && !TREE_ASM_WRITTEN (SYMBOL_REF_DECL (rtl)))
21007     return 1;
21008
21009   if (GET_CODE (rtl) == CONST
21010       && for_each_rtx (&XEXP (rtl, 0), resolve_one_addr, NULL))
21011     return 1;
21012
21013   return 0;
21014 }
21015
21016 /* Helper function for resolve_addr, handle one location
21017    expression, return false if at least one CONST_STRING or SYMBOL_REF in
21018    the location list couldn't be resolved.  */
21019
21020 static bool
21021 resolve_addr_in_expr (dw_loc_descr_ref loc)
21022 {
21023   for (; loc; loc = loc->dw_loc_next)
21024     if ((loc->dw_loc_opc == DW_OP_addr
21025          && resolve_one_addr (&loc->dw_loc_oprnd1.v.val_addr, NULL))
21026         || (loc->dw_loc_opc == DW_OP_implicit_value
21027             && loc->dw_loc_oprnd2.val_class == dw_val_class_addr
21028             && resolve_one_addr (&loc->dw_loc_oprnd2.v.val_addr, NULL)))
21029       return false;
21030   return true;
21031 }
21032
21033 /* Resolve DW_OP_addr and DW_AT_const_value CONST_STRING arguments to
21034    an address in .rodata section if the string literal is emitted there,
21035    or remove the containing location list or replace DW_AT_const_value
21036    with DW_AT_location and empty location expression, if it isn't found
21037    in .rodata.  Similarly for SYMBOL_REFs, keep only those that refer
21038    to something that has been emitted in the current CU.  */
21039
21040 static void
21041 resolve_addr (dw_die_ref die)
21042 {
21043   dw_die_ref c;
21044   dw_attr_ref a;
21045   dw_loc_list_ref *curr;
21046   unsigned ix;
21047
21048   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
21049     switch (AT_class (a))
21050       {
21051       case dw_val_class_loc_list:
21052         curr = AT_loc_list_ptr (a);
21053         while (*curr)
21054           {
21055             if (!resolve_addr_in_expr ((*curr)->expr))
21056               {
21057                 dw_loc_list_ref next = (*curr)->dw_loc_next;
21058                 if (next && (*curr)->ll_symbol)
21059                   {
21060                     gcc_assert (!next->ll_symbol);
21061                     next->ll_symbol = (*curr)->ll_symbol;
21062                   }
21063                 *curr = next;
21064               }
21065             else
21066               curr = &(*curr)->dw_loc_next;
21067           }
21068         if (!AT_loc_list (a))
21069           {
21070             remove_AT (die, a->dw_attr);
21071             ix--;
21072           }
21073         break;
21074       case dw_val_class_loc:
21075         if (!resolve_addr_in_expr (AT_loc (a)))
21076           {
21077             remove_AT (die, a->dw_attr);
21078             ix--;
21079           }
21080         break;
21081       case dw_val_class_addr:
21082         if (a->dw_attr == DW_AT_const_value
21083             && resolve_one_addr (&a->dw_attr_val.v.val_addr, NULL))
21084           {
21085             remove_AT (die, a->dw_attr);
21086             ix--;
21087           }
21088         break;
21089       default:
21090         break;
21091       }
21092
21093   FOR_EACH_CHILD (die, c, resolve_addr (c));
21094 }
21095
21096 /* Output stuff that dwarf requires at the end of every file,
21097    and generate the DWARF-2 debugging info.  */
21098
21099 static void
21100 dwarf2out_finish (const char *filename)
21101 {
21102   limbo_die_node *node, *next_node;
21103   comdat_type_node *ctnode;
21104   htab_t comdat_type_table;
21105   dw_die_ref die = 0;
21106   unsigned int i;
21107
21108   gen_remaining_tmpl_value_param_die_attribute ();
21109
21110   /* Add the name for the main input file now.  We delayed this from
21111      dwarf2out_init to avoid complications with PCH.  */
21112   add_name_attribute (comp_unit_die, remap_debug_filename (filename));
21113   if (!IS_ABSOLUTE_PATH (filename))
21114     add_comp_dir_attribute (comp_unit_die);
21115   else if (get_AT (comp_unit_die, DW_AT_comp_dir) == NULL)
21116     {
21117       bool p = false;
21118       htab_traverse (file_table, file_table_relative_p, &p);
21119       if (p)
21120         add_comp_dir_attribute (comp_unit_die);
21121     }
21122
21123   for (i = 0; i < VEC_length (deferred_locations, deferred_locations_list); i++)
21124     {
21125       add_location_or_const_value_attribute (
21126         VEC_index (deferred_locations, deferred_locations_list, i)->die,
21127         VEC_index (deferred_locations, deferred_locations_list, i)->variable,
21128         DW_AT_location);
21129     }
21130
21131   /* Traverse the limbo die list, and add parent/child links.  The only
21132      dies without parents that should be here are concrete instances of
21133      inline functions, and the comp_unit_die.  We can ignore the comp_unit_die.
21134      For concrete instances, we can get the parent die from the abstract
21135      instance.  */
21136   for (node = limbo_die_list; node; node = next_node)
21137     {
21138       next_node = node->next;
21139       die = node->die;
21140
21141       if (die->die_parent == NULL)
21142         {
21143           dw_die_ref origin = get_AT_ref (die, DW_AT_abstract_origin);
21144
21145           if (origin)
21146             add_child_die (origin->die_parent, die);
21147           else if (die == comp_unit_die)
21148             ;
21149           else if (errorcount > 0 || sorrycount > 0)
21150             /* It's OK to be confused by errors in the input.  */
21151             add_child_die (comp_unit_die, die);
21152           else
21153             {
21154               /* In certain situations, the lexical block containing a
21155                  nested function can be optimized away, which results
21156                  in the nested function die being orphaned.  Likewise
21157                  with the return type of that nested function.  Force
21158                  this to be a child of the containing function.
21159
21160                  It may happen that even the containing function got fully
21161                  inlined and optimized out.  In that case we are lost and
21162                  assign the empty child.  This should not be big issue as
21163                  the function is likely unreachable too.  */
21164               tree context = NULL_TREE;
21165
21166               gcc_assert (node->created_for);
21167
21168               if (DECL_P (node->created_for))
21169                 context = DECL_CONTEXT (node->created_for);
21170               else if (TYPE_P (node->created_for))
21171                 context = TYPE_CONTEXT (node->created_for);
21172
21173               gcc_assert (context
21174                           && (TREE_CODE (context) == FUNCTION_DECL
21175                               || TREE_CODE (context) == NAMESPACE_DECL));
21176
21177               origin = lookup_decl_die (context);
21178               if (origin)
21179                 add_child_die (origin, die);
21180               else
21181                 add_child_die (comp_unit_die, die);
21182             }
21183         }
21184     }
21185
21186   limbo_die_list = NULL;
21187
21188   resolve_addr (comp_unit_die);
21189
21190   for (node = deferred_asm_name; node; node = node->next)
21191     {
21192       tree decl = node->created_for;
21193       if (DECL_ASSEMBLER_NAME (decl) != DECL_NAME (decl))
21194         {
21195           add_AT_string (node->die, DW_AT_MIPS_linkage_name,
21196                          IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl)));
21197           move_linkage_attr (node->die);
21198         }
21199     }
21200
21201   deferred_asm_name = NULL;
21202
21203   /* Walk through the list of incomplete types again, trying once more to
21204      emit full debugging info for them.  */
21205   retry_incomplete_types ();
21206
21207   if (flag_eliminate_unused_debug_types)
21208     prune_unused_types ();
21209
21210   /* Generate separate CUs for each of the include files we've seen.
21211      They will go into limbo_die_list.  */
21212   if (flag_eliminate_dwarf2_dups && dwarf_version < 4)
21213     break_out_includes (comp_unit_die);
21214
21215   /* Generate separate COMDAT sections for type DIEs. */
21216   if (dwarf_version >= 4)
21217     {
21218       break_out_comdat_types (comp_unit_die);
21219
21220       /* Each new type_unit DIE was added to the limbo die list when created.
21221          Since these have all been added to comdat_type_list, clear the
21222          limbo die list.  */
21223       limbo_die_list = NULL;
21224
21225       /* For each new comdat type unit, copy declarations for incomplete
21226          types to make the new unit self-contained (i.e., no direct
21227          references to the main compile unit).  */
21228       for (ctnode = comdat_type_list; ctnode != NULL; ctnode = ctnode->next)
21229         copy_decls_for_unworthy_types (ctnode->root_die);
21230       copy_decls_for_unworthy_types (comp_unit_die);
21231
21232       /* In the process of copying declarations from one unit to another,
21233          we may have left some declarations behind that are no longer
21234          referenced.  Prune them.  */
21235       prune_unused_types ();
21236     }
21237
21238   /* Traverse the DIE's and add add sibling attributes to those DIE's
21239      that have children.  */
21240   add_sibling_attributes (comp_unit_die);
21241   for (node = limbo_die_list; node; node = node->next)
21242     add_sibling_attributes (node->die);
21243   for (ctnode = comdat_type_list; ctnode != NULL; ctnode = ctnode->next)
21244     add_sibling_attributes (ctnode->root_die);
21245
21246   /* Output a terminator label for the .text section.  */
21247   switch_to_section (text_section);
21248   targetm.asm_out.internal_label (asm_out_file, TEXT_END_LABEL, 0);
21249   if (flag_reorder_blocks_and_partition)
21250     {
21251       switch_to_section (unlikely_text_section ());
21252       targetm.asm_out.internal_label (asm_out_file, COLD_END_LABEL, 0);
21253     }
21254
21255   /* We can only use the low/high_pc attributes if all of the code was
21256      in .text.  */
21257   if (!have_multiple_function_sections
21258       || !(dwarf_version >= 3 || !dwarf_strict))
21259     {
21260       add_AT_lbl_id (comp_unit_die, DW_AT_low_pc, text_section_label);
21261       add_AT_lbl_id (comp_unit_die, DW_AT_high_pc, text_end_label);
21262     }
21263
21264   else
21265     {
21266       unsigned fde_idx = 0;
21267       bool range_list_added = false;
21268
21269       /* We need to give .debug_loc and .debug_ranges an appropriate
21270          "base address".  Use zero so that these addresses become
21271          absolute.  Historically, we've emitted the unexpected
21272          DW_AT_entry_pc instead of DW_AT_low_pc for this purpose.
21273          Emit both to give time for other tools to adapt.  */
21274       add_AT_addr (comp_unit_die, DW_AT_low_pc, const0_rtx);
21275       add_AT_addr (comp_unit_die, DW_AT_entry_pc, const0_rtx);
21276
21277       if (text_section_used)
21278         add_ranges_by_labels (comp_unit_die, text_section_label,
21279                               text_end_label, &range_list_added);
21280       if (flag_reorder_blocks_and_partition && cold_text_section_used)
21281         add_ranges_by_labels (comp_unit_die, cold_text_section_label,
21282                               cold_end_label, &range_list_added);
21283
21284       for (fde_idx = 0; fde_idx < fde_table_in_use; fde_idx++)
21285         {
21286           dw_fde_ref fde = &fde_table[fde_idx];
21287
21288           if (fde->dw_fde_switched_sections)
21289             {
21290               if (!fde->in_std_section)
21291                 add_ranges_by_labels (comp_unit_die,
21292                                       fde->dw_fde_hot_section_label,
21293                                       fde->dw_fde_hot_section_end_label,
21294                                       &range_list_added);
21295               if (!fde->cold_in_std_section)
21296                 add_ranges_by_labels (comp_unit_die,
21297                                       fde->dw_fde_unlikely_section_label,
21298                                       fde->dw_fde_unlikely_section_end_label,
21299                                       &range_list_added);
21300             }
21301           else if (!fde->in_std_section)
21302             add_ranges_by_labels (comp_unit_die, fde->dw_fde_begin,
21303                                   fde->dw_fde_end, &range_list_added);
21304         }
21305
21306       if (range_list_added)
21307         add_ranges (NULL);
21308     }
21309
21310   /* Output location list section if necessary.  */
21311   if (have_location_lists)
21312     {
21313       /* Output the location lists info.  */
21314       switch_to_section (debug_loc_section);
21315       ASM_GENERATE_INTERNAL_LABEL (loc_section_label,
21316                                    DEBUG_LOC_SECTION_LABEL, 0);
21317       ASM_OUTPUT_LABEL (asm_out_file, loc_section_label);
21318       output_location_lists (die);
21319     }
21320
21321   if (debug_info_level >= DINFO_LEVEL_NORMAL)
21322     add_AT_lineptr (comp_unit_die, DW_AT_stmt_list,
21323                     debug_line_section_label);
21324
21325   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
21326     add_AT_macptr (comp_unit_die, DW_AT_macro_info, macinfo_section_label);
21327
21328   /* Output all of the compilation units.  We put the main one last so that
21329      the offsets are available to output_pubnames.  */
21330   for (node = limbo_die_list; node; node = node->next)
21331     output_comp_unit (node->die, 0);
21332
21333   comdat_type_table = htab_create (100, htab_ct_hash, htab_ct_eq, NULL);
21334   for (ctnode = comdat_type_list; ctnode != NULL; ctnode = ctnode->next)
21335     {
21336       void **slot = htab_find_slot (comdat_type_table, ctnode, INSERT);
21337
21338       /* Don't output duplicate types.  */
21339       if (*slot != HTAB_EMPTY_ENTRY)
21340         continue;
21341
21342       /* Add a pointer to the line table for the main compilation unit
21343          so that the debugger can make sense of DW_AT_decl_file
21344          attributes.  */
21345       if (debug_info_level >= DINFO_LEVEL_NORMAL)
21346         add_AT_lineptr (ctnode->root_die, DW_AT_stmt_list,
21347                         debug_line_section_label);
21348
21349       output_comdat_type_unit (ctnode);
21350       *slot = ctnode;
21351     }
21352   htab_delete (comdat_type_table);
21353
21354   /* Output the main compilation unit if non-empty or if .debug_macinfo
21355      has been emitted.  */
21356   output_comp_unit (comp_unit_die, debug_info_level >= DINFO_LEVEL_VERBOSE);
21357
21358   /* Output the abbreviation table.  */
21359   switch_to_section (debug_abbrev_section);
21360   output_abbrev_section ();
21361
21362   /* Output public names table if necessary.  */
21363   if (!VEC_empty (pubname_entry, pubname_table))
21364     {
21365       switch_to_section (debug_pubnames_section);
21366       output_pubnames (pubname_table);
21367     }
21368
21369   /* Output public types table if necessary.  */
21370   /* ??? Only defined by DWARF3, but emitted by Darwin for DWARF2.
21371      It shouldn't hurt to emit it always, since pure DWARF2 consumers
21372      simply won't look for the section.  */
21373   if (!VEC_empty (pubname_entry, pubtype_table))
21374     {
21375       switch_to_section (debug_pubtypes_section);
21376       output_pubnames (pubtype_table);
21377     }
21378
21379   /* Output direct and virtual call tables if necessary.  */
21380   if (!VEC_empty (dcall_entry, dcall_table))
21381     {
21382       switch_to_section (debug_dcall_section);
21383       output_dcall_table ();
21384     }
21385   if (!VEC_empty (vcall_entry, vcall_table))
21386     {
21387       switch_to_section (debug_vcall_section);
21388       output_vcall_table ();
21389     }
21390
21391   /* Output the address range information.  We only put functions in the arange
21392      table, so don't write it out if we don't have any.  */
21393   if (fde_table_in_use)
21394     {
21395       switch_to_section (debug_aranges_section);
21396       output_aranges ();
21397     }
21398
21399   /* Output ranges section if necessary.  */
21400   if (ranges_table_in_use)
21401     {
21402       switch_to_section (debug_ranges_section);
21403       ASM_OUTPUT_LABEL (asm_out_file, ranges_section_label);
21404       output_ranges ();
21405     }
21406
21407   /* Output the source line correspondence table.  We must do this
21408      even if there is no line information.  Otherwise, on an empty
21409      translation unit, we will generate a present, but empty,
21410      .debug_info section.  IRIX 6.5 `nm' will then complain when
21411      examining the file.  This is done late so that any filenames
21412      used by the debug_info section are marked as 'used'.  */
21413   if (! DWARF2_ASM_LINE_DEBUG_INFO)
21414     {
21415       switch_to_section (debug_line_section);
21416       output_line_info ();
21417     }
21418
21419   /* Have to end the macro section.  */
21420   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
21421     {
21422       switch_to_section (debug_macinfo_section);
21423       dw2_asm_output_data (1, 0, "End compilation unit");
21424     }
21425
21426   /* If we emitted any DW_FORM_strp form attribute, output the string
21427      table too.  */
21428   if (debug_str_hash)
21429     htab_traverse (debug_str_hash, output_indirect_string, NULL);
21430 }
21431 #else
21432
21433 /* This should never be used, but its address is needed for comparisons.  */
21434 const struct gcc_debug_hooks dwarf2_debug_hooks =
21435 {
21436   0,            /* init */
21437   0,            /* finish */
21438   0,            /* assembly_start */
21439   0,            /* define */
21440   0,            /* undef */
21441   0,            /* start_source_file */
21442   0,            /* end_source_file */
21443   0,            /* begin_block */
21444   0,            /* end_block */
21445   0,            /* ignore_block */
21446   0,            /* source_line */
21447   0,            /* begin_prologue */
21448   0,            /* end_prologue */
21449   0,            /* end_epilogue */
21450   0,            /* begin_function */
21451   0,            /* end_function */
21452   0,            /* function_decl */
21453   0,            /* global_decl */
21454   0,            /* type_decl */
21455   0,            /* imported_module_or_decl */
21456   0,            /* deferred_inline_function */
21457   0,            /* outlining_inline_function */
21458   0,            /* label */
21459   0,            /* handle_pch */
21460   0,            /* var_location */
21461   0,            /* switch_text_section */
21462   0,            /* direct_call */
21463   0,            /* virtual_call_token */
21464   0,            /* copy_call_info */
21465   0,            /* virtual_call */
21466   0,            /* set_name */
21467   0             /* start_end_main_source_file */
21468 };
21469
21470 #endif /* DWARF2_DEBUGGING_INFO */
21471
21472 #include "gt-dwarf2out.h"