OSDN Git Service

gcc/ChangeLog:
[pf3gnuchains/gcc-fork.git] / gcc / dwarf2out.c
1 /* Output Dwarf2 format symbol table information from GCC.
2    Copyright (C) 1992, 1993, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
3    2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
4    Free Software Foundation, Inc.
5    Contributed by Gary Funck (gary@intrepid.com).
6    Derived from DWARF 1 implementation of Ron Guilmette (rfg@monkeys.com).
7    Extensively modified by Jason Merrill (jason@cygnus.com).
8
9 This file is part of GCC.
10
11 GCC is free software; you can redistribute it and/or modify it under
12 the terms of the GNU General Public License as published by the Free
13 Software Foundation; either version 3, or (at your option) any later
14 version.
15
16 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
17 WARRANTY; without even the implied warranty of MERCHANTABILITY or
18 FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
19 for more details.
20
21 You should have received a copy of the GNU General Public License
22 along with GCC; see the file COPYING3.  If not see
23 <http://www.gnu.org/licenses/>.  */
24
25 /* TODO: Emit .debug_line header even when there are no functions, since
26            the file numbers are used by .debug_info.  Alternately, leave
27            out locations for types and decls.
28          Avoid talking about ctors and op= for PODs.
29          Factor out common prologue sequences into multiple CIEs.  */
30
31 /* The first part of this file deals with the DWARF 2 frame unwind
32    information, which is also used by the GCC efficient exception handling
33    mechanism.  The second part, controlled only by an #ifdef
34    DWARF2_DEBUGGING_INFO, deals with the other DWARF 2 debugging
35    information.  */
36
37 /* DWARF2 Abbreviation Glossary:
38
39    CFA = Canonical Frame Address
40            a fixed address on the stack which identifies a call frame.
41            We define it to be the value of SP just before the call insn.
42            The CFA register and offset, which may change during the course
43            of the function, are used to calculate its value at runtime.
44
45    CFI = Call Frame Instruction
46            an instruction for the DWARF2 abstract machine
47
48    CIE = Common Information Entry
49            information describing information common to one or more FDEs
50
51    DIE = Debugging Information Entry
52
53    FDE = Frame Description Entry
54            information describing the stack call frame, in particular,
55            how to restore registers
56
57    DW_CFA_... = DWARF2 CFA call frame instruction
58    DW_TAG_... = DWARF2 DIE tag */
59
60 #include "config.h"
61 #include "system.h"
62 #include "coretypes.h"
63 #include "tm.h"
64 #include "tree.h"
65 #include "version.h"
66 #include "flags.h"
67 #include "rtl.h"
68 #include "hard-reg-set.h"
69 #include "regs.h"
70 #include "insn-config.h"
71 #include "reload.h"
72 #include "function.h"
73 #include "output.h"
74 #include "expr.h"
75 #include "libfuncs.h"
76 #include "except.h"
77 #include "dwarf2.h"
78 #include "dwarf2out.h"
79 #include "dwarf2asm.h"
80 #include "toplev.h"
81 #include "ggc.h"
82 #include "md5.h"
83 #include "tm_p.h"
84 #include "diagnostic.h"
85 #include "debug.h"
86 #include "target.h"
87 #include "langhooks.h"
88 #include "hashtab.h"
89 #include "cgraph.h"
90 #include "input.h"
91 #include "gimple.h"
92 #include "tree-pass.h"
93 #include "tree-flow.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 && !old_cfa.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            && !old_cfa.indirect)
1060     {
1061       /* Construct a "DW_CFA_def_cfa_register <register>" instruction,
1062          indicating the CFA register has changed to <register> but the
1063          offset has not changed.  */
1064       cfi->dw_cfi_opc = DW_CFA_def_cfa_register;
1065       cfi->dw_cfi_oprnd1.dw_cfi_reg_num = loc.reg;
1066     }
1067 #endif
1068
1069   else if (loc.indirect == 0)
1070     {
1071       /* Construct a "DW_CFA_def_cfa <register> <offset>" instruction,
1072          indicating the CFA register has changed to <register> with
1073          the specified offset.  The data factoring for DW_CFA_def_cfa_sf
1074          happens in output_cfi, or in the assembler via the .cfi_def_cfa
1075          directive.  */
1076       if (loc.offset < 0)
1077         cfi->dw_cfi_opc = DW_CFA_def_cfa_sf;
1078       else
1079         cfi->dw_cfi_opc = DW_CFA_def_cfa;
1080       cfi->dw_cfi_oprnd1.dw_cfi_reg_num = loc.reg;
1081       cfi->dw_cfi_oprnd2.dw_cfi_offset = loc.offset;
1082     }
1083   else
1084     {
1085       /* Construct a DW_CFA_def_cfa_expression instruction to
1086          calculate the CFA using a full location expression since no
1087          register-offset pair is available.  */
1088       struct dw_loc_descr_struct *loc_list;
1089
1090       cfi->dw_cfi_opc = DW_CFA_def_cfa_expression;
1091       loc_list = build_cfa_loc (&loc, 0);
1092       cfi->dw_cfi_oprnd1.dw_cfi_loc = loc_list;
1093     }
1094
1095   add_fde_cfi (label, cfi);
1096 }
1097
1098 /* Add the CFI for saving a register.  REG is the CFA column number.
1099    LABEL is passed to add_fde_cfi.
1100    If SREG is -1, the register is saved at OFFSET from the CFA;
1101    otherwise it is saved in SREG.  */
1102
1103 static void
1104 reg_save (const char *label, unsigned int reg, unsigned int sreg, HOST_WIDE_INT offset)
1105 {
1106   dw_cfi_ref cfi = new_cfi ();
1107   dw_fde_ref fde = current_fde ();
1108
1109   cfi->dw_cfi_oprnd1.dw_cfi_reg_num = reg;
1110
1111   /* When stack is aligned, store REG using DW_CFA_expression with
1112      FP.  */
1113   if (fde
1114       && fde->stack_realign
1115       && sreg == INVALID_REGNUM)
1116     {
1117       cfi->dw_cfi_opc = DW_CFA_expression;
1118       cfi->dw_cfi_oprnd1.dw_cfi_reg_num = reg;
1119       cfi->dw_cfi_oprnd2.dw_cfi_loc
1120         = build_cfa_aligned_loc (offset, fde->stack_realignment);
1121     }
1122   else if (sreg == INVALID_REGNUM)
1123     {
1124       if (need_data_align_sf_opcode (offset))
1125         cfi->dw_cfi_opc = DW_CFA_offset_extended_sf;
1126       else if (reg & ~0x3f)
1127         cfi->dw_cfi_opc = DW_CFA_offset_extended;
1128       else
1129         cfi->dw_cfi_opc = DW_CFA_offset;
1130       cfi->dw_cfi_oprnd2.dw_cfi_offset = offset;
1131     }
1132   else if (sreg == reg)
1133     cfi->dw_cfi_opc = DW_CFA_same_value;
1134   else
1135     {
1136       cfi->dw_cfi_opc = DW_CFA_register;
1137       cfi->dw_cfi_oprnd2.dw_cfi_reg_num = sreg;
1138     }
1139
1140   add_fde_cfi (label, cfi);
1141 }
1142
1143 /* Add the CFI for saving a register window.  LABEL is passed to reg_save.
1144    This CFI tells the unwinder that it needs to restore the window registers
1145    from the previous frame's window save area.
1146
1147    ??? Perhaps we should note in the CIE where windows are saved (instead of
1148    assuming 0(cfa)) and what registers are in the window.  */
1149
1150 void
1151 dwarf2out_window_save (const char *label)
1152 {
1153   dw_cfi_ref cfi = new_cfi ();
1154
1155   cfi->dw_cfi_opc = DW_CFA_GNU_window_save;
1156   add_fde_cfi (label, cfi);
1157 }
1158
1159 /* Entry point for saving a register to the stack.  REG is the GCC register
1160    number.  LABEL and OFFSET are passed to reg_save.  */
1161
1162 void
1163 dwarf2out_reg_save (const char *label, unsigned int reg, HOST_WIDE_INT offset)
1164 {
1165   reg_save (label, DWARF_FRAME_REGNUM (reg), INVALID_REGNUM, offset);
1166 }
1167
1168 /* Entry point for saving the return address in the stack.
1169    LABEL and OFFSET are passed to reg_save.  */
1170
1171 void
1172 dwarf2out_return_save (const char *label, HOST_WIDE_INT offset)
1173 {
1174   reg_save (label, DWARF_FRAME_RETURN_COLUMN, INVALID_REGNUM, offset);
1175 }
1176
1177 /* Entry point for saving the return address in a register.
1178    LABEL and SREG are passed to reg_save.  */
1179
1180 void
1181 dwarf2out_return_reg (const char *label, unsigned int sreg)
1182 {
1183   reg_save (label, DWARF_FRAME_RETURN_COLUMN, DWARF_FRAME_REGNUM (sreg), 0);
1184 }
1185
1186 #ifdef DWARF2_UNWIND_INFO
1187 /* Record the initial position of the return address.  RTL is
1188    INCOMING_RETURN_ADDR_RTX.  */
1189
1190 static void
1191 initial_return_save (rtx rtl)
1192 {
1193   unsigned int reg = INVALID_REGNUM;
1194   HOST_WIDE_INT offset = 0;
1195
1196   switch (GET_CODE (rtl))
1197     {
1198     case REG:
1199       /* RA is in a register.  */
1200       reg = DWARF_FRAME_REGNUM (REGNO (rtl));
1201       break;
1202
1203     case MEM:
1204       /* RA is on the stack.  */
1205       rtl = XEXP (rtl, 0);
1206       switch (GET_CODE (rtl))
1207         {
1208         case REG:
1209           gcc_assert (REGNO (rtl) == STACK_POINTER_REGNUM);
1210           offset = 0;
1211           break;
1212
1213         case PLUS:
1214           gcc_assert (REGNO (XEXP (rtl, 0)) == STACK_POINTER_REGNUM);
1215           offset = INTVAL (XEXP (rtl, 1));
1216           break;
1217
1218         case MINUS:
1219           gcc_assert (REGNO (XEXP (rtl, 0)) == STACK_POINTER_REGNUM);
1220           offset = -INTVAL (XEXP (rtl, 1));
1221           break;
1222
1223         default:
1224           gcc_unreachable ();
1225         }
1226
1227       break;
1228
1229     case PLUS:
1230       /* The return address is at some offset from any value we can
1231          actually load.  For instance, on the SPARC it is in %i7+8. Just
1232          ignore the offset for now; it doesn't matter for unwinding frames.  */
1233       gcc_assert (CONST_INT_P (XEXP (rtl, 1)));
1234       initial_return_save (XEXP (rtl, 0));
1235       return;
1236
1237     default:
1238       gcc_unreachable ();
1239     }
1240
1241   if (reg != DWARF_FRAME_RETURN_COLUMN)
1242     reg_save (NULL, DWARF_FRAME_RETURN_COLUMN, reg, offset - cfa.offset);
1243 }
1244 #endif
1245
1246 /* Given a SET, calculate the amount of stack adjustment it
1247    contains.  */
1248
1249 static HOST_WIDE_INT
1250 stack_adjust_offset (const_rtx pattern, HOST_WIDE_INT cur_args_size,
1251                      HOST_WIDE_INT cur_offset)
1252 {
1253   const_rtx src = SET_SRC (pattern);
1254   const_rtx dest = SET_DEST (pattern);
1255   HOST_WIDE_INT offset = 0;
1256   enum rtx_code code;
1257
1258   if (dest == stack_pointer_rtx)
1259     {
1260       code = GET_CODE (src);
1261
1262       /* Assume (set (reg sp) (reg whatever)) sets args_size
1263          level to 0.  */
1264       if (code == REG && src != stack_pointer_rtx)
1265         {
1266           offset = -cur_args_size;
1267 #ifndef STACK_GROWS_DOWNWARD
1268           offset = -offset;
1269 #endif
1270           return offset - cur_offset;
1271         }
1272
1273       if (! (code == PLUS || code == MINUS)
1274           || XEXP (src, 0) != stack_pointer_rtx
1275           || !CONST_INT_P (XEXP (src, 1)))
1276         return 0;
1277
1278       /* (set (reg sp) (plus (reg sp) (const_int))) */
1279       offset = INTVAL (XEXP (src, 1));
1280       if (code == PLUS)
1281         offset = -offset;
1282       return offset;
1283     }
1284
1285   if (MEM_P (src) && !MEM_P (dest))
1286     dest = src;
1287   if (MEM_P (dest))
1288     {
1289       /* (set (mem (pre_dec (reg sp))) (foo)) */
1290       src = XEXP (dest, 0);
1291       code = GET_CODE (src);
1292
1293       switch (code)
1294         {
1295         case PRE_MODIFY:
1296         case POST_MODIFY:
1297           if (XEXP (src, 0) == stack_pointer_rtx)
1298             {
1299               rtx val = XEXP (XEXP (src, 1), 1);
1300               /* We handle only adjustments by constant amount.  */
1301               gcc_assert (GET_CODE (XEXP (src, 1)) == PLUS
1302                           && CONST_INT_P (val));
1303               offset = -INTVAL (val);
1304               break;
1305             }
1306           return 0;
1307
1308         case PRE_DEC:
1309         case POST_DEC:
1310           if (XEXP (src, 0) == stack_pointer_rtx)
1311             {
1312               offset = GET_MODE_SIZE (GET_MODE (dest));
1313               break;
1314             }
1315           return 0;
1316
1317         case PRE_INC:
1318         case POST_INC:
1319           if (XEXP (src, 0) == stack_pointer_rtx)
1320             {
1321               offset = -GET_MODE_SIZE (GET_MODE (dest));
1322               break;
1323             }
1324           return 0;
1325
1326         default:
1327           return 0;
1328         }
1329     }
1330   else
1331     return 0;
1332
1333   return offset;
1334 }
1335
1336 /* Precomputed args_size for CODE_LABELs and BARRIERs preceeding them,
1337    indexed by INSN_UID.  */
1338
1339 static HOST_WIDE_INT *barrier_args_size;
1340
1341 /* Helper function for compute_barrier_args_size.  Handle one insn.  */
1342
1343 static HOST_WIDE_INT
1344 compute_barrier_args_size_1 (rtx insn, HOST_WIDE_INT cur_args_size,
1345                              VEC (rtx, heap) **next)
1346 {
1347   HOST_WIDE_INT offset = 0;
1348   int i;
1349
1350   if (! RTX_FRAME_RELATED_P (insn))
1351     {
1352       if (prologue_epilogue_contains (insn))
1353         /* Nothing */;
1354       else if (GET_CODE (PATTERN (insn)) == SET)
1355         offset = stack_adjust_offset (PATTERN (insn), cur_args_size, 0);
1356       else if (GET_CODE (PATTERN (insn)) == PARALLEL
1357                || GET_CODE (PATTERN (insn)) == SEQUENCE)
1358         {
1359           /* There may be stack adjustments inside compound insns.  Search
1360              for them.  */
1361           for (i = XVECLEN (PATTERN (insn), 0) - 1; i >= 0; i--)
1362             if (GET_CODE (XVECEXP (PATTERN (insn), 0, i)) == SET)
1363               offset += stack_adjust_offset (XVECEXP (PATTERN (insn), 0, i),
1364                                              cur_args_size, offset);
1365         }
1366     }
1367   else
1368     {
1369       rtx expr = find_reg_note (insn, REG_FRAME_RELATED_EXPR, NULL_RTX);
1370
1371       if (expr)
1372         {
1373           expr = XEXP (expr, 0);
1374           if (GET_CODE (expr) == PARALLEL
1375               || GET_CODE (expr) == SEQUENCE)
1376             for (i = 1; i < XVECLEN (expr, 0); i++)
1377               {
1378                 rtx elem = XVECEXP (expr, 0, i);
1379
1380                 if (GET_CODE (elem) == SET && !RTX_FRAME_RELATED_P (elem))
1381                   offset += stack_adjust_offset (elem, cur_args_size, offset);
1382               }
1383         }
1384     }
1385
1386 #ifndef STACK_GROWS_DOWNWARD
1387   offset = -offset;
1388 #endif
1389
1390   cur_args_size += offset;
1391   if (cur_args_size < 0)
1392     cur_args_size = 0;
1393
1394   if (JUMP_P (insn))
1395     {
1396       rtx dest = JUMP_LABEL (insn);
1397
1398       if (dest)
1399         {
1400           if (barrier_args_size [INSN_UID (dest)] < 0)
1401             {
1402               barrier_args_size [INSN_UID (dest)] = cur_args_size;
1403               VEC_safe_push (rtx, heap, *next, dest);
1404             }
1405         }
1406     }
1407
1408   return cur_args_size;
1409 }
1410
1411 /* Walk the whole function and compute args_size on BARRIERs.  */
1412
1413 static void
1414 compute_barrier_args_size (void)
1415 {
1416   int max_uid = get_max_uid (), i;
1417   rtx insn;
1418   VEC (rtx, heap) *worklist, *next, *tmp;
1419
1420   barrier_args_size = XNEWVEC (HOST_WIDE_INT, max_uid);
1421   for (i = 0; i < max_uid; i++)
1422     barrier_args_size[i] = -1;
1423
1424   worklist = VEC_alloc (rtx, heap, 20);
1425   next = VEC_alloc (rtx, heap, 20);
1426   insn = get_insns ();
1427   barrier_args_size[INSN_UID (insn)] = 0;
1428   VEC_quick_push (rtx, worklist, insn);
1429   for (;;)
1430     {
1431       while (!VEC_empty (rtx, worklist))
1432         {
1433           rtx prev, body, first_insn;
1434           HOST_WIDE_INT cur_args_size;
1435
1436           first_insn = insn = VEC_pop (rtx, worklist);
1437           cur_args_size = barrier_args_size[INSN_UID (insn)];
1438           prev = prev_nonnote_insn (insn);
1439           if (prev && BARRIER_P (prev))
1440             barrier_args_size[INSN_UID (prev)] = cur_args_size;
1441
1442           for (; insn; insn = NEXT_INSN (insn))
1443             {
1444               if (INSN_DELETED_P (insn) || NOTE_P (insn))
1445                 continue;
1446               if (BARRIER_P (insn))
1447                 break;
1448
1449               if (LABEL_P (insn))
1450                 {
1451                   if (insn == first_insn)
1452                     continue;
1453                   else if (barrier_args_size[INSN_UID (insn)] < 0)
1454                     {
1455                       barrier_args_size[INSN_UID (insn)] = cur_args_size;
1456                       continue;
1457                     }
1458                   else
1459                     {
1460                       /* The insns starting with this label have been
1461                          already scanned or are in the worklist.  */
1462                       break;
1463                     }
1464                 }
1465
1466               body = PATTERN (insn);
1467               if (GET_CODE (body) == SEQUENCE)
1468                 {
1469                   HOST_WIDE_INT dest_args_size = cur_args_size;
1470                   for (i = 1; i < XVECLEN (body, 0); i++)
1471                     if (INSN_ANNULLED_BRANCH_P (XVECEXP (body, 0, 0))
1472                         && INSN_FROM_TARGET_P (XVECEXP (body, 0, i)))
1473                       dest_args_size
1474                         = compute_barrier_args_size_1 (XVECEXP (body, 0, i),
1475                                                        dest_args_size, &next);
1476                     else
1477                       cur_args_size
1478                         = compute_barrier_args_size_1 (XVECEXP (body, 0, i),
1479                                                        cur_args_size, &next);
1480
1481                   if (INSN_ANNULLED_BRANCH_P (XVECEXP (body, 0, 0)))
1482                     compute_barrier_args_size_1 (XVECEXP (body, 0, 0),
1483                                                  dest_args_size, &next);
1484                   else
1485                     cur_args_size
1486                       = compute_barrier_args_size_1 (XVECEXP (body, 0, 0),
1487                                                      cur_args_size, &next);
1488                 }
1489               else
1490                 cur_args_size
1491                   = compute_barrier_args_size_1 (insn, cur_args_size, &next);
1492             }
1493         }
1494
1495       if (VEC_empty (rtx, next))
1496         break;
1497
1498       /* Swap WORKLIST with NEXT and truncate NEXT for next iteration.  */
1499       tmp = next;
1500       next = worklist;
1501       worklist = tmp;
1502       VEC_truncate (rtx, next, 0);
1503     }
1504
1505   VEC_free (rtx, heap, worklist);
1506   VEC_free (rtx, heap, next);
1507 }
1508
1509 /* Add a CFI to update the running total of the size of arguments
1510    pushed onto the stack.  */
1511
1512 static void
1513 dwarf2out_args_size (const char *label, HOST_WIDE_INT size)
1514 {
1515   dw_cfi_ref cfi;
1516
1517   if (size == old_args_size)
1518     return;
1519
1520   old_args_size = size;
1521
1522   cfi = new_cfi ();
1523   cfi->dw_cfi_opc = DW_CFA_GNU_args_size;
1524   cfi->dw_cfi_oprnd1.dw_cfi_offset = size;
1525   add_fde_cfi (label, cfi);
1526 }
1527
1528 /* Record a stack adjustment of OFFSET bytes.  */
1529
1530 static void
1531 dwarf2out_stack_adjust (HOST_WIDE_INT offset, const char *label)
1532 {
1533   if (cfa.reg == STACK_POINTER_REGNUM)
1534     cfa.offset += offset;
1535
1536   if (cfa_store.reg == STACK_POINTER_REGNUM)
1537     cfa_store.offset += offset;
1538
1539   if (ACCUMULATE_OUTGOING_ARGS)
1540     return;
1541
1542 #ifndef STACK_GROWS_DOWNWARD
1543   offset = -offset;
1544 #endif
1545
1546   args_size += offset;
1547   if (args_size < 0)
1548     args_size = 0;
1549
1550   def_cfa_1 (label, &cfa);
1551   if (flag_asynchronous_unwind_tables)
1552     dwarf2out_args_size (label, args_size);
1553 }
1554
1555 /* Check INSN to see if it looks like a push or a stack adjustment, and
1556    make a note of it if it does.  EH uses this information to find out
1557    how much extra space it needs to pop off the stack.  */
1558
1559 static void
1560 dwarf2out_notice_stack_adjust (rtx insn, bool after_p)
1561 {
1562   HOST_WIDE_INT offset;
1563   const char *label;
1564   int i;
1565
1566   /* Don't handle epilogues at all.  Certainly it would be wrong to do so
1567      with this function.  Proper support would require all frame-related
1568      insns to be marked, and to be able to handle saving state around
1569      epilogues textually in the middle of the function.  */
1570   if (prologue_epilogue_contains (insn))
1571     return;
1572
1573   /* If INSN is an instruction from target of an annulled branch, the
1574      effects are for the target only and so current argument size
1575      shouldn't change at all.  */
1576   if (final_sequence
1577       && INSN_ANNULLED_BRANCH_P (XVECEXP (final_sequence, 0, 0))
1578       && INSN_FROM_TARGET_P (insn))
1579     return;
1580
1581   /* If only calls can throw, and we have a frame pointer,
1582      save up adjustments until we see the CALL_INSN.  */
1583   if (!flag_asynchronous_unwind_tables && cfa.reg != STACK_POINTER_REGNUM)
1584     {
1585       if (CALL_P (insn) && !after_p)
1586         {
1587           /* Extract the size of the args from the CALL rtx itself.  */
1588           insn = PATTERN (insn);
1589           if (GET_CODE (insn) == PARALLEL)
1590             insn = XVECEXP (insn, 0, 0);
1591           if (GET_CODE (insn) == SET)
1592             insn = SET_SRC (insn);
1593           gcc_assert (GET_CODE (insn) == CALL);
1594           dwarf2out_args_size ("", INTVAL (XEXP (insn, 1)));
1595         }
1596       return;
1597     }
1598
1599   if (CALL_P (insn) && !after_p)
1600     {
1601       if (!flag_asynchronous_unwind_tables)
1602         dwarf2out_args_size ("", args_size);
1603       return;
1604     }
1605   else if (BARRIER_P (insn))
1606     {
1607       /* Don't call compute_barrier_args_size () if the only
1608          BARRIER is at the end of function.  */
1609       if (barrier_args_size == NULL && next_nonnote_insn (insn))
1610         compute_barrier_args_size ();
1611       if (barrier_args_size == NULL)
1612         offset = 0;
1613       else
1614         {
1615           offset = barrier_args_size[INSN_UID (insn)];
1616           if (offset < 0)
1617             offset = 0;
1618         }
1619
1620       offset -= args_size;
1621 #ifndef STACK_GROWS_DOWNWARD
1622       offset = -offset;
1623 #endif
1624     }
1625   else if (GET_CODE (PATTERN (insn)) == SET)
1626     offset = stack_adjust_offset (PATTERN (insn), args_size, 0);
1627   else if (GET_CODE (PATTERN (insn)) == PARALLEL
1628            || GET_CODE (PATTERN (insn)) == SEQUENCE)
1629     {
1630       /* There may be stack adjustments inside compound insns.  Search
1631          for them.  */
1632       for (offset = 0, i = XVECLEN (PATTERN (insn), 0) - 1; i >= 0; i--)
1633         if (GET_CODE (XVECEXP (PATTERN (insn), 0, i)) == SET)
1634           offset += stack_adjust_offset (XVECEXP (PATTERN (insn), 0, i),
1635                                          args_size, offset);
1636     }
1637   else
1638     return;
1639
1640   if (offset == 0)
1641     return;
1642
1643   label = dwarf2out_cfi_label (false);
1644   dwarf2out_stack_adjust (offset, label);
1645 }
1646
1647 #endif
1648
1649 /* We delay emitting a register save until either (a) we reach the end
1650    of the prologue or (b) the register is clobbered.  This clusters
1651    register saves so that there are fewer pc advances.  */
1652
1653 struct GTY(()) queued_reg_save {
1654   struct queued_reg_save *next;
1655   rtx reg;
1656   HOST_WIDE_INT cfa_offset;
1657   rtx saved_reg;
1658 };
1659
1660 static GTY(()) struct queued_reg_save *queued_reg_saves;
1661
1662 /* The caller's ORIG_REG is saved in SAVED_IN_REG.  */
1663 struct GTY(()) reg_saved_in_data {
1664   rtx orig_reg;
1665   rtx saved_in_reg;
1666 };
1667
1668 /* A list of registers saved in other registers.
1669    The list intentionally has a small maximum capacity of 4; if your
1670    port needs more than that, you might consider implementing a
1671    more efficient data structure.  */
1672 static GTY(()) struct reg_saved_in_data regs_saved_in_regs[4];
1673 static GTY(()) size_t num_regs_saved_in_regs;
1674
1675 #if defined (DWARF2_DEBUGGING_INFO) || defined (DWARF2_UNWIND_INFO)
1676 static const char *last_reg_save_label;
1677
1678 /* Add an entry to QUEUED_REG_SAVES saying that REG is now saved at
1679    SREG, or if SREG is NULL then it is saved at OFFSET to the CFA.  */
1680
1681 static void
1682 queue_reg_save (const char *label, rtx reg, rtx sreg, HOST_WIDE_INT offset)
1683 {
1684   struct queued_reg_save *q;
1685
1686   /* Duplicates waste space, but it's also necessary to remove them
1687      for correctness, since the queue gets output in reverse
1688      order.  */
1689   for (q = queued_reg_saves; q != NULL; q = q->next)
1690     if (REGNO (q->reg) == REGNO (reg))
1691       break;
1692
1693   if (q == NULL)
1694     {
1695       q = GGC_NEW (struct queued_reg_save);
1696       q->next = queued_reg_saves;
1697       queued_reg_saves = q;
1698     }
1699
1700   q->reg = reg;
1701   q->cfa_offset = offset;
1702   q->saved_reg = sreg;
1703
1704   last_reg_save_label = label;
1705 }
1706
1707 /* Output all the entries in QUEUED_REG_SAVES.  */
1708
1709 static void
1710 flush_queued_reg_saves (void)
1711 {
1712   struct queued_reg_save *q;
1713
1714   for (q = queued_reg_saves; q; q = q->next)
1715     {
1716       size_t i;
1717       unsigned int reg, sreg;
1718
1719       for (i = 0; i < num_regs_saved_in_regs; i++)
1720         if (REGNO (regs_saved_in_regs[i].orig_reg) == REGNO (q->reg))
1721           break;
1722       if (q->saved_reg && i == num_regs_saved_in_regs)
1723         {
1724           gcc_assert (i != ARRAY_SIZE (regs_saved_in_regs));
1725           num_regs_saved_in_regs++;
1726         }
1727       if (i != num_regs_saved_in_regs)
1728         {
1729           regs_saved_in_regs[i].orig_reg = q->reg;
1730           regs_saved_in_regs[i].saved_in_reg = q->saved_reg;
1731         }
1732
1733       reg = DWARF_FRAME_REGNUM (REGNO (q->reg));
1734       if (q->saved_reg)
1735         sreg = DWARF_FRAME_REGNUM (REGNO (q->saved_reg));
1736       else
1737         sreg = INVALID_REGNUM;
1738       reg_save (last_reg_save_label, reg, sreg, q->cfa_offset);
1739     }
1740
1741   queued_reg_saves = NULL;
1742   last_reg_save_label = NULL;
1743 }
1744
1745 /* Does INSN clobber any register which QUEUED_REG_SAVES lists a saved
1746    location for?  Or, does it clobber a register which we've previously
1747    said that some other register is saved in, and for which we now
1748    have a new location for?  */
1749
1750 static bool
1751 clobbers_queued_reg_save (const_rtx insn)
1752 {
1753   struct queued_reg_save *q;
1754
1755   for (q = queued_reg_saves; q; q = q->next)
1756     {
1757       size_t i;
1758       if (modified_in_p (q->reg, insn))
1759         return true;
1760       for (i = 0; i < num_regs_saved_in_regs; i++)
1761         if (REGNO (q->reg) == REGNO (regs_saved_in_regs[i].orig_reg)
1762             && modified_in_p (regs_saved_in_regs[i].saved_in_reg, insn))
1763           return true;
1764     }
1765
1766   return false;
1767 }
1768
1769 /* Entry point for saving the first register into the second.  */
1770
1771 void
1772 dwarf2out_reg_save_reg (const char *label, rtx reg, rtx sreg)
1773 {
1774   size_t i;
1775   unsigned int regno, sregno;
1776
1777   for (i = 0; i < num_regs_saved_in_regs; i++)
1778     if (REGNO (regs_saved_in_regs[i].orig_reg) == REGNO (reg))
1779       break;
1780   if (i == num_regs_saved_in_regs)
1781     {
1782       gcc_assert (i != ARRAY_SIZE (regs_saved_in_regs));
1783       num_regs_saved_in_regs++;
1784     }
1785   regs_saved_in_regs[i].orig_reg = reg;
1786   regs_saved_in_regs[i].saved_in_reg = sreg;
1787
1788   regno = DWARF_FRAME_REGNUM (REGNO (reg));
1789   sregno = DWARF_FRAME_REGNUM (REGNO (sreg));
1790   reg_save (label, regno, sregno, 0);
1791 }
1792
1793 /* What register, if any, is currently saved in REG?  */
1794
1795 static rtx
1796 reg_saved_in (rtx reg)
1797 {
1798   unsigned int regn = REGNO (reg);
1799   size_t i;
1800   struct queued_reg_save *q;
1801
1802   for (q = queued_reg_saves; q; q = q->next)
1803     if (q->saved_reg && regn == REGNO (q->saved_reg))
1804       return q->reg;
1805
1806   for (i = 0; i < num_regs_saved_in_regs; i++)
1807     if (regs_saved_in_regs[i].saved_in_reg
1808         && regn == REGNO (regs_saved_in_regs[i].saved_in_reg))
1809       return regs_saved_in_regs[i].orig_reg;
1810
1811   return NULL_RTX;
1812 }
1813
1814
1815 /* A temporary register holding an integral value used in adjusting SP
1816    or setting up the store_reg.  The "offset" field holds the integer
1817    value, not an offset.  */
1818 static dw_cfa_location cfa_temp;
1819
1820 /* A subroutine of dwarf2out_frame_debug, process a REG_DEF_CFA note.  */
1821
1822 static void
1823 dwarf2out_frame_debug_def_cfa (rtx pat, const char *label)
1824 {
1825   memset (&cfa, 0, sizeof (cfa));
1826
1827   switch (GET_CODE (pat))
1828     {
1829     case PLUS:
1830       cfa.reg = REGNO (XEXP (pat, 0));
1831       cfa.offset = INTVAL (XEXP (pat, 1));
1832       break;
1833
1834     case REG:
1835       cfa.reg = REGNO (pat);
1836       break;
1837
1838     default:
1839       /* Recurse and define an expression.  */
1840       gcc_unreachable ();
1841     }
1842
1843   def_cfa_1 (label, &cfa);
1844 }
1845
1846 /* A subroutine of dwarf2out_frame_debug, process a REG_ADJUST_CFA note.  */
1847
1848 static void
1849 dwarf2out_frame_debug_adjust_cfa (rtx pat, const char *label)
1850 {
1851   rtx src, dest;
1852
1853   gcc_assert (GET_CODE (pat) == SET);
1854   dest = XEXP (pat, 0);
1855   src = XEXP (pat, 1);
1856
1857   switch (GET_CODE (src))
1858     {
1859     case PLUS:
1860       gcc_assert (REGNO (XEXP (src, 0)) == cfa.reg);
1861       cfa.offset -= INTVAL (XEXP (src, 1));
1862       break;
1863
1864     case REG:
1865         break;
1866
1867     default:
1868         gcc_unreachable ();
1869     }
1870
1871   cfa.reg = REGNO (dest);
1872   gcc_assert (cfa.indirect == 0);
1873
1874   def_cfa_1 (label, &cfa);
1875 }
1876
1877 /* A subroutine of dwarf2out_frame_debug, process a REG_CFA_OFFSET note.  */
1878
1879 static void
1880 dwarf2out_frame_debug_cfa_offset (rtx set, const char *label)
1881 {
1882   HOST_WIDE_INT offset;
1883   rtx src, addr, span;
1884
1885   src = XEXP (set, 1);
1886   addr = XEXP (set, 0);
1887   gcc_assert (MEM_P (addr));
1888   addr = XEXP (addr, 0);
1889
1890   /* As documented, only consider extremely simple addresses.  */
1891   switch (GET_CODE (addr))
1892     {
1893     case REG:
1894       gcc_assert (REGNO (addr) == cfa.reg);
1895       offset = -cfa.offset;
1896       break;
1897     case PLUS:
1898       gcc_assert (REGNO (XEXP (addr, 0)) == cfa.reg);
1899       offset = INTVAL (XEXP (addr, 1)) - cfa.offset;
1900       break;
1901     default:
1902       gcc_unreachable ();
1903     }
1904
1905   span = targetm.dwarf_register_span (src);
1906
1907   /* ??? We'd like to use queue_reg_save, but we need to come up with
1908      a different flushing heuristic for epilogues.  */
1909   if (!span)
1910     reg_save (label, DWARF_FRAME_REGNUM (REGNO (src)), INVALID_REGNUM, offset);
1911   else
1912     {
1913       /* We have a PARALLEL describing where the contents of SRC live.
1914          Queue register saves for each piece of the PARALLEL.  */
1915       int par_index;
1916       int limit;
1917       HOST_WIDE_INT span_offset = offset;
1918
1919       gcc_assert (GET_CODE (span) == PARALLEL);
1920
1921       limit = XVECLEN (span, 0);
1922       for (par_index = 0; par_index < limit; par_index++)
1923         {
1924           rtx elem = XVECEXP (span, 0, par_index);
1925
1926           reg_save (label, DWARF_FRAME_REGNUM (REGNO (elem)),
1927                     INVALID_REGNUM, span_offset);
1928           span_offset += GET_MODE_SIZE (GET_MODE (elem));
1929         }
1930     }
1931 }
1932
1933 /* A subroutine of dwarf2out_frame_debug, process a REG_CFA_REGISTER note.  */
1934
1935 static void
1936 dwarf2out_frame_debug_cfa_register (rtx set, const char *label)
1937 {
1938   rtx src, dest;
1939   unsigned sregno, dregno;
1940
1941   src = XEXP (set, 1);
1942   dest = XEXP (set, 0);
1943
1944   if (src == pc_rtx)
1945     sregno = DWARF_FRAME_RETURN_COLUMN;
1946   else
1947     sregno = DWARF_FRAME_REGNUM (REGNO (src));
1948
1949   dregno = DWARF_FRAME_REGNUM (REGNO (dest));
1950
1951   /* ??? We'd like to use queue_reg_save, but we need to come up with
1952      a different flushing heuristic for epilogues.  */
1953   reg_save (label, sregno, dregno, 0);
1954 }
1955
1956 /* A subroutine of dwarf2out_frame_debug, process a REG_CFA_RESTORE note.  */
1957
1958 static void
1959 dwarf2out_frame_debug_cfa_restore (rtx reg, const char *label)
1960 {
1961   dw_cfi_ref cfi = new_cfi ();
1962   unsigned int regno = DWARF_FRAME_REGNUM (REGNO (reg));
1963
1964   cfi->dw_cfi_opc = (regno & ~0x3f ? DW_CFA_restore_extended : DW_CFA_restore);
1965   cfi->dw_cfi_oprnd1.dw_cfi_reg_num = regno;
1966
1967   add_fde_cfi (label, cfi);
1968 }
1969
1970 /* Record call frame debugging information for an expression EXPR,
1971    which either sets SP or FP (adjusting how we calculate the frame
1972    address) or saves a register to the stack or another register.
1973    LABEL indicates the address of EXPR.
1974
1975    This function encodes a state machine mapping rtxes to actions on
1976    cfa, cfa_store, and cfa_temp.reg.  We describe these rules so
1977    users need not read the source code.
1978
1979   The High-Level Picture
1980
1981   Changes in the register we use to calculate the CFA: Currently we
1982   assume that if you copy the CFA register into another register, we
1983   should take the other one as the new CFA register; this seems to
1984   work pretty well.  If it's wrong for some target, it's simple
1985   enough not to set RTX_FRAME_RELATED_P on the insn in question.
1986
1987   Changes in the register we use for saving registers to the stack:
1988   This is usually SP, but not always.  Again, we deduce that if you
1989   copy SP into another register (and SP is not the CFA register),
1990   then the new register is the one we will be using for register
1991   saves.  This also seems to work.
1992
1993   Register saves: There's not much guesswork about this one; if
1994   RTX_FRAME_RELATED_P is set on an insn which modifies memory, it's a
1995   register save, and the register used to calculate the destination
1996   had better be the one we think we're using for this purpose.
1997   It's also assumed that a copy from a call-saved register to another
1998   register is saving that register if RTX_FRAME_RELATED_P is set on
1999   that instruction.  If the copy is from a call-saved register to
2000   the *same* register, that means that the register is now the same
2001   value as in the caller.
2002
2003   Except: If the register being saved is the CFA register, and the
2004   offset is nonzero, we are saving the CFA, so we assume we have to
2005   use DW_CFA_def_cfa_expression.  If the offset is 0, we assume that
2006   the intent is to save the value of SP from the previous frame.
2007
2008   In addition, if a register has previously been saved to a different
2009   register,
2010
2011   Invariants / Summaries of Rules
2012
2013   cfa          current rule for calculating the CFA.  It usually
2014                consists of a register and an offset.
2015   cfa_store    register used by prologue code to save things to the stack
2016                cfa_store.offset is the offset from the value of
2017                cfa_store.reg to the actual CFA
2018   cfa_temp     register holding an integral value.  cfa_temp.offset
2019                stores the value, which will be used to adjust the
2020                stack pointer.  cfa_temp is also used like cfa_store,
2021                to track stores to the stack via fp or a temp reg.
2022
2023   Rules  1- 4: Setting a register's value to cfa.reg or an expression
2024                with cfa.reg as the first operand changes the cfa.reg and its
2025                cfa.offset.  Rule 1 and 4 also set cfa_temp.reg and
2026                cfa_temp.offset.
2027
2028   Rules  6- 9: Set a non-cfa.reg register value to a constant or an
2029                expression yielding a constant.  This sets cfa_temp.reg
2030                and cfa_temp.offset.
2031
2032   Rule 5:      Create a new register cfa_store used to save items to the
2033                stack.
2034
2035   Rules 10-14: Save a register to the stack.  Define offset as the
2036                difference of the original location and cfa_store's
2037                location (or cfa_temp's location if cfa_temp is used).
2038
2039   Rules 16-20: If AND operation happens on sp in prologue, we assume
2040                stack is realigned.  We will use a group of DW_OP_XXX
2041                expressions to represent the location of the stored
2042                register instead of CFA+offset.
2043
2044   The Rules
2045
2046   "{a,b}" indicates a choice of a xor b.
2047   "<reg>:cfa.reg" indicates that <reg> must equal cfa.reg.
2048
2049   Rule 1:
2050   (set <reg1> <reg2>:cfa.reg)
2051   effects: cfa.reg = <reg1>
2052            cfa.offset unchanged
2053            cfa_temp.reg = <reg1>
2054            cfa_temp.offset = cfa.offset
2055
2056   Rule 2:
2057   (set sp ({minus,plus,losum} {sp,fp}:cfa.reg
2058                               {<const_int>,<reg>:cfa_temp.reg}))
2059   effects: cfa.reg = sp if fp used
2060            cfa.offset += {+/- <const_int>, cfa_temp.offset} if cfa.reg==sp
2061            cfa_store.offset += {+/- <const_int>, cfa_temp.offset}
2062              if cfa_store.reg==sp
2063
2064   Rule 3:
2065   (set fp ({minus,plus,losum} <reg>:cfa.reg <const_int>))
2066   effects: cfa.reg = fp
2067            cfa_offset += +/- <const_int>
2068
2069   Rule 4:
2070   (set <reg1> ({plus,losum} <reg2>:cfa.reg <const_int>))
2071   constraints: <reg1> != fp
2072                <reg1> != sp
2073   effects: cfa.reg = <reg1>
2074            cfa_temp.reg = <reg1>
2075            cfa_temp.offset = cfa.offset
2076
2077   Rule 5:
2078   (set <reg1> (plus <reg2>:cfa_temp.reg sp:cfa.reg))
2079   constraints: <reg1> != fp
2080                <reg1> != sp
2081   effects: cfa_store.reg = <reg1>
2082            cfa_store.offset = cfa.offset - cfa_temp.offset
2083
2084   Rule 6:
2085   (set <reg> <const_int>)
2086   effects: cfa_temp.reg = <reg>
2087            cfa_temp.offset = <const_int>
2088
2089   Rule 7:
2090   (set <reg1>:cfa_temp.reg (ior <reg2>:cfa_temp.reg <const_int>))
2091   effects: cfa_temp.reg = <reg1>
2092            cfa_temp.offset |= <const_int>
2093
2094   Rule 8:
2095   (set <reg> (high <exp>))
2096   effects: none
2097
2098   Rule 9:
2099   (set <reg> (lo_sum <exp> <const_int>))
2100   effects: cfa_temp.reg = <reg>
2101            cfa_temp.offset = <const_int>
2102
2103   Rule 10:
2104   (set (mem (pre_modify sp:cfa_store (???? <reg1> <const_int>))) <reg2>)
2105   effects: cfa_store.offset -= <const_int>
2106            cfa.offset = cfa_store.offset if cfa.reg == sp
2107            cfa.reg = sp
2108            cfa.base_offset = -cfa_store.offset
2109
2110   Rule 11:
2111   (set (mem ({pre_inc,pre_dec} sp:cfa_store.reg)) <reg>)
2112   effects: cfa_store.offset += -/+ mode_size(mem)
2113            cfa.offset = cfa_store.offset if cfa.reg == sp
2114            cfa.reg = sp
2115            cfa.base_offset = -cfa_store.offset
2116
2117   Rule 12:
2118   (set (mem ({minus,plus,losum} <reg1>:{cfa_store,cfa_temp} <const_int>))
2119
2120        <reg2>)
2121   effects: cfa.reg = <reg1>
2122            cfa.base_offset = -/+ <const_int> - {cfa_store,cfa_temp}.offset
2123
2124   Rule 13:
2125   (set (mem <reg1>:{cfa_store,cfa_temp}) <reg2>)
2126   effects: cfa.reg = <reg1>
2127            cfa.base_offset = -{cfa_store,cfa_temp}.offset
2128
2129   Rule 14:
2130   (set (mem (postinc <reg1>:cfa_temp <const_int>)) <reg2>)
2131   effects: cfa.reg = <reg1>
2132            cfa.base_offset = -cfa_temp.offset
2133            cfa_temp.offset -= mode_size(mem)
2134
2135   Rule 15:
2136   (set <reg> {unspec, unspec_volatile})
2137   effects: target-dependent
2138
2139   Rule 16:
2140   (set sp (and: sp <const_int>))
2141   constraints: cfa_store.reg == sp
2142   effects: current_fde.stack_realign = 1
2143            cfa_store.offset = 0
2144            fde->drap_reg = cfa.reg if cfa.reg != sp and cfa.reg != fp
2145
2146   Rule 17:
2147   (set (mem ({pre_inc, pre_dec} sp)) (mem (plus (cfa.reg) (const_int))))
2148   effects: cfa_store.offset += -/+ mode_size(mem)
2149
2150   Rule 18:
2151   (set (mem ({pre_inc, pre_dec} sp)) fp)
2152   constraints: fde->stack_realign == 1
2153   effects: cfa_store.offset = 0
2154            cfa.reg != HARD_FRAME_POINTER_REGNUM
2155
2156   Rule 19:
2157   (set (mem ({pre_inc, pre_dec} sp)) cfa.reg)
2158   constraints: fde->stack_realign == 1
2159                && cfa.offset == 0
2160                && cfa.indirect == 0
2161                && cfa.reg != HARD_FRAME_POINTER_REGNUM
2162   effects: Use DW_CFA_def_cfa_expression to define cfa
2163            cfa.reg == fde->drap_reg  */
2164
2165 static void
2166 dwarf2out_frame_debug_expr (rtx expr, const char *label)
2167 {
2168   rtx src, dest, span;
2169   HOST_WIDE_INT offset;
2170   dw_fde_ref fde;
2171
2172   /* If RTX_FRAME_RELATED_P is set on a PARALLEL, process each member of
2173      the PARALLEL independently. The first element is always processed if
2174      it is a SET. This is for backward compatibility.   Other elements
2175      are processed only if they are SETs and the RTX_FRAME_RELATED_P
2176      flag is set in them.  */
2177   if (GET_CODE (expr) == PARALLEL || GET_CODE (expr) == SEQUENCE)
2178     {
2179       int par_index;
2180       int limit = XVECLEN (expr, 0);
2181       rtx elem;
2182
2183       /* PARALLELs have strict read-modify-write semantics, so we
2184          ought to evaluate every rvalue before changing any lvalue.
2185          It's cumbersome to do that in general, but there's an
2186          easy approximation that is enough for all current users:
2187          handle register saves before register assignments.  */
2188       if (GET_CODE (expr) == PARALLEL)
2189         for (par_index = 0; par_index < limit; par_index++)
2190           {
2191             elem = XVECEXP (expr, 0, par_index);
2192             if (GET_CODE (elem) == SET
2193                 && MEM_P (SET_DEST (elem))
2194                 && (RTX_FRAME_RELATED_P (elem) || par_index == 0))
2195               dwarf2out_frame_debug_expr (elem, label);
2196           }
2197
2198       for (par_index = 0; par_index < limit; par_index++)
2199         {
2200           elem = XVECEXP (expr, 0, par_index);
2201           if (GET_CODE (elem) == SET
2202               && (!MEM_P (SET_DEST (elem)) || GET_CODE (expr) == SEQUENCE)
2203               && (RTX_FRAME_RELATED_P (elem) || par_index == 0))
2204             dwarf2out_frame_debug_expr (elem, label);
2205           else if (GET_CODE (elem) == SET
2206                    && par_index != 0
2207                    && !RTX_FRAME_RELATED_P (elem))
2208             {
2209               /* Stack adjustment combining might combine some post-prologue
2210                  stack adjustment into a prologue stack adjustment.  */
2211               HOST_WIDE_INT offset = stack_adjust_offset (elem, args_size, 0);
2212
2213               if (offset != 0)
2214                 dwarf2out_stack_adjust (offset, label);
2215             }
2216         }
2217       return;
2218     }
2219
2220   gcc_assert (GET_CODE (expr) == SET);
2221
2222   src = SET_SRC (expr);
2223   dest = SET_DEST (expr);
2224
2225   if (REG_P (src))
2226     {
2227       rtx rsi = reg_saved_in (src);
2228       if (rsi)
2229         src = rsi;
2230     }
2231
2232   fde = current_fde ();
2233
2234   switch (GET_CODE (dest))
2235     {
2236     case REG:
2237       switch (GET_CODE (src))
2238         {
2239           /* Setting FP from SP.  */
2240         case REG:
2241           if (cfa.reg == (unsigned) REGNO (src))
2242             {
2243               /* Rule 1 */
2244               /* Update the CFA rule wrt SP or FP.  Make sure src is
2245                  relative to the current CFA register.
2246
2247                  We used to require that dest be either SP or FP, but the
2248                  ARM copies SP to a temporary register, and from there to
2249                  FP.  So we just rely on the backends to only set
2250                  RTX_FRAME_RELATED_P on appropriate insns.  */
2251               cfa.reg = REGNO (dest);
2252               cfa_temp.reg = cfa.reg;
2253               cfa_temp.offset = cfa.offset;
2254             }
2255           else
2256             {
2257               /* Saving a register in a register.  */
2258               gcc_assert (!fixed_regs [REGNO (dest)]
2259                           /* For the SPARC and its register window.  */
2260                           || (DWARF_FRAME_REGNUM (REGNO (src))
2261                               == DWARF_FRAME_RETURN_COLUMN));
2262
2263               /* After stack is aligned, we can only save SP in FP
2264                  if drap register is used.  In this case, we have
2265                  to restore stack pointer with the CFA value and we
2266                  don't generate this DWARF information.  */
2267               if (fde
2268                   && fde->stack_realign
2269                   && REGNO (src) == STACK_POINTER_REGNUM)
2270                 gcc_assert (REGNO (dest) == HARD_FRAME_POINTER_REGNUM
2271                             && fde->drap_reg != INVALID_REGNUM
2272                             && cfa.reg != REGNO (src));
2273               else
2274                 queue_reg_save (label, src, dest, 0);
2275             }
2276           break;
2277
2278         case PLUS:
2279         case MINUS:
2280         case LO_SUM:
2281           if (dest == stack_pointer_rtx)
2282             {
2283               /* Rule 2 */
2284               /* Adjusting SP.  */
2285               switch (GET_CODE (XEXP (src, 1)))
2286                 {
2287                 case CONST_INT:
2288                   offset = INTVAL (XEXP (src, 1));
2289                   break;
2290                 case REG:
2291                   gcc_assert ((unsigned) REGNO (XEXP (src, 1))
2292                               == cfa_temp.reg);
2293                   offset = cfa_temp.offset;
2294                   break;
2295                 default:
2296                   gcc_unreachable ();
2297                 }
2298
2299               if (XEXP (src, 0) == hard_frame_pointer_rtx)
2300                 {
2301                   /* Restoring SP from FP in the epilogue.  */
2302                   gcc_assert (cfa.reg == (unsigned) HARD_FRAME_POINTER_REGNUM);
2303                   cfa.reg = STACK_POINTER_REGNUM;
2304                 }
2305               else if (GET_CODE (src) == LO_SUM)
2306                 /* Assume we've set the source reg of the LO_SUM from sp.  */
2307                 ;
2308               else
2309                 gcc_assert (XEXP (src, 0) == stack_pointer_rtx);
2310
2311               if (GET_CODE (src) != MINUS)
2312                 offset = -offset;
2313               if (cfa.reg == STACK_POINTER_REGNUM)
2314                 cfa.offset += offset;
2315               if (cfa_store.reg == STACK_POINTER_REGNUM)
2316                 cfa_store.offset += offset;
2317             }
2318           else if (dest == hard_frame_pointer_rtx)
2319             {
2320               /* Rule 3 */
2321               /* Either setting the FP from an offset of the SP,
2322                  or adjusting the FP */
2323               gcc_assert (frame_pointer_needed);
2324
2325               gcc_assert (REG_P (XEXP (src, 0))
2326                           && (unsigned) REGNO (XEXP (src, 0)) == cfa.reg
2327                           && CONST_INT_P (XEXP (src, 1)));
2328               offset = INTVAL (XEXP (src, 1));
2329               if (GET_CODE (src) != MINUS)
2330                 offset = -offset;
2331               cfa.offset += offset;
2332               cfa.reg = HARD_FRAME_POINTER_REGNUM;
2333             }
2334           else
2335             {
2336               gcc_assert (GET_CODE (src) != MINUS);
2337
2338               /* Rule 4 */
2339               if (REG_P (XEXP (src, 0))
2340                   && REGNO (XEXP (src, 0)) == cfa.reg
2341                   && CONST_INT_P (XEXP (src, 1)))
2342                 {
2343                   /* Setting a temporary CFA register that will be copied
2344                      into the FP later on.  */
2345                   offset = - INTVAL (XEXP (src, 1));
2346                   cfa.offset += offset;
2347                   cfa.reg = REGNO (dest);
2348                   /* Or used to save regs to the stack.  */
2349                   cfa_temp.reg = cfa.reg;
2350                   cfa_temp.offset = cfa.offset;
2351                 }
2352
2353               /* Rule 5 */
2354               else if (REG_P (XEXP (src, 0))
2355                        && REGNO (XEXP (src, 0)) == cfa_temp.reg
2356                        && XEXP (src, 1) == stack_pointer_rtx)
2357                 {
2358                   /* Setting a scratch register that we will use instead
2359                      of SP for saving registers to the stack.  */
2360                   gcc_assert (cfa.reg == STACK_POINTER_REGNUM);
2361                   cfa_store.reg = REGNO (dest);
2362                   cfa_store.offset = cfa.offset - cfa_temp.offset;
2363                 }
2364
2365               /* Rule 9 */
2366               else if (GET_CODE (src) == LO_SUM
2367                        && CONST_INT_P (XEXP (src, 1)))
2368                 {
2369                   cfa_temp.reg = REGNO (dest);
2370                   cfa_temp.offset = INTVAL (XEXP (src, 1));
2371                 }
2372               else
2373                 gcc_unreachable ();
2374             }
2375           break;
2376
2377           /* Rule 6 */
2378         case CONST_INT:
2379           cfa_temp.reg = REGNO (dest);
2380           cfa_temp.offset = INTVAL (src);
2381           break;
2382
2383           /* Rule 7 */
2384         case IOR:
2385           gcc_assert (REG_P (XEXP (src, 0))
2386                       && (unsigned) REGNO (XEXP (src, 0)) == cfa_temp.reg
2387                       && CONST_INT_P (XEXP (src, 1)));
2388
2389           if ((unsigned) REGNO (dest) != cfa_temp.reg)
2390             cfa_temp.reg = REGNO (dest);
2391           cfa_temp.offset |= INTVAL (XEXP (src, 1));
2392           break;
2393
2394           /* Skip over HIGH, assuming it will be followed by a LO_SUM,
2395              which will fill in all of the bits.  */
2396           /* Rule 8 */
2397         case HIGH:
2398           break;
2399
2400           /* Rule 15 */
2401         case UNSPEC:
2402         case UNSPEC_VOLATILE:
2403           gcc_assert (targetm.dwarf_handle_frame_unspec);
2404           targetm.dwarf_handle_frame_unspec (label, expr, XINT (src, 1));
2405           return;
2406
2407           /* Rule 16 */
2408         case AND:
2409           /* If this AND operation happens on stack pointer in prologue,
2410              we assume the stack is realigned and we extract the
2411              alignment.  */
2412           if (fde && XEXP (src, 0) == stack_pointer_rtx)
2413             {
2414               gcc_assert (cfa_store.reg == REGNO (XEXP (src, 0)));
2415               fde->stack_realign = 1;
2416               fde->stack_realignment = INTVAL (XEXP (src, 1));
2417               cfa_store.offset = 0;
2418
2419               if (cfa.reg != STACK_POINTER_REGNUM
2420                   && cfa.reg != HARD_FRAME_POINTER_REGNUM)
2421                 fde->drap_reg = cfa.reg;
2422             }
2423           return;
2424
2425         default:
2426           gcc_unreachable ();
2427         }
2428
2429       def_cfa_1 (label, &cfa);
2430       break;
2431
2432     case MEM:
2433
2434       /* Saving a register to the stack.  Make sure dest is relative to the
2435          CFA register.  */
2436       switch (GET_CODE (XEXP (dest, 0)))
2437         {
2438           /* Rule 10 */
2439           /* With a push.  */
2440         case PRE_MODIFY:
2441           /* We can't handle variable size modifications.  */
2442           gcc_assert (GET_CODE (XEXP (XEXP (XEXP (dest, 0), 1), 1))
2443                       == CONST_INT);
2444           offset = -INTVAL (XEXP (XEXP (XEXP (dest, 0), 1), 1));
2445
2446           gcc_assert (REGNO (XEXP (XEXP (dest, 0), 0)) == STACK_POINTER_REGNUM
2447                       && cfa_store.reg == STACK_POINTER_REGNUM);
2448
2449           cfa_store.offset += offset;
2450           if (cfa.reg == STACK_POINTER_REGNUM)
2451             cfa.offset = cfa_store.offset;
2452
2453           offset = -cfa_store.offset;
2454           break;
2455
2456           /* Rule 11 */
2457         case PRE_INC:
2458         case PRE_DEC:
2459           offset = GET_MODE_SIZE (GET_MODE (dest));
2460           if (GET_CODE (XEXP (dest, 0)) == PRE_INC)
2461             offset = -offset;
2462
2463           gcc_assert ((REGNO (XEXP (XEXP (dest, 0), 0))
2464                        == STACK_POINTER_REGNUM)
2465                       && cfa_store.reg == STACK_POINTER_REGNUM);
2466
2467           cfa_store.offset += offset;
2468
2469           /* Rule 18: If stack is aligned, we will use FP as a
2470              reference to represent the address of the stored
2471              regiser.  */
2472           if (fde
2473               && fde->stack_realign
2474               && src == hard_frame_pointer_rtx)
2475             {
2476               gcc_assert (cfa.reg != HARD_FRAME_POINTER_REGNUM);
2477               cfa_store.offset = 0;
2478             }
2479
2480           if (cfa.reg == STACK_POINTER_REGNUM)
2481             cfa.offset = cfa_store.offset;
2482
2483           offset = -cfa_store.offset;
2484           break;
2485
2486           /* Rule 12 */
2487           /* With an offset.  */
2488         case PLUS:
2489         case MINUS:
2490         case LO_SUM:
2491           {
2492             int regno;
2493
2494             gcc_assert (CONST_INT_P (XEXP (XEXP (dest, 0), 1))
2495                         && REG_P (XEXP (XEXP (dest, 0), 0)));
2496             offset = INTVAL (XEXP (XEXP (dest, 0), 1));
2497             if (GET_CODE (XEXP (dest, 0)) == MINUS)
2498               offset = -offset;
2499
2500             regno = REGNO (XEXP (XEXP (dest, 0), 0));
2501
2502             if (cfa_store.reg == (unsigned) regno)
2503               offset -= cfa_store.offset;
2504             else
2505               {
2506                 gcc_assert (cfa_temp.reg == (unsigned) regno);
2507                 offset -= cfa_temp.offset;
2508               }
2509           }
2510           break;
2511
2512           /* Rule 13 */
2513           /* Without an offset.  */
2514         case REG:
2515           {
2516             int regno = REGNO (XEXP (dest, 0));
2517
2518             if (cfa_store.reg == (unsigned) regno)
2519               offset = -cfa_store.offset;
2520             else
2521               {
2522                 gcc_assert (cfa_temp.reg == (unsigned) regno);
2523                 offset = -cfa_temp.offset;
2524               }
2525           }
2526           break;
2527
2528           /* Rule 14 */
2529         case POST_INC:
2530           gcc_assert (cfa_temp.reg
2531                       == (unsigned) REGNO (XEXP (XEXP (dest, 0), 0)));
2532           offset = -cfa_temp.offset;
2533           cfa_temp.offset -= GET_MODE_SIZE (GET_MODE (dest));
2534           break;
2535
2536         default:
2537           gcc_unreachable ();
2538         }
2539
2540         /* Rule 17 */
2541         /* If the source operand of this MEM operation is not a
2542            register, basically the source is return address.  Here
2543            we only care how much stack grew and we don't save it.  */
2544       if (!REG_P (src))
2545         break;
2546
2547       if (REGNO (src) != STACK_POINTER_REGNUM
2548           && REGNO (src) != HARD_FRAME_POINTER_REGNUM
2549           && (unsigned) REGNO (src) == cfa.reg)
2550         {
2551           /* We're storing the current CFA reg into the stack.  */
2552
2553           if (cfa.offset == 0)
2554             {
2555               /* Rule 19 */
2556               /* If stack is aligned, putting CFA reg into stack means
2557                  we can no longer use reg + offset to represent CFA.
2558                  Here we use DW_CFA_def_cfa_expression instead.  The
2559                  result of this expression equals to the original CFA
2560                  value.  */
2561               if (fde
2562                   && fde->stack_realign
2563                   && cfa.indirect == 0
2564                   && cfa.reg != HARD_FRAME_POINTER_REGNUM)
2565                 {
2566                   dw_cfa_location cfa_exp;
2567
2568                   gcc_assert (fde->drap_reg == cfa.reg);
2569
2570                   cfa_exp.indirect = 1;
2571                   cfa_exp.reg = HARD_FRAME_POINTER_REGNUM;
2572                   cfa_exp.base_offset = offset;
2573                   cfa_exp.offset = 0;
2574
2575                   fde->drap_reg_saved = 1;
2576
2577                   def_cfa_1 (label, &cfa_exp);
2578                   break;
2579                 }
2580
2581               /* If the source register is exactly the CFA, assume
2582                  we're saving SP like any other register; this happens
2583                  on the ARM.  */
2584               def_cfa_1 (label, &cfa);
2585               queue_reg_save (label, stack_pointer_rtx, NULL_RTX, offset);
2586               break;
2587             }
2588           else
2589             {
2590               /* Otherwise, we'll need to look in the stack to
2591                  calculate the CFA.  */
2592               rtx x = XEXP (dest, 0);
2593
2594               if (!REG_P (x))
2595                 x = XEXP (x, 0);
2596               gcc_assert (REG_P (x));
2597
2598               cfa.reg = REGNO (x);
2599               cfa.base_offset = offset;
2600               cfa.indirect = 1;
2601               def_cfa_1 (label, &cfa);
2602               break;
2603             }
2604         }
2605
2606       def_cfa_1 (label, &cfa);
2607       {
2608         span = targetm.dwarf_register_span (src);
2609
2610         if (!span)
2611           queue_reg_save (label, src, NULL_RTX, offset);
2612         else
2613           {
2614             /* We have a PARALLEL describing where the contents of SRC
2615                live.  Queue register saves for each piece of the
2616                PARALLEL.  */
2617             int par_index;
2618             int limit;
2619             HOST_WIDE_INT span_offset = offset;
2620
2621             gcc_assert (GET_CODE (span) == PARALLEL);
2622
2623             limit = XVECLEN (span, 0);
2624             for (par_index = 0; par_index < limit; par_index++)
2625               {
2626                 rtx elem = XVECEXP (span, 0, par_index);
2627
2628                 queue_reg_save (label, elem, NULL_RTX, span_offset);
2629                 span_offset += GET_MODE_SIZE (GET_MODE (elem));
2630               }
2631           }
2632       }
2633       break;
2634
2635     default:
2636       gcc_unreachable ();
2637     }
2638 }
2639
2640 /* Record call frame debugging information for INSN, which either
2641    sets SP or FP (adjusting how we calculate the frame address) or saves a
2642    register to the stack.  If INSN is NULL_RTX, initialize our state.
2643
2644    If AFTER_P is false, we're being called before the insn is emitted,
2645    otherwise after.  Call instructions get invoked twice.  */
2646
2647 void
2648 dwarf2out_frame_debug (rtx insn, bool after_p)
2649 {
2650   const char *label;
2651   rtx note, n;
2652   bool handled_one = false;
2653
2654   if (insn == NULL_RTX)
2655     {
2656       size_t i;
2657
2658       /* Flush any queued register saves.  */
2659       flush_queued_reg_saves ();
2660
2661       /* Set up state for generating call frame debug info.  */
2662       lookup_cfa (&cfa);
2663       gcc_assert (cfa.reg
2664                   == (unsigned long)DWARF_FRAME_REGNUM (STACK_POINTER_REGNUM));
2665
2666       cfa.reg = STACK_POINTER_REGNUM;
2667       cfa_store = cfa;
2668       cfa_temp.reg = -1;
2669       cfa_temp.offset = 0;
2670
2671       for (i = 0; i < num_regs_saved_in_regs; i++)
2672         {
2673           regs_saved_in_regs[i].orig_reg = NULL_RTX;
2674           regs_saved_in_regs[i].saved_in_reg = NULL_RTX;
2675         }
2676       num_regs_saved_in_regs = 0;
2677
2678       if (barrier_args_size)
2679         {
2680           XDELETEVEC (barrier_args_size);
2681           barrier_args_size = NULL;
2682         }
2683       return;
2684     }
2685
2686   if (!NONJUMP_INSN_P (insn) || clobbers_queued_reg_save (insn))
2687     flush_queued_reg_saves ();
2688
2689   if (!RTX_FRAME_RELATED_P (insn))
2690     {
2691       /* ??? This should be done unconditionally since stack adjustments
2692          matter if the stack pointer is not the CFA register anymore but
2693          is still used to save registers.  */
2694       if (!ACCUMULATE_OUTGOING_ARGS)
2695         dwarf2out_notice_stack_adjust (insn, after_p);
2696       return;
2697     }
2698
2699   label = dwarf2out_cfi_label (false);
2700
2701   for (note = REG_NOTES (insn); note; note = XEXP (note, 1))
2702     switch (REG_NOTE_KIND (note))
2703       {
2704       case REG_FRAME_RELATED_EXPR:
2705         insn = XEXP (note, 0);
2706         goto found;
2707
2708       case REG_CFA_DEF_CFA:
2709         dwarf2out_frame_debug_def_cfa (XEXP (note, 0), label);
2710         handled_one = true;
2711         break;
2712
2713       case REG_CFA_ADJUST_CFA:
2714         n = XEXP (note, 0);
2715         if (n == NULL)
2716           {
2717             n = PATTERN (insn);
2718             if (GET_CODE (n) == PARALLEL)
2719               n = XVECEXP (n, 0, 0);
2720           }
2721         dwarf2out_frame_debug_adjust_cfa (n, label);
2722         handled_one = true;
2723         break;
2724
2725       case REG_CFA_OFFSET:
2726         n = XEXP (note, 0);
2727         if (n == NULL)
2728           n = single_set (insn);
2729         dwarf2out_frame_debug_cfa_offset (n, label);
2730         handled_one = true;
2731         break;
2732
2733       case REG_CFA_REGISTER:
2734         n = XEXP (note, 0);
2735         if (n == NULL)
2736           {
2737             n = PATTERN (insn);
2738             if (GET_CODE (n) == PARALLEL)
2739               n = XVECEXP (n, 0, 0);
2740           }
2741         dwarf2out_frame_debug_cfa_register (n, label);
2742         handled_one = true;
2743         break;
2744
2745       case REG_CFA_RESTORE:
2746         n = XEXP (note, 0);
2747         if (n == NULL)
2748           {
2749             n = PATTERN (insn);
2750             if (GET_CODE (n) == PARALLEL)
2751               n = XVECEXP (n, 0, 0);
2752             n = XEXP (n, 0);
2753           }
2754         dwarf2out_frame_debug_cfa_restore (n, label);
2755         handled_one = true;
2756         break;
2757
2758       case REG_CFA_SET_VDRAP:
2759         n = XEXP (note, 0);
2760         if (REG_P (n))
2761           {
2762             dw_fde_ref fde = current_fde ();
2763             if (fde)
2764               {
2765                 gcc_assert (fde->vdrap_reg == INVALID_REGNUM);
2766                 if (REG_P (n))
2767                   fde->vdrap_reg = REGNO (n);
2768               }
2769           }
2770         handled_one = true;
2771         break;
2772
2773       default:
2774         break;
2775       }
2776   if (handled_one)
2777     return;
2778
2779   insn = PATTERN (insn);
2780  found:
2781   dwarf2out_frame_debug_expr (insn, label);
2782 }
2783
2784 /* Determine if we need to save and restore CFI information around this
2785    epilogue.  If SIBCALL is true, then this is a sibcall epilogue.  If
2786    we do need to save/restore, then emit the save now, and insert a
2787    NOTE_INSN_CFA_RESTORE_STATE at the appropriate place in the stream.  */
2788
2789 void
2790 dwarf2out_begin_epilogue (rtx insn)
2791 {
2792   bool saw_frp = false;
2793   rtx i;
2794
2795   /* Scan forward to the return insn, noticing if there are possible
2796      frame related insns.  */
2797   for (i = NEXT_INSN (insn); i ; i = NEXT_INSN (i))
2798     {
2799       if (!INSN_P (i))
2800         continue;
2801
2802       /* Look for both regular and sibcalls to end the block.  */
2803       if (returnjump_p (i))
2804         break;
2805       if (CALL_P (i) && SIBLING_CALL_P (i))
2806         break;
2807
2808       if (GET_CODE (PATTERN (i)) == SEQUENCE)
2809         {
2810           int idx;
2811           rtx seq = PATTERN (i);
2812
2813           if (returnjump_p (XVECEXP (seq, 0, 0)))
2814             break;
2815           if (CALL_P (XVECEXP (seq, 0, 0))
2816               && SIBLING_CALL_P (XVECEXP (seq, 0, 0)))
2817             break;
2818
2819           for (idx = 0; idx < XVECLEN (seq, 0); idx++)
2820             if (RTX_FRAME_RELATED_P (XVECEXP (seq, 0, idx)))
2821               saw_frp = true;
2822         }
2823
2824       if (RTX_FRAME_RELATED_P (i))
2825         saw_frp = true;
2826     }
2827
2828   /* If the port doesn't emit epilogue unwind info, we don't need a
2829      save/restore pair.  */
2830   if (!saw_frp)
2831     return;
2832
2833   /* Otherwise, search forward to see if the return insn was the last
2834      basic block of the function.  If so, we don't need save/restore.  */
2835   gcc_assert (i != NULL);
2836   i = next_real_insn (i);
2837   if (i == NULL)
2838     return;
2839
2840   /* Insert the restore before that next real insn in the stream, and before
2841      a potential NOTE_INSN_EPILOGUE_BEG -- we do need these notes to be
2842      properly nested.  This should be after any label or alignment.  This
2843      will be pushed into the CFI stream by the function below.  */
2844   while (1)
2845     {
2846       rtx p = PREV_INSN (i);
2847       if (!NOTE_P (p))
2848         break;
2849       if (NOTE_KIND (p) == NOTE_INSN_BASIC_BLOCK)
2850         break;
2851       i = p;
2852     }
2853   emit_note_before (NOTE_INSN_CFA_RESTORE_STATE, i);
2854
2855   emit_cfa_remember = true;
2856
2857   /* And emulate the state save.  */
2858   gcc_assert (!cfa_remember.in_use);
2859   cfa_remember = cfa;
2860   cfa_remember.in_use = 1;
2861 }
2862
2863 /* A "subroutine" of dwarf2out_begin_epilogue.  Emit the restore required.  */
2864
2865 void
2866 dwarf2out_frame_debug_restore_state (void)
2867 {
2868   dw_cfi_ref cfi = new_cfi ();
2869   const char *label = dwarf2out_cfi_label (false);
2870
2871   cfi->dw_cfi_opc = DW_CFA_restore_state;
2872   add_fde_cfi (label, cfi);
2873
2874   gcc_assert (cfa_remember.in_use);
2875   cfa = cfa_remember;
2876   cfa_remember.in_use = 0;
2877 }
2878
2879 #endif
2880
2881 /* Describe for the GTY machinery what parts of dw_cfi_oprnd1 are used.  */
2882 static enum dw_cfi_oprnd_type dw_cfi_oprnd1_desc
2883  (enum dwarf_call_frame_info cfi);
2884
2885 static enum dw_cfi_oprnd_type
2886 dw_cfi_oprnd1_desc (enum dwarf_call_frame_info cfi)
2887 {
2888   switch (cfi)
2889     {
2890     case DW_CFA_nop:
2891     case DW_CFA_GNU_window_save:
2892     case DW_CFA_remember_state:
2893     case DW_CFA_restore_state:
2894       return dw_cfi_oprnd_unused;
2895
2896     case DW_CFA_set_loc:
2897     case DW_CFA_advance_loc1:
2898     case DW_CFA_advance_loc2:
2899     case DW_CFA_advance_loc4:
2900     case DW_CFA_MIPS_advance_loc8:
2901       return dw_cfi_oprnd_addr;
2902
2903     case DW_CFA_offset:
2904     case DW_CFA_offset_extended:
2905     case DW_CFA_def_cfa:
2906     case DW_CFA_offset_extended_sf:
2907     case DW_CFA_def_cfa_sf:
2908     case DW_CFA_restore:
2909     case DW_CFA_restore_extended:
2910     case DW_CFA_undefined:
2911     case DW_CFA_same_value:
2912     case DW_CFA_def_cfa_register:
2913     case DW_CFA_register:
2914     case DW_CFA_expression:
2915       return dw_cfi_oprnd_reg_num;
2916
2917     case DW_CFA_def_cfa_offset:
2918     case DW_CFA_GNU_args_size:
2919     case DW_CFA_def_cfa_offset_sf:
2920       return dw_cfi_oprnd_offset;
2921
2922     case DW_CFA_def_cfa_expression:
2923       return dw_cfi_oprnd_loc;
2924
2925     default:
2926       gcc_unreachable ();
2927     }
2928 }
2929
2930 /* Describe for the GTY machinery what parts of dw_cfi_oprnd2 are used.  */
2931 static enum dw_cfi_oprnd_type dw_cfi_oprnd2_desc
2932  (enum dwarf_call_frame_info cfi);
2933
2934 static enum dw_cfi_oprnd_type
2935 dw_cfi_oprnd2_desc (enum dwarf_call_frame_info cfi)
2936 {
2937   switch (cfi)
2938     {
2939     case DW_CFA_def_cfa:
2940     case DW_CFA_def_cfa_sf:
2941     case DW_CFA_offset:
2942     case DW_CFA_offset_extended_sf:
2943     case DW_CFA_offset_extended:
2944       return dw_cfi_oprnd_offset;
2945
2946     case DW_CFA_register:
2947       return dw_cfi_oprnd_reg_num;
2948
2949     case DW_CFA_expression:
2950       return dw_cfi_oprnd_loc;
2951
2952     default:
2953       return dw_cfi_oprnd_unused;
2954     }
2955 }
2956
2957 #if defined (DWARF2_DEBUGGING_INFO) || defined (DWARF2_UNWIND_INFO)
2958
2959 /* Switch [BACK] to eh_frame_section.  If we don't have an eh_frame_section,
2960    switch to the data section instead, and write out a synthetic start label
2961    for collect2 the first time around.  */
2962
2963 static void
2964 switch_to_eh_frame_section (bool back)
2965 {
2966   tree label;
2967
2968 #ifdef EH_FRAME_SECTION_NAME
2969   if (eh_frame_section == 0)
2970     {
2971       int flags;
2972
2973       if (EH_TABLES_CAN_BE_READ_ONLY)
2974         {
2975           int fde_encoding;
2976           int per_encoding;
2977           int lsda_encoding;
2978
2979           fde_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/1,
2980                                                        /*global=*/0);
2981           per_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/2,
2982                                                        /*global=*/1);
2983           lsda_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/0,
2984                                                         /*global=*/0);
2985           flags = ((! flag_pic
2986                     || ((fde_encoding & 0x70) != DW_EH_PE_absptr
2987                         && (fde_encoding & 0x70) != DW_EH_PE_aligned
2988                         && (per_encoding & 0x70) != DW_EH_PE_absptr
2989                         && (per_encoding & 0x70) != DW_EH_PE_aligned
2990                         && (lsda_encoding & 0x70) != DW_EH_PE_absptr
2991                         && (lsda_encoding & 0x70) != DW_EH_PE_aligned))
2992                    ? 0 : SECTION_WRITE);
2993         }
2994       else
2995         flags = SECTION_WRITE;
2996       eh_frame_section = get_section (EH_FRAME_SECTION_NAME, flags, NULL);
2997     }
2998 #endif
2999
3000   if (eh_frame_section)
3001     switch_to_section (eh_frame_section);
3002   else
3003     {
3004       /* We have no special eh_frame section.  Put the information in
3005          the data section and emit special labels to guide collect2.  */
3006       switch_to_section (data_section);
3007
3008       if (!back)
3009         {
3010           label = get_file_function_name ("F");
3011           ASM_OUTPUT_ALIGN (asm_out_file, floor_log2 (PTR_SIZE));
3012           targetm.asm_out.globalize_label (asm_out_file,
3013                                            IDENTIFIER_POINTER (label));
3014           ASM_OUTPUT_LABEL (asm_out_file, IDENTIFIER_POINTER (label));
3015         }
3016     }
3017 }
3018
3019 /* Switch [BACK] to the eh or debug frame table section, depending on
3020    FOR_EH.  */
3021
3022 static void
3023 switch_to_frame_table_section (int for_eh, bool back)
3024 {
3025   if (for_eh)
3026     switch_to_eh_frame_section (back);
3027   else
3028     {
3029       if (!debug_frame_section)
3030         debug_frame_section = get_section (DEBUG_FRAME_SECTION,
3031                                            SECTION_DEBUG, NULL);
3032       switch_to_section (debug_frame_section);
3033     }
3034 }
3035
3036 /* Output a Call Frame Information opcode and its operand(s).  */
3037
3038 static void
3039 output_cfi (dw_cfi_ref cfi, dw_fde_ref fde, int for_eh)
3040 {
3041   unsigned long r;
3042   HOST_WIDE_INT off;
3043
3044   if (cfi->dw_cfi_opc == DW_CFA_advance_loc)
3045     dw2_asm_output_data (1, (cfi->dw_cfi_opc
3046                              | (cfi->dw_cfi_oprnd1.dw_cfi_offset & 0x3f)),
3047                          "DW_CFA_advance_loc " HOST_WIDE_INT_PRINT_HEX,
3048                          ((unsigned HOST_WIDE_INT)
3049                           cfi->dw_cfi_oprnd1.dw_cfi_offset));
3050   else if (cfi->dw_cfi_opc == DW_CFA_offset)
3051     {
3052       r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, for_eh);
3053       dw2_asm_output_data (1, (cfi->dw_cfi_opc | (r & 0x3f)),
3054                            "DW_CFA_offset, column %#lx", r);
3055       off = div_data_align (cfi->dw_cfi_oprnd2.dw_cfi_offset);
3056       dw2_asm_output_data_uleb128 (off, NULL);
3057     }
3058   else if (cfi->dw_cfi_opc == DW_CFA_restore)
3059     {
3060       r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, for_eh);
3061       dw2_asm_output_data (1, (cfi->dw_cfi_opc | (r & 0x3f)),
3062                            "DW_CFA_restore, column %#lx", r);
3063     }
3064   else
3065     {
3066       dw2_asm_output_data (1, cfi->dw_cfi_opc,
3067                            "%s", dwarf_cfi_name (cfi->dw_cfi_opc));
3068
3069       switch (cfi->dw_cfi_opc)
3070         {
3071         case DW_CFA_set_loc:
3072           if (for_eh)
3073             dw2_asm_output_encoded_addr_rtx (
3074                 ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/1, /*global=*/0),
3075                 gen_rtx_SYMBOL_REF (Pmode, cfi->dw_cfi_oprnd1.dw_cfi_addr),
3076                 false, NULL);
3077           else
3078             dw2_asm_output_addr (DWARF2_ADDR_SIZE,
3079                                  cfi->dw_cfi_oprnd1.dw_cfi_addr, NULL);
3080           fde->dw_fde_current_label = cfi->dw_cfi_oprnd1.dw_cfi_addr;
3081           break;
3082
3083         case DW_CFA_advance_loc1:
3084           dw2_asm_output_delta (1, cfi->dw_cfi_oprnd1.dw_cfi_addr,
3085                                 fde->dw_fde_current_label, NULL);
3086           fde->dw_fde_current_label = cfi->dw_cfi_oprnd1.dw_cfi_addr;
3087           break;
3088
3089         case DW_CFA_advance_loc2:
3090           dw2_asm_output_delta (2, cfi->dw_cfi_oprnd1.dw_cfi_addr,
3091                                 fde->dw_fde_current_label, NULL);
3092           fde->dw_fde_current_label = cfi->dw_cfi_oprnd1.dw_cfi_addr;
3093           break;
3094
3095         case DW_CFA_advance_loc4:
3096           dw2_asm_output_delta (4, cfi->dw_cfi_oprnd1.dw_cfi_addr,
3097                                 fde->dw_fde_current_label, NULL);
3098           fde->dw_fde_current_label = cfi->dw_cfi_oprnd1.dw_cfi_addr;
3099           break;
3100
3101         case DW_CFA_MIPS_advance_loc8:
3102           dw2_asm_output_delta (8, cfi->dw_cfi_oprnd1.dw_cfi_addr,
3103                                 fde->dw_fde_current_label, NULL);
3104           fde->dw_fde_current_label = cfi->dw_cfi_oprnd1.dw_cfi_addr;
3105           break;
3106
3107         case DW_CFA_offset_extended:
3108           r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, for_eh);
3109           dw2_asm_output_data_uleb128 (r, NULL);
3110           off = div_data_align (cfi->dw_cfi_oprnd2.dw_cfi_offset);
3111           dw2_asm_output_data_uleb128 (off, NULL);
3112           break;
3113
3114         case DW_CFA_def_cfa:
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           dw2_asm_output_data_uleb128 (cfi->dw_cfi_oprnd2.dw_cfi_offset, NULL);
3118           break;
3119
3120         case DW_CFA_offset_extended_sf:
3121           r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, for_eh);
3122           dw2_asm_output_data_uleb128 (r, NULL);
3123           off = div_data_align (cfi->dw_cfi_oprnd2.dw_cfi_offset);
3124           dw2_asm_output_data_sleb128 (off, NULL);
3125           break;
3126
3127         case DW_CFA_def_cfa_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_restore_extended:
3135         case DW_CFA_undefined:
3136         case DW_CFA_same_value:
3137         case DW_CFA_def_cfa_register:
3138           r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, for_eh);
3139           dw2_asm_output_data_uleb128 (r, NULL);
3140           break;
3141
3142         case DW_CFA_register:
3143           r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, for_eh);
3144           dw2_asm_output_data_uleb128 (r, NULL);
3145           r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd2.dw_cfi_reg_num, for_eh);
3146           dw2_asm_output_data_uleb128 (r, NULL);
3147           break;
3148
3149         case DW_CFA_def_cfa_offset:
3150         case DW_CFA_GNU_args_size:
3151           dw2_asm_output_data_uleb128 (cfi->dw_cfi_oprnd1.dw_cfi_offset, NULL);
3152           break;
3153
3154         case DW_CFA_def_cfa_offset_sf:
3155           off = div_data_align (cfi->dw_cfi_oprnd1.dw_cfi_offset);
3156           dw2_asm_output_data_sleb128 (off, NULL);
3157           break;
3158
3159         case DW_CFA_GNU_window_save:
3160           break;
3161
3162         case DW_CFA_def_cfa_expression:
3163         case DW_CFA_expression:
3164           output_cfa_loc (cfi);
3165           break;
3166
3167         case DW_CFA_GNU_negative_offset_extended:
3168           /* Obsoleted by DW_CFA_offset_extended_sf.  */
3169           gcc_unreachable ();
3170
3171         default:
3172           break;
3173         }
3174     }
3175 }
3176
3177 /* Similar, but do it via assembler directives instead.  */
3178
3179 static void
3180 output_cfi_directive (dw_cfi_ref cfi)
3181 {
3182   unsigned long r, r2;
3183
3184   switch (cfi->dw_cfi_opc)
3185     {
3186     case DW_CFA_advance_loc:
3187     case DW_CFA_advance_loc1:
3188     case DW_CFA_advance_loc2:
3189     case DW_CFA_advance_loc4:
3190     case DW_CFA_MIPS_advance_loc8:
3191     case DW_CFA_set_loc:
3192       /* Should only be created by add_fde_cfi in a code path not
3193          followed when emitting via directives.  The assembler is
3194          going to take care of this for us.  */
3195       gcc_unreachable ();
3196
3197     case DW_CFA_offset:
3198     case DW_CFA_offset_extended:
3199     case DW_CFA_offset_extended_sf:
3200       r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, 1);
3201       fprintf (asm_out_file, "\t.cfi_offset %lu, "HOST_WIDE_INT_PRINT_DEC"\n",
3202                r, cfi->dw_cfi_oprnd2.dw_cfi_offset);
3203       break;
3204
3205     case DW_CFA_restore:
3206     case DW_CFA_restore_extended:
3207       r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, 1);
3208       fprintf (asm_out_file, "\t.cfi_restore %lu\n", r);
3209       break;
3210
3211     case DW_CFA_undefined:
3212       r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, 1);
3213       fprintf (asm_out_file, "\t.cfi_undefined %lu\n", r);
3214       break;
3215
3216     case DW_CFA_same_value:
3217       r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, 1);
3218       fprintf (asm_out_file, "\t.cfi_same_value %lu\n", r);
3219       break;
3220
3221     case DW_CFA_def_cfa:
3222     case DW_CFA_def_cfa_sf:
3223       r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, 1);
3224       fprintf (asm_out_file, "\t.cfi_def_cfa %lu, "HOST_WIDE_INT_PRINT_DEC"\n",
3225                r, cfi->dw_cfi_oprnd2.dw_cfi_offset);
3226       break;
3227
3228     case DW_CFA_def_cfa_register:
3229       r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, 1);
3230       fprintf (asm_out_file, "\t.cfi_def_cfa_register %lu\n", r);
3231       break;
3232
3233     case DW_CFA_register:
3234       r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, 1);
3235       r2 = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd2.dw_cfi_reg_num, 1);
3236       fprintf (asm_out_file, "\t.cfi_register %lu, %lu\n", r, r2);
3237       break;
3238
3239     case DW_CFA_def_cfa_offset:
3240     case DW_CFA_def_cfa_offset_sf:
3241       fprintf (asm_out_file, "\t.cfi_def_cfa_offset "
3242                HOST_WIDE_INT_PRINT_DEC"\n",
3243                cfi->dw_cfi_oprnd1.dw_cfi_offset);
3244       break;
3245
3246     case DW_CFA_remember_state:
3247       fprintf (asm_out_file, "\t.cfi_remember_state\n");
3248       break;
3249     case DW_CFA_restore_state:
3250       fprintf (asm_out_file, "\t.cfi_restore_state\n");
3251       break;
3252
3253     case DW_CFA_GNU_args_size:
3254       fprintf (asm_out_file, "\t.cfi_escape %#x,", DW_CFA_GNU_args_size);
3255       dw2_asm_output_data_uleb128_raw (cfi->dw_cfi_oprnd1.dw_cfi_offset);
3256       if (flag_debug_asm)
3257         fprintf (asm_out_file, "\t%s args_size "HOST_WIDE_INT_PRINT_DEC,
3258                  ASM_COMMENT_START, cfi->dw_cfi_oprnd1.dw_cfi_offset);
3259       fputc ('\n', asm_out_file);
3260       break;
3261
3262     case DW_CFA_GNU_window_save:
3263       fprintf (asm_out_file, "\t.cfi_window_save\n");
3264       break;
3265
3266     case DW_CFA_def_cfa_expression:
3267     case DW_CFA_expression:
3268       fprintf (asm_out_file, "\t.cfi_escape %#x,", cfi->dw_cfi_opc);
3269       output_cfa_loc_raw (cfi);
3270       fputc ('\n', asm_out_file);
3271       break;
3272
3273     default:
3274       gcc_unreachable ();
3275     }
3276 }
3277
3278 DEF_VEC_P (dw_cfi_ref);
3279 DEF_VEC_ALLOC_P (dw_cfi_ref, heap);
3280
3281 /* Output CFIs to bring current FDE to the same state as after executing
3282    CFIs in CFI chain.  DO_CFI_ASM is true if .cfi_* directives shall
3283    be emitted, false otherwise.  If it is false, FDE and FOR_EH are the
3284    other arguments to pass to output_cfi.  */
3285
3286 static void
3287 output_cfis (dw_cfi_ref cfi, bool do_cfi_asm, dw_fde_ref fde, bool for_eh)
3288 {
3289   struct dw_cfi_struct cfi_buf;
3290   dw_cfi_ref cfi2;
3291   dw_cfi_ref cfi_args_size = NULL, cfi_cfa = NULL, cfi_cfa_offset = NULL;
3292   VEC (dw_cfi_ref, heap) *regs = VEC_alloc (dw_cfi_ref, heap, 32);
3293   unsigned int len, idx;
3294
3295   for (;; cfi = cfi->dw_cfi_next)
3296     switch (cfi ? cfi->dw_cfi_opc : DW_CFA_nop)
3297       {
3298       case DW_CFA_advance_loc:
3299       case DW_CFA_advance_loc1:
3300       case DW_CFA_advance_loc2:
3301       case DW_CFA_advance_loc4:
3302       case DW_CFA_MIPS_advance_loc8:
3303       case DW_CFA_set_loc:
3304         /* All advances should be ignored.  */
3305         break;
3306       case DW_CFA_remember_state:
3307         {
3308           dw_cfi_ref args_size = cfi_args_size;
3309
3310           /* Skip everything between .cfi_remember_state and
3311              .cfi_restore_state.  */
3312           for (cfi2 = cfi->dw_cfi_next; cfi2; cfi2 = cfi2->dw_cfi_next)
3313             if (cfi2->dw_cfi_opc == DW_CFA_restore_state)
3314               break;
3315             else if (cfi2->dw_cfi_opc == DW_CFA_GNU_args_size)
3316               args_size = cfi2;
3317             else
3318               gcc_assert (cfi2->dw_cfi_opc != DW_CFA_remember_state);
3319
3320           if (cfi2 == NULL)
3321             goto flush_all;
3322           else
3323             {
3324               cfi = cfi2;
3325               cfi_args_size = args_size;
3326             }
3327           break;
3328         }
3329       case DW_CFA_GNU_args_size:
3330         cfi_args_size = cfi;
3331         break;
3332       case DW_CFA_GNU_window_save:
3333         goto flush_all;
3334       case DW_CFA_offset:
3335       case DW_CFA_offset_extended:
3336       case DW_CFA_offset_extended_sf:
3337       case DW_CFA_restore:
3338       case DW_CFA_restore_extended:
3339       case DW_CFA_undefined:
3340       case DW_CFA_same_value:
3341       case DW_CFA_register:
3342       case DW_CFA_val_offset:
3343       case DW_CFA_val_offset_sf:
3344       case DW_CFA_expression:
3345       case DW_CFA_val_expression:
3346       case DW_CFA_GNU_negative_offset_extended:
3347         if (VEC_length (dw_cfi_ref, regs) <= cfi->dw_cfi_oprnd1.dw_cfi_reg_num)
3348           VEC_safe_grow_cleared (dw_cfi_ref, heap, regs,
3349                                  cfi->dw_cfi_oprnd1.dw_cfi_reg_num + 1);
3350         VEC_replace (dw_cfi_ref, regs, cfi->dw_cfi_oprnd1.dw_cfi_reg_num, cfi);
3351         break;
3352       case DW_CFA_def_cfa:
3353       case DW_CFA_def_cfa_sf:
3354       case DW_CFA_def_cfa_expression:
3355         cfi_cfa = cfi;
3356         cfi_cfa_offset = cfi;
3357         break;
3358       case DW_CFA_def_cfa_register:
3359         cfi_cfa = cfi;
3360         break;
3361       case DW_CFA_def_cfa_offset:
3362       case DW_CFA_def_cfa_offset_sf:
3363         cfi_cfa_offset = cfi;
3364         break;
3365       case DW_CFA_nop:
3366         gcc_assert (cfi == NULL);
3367       flush_all:
3368         len = VEC_length (dw_cfi_ref, regs);
3369         for (idx = 0; idx < len; idx++)
3370           {
3371             cfi2 = VEC_replace (dw_cfi_ref, regs, idx, NULL);
3372             if (cfi2 != NULL
3373                 && cfi2->dw_cfi_opc != DW_CFA_restore
3374                 && cfi2->dw_cfi_opc != DW_CFA_restore_extended)
3375               {
3376                 if (do_cfi_asm)
3377                   output_cfi_directive (cfi2);
3378                 else
3379                   output_cfi (cfi2, fde, for_eh);
3380               }
3381           }
3382         if (cfi_cfa && cfi_cfa_offset && cfi_cfa_offset != cfi_cfa)
3383           {
3384             gcc_assert (cfi_cfa->dw_cfi_opc != DW_CFA_def_cfa_expression);
3385             cfi_buf = *cfi_cfa;
3386             switch (cfi_cfa_offset->dw_cfi_opc)
3387               {
3388               case DW_CFA_def_cfa_offset:
3389                 cfi_buf.dw_cfi_opc = DW_CFA_def_cfa;
3390                 cfi_buf.dw_cfi_oprnd2 = cfi_cfa_offset->dw_cfi_oprnd1;
3391                 break;
3392               case DW_CFA_def_cfa_offset_sf:
3393                 cfi_buf.dw_cfi_opc = DW_CFA_def_cfa_sf;
3394                 cfi_buf.dw_cfi_oprnd2 = cfi_cfa_offset->dw_cfi_oprnd1;
3395                 break;
3396               case DW_CFA_def_cfa:
3397               case DW_CFA_def_cfa_sf:
3398                 cfi_buf.dw_cfi_opc = cfi_cfa_offset->dw_cfi_opc;
3399                 cfi_buf.dw_cfi_oprnd2 = cfi_cfa_offset->dw_cfi_oprnd2;
3400                 break;
3401               default:
3402                 gcc_unreachable ();
3403               }
3404             cfi_cfa = &cfi_buf;
3405           }
3406         else if (cfi_cfa_offset)
3407           cfi_cfa = cfi_cfa_offset;
3408         if (cfi_cfa)
3409           {
3410             if (do_cfi_asm)
3411               output_cfi_directive (cfi_cfa);
3412             else
3413               output_cfi (cfi_cfa, fde, for_eh);
3414           }
3415         cfi_cfa = NULL;
3416         cfi_cfa_offset = NULL;
3417         if (cfi_args_size
3418             && cfi_args_size->dw_cfi_oprnd1.dw_cfi_offset)
3419           {
3420             if (do_cfi_asm)
3421               output_cfi_directive (cfi_args_size);
3422             else
3423               output_cfi (cfi_args_size, fde, for_eh);
3424           }
3425         cfi_args_size = NULL;
3426         if (cfi == NULL)
3427           {
3428             VEC_free (dw_cfi_ref, heap, regs);
3429             return;
3430           }
3431         else if (do_cfi_asm)
3432           output_cfi_directive (cfi);
3433         else
3434           output_cfi (cfi, fde, for_eh);
3435         break;
3436       default:
3437         gcc_unreachable ();
3438     }
3439 }
3440
3441 /* Output one FDE.  */
3442
3443 static void
3444 output_fde (dw_fde_ref fde, bool for_eh, bool second,
3445             char *section_start_label, int fde_encoding, char *augmentation,
3446             bool any_lsda_needed, int lsda_encoding)
3447 {
3448   const char *begin, *end;
3449   static unsigned int j;
3450   char l1[20], l2[20];
3451   dw_cfi_ref cfi;
3452
3453   targetm.asm_out.unwind_label (asm_out_file, fde->decl, for_eh,
3454                                 /* empty */ 0);
3455   targetm.asm_out.internal_label (asm_out_file, FDE_LABEL,
3456                                   for_eh + j);
3457   ASM_GENERATE_INTERNAL_LABEL (l1, FDE_AFTER_SIZE_LABEL, for_eh + j);
3458   ASM_GENERATE_INTERNAL_LABEL (l2, FDE_END_LABEL, for_eh + j);
3459   if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4 && !for_eh)
3460     dw2_asm_output_data (4, 0xffffffff, "Initial length escape value"
3461                          " indicating 64-bit DWARF extension");
3462   dw2_asm_output_delta (for_eh ? 4 : DWARF_OFFSET_SIZE, l2, l1,
3463                         "FDE Length");
3464   ASM_OUTPUT_LABEL (asm_out_file, l1);
3465
3466   if (for_eh)
3467     dw2_asm_output_delta (4, l1, section_start_label, "FDE CIE offset");
3468   else
3469     dw2_asm_output_offset (DWARF_OFFSET_SIZE, section_start_label,
3470                            debug_frame_section, "FDE CIE offset");
3471
3472   if (!fde->dw_fde_switched_sections)
3473     {
3474       begin = fde->dw_fde_begin;
3475       end = fde->dw_fde_end;
3476     }
3477   else
3478     {
3479       /* For the first section, prefer dw_fde_begin over
3480          dw_fde_{hot,cold}_section_label, as the latter
3481          might be separated from the real start of the
3482          function by alignment padding.  */
3483       if (!second)
3484         begin = fde->dw_fde_begin;
3485       else if (fde->dw_fde_switched_cold_to_hot)
3486         begin = fde->dw_fde_hot_section_label;
3487       else
3488         begin = fde->dw_fde_unlikely_section_label;
3489       if (second ^ fde->dw_fde_switched_cold_to_hot)
3490         end = fde->dw_fde_unlikely_section_end_label;
3491       else
3492         end = fde->dw_fde_hot_section_end_label;
3493     }
3494
3495   if (for_eh)
3496     {
3497       rtx sym_ref = gen_rtx_SYMBOL_REF (Pmode, begin);
3498       SYMBOL_REF_FLAGS (sym_ref) |= SYMBOL_FLAG_LOCAL;
3499       dw2_asm_output_encoded_addr_rtx (fde_encoding, sym_ref, false,
3500                                        "FDE initial location");
3501       dw2_asm_output_delta (size_of_encoded_value (fde_encoding),
3502                             end, begin, "FDE address range");
3503     }
3504   else
3505     {
3506       dw2_asm_output_addr (DWARF2_ADDR_SIZE, begin, "FDE initial location");
3507       dw2_asm_output_delta (DWARF2_ADDR_SIZE, end, begin, "FDE address range");
3508     }
3509
3510   if (augmentation[0])
3511     {
3512       if (any_lsda_needed)
3513         {
3514           int size = size_of_encoded_value (lsda_encoding);
3515
3516           if (lsda_encoding == DW_EH_PE_aligned)
3517             {
3518               int offset = (  4         /* Length */
3519                             + 4         /* CIE offset */
3520                             + 2 * size_of_encoded_value (fde_encoding)
3521                             + 1         /* Augmentation size */ );
3522               int pad = -offset & (PTR_SIZE - 1);
3523
3524               size += pad;
3525               gcc_assert (size_of_uleb128 (size) == 1);
3526             }
3527
3528           dw2_asm_output_data_uleb128 (size, "Augmentation size");
3529
3530           if (fde->uses_eh_lsda)
3531             {
3532               ASM_GENERATE_INTERNAL_LABEL (l1, second ? "LLSDAC" : "LLSDA",
3533                                            fde->funcdef_number);
3534               dw2_asm_output_encoded_addr_rtx (lsda_encoding,
3535                                                gen_rtx_SYMBOL_REF (Pmode, l1),
3536                                                false,
3537                                                "Language Specific Data Area");
3538             }
3539           else
3540             {
3541               if (lsda_encoding == DW_EH_PE_aligned)
3542                 ASM_OUTPUT_ALIGN (asm_out_file, floor_log2 (PTR_SIZE));
3543               dw2_asm_output_data (size_of_encoded_value (lsda_encoding), 0,
3544                                    "Language Specific Data Area (none)");
3545             }
3546         }
3547       else
3548         dw2_asm_output_data_uleb128 (0, "Augmentation size");
3549     }
3550
3551   /* Loop through the Call Frame Instructions associated with
3552      this FDE.  */
3553   fde->dw_fde_current_label = begin;
3554   if (!fde->dw_fde_switched_sections)
3555     for (cfi = fde->dw_fde_cfi; cfi != NULL; cfi = cfi->dw_cfi_next)
3556       output_cfi (cfi, fde, for_eh);
3557   else if (!second)
3558     {
3559       if (fde->dw_fde_switch_cfi)
3560         for (cfi = fde->dw_fde_cfi; cfi != NULL; cfi = cfi->dw_cfi_next)
3561           {
3562             output_cfi (cfi, fde, for_eh);
3563             if (cfi == fde->dw_fde_switch_cfi)
3564               break;
3565           }
3566     }
3567   else
3568     {
3569       dw_cfi_ref cfi_next = fde->dw_fde_cfi;
3570
3571       if (fde->dw_fde_switch_cfi)
3572         {
3573           cfi_next = fde->dw_fde_switch_cfi->dw_cfi_next;
3574           fde->dw_fde_switch_cfi->dw_cfi_next = NULL;
3575           output_cfis (fde->dw_fde_cfi, false, fde, for_eh);
3576           fde->dw_fde_switch_cfi->dw_cfi_next = cfi_next;
3577         }
3578       for (cfi = cfi_next; cfi != NULL; cfi = cfi->dw_cfi_next)
3579         output_cfi (cfi, fde, for_eh);
3580     }
3581
3582   /* If we are to emit a ref/link from function bodies to their frame tables,
3583      do it now.  This is typically performed to make sure that tables
3584      associated with functions are dragged with them and not discarded in
3585      garbage collecting links. We need to do this on a per function basis to
3586      cope with -ffunction-sections.  */
3587
3588 #ifdef ASM_OUTPUT_DWARF_TABLE_REF
3589   /* Switch to the function section, emit the ref to the tables, and
3590      switch *back* into the table section.  */
3591   switch_to_section (function_section (fde->decl));
3592   ASM_OUTPUT_DWARF_TABLE_REF (section_start_label);
3593   switch_to_frame_table_section (for_eh, true);
3594 #endif
3595
3596   /* Pad the FDE out to an address sized boundary.  */
3597   ASM_OUTPUT_ALIGN (asm_out_file,
3598                     floor_log2 ((for_eh ? PTR_SIZE : DWARF2_ADDR_SIZE)));
3599   ASM_OUTPUT_LABEL (asm_out_file, l2);
3600
3601   j += 2;
3602 }
3603
3604 /* Output the call frame information used to record information
3605    that relates to calculating the frame pointer, and records the
3606    location of saved registers.  */
3607
3608 static void
3609 output_call_frame_info (int for_eh)
3610 {
3611   unsigned int i;
3612   dw_fde_ref fde;
3613   dw_cfi_ref cfi;
3614   char l1[20], l2[20], section_start_label[20];
3615   bool any_lsda_needed = false;
3616   char augmentation[6];
3617   int augmentation_size;
3618   int fde_encoding = DW_EH_PE_absptr;
3619   int per_encoding = DW_EH_PE_absptr;
3620   int lsda_encoding = DW_EH_PE_absptr;
3621   int return_reg;
3622   rtx personality = NULL;
3623   int dw_cie_version;
3624
3625   /* Don't emit a CIE if there won't be any FDEs.  */
3626   if (fde_table_in_use == 0)
3627     return;
3628
3629   /* Nothing to do if the assembler's doing it all.  */
3630   if (dwarf2out_do_cfi_asm ())
3631     return;
3632
3633   /* If we make FDEs linkonce, we may have to emit an empty label for
3634      an FDE that wouldn't otherwise be emitted.  We want to avoid
3635      having an FDE kept around when the function it refers to is
3636      discarded.  Example where this matters: a primary function
3637      template in C++ requires EH information, but an explicit
3638      specialization doesn't.  */
3639   if (TARGET_USES_WEAK_UNWIND_INFO
3640       && ! flag_asynchronous_unwind_tables
3641       && flag_exceptions
3642       && for_eh)
3643     for (i = 0; i < fde_table_in_use; i++)
3644       if ((fde_table[i].nothrow || fde_table[i].all_throwers_are_sibcalls)
3645           && !fde_table[i].uses_eh_lsda
3646           && ! DECL_WEAK (fde_table[i].decl))
3647         targetm.asm_out.unwind_label (asm_out_file, fde_table[i].decl,
3648                                       for_eh, /* empty */ 1);
3649
3650   /* If we don't have any functions we'll want to unwind out of, don't
3651      emit any EH unwind information.  Note that if exceptions aren't
3652      enabled, we won't have collected nothrow information, and if we
3653      asked for asynchronous tables, we always want this info.  */
3654   if (for_eh)
3655     {
3656       bool any_eh_needed = !flag_exceptions || flag_asynchronous_unwind_tables;
3657
3658       for (i = 0; i < fde_table_in_use; i++)
3659         if (fde_table[i].uses_eh_lsda)
3660           any_eh_needed = any_lsda_needed = true;
3661         else if (TARGET_USES_WEAK_UNWIND_INFO && DECL_WEAK (fde_table[i].decl))
3662           any_eh_needed = true;
3663         else if (! fde_table[i].nothrow
3664                  && ! fde_table[i].all_throwers_are_sibcalls)
3665           any_eh_needed = true;
3666
3667       if (! any_eh_needed)
3668         return;
3669     }
3670
3671   /* We're going to be generating comments, so turn on app.  */
3672   if (flag_debug_asm)
3673     app_enable ();
3674
3675   /* Switch to the proper frame section, first time.  */
3676   switch_to_frame_table_section (for_eh, false);
3677
3678   ASM_GENERATE_INTERNAL_LABEL (section_start_label, FRAME_BEGIN_LABEL, for_eh);
3679   ASM_OUTPUT_LABEL (asm_out_file, section_start_label);
3680
3681   /* Output the CIE.  */
3682   ASM_GENERATE_INTERNAL_LABEL (l1, CIE_AFTER_SIZE_LABEL, for_eh);
3683   ASM_GENERATE_INTERNAL_LABEL (l2, CIE_END_LABEL, for_eh);
3684   if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4 && !for_eh)
3685     dw2_asm_output_data (4, 0xffffffff,
3686       "Initial length escape value indicating 64-bit DWARF extension");
3687   dw2_asm_output_delta (for_eh ? 4 : DWARF_OFFSET_SIZE, l2, l1,
3688                         "Length of Common Information Entry");
3689   ASM_OUTPUT_LABEL (asm_out_file, l1);
3690
3691   /* Now that the CIE pointer is PC-relative for EH,
3692      use 0 to identify the CIE.  */
3693   dw2_asm_output_data ((for_eh ? 4 : DWARF_OFFSET_SIZE),
3694                        (for_eh ? 0 : DWARF_CIE_ID),
3695                        "CIE Identifier Tag");
3696
3697   /* Use the CIE version 3 for DWARF3; allow DWARF2 to continue to
3698      use CIE version 1, unless that would produce incorrect results
3699      due to overflowing the return register column.  */
3700   return_reg = DWARF2_FRAME_REG_OUT (DWARF_FRAME_RETURN_COLUMN, for_eh);
3701   dw_cie_version = 1;
3702   if (return_reg >= 256 || dwarf_version > 2)
3703     dw_cie_version = 3;
3704   dw2_asm_output_data (1, dw_cie_version, "CIE Version");
3705
3706   augmentation[0] = 0;
3707   augmentation_size = 0;
3708
3709   personality = current_unit_personality;
3710   if (for_eh)
3711     {
3712       char *p;
3713
3714       /* Augmentation:
3715          z      Indicates that a uleb128 is present to size the
3716                 augmentation section.
3717          L      Indicates the encoding (and thus presence) of
3718                 an LSDA pointer in the FDE augmentation.
3719          R      Indicates a non-default pointer encoding for
3720                 FDE code pointers.
3721          P      Indicates the presence of an encoding + language
3722                 personality routine in the CIE augmentation.  */
3723
3724       fde_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/1, /*global=*/0);
3725       per_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/2, /*global=*/1);
3726       lsda_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/0, /*global=*/0);
3727
3728       p = augmentation + 1;
3729       if (personality)
3730         {
3731           *p++ = 'P';
3732           augmentation_size += 1 + size_of_encoded_value (per_encoding);
3733           assemble_external_libcall (personality);
3734         }
3735       if (any_lsda_needed)
3736         {
3737           *p++ = 'L';
3738           augmentation_size += 1;
3739         }
3740       if (fde_encoding != DW_EH_PE_absptr)
3741         {
3742           *p++ = 'R';
3743           augmentation_size += 1;
3744         }
3745       if (p > augmentation + 1)
3746         {
3747           augmentation[0] = 'z';
3748           *p = '\0';
3749         }
3750
3751       /* Ug.  Some platforms can't do unaligned dynamic relocations at all.  */
3752       if (personality && per_encoding == DW_EH_PE_aligned)
3753         {
3754           int offset = (  4             /* Length */
3755                         + 4             /* CIE Id */
3756                         + 1             /* CIE version */
3757                         + strlen (augmentation) + 1     /* Augmentation */
3758                         + size_of_uleb128 (1)           /* Code alignment */
3759                         + size_of_sleb128 (DWARF_CIE_DATA_ALIGNMENT)
3760                         + 1             /* RA column */
3761                         + 1             /* Augmentation size */
3762                         + 1             /* Personality encoding */ );
3763           int pad = -offset & (PTR_SIZE - 1);
3764
3765           augmentation_size += pad;
3766
3767           /* Augmentations should be small, so there's scarce need to
3768              iterate for a solution.  Die if we exceed one uleb128 byte.  */
3769           gcc_assert (size_of_uleb128 (augmentation_size) == 1);
3770         }
3771     }
3772
3773   dw2_asm_output_nstring (augmentation, -1, "CIE Augmentation");
3774   if (dw_cie_version >= 4)
3775     {
3776       dw2_asm_output_data (1, DWARF2_ADDR_SIZE, "CIE Address Size");
3777       dw2_asm_output_data (1, 0, "CIE Segment Size");
3778     }
3779   dw2_asm_output_data_uleb128 (1, "CIE Code Alignment Factor");
3780   dw2_asm_output_data_sleb128 (DWARF_CIE_DATA_ALIGNMENT,
3781                                "CIE Data Alignment Factor");
3782
3783   if (dw_cie_version == 1)
3784     dw2_asm_output_data (1, return_reg, "CIE RA Column");
3785   else
3786     dw2_asm_output_data_uleb128 (return_reg, "CIE RA Column");
3787
3788   if (augmentation[0])
3789     {
3790       dw2_asm_output_data_uleb128 (augmentation_size, "Augmentation size");
3791       if (personality)
3792         {
3793           dw2_asm_output_data (1, per_encoding, "Personality (%s)",
3794                                eh_data_format_name (per_encoding));
3795           dw2_asm_output_encoded_addr_rtx (per_encoding,
3796                                            personality,
3797                                            true, NULL);
3798         }
3799
3800       if (any_lsda_needed)
3801         dw2_asm_output_data (1, lsda_encoding, "LSDA Encoding (%s)",
3802                              eh_data_format_name (lsda_encoding));
3803
3804       if (fde_encoding != DW_EH_PE_absptr)
3805         dw2_asm_output_data (1, fde_encoding, "FDE Encoding (%s)",
3806                              eh_data_format_name (fde_encoding));
3807     }
3808
3809   for (cfi = cie_cfi_head; cfi != NULL; cfi = cfi->dw_cfi_next)
3810     output_cfi (cfi, NULL, for_eh);
3811
3812   /* Pad the CIE out to an address sized boundary.  */
3813   ASM_OUTPUT_ALIGN (asm_out_file,
3814                     floor_log2 (for_eh ? PTR_SIZE : DWARF2_ADDR_SIZE));
3815   ASM_OUTPUT_LABEL (asm_out_file, l2);
3816
3817   /* Loop through all of the FDE's.  */
3818   for (i = 0; i < fde_table_in_use; i++)
3819     {
3820       unsigned int k;
3821       fde = &fde_table[i];
3822
3823       /* Don't emit EH unwind info for leaf functions that don't need it.  */
3824       if (for_eh && !flag_asynchronous_unwind_tables && flag_exceptions
3825           && (fde->nothrow || fde->all_throwers_are_sibcalls)
3826           && ! (TARGET_USES_WEAK_UNWIND_INFO && DECL_WEAK (fde_table[i].decl))
3827           && !fde->uses_eh_lsda)
3828         continue;
3829
3830       for (k = 0; k < (fde->dw_fde_switched_sections ? 2 : 1); k++)
3831         output_fde (fde, for_eh, k, section_start_label, fde_encoding,
3832                     augmentation, any_lsda_needed, lsda_encoding);
3833     }
3834
3835   if (for_eh && targetm.terminate_dw2_eh_frame_info)
3836     dw2_asm_output_data (4, 0, "End of Table");
3837 #ifdef MIPS_DEBUGGING_INFO
3838   /* Work around Irix 6 assembler bug whereby labels at the end of a section
3839      get a value of 0.  Putting .align 0 after the label fixes it.  */
3840   ASM_OUTPUT_ALIGN (asm_out_file, 0);
3841 #endif
3842
3843   /* Turn off app to make assembly quicker.  */
3844   if (flag_debug_asm)
3845     app_disable ();
3846 }
3847
3848 /* Emit .cfi_startproc and .cfi_personality/.cfi_lsda if needed.  */
3849
3850 static void
3851 dwarf2out_do_cfi_startproc (bool second)
3852 {
3853   int enc;
3854   rtx ref;
3855   rtx personality = get_personality_function (current_function_decl);
3856
3857   fprintf (asm_out_file, "\t.cfi_startproc\n");
3858
3859   if (personality)
3860     {
3861       enc = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/2, /*global=*/1);
3862       ref = personality;
3863
3864       /* ??? The GAS support isn't entirely consistent.  We have to
3865          handle indirect support ourselves, but PC-relative is done
3866          in the assembler.  Further, the assembler can't handle any
3867          of the weirder relocation types.  */
3868       if (enc & DW_EH_PE_indirect)
3869         ref = dw2_force_const_mem (ref, true);
3870
3871       fprintf (asm_out_file, "\t.cfi_personality %#x,", enc);
3872       output_addr_const (asm_out_file, ref);
3873       fputc ('\n', asm_out_file);
3874     }
3875
3876   if (crtl->uses_eh_lsda)
3877     {
3878       char lab[20];
3879
3880       enc = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/0, /*global=*/0);
3881       ASM_GENERATE_INTERNAL_LABEL (lab, second ? "LLSDAC" : "LLSDA",
3882                                    current_function_funcdef_no);
3883       ref = gen_rtx_SYMBOL_REF (Pmode, lab);
3884       SYMBOL_REF_FLAGS (ref) = SYMBOL_FLAG_LOCAL;
3885
3886       if (enc & DW_EH_PE_indirect)
3887         ref = dw2_force_const_mem (ref, true);
3888
3889       fprintf (asm_out_file, "\t.cfi_lsda %#x,", enc);
3890       output_addr_const (asm_out_file, ref);
3891       fputc ('\n', asm_out_file);
3892     }
3893 }
3894
3895 /* Output a marker (i.e. a label) for the beginning of a function, before
3896    the prologue.  */
3897
3898 void
3899 dwarf2out_begin_prologue (unsigned int line ATTRIBUTE_UNUSED,
3900                           const char *file ATTRIBUTE_UNUSED)
3901 {
3902   char label[MAX_ARTIFICIAL_LABEL_BYTES];
3903   char * dup_label;
3904   dw_fde_ref fde;
3905   section *fnsec;
3906
3907   current_function_func_begin_label = NULL;
3908
3909 #ifdef TARGET_UNWIND_INFO
3910   /* ??? current_function_func_begin_label is also used by except.c
3911      for call-site information.  We must emit this label if it might
3912      be used.  */
3913   if ((! flag_exceptions || USING_SJLJ_EXCEPTIONS)
3914       && ! dwarf2out_do_frame ())
3915     return;
3916 #else
3917   if (! dwarf2out_do_frame ())
3918     return;
3919 #endif
3920
3921   fnsec = function_section (current_function_decl);
3922   switch_to_section (fnsec);
3923   ASM_GENERATE_INTERNAL_LABEL (label, FUNC_BEGIN_LABEL,
3924                                current_function_funcdef_no);
3925   ASM_OUTPUT_DEBUG_LABEL (asm_out_file, FUNC_BEGIN_LABEL,
3926                           current_function_funcdef_no);
3927   dup_label = xstrdup (label);
3928   current_function_func_begin_label = dup_label;
3929
3930 #ifdef TARGET_UNWIND_INFO
3931   /* We can elide the fde allocation if we're not emitting debug info.  */
3932   if (! dwarf2out_do_frame ())
3933     return;
3934 #endif
3935
3936   /* Expand the fde table if necessary.  */
3937   if (fde_table_in_use == fde_table_allocated)
3938     {
3939       fde_table_allocated += FDE_TABLE_INCREMENT;
3940       fde_table = GGC_RESIZEVEC (dw_fde_node, fde_table, fde_table_allocated);
3941       memset (fde_table + fde_table_in_use, 0,
3942               FDE_TABLE_INCREMENT * sizeof (dw_fde_node));
3943     }
3944
3945   /* Record the FDE associated with this function.  */
3946   current_funcdef_fde = fde_table_in_use;
3947
3948   /* Add the new FDE at the end of the fde_table.  */
3949   fde = &fde_table[fde_table_in_use++];
3950   fde->decl = current_function_decl;
3951   fde->dw_fde_begin = dup_label;
3952   fde->dw_fde_current_label = dup_label;
3953   fde->dw_fde_hot_section_label = NULL;
3954   fde->dw_fde_hot_section_end_label = NULL;
3955   fde->dw_fde_unlikely_section_label = NULL;
3956   fde->dw_fde_unlikely_section_end_label = NULL;
3957   fde->dw_fde_switched_sections = 0;
3958   fde->dw_fde_switched_cold_to_hot = 0;
3959   fde->dw_fde_end = NULL;
3960   fde->dw_fde_cfi = NULL;
3961   fde->dw_fde_switch_cfi = NULL;
3962   fde->funcdef_number = current_function_funcdef_no;
3963   fde->nothrow = crtl->nothrow;
3964   fde->uses_eh_lsda = crtl->uses_eh_lsda;
3965   fde->all_throwers_are_sibcalls = crtl->all_throwers_are_sibcalls;
3966   fde->drap_reg = INVALID_REGNUM;
3967   fde->vdrap_reg = INVALID_REGNUM;
3968   if (flag_reorder_blocks_and_partition)
3969     {
3970       section *unlikelysec;
3971       if (first_function_block_is_cold)
3972         fde->in_std_section = 1;
3973       else
3974         fde->in_std_section
3975           = (fnsec == text_section
3976              || (cold_text_section && fnsec == cold_text_section));
3977       unlikelysec = unlikely_text_section ();
3978       fde->cold_in_std_section
3979         = (unlikelysec == text_section
3980            || (cold_text_section && unlikelysec == cold_text_section));
3981     }
3982   else
3983     {
3984       fde->in_std_section
3985         = (fnsec == text_section
3986            || (cold_text_section && fnsec == cold_text_section));
3987       fde->cold_in_std_section = 0;
3988     }
3989
3990   args_size = old_args_size = 0;
3991
3992   /* We only want to output line number information for the genuine dwarf2
3993      prologue case, not the eh frame case.  */
3994 #ifdef DWARF2_DEBUGGING_INFO
3995   if (file)
3996     dwarf2out_source_line (line, file, 0, true);
3997 #endif
3998
3999   if (dwarf2out_do_cfi_asm ())
4000     dwarf2out_do_cfi_startproc (false);
4001   else
4002     {
4003       rtx personality = get_personality_function (current_function_decl);
4004       if (!current_unit_personality)
4005         current_unit_personality = personality;
4006
4007       /* We cannot keep a current personality per function as without CFI
4008          asm at the point where we emit the CFI data there is no current
4009          function anymore.  */
4010       if (personality
4011           && current_unit_personality != personality)
4012         sorry ("Multiple EH personalities are supported only with assemblers "
4013                "supporting .cfi.personality directive.");
4014     }
4015 }
4016
4017 /* Output a marker (i.e. a label) for the absolute end of the generated code
4018    for a function definition.  This gets called *after* the epilogue code has
4019    been generated.  */
4020
4021 void
4022 dwarf2out_end_epilogue (unsigned int line ATTRIBUTE_UNUSED,
4023                         const char *file ATTRIBUTE_UNUSED)
4024 {
4025   dw_fde_ref fde;
4026   char label[MAX_ARTIFICIAL_LABEL_BYTES];
4027
4028 #ifdef DWARF2_DEBUGGING_INFO
4029   last_var_location_insn = NULL_RTX;
4030 #endif
4031
4032   if (dwarf2out_do_cfi_asm ())
4033     fprintf (asm_out_file, "\t.cfi_endproc\n");
4034
4035   /* Output a label to mark the endpoint of the code generated for this
4036      function.  */
4037   ASM_GENERATE_INTERNAL_LABEL (label, FUNC_END_LABEL,
4038                                current_function_funcdef_no);
4039   ASM_OUTPUT_LABEL (asm_out_file, label);
4040   fde = current_fde ();
4041   gcc_assert (fde != NULL);
4042   fde->dw_fde_end = xstrdup (label);
4043 }
4044
4045 void
4046 dwarf2out_frame_init (void)
4047 {
4048   /* Allocate the initial hunk of the fde_table.  */
4049   fde_table = GGC_CNEWVEC (dw_fde_node, FDE_TABLE_INCREMENT);
4050   fde_table_allocated = FDE_TABLE_INCREMENT;
4051   fde_table_in_use = 0;
4052
4053   /* Generate the CFA instructions common to all FDE's.  Do it now for the
4054      sake of lookup_cfa.  */
4055
4056   /* On entry, the Canonical Frame Address is at SP.  */
4057   dwarf2out_def_cfa (NULL, STACK_POINTER_REGNUM, INCOMING_FRAME_SP_OFFSET);
4058
4059 #ifdef DWARF2_UNWIND_INFO
4060   if (DWARF2_UNWIND_INFO || DWARF2_FRAME_INFO)
4061     initial_return_save (INCOMING_RETURN_ADDR_RTX);
4062 #endif
4063 }
4064
4065 void
4066 dwarf2out_frame_finish (void)
4067 {
4068   /* Output call frame information.  */
4069   if (DWARF2_FRAME_INFO)
4070     output_call_frame_info (0);
4071
4072 #ifndef TARGET_UNWIND_INFO
4073   /* Output another copy for the unwinder.  */
4074   if (! USING_SJLJ_EXCEPTIONS && (flag_unwind_tables || flag_exceptions))
4075     output_call_frame_info (1);
4076 #endif
4077 }
4078
4079 /* Note that the current function section is being used for code.  */
4080
4081 static void
4082 dwarf2out_note_section_used (void)
4083 {
4084   section *sec = current_function_section ();
4085   if (sec == text_section)
4086     text_section_used = true;
4087   else if (sec == cold_text_section)
4088     cold_text_section_used = true;
4089 }
4090
4091 void
4092 dwarf2out_switch_text_section (void)
4093 {
4094   dw_fde_ref fde = current_fde ();
4095
4096   gcc_assert (cfun && fde && !fde->dw_fde_switched_sections);
4097
4098   fde->dw_fde_switched_sections = 1;
4099   fde->dw_fde_switched_cold_to_hot = !in_cold_section_p;
4100
4101   fde->dw_fde_hot_section_label = crtl->subsections.hot_section_label;
4102   fde->dw_fde_hot_section_end_label = crtl->subsections.hot_section_end_label;
4103   fde->dw_fde_unlikely_section_label = crtl->subsections.cold_section_label;
4104   fde->dw_fde_unlikely_section_end_label = crtl->subsections.cold_section_end_label;
4105   have_multiple_function_sections = true;
4106
4107   /* Reset the current label on switching text sections, so that we
4108      don't attempt to advance_loc4 between labels in different sections.  */
4109   fde->dw_fde_current_label = NULL;
4110
4111   /* There is no need to mark used sections when not debugging.  */
4112   if (cold_text_section != NULL)
4113     dwarf2out_note_section_used ();
4114
4115   if (dwarf2out_do_cfi_asm ())
4116     fprintf (asm_out_file, "\t.cfi_endproc\n");
4117
4118   /* Now do the real section switch.  */
4119   switch_to_section (current_function_section ());
4120
4121   if (dwarf2out_do_cfi_asm ())
4122     {
4123       dwarf2out_do_cfi_startproc (true);
4124       /* As this is a different FDE, insert all current CFI instructions
4125          again.  */
4126       output_cfis (fde->dw_fde_cfi, true, fde, true);
4127     }
4128   else
4129     {
4130       dw_cfi_ref cfi = fde->dw_fde_cfi;
4131
4132       cfi = fde->dw_fde_cfi;
4133       if (cfi)
4134         while (cfi->dw_cfi_next != NULL)
4135           cfi = cfi->dw_cfi_next;
4136       fde->dw_fde_switch_cfi = cfi;
4137     }
4138 }
4139 #endif
4140 \f
4141 /* And now, the subset of the debugging information support code necessary
4142    for emitting location expressions.  */
4143
4144 /* Data about a single source file.  */
4145 struct GTY(()) dwarf_file_data {
4146   const char * filename;
4147   int emitted_number;
4148 };
4149
4150 typedef struct dw_val_struct *dw_val_ref;
4151 typedef struct die_struct *dw_die_ref;
4152 typedef const struct die_struct *const_dw_die_ref;
4153 typedef struct dw_loc_descr_struct *dw_loc_descr_ref;
4154 typedef struct dw_loc_list_struct *dw_loc_list_ref;
4155
4156 typedef struct GTY(()) deferred_locations_struct
4157 {
4158   tree variable;
4159   dw_die_ref die;
4160 } deferred_locations;
4161
4162 DEF_VEC_O(deferred_locations);
4163 DEF_VEC_ALLOC_O(deferred_locations,gc);
4164
4165 static GTY(()) VEC(deferred_locations, gc) *deferred_locations_list;
4166
4167 DEF_VEC_P(dw_die_ref);
4168 DEF_VEC_ALLOC_P(dw_die_ref,heap);
4169
4170 /* Each DIE may have a series of attribute/value pairs.  Values
4171    can take on several forms.  The forms that are used in this
4172    implementation are listed below.  */
4173
4174 enum dw_val_class
4175 {
4176   dw_val_class_addr,
4177   dw_val_class_offset,
4178   dw_val_class_loc,
4179   dw_val_class_loc_list,
4180   dw_val_class_range_list,
4181   dw_val_class_const,
4182   dw_val_class_unsigned_const,
4183   dw_val_class_const_double,
4184   dw_val_class_vec,
4185   dw_val_class_flag,
4186   dw_val_class_die_ref,
4187   dw_val_class_fde_ref,
4188   dw_val_class_lbl_id,
4189   dw_val_class_lineptr,
4190   dw_val_class_str,
4191   dw_val_class_macptr,
4192   dw_val_class_file,
4193   dw_val_class_data8
4194 };
4195
4196 /* Describe a floating point constant value, or a vector constant value.  */
4197
4198 typedef struct GTY(()) dw_vec_struct {
4199   unsigned char * GTY((length ("%h.length"))) array;
4200   unsigned length;
4201   unsigned elt_size;
4202 }
4203 dw_vec_const;
4204
4205 /* The dw_val_node describes an attribute's value, as it is
4206    represented internally.  */
4207
4208 typedef struct GTY(()) dw_val_struct {
4209   enum dw_val_class val_class;
4210   union dw_val_struct_union
4211     {
4212       rtx GTY ((tag ("dw_val_class_addr"))) val_addr;
4213       unsigned HOST_WIDE_INT GTY ((tag ("dw_val_class_offset"))) val_offset;
4214       dw_loc_list_ref GTY ((tag ("dw_val_class_loc_list"))) val_loc_list;
4215       dw_loc_descr_ref GTY ((tag ("dw_val_class_loc"))) val_loc;
4216       HOST_WIDE_INT GTY ((default)) val_int;
4217       unsigned HOST_WIDE_INT GTY ((tag ("dw_val_class_unsigned_const"))) val_unsigned;
4218       double_int GTY ((tag ("dw_val_class_const_double"))) val_double;
4219       dw_vec_const GTY ((tag ("dw_val_class_vec"))) val_vec;
4220       struct dw_val_die_union
4221         {
4222           dw_die_ref die;
4223           int external;
4224         } GTY ((tag ("dw_val_class_die_ref"))) val_die_ref;
4225       unsigned GTY ((tag ("dw_val_class_fde_ref"))) val_fde_index;
4226       struct indirect_string_node * GTY ((tag ("dw_val_class_str"))) val_str;
4227       char * GTY ((tag ("dw_val_class_lbl_id"))) val_lbl_id;
4228       unsigned char GTY ((tag ("dw_val_class_flag"))) val_flag;
4229       struct dwarf_file_data * GTY ((tag ("dw_val_class_file"))) val_file;
4230       unsigned char GTY ((tag ("dw_val_class_data8"))) val_data8[8];
4231     }
4232   GTY ((desc ("%1.val_class"))) v;
4233 }
4234 dw_val_node;
4235
4236 /* Locations in memory are described using a sequence of stack machine
4237    operations.  */
4238
4239 typedef struct GTY(()) dw_loc_descr_struct {
4240   dw_loc_descr_ref dw_loc_next;
4241   ENUM_BITFIELD (dwarf_location_atom) dw_loc_opc : 8;
4242   /* Used to distinguish DW_OP_addr with a direct symbol relocation
4243      from DW_OP_addr with a dtp-relative symbol relocation.  */
4244   unsigned int dtprel : 1;
4245   int dw_loc_addr;
4246   dw_val_node dw_loc_oprnd1;
4247   dw_val_node dw_loc_oprnd2;
4248 }
4249 dw_loc_descr_node;
4250
4251 /* Location lists are ranges + location descriptions for that range,
4252    so you can track variables that are in different places over
4253    their entire life.  */
4254 typedef struct GTY(()) dw_loc_list_struct {
4255   dw_loc_list_ref dw_loc_next;
4256   const char *begin; /* Label for begin address of range */
4257   const char *end;  /* Label for end address of range */
4258   char *ll_symbol; /* Label for beginning of location list.
4259                       Only on head of list */
4260   const char *section; /* Section this loclist is relative to */
4261   dw_loc_descr_ref expr;
4262 } dw_loc_list_node;
4263
4264 #if defined (DWARF2_DEBUGGING_INFO) || defined (DWARF2_UNWIND_INFO)
4265
4266 static dw_loc_descr_ref int_loc_descriptor (HOST_WIDE_INT);
4267
4268 /* Convert a DWARF stack opcode into its string name.  */
4269
4270 static const char *
4271 dwarf_stack_op_name (unsigned int op)
4272 {
4273   switch (op)
4274     {
4275     case DW_OP_addr:
4276       return "DW_OP_addr";
4277     case DW_OP_deref:
4278       return "DW_OP_deref";
4279     case DW_OP_const1u:
4280       return "DW_OP_const1u";
4281     case DW_OP_const1s:
4282       return "DW_OP_const1s";
4283     case DW_OP_const2u:
4284       return "DW_OP_const2u";
4285     case DW_OP_const2s:
4286       return "DW_OP_const2s";
4287     case DW_OP_const4u:
4288       return "DW_OP_const4u";
4289     case DW_OP_const4s:
4290       return "DW_OP_const4s";
4291     case DW_OP_const8u:
4292       return "DW_OP_const8u";
4293     case DW_OP_const8s:
4294       return "DW_OP_const8s";
4295     case DW_OP_constu:
4296       return "DW_OP_constu";
4297     case DW_OP_consts:
4298       return "DW_OP_consts";
4299     case DW_OP_dup:
4300       return "DW_OP_dup";
4301     case DW_OP_drop:
4302       return "DW_OP_drop";
4303     case DW_OP_over:
4304       return "DW_OP_over";
4305     case DW_OP_pick:
4306       return "DW_OP_pick";
4307     case DW_OP_swap:
4308       return "DW_OP_swap";
4309     case DW_OP_rot:
4310       return "DW_OP_rot";
4311     case DW_OP_xderef:
4312       return "DW_OP_xderef";
4313     case DW_OP_abs:
4314       return "DW_OP_abs";
4315     case DW_OP_and:
4316       return "DW_OP_and";
4317     case DW_OP_div:
4318       return "DW_OP_div";
4319     case DW_OP_minus:
4320       return "DW_OP_minus";
4321     case DW_OP_mod:
4322       return "DW_OP_mod";
4323     case DW_OP_mul:
4324       return "DW_OP_mul";
4325     case DW_OP_neg:
4326       return "DW_OP_neg";
4327     case DW_OP_not:
4328       return "DW_OP_not";
4329     case DW_OP_or:
4330       return "DW_OP_or";
4331     case DW_OP_plus:
4332       return "DW_OP_plus";
4333     case DW_OP_plus_uconst:
4334       return "DW_OP_plus_uconst";
4335     case DW_OP_shl:
4336       return "DW_OP_shl";
4337     case DW_OP_shr:
4338       return "DW_OP_shr";
4339     case DW_OP_shra:
4340       return "DW_OP_shra";
4341     case DW_OP_xor:
4342       return "DW_OP_xor";
4343     case DW_OP_bra:
4344       return "DW_OP_bra";
4345     case DW_OP_eq:
4346       return "DW_OP_eq";
4347     case DW_OP_ge:
4348       return "DW_OP_ge";
4349     case DW_OP_gt:
4350       return "DW_OP_gt";
4351     case DW_OP_le:
4352       return "DW_OP_le";
4353     case DW_OP_lt:
4354       return "DW_OP_lt";
4355     case DW_OP_ne:
4356       return "DW_OP_ne";
4357     case DW_OP_skip:
4358       return "DW_OP_skip";
4359     case DW_OP_lit0:
4360       return "DW_OP_lit0";
4361     case DW_OP_lit1:
4362       return "DW_OP_lit1";
4363     case DW_OP_lit2:
4364       return "DW_OP_lit2";
4365     case DW_OP_lit3:
4366       return "DW_OP_lit3";
4367     case DW_OP_lit4:
4368       return "DW_OP_lit4";
4369     case DW_OP_lit5:
4370       return "DW_OP_lit5";
4371     case DW_OP_lit6:
4372       return "DW_OP_lit6";
4373     case DW_OP_lit7:
4374       return "DW_OP_lit7";
4375     case DW_OP_lit8:
4376       return "DW_OP_lit8";
4377     case DW_OP_lit9:
4378       return "DW_OP_lit9";
4379     case DW_OP_lit10:
4380       return "DW_OP_lit10";
4381     case DW_OP_lit11:
4382       return "DW_OP_lit11";
4383     case DW_OP_lit12:
4384       return "DW_OP_lit12";
4385     case DW_OP_lit13:
4386       return "DW_OP_lit13";
4387     case DW_OP_lit14:
4388       return "DW_OP_lit14";
4389     case DW_OP_lit15:
4390       return "DW_OP_lit15";
4391     case DW_OP_lit16:
4392       return "DW_OP_lit16";
4393     case DW_OP_lit17:
4394       return "DW_OP_lit17";
4395     case DW_OP_lit18:
4396       return "DW_OP_lit18";
4397     case DW_OP_lit19:
4398       return "DW_OP_lit19";
4399     case DW_OP_lit20:
4400       return "DW_OP_lit20";
4401     case DW_OP_lit21:
4402       return "DW_OP_lit21";
4403     case DW_OP_lit22:
4404       return "DW_OP_lit22";
4405     case DW_OP_lit23:
4406       return "DW_OP_lit23";
4407     case DW_OP_lit24:
4408       return "DW_OP_lit24";
4409     case DW_OP_lit25:
4410       return "DW_OP_lit25";
4411     case DW_OP_lit26:
4412       return "DW_OP_lit26";
4413     case DW_OP_lit27:
4414       return "DW_OP_lit27";
4415     case DW_OP_lit28:
4416       return "DW_OP_lit28";
4417     case DW_OP_lit29:
4418       return "DW_OP_lit29";
4419     case DW_OP_lit30:
4420       return "DW_OP_lit30";
4421     case DW_OP_lit31:
4422       return "DW_OP_lit31";
4423     case DW_OP_reg0:
4424       return "DW_OP_reg0";
4425     case DW_OP_reg1:
4426       return "DW_OP_reg1";
4427     case DW_OP_reg2:
4428       return "DW_OP_reg2";
4429     case DW_OP_reg3:
4430       return "DW_OP_reg3";
4431     case DW_OP_reg4:
4432       return "DW_OP_reg4";
4433     case DW_OP_reg5:
4434       return "DW_OP_reg5";
4435     case DW_OP_reg6:
4436       return "DW_OP_reg6";
4437     case DW_OP_reg7:
4438       return "DW_OP_reg7";
4439     case DW_OP_reg8:
4440       return "DW_OP_reg8";
4441     case DW_OP_reg9:
4442       return "DW_OP_reg9";
4443     case DW_OP_reg10:
4444       return "DW_OP_reg10";
4445     case DW_OP_reg11:
4446       return "DW_OP_reg11";
4447     case DW_OP_reg12:
4448       return "DW_OP_reg12";
4449     case DW_OP_reg13:
4450       return "DW_OP_reg13";
4451     case DW_OP_reg14:
4452       return "DW_OP_reg14";
4453     case DW_OP_reg15:
4454       return "DW_OP_reg15";
4455     case DW_OP_reg16:
4456       return "DW_OP_reg16";
4457     case DW_OP_reg17:
4458       return "DW_OP_reg17";
4459     case DW_OP_reg18:
4460       return "DW_OP_reg18";
4461     case DW_OP_reg19:
4462       return "DW_OP_reg19";
4463     case DW_OP_reg20:
4464       return "DW_OP_reg20";
4465     case DW_OP_reg21:
4466       return "DW_OP_reg21";
4467     case DW_OP_reg22:
4468       return "DW_OP_reg22";
4469     case DW_OP_reg23:
4470       return "DW_OP_reg23";
4471     case DW_OP_reg24:
4472       return "DW_OP_reg24";
4473     case DW_OP_reg25:
4474       return "DW_OP_reg25";
4475     case DW_OP_reg26:
4476       return "DW_OP_reg26";
4477     case DW_OP_reg27:
4478       return "DW_OP_reg27";
4479     case DW_OP_reg28:
4480       return "DW_OP_reg28";
4481     case DW_OP_reg29:
4482       return "DW_OP_reg29";
4483     case DW_OP_reg30:
4484       return "DW_OP_reg30";
4485     case DW_OP_reg31:
4486       return "DW_OP_reg31";
4487     case DW_OP_breg0:
4488       return "DW_OP_breg0";
4489     case DW_OP_breg1:
4490       return "DW_OP_breg1";
4491     case DW_OP_breg2:
4492       return "DW_OP_breg2";
4493     case DW_OP_breg3:
4494       return "DW_OP_breg3";
4495     case DW_OP_breg4:
4496       return "DW_OP_breg4";
4497     case DW_OP_breg5:
4498       return "DW_OP_breg5";
4499     case DW_OP_breg6:
4500       return "DW_OP_breg6";
4501     case DW_OP_breg7:
4502       return "DW_OP_breg7";
4503     case DW_OP_breg8:
4504       return "DW_OP_breg8";
4505     case DW_OP_breg9:
4506       return "DW_OP_breg9";
4507     case DW_OP_breg10:
4508       return "DW_OP_breg10";
4509     case DW_OP_breg11:
4510       return "DW_OP_breg11";
4511     case DW_OP_breg12:
4512       return "DW_OP_breg12";
4513     case DW_OP_breg13:
4514       return "DW_OP_breg13";
4515     case DW_OP_breg14:
4516       return "DW_OP_breg14";
4517     case DW_OP_breg15:
4518       return "DW_OP_breg15";
4519     case DW_OP_breg16:
4520       return "DW_OP_breg16";
4521     case DW_OP_breg17:
4522       return "DW_OP_breg17";
4523     case DW_OP_breg18:
4524       return "DW_OP_breg18";
4525     case DW_OP_breg19:
4526       return "DW_OP_breg19";
4527     case DW_OP_breg20:
4528       return "DW_OP_breg20";
4529     case DW_OP_breg21:
4530       return "DW_OP_breg21";
4531     case DW_OP_breg22:
4532       return "DW_OP_breg22";
4533     case DW_OP_breg23:
4534       return "DW_OP_breg23";
4535     case DW_OP_breg24:
4536       return "DW_OP_breg24";
4537     case DW_OP_breg25:
4538       return "DW_OP_breg25";
4539     case DW_OP_breg26:
4540       return "DW_OP_breg26";
4541     case DW_OP_breg27:
4542       return "DW_OP_breg27";
4543     case DW_OP_breg28:
4544       return "DW_OP_breg28";
4545     case DW_OP_breg29:
4546       return "DW_OP_breg29";
4547     case DW_OP_breg30:
4548       return "DW_OP_breg30";
4549     case DW_OP_breg31:
4550       return "DW_OP_breg31";
4551     case DW_OP_regx:
4552       return "DW_OP_regx";
4553     case DW_OP_fbreg:
4554       return "DW_OP_fbreg";
4555     case DW_OP_bregx:
4556       return "DW_OP_bregx";
4557     case DW_OP_piece:
4558       return "DW_OP_piece";
4559     case DW_OP_deref_size:
4560       return "DW_OP_deref_size";
4561     case DW_OP_xderef_size:
4562       return "DW_OP_xderef_size";
4563     case DW_OP_nop:
4564       return "DW_OP_nop";
4565
4566     case DW_OP_push_object_address:
4567       return "DW_OP_push_object_address";
4568     case DW_OP_call2:
4569       return "DW_OP_call2";
4570     case DW_OP_call4:
4571       return "DW_OP_call4";
4572     case DW_OP_call_ref:
4573       return "DW_OP_call_ref";
4574     case DW_OP_implicit_value:
4575       return "DW_OP_implicit_value";
4576     case DW_OP_stack_value:
4577       return "DW_OP_stack_value";
4578     case DW_OP_form_tls_address:
4579       return "DW_OP_form_tls_address";
4580     case DW_OP_call_frame_cfa:
4581       return "DW_OP_call_frame_cfa";
4582     case DW_OP_bit_piece:
4583       return "DW_OP_bit_piece";
4584
4585     case DW_OP_GNU_push_tls_address:
4586       return "DW_OP_GNU_push_tls_address";
4587     case DW_OP_GNU_uninit:
4588       return "DW_OP_GNU_uninit";
4589     case DW_OP_GNU_encoded_addr:
4590       return "DW_OP_GNU_encoded_addr";
4591
4592     default:
4593       return "OP_<unknown>";
4594     }
4595 }
4596
4597 /* Return a pointer to a newly allocated location description.  Location
4598    descriptions are simple expression terms that can be strung
4599    together to form more complicated location (address) descriptions.  */
4600
4601 static inline dw_loc_descr_ref
4602 new_loc_descr (enum dwarf_location_atom op, unsigned HOST_WIDE_INT oprnd1,
4603                unsigned HOST_WIDE_INT oprnd2)
4604 {
4605   dw_loc_descr_ref descr = GGC_CNEW (dw_loc_descr_node);
4606
4607   descr->dw_loc_opc = op;
4608   descr->dw_loc_oprnd1.val_class = dw_val_class_unsigned_const;
4609   descr->dw_loc_oprnd1.v.val_unsigned = oprnd1;
4610   descr->dw_loc_oprnd2.val_class = dw_val_class_unsigned_const;
4611   descr->dw_loc_oprnd2.v.val_unsigned = oprnd2;
4612
4613   return descr;
4614 }
4615
4616 /* Return a pointer to a newly allocated location description for
4617    REG and OFFSET.  */
4618
4619 static inline dw_loc_descr_ref
4620 new_reg_loc_descr (unsigned int reg,  unsigned HOST_WIDE_INT offset)
4621 {
4622   if (reg <= 31)
4623     return new_loc_descr ((enum dwarf_location_atom) (DW_OP_breg0 + reg),
4624                           offset, 0);
4625   else
4626     return new_loc_descr (DW_OP_bregx, reg, offset);
4627 }
4628
4629 /* Add a location description term to a location description expression.  */
4630
4631 static inline void
4632 add_loc_descr (dw_loc_descr_ref *list_head, dw_loc_descr_ref descr)
4633 {
4634   dw_loc_descr_ref *d;
4635
4636   /* Find the end of the chain.  */
4637   for (d = list_head; (*d) != NULL; d = &(*d)->dw_loc_next)
4638     ;
4639
4640   *d = descr;
4641 }
4642
4643 /* Add a constant OFFSET to a location expression.  */
4644
4645 static void
4646 loc_descr_plus_const (dw_loc_descr_ref *list_head, HOST_WIDE_INT offset)
4647 {
4648   dw_loc_descr_ref loc;
4649   HOST_WIDE_INT *p;
4650
4651   gcc_assert (*list_head != NULL);
4652
4653   if (!offset)
4654     return;
4655
4656   /* Find the end of the chain.  */
4657   for (loc = *list_head; loc->dw_loc_next != NULL; loc = loc->dw_loc_next)
4658     ;
4659
4660   p = NULL;
4661   if (loc->dw_loc_opc == DW_OP_fbreg
4662       || (loc->dw_loc_opc >= DW_OP_breg0 && loc->dw_loc_opc <= DW_OP_breg31))
4663     p = &loc->dw_loc_oprnd1.v.val_int;
4664   else if (loc->dw_loc_opc == DW_OP_bregx)
4665     p = &loc->dw_loc_oprnd2.v.val_int;
4666
4667   /* If the last operation is fbreg, breg{0..31,x}, optimize by adjusting its
4668      offset.  Don't optimize if an signed integer overflow would happen.  */
4669   if (p != NULL
4670       && ((offset > 0 && *p <= INTTYPE_MAXIMUM (HOST_WIDE_INT) - offset)
4671           || (offset < 0 && *p >= INTTYPE_MINIMUM (HOST_WIDE_INT) - offset)))
4672     *p += offset;
4673
4674   else if (offset > 0)
4675     loc->dw_loc_next = new_loc_descr (DW_OP_plus_uconst, offset, 0);
4676
4677   else
4678     {
4679       loc->dw_loc_next = int_loc_descriptor (offset);
4680       add_loc_descr (&loc->dw_loc_next, new_loc_descr (DW_OP_plus, 0, 0));
4681     }
4682 }
4683
4684 #ifdef DWARF2_DEBUGGING_INFO
4685 /* Add a constant OFFSET to a location list.  */
4686
4687 static void
4688 loc_list_plus_const (dw_loc_list_ref list_head, HOST_WIDE_INT offset)
4689 {
4690   dw_loc_list_ref d;
4691   for (d = list_head; d != NULL; d = d->dw_loc_next)
4692     loc_descr_plus_const (&d->expr, offset);
4693 }
4694 #endif
4695
4696 /* Return the size of a location descriptor.  */
4697
4698 static unsigned long
4699 size_of_loc_descr (dw_loc_descr_ref loc)
4700 {
4701   unsigned long size = 1;
4702
4703   switch (loc->dw_loc_opc)
4704     {
4705     case DW_OP_addr:
4706       size += DWARF2_ADDR_SIZE;
4707       break;
4708     case DW_OP_const1u:
4709     case DW_OP_const1s:
4710       size += 1;
4711       break;
4712     case DW_OP_const2u:
4713     case DW_OP_const2s:
4714       size += 2;
4715       break;
4716     case DW_OP_const4u:
4717     case DW_OP_const4s:
4718       size += 4;
4719       break;
4720     case DW_OP_const8u:
4721     case DW_OP_const8s:
4722       size += 8;
4723       break;
4724     case DW_OP_constu:
4725       size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
4726       break;
4727     case DW_OP_consts:
4728       size += size_of_sleb128 (loc->dw_loc_oprnd1.v.val_int);
4729       break;
4730     case DW_OP_pick:
4731       size += 1;
4732       break;
4733     case DW_OP_plus_uconst:
4734       size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
4735       break;
4736     case DW_OP_skip:
4737     case DW_OP_bra:
4738       size += 2;
4739       break;
4740     case DW_OP_breg0:
4741     case DW_OP_breg1:
4742     case DW_OP_breg2:
4743     case DW_OP_breg3:
4744     case DW_OP_breg4:
4745     case DW_OP_breg5:
4746     case DW_OP_breg6:
4747     case DW_OP_breg7:
4748     case DW_OP_breg8:
4749     case DW_OP_breg9:
4750     case DW_OP_breg10:
4751     case DW_OP_breg11:
4752     case DW_OP_breg12:
4753     case DW_OP_breg13:
4754     case DW_OP_breg14:
4755     case DW_OP_breg15:
4756     case DW_OP_breg16:
4757     case DW_OP_breg17:
4758     case DW_OP_breg18:
4759     case DW_OP_breg19:
4760     case DW_OP_breg20:
4761     case DW_OP_breg21:
4762     case DW_OP_breg22:
4763     case DW_OP_breg23:
4764     case DW_OP_breg24:
4765     case DW_OP_breg25:
4766     case DW_OP_breg26:
4767     case DW_OP_breg27:
4768     case DW_OP_breg28:
4769     case DW_OP_breg29:
4770     case DW_OP_breg30:
4771     case DW_OP_breg31:
4772       size += size_of_sleb128 (loc->dw_loc_oprnd1.v.val_int);
4773       break;
4774     case DW_OP_regx:
4775       size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
4776       break;
4777     case DW_OP_fbreg:
4778       size += size_of_sleb128 (loc->dw_loc_oprnd1.v.val_int);
4779       break;
4780     case DW_OP_bregx:
4781       size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
4782       size += size_of_sleb128 (loc->dw_loc_oprnd2.v.val_int);
4783       break;
4784     case DW_OP_piece:
4785       size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
4786       break;
4787     case DW_OP_bit_piece:
4788       size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
4789       size += size_of_uleb128 (loc->dw_loc_oprnd2.v.val_unsigned);
4790       break;
4791     case DW_OP_deref_size:
4792     case DW_OP_xderef_size:
4793       size += 1;
4794       break;
4795     case DW_OP_call2:
4796       size += 2;
4797       break;
4798     case DW_OP_call4:
4799       size += 4;
4800       break;
4801     case DW_OP_call_ref:
4802       size += DWARF2_ADDR_SIZE;
4803       break;
4804     case DW_OP_implicit_value:
4805       size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned)
4806               + loc->dw_loc_oprnd1.v.val_unsigned;
4807       break;
4808     default:
4809       break;
4810     }
4811
4812   return size;
4813 }
4814
4815 /* Return the size of a series of location descriptors.  */
4816
4817 static unsigned long
4818 size_of_locs (dw_loc_descr_ref loc)
4819 {
4820   dw_loc_descr_ref l;
4821   unsigned long size;
4822
4823   /* If there are no skip or bra opcodes, don't fill in the dw_loc_addr
4824      field, to avoid writing to a PCH file.  */
4825   for (size = 0, l = loc; l != NULL; l = l->dw_loc_next)
4826     {
4827       if (l->dw_loc_opc == DW_OP_skip || l->dw_loc_opc == DW_OP_bra)
4828         break;
4829       size += size_of_loc_descr (l);
4830     }
4831   if (! l)
4832     return size;
4833
4834   for (size = 0, l = loc; l != NULL; l = l->dw_loc_next)
4835     {
4836       l->dw_loc_addr = size;
4837       size += size_of_loc_descr (l);
4838     }
4839
4840   return size;
4841 }
4842
4843 #ifdef DWARF2_DEBUGGING_INFO
4844 static HOST_WIDE_INT extract_int (const unsigned char *, unsigned);
4845 #endif
4846
4847 /* Output location description stack opcode's operands (if any).  */
4848
4849 static void
4850 output_loc_operands (dw_loc_descr_ref loc)
4851 {
4852   dw_val_ref val1 = &loc->dw_loc_oprnd1;
4853   dw_val_ref val2 = &loc->dw_loc_oprnd2;
4854
4855   switch (loc->dw_loc_opc)
4856     {
4857 #ifdef DWARF2_DEBUGGING_INFO
4858     case DW_OP_const2u:
4859     case DW_OP_const2s:
4860       dw2_asm_output_data (2, val1->v.val_int, NULL);
4861       break;
4862     case DW_OP_const4u:
4863     case DW_OP_const4s:
4864       dw2_asm_output_data (4, val1->v.val_int, NULL);
4865       break;
4866     case DW_OP_const8u:
4867     case DW_OP_const8s:
4868       gcc_assert (HOST_BITS_PER_WIDE_INT >= 64);
4869       dw2_asm_output_data (8, val1->v.val_int, NULL);
4870       break;
4871     case DW_OP_skip:
4872     case DW_OP_bra:
4873       {
4874         int offset;
4875
4876         gcc_assert (val1->val_class == dw_val_class_loc);
4877         offset = val1->v.val_loc->dw_loc_addr - (loc->dw_loc_addr + 3);
4878
4879         dw2_asm_output_data (2, offset, NULL);
4880       }
4881       break;
4882     case DW_OP_implicit_value:
4883       dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
4884       switch (val2->val_class)
4885         {
4886         case dw_val_class_const:
4887           dw2_asm_output_data (val1->v.val_unsigned, val2->v.val_int, NULL);
4888           break;
4889         case dw_val_class_vec:
4890           {
4891             unsigned int elt_size = val2->v.val_vec.elt_size;
4892             unsigned int len = val2->v.val_vec.length;
4893             unsigned int i;
4894             unsigned char *p;
4895
4896             if (elt_size > sizeof (HOST_WIDE_INT))
4897               {
4898                 elt_size /= 2;
4899                 len *= 2;
4900               }
4901             for (i = 0, p = val2->v.val_vec.array;
4902                  i < len;
4903                  i++, p += elt_size)
4904               dw2_asm_output_data (elt_size, extract_int (p, elt_size),
4905                                    "fp or vector constant word %u", i);
4906           }
4907           break;
4908         case dw_val_class_const_double:
4909           {
4910             unsigned HOST_WIDE_INT first, second;
4911
4912             if (WORDS_BIG_ENDIAN)
4913               {
4914                 first = val2->v.val_double.high;
4915                 second = val2->v.val_double.low;
4916               }
4917             else
4918               {
4919                 first = val2->v.val_double.low;
4920                 second = val2->v.val_double.high;
4921               }
4922             dw2_asm_output_data (HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR,
4923                                  first, NULL);
4924             dw2_asm_output_data (HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR,
4925                                  second, NULL);
4926           }
4927           break;
4928         case dw_val_class_addr:
4929           gcc_assert (val1->v.val_unsigned == DWARF2_ADDR_SIZE);
4930           dw2_asm_output_addr_rtx (DWARF2_ADDR_SIZE, val2->v.val_addr, NULL);
4931           break;
4932         default:
4933           gcc_unreachable ();
4934         }
4935       break;
4936 #else
4937     case DW_OP_const2u:
4938     case DW_OP_const2s:
4939     case DW_OP_const4u:
4940     case DW_OP_const4s:
4941     case DW_OP_const8u:
4942     case DW_OP_const8s:
4943     case DW_OP_skip:
4944     case DW_OP_bra:
4945     case DW_OP_implicit_value:
4946       /* We currently don't make any attempt to make sure these are
4947          aligned properly like we do for the main unwind info, so
4948          don't support emitting things larger than a byte if we're
4949          only doing unwinding.  */
4950       gcc_unreachable ();
4951 #endif
4952     case DW_OP_const1u:
4953     case DW_OP_const1s:
4954       dw2_asm_output_data (1, val1->v.val_int, NULL);
4955       break;
4956     case DW_OP_constu:
4957       dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
4958       break;
4959     case DW_OP_consts:
4960       dw2_asm_output_data_sleb128 (val1->v.val_int, NULL);
4961       break;
4962     case DW_OP_pick:
4963       dw2_asm_output_data (1, val1->v.val_int, NULL);
4964       break;
4965     case DW_OP_plus_uconst:
4966       dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
4967       break;
4968     case DW_OP_breg0:
4969     case DW_OP_breg1:
4970     case DW_OP_breg2:
4971     case DW_OP_breg3:
4972     case DW_OP_breg4:
4973     case DW_OP_breg5:
4974     case DW_OP_breg6:
4975     case DW_OP_breg7:
4976     case DW_OP_breg8:
4977     case DW_OP_breg9:
4978     case DW_OP_breg10:
4979     case DW_OP_breg11:
4980     case DW_OP_breg12:
4981     case DW_OP_breg13:
4982     case DW_OP_breg14:
4983     case DW_OP_breg15:
4984     case DW_OP_breg16:
4985     case DW_OP_breg17:
4986     case DW_OP_breg18:
4987     case DW_OP_breg19:
4988     case DW_OP_breg20:
4989     case DW_OP_breg21:
4990     case DW_OP_breg22:
4991     case DW_OP_breg23:
4992     case DW_OP_breg24:
4993     case DW_OP_breg25:
4994     case DW_OP_breg26:
4995     case DW_OP_breg27:
4996     case DW_OP_breg28:
4997     case DW_OP_breg29:
4998     case DW_OP_breg30:
4999     case DW_OP_breg31:
5000       dw2_asm_output_data_sleb128 (val1->v.val_int, NULL);
5001       break;
5002     case DW_OP_regx:
5003       dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
5004       break;
5005     case DW_OP_fbreg:
5006       dw2_asm_output_data_sleb128 (val1->v.val_int, NULL);
5007       break;
5008     case DW_OP_bregx:
5009       dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
5010       dw2_asm_output_data_sleb128 (val2->v.val_int, NULL);
5011       break;
5012     case DW_OP_piece:
5013       dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
5014       break;
5015     case DW_OP_bit_piece:
5016       dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
5017       dw2_asm_output_data_uleb128 (val2->v.val_unsigned, NULL);
5018       break;
5019     case DW_OP_deref_size:
5020     case DW_OP_xderef_size:
5021       dw2_asm_output_data (1, val1->v.val_int, NULL);
5022       break;
5023
5024     case DW_OP_addr:
5025       if (loc->dtprel)
5026         {
5027           if (targetm.asm_out.output_dwarf_dtprel)
5028             {
5029               targetm.asm_out.output_dwarf_dtprel (asm_out_file,
5030                                                    DWARF2_ADDR_SIZE,
5031                                                    val1->v.val_addr);
5032               fputc ('\n', asm_out_file);
5033             }
5034           else
5035             gcc_unreachable ();
5036         }
5037       else
5038         {
5039 #ifdef DWARF2_DEBUGGING_INFO
5040           dw2_asm_output_addr_rtx (DWARF2_ADDR_SIZE, val1->v.val_addr, NULL);
5041 #else
5042           gcc_unreachable ();
5043 #endif
5044         }
5045       break;
5046
5047     default:
5048       /* Other codes have no operands.  */
5049       break;
5050     }
5051 }
5052
5053 /* Output a sequence of location operations.  */
5054
5055 static void
5056 output_loc_sequence (dw_loc_descr_ref loc)
5057 {
5058   for (; loc != NULL; loc = loc->dw_loc_next)
5059     {
5060       /* Output the opcode.  */
5061       dw2_asm_output_data (1, loc->dw_loc_opc,
5062                            "%s", dwarf_stack_op_name (loc->dw_loc_opc));
5063
5064       /* Output the operand(s) (if any).  */
5065       output_loc_operands (loc);
5066     }
5067 }
5068
5069 /* Output location description stack opcode's operands (if any).
5070    The output is single bytes on a line, suitable for .cfi_escape.  */
5071
5072 static void
5073 output_loc_operands_raw (dw_loc_descr_ref loc)
5074 {
5075   dw_val_ref val1 = &loc->dw_loc_oprnd1;
5076   dw_val_ref val2 = &loc->dw_loc_oprnd2;
5077
5078   switch (loc->dw_loc_opc)
5079     {
5080     case DW_OP_addr:
5081     case DW_OP_implicit_value:
5082       /* We cannot output addresses in .cfi_escape, only bytes.  */
5083       gcc_unreachable ();
5084
5085     case DW_OP_const1u:
5086     case DW_OP_const1s:
5087     case DW_OP_pick:
5088     case DW_OP_deref_size:
5089     case DW_OP_xderef_size:
5090       fputc (',', asm_out_file);
5091       dw2_asm_output_data_raw (1, val1->v.val_int);
5092       break;
5093
5094     case DW_OP_const2u:
5095     case DW_OP_const2s:
5096       fputc (',', asm_out_file);
5097       dw2_asm_output_data_raw (2, val1->v.val_int);
5098       break;
5099
5100     case DW_OP_const4u:
5101     case DW_OP_const4s:
5102       fputc (',', asm_out_file);
5103       dw2_asm_output_data_raw (4, val1->v.val_int);
5104       break;
5105
5106     case DW_OP_const8u:
5107     case DW_OP_const8s:
5108       gcc_assert (HOST_BITS_PER_WIDE_INT >= 64);
5109       fputc (',', asm_out_file);
5110       dw2_asm_output_data_raw (8, val1->v.val_int);
5111       break;
5112
5113     case DW_OP_skip:
5114     case DW_OP_bra:
5115       {
5116         int offset;
5117
5118         gcc_assert (val1->val_class == dw_val_class_loc);
5119         offset = val1->v.val_loc->dw_loc_addr - (loc->dw_loc_addr + 3);
5120
5121         fputc (',', asm_out_file);
5122         dw2_asm_output_data_raw (2, offset);
5123       }
5124       break;
5125
5126     case DW_OP_constu:
5127     case DW_OP_plus_uconst:
5128     case DW_OP_regx:
5129     case DW_OP_piece:
5130       fputc (',', asm_out_file);
5131       dw2_asm_output_data_uleb128_raw (val1->v.val_unsigned);
5132       break;
5133
5134     case DW_OP_bit_piece:
5135       fputc (',', asm_out_file);
5136       dw2_asm_output_data_uleb128_raw (val1->v.val_unsigned);
5137       dw2_asm_output_data_uleb128_raw (val2->v.val_unsigned);
5138       break;
5139
5140     case DW_OP_consts:
5141     case DW_OP_breg0:
5142     case DW_OP_breg1:
5143     case DW_OP_breg2:
5144     case DW_OP_breg3:
5145     case DW_OP_breg4:
5146     case DW_OP_breg5:
5147     case DW_OP_breg6:
5148     case DW_OP_breg7:
5149     case DW_OP_breg8:
5150     case DW_OP_breg9:
5151     case DW_OP_breg10:
5152     case DW_OP_breg11:
5153     case DW_OP_breg12:
5154     case DW_OP_breg13:
5155     case DW_OP_breg14:
5156     case DW_OP_breg15:
5157     case DW_OP_breg16:
5158     case DW_OP_breg17:
5159     case DW_OP_breg18:
5160     case DW_OP_breg19:
5161     case DW_OP_breg20:
5162     case DW_OP_breg21:
5163     case DW_OP_breg22:
5164     case DW_OP_breg23:
5165     case DW_OP_breg24:
5166     case DW_OP_breg25:
5167     case DW_OP_breg26:
5168     case DW_OP_breg27:
5169     case DW_OP_breg28:
5170     case DW_OP_breg29:
5171     case DW_OP_breg30:
5172     case DW_OP_breg31:
5173     case DW_OP_fbreg:
5174       fputc (',', asm_out_file);
5175       dw2_asm_output_data_sleb128_raw (val1->v.val_int);
5176       break;
5177
5178     case DW_OP_bregx:
5179       fputc (',', asm_out_file);
5180       dw2_asm_output_data_uleb128_raw (val1->v.val_unsigned);
5181       fputc (',', asm_out_file);
5182       dw2_asm_output_data_sleb128_raw (val2->v.val_int);
5183       break;
5184
5185     default:
5186       /* Other codes have no operands.  */
5187       break;
5188     }
5189 }
5190
5191 static void
5192 output_loc_sequence_raw (dw_loc_descr_ref loc)
5193 {
5194   while (1)
5195     {
5196       /* Output the opcode.  */
5197       fprintf (asm_out_file, "%#x", loc->dw_loc_opc);
5198       output_loc_operands_raw (loc);
5199
5200       if (!loc->dw_loc_next)
5201         break;
5202       loc = loc->dw_loc_next;
5203
5204       fputc (',', asm_out_file);
5205     }
5206 }
5207
5208 /* This routine will generate the correct assembly data for a location
5209    description based on a cfi entry with a complex address.  */
5210
5211 static void
5212 output_cfa_loc (dw_cfi_ref cfi)
5213 {
5214   dw_loc_descr_ref loc;
5215   unsigned long size;
5216
5217   if (cfi->dw_cfi_opc == DW_CFA_expression)
5218     {
5219       dw2_asm_output_data (1, cfi->dw_cfi_oprnd1.dw_cfi_reg_num, NULL);
5220       loc = cfi->dw_cfi_oprnd2.dw_cfi_loc;
5221     }
5222   else
5223     loc = cfi->dw_cfi_oprnd1.dw_cfi_loc;
5224
5225   /* Output the size of the block.  */
5226   size = size_of_locs (loc);
5227   dw2_asm_output_data_uleb128 (size, NULL);
5228
5229   /* Now output the operations themselves.  */
5230   output_loc_sequence (loc);
5231 }
5232
5233 /* Similar, but used for .cfi_escape.  */
5234
5235 static void
5236 output_cfa_loc_raw (dw_cfi_ref cfi)
5237 {
5238   dw_loc_descr_ref loc;
5239   unsigned long size;
5240
5241   if (cfi->dw_cfi_opc == DW_CFA_expression)
5242     {
5243       fprintf (asm_out_file, "%#x,", cfi->dw_cfi_oprnd1.dw_cfi_reg_num);
5244       loc = cfi->dw_cfi_oprnd2.dw_cfi_loc;
5245     }
5246   else
5247     loc = cfi->dw_cfi_oprnd1.dw_cfi_loc;
5248
5249   /* Output the size of the block.  */
5250   size = size_of_locs (loc);
5251   dw2_asm_output_data_uleb128_raw (size);
5252   fputc (',', asm_out_file);
5253
5254   /* Now output the operations themselves.  */
5255   output_loc_sequence_raw (loc);
5256 }
5257
5258 /* This function builds a dwarf location descriptor sequence from a
5259    dw_cfa_location, adding the given OFFSET to the result of the
5260    expression.  */
5261
5262 static struct dw_loc_descr_struct *
5263 build_cfa_loc (dw_cfa_location *cfa, HOST_WIDE_INT offset)
5264 {
5265   struct dw_loc_descr_struct *head, *tmp;
5266
5267   offset += cfa->offset;
5268
5269   if (cfa->indirect)
5270     {
5271       head = new_reg_loc_descr (cfa->reg, cfa->base_offset);
5272       head->dw_loc_oprnd1.val_class = dw_val_class_const;
5273       tmp = new_loc_descr (DW_OP_deref, 0, 0);
5274       add_loc_descr (&head, tmp);
5275       if (offset != 0)
5276         {
5277           tmp = new_loc_descr (DW_OP_plus_uconst, offset, 0);
5278           add_loc_descr (&head, tmp);
5279         }
5280     }
5281   else
5282     head = new_reg_loc_descr (cfa->reg, offset);
5283
5284   return head;
5285 }
5286
5287 /* This function builds a dwarf location descriptor sequence for
5288    the address at OFFSET from the CFA when stack is aligned to
5289    ALIGNMENT byte.  */
5290
5291 static struct dw_loc_descr_struct *
5292 build_cfa_aligned_loc (HOST_WIDE_INT offset, HOST_WIDE_INT alignment)
5293 {
5294   struct dw_loc_descr_struct *head;
5295   unsigned int dwarf_fp
5296     = DWARF_FRAME_REGNUM (HARD_FRAME_POINTER_REGNUM);
5297
5298  /* When CFA is defined as FP+OFFSET, emulate stack alignment.  */
5299   if (cfa.reg == HARD_FRAME_POINTER_REGNUM && cfa.indirect == 0)
5300     {
5301       head = new_reg_loc_descr (dwarf_fp, 0);
5302       add_loc_descr (&head, int_loc_descriptor (alignment));
5303       add_loc_descr (&head, new_loc_descr (DW_OP_and, 0, 0));
5304       loc_descr_plus_const (&head, offset);
5305     }
5306   else
5307     head = new_reg_loc_descr (dwarf_fp, offset);
5308   return head;
5309 }
5310
5311 /* This function fills in aa dw_cfa_location structure from a dwarf location
5312    descriptor sequence.  */
5313
5314 static void
5315 get_cfa_from_loc_descr (dw_cfa_location *cfa, struct dw_loc_descr_struct *loc)
5316 {
5317   struct dw_loc_descr_struct *ptr;
5318   cfa->offset = 0;
5319   cfa->base_offset = 0;
5320   cfa->indirect = 0;
5321   cfa->reg = -1;
5322
5323   for (ptr = loc; ptr != NULL; ptr = ptr->dw_loc_next)
5324     {
5325       enum dwarf_location_atom op = ptr->dw_loc_opc;
5326
5327       switch (op)
5328         {
5329         case DW_OP_reg0:
5330         case DW_OP_reg1:
5331         case DW_OP_reg2:
5332         case DW_OP_reg3:
5333         case DW_OP_reg4:
5334         case DW_OP_reg5:
5335         case DW_OP_reg6:
5336         case DW_OP_reg7:
5337         case DW_OP_reg8:
5338         case DW_OP_reg9:
5339         case DW_OP_reg10:
5340         case DW_OP_reg11:
5341         case DW_OP_reg12:
5342         case DW_OP_reg13:
5343         case DW_OP_reg14:
5344         case DW_OP_reg15:
5345         case DW_OP_reg16:
5346         case DW_OP_reg17:
5347         case DW_OP_reg18:
5348         case DW_OP_reg19:
5349         case DW_OP_reg20:
5350         case DW_OP_reg21:
5351         case DW_OP_reg22:
5352         case DW_OP_reg23:
5353         case DW_OP_reg24:
5354         case DW_OP_reg25:
5355         case DW_OP_reg26:
5356         case DW_OP_reg27:
5357         case DW_OP_reg28:
5358         case DW_OP_reg29:
5359         case DW_OP_reg30:
5360         case DW_OP_reg31:
5361           cfa->reg = op - DW_OP_reg0;
5362           break;
5363         case DW_OP_regx:
5364           cfa->reg = ptr->dw_loc_oprnd1.v.val_int;
5365           break;
5366         case DW_OP_breg0:
5367         case DW_OP_breg1:
5368         case DW_OP_breg2:
5369         case DW_OP_breg3:
5370         case DW_OP_breg4:
5371         case DW_OP_breg5:
5372         case DW_OP_breg6:
5373         case DW_OP_breg7:
5374         case DW_OP_breg8:
5375         case DW_OP_breg9:
5376         case DW_OP_breg10:
5377         case DW_OP_breg11:
5378         case DW_OP_breg12:
5379         case DW_OP_breg13:
5380         case DW_OP_breg14:
5381         case DW_OP_breg15:
5382         case DW_OP_breg16:
5383         case DW_OP_breg17:
5384         case DW_OP_breg18:
5385         case DW_OP_breg19:
5386         case DW_OP_breg20:
5387         case DW_OP_breg21:
5388         case DW_OP_breg22:
5389         case DW_OP_breg23:
5390         case DW_OP_breg24:
5391         case DW_OP_breg25:
5392         case DW_OP_breg26:
5393         case DW_OP_breg27:
5394         case DW_OP_breg28:
5395         case DW_OP_breg29:
5396         case DW_OP_breg30:
5397         case DW_OP_breg31:
5398           cfa->reg = op - DW_OP_breg0;
5399           cfa->base_offset = ptr->dw_loc_oprnd1.v.val_int;
5400           break;
5401         case DW_OP_bregx:
5402           cfa->reg = ptr->dw_loc_oprnd1.v.val_int;
5403           cfa->base_offset = ptr->dw_loc_oprnd2.v.val_int;
5404           break;
5405         case DW_OP_deref:
5406           cfa->indirect = 1;
5407           break;
5408         case DW_OP_plus_uconst:
5409           cfa->offset = ptr->dw_loc_oprnd1.v.val_unsigned;
5410           break;
5411         default:
5412           internal_error ("DW_LOC_OP %s not implemented",
5413                           dwarf_stack_op_name (ptr->dw_loc_opc));
5414         }
5415     }
5416 }
5417 #endif /* .debug_frame support */
5418 \f
5419 /* And now, the support for symbolic debugging information.  */
5420 #ifdef DWARF2_DEBUGGING_INFO
5421
5422 /* .debug_str support.  */
5423 static int output_indirect_string (void **, void *);
5424
5425 static void dwarf2out_init (const char *);
5426 static void dwarf2out_finish (const char *);
5427 static void dwarf2out_assembly_start (void);
5428 static void dwarf2out_define (unsigned int, const char *);
5429 static void dwarf2out_undef (unsigned int, const char *);
5430 static void dwarf2out_start_source_file (unsigned, const char *);
5431 static void dwarf2out_end_source_file (unsigned);
5432 static void dwarf2out_function_decl (tree);
5433 static void dwarf2out_begin_block (unsigned, unsigned);
5434 static void dwarf2out_end_block (unsigned, unsigned);
5435 static bool dwarf2out_ignore_block (const_tree);
5436 static void dwarf2out_global_decl (tree);
5437 static void dwarf2out_type_decl (tree, int);
5438 static void dwarf2out_imported_module_or_decl (tree, tree, tree, bool);
5439 static void dwarf2out_imported_module_or_decl_1 (tree, tree, tree,
5440                                                  dw_die_ref);
5441 static void dwarf2out_abstract_function (tree);
5442 static void dwarf2out_var_location (rtx);
5443 static void dwarf2out_direct_call (tree);
5444 static void dwarf2out_virtual_call_token (tree, int);
5445 static void dwarf2out_copy_call_info (rtx, rtx);
5446 static void dwarf2out_virtual_call (int);
5447 static void dwarf2out_begin_function (tree);
5448 static void dwarf2out_set_name (tree, tree);
5449
5450 /* The debug hooks structure.  */
5451
5452 const struct gcc_debug_hooks dwarf2_debug_hooks =
5453 {
5454   dwarf2out_init,
5455   dwarf2out_finish,
5456   dwarf2out_assembly_start,
5457   dwarf2out_define,
5458   dwarf2out_undef,
5459   dwarf2out_start_source_file,
5460   dwarf2out_end_source_file,
5461   dwarf2out_begin_block,
5462   dwarf2out_end_block,
5463   dwarf2out_ignore_block,
5464   dwarf2out_source_line,
5465   dwarf2out_begin_prologue,
5466   debug_nothing_int_charstar,   /* end_prologue */
5467   dwarf2out_end_epilogue,
5468   dwarf2out_begin_function,
5469   debug_nothing_int,            /* end_function */
5470   dwarf2out_function_decl,      /* function_decl */
5471   dwarf2out_global_decl,
5472   dwarf2out_type_decl,          /* type_decl */
5473   dwarf2out_imported_module_or_decl,
5474   debug_nothing_tree,           /* deferred_inline_function */
5475   /* The DWARF 2 backend tries to reduce debugging bloat by not
5476      emitting the abstract description of inline functions until
5477      something tries to reference them.  */
5478   dwarf2out_abstract_function,  /* outlining_inline_function */
5479   debug_nothing_rtx,            /* label */
5480   debug_nothing_int,            /* handle_pch */
5481   dwarf2out_var_location,
5482   dwarf2out_switch_text_section,
5483   dwarf2out_direct_call,
5484   dwarf2out_virtual_call_token,
5485   dwarf2out_copy_call_info,
5486   dwarf2out_virtual_call,
5487   dwarf2out_set_name,
5488   1                             /* start_end_main_source_file */
5489 };
5490 #endif
5491 \f
5492 /* NOTE: In the comments in this file, many references are made to
5493    "Debugging Information Entries".  This term is abbreviated as `DIE'
5494    throughout the remainder of this file.  */
5495
5496 /* An internal representation of the DWARF output is built, and then
5497    walked to generate the DWARF debugging info.  The walk of the internal
5498    representation is done after the entire program has been compiled.
5499    The types below are used to describe the internal representation.  */
5500
5501 /* Various DIE's use offsets relative to the beginning of the
5502    .debug_info section to refer to each other.  */
5503
5504 typedef long int dw_offset;
5505
5506 /* Define typedefs here to avoid circular dependencies.  */
5507
5508 typedef struct dw_attr_struct *dw_attr_ref;
5509 typedef struct dw_line_info_struct *dw_line_info_ref;
5510 typedef struct dw_separate_line_info_struct *dw_separate_line_info_ref;
5511 typedef struct pubname_struct *pubname_ref;
5512 typedef struct dw_ranges_struct *dw_ranges_ref;
5513 typedef struct dw_ranges_by_label_struct *dw_ranges_by_label_ref;
5514 typedef struct comdat_type_struct *comdat_type_node_ref;
5515
5516 /* Each entry in the line_info_table maintains the file and
5517    line number associated with the label generated for that
5518    entry.  The label gives the PC value associated with
5519    the line number entry.  */
5520
5521 typedef struct GTY(()) dw_line_info_struct {
5522   unsigned long dw_file_num;
5523   unsigned long dw_line_num;
5524 }
5525 dw_line_info_entry;
5526
5527 /* Line information for functions in separate sections; each one gets its
5528    own sequence.  */
5529 typedef struct GTY(()) dw_separate_line_info_struct {
5530   unsigned long dw_file_num;
5531   unsigned long dw_line_num;
5532   unsigned long function;
5533 }
5534 dw_separate_line_info_entry;
5535
5536 /* Each DIE attribute has a field specifying the attribute kind,
5537    a link to the next attribute in the chain, and an attribute value.
5538    Attributes are typically linked below the DIE they modify.  */
5539
5540 typedef struct GTY(()) dw_attr_struct {
5541   enum dwarf_attribute dw_attr;
5542   dw_val_node dw_attr_val;
5543 }
5544 dw_attr_node;
5545
5546 DEF_VEC_O(dw_attr_node);
5547 DEF_VEC_ALLOC_O(dw_attr_node,gc);
5548
5549 /* The Debugging Information Entry (DIE) structure.  DIEs form a tree.
5550    The children of each node form a circular list linked by
5551    die_sib.  die_child points to the node *before* the "first" child node.  */
5552
5553 typedef struct GTY((chain_circular ("%h.die_sib"))) die_struct {
5554   enum dwarf_tag die_tag;
5555   union die_symbol_or_type_node
5556     {
5557       char * GTY ((tag ("0"))) die_symbol;
5558       comdat_type_node_ref GTY ((tag ("1"))) die_type_node;
5559     }
5560   GTY ((desc ("dwarf_version >= 4"))) die_id;
5561   VEC(dw_attr_node,gc) * die_attr;
5562   dw_die_ref die_parent;
5563   dw_die_ref die_child;
5564   dw_die_ref die_sib;
5565   dw_die_ref die_definition; /* ref from a specification to its definition */
5566   dw_offset die_offset;
5567   unsigned long die_abbrev;
5568   int die_mark;
5569   /* Die is used and must not be pruned as unused.  */
5570   int die_perennial_p;
5571   unsigned int decl_id;
5572 }
5573 die_node;
5574
5575 /* Evaluate 'expr' while 'c' is set to each child of DIE in order.  */
5576 #define FOR_EACH_CHILD(die, c, expr) do {       \
5577   c = die->die_child;                           \
5578   if (c) do {                                   \
5579     c = c->die_sib;                             \
5580     expr;                                       \
5581   } while (c != die->die_child);                \
5582 } while (0)
5583
5584 /* The pubname structure */
5585
5586 typedef struct GTY(()) pubname_struct {
5587   dw_die_ref die;
5588   const char *name;
5589 }
5590 pubname_entry;
5591
5592 DEF_VEC_O(pubname_entry);
5593 DEF_VEC_ALLOC_O(pubname_entry, gc);
5594
5595 struct GTY(()) dw_ranges_struct {
5596   /* If this is positive, it's a block number, otherwise it's a
5597      bitwise-negated index into dw_ranges_by_label.  */
5598   int num;
5599 };
5600
5601 struct GTY(()) dw_ranges_by_label_struct {
5602   const char *begin;
5603   const char *end;
5604 };
5605
5606 /* The comdat type node structure.  */
5607 typedef struct GTY(()) comdat_type_struct
5608 {
5609   dw_die_ref root_die;
5610   dw_die_ref type_die;
5611   char signature[DWARF_TYPE_SIGNATURE_SIZE];
5612   struct comdat_type_struct *next;
5613 }
5614 comdat_type_node;
5615
5616 /* The limbo die list structure.  */
5617 typedef struct GTY(()) limbo_die_struct {
5618   dw_die_ref die;
5619   tree created_for;
5620   struct limbo_die_struct *next;
5621 }
5622 limbo_die_node;
5623
5624 typedef struct GTY(()) skeleton_chain_struct
5625 {
5626   dw_die_ref old_die;
5627   dw_die_ref new_die;
5628   struct skeleton_chain_struct *parent;
5629 }
5630 skeleton_chain_node;
5631
5632 /* How to start an assembler comment.  */
5633 #ifndef ASM_COMMENT_START
5634 #define ASM_COMMENT_START ";#"
5635 #endif
5636
5637 /* Define a macro which returns nonzero for a TYPE_DECL which was
5638    implicitly generated for a tagged type.
5639
5640    Note that unlike the gcc front end (which generates a NULL named
5641    TYPE_DECL node for each complete tagged type, each array type, and
5642    each function type node created) the g++ front end generates a
5643    _named_ TYPE_DECL node for each tagged type node created.
5644    These TYPE_DECLs have DECL_ARTIFICIAL set, so we know not to
5645    generate a DW_TAG_typedef DIE for them.  */
5646
5647 #define TYPE_DECL_IS_STUB(decl)                         \
5648   (DECL_NAME (decl) == NULL_TREE                        \
5649    || (DECL_ARTIFICIAL (decl)                           \
5650        && is_tagged_type (TREE_TYPE (decl))             \
5651        && ((decl == TYPE_STUB_DECL (TREE_TYPE (decl)))  \
5652            /* This is necessary for stub decls that     \
5653               appear in nested inline functions.  */    \
5654            || (DECL_ABSTRACT_ORIGIN (decl) != NULL_TREE \
5655                && (decl_ultimate_origin (decl)          \
5656                    == TYPE_STUB_DECL (TREE_TYPE (decl)))))))
5657
5658 /* Information concerning the compilation unit's programming
5659    language, and compiler version.  */
5660
5661 /* Fixed size portion of the DWARF compilation unit header.  */
5662 #define DWARF_COMPILE_UNIT_HEADER_SIZE \
5663   (DWARF_INITIAL_LENGTH_SIZE + DWARF_OFFSET_SIZE + 3)
5664
5665 /* Fixed size portion of the DWARF comdat type unit header.  */
5666 #define DWARF_COMDAT_TYPE_UNIT_HEADER_SIZE \
5667   (DWARF_COMPILE_UNIT_HEADER_SIZE + DWARF_TYPE_SIGNATURE_SIZE \
5668    + DWARF_OFFSET_SIZE)
5669
5670 /* Fixed size portion of public names info.  */
5671 #define DWARF_PUBNAMES_HEADER_SIZE (2 * DWARF_OFFSET_SIZE + 2)
5672
5673 /* Fixed size portion of the address range info.  */
5674 #define DWARF_ARANGES_HEADER_SIZE                                       \
5675   (DWARF_ROUND (DWARF_INITIAL_LENGTH_SIZE + DWARF_OFFSET_SIZE + 4,      \
5676                 DWARF2_ADDR_SIZE * 2)                                   \
5677    - DWARF_INITIAL_LENGTH_SIZE)
5678
5679 /* Size of padding portion in the address range info.  It must be
5680    aligned to twice the pointer size.  */
5681 #define DWARF_ARANGES_PAD_SIZE \
5682   (DWARF_ROUND (DWARF_INITIAL_LENGTH_SIZE + DWARF_OFFSET_SIZE + 4, \
5683                 DWARF2_ADDR_SIZE * 2)                              \
5684    - (DWARF_INITIAL_LENGTH_SIZE + DWARF_OFFSET_SIZE + 4))
5685
5686 /* Use assembler line directives if available.  */
5687 #ifndef DWARF2_ASM_LINE_DEBUG_INFO
5688 #ifdef HAVE_AS_DWARF2_DEBUG_LINE
5689 #define DWARF2_ASM_LINE_DEBUG_INFO 1
5690 #else
5691 #define DWARF2_ASM_LINE_DEBUG_INFO 0
5692 #endif
5693 #endif
5694
5695 /* Minimum line offset in a special line info. opcode.
5696    This value was chosen to give a reasonable range of values.  */
5697 #define DWARF_LINE_BASE  -10
5698
5699 /* First special line opcode - leave room for the standard opcodes.  */
5700 #define DWARF_LINE_OPCODE_BASE  10
5701
5702 /* Range of line offsets in a special line info. opcode.  */
5703 #define DWARF_LINE_RANGE  (254-DWARF_LINE_OPCODE_BASE+1)
5704
5705 /* Flag that indicates the initial value of the is_stmt_start flag.
5706    In the present implementation, we do not mark any lines as
5707    the beginning of a source statement, because that information
5708    is not made available by the GCC front-end.  */
5709 #define DWARF_LINE_DEFAULT_IS_STMT_START 1
5710
5711 /* Maximum number of operations per instruction bundle.  */
5712 #ifndef DWARF_LINE_DEFAULT_MAX_OPS_PER_INSN
5713 #define DWARF_LINE_DEFAULT_MAX_OPS_PER_INSN 1
5714 #endif
5715
5716 #ifdef DWARF2_DEBUGGING_INFO
5717 /* This location is used by calc_die_sizes() to keep track
5718    the offset of each DIE within the .debug_info section.  */
5719 static unsigned long next_die_offset;
5720 #endif
5721
5722 /* Record the root of the DIE's built for the current compilation unit.  */
5723 static GTY(()) dw_die_ref comp_unit_die;
5724
5725 /* A list of type DIEs that have been separated into comdat sections.  */
5726 static GTY(()) comdat_type_node *comdat_type_list;
5727
5728 /* A list of DIEs with a NULL parent waiting to be relocated.  */
5729 static GTY(()) limbo_die_node *limbo_die_list;
5730
5731 /* A list of DIEs for which we may have to generate
5732    DW_AT_{,MIPS_}linkage_name once their DECL_ASSEMBLER_NAMEs are set.  */
5733 static GTY(()) limbo_die_node *deferred_asm_name;
5734
5735 /* Filenames referenced by this compilation unit.  */
5736 static GTY((param_is (struct dwarf_file_data))) htab_t file_table;
5737
5738 /* A hash table of references to DIE's that describe declarations.
5739    The key is a DECL_UID() which is a unique number identifying each decl.  */
5740 static GTY ((param_is (struct die_struct))) htab_t decl_die_table;
5741
5742 /* A hash table of references to DIE's that describe COMMON blocks.
5743    The key is DECL_UID() ^ die_parent.  */
5744 static GTY ((param_is (struct die_struct))) htab_t common_block_die_table;
5745
5746 typedef struct GTY(()) die_arg_entry_struct {
5747     dw_die_ref die;
5748     tree arg;
5749 } die_arg_entry;
5750
5751 DEF_VEC_O(die_arg_entry);
5752 DEF_VEC_ALLOC_O(die_arg_entry,gc);
5753
5754 /* Node of the variable location list.  */
5755 struct GTY ((chain_next ("%h.next"))) var_loc_node {
5756   /* Either NOTE_INSN_VAR_LOCATION, or, for SRA optimized variables,
5757      EXPR_LIST chain.  For small bitsizes, bitsize is encoded
5758      in mode of the EXPR_LIST node and first EXPR_LIST operand
5759      is either NOTE_INSN_VAR_LOCATION for a piece with a known
5760      location or NULL for padding.  For larger bitsizes,
5761      mode is 0 and first operand is a CONCAT with bitsize
5762      as first CONCAT operand and NOTE_INSN_VAR_LOCATION resp.
5763      NULL as second operand.  */
5764   rtx GTY (()) loc;
5765   const char * GTY (()) label;
5766   struct var_loc_node * GTY (()) next;
5767 };
5768
5769 /* Variable location list.  */
5770 struct GTY (()) var_loc_list_def {
5771   struct var_loc_node * GTY (()) first;
5772
5773   /* Pointer to the last but one or last element of the
5774      chained list.  If the list is empty, both first and
5775      last are NULL, if the list contains just one node
5776      or the last node certainly is not redundant, it points
5777      to the last node, otherwise points to the last but one.
5778      Do not mark it for GC because it is marked through the chain.  */
5779   struct var_loc_node * GTY ((skip ("%h"))) last;
5780
5781   /* DECL_UID of the variable decl.  */
5782   unsigned int decl_id;
5783 };
5784 typedef struct var_loc_list_def var_loc_list;
5785
5786
5787 /* Table of decl location linked lists.  */
5788 static GTY ((param_is (var_loc_list))) htab_t decl_loc_table;
5789
5790 /* A pointer to the base of a list of references to DIE's that
5791    are uniquely identified by their tag, presence/absence of
5792    children DIE's, and list of attribute/value pairs.  */
5793 static GTY((length ("abbrev_die_table_allocated")))
5794   dw_die_ref *abbrev_die_table;
5795
5796 /* Number of elements currently allocated for abbrev_die_table.  */
5797 static GTY(()) unsigned abbrev_die_table_allocated;
5798
5799 /* Number of elements in type_die_table currently in use.  */
5800 static GTY(()) unsigned abbrev_die_table_in_use;
5801
5802 /* Size (in elements) of increments by which we may expand the
5803    abbrev_die_table.  */
5804 #define ABBREV_DIE_TABLE_INCREMENT 256
5805
5806 /* A pointer to the base of a table that contains line information
5807    for each source code line in .text in the compilation unit.  */
5808 static GTY((length ("line_info_table_allocated")))
5809      dw_line_info_ref line_info_table;
5810
5811 /* Number of elements currently allocated for line_info_table.  */
5812 static GTY(()) unsigned line_info_table_allocated;
5813
5814 /* Number of elements in line_info_table currently in use.  */
5815 static GTY(()) unsigned line_info_table_in_use;
5816
5817 /* A pointer to the base of a table that contains line information
5818    for each source code line outside of .text in the compilation unit.  */
5819 static GTY ((length ("separate_line_info_table_allocated")))
5820      dw_separate_line_info_ref separate_line_info_table;
5821
5822 /* Number of elements currently allocated for separate_line_info_table.  */
5823 static GTY(()) unsigned separate_line_info_table_allocated;
5824
5825 /* Number of elements in separate_line_info_table currently in use.  */
5826 static GTY(()) unsigned separate_line_info_table_in_use;
5827
5828 /* Size (in elements) of increments by which we may expand the
5829    line_info_table.  */
5830 #define LINE_INFO_TABLE_INCREMENT 1024
5831
5832 /* A pointer to the base of a table that contains a list of publicly
5833    accessible names.  */
5834 static GTY (()) VEC (pubname_entry, gc) *  pubname_table;
5835
5836 /* A pointer to the base of a table that contains a list of publicly
5837    accessible types.  */
5838 static GTY (()) VEC (pubname_entry, gc) * pubtype_table;
5839
5840 /* Array of dies for which we should generate .debug_arange info.  */
5841 static GTY((length ("arange_table_allocated"))) dw_die_ref *arange_table;
5842
5843 /* Number of elements currently allocated for arange_table.  */
5844 static GTY(()) unsigned arange_table_allocated;
5845
5846 /* Number of elements in arange_table currently in use.  */
5847 static GTY(()) unsigned arange_table_in_use;
5848
5849 /* Size (in elements) of increments by which we may expand the
5850    arange_table.  */
5851 #define ARANGE_TABLE_INCREMENT 64
5852
5853 /* Array of dies for which we should generate .debug_ranges info.  */
5854 static GTY ((length ("ranges_table_allocated"))) dw_ranges_ref ranges_table;
5855
5856 /* Number of elements currently allocated for ranges_table.  */
5857 static GTY(()) unsigned ranges_table_allocated;
5858
5859 /* Number of elements in ranges_table currently in use.  */
5860 static GTY(()) unsigned ranges_table_in_use;
5861
5862 /* Array of pairs of labels referenced in ranges_table.  */
5863 static GTY ((length ("ranges_by_label_allocated")))
5864      dw_ranges_by_label_ref ranges_by_label;
5865
5866 /* Number of elements currently allocated for ranges_by_label.  */
5867 static GTY(()) unsigned ranges_by_label_allocated;
5868
5869 /* Number of elements in ranges_by_label currently in use.  */
5870 static GTY(()) unsigned ranges_by_label_in_use;
5871
5872 /* Size (in elements) of increments by which we may expand the
5873    ranges_table.  */
5874 #define RANGES_TABLE_INCREMENT 64
5875
5876 /* Whether we have location lists that need outputting */
5877 static GTY(()) bool have_location_lists;
5878
5879 /* Unique label counter.  */
5880 static GTY(()) unsigned int loclabel_num;
5881
5882 /* Unique label counter for point-of-call tables.  */
5883 static GTY(()) unsigned int poc_label_num;
5884
5885 /* The direct call table structure.  */
5886
5887 typedef struct GTY(()) dcall_struct {
5888   unsigned int poc_label_num;
5889   tree poc_decl;
5890   dw_die_ref targ_die;
5891 }
5892 dcall_entry;
5893
5894 DEF_VEC_O(dcall_entry);
5895 DEF_VEC_ALLOC_O(dcall_entry, gc);
5896
5897 /* The virtual call table structure.  */
5898
5899 typedef struct GTY(()) vcall_struct {
5900   unsigned int poc_label_num;
5901   unsigned int vtable_slot;
5902 }
5903 vcall_entry;
5904
5905 DEF_VEC_O(vcall_entry);
5906 DEF_VEC_ALLOC_O(vcall_entry, gc);
5907
5908 /* Pointers to the direct and virtual call tables.  */
5909 static GTY (()) VEC (dcall_entry, gc) * dcall_table = NULL;
5910 static GTY (()) VEC (vcall_entry, gc) * vcall_table = NULL;
5911
5912 /* A hash table to map INSN_UIDs to vtable slot indexes.  */
5913
5914 struct GTY (()) vcall_insn {
5915   int insn_uid;
5916   unsigned int vtable_slot;
5917 };
5918
5919 static GTY ((param_is (struct vcall_insn))) htab_t vcall_insn_table;
5920
5921 #ifdef DWARF2_DEBUGGING_INFO
5922 /* Record whether the function being analyzed contains inlined functions.  */
5923 static int current_function_has_inlines;
5924 #endif
5925 #if 0 && defined (MIPS_DEBUGGING_INFO)
5926 static int comp_unit_has_inlines;
5927 #endif
5928
5929 /* The last file entry emitted by maybe_emit_file().  */
5930 static GTY(()) struct dwarf_file_data * last_emitted_file;
5931
5932 /* Number of internal labels generated by gen_internal_sym().  */
5933 static GTY(()) int label_num;
5934
5935 /* Cached result of previous call to lookup_filename.  */
5936 static GTY(()) struct dwarf_file_data * file_table_last_lookup;
5937
5938 static GTY(()) VEC(die_arg_entry,gc) *tmpl_value_parm_die_table;
5939
5940 #ifdef DWARF2_DEBUGGING_INFO
5941
5942 /* Offset from the "steady-state frame pointer" to the frame base,
5943    within the current function.  */
5944 static HOST_WIDE_INT frame_pointer_fb_offset;
5945
5946 /* Forward declarations for functions defined in this file.  */
5947
5948 static int is_pseudo_reg (const_rtx);
5949 static tree type_main_variant (tree);
5950 static int is_tagged_type (const_tree);
5951 static const char *dwarf_tag_name (unsigned);
5952 static const char *dwarf_attr_name (unsigned);
5953 static const char *dwarf_form_name (unsigned);
5954 static tree decl_ultimate_origin (const_tree);
5955 static tree decl_class_context (tree);
5956 static void add_dwarf_attr (dw_die_ref, dw_attr_ref);
5957 static inline enum dw_val_class AT_class (dw_attr_ref);
5958 static void add_AT_flag (dw_die_ref, enum dwarf_attribute, unsigned);
5959 static inline unsigned AT_flag (dw_attr_ref);
5960 static void add_AT_int (dw_die_ref, enum dwarf_attribute, HOST_WIDE_INT);
5961 static inline HOST_WIDE_INT AT_int (dw_attr_ref);
5962 static void add_AT_unsigned (dw_die_ref, enum dwarf_attribute, unsigned HOST_WIDE_INT);
5963 static inline unsigned HOST_WIDE_INT AT_unsigned (dw_attr_ref);
5964 static void add_AT_double (dw_die_ref, enum dwarf_attribute,
5965                            HOST_WIDE_INT, unsigned HOST_WIDE_INT);
5966 static inline void add_AT_vec (dw_die_ref, enum dwarf_attribute, unsigned int,
5967                                unsigned int, unsigned char *);
5968 static void add_AT_data8 (dw_die_ref, enum dwarf_attribute, unsigned char *);
5969 static hashval_t debug_str_do_hash (const void *);
5970 static int debug_str_eq (const void *, const void *);
5971 static void add_AT_string (dw_die_ref, enum dwarf_attribute, const char *);
5972 static inline const char *AT_string (dw_attr_ref);
5973 static enum dwarf_form AT_string_form (dw_attr_ref);
5974 static void add_AT_die_ref (dw_die_ref, enum dwarf_attribute, dw_die_ref);
5975 static void add_AT_specification (dw_die_ref, dw_die_ref);
5976 static inline dw_die_ref AT_ref (dw_attr_ref);
5977 static inline int AT_ref_external (dw_attr_ref);
5978 static inline void set_AT_ref_external (dw_attr_ref, int);
5979 static void add_AT_fde_ref (dw_die_ref, enum dwarf_attribute, unsigned);
5980 static void add_AT_loc (dw_die_ref, enum dwarf_attribute, dw_loc_descr_ref);
5981 static inline dw_loc_descr_ref AT_loc (dw_attr_ref);
5982 static void add_AT_loc_list (dw_die_ref, enum dwarf_attribute,
5983                              dw_loc_list_ref);
5984 static inline dw_loc_list_ref AT_loc_list (dw_attr_ref);
5985 static void add_AT_addr (dw_die_ref, enum dwarf_attribute, rtx);
5986 static inline rtx AT_addr (dw_attr_ref);
5987 static void add_AT_lbl_id (dw_die_ref, enum dwarf_attribute, const char *);
5988 static void add_AT_lineptr (dw_die_ref, enum dwarf_attribute, const char *);
5989 static void add_AT_macptr (dw_die_ref, enum dwarf_attribute, const char *);
5990 static void add_AT_offset (dw_die_ref, enum dwarf_attribute,
5991                            unsigned HOST_WIDE_INT);
5992 static void add_AT_range_list (dw_die_ref, enum dwarf_attribute,
5993                                unsigned long);
5994 static inline const char *AT_lbl (dw_attr_ref);
5995 static dw_attr_ref get_AT (dw_die_ref, enum dwarf_attribute);
5996 static const char *get_AT_low_pc (dw_die_ref);
5997 static const char *get_AT_hi_pc (dw_die_ref);
5998 static const char *get_AT_string (dw_die_ref, enum dwarf_attribute);
5999 static int get_AT_flag (dw_die_ref, enum dwarf_attribute);
6000 static unsigned get_AT_unsigned (dw_die_ref, enum dwarf_attribute);
6001 static inline dw_die_ref get_AT_ref (dw_die_ref, enum dwarf_attribute);
6002 static bool is_cxx (void);
6003 static bool is_fortran (void);
6004 static bool is_ada (void);
6005 static void remove_AT (dw_die_ref, enum dwarf_attribute);
6006 static void remove_child_TAG (dw_die_ref, enum dwarf_tag);
6007 static void add_child_die (dw_die_ref, dw_die_ref);
6008 static dw_die_ref new_die (enum dwarf_tag, dw_die_ref, tree);
6009 static dw_die_ref lookup_type_die (tree);
6010 static void equate_type_number_to_die (tree, dw_die_ref);
6011 static hashval_t decl_die_table_hash (const void *);
6012 static int decl_die_table_eq (const void *, const void *);
6013 static dw_die_ref lookup_decl_die (tree);
6014 static hashval_t common_block_die_table_hash (const void *);
6015 static int common_block_die_table_eq (const void *, const void *);
6016 static hashval_t decl_loc_table_hash (const void *);
6017 static int decl_loc_table_eq (const void *, const void *);
6018 static var_loc_list *lookup_decl_loc (const_tree);
6019 static void equate_decl_number_to_die (tree, dw_die_ref);
6020 static struct var_loc_node *add_var_loc_to_decl (tree, rtx, const char *);
6021 static void print_spaces (FILE *);
6022 static void print_die (dw_die_ref, FILE *);
6023 static void print_dwarf_line_table (FILE *);
6024 static dw_die_ref push_new_compile_unit (dw_die_ref, dw_die_ref);
6025 static dw_die_ref pop_compile_unit (dw_die_ref);
6026 static void loc_checksum (dw_loc_descr_ref, struct md5_ctx *);
6027 static void attr_checksum (dw_attr_ref, struct md5_ctx *, int *);
6028 static void die_checksum (dw_die_ref, struct md5_ctx *, int *);
6029 static void checksum_sleb128 (HOST_WIDE_INT, struct md5_ctx *);
6030 static void checksum_uleb128 (unsigned HOST_WIDE_INT, struct md5_ctx *);
6031 static void loc_checksum_ordered (dw_loc_descr_ref, struct md5_ctx *);
6032 static void attr_checksum_ordered (enum dwarf_tag, dw_attr_ref,
6033                                    struct md5_ctx *, int *);
6034 struct checksum_attributes;
6035 static void collect_checksum_attributes (struct checksum_attributes *, dw_die_ref);
6036 static void die_checksum_ordered (dw_die_ref, struct md5_ctx *, int *);
6037 static void checksum_die_context (dw_die_ref, struct md5_ctx *);
6038 static void generate_type_signature (dw_die_ref, comdat_type_node *);
6039 static int same_loc_p (dw_loc_descr_ref, dw_loc_descr_ref, int *);
6040 static int same_dw_val_p (const dw_val_node *, const dw_val_node *, int *);
6041 static int same_attr_p (dw_attr_ref, dw_attr_ref, int *);
6042 static int same_die_p (dw_die_ref, dw_die_ref, int *);
6043 static int same_die_p_wrap (dw_die_ref, dw_die_ref);
6044 static void compute_section_prefix (dw_die_ref);
6045 static int is_type_die (dw_die_ref);
6046 static int is_comdat_die (dw_die_ref);
6047 static int is_symbol_die (dw_die_ref);
6048 static void assign_symbol_names (dw_die_ref);
6049 static void break_out_includes (dw_die_ref);
6050 static int is_declaration_die (dw_die_ref);
6051 static int should_move_die_to_comdat (dw_die_ref);
6052 static dw_die_ref clone_as_declaration (dw_die_ref);
6053 static dw_die_ref clone_die (dw_die_ref);
6054 static dw_die_ref clone_tree (dw_die_ref);
6055 static void copy_declaration_context (dw_die_ref, dw_die_ref);
6056 static void generate_skeleton_ancestor_tree (skeleton_chain_node *);
6057 static void generate_skeleton_bottom_up (skeleton_chain_node *);
6058 static dw_die_ref generate_skeleton (dw_die_ref);
6059 static dw_die_ref remove_child_or_replace_with_skeleton (dw_die_ref,
6060                                                          dw_die_ref);
6061 static void break_out_comdat_types (dw_die_ref);
6062 static dw_die_ref copy_ancestor_tree (dw_die_ref, dw_die_ref, htab_t);
6063 static void copy_decls_walk (dw_die_ref, dw_die_ref, htab_t);
6064 static void copy_decls_for_unworthy_types (dw_die_ref);
6065
6066 static hashval_t htab_cu_hash (const void *);
6067 static int htab_cu_eq (const void *, const void *);
6068 static void htab_cu_del (void *);
6069 static int check_duplicate_cu (dw_die_ref, htab_t, unsigned *);
6070 static void record_comdat_symbol_number (dw_die_ref, htab_t, unsigned);
6071 static void add_sibling_attributes (dw_die_ref);
6072 static void build_abbrev_table (dw_die_ref);
6073 static void output_location_lists (dw_die_ref);
6074 static int constant_size (unsigned HOST_WIDE_INT);
6075 static unsigned long size_of_die (dw_die_ref);
6076 static void calc_die_sizes (dw_die_ref);
6077 static void mark_dies (dw_die_ref);
6078 static void unmark_dies (dw_die_ref);
6079 static void unmark_all_dies (dw_die_ref);
6080 static unsigned long size_of_pubnames (VEC (pubname_entry,gc) *);
6081 static unsigned long size_of_aranges (void);
6082 static enum dwarf_form value_format (dw_attr_ref);
6083 static void output_value_format (dw_attr_ref);
6084 static void output_abbrev_section (void);
6085 static void output_die_symbol (dw_die_ref);
6086 static void output_die (dw_die_ref);
6087 static void output_compilation_unit_header (void);
6088 static void output_comp_unit (dw_die_ref, int);
6089 static void output_comdat_type_unit (comdat_type_node *);
6090 static const char *dwarf2_name (tree, int);
6091 static void add_pubname (tree, dw_die_ref);
6092 static void add_pubname_string (const char *, dw_die_ref);
6093 static void add_pubtype (tree, dw_die_ref);
6094 static void output_pubnames (VEC (pubname_entry,gc) *);
6095 static void add_arange (tree, dw_die_ref);
6096 static void output_aranges (void);
6097 static unsigned int add_ranges_num (int);
6098 static unsigned int add_ranges (const_tree);
6099 static void add_ranges_by_labels (dw_die_ref, const char *, const char *,
6100                                   bool *);
6101 static void output_ranges (void);
6102 static void output_line_info (void);
6103 static void output_file_names (void);
6104 static dw_die_ref base_type_die (tree);
6105 static int is_base_type (tree);
6106 static dw_die_ref subrange_type_die (tree, tree, tree, dw_die_ref);
6107 static dw_die_ref modified_type_die (tree, int, int, dw_die_ref);
6108 static dw_die_ref generic_parameter_die (tree, tree, bool, dw_die_ref);
6109 static dw_die_ref template_parameter_pack_die (tree, tree, dw_die_ref);
6110 static int type_is_enum (const_tree);
6111 static unsigned int dbx_reg_number (const_rtx);
6112 static void add_loc_descr_op_piece (dw_loc_descr_ref *, int);
6113 static dw_loc_descr_ref reg_loc_descriptor (rtx, enum var_init_status);
6114 static dw_loc_descr_ref one_reg_loc_descriptor (unsigned int,
6115                                                 enum var_init_status);
6116 static dw_loc_descr_ref multiple_reg_loc_descriptor (rtx, rtx,
6117                                                      enum var_init_status);
6118 static dw_loc_descr_ref based_loc_descr (rtx, HOST_WIDE_INT,
6119                                          enum var_init_status);
6120 static int is_based_loc (const_rtx);
6121 static int resolve_one_addr (rtx *, void *);
6122 static dw_loc_descr_ref mem_loc_descriptor (rtx, enum machine_mode mode,
6123                                             enum var_init_status);
6124 static dw_loc_descr_ref concat_loc_descriptor (rtx, rtx,
6125                                                enum var_init_status);
6126 static dw_loc_descr_ref loc_descriptor (rtx, enum machine_mode mode,
6127                                         enum var_init_status);
6128 static dw_loc_list_ref loc_list_from_tree (tree, int);
6129 static dw_loc_descr_ref loc_descriptor_from_tree (tree, int);
6130 static HOST_WIDE_INT ceiling (HOST_WIDE_INT, unsigned int);
6131 static tree field_type (const_tree);
6132 static unsigned int simple_type_align_in_bits (const_tree);
6133 static unsigned int simple_decl_align_in_bits (const_tree);
6134 static unsigned HOST_WIDE_INT simple_type_size_in_bits (const_tree);
6135 static HOST_WIDE_INT field_byte_offset (const_tree);
6136 static void add_AT_location_description (dw_die_ref, enum dwarf_attribute,
6137                                          dw_loc_list_ref);
6138 static void add_data_member_location_attribute (dw_die_ref, tree);
6139 static bool add_const_value_attribute (dw_die_ref, rtx);
6140 static void insert_int (HOST_WIDE_INT, unsigned, unsigned char *);
6141 static void insert_double (double_int, unsigned char *);
6142 static void insert_float (const_rtx, unsigned char *);
6143 static rtx rtl_for_decl_location (tree);
6144 static bool add_location_or_const_value_attribute (dw_die_ref, tree,
6145                                                    enum dwarf_attribute);
6146 static bool tree_add_const_value_attribute (dw_die_ref, tree);
6147 static bool tree_add_const_value_attribute_for_decl (dw_die_ref, tree);
6148 static void add_name_attribute (dw_die_ref, const char *);
6149 static void add_comp_dir_attribute (dw_die_ref);
6150 static void add_bound_info (dw_die_ref, enum dwarf_attribute, tree);
6151 static void add_subscript_info (dw_die_ref, tree, bool);
6152 static void add_byte_size_attribute (dw_die_ref, tree);
6153 static void add_bit_offset_attribute (dw_die_ref, tree);
6154 static void add_bit_size_attribute (dw_die_ref, tree);
6155 static void add_prototyped_attribute (dw_die_ref, tree);
6156 static dw_die_ref add_abstract_origin_attribute (dw_die_ref, tree);
6157 static void add_pure_or_virtual_attribute (dw_die_ref, tree);
6158 static void add_src_coords_attributes (dw_die_ref, tree);
6159 static void add_name_and_src_coords_attributes (dw_die_ref, tree);
6160 static void push_decl_scope (tree);
6161 static void pop_decl_scope (void);
6162 static dw_die_ref scope_die_for (tree, dw_die_ref);
6163 static inline int local_scope_p (dw_die_ref);
6164 static inline int class_scope_p (dw_die_ref);
6165 static inline int class_or_namespace_scope_p (dw_die_ref);
6166 static void add_type_attribute (dw_die_ref, tree, int, int, dw_die_ref);
6167 static void add_calling_convention_attribute (dw_die_ref, tree);
6168 static const char *type_tag (const_tree);
6169 static tree member_declared_type (const_tree);
6170 #if 0
6171 static const char *decl_start_label (tree);
6172 #endif
6173 static void gen_array_type_die (tree, dw_die_ref);
6174 static void gen_descr_array_type_die (tree, struct array_descr_info *, dw_die_ref);
6175 #if 0
6176 static void gen_entry_point_die (tree, dw_die_ref);
6177 #endif
6178 static dw_die_ref gen_enumeration_type_die (tree, dw_die_ref);
6179 static dw_die_ref gen_formal_parameter_die (tree, tree, bool, dw_die_ref);
6180 static dw_die_ref gen_formal_parameter_pack_die  (tree, tree, dw_die_ref, tree*);
6181 static void gen_unspecified_parameters_die (tree, dw_die_ref);
6182 static void gen_formal_types_die (tree, dw_die_ref);
6183 static void gen_subprogram_die (tree, dw_die_ref);
6184 static void gen_variable_die (tree, tree, dw_die_ref);
6185 static void gen_const_die (tree, dw_die_ref);
6186 static void gen_label_die (tree, dw_die_ref);
6187 static void gen_lexical_block_die (tree, dw_die_ref, int);
6188 static void gen_inlined_subroutine_die (tree, dw_die_ref, int);
6189 static void gen_field_die (tree, dw_die_ref);
6190 static void gen_ptr_to_mbr_type_die (tree, dw_die_ref);
6191 static dw_die_ref gen_compile_unit_die (const char *);
6192 static void gen_inheritance_die (tree, tree, dw_die_ref);
6193 static void gen_member_die (tree, dw_die_ref);
6194 static void gen_struct_or_union_type_die (tree, dw_die_ref,
6195                                                 enum debug_info_usage);
6196 static void gen_subroutine_type_die (tree, dw_die_ref);
6197 static void gen_typedef_die (tree, dw_die_ref);
6198 static void gen_type_die (tree, dw_die_ref);
6199 static void gen_block_die (tree, dw_die_ref, int);
6200 static void decls_for_scope (tree, dw_die_ref, int);
6201 static int is_redundant_typedef (const_tree);
6202 static inline dw_die_ref get_context_die (tree);
6203 static void gen_namespace_die (tree, dw_die_ref);
6204 static void gen_decl_die (tree, tree, dw_die_ref);
6205 static dw_die_ref force_decl_die (tree);
6206 static dw_die_ref force_type_die (tree);
6207 static dw_die_ref setup_namespace_context (tree, dw_die_ref);
6208 static dw_die_ref declare_in_namespace (tree, dw_die_ref);
6209 static struct dwarf_file_data * lookup_filename (const char *);
6210 static void retry_incomplete_types (void);
6211 static void gen_type_die_for_member (tree, tree, dw_die_ref);
6212 static void gen_generic_params_dies (tree);
6213 static void splice_child_die (dw_die_ref, dw_die_ref);
6214 static int file_info_cmp (const void *, const void *);
6215 static dw_loc_list_ref new_loc_list (dw_loc_descr_ref, const char *,
6216                                      const char *, const char *);
6217 static void output_loc_list (dw_loc_list_ref);
6218 static char *gen_internal_sym (const char *);
6219
6220 static void prune_unmark_dies (dw_die_ref);
6221 static void prune_unused_types_mark (dw_die_ref, int);
6222 static void prune_unused_types_walk (dw_die_ref);
6223 static void prune_unused_types_walk_attribs (dw_die_ref);
6224 static void prune_unused_types_prune (dw_die_ref);
6225 static void prune_unused_types (void);
6226 static int maybe_emit_file (struct dwarf_file_data *fd);
6227 static void append_entry_to_tmpl_value_parm_die_table (dw_die_ref, tree);
6228 static void gen_remaining_tmpl_value_param_die_attribute (void);
6229
6230 /* Section names used to hold DWARF debugging information.  */
6231 #ifndef DEBUG_INFO_SECTION
6232 #define DEBUG_INFO_SECTION      ".debug_info"
6233 #endif
6234 #ifndef DEBUG_ABBREV_SECTION
6235 #define DEBUG_ABBREV_SECTION    ".debug_abbrev"
6236 #endif
6237 #ifndef DEBUG_ARANGES_SECTION
6238 #define DEBUG_ARANGES_SECTION   ".debug_aranges"
6239 #endif
6240 #ifndef DEBUG_MACINFO_SECTION
6241 #define DEBUG_MACINFO_SECTION   ".debug_macinfo"
6242 #endif
6243 #ifndef DEBUG_LINE_SECTION
6244 #define DEBUG_LINE_SECTION      ".debug_line"
6245 #endif
6246 #ifndef DEBUG_LOC_SECTION
6247 #define DEBUG_LOC_SECTION       ".debug_loc"
6248 #endif
6249 #ifndef DEBUG_PUBNAMES_SECTION
6250 #define DEBUG_PUBNAMES_SECTION  ".debug_pubnames"
6251 #endif
6252 #ifndef DEBUG_PUBTYPES_SECTION
6253 #define DEBUG_PUBTYPES_SECTION  ".debug_pubtypes"
6254 #endif
6255 #ifndef DEBUG_DCALL_SECTION
6256 #define DEBUG_DCALL_SECTION     ".debug_dcall"
6257 #endif
6258 #ifndef DEBUG_VCALL_SECTION
6259 #define DEBUG_VCALL_SECTION     ".debug_vcall"
6260 #endif
6261 #ifndef DEBUG_STR_SECTION
6262 #define DEBUG_STR_SECTION       ".debug_str"
6263 #endif
6264 #ifndef DEBUG_RANGES_SECTION
6265 #define DEBUG_RANGES_SECTION    ".debug_ranges"
6266 #endif
6267
6268 /* Standard ELF section names for compiled code and data.  */
6269 #ifndef TEXT_SECTION_NAME
6270 #define TEXT_SECTION_NAME       ".text"
6271 #endif
6272
6273 /* Section flags for .debug_str section.  */
6274 #define DEBUG_STR_SECTION_FLAGS \
6275   (HAVE_GAS_SHF_MERGE && flag_merge_debug_strings               \
6276    ? SECTION_DEBUG | SECTION_MERGE | SECTION_STRINGS | 1        \
6277    : SECTION_DEBUG)
6278
6279 /* Labels we insert at beginning sections we can reference instead of
6280    the section names themselves.  */
6281
6282 #ifndef TEXT_SECTION_LABEL
6283 #define TEXT_SECTION_LABEL              "Ltext"
6284 #endif
6285 #ifndef COLD_TEXT_SECTION_LABEL
6286 #define COLD_TEXT_SECTION_LABEL         "Ltext_cold"
6287 #endif
6288 #ifndef DEBUG_LINE_SECTION_LABEL
6289 #define DEBUG_LINE_SECTION_LABEL        "Ldebug_line"
6290 #endif
6291 #ifndef DEBUG_INFO_SECTION_LABEL
6292 #define DEBUG_INFO_SECTION_LABEL        "Ldebug_info"
6293 #endif
6294 #ifndef DEBUG_ABBREV_SECTION_LABEL
6295 #define DEBUG_ABBREV_SECTION_LABEL      "Ldebug_abbrev"
6296 #endif
6297 #ifndef DEBUG_LOC_SECTION_LABEL
6298 #define DEBUG_LOC_SECTION_LABEL         "Ldebug_loc"
6299 #endif
6300 #ifndef DEBUG_RANGES_SECTION_LABEL
6301 #define DEBUG_RANGES_SECTION_LABEL      "Ldebug_ranges"
6302 #endif
6303 #ifndef DEBUG_MACINFO_SECTION_LABEL
6304 #define DEBUG_MACINFO_SECTION_LABEL     "Ldebug_macinfo"
6305 #endif
6306
6307 /* Mangled name attribute to use.  This used to be a vendor extension
6308    until DWARF 4 standardized it.  */
6309 #define AT_linkage_name \
6310   (dwarf_version >= 4 ? DW_AT_linkage_name : DW_AT_MIPS_linkage_name)
6311
6312
6313 /* Definitions of defaults for formats and names of various special
6314    (artificial) labels which may be generated within this file (when the -g
6315    options is used and DWARF2_DEBUGGING_INFO is in effect.
6316    If necessary, these may be overridden from within the tm.h file, but
6317    typically, overriding these defaults is unnecessary.  */
6318
6319 static char text_end_label[MAX_ARTIFICIAL_LABEL_BYTES];
6320 static char text_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
6321 static char cold_text_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
6322 static char cold_end_label[MAX_ARTIFICIAL_LABEL_BYTES];
6323 static char abbrev_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
6324 static char debug_info_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
6325 static char debug_line_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
6326 static char macinfo_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
6327 static char loc_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
6328 static char ranges_section_label[2 * MAX_ARTIFICIAL_LABEL_BYTES];
6329
6330 #ifndef TEXT_END_LABEL
6331 #define TEXT_END_LABEL          "Letext"
6332 #endif
6333 #ifndef COLD_END_LABEL
6334 #define COLD_END_LABEL          "Letext_cold"
6335 #endif
6336 #ifndef BLOCK_BEGIN_LABEL
6337 #define BLOCK_BEGIN_LABEL       "LBB"
6338 #endif
6339 #ifndef BLOCK_END_LABEL
6340 #define BLOCK_END_LABEL         "LBE"
6341 #endif
6342 #ifndef LINE_CODE_LABEL
6343 #define LINE_CODE_LABEL         "LM"
6344 #endif
6345 #ifndef SEPARATE_LINE_CODE_LABEL
6346 #define SEPARATE_LINE_CODE_LABEL        "LSM"
6347 #endif
6348
6349 \f
6350 /* We allow a language front-end to designate a function that is to be
6351    called to "demangle" any name before it is put into a DIE.  */
6352
6353 static const char *(*demangle_name_func) (const char *);
6354
6355 void
6356 dwarf2out_set_demangle_name_func (const char *(*func) (const char *))
6357 {
6358   demangle_name_func = func;
6359 }
6360
6361 /* Test if rtl node points to a pseudo register.  */
6362
6363 static inline int
6364 is_pseudo_reg (const_rtx rtl)
6365 {
6366   return ((REG_P (rtl) && REGNO (rtl) >= FIRST_PSEUDO_REGISTER)
6367           || (GET_CODE (rtl) == SUBREG
6368               && REGNO (SUBREG_REG (rtl)) >= FIRST_PSEUDO_REGISTER));
6369 }
6370
6371 /* Return a reference to a type, with its const and volatile qualifiers
6372    removed.  */
6373
6374 static inline tree
6375 type_main_variant (tree type)
6376 {
6377   type = TYPE_MAIN_VARIANT (type);
6378
6379   /* ??? There really should be only one main variant among any group of
6380      variants of a given type (and all of the MAIN_VARIANT values for all
6381      members of the group should point to that one type) but sometimes the C
6382      front-end messes this up for array types, so we work around that bug
6383      here.  */
6384   if (TREE_CODE (type) == ARRAY_TYPE)
6385     while (type != TYPE_MAIN_VARIANT (type))
6386       type = TYPE_MAIN_VARIANT (type);
6387
6388   return type;
6389 }
6390
6391 /* Return nonzero if the given type node represents a tagged type.  */
6392
6393 static inline int
6394 is_tagged_type (const_tree type)
6395 {
6396   enum tree_code code = TREE_CODE (type);
6397
6398   return (code == RECORD_TYPE || code == UNION_TYPE
6399           || code == QUAL_UNION_TYPE || code == ENUMERAL_TYPE);
6400 }
6401
6402 /* Convert a DIE tag into its string name.  */
6403
6404 static const char *
6405 dwarf_tag_name (unsigned int tag)
6406 {
6407   switch (tag)
6408     {
6409     case DW_TAG_padding:
6410       return "DW_TAG_padding";
6411     case DW_TAG_array_type:
6412       return "DW_TAG_array_type";
6413     case DW_TAG_class_type:
6414       return "DW_TAG_class_type";
6415     case DW_TAG_entry_point:
6416       return "DW_TAG_entry_point";
6417     case DW_TAG_enumeration_type:
6418       return "DW_TAG_enumeration_type";
6419     case DW_TAG_formal_parameter:
6420       return "DW_TAG_formal_parameter";
6421     case DW_TAG_imported_declaration:
6422       return "DW_TAG_imported_declaration";
6423     case DW_TAG_label:
6424       return "DW_TAG_label";
6425     case DW_TAG_lexical_block:
6426       return "DW_TAG_lexical_block";
6427     case DW_TAG_member:
6428       return "DW_TAG_member";
6429     case DW_TAG_pointer_type:
6430       return "DW_TAG_pointer_type";
6431     case DW_TAG_reference_type:
6432       return "DW_TAG_reference_type";
6433     case DW_TAG_compile_unit:
6434       return "DW_TAG_compile_unit";
6435     case DW_TAG_string_type:
6436       return "DW_TAG_string_type";
6437     case DW_TAG_structure_type:
6438       return "DW_TAG_structure_type";
6439     case DW_TAG_subroutine_type:
6440       return "DW_TAG_subroutine_type";
6441     case DW_TAG_typedef:
6442       return "DW_TAG_typedef";
6443     case DW_TAG_union_type:
6444       return "DW_TAG_union_type";
6445     case DW_TAG_unspecified_parameters:
6446       return "DW_TAG_unspecified_parameters";
6447     case DW_TAG_variant:
6448       return "DW_TAG_variant";
6449     case DW_TAG_common_block:
6450       return "DW_TAG_common_block";
6451     case DW_TAG_common_inclusion:
6452       return "DW_TAG_common_inclusion";
6453     case DW_TAG_inheritance:
6454       return "DW_TAG_inheritance";
6455     case DW_TAG_inlined_subroutine:
6456       return "DW_TAG_inlined_subroutine";
6457     case DW_TAG_module:
6458       return "DW_TAG_module";
6459     case DW_TAG_ptr_to_member_type:
6460       return "DW_TAG_ptr_to_member_type";
6461     case DW_TAG_set_type:
6462       return "DW_TAG_set_type";
6463     case DW_TAG_subrange_type:
6464       return "DW_TAG_subrange_type";
6465     case DW_TAG_with_stmt:
6466       return "DW_TAG_with_stmt";
6467     case DW_TAG_access_declaration:
6468       return "DW_TAG_access_declaration";
6469     case DW_TAG_base_type:
6470       return "DW_TAG_base_type";
6471     case DW_TAG_catch_block:
6472       return "DW_TAG_catch_block";
6473     case DW_TAG_const_type:
6474       return "DW_TAG_const_type";
6475     case DW_TAG_constant:
6476       return "DW_TAG_constant";
6477     case DW_TAG_enumerator:
6478       return "DW_TAG_enumerator";
6479     case DW_TAG_file_type:
6480       return "DW_TAG_file_type";
6481     case DW_TAG_friend:
6482       return "DW_TAG_friend";
6483     case DW_TAG_namelist:
6484       return "DW_TAG_namelist";
6485     case DW_TAG_namelist_item:
6486       return "DW_TAG_namelist_item";
6487     case DW_TAG_packed_type:
6488       return "DW_TAG_packed_type";
6489     case DW_TAG_subprogram:
6490       return "DW_TAG_subprogram";
6491     case DW_TAG_template_type_param:
6492       return "DW_TAG_template_type_param";
6493     case DW_TAG_template_value_param:
6494       return "DW_TAG_template_value_param";
6495     case DW_TAG_thrown_type:
6496       return "DW_TAG_thrown_type";
6497     case DW_TAG_try_block:
6498       return "DW_TAG_try_block";
6499     case DW_TAG_variant_part:
6500       return "DW_TAG_variant_part";
6501     case DW_TAG_variable:
6502       return "DW_TAG_variable";
6503     case DW_TAG_volatile_type:
6504       return "DW_TAG_volatile_type";
6505     case DW_TAG_dwarf_procedure:
6506       return "DW_TAG_dwarf_procedure";
6507     case DW_TAG_restrict_type:
6508       return "DW_TAG_restrict_type";
6509     case DW_TAG_interface_type:
6510       return "DW_TAG_interface_type";
6511     case DW_TAG_namespace:
6512       return "DW_TAG_namespace";
6513     case DW_TAG_imported_module:
6514       return "DW_TAG_imported_module";
6515     case DW_TAG_unspecified_type:
6516       return "DW_TAG_unspecified_type";
6517     case DW_TAG_partial_unit:
6518       return "DW_TAG_partial_unit";
6519     case DW_TAG_imported_unit:
6520       return "DW_TAG_imported_unit";
6521     case DW_TAG_condition:
6522       return "DW_TAG_condition";
6523     case DW_TAG_shared_type:
6524       return "DW_TAG_shared_type";
6525     case DW_TAG_type_unit:
6526       return "DW_TAG_type_unit";
6527     case DW_TAG_rvalue_reference_type:
6528       return "DW_TAG_rvalue_reference_type";
6529     case DW_TAG_template_alias:
6530       return "DW_TAG_template_alias";
6531     case DW_TAG_GNU_template_parameter_pack:
6532       return "DW_TAG_GNU_template_parameter_pack";
6533     case DW_TAG_GNU_formal_parameter_pack:
6534       return "DW_TAG_GNU_formal_parameter_pack";
6535     case DW_TAG_MIPS_loop:
6536       return "DW_TAG_MIPS_loop";
6537     case DW_TAG_format_label:
6538       return "DW_TAG_format_label";
6539     case DW_TAG_function_template:
6540       return "DW_TAG_function_template";
6541     case DW_TAG_class_template:
6542       return "DW_TAG_class_template";
6543     case DW_TAG_GNU_BINCL:
6544       return "DW_TAG_GNU_BINCL";
6545     case DW_TAG_GNU_EINCL:
6546       return "DW_TAG_GNU_EINCL";
6547     case DW_TAG_GNU_template_template_param:
6548       return "DW_TAG_GNU_template_template_param";
6549     default:
6550       return "DW_TAG_<unknown>";
6551     }
6552 }
6553
6554 /* Convert a DWARF attribute code into its string name.  */
6555
6556 static const char *
6557 dwarf_attr_name (unsigned int attr)
6558 {
6559   switch (attr)
6560     {
6561     case DW_AT_sibling:
6562       return "DW_AT_sibling";
6563     case DW_AT_location:
6564       return "DW_AT_location";
6565     case DW_AT_name:
6566       return "DW_AT_name";
6567     case DW_AT_ordering:
6568       return "DW_AT_ordering";
6569     case DW_AT_subscr_data:
6570       return "DW_AT_subscr_data";
6571     case DW_AT_byte_size:
6572       return "DW_AT_byte_size";
6573     case DW_AT_bit_offset:
6574       return "DW_AT_bit_offset";
6575     case DW_AT_bit_size:
6576       return "DW_AT_bit_size";
6577     case DW_AT_element_list:
6578       return "DW_AT_element_list";
6579     case DW_AT_stmt_list:
6580       return "DW_AT_stmt_list";
6581     case DW_AT_low_pc:
6582       return "DW_AT_low_pc";
6583     case DW_AT_high_pc:
6584       return "DW_AT_high_pc";
6585     case DW_AT_language:
6586       return "DW_AT_language";
6587     case DW_AT_member:
6588       return "DW_AT_member";
6589     case DW_AT_discr:
6590       return "DW_AT_discr";
6591     case DW_AT_discr_value:
6592       return "DW_AT_discr_value";
6593     case DW_AT_visibility:
6594       return "DW_AT_visibility";
6595     case DW_AT_import:
6596       return "DW_AT_import";
6597     case DW_AT_string_length:
6598       return "DW_AT_string_length";
6599     case DW_AT_common_reference:
6600       return "DW_AT_common_reference";
6601     case DW_AT_comp_dir:
6602       return "DW_AT_comp_dir";
6603     case DW_AT_const_value:
6604       return "DW_AT_const_value";
6605     case DW_AT_containing_type:
6606       return "DW_AT_containing_type";
6607     case DW_AT_default_value:
6608       return "DW_AT_default_value";
6609     case DW_AT_inline:
6610       return "DW_AT_inline";
6611     case DW_AT_is_optional:
6612       return "DW_AT_is_optional";
6613     case DW_AT_lower_bound:
6614       return "DW_AT_lower_bound";
6615     case DW_AT_producer:
6616       return "DW_AT_producer";
6617     case DW_AT_prototyped:
6618       return "DW_AT_prototyped";
6619     case DW_AT_return_addr:
6620       return "DW_AT_return_addr";
6621     case DW_AT_start_scope:
6622       return "DW_AT_start_scope";
6623     case DW_AT_bit_stride:
6624       return "DW_AT_bit_stride";
6625     case DW_AT_upper_bound:
6626       return "DW_AT_upper_bound";
6627     case DW_AT_abstract_origin:
6628       return "DW_AT_abstract_origin";
6629     case DW_AT_accessibility:
6630       return "DW_AT_accessibility";
6631     case DW_AT_address_class:
6632       return "DW_AT_address_class";
6633     case DW_AT_artificial:
6634       return "DW_AT_artificial";
6635     case DW_AT_base_types:
6636       return "DW_AT_base_types";
6637     case DW_AT_calling_convention:
6638       return "DW_AT_calling_convention";
6639     case DW_AT_count:
6640       return "DW_AT_count";
6641     case DW_AT_data_member_location:
6642       return "DW_AT_data_member_location";
6643     case DW_AT_decl_column:
6644       return "DW_AT_decl_column";
6645     case DW_AT_decl_file:
6646       return "DW_AT_decl_file";
6647     case DW_AT_decl_line:
6648       return "DW_AT_decl_line";
6649     case DW_AT_declaration:
6650       return "DW_AT_declaration";
6651     case DW_AT_discr_list:
6652       return "DW_AT_discr_list";
6653     case DW_AT_encoding:
6654       return "DW_AT_encoding";
6655     case DW_AT_external:
6656       return "DW_AT_external";
6657     case DW_AT_explicit:
6658       return "DW_AT_explicit";
6659     case DW_AT_frame_base:
6660       return "DW_AT_frame_base";
6661     case DW_AT_friend:
6662       return "DW_AT_friend";
6663     case DW_AT_identifier_case:
6664       return "DW_AT_identifier_case";
6665     case DW_AT_macro_info:
6666       return "DW_AT_macro_info";
6667     case DW_AT_namelist_items:
6668       return "DW_AT_namelist_items";
6669     case DW_AT_priority:
6670       return "DW_AT_priority";
6671     case DW_AT_segment:
6672       return "DW_AT_segment";
6673     case DW_AT_specification:
6674       return "DW_AT_specification";
6675     case DW_AT_static_link:
6676       return "DW_AT_static_link";
6677     case DW_AT_type:
6678       return "DW_AT_type";
6679     case DW_AT_use_location:
6680       return "DW_AT_use_location";
6681     case DW_AT_variable_parameter:
6682       return "DW_AT_variable_parameter";
6683     case DW_AT_virtuality:
6684       return "DW_AT_virtuality";
6685     case DW_AT_vtable_elem_location:
6686       return "DW_AT_vtable_elem_location";
6687
6688     case DW_AT_allocated:
6689       return "DW_AT_allocated";
6690     case DW_AT_associated:
6691       return "DW_AT_associated";
6692     case DW_AT_data_location:
6693       return "DW_AT_data_location";
6694     case DW_AT_byte_stride:
6695       return "DW_AT_byte_stride";
6696     case DW_AT_entry_pc:
6697       return "DW_AT_entry_pc";
6698     case DW_AT_use_UTF8:
6699       return "DW_AT_use_UTF8";
6700     case DW_AT_extension:
6701       return "DW_AT_extension";
6702     case DW_AT_ranges:
6703       return "DW_AT_ranges";
6704     case DW_AT_trampoline:
6705       return "DW_AT_trampoline";
6706     case DW_AT_call_column:
6707       return "DW_AT_call_column";
6708     case DW_AT_call_file:
6709       return "DW_AT_call_file";
6710     case DW_AT_call_line:
6711       return "DW_AT_call_line";
6712
6713     case DW_AT_signature:
6714       return "DW_AT_signature";
6715     case DW_AT_main_subprogram:
6716       return "DW_AT_main_subprogram";
6717     case DW_AT_data_bit_offset:
6718       return "DW_AT_data_bit_offset";
6719     case DW_AT_const_expr:
6720       return "DW_AT_const_expr";
6721     case DW_AT_enum_class:
6722       return "DW_AT_enum_class";
6723     case DW_AT_linkage_name:
6724       return "DW_AT_linkage_name";
6725
6726     case DW_AT_MIPS_fde:
6727       return "DW_AT_MIPS_fde";
6728     case DW_AT_MIPS_loop_begin:
6729       return "DW_AT_MIPS_loop_begin";
6730     case DW_AT_MIPS_tail_loop_begin:
6731       return "DW_AT_MIPS_tail_loop_begin";
6732     case DW_AT_MIPS_epilog_begin:
6733       return "DW_AT_MIPS_epilog_begin";
6734     case DW_AT_MIPS_loop_unroll_factor:
6735       return "DW_AT_MIPS_loop_unroll_factor";
6736     case DW_AT_MIPS_software_pipeline_depth:
6737       return "DW_AT_MIPS_software_pipeline_depth";
6738     case DW_AT_MIPS_linkage_name:
6739       return "DW_AT_MIPS_linkage_name";
6740     case DW_AT_MIPS_stride:
6741       return "DW_AT_MIPS_stride";
6742     case DW_AT_MIPS_abstract_name:
6743       return "DW_AT_MIPS_abstract_name";
6744     case DW_AT_MIPS_clone_origin:
6745       return "DW_AT_MIPS_clone_origin";
6746     case DW_AT_MIPS_has_inlines:
6747       return "DW_AT_MIPS_has_inlines";
6748
6749     case DW_AT_sf_names:
6750       return "DW_AT_sf_names";
6751     case DW_AT_src_info:
6752       return "DW_AT_src_info";
6753     case DW_AT_mac_info:
6754       return "DW_AT_mac_info";
6755     case DW_AT_src_coords:
6756       return "DW_AT_src_coords";
6757     case DW_AT_body_begin:
6758       return "DW_AT_body_begin";
6759     case DW_AT_body_end:
6760       return "DW_AT_body_end";
6761     case DW_AT_GNU_vector:
6762       return "DW_AT_GNU_vector";
6763     case DW_AT_GNU_guarded_by:
6764       return "DW_AT_GNU_guarded_by";
6765     case DW_AT_GNU_pt_guarded_by:
6766       return "DW_AT_GNU_pt_guarded_by";
6767     case DW_AT_GNU_guarded:
6768       return "DW_AT_GNU_guarded";
6769     case DW_AT_GNU_pt_guarded:
6770       return "DW_AT_GNU_pt_guarded";
6771     case DW_AT_GNU_locks_excluded:
6772       return "DW_AT_GNU_locks_excluded";
6773     case DW_AT_GNU_exclusive_locks_required:
6774       return "DW_AT_GNU_exclusive_locks_required";
6775     case DW_AT_GNU_shared_locks_required:
6776       return "DW_AT_GNU_shared_locks_required";
6777     case DW_AT_GNU_odr_signature:
6778       return "DW_AT_GNU_odr_signature";
6779     case DW_AT_GNU_template_name:
6780       return "DW_AT_GNU_template_name";
6781
6782     case DW_AT_VMS_rtnbeg_pd_address:
6783       return "DW_AT_VMS_rtnbeg_pd_address";
6784
6785     default:
6786       return "DW_AT_<unknown>";
6787     }
6788 }
6789
6790 /* Convert a DWARF value form code into its string name.  */
6791
6792 static const char *
6793 dwarf_form_name (unsigned int form)
6794 {
6795   switch (form)
6796     {
6797     case DW_FORM_addr:
6798       return "DW_FORM_addr";
6799     case DW_FORM_block2:
6800       return "DW_FORM_block2";
6801     case DW_FORM_block4:
6802       return "DW_FORM_block4";
6803     case DW_FORM_data2:
6804       return "DW_FORM_data2";
6805     case DW_FORM_data4:
6806       return "DW_FORM_data4";
6807     case DW_FORM_data8:
6808       return "DW_FORM_data8";
6809     case DW_FORM_string:
6810       return "DW_FORM_string";
6811     case DW_FORM_block:
6812       return "DW_FORM_block";
6813     case DW_FORM_block1:
6814       return "DW_FORM_block1";
6815     case DW_FORM_data1:
6816       return "DW_FORM_data1";
6817     case DW_FORM_flag:
6818       return "DW_FORM_flag";
6819     case DW_FORM_sdata:
6820       return "DW_FORM_sdata";
6821     case DW_FORM_strp:
6822       return "DW_FORM_strp";
6823     case DW_FORM_udata:
6824       return "DW_FORM_udata";
6825     case DW_FORM_ref_addr:
6826       return "DW_FORM_ref_addr";
6827     case DW_FORM_ref1:
6828       return "DW_FORM_ref1";
6829     case DW_FORM_ref2:
6830       return "DW_FORM_ref2";
6831     case DW_FORM_ref4:
6832       return "DW_FORM_ref4";
6833     case DW_FORM_ref8:
6834       return "DW_FORM_ref8";
6835     case DW_FORM_ref_udata:
6836       return "DW_FORM_ref_udata";
6837     case DW_FORM_indirect:
6838       return "DW_FORM_indirect";
6839     case DW_FORM_sec_offset:
6840       return "DW_FORM_sec_offset";
6841     case DW_FORM_exprloc:
6842       return "DW_FORM_exprloc";
6843     case DW_FORM_flag_present:
6844       return "DW_FORM_flag_present";
6845     case DW_FORM_ref_sig8:
6846       return "DW_FORM_ref_sig8";
6847     default:
6848       return "DW_FORM_<unknown>";
6849     }
6850 }
6851 \f
6852 /* Determine the "ultimate origin" of a decl.  The decl may be an inlined
6853    instance of an inlined instance of a decl which is local to an inline
6854    function, so we have to trace all of the way back through the origin chain
6855    to find out what sort of node actually served as the original seed for the
6856    given block.  */
6857
6858 static tree
6859 decl_ultimate_origin (const_tree decl)
6860 {
6861   if (!CODE_CONTAINS_STRUCT (TREE_CODE (decl), TS_DECL_COMMON))
6862     return NULL_TREE;
6863
6864   /* output_inline_function sets DECL_ABSTRACT_ORIGIN for all the
6865      nodes in the function to point to themselves; ignore that if
6866      we're trying to output the abstract instance of this function.  */
6867   if (DECL_ABSTRACT (decl) && DECL_ABSTRACT_ORIGIN (decl) == decl)
6868     return NULL_TREE;
6869
6870   /* Since the DECL_ABSTRACT_ORIGIN for a DECL is supposed to be the
6871      most distant ancestor, this should never happen.  */
6872   gcc_assert (!DECL_FROM_INLINE (DECL_ORIGIN (decl)));
6873
6874   return DECL_ABSTRACT_ORIGIN (decl);
6875 }
6876
6877 /* Get the class to which DECL belongs, if any.  In g++, the DECL_CONTEXT
6878    of a virtual function may refer to a base class, so we check the 'this'
6879    parameter.  */
6880
6881 static tree
6882 decl_class_context (tree decl)
6883 {
6884   tree context = NULL_TREE;
6885
6886   if (TREE_CODE (decl) != FUNCTION_DECL || ! DECL_VINDEX (decl))
6887     context = DECL_CONTEXT (decl);
6888   else
6889     context = TYPE_MAIN_VARIANT
6890       (TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (TREE_TYPE (decl)))));
6891
6892   if (context && !TYPE_P (context))
6893     context = NULL_TREE;
6894
6895   return context;
6896 }
6897 \f
6898 /* Add an attribute/value pair to a DIE.  */
6899
6900 static inline void
6901 add_dwarf_attr (dw_die_ref die, dw_attr_ref attr)
6902 {
6903   /* Maybe this should be an assert?  */
6904   if (die == NULL)
6905     return;
6906
6907   if (die->die_attr == NULL)
6908     die->die_attr = VEC_alloc (dw_attr_node, gc, 1);
6909   VEC_safe_push (dw_attr_node, gc, die->die_attr, attr);
6910 }
6911
6912 static inline enum dw_val_class
6913 AT_class (dw_attr_ref a)
6914 {
6915   return a->dw_attr_val.val_class;
6916 }
6917
6918 /* Add a flag value attribute to a DIE.  */
6919
6920 static inline void
6921 add_AT_flag (dw_die_ref die, enum dwarf_attribute attr_kind, unsigned int flag)
6922 {
6923   dw_attr_node attr;
6924
6925   attr.dw_attr = attr_kind;
6926   attr.dw_attr_val.val_class = dw_val_class_flag;
6927   attr.dw_attr_val.v.val_flag = flag;
6928   add_dwarf_attr (die, &attr);
6929 }
6930
6931 static inline unsigned
6932 AT_flag (dw_attr_ref a)
6933 {
6934   gcc_assert (a && AT_class (a) == dw_val_class_flag);
6935   return a->dw_attr_val.v.val_flag;
6936 }
6937
6938 /* Add a signed integer attribute value to a DIE.  */
6939
6940 static inline void
6941 add_AT_int (dw_die_ref die, enum dwarf_attribute attr_kind, HOST_WIDE_INT int_val)
6942 {
6943   dw_attr_node attr;
6944
6945   attr.dw_attr = attr_kind;
6946   attr.dw_attr_val.val_class = dw_val_class_const;
6947   attr.dw_attr_val.v.val_int = int_val;
6948   add_dwarf_attr (die, &attr);
6949 }
6950
6951 static inline HOST_WIDE_INT
6952 AT_int (dw_attr_ref a)
6953 {
6954   gcc_assert (a && AT_class (a) == dw_val_class_const);
6955   return a->dw_attr_val.v.val_int;
6956 }
6957
6958 /* Add an unsigned integer attribute value to a DIE.  */
6959
6960 static inline void
6961 add_AT_unsigned (dw_die_ref die, enum dwarf_attribute attr_kind,
6962                  unsigned HOST_WIDE_INT unsigned_val)
6963 {
6964   dw_attr_node attr;
6965
6966   attr.dw_attr = attr_kind;
6967   attr.dw_attr_val.val_class = dw_val_class_unsigned_const;
6968   attr.dw_attr_val.v.val_unsigned = unsigned_val;
6969   add_dwarf_attr (die, &attr);
6970 }
6971
6972 static inline unsigned HOST_WIDE_INT
6973 AT_unsigned (dw_attr_ref a)
6974 {
6975   gcc_assert (a && AT_class (a) == dw_val_class_unsigned_const);
6976   return a->dw_attr_val.v.val_unsigned;
6977 }
6978
6979 /* Add an unsigned double integer attribute value to a DIE.  */
6980
6981 static inline void
6982 add_AT_double (dw_die_ref die, enum dwarf_attribute attr_kind,
6983                HOST_WIDE_INT high, unsigned HOST_WIDE_INT low)
6984 {
6985   dw_attr_node attr;
6986
6987   attr.dw_attr = attr_kind;
6988   attr.dw_attr_val.val_class = dw_val_class_const_double;
6989   attr.dw_attr_val.v.val_double.high = high;
6990   attr.dw_attr_val.v.val_double.low = low;
6991   add_dwarf_attr (die, &attr);
6992 }
6993
6994 /* Add a floating point attribute value to a DIE and return it.  */
6995
6996 static inline void
6997 add_AT_vec (dw_die_ref die, enum dwarf_attribute attr_kind,
6998             unsigned int length, unsigned int elt_size, unsigned char *array)
6999 {
7000   dw_attr_node attr;
7001
7002   attr.dw_attr = attr_kind;
7003   attr.dw_attr_val.val_class = dw_val_class_vec;
7004   attr.dw_attr_val.v.val_vec.length = length;
7005   attr.dw_attr_val.v.val_vec.elt_size = elt_size;
7006   attr.dw_attr_val.v.val_vec.array = array;
7007   add_dwarf_attr (die, &attr);
7008 }
7009
7010 /* Add an 8-byte data attribute value to a DIE.  */
7011
7012 static inline void
7013 add_AT_data8 (dw_die_ref die, enum dwarf_attribute attr_kind,
7014               unsigned char data8[8])
7015 {
7016   dw_attr_node attr;
7017
7018   attr.dw_attr = attr_kind;
7019   attr.dw_attr_val.val_class = dw_val_class_data8;
7020   memcpy (attr.dw_attr_val.v.val_data8, data8, 8);
7021   add_dwarf_attr (die, &attr);
7022 }
7023
7024 /* Hash and equality functions for debug_str_hash.  */
7025
7026 static hashval_t
7027 debug_str_do_hash (const void *x)
7028 {
7029   return htab_hash_string (((const struct indirect_string_node *)x)->str);
7030 }
7031
7032 static int
7033 debug_str_eq (const void *x1, const void *x2)
7034 {
7035   return strcmp ((((const struct indirect_string_node *)x1)->str),
7036                  (const char *)x2) == 0;
7037 }
7038
7039 /* Add STR to the indirect string hash table.  */
7040
7041 static struct indirect_string_node *
7042 find_AT_string (const char *str)
7043 {
7044   struct indirect_string_node *node;
7045   void **slot;
7046
7047   if (! debug_str_hash)
7048     debug_str_hash = htab_create_ggc (10, debug_str_do_hash,
7049                                       debug_str_eq, NULL);
7050
7051   slot = htab_find_slot_with_hash (debug_str_hash, str,
7052                                    htab_hash_string (str), INSERT);
7053   if (*slot == NULL)
7054     {
7055       node = (struct indirect_string_node *)
7056                ggc_alloc_cleared (sizeof (struct indirect_string_node));
7057       node->str = ggc_strdup (str);
7058       *slot = node;
7059     }
7060   else
7061     node = (struct indirect_string_node *) *slot;
7062
7063   node->refcount++;
7064   return node;
7065 }
7066
7067 /* Add a string attribute value to a DIE.  */
7068
7069 static inline void
7070 add_AT_string (dw_die_ref die, enum dwarf_attribute attr_kind, const char *str)
7071 {
7072   dw_attr_node attr;
7073   struct indirect_string_node *node;
7074
7075   node = find_AT_string (str);
7076
7077   attr.dw_attr = attr_kind;
7078   attr.dw_attr_val.val_class = dw_val_class_str;
7079   attr.dw_attr_val.v.val_str = node;
7080   add_dwarf_attr (die, &attr);
7081 }
7082
7083 /* Create a label for an indirect string node, ensuring it is going to
7084    be output, unless its reference count goes down to zero.  */
7085
7086 static inline void
7087 gen_label_for_indirect_string (struct indirect_string_node *node)
7088 {
7089   char label[32];
7090
7091   if (node->label)
7092     return;
7093
7094   ASM_GENERATE_INTERNAL_LABEL (label, "LASF", dw2_string_counter);
7095   ++dw2_string_counter;
7096   node->label = xstrdup (label);
7097 }
7098
7099 /* Create a SYMBOL_REF rtx whose value is the initial address of a
7100    debug string STR.  */
7101
7102 static inline rtx
7103 get_debug_string_label (const char *str)
7104 {
7105   struct indirect_string_node *node = find_AT_string (str);
7106
7107   debug_str_hash_forced = true;
7108
7109   gen_label_for_indirect_string (node);
7110
7111   return gen_rtx_SYMBOL_REF (Pmode, node->label);
7112 }
7113
7114 static inline const char *
7115 AT_string (dw_attr_ref a)
7116 {
7117   gcc_assert (a && AT_class (a) == dw_val_class_str);
7118   return a->dw_attr_val.v.val_str->str;
7119 }
7120
7121 /* Find out whether a string should be output inline in DIE
7122    or out-of-line in .debug_str section.  */
7123
7124 static enum dwarf_form
7125 AT_string_form (dw_attr_ref a)
7126 {
7127   struct indirect_string_node *node;
7128   unsigned int len;
7129
7130   gcc_assert (a && AT_class (a) == dw_val_class_str);
7131
7132   node = a->dw_attr_val.v.val_str;
7133   if (node->form)
7134     return node->form;
7135
7136   len = strlen (node->str) + 1;
7137
7138   /* If the string is shorter or equal to the size of the reference, it is
7139      always better to put it inline.  */
7140   if (len <= DWARF_OFFSET_SIZE || node->refcount == 0)
7141     return node->form = DW_FORM_string;
7142
7143   /* If we cannot expect the linker to merge strings in .debug_str
7144      section, only put it into .debug_str if it is worth even in this
7145      single module.  */
7146   if (DWARF2_INDIRECT_STRING_SUPPORT_MISSING_ON_TARGET
7147       || ((debug_str_section->common.flags & SECTION_MERGE) == 0
7148       && (len - DWARF_OFFSET_SIZE) * node->refcount <= len))
7149     return node->form = DW_FORM_string;
7150
7151   gen_label_for_indirect_string (node);
7152
7153   return node->form = DW_FORM_strp;
7154 }
7155
7156 /* Add a DIE reference attribute value to a DIE.  */
7157
7158 static inline void
7159 add_AT_die_ref (dw_die_ref die, enum dwarf_attribute attr_kind, dw_die_ref targ_die)
7160 {
7161   dw_attr_node attr;
7162
7163   attr.dw_attr = attr_kind;
7164   attr.dw_attr_val.val_class = dw_val_class_die_ref;
7165   attr.dw_attr_val.v.val_die_ref.die = targ_die;
7166   attr.dw_attr_val.v.val_die_ref.external = 0;
7167   add_dwarf_attr (die, &attr);
7168 }
7169
7170 /* Add an AT_specification attribute to a DIE, and also make the back
7171    pointer from the specification to the definition.  */
7172
7173 static inline void
7174 add_AT_specification (dw_die_ref die, dw_die_ref targ_die)
7175 {
7176   add_AT_die_ref (die, DW_AT_specification, targ_die);
7177   gcc_assert (!targ_die->die_definition);
7178   targ_die->die_definition = die;
7179 }
7180
7181 static inline dw_die_ref
7182 AT_ref (dw_attr_ref a)
7183 {
7184   gcc_assert (a && AT_class (a) == dw_val_class_die_ref);
7185   return a->dw_attr_val.v.val_die_ref.die;
7186 }
7187
7188 static inline int
7189 AT_ref_external (dw_attr_ref a)
7190 {
7191   if (a && AT_class (a) == dw_val_class_die_ref)
7192     return a->dw_attr_val.v.val_die_ref.external;
7193
7194   return 0;
7195 }
7196
7197 static inline void
7198 set_AT_ref_external (dw_attr_ref a, int i)
7199 {
7200   gcc_assert (a && AT_class (a) == dw_val_class_die_ref);
7201   a->dw_attr_val.v.val_die_ref.external = i;
7202 }
7203
7204 /* Add an FDE reference attribute value to a DIE.  */
7205
7206 static inline void
7207 add_AT_fde_ref (dw_die_ref die, enum dwarf_attribute attr_kind, unsigned int targ_fde)
7208 {
7209   dw_attr_node attr;
7210
7211   attr.dw_attr = attr_kind;
7212   attr.dw_attr_val.val_class = dw_val_class_fde_ref;
7213   attr.dw_attr_val.v.val_fde_index = targ_fde;
7214   add_dwarf_attr (die, &attr);
7215 }
7216
7217 /* Add a location description attribute value to a DIE.  */
7218
7219 static inline void
7220 add_AT_loc (dw_die_ref die, enum dwarf_attribute attr_kind, dw_loc_descr_ref loc)
7221 {
7222   dw_attr_node attr;
7223
7224   attr.dw_attr = attr_kind;
7225   attr.dw_attr_val.val_class = dw_val_class_loc;
7226   attr.dw_attr_val.v.val_loc = loc;
7227   add_dwarf_attr (die, &attr);
7228 }
7229
7230 static inline dw_loc_descr_ref
7231 AT_loc (dw_attr_ref a)
7232 {
7233   gcc_assert (a && AT_class (a) == dw_val_class_loc);
7234   return a->dw_attr_val.v.val_loc;
7235 }
7236
7237 static inline void
7238 add_AT_loc_list (dw_die_ref die, enum dwarf_attribute attr_kind, dw_loc_list_ref loc_list)
7239 {
7240   dw_attr_node attr;
7241
7242   attr.dw_attr = attr_kind;
7243   attr.dw_attr_val.val_class = dw_val_class_loc_list;
7244   attr.dw_attr_val.v.val_loc_list = loc_list;
7245   add_dwarf_attr (die, &attr);
7246   have_location_lists = true;
7247 }
7248
7249 static inline dw_loc_list_ref
7250 AT_loc_list (dw_attr_ref a)
7251 {
7252   gcc_assert (a && AT_class (a) == dw_val_class_loc_list);
7253   return a->dw_attr_val.v.val_loc_list;
7254 }
7255
7256 static inline dw_loc_list_ref *
7257 AT_loc_list_ptr (dw_attr_ref a)
7258 {
7259   gcc_assert (a && AT_class (a) == dw_val_class_loc_list);
7260   return &a->dw_attr_val.v.val_loc_list;
7261 }
7262
7263 /* Add an address constant attribute value to a DIE.  */
7264
7265 static inline void
7266 add_AT_addr (dw_die_ref die, enum dwarf_attribute attr_kind, rtx addr)
7267 {
7268   dw_attr_node attr;
7269
7270   attr.dw_attr = attr_kind;
7271   attr.dw_attr_val.val_class = dw_val_class_addr;
7272   attr.dw_attr_val.v.val_addr = addr;
7273   add_dwarf_attr (die, &attr);
7274 }
7275
7276 /* Get the RTX from to an address DIE attribute.  */
7277
7278 static inline rtx
7279 AT_addr (dw_attr_ref a)
7280 {
7281   gcc_assert (a && AT_class (a) == dw_val_class_addr);
7282   return a->dw_attr_val.v.val_addr;
7283 }
7284
7285 /* Add a file attribute value to a DIE.  */
7286
7287 static inline void
7288 add_AT_file (dw_die_ref die, enum dwarf_attribute attr_kind,
7289              struct dwarf_file_data *fd)
7290 {
7291   dw_attr_node attr;
7292
7293   attr.dw_attr = attr_kind;
7294   attr.dw_attr_val.val_class = dw_val_class_file;
7295   attr.dw_attr_val.v.val_file = fd;
7296   add_dwarf_attr (die, &attr);
7297 }
7298
7299 /* Get the dwarf_file_data from a file DIE attribute.  */
7300
7301 static inline struct dwarf_file_data *
7302 AT_file (dw_attr_ref a)
7303 {
7304   gcc_assert (a && AT_class (a) == dw_val_class_file);
7305   return a->dw_attr_val.v.val_file;
7306 }
7307
7308 /* Add a label identifier attribute value to a DIE.  */
7309
7310 static inline void
7311 add_AT_lbl_id (dw_die_ref die, enum dwarf_attribute attr_kind, const char *lbl_id)
7312 {
7313   dw_attr_node attr;
7314
7315   attr.dw_attr = attr_kind;
7316   attr.dw_attr_val.val_class = dw_val_class_lbl_id;
7317   attr.dw_attr_val.v.val_lbl_id = xstrdup (lbl_id);
7318   add_dwarf_attr (die, &attr);
7319 }
7320
7321 /* Add a section offset attribute value to a DIE, an offset into the
7322    debug_line section.  */
7323
7324 static inline void
7325 add_AT_lineptr (dw_die_ref die, enum dwarf_attribute attr_kind,
7326                 const char *label)
7327 {
7328   dw_attr_node attr;
7329
7330   attr.dw_attr = attr_kind;
7331   attr.dw_attr_val.val_class = dw_val_class_lineptr;
7332   attr.dw_attr_val.v.val_lbl_id = xstrdup (label);
7333   add_dwarf_attr (die, &attr);
7334 }
7335
7336 /* Add a section offset attribute value to a DIE, an offset into the
7337    debug_macinfo section.  */
7338
7339 static inline void
7340 add_AT_macptr (dw_die_ref die, enum dwarf_attribute attr_kind,
7341                const char *label)
7342 {
7343   dw_attr_node attr;
7344
7345   attr.dw_attr = attr_kind;
7346   attr.dw_attr_val.val_class = dw_val_class_macptr;
7347   attr.dw_attr_val.v.val_lbl_id = xstrdup (label);
7348   add_dwarf_attr (die, &attr);
7349 }
7350
7351 /* Add an offset attribute value to a DIE.  */
7352
7353 static inline void
7354 add_AT_offset (dw_die_ref die, enum dwarf_attribute attr_kind,
7355                unsigned HOST_WIDE_INT offset)
7356 {
7357   dw_attr_node attr;
7358
7359   attr.dw_attr = attr_kind;
7360   attr.dw_attr_val.val_class = dw_val_class_offset;
7361   attr.dw_attr_val.v.val_offset = offset;
7362   add_dwarf_attr (die, &attr);
7363 }
7364
7365 /* Add an range_list attribute value to a DIE.  */
7366
7367 static void
7368 add_AT_range_list (dw_die_ref die, enum dwarf_attribute attr_kind,
7369                    long unsigned int offset)
7370 {
7371   dw_attr_node attr;
7372
7373   attr.dw_attr = attr_kind;
7374   attr.dw_attr_val.val_class = dw_val_class_range_list;
7375   attr.dw_attr_val.v.val_offset = offset;
7376   add_dwarf_attr (die, &attr);
7377 }
7378
7379 static inline const char *
7380 AT_lbl (dw_attr_ref a)
7381 {
7382   gcc_assert (a && (AT_class (a) == dw_val_class_lbl_id
7383                     || AT_class (a) == dw_val_class_lineptr
7384                     || AT_class (a) == dw_val_class_macptr));
7385   return a->dw_attr_val.v.val_lbl_id;
7386 }
7387
7388 /* Get the attribute of type attr_kind.  */
7389
7390 static dw_attr_ref
7391 get_AT (dw_die_ref die, enum dwarf_attribute attr_kind)
7392 {
7393   dw_attr_ref a;
7394   unsigned ix;
7395   dw_die_ref spec = NULL;
7396
7397   if (! die)
7398     return NULL;
7399
7400   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
7401     if (a->dw_attr == attr_kind)
7402       return a;
7403     else if (a->dw_attr == DW_AT_specification
7404              || a->dw_attr == DW_AT_abstract_origin)
7405       spec = AT_ref (a);
7406
7407   if (spec)
7408     return get_AT (spec, attr_kind);
7409
7410   return NULL;
7411 }
7412
7413 /* Return the "low pc" attribute value, typically associated with a subprogram
7414    DIE.  Return null if the "low pc" attribute is either not present, or if it
7415    cannot be represented as an assembler label identifier.  */
7416
7417 static inline const char *
7418 get_AT_low_pc (dw_die_ref die)
7419 {
7420   dw_attr_ref a = get_AT (die, DW_AT_low_pc);
7421
7422   return a ? AT_lbl (a) : NULL;
7423 }
7424
7425 /* Return the "high pc" attribute value, typically associated with a subprogram
7426    DIE.  Return null if the "high pc" attribute is either not present, or if it
7427    cannot be represented as an assembler label identifier.  */
7428
7429 static inline const char *
7430 get_AT_hi_pc (dw_die_ref die)
7431 {
7432   dw_attr_ref a = get_AT (die, DW_AT_high_pc);
7433
7434   return a ? AT_lbl (a) : NULL;
7435 }
7436
7437 /* Return the value of the string attribute designated by ATTR_KIND, or
7438    NULL if it is not present.  */
7439
7440 static inline const char *
7441 get_AT_string (dw_die_ref die, enum dwarf_attribute attr_kind)
7442 {
7443   dw_attr_ref a = get_AT (die, attr_kind);
7444
7445   return a ? AT_string (a) : NULL;
7446 }
7447
7448 /* Return the value of the flag attribute designated by ATTR_KIND, or -1
7449    if it is not present.  */
7450
7451 static inline int
7452 get_AT_flag (dw_die_ref die, enum dwarf_attribute attr_kind)
7453 {
7454   dw_attr_ref a = get_AT (die, attr_kind);
7455
7456   return a ? AT_flag (a) : 0;
7457 }
7458
7459 /* Return the value of the unsigned attribute designated by ATTR_KIND, or 0
7460    if it is not present.  */
7461
7462 static inline unsigned
7463 get_AT_unsigned (dw_die_ref die, enum dwarf_attribute attr_kind)
7464 {
7465   dw_attr_ref a = get_AT (die, attr_kind);
7466
7467   return a ? AT_unsigned (a) : 0;
7468 }
7469
7470 static inline dw_die_ref
7471 get_AT_ref (dw_die_ref die, enum dwarf_attribute attr_kind)
7472 {
7473   dw_attr_ref a = get_AT (die, attr_kind);
7474
7475   return a ? AT_ref (a) : NULL;
7476 }
7477
7478 static inline struct dwarf_file_data *
7479 get_AT_file (dw_die_ref die, enum dwarf_attribute attr_kind)
7480 {
7481   dw_attr_ref a = get_AT (die, attr_kind);
7482
7483   return a ? AT_file (a) : NULL;
7484 }
7485
7486 /* Return TRUE if the language is C++.  */
7487
7488 static inline bool
7489 is_cxx (void)
7490 {
7491   unsigned int lang = get_AT_unsigned (comp_unit_die, DW_AT_language);
7492
7493   return lang == DW_LANG_C_plus_plus || lang == DW_LANG_ObjC_plus_plus;
7494 }
7495
7496 /* Return TRUE if the language is Fortran.  */
7497
7498 static inline bool
7499 is_fortran (void)
7500 {
7501   unsigned int lang = get_AT_unsigned (comp_unit_die, DW_AT_language);
7502
7503   return (lang == DW_LANG_Fortran77
7504           || lang == DW_LANG_Fortran90
7505           || lang == DW_LANG_Fortran95);
7506 }
7507
7508 /* Return TRUE if the language is Ada.  */
7509
7510 static inline bool
7511 is_ada (void)
7512 {
7513   unsigned int lang = get_AT_unsigned (comp_unit_die, DW_AT_language);
7514
7515   return lang == DW_LANG_Ada95 || lang == DW_LANG_Ada83;
7516 }
7517
7518 /* Remove the specified attribute if present.  */
7519
7520 static void
7521 remove_AT (dw_die_ref die, enum dwarf_attribute attr_kind)
7522 {
7523   dw_attr_ref a;
7524   unsigned ix;
7525
7526   if (! die)
7527     return;
7528
7529   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
7530     if (a->dw_attr == attr_kind)
7531       {
7532         if (AT_class (a) == dw_val_class_str)
7533           if (a->dw_attr_val.v.val_str->refcount)
7534             a->dw_attr_val.v.val_str->refcount--;
7535
7536         /* VEC_ordered_remove should help reduce the number of abbrevs
7537            that are needed.  */
7538         VEC_ordered_remove (dw_attr_node, die->die_attr, ix);
7539         return;
7540       }
7541 }
7542
7543 /* Remove CHILD from its parent.  PREV must have the property that
7544    PREV->DIE_SIB == CHILD.  Does not alter CHILD.  */
7545
7546 static void
7547 remove_child_with_prev (dw_die_ref child, dw_die_ref prev)
7548 {
7549   gcc_assert (child->die_parent == prev->die_parent);
7550   gcc_assert (prev->die_sib == child);
7551   if (prev == child)
7552     {
7553       gcc_assert (child->die_parent->die_child == child);
7554       prev = NULL;
7555     }
7556   else
7557     prev->die_sib = child->die_sib;
7558   if (child->die_parent->die_child == child)
7559     child->die_parent->die_child = prev;
7560 }
7561
7562 /* Replace OLD_CHILD with NEW_CHILD.  PREV must have the property that
7563    PREV->DIE_SIB == OLD_CHILD.  Does not alter OLD_CHILD.  */
7564
7565 static void
7566 replace_child (dw_die_ref old_child, dw_die_ref new_child, dw_die_ref prev)
7567 {
7568   dw_die_ref parent = old_child->die_parent;
7569
7570   gcc_assert (parent == prev->die_parent);
7571   gcc_assert (prev->die_sib == old_child);
7572
7573   new_child->die_parent = parent;
7574   if (prev == old_child)
7575     {
7576       gcc_assert (parent->die_child == old_child);
7577       new_child->die_sib = new_child;
7578     }
7579   else
7580     {
7581       prev->die_sib = new_child;
7582       new_child->die_sib = old_child->die_sib;
7583     }
7584   if (old_child->die_parent->die_child == old_child)
7585     old_child->die_parent->die_child = new_child;
7586 }
7587
7588 /* Move all children from OLD_PARENT to NEW_PARENT.  */
7589
7590 static void
7591 move_all_children (dw_die_ref old_parent, dw_die_ref new_parent)
7592 {
7593   dw_die_ref c;
7594   new_parent->die_child = old_parent->die_child;
7595   old_parent->die_child = NULL;
7596   FOR_EACH_CHILD (new_parent, c, c->die_parent = new_parent);
7597 }
7598
7599 /* Remove child DIE whose die_tag is TAG.  Do nothing if no child
7600    matches TAG.  */
7601
7602 static void
7603 remove_child_TAG (dw_die_ref die, enum dwarf_tag tag)
7604 {
7605   dw_die_ref c;
7606
7607   c = die->die_child;
7608   if (c) do {
7609     dw_die_ref prev = c;
7610     c = c->die_sib;
7611     while (c->die_tag == tag)
7612       {
7613         remove_child_with_prev (c, prev);
7614         /* Might have removed every child.  */
7615         if (c == c->die_sib)
7616           return;
7617         c = c->die_sib;
7618       }
7619   } while (c != die->die_child);
7620 }
7621
7622 /* Add a CHILD_DIE as the last child of DIE.  */
7623
7624 static void
7625 add_child_die (dw_die_ref die, dw_die_ref child_die)
7626 {
7627   /* FIXME this should probably be an assert.  */
7628   if (! die || ! child_die)
7629     return;
7630   gcc_assert (die != child_die);
7631
7632   child_die->die_parent = die;
7633   if (die->die_child)
7634     {
7635       child_die->die_sib = die->die_child->die_sib;
7636       die->die_child->die_sib = child_die;
7637     }
7638   else
7639     child_die->die_sib = child_die;
7640   die->die_child = child_die;
7641 }
7642
7643 /* Move CHILD, which must be a child of PARENT or the DIE for which PARENT
7644    is the specification, to the end of PARENT's list of children.
7645    This is done by removing and re-adding it.  */
7646
7647 static void
7648 splice_child_die (dw_die_ref parent, dw_die_ref child)
7649 {
7650   dw_die_ref p;
7651
7652   /* We want the declaration DIE from inside the class, not the
7653      specification DIE at toplevel.  */
7654   if (child->die_parent != parent)
7655     {
7656       dw_die_ref tmp = get_AT_ref (child, DW_AT_specification);
7657
7658       if (tmp)
7659         child = tmp;
7660     }
7661
7662   gcc_assert (child->die_parent == parent
7663               || (child->die_parent
7664                   == get_AT_ref (parent, DW_AT_specification)));
7665
7666   for (p = child->die_parent->die_child; ; p = p->die_sib)
7667     if (p->die_sib == child)
7668       {
7669         remove_child_with_prev (child, p);
7670         break;
7671       }
7672
7673   add_child_die (parent, child);
7674 }
7675
7676 /* Return a pointer to a newly created DIE node.  */
7677
7678 static inline dw_die_ref
7679 new_die (enum dwarf_tag tag_value, dw_die_ref parent_die, tree t)
7680 {
7681   dw_die_ref die = GGC_CNEW (die_node);
7682
7683   die->die_tag = tag_value;
7684
7685   if (parent_die != NULL)
7686     add_child_die (parent_die, die);
7687   else
7688     {
7689       limbo_die_node *limbo_node;
7690
7691       limbo_node = GGC_CNEW (limbo_die_node);
7692       limbo_node->die = die;
7693       limbo_node->created_for = t;
7694       limbo_node->next = limbo_die_list;
7695       limbo_die_list = limbo_node;
7696     }
7697
7698   return die;
7699 }
7700
7701 /* Return the DIE associated with the given type specifier.  */
7702
7703 static inline dw_die_ref
7704 lookup_type_die (tree type)
7705 {
7706   return TYPE_SYMTAB_DIE (type);
7707 }
7708
7709 /* Equate a DIE to a given type specifier.  */
7710
7711 static inline void
7712 equate_type_number_to_die (tree type, dw_die_ref type_die)
7713 {
7714   TYPE_SYMTAB_DIE (type) = type_die;
7715 }
7716
7717 /* Returns a hash value for X (which really is a die_struct).  */
7718
7719 static hashval_t
7720 decl_die_table_hash (const void *x)
7721 {
7722   return (hashval_t) ((const_dw_die_ref) x)->decl_id;
7723 }
7724
7725 /* Return nonzero if decl_id of die_struct X is the same as UID of decl *Y.  */
7726
7727 static int
7728 decl_die_table_eq (const void *x, const void *y)
7729 {
7730   return (((const_dw_die_ref) x)->decl_id == DECL_UID ((const_tree) y));
7731 }
7732
7733 /* Return the DIE associated with a given declaration.  */
7734
7735 static inline dw_die_ref
7736 lookup_decl_die (tree decl)
7737 {
7738   return (dw_die_ref) htab_find_with_hash (decl_die_table, decl, DECL_UID (decl));
7739 }
7740
7741 /* Returns a hash value for X (which really is a var_loc_list).  */
7742
7743 static hashval_t
7744 decl_loc_table_hash (const void *x)
7745 {
7746   return (hashval_t) ((const var_loc_list *) x)->decl_id;
7747 }
7748
7749 /* Return nonzero if decl_id of var_loc_list X is the same as
7750    UID of decl *Y.  */
7751
7752 static int
7753 decl_loc_table_eq (const void *x, const void *y)
7754 {
7755   return (((const var_loc_list *) x)->decl_id == DECL_UID ((const_tree) y));
7756 }
7757
7758 /* Return the var_loc list associated with a given declaration.  */
7759
7760 static inline var_loc_list *
7761 lookup_decl_loc (const_tree decl)
7762 {
7763   if (!decl_loc_table)
7764     return NULL;
7765   return (var_loc_list *)
7766     htab_find_with_hash (decl_loc_table, decl, DECL_UID (decl));
7767 }
7768
7769 /* Equate a DIE to a particular declaration.  */
7770
7771 static void
7772 equate_decl_number_to_die (tree decl, dw_die_ref decl_die)
7773 {
7774   unsigned int decl_id = DECL_UID (decl);
7775   void **slot;
7776
7777   slot = htab_find_slot_with_hash (decl_die_table, decl, decl_id, INSERT);
7778   *slot = decl_die;
7779   decl_die->decl_id = decl_id;
7780 }
7781
7782 /* Return how many bits covers PIECE EXPR_LIST.  */
7783
7784 static int
7785 decl_piece_bitsize (rtx piece)
7786 {
7787   int ret = (int) GET_MODE (piece);
7788   if (ret)
7789     return ret;
7790   gcc_assert (GET_CODE (XEXP (piece, 0)) == CONCAT
7791               && CONST_INT_P (XEXP (XEXP (piece, 0), 0)));
7792   return INTVAL (XEXP (XEXP (piece, 0), 0));
7793 }
7794
7795 /* Return pointer to the location of location note in PIECE EXPR_LIST.  */
7796
7797 static rtx *
7798 decl_piece_varloc_ptr (rtx piece)
7799 {
7800   if ((int) GET_MODE (piece))
7801     return &XEXP (piece, 0);
7802   else
7803     return &XEXP (XEXP (piece, 0), 1);
7804 }
7805
7806 /* Create an EXPR_LIST for location note LOC_NOTE covering BITSIZE bits.
7807    Next is the chain of following piece nodes.  */
7808
7809 static rtx
7810 decl_piece_node (rtx loc_note, HOST_WIDE_INT bitsize, rtx next)
7811 {
7812   if (bitsize <= (int) MAX_MACHINE_MODE)
7813     return alloc_EXPR_LIST (bitsize, loc_note, next);
7814   else
7815     return alloc_EXPR_LIST (0, gen_rtx_CONCAT (VOIDmode,
7816                                                GEN_INT (bitsize),
7817                                                loc_note), next);
7818 }
7819
7820 /* Return rtx that should be stored into loc field for
7821    LOC_NOTE and BITPOS/BITSIZE.  */
7822
7823 static rtx
7824 construct_piece_list (rtx loc_note, HOST_WIDE_INT bitpos,
7825                       HOST_WIDE_INT bitsize)
7826 {
7827   if (bitsize != -1)
7828     {
7829       loc_note = decl_piece_node (loc_note, bitsize, NULL_RTX);
7830       if (bitpos != 0)
7831         loc_note = decl_piece_node (NULL_RTX, bitpos, loc_note);
7832     }
7833   return loc_note;
7834 }
7835
7836 /* This function either modifies location piece list *DEST in
7837    place (if SRC and INNER is NULL), or copies location piece list
7838    *SRC to *DEST while modifying it.  Location BITPOS is modified
7839    to contain LOC_NOTE, any pieces overlapping it are removed resp.
7840    not copied and if needed some padding around it is added.
7841    When modifying in place, DEST should point to EXPR_LIST where
7842    earlier pieces cover PIECE_BITPOS bits, when copying SRC points
7843    to the start of the whole list and INNER points to the EXPR_LIST
7844    where earlier pieces cover PIECE_BITPOS bits.  */
7845
7846 static void
7847 adjust_piece_list (rtx *dest, rtx *src, rtx *inner,
7848                    HOST_WIDE_INT bitpos, HOST_WIDE_INT piece_bitpos,
7849                    HOST_WIDE_INT bitsize, rtx loc_note)
7850 {
7851   int diff;
7852   bool copy = inner != NULL;
7853
7854   if (copy)
7855     {
7856       /* First copy all nodes preceeding the current bitpos.  */
7857       while (src != inner)
7858         {
7859           *dest = decl_piece_node (*decl_piece_varloc_ptr (*src),
7860                                    decl_piece_bitsize (*src), NULL_RTX);
7861           dest = &XEXP (*dest, 1);
7862           src = &XEXP (*src, 1);
7863         }
7864     }
7865   /* Add padding if needed.  */
7866   if (bitpos != piece_bitpos)
7867     {
7868       *dest = decl_piece_node (NULL_RTX, bitpos - piece_bitpos,
7869                                copy ? NULL_RTX : *dest);
7870       dest = &XEXP (*dest, 1);
7871     }
7872   else if (*dest && decl_piece_bitsize (*dest) == bitsize)
7873     {
7874       gcc_assert (!copy);
7875       /* A piece with correct bitpos and bitsize already exist,
7876          just update the location for it and return.  */
7877       *decl_piece_varloc_ptr (*dest) = loc_note;
7878       return;
7879     }
7880   /* Add the piece that changed.  */
7881   *dest = decl_piece_node (loc_note, bitsize, copy ? NULL_RTX : *dest);
7882   dest = &XEXP (*dest, 1);
7883   /* Skip over pieces that overlap it.  */
7884   diff = bitpos - piece_bitpos + bitsize;
7885   if (!copy)
7886     src = dest;
7887   while (diff > 0 && *src)
7888     {
7889       rtx piece = *src;
7890       diff -= decl_piece_bitsize (piece);
7891       if (copy)
7892         src = &XEXP (piece, 1);
7893       else
7894         {
7895           *src = XEXP (piece, 1);
7896           free_EXPR_LIST_node (piece);
7897         }
7898     }
7899   /* Add padding if needed.  */
7900   if (diff < 0 && *src)
7901     {
7902       if (!copy)
7903         dest = src;
7904       *dest = decl_piece_node (NULL_RTX, -diff, copy ? NULL_RTX : *dest);
7905       dest = &XEXP (*dest, 1);
7906     }
7907   if (!copy)
7908     return;
7909   /* Finally copy all nodes following it.  */
7910   while (*src)
7911     {
7912       *dest = decl_piece_node (*decl_piece_varloc_ptr (*src),
7913                                decl_piece_bitsize (*src), NULL_RTX);
7914       dest = &XEXP (*dest, 1);
7915       src = &XEXP (*src, 1);
7916     }
7917 }
7918
7919 /* Add a variable location node to the linked list for DECL.  */
7920
7921 static struct var_loc_node *
7922 add_var_loc_to_decl (tree decl, rtx loc_note, const char *label)
7923 {
7924   unsigned int decl_id;
7925   var_loc_list *temp;
7926   void **slot;
7927   struct var_loc_node *loc = NULL;
7928   HOST_WIDE_INT bitsize = -1, bitpos = -1;
7929
7930   if (DECL_DEBUG_EXPR_IS_FROM (decl))
7931     {
7932       tree realdecl = DECL_DEBUG_EXPR (decl);
7933       if (realdecl && handled_component_p (realdecl))
7934         {
7935           HOST_WIDE_INT maxsize;
7936           tree innerdecl;
7937           innerdecl
7938             = get_ref_base_and_extent (realdecl, &bitpos, &bitsize, &maxsize);
7939           if (!DECL_P (innerdecl)
7940               || DECL_IGNORED_P (innerdecl)
7941               || TREE_STATIC (innerdecl)
7942               || bitsize <= 0
7943               || bitpos + bitsize > 256
7944               || bitsize != maxsize)
7945             return NULL;
7946           decl = innerdecl;
7947         }
7948     }
7949
7950   decl_id = DECL_UID (decl);
7951   slot = htab_find_slot_with_hash (decl_loc_table, decl, decl_id, INSERT);
7952   if (*slot == NULL)
7953     {
7954       temp = GGC_CNEW (var_loc_list);
7955       temp->decl_id = decl_id;
7956       *slot = temp;
7957     }
7958   else
7959     temp = (var_loc_list *) *slot;
7960
7961   if (temp->last)
7962     {
7963       struct var_loc_node *last = temp->last, *unused = NULL;
7964       rtx *piece_loc = NULL, last_loc_note;
7965       int piece_bitpos = 0;
7966       if (last->next)
7967         {
7968           last = last->next;
7969           gcc_assert (last->next == NULL);
7970         }
7971       if (bitsize != -1 && GET_CODE (last->loc) == EXPR_LIST)
7972         {
7973           piece_loc = &last->loc;
7974           do
7975             {
7976               int cur_bitsize = decl_piece_bitsize (*piece_loc);
7977               if (piece_bitpos + cur_bitsize > bitpos)
7978                 break;
7979               piece_bitpos += cur_bitsize;
7980               piece_loc = &XEXP (*piece_loc, 1);
7981             }
7982           while (*piece_loc);
7983         }
7984       /* TEMP->LAST here is either pointer to the last but one or
7985          last element in the chained list, LAST is pointer to the
7986          last element.  */
7987       if (label && strcmp (last->label, label) == 0)
7988         {
7989           /* For SRA optimized variables if there weren't any real
7990              insns since last note, just modify the last node.  */
7991           if (piece_loc != NULL)
7992             {
7993               adjust_piece_list (piece_loc, NULL, NULL,
7994                                  bitpos, piece_bitpos, bitsize, loc_note);
7995               return NULL;
7996             }
7997           /* If the last note doesn't cover any instructions, remove it.  */
7998           if (temp->last != last)
7999             {
8000               temp->last->next = NULL;
8001               unused = last;
8002               last = temp->last;
8003               gcc_assert (strcmp (last->label, label) != 0);
8004             }
8005           else
8006             {
8007               gcc_assert (temp->first == temp->last);
8008               memset (temp->last, '\0', sizeof (*temp->last));
8009               temp->last->loc = construct_piece_list (loc_note, bitpos, bitsize);
8010               return temp->last;
8011             }
8012         }
8013       if (bitsize == -1 && NOTE_P (last->loc))
8014         last_loc_note = last->loc;
8015       else if (piece_loc != NULL
8016                && *piece_loc != NULL_RTX
8017                && piece_bitpos == bitpos
8018                && decl_piece_bitsize (*piece_loc) == bitsize)
8019         last_loc_note = *decl_piece_varloc_ptr (*piece_loc);
8020       else
8021         last_loc_note = NULL_RTX;
8022       /* If the current location is the same as the end of the list,
8023          and either both or neither of the locations is uninitialized,
8024          we have nothing to do.  */
8025       if (last_loc_note == NULL_RTX
8026           || (!rtx_equal_p (NOTE_VAR_LOCATION_LOC (last_loc_note),
8027                             NOTE_VAR_LOCATION_LOC (loc_note)))
8028           || ((NOTE_VAR_LOCATION_STATUS (last_loc_note)
8029                != NOTE_VAR_LOCATION_STATUS (loc_note))
8030               && ((NOTE_VAR_LOCATION_STATUS (last_loc_note)
8031                    == VAR_INIT_STATUS_UNINITIALIZED)
8032                   || (NOTE_VAR_LOCATION_STATUS (loc_note)
8033                       == VAR_INIT_STATUS_UNINITIALIZED))))
8034         {
8035           /* Add LOC to the end of list and update LAST.  If the last
8036              element of the list has been removed above, reuse its
8037              memory for the new node, otherwise allocate a new one.  */
8038           if (unused)
8039             {
8040               loc = unused;
8041               memset (loc, '\0', sizeof (*loc));
8042             }
8043           else
8044             loc = GGC_CNEW (struct var_loc_node);
8045           if (bitsize == -1 || piece_loc == NULL)
8046             loc->loc = construct_piece_list (loc_note, bitpos, bitsize);
8047           else
8048             adjust_piece_list (&loc->loc, &last->loc, piece_loc,
8049                                bitpos, piece_bitpos, bitsize, loc_note);
8050           last->next = loc;
8051           /* Ensure TEMP->LAST will point either to the new last but one
8052              element of the chain, or to the last element in it.  */
8053           if (last != temp->last)
8054             temp->last = last;
8055         }
8056       else if (unused)
8057         ggc_free (unused);
8058     }
8059   else
8060     {
8061       loc = GGC_CNEW (struct var_loc_node);
8062       temp->first = loc;
8063       temp->last = loc;
8064       loc->loc = construct_piece_list (loc_note, bitpos, bitsize);
8065     }
8066   return loc;
8067 }
8068 \f
8069 /* Keep track of the number of spaces used to indent the
8070    output of the debugging routines that print the structure of
8071    the DIE internal representation.  */
8072 static int print_indent;
8073
8074 /* Indent the line the number of spaces given by print_indent.  */
8075
8076 static inline void
8077 print_spaces (FILE *outfile)
8078 {
8079   fprintf (outfile, "%*s", print_indent, "");
8080 }
8081
8082 /* Print a type signature in hex.  */
8083
8084 static inline void
8085 print_signature (FILE *outfile, char *sig)
8086 {
8087   int i;
8088
8089   for (i = 0; i < DWARF_TYPE_SIGNATURE_SIZE; i++)
8090     fprintf (outfile, "%02x", sig[i] & 0xff);
8091 }
8092
8093 /* Print the information associated with a given DIE, and its children.
8094    This routine is a debugging aid only.  */
8095
8096 static void
8097 print_die (dw_die_ref die, FILE *outfile)
8098 {
8099   dw_attr_ref a;
8100   dw_die_ref c;
8101   unsigned ix;
8102
8103   print_spaces (outfile);
8104   fprintf (outfile, "DIE %4ld: %s\n",
8105            die->die_offset, dwarf_tag_name (die->die_tag));
8106   print_spaces (outfile);
8107   fprintf (outfile, "  abbrev id: %lu", die->die_abbrev);
8108   fprintf (outfile, " offset: %ld\n", die->die_offset);
8109   if (dwarf_version >= 4 && die->die_id.die_type_node)
8110     {
8111       print_spaces (outfile);
8112       fprintf (outfile, "  signature: ");
8113       print_signature (outfile, die->die_id.die_type_node->signature);
8114       fprintf (outfile, "\n");
8115     }
8116
8117   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
8118     {
8119       print_spaces (outfile);
8120       fprintf (outfile, "  %s: ", dwarf_attr_name (a->dw_attr));
8121
8122       switch (AT_class (a))
8123         {
8124         case dw_val_class_addr:
8125           fprintf (outfile, "address");
8126           break;
8127         case dw_val_class_offset:
8128           fprintf (outfile, "offset");
8129           break;
8130         case dw_val_class_loc:
8131           fprintf (outfile, "location descriptor");
8132           break;
8133         case dw_val_class_loc_list:
8134           fprintf (outfile, "location list -> label:%s",
8135                    AT_loc_list (a)->ll_symbol);
8136           break;
8137         case dw_val_class_range_list:
8138           fprintf (outfile, "range list");
8139           break;
8140         case dw_val_class_const:
8141           fprintf (outfile, HOST_WIDE_INT_PRINT_DEC, AT_int (a));
8142           break;
8143         case dw_val_class_unsigned_const:
8144           fprintf (outfile, HOST_WIDE_INT_PRINT_UNSIGNED, AT_unsigned (a));
8145           break;
8146         case dw_val_class_const_double:
8147           fprintf (outfile, "constant ("HOST_WIDE_INT_PRINT_DEC","\
8148                             HOST_WIDE_INT_PRINT_UNSIGNED")",
8149                    a->dw_attr_val.v.val_double.high,
8150                    a->dw_attr_val.v.val_double.low);
8151           break;
8152         case dw_val_class_vec:
8153           fprintf (outfile, "floating-point or vector constant");
8154           break;
8155         case dw_val_class_flag:
8156           fprintf (outfile, "%u", AT_flag (a));
8157           break;
8158         case dw_val_class_die_ref:
8159           if (AT_ref (a) != NULL)
8160             {
8161               if (dwarf_version >= 4 && AT_ref (a)->die_id.die_type_node)
8162                 {
8163                   fprintf (outfile, "die -> signature: ");
8164                   print_signature (outfile,
8165                                    AT_ref (a)->die_id.die_type_node->signature);
8166                 }
8167               else if (dwarf_version < 4 && AT_ref (a)->die_id.die_symbol)
8168                 fprintf (outfile, "die -> label: %s",
8169                          AT_ref (a)->die_id.die_symbol);
8170               else
8171                 fprintf (outfile, "die -> %ld", AT_ref (a)->die_offset);
8172             }
8173           else
8174             fprintf (outfile, "die -> <null>");
8175           break;
8176         case dw_val_class_lbl_id:
8177         case dw_val_class_lineptr:
8178         case dw_val_class_macptr:
8179           fprintf (outfile, "label: %s", AT_lbl (a));
8180           break;
8181         case dw_val_class_str:
8182           if (AT_string (a) != NULL)
8183             fprintf (outfile, "\"%s\"", AT_string (a));
8184           else
8185             fprintf (outfile, "<null>");
8186           break;
8187         case dw_val_class_file:
8188           fprintf (outfile, "\"%s\" (%d)", AT_file (a)->filename,
8189                    AT_file (a)->emitted_number);
8190           break;
8191         case dw_val_class_data8:
8192           {
8193             int i;
8194
8195             for (i = 0; i < 8; i++)
8196               fprintf (outfile, "%02x", a->dw_attr_val.v.val_data8[i]);
8197             break;
8198           }
8199         default:
8200           break;
8201         }
8202
8203       fprintf (outfile, "\n");
8204     }
8205
8206   if (die->die_child != NULL)
8207     {
8208       print_indent += 4;
8209       FOR_EACH_CHILD (die, c, print_die (c, outfile));
8210       print_indent -= 4;
8211     }
8212   if (print_indent == 0)
8213     fprintf (outfile, "\n");
8214 }
8215
8216 /* Print the contents of the source code line number correspondence table.
8217    This routine is a debugging aid only.  */
8218
8219 static void
8220 print_dwarf_line_table (FILE *outfile)
8221 {
8222   unsigned i;
8223   dw_line_info_ref line_info;
8224
8225   fprintf (outfile, "\n\nDWARF source line information\n");
8226   for (i = 1; i < line_info_table_in_use; i++)
8227     {
8228       line_info = &line_info_table[i];
8229       fprintf (outfile, "%5d: %4ld %6ld\n", i,
8230                line_info->dw_file_num,
8231                line_info->dw_line_num);
8232     }
8233
8234   fprintf (outfile, "\n\n");
8235 }
8236
8237 /* Print the information collected for a given DIE.  */
8238
8239 void
8240 debug_dwarf_die (dw_die_ref die)
8241 {
8242   print_die (die, stderr);
8243 }
8244
8245 /* Print all DWARF information collected for the compilation unit.
8246    This routine is a debugging aid only.  */
8247
8248 void
8249 debug_dwarf (void)
8250 {
8251   print_indent = 0;
8252   print_die (comp_unit_die, stderr);
8253   if (! DWARF2_ASM_LINE_DEBUG_INFO)
8254     print_dwarf_line_table (stderr);
8255 }
8256 \f
8257 /* Start a new compilation unit DIE for an include file.  OLD_UNIT is the CU
8258    for the enclosing include file, if any.  BINCL_DIE is the DW_TAG_GNU_BINCL
8259    DIE that marks the start of the DIEs for this include file.  */
8260
8261 static dw_die_ref
8262 push_new_compile_unit (dw_die_ref old_unit, dw_die_ref bincl_die)
8263 {
8264   const char *filename = get_AT_string (bincl_die, DW_AT_name);
8265   dw_die_ref new_unit = gen_compile_unit_die (filename);
8266
8267   new_unit->die_sib = old_unit;
8268   return new_unit;
8269 }
8270
8271 /* Close an include-file CU and reopen the enclosing one.  */
8272
8273 static dw_die_ref
8274 pop_compile_unit (dw_die_ref old_unit)
8275 {
8276   dw_die_ref new_unit = old_unit->die_sib;
8277
8278   old_unit->die_sib = NULL;
8279   return new_unit;
8280 }
8281
8282 #define CHECKSUM(FOO) md5_process_bytes (&(FOO), sizeof (FOO), ctx)
8283 #define CHECKSUM_STRING(FOO) md5_process_bytes ((FOO), strlen (FOO), ctx)
8284
8285 /* Calculate the checksum of a location expression.  */
8286
8287 static inline void
8288 loc_checksum (dw_loc_descr_ref loc, struct md5_ctx *ctx)
8289 {
8290   int tem;
8291
8292   tem = (loc->dtprel << 8) | ((unsigned int) loc->dw_loc_opc);
8293   CHECKSUM (tem);
8294   CHECKSUM (loc->dw_loc_oprnd1);
8295   CHECKSUM (loc->dw_loc_oprnd2);
8296 }
8297
8298 /* Calculate the checksum of an attribute.  */
8299
8300 static void
8301 attr_checksum (dw_attr_ref at, struct md5_ctx *ctx, int *mark)
8302 {
8303   dw_loc_descr_ref loc;
8304   rtx r;
8305
8306   CHECKSUM (at->dw_attr);
8307
8308   /* We don't care that this was compiled with a different compiler
8309      snapshot; if the output is the same, that's what matters.  */
8310   if (at->dw_attr == DW_AT_producer)
8311     return;
8312
8313   switch (AT_class (at))
8314     {
8315     case dw_val_class_const:
8316       CHECKSUM (at->dw_attr_val.v.val_int);
8317       break;
8318     case dw_val_class_unsigned_const:
8319       CHECKSUM (at->dw_attr_val.v.val_unsigned);
8320       break;
8321     case dw_val_class_const_double:
8322       CHECKSUM (at->dw_attr_val.v.val_double);
8323       break;
8324     case dw_val_class_vec:
8325       CHECKSUM (at->dw_attr_val.v.val_vec);
8326       break;
8327     case dw_val_class_flag:
8328       CHECKSUM (at->dw_attr_val.v.val_flag);
8329       break;
8330     case dw_val_class_str:
8331       CHECKSUM_STRING (AT_string (at));
8332       break;
8333
8334     case dw_val_class_addr:
8335       r = AT_addr (at);
8336       gcc_assert (GET_CODE (r) == SYMBOL_REF);
8337       CHECKSUM_STRING (XSTR (r, 0));
8338       break;
8339
8340     case dw_val_class_offset:
8341       CHECKSUM (at->dw_attr_val.v.val_offset);
8342       break;
8343
8344     case dw_val_class_loc:
8345       for (loc = AT_loc (at); loc; loc = loc->dw_loc_next)
8346         loc_checksum (loc, ctx);
8347       break;
8348
8349     case dw_val_class_die_ref:
8350       die_checksum (AT_ref (at), ctx, mark);
8351       break;
8352
8353     case dw_val_class_fde_ref:
8354     case dw_val_class_lbl_id:
8355     case dw_val_class_lineptr:
8356     case dw_val_class_macptr:
8357       break;
8358
8359     case dw_val_class_file:
8360       CHECKSUM_STRING (AT_file (at)->filename);
8361       break;
8362
8363     case dw_val_class_data8:
8364       CHECKSUM (at->dw_attr_val.v.val_data8);
8365       break;
8366
8367     default:
8368       break;
8369     }
8370 }
8371
8372 /* Calculate the checksum of a DIE.  */
8373
8374 static void
8375 die_checksum (dw_die_ref die, struct md5_ctx *ctx, int *mark)
8376 {
8377   dw_die_ref c;
8378   dw_attr_ref a;
8379   unsigned ix;
8380
8381   /* To avoid infinite recursion.  */
8382   if (die->die_mark)
8383     {
8384       CHECKSUM (die->die_mark);
8385       return;
8386     }
8387   die->die_mark = ++(*mark);
8388
8389   CHECKSUM (die->die_tag);
8390
8391   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
8392     attr_checksum (a, ctx, mark);
8393
8394   FOR_EACH_CHILD (die, c, die_checksum (c, ctx, mark));
8395 }
8396
8397 #undef CHECKSUM
8398 #undef CHECKSUM_STRING
8399
8400 /* For DWARF-4 types, include the trailing NULL when checksumming strings.  */
8401 #define CHECKSUM(FOO) md5_process_bytes (&(FOO), sizeof (FOO), ctx)
8402 #define CHECKSUM_STRING(FOO) md5_process_bytes ((FOO), strlen (FOO) + 1, ctx)
8403 #define CHECKSUM_SLEB128(FOO) checksum_sleb128 ((FOO), ctx)
8404 #define CHECKSUM_ULEB128(FOO) checksum_uleb128 ((FOO), ctx)
8405 #define CHECKSUM_ATTR(FOO) \
8406   if (FOO) attr_checksum_ordered (die->die_tag, (FOO), ctx, mark)
8407
8408 /* Calculate the checksum of a number in signed LEB128 format.  */
8409
8410 static void
8411 checksum_sleb128 (HOST_WIDE_INT value, struct md5_ctx *ctx)
8412 {
8413   unsigned char byte;
8414   bool more;
8415
8416   while (1)
8417     {
8418       byte = (value & 0x7f);
8419       value >>= 7;
8420       more = !((value == 0 && (byte & 0x40) == 0)
8421                 || (value == -1 && (byte & 0x40) != 0));
8422       if (more)
8423         byte |= 0x80;
8424       CHECKSUM (byte);
8425       if (!more)
8426         break;
8427     }
8428 }
8429
8430 /* Calculate the checksum of a number in unsigned LEB128 format.  */
8431
8432 static void
8433 checksum_uleb128 (unsigned HOST_WIDE_INT value, struct md5_ctx *ctx)
8434 {
8435   while (1)
8436     {
8437       unsigned char byte = (value & 0x7f);
8438       value >>= 7;
8439       if (value != 0)
8440         /* More bytes to follow.  */
8441         byte |= 0x80;
8442       CHECKSUM (byte);
8443       if (value == 0)
8444         break;
8445     }
8446 }
8447
8448 /* Checksum the context of the DIE.  This adds the names of any
8449    surrounding namespaces or structures to the checksum.  */
8450
8451 static void
8452 checksum_die_context (dw_die_ref die, struct md5_ctx *ctx)
8453 {
8454   const char *name;
8455   dw_die_ref spec;
8456   int tag = die->die_tag;
8457
8458   if (tag != DW_TAG_namespace
8459       && tag != DW_TAG_structure_type
8460       && tag != DW_TAG_class_type)
8461     return;
8462
8463   name = get_AT_string (die, DW_AT_name);
8464
8465   spec = get_AT_ref (die, DW_AT_specification);
8466   if (spec != NULL)
8467     die = spec;
8468
8469   if (die->die_parent != NULL)
8470     checksum_die_context (die->die_parent, ctx);
8471
8472   CHECKSUM_ULEB128 ('C');
8473   CHECKSUM_ULEB128 (tag);
8474   if (name != NULL)
8475     CHECKSUM_STRING (name);
8476 }
8477
8478 /* Calculate the checksum of a location expression.  */
8479
8480 static inline void
8481 loc_checksum_ordered (dw_loc_descr_ref loc, struct md5_ctx *ctx)
8482 {
8483   /* Special case for lone DW_OP_plus_uconst: checksum as if the location
8484      were emitted as a DW_FORM_sdata instead of a location expression.  */
8485   if (loc->dw_loc_opc == DW_OP_plus_uconst && loc->dw_loc_next == NULL)
8486     {
8487       CHECKSUM_ULEB128 (DW_FORM_sdata);
8488       CHECKSUM_SLEB128 ((HOST_WIDE_INT) loc->dw_loc_oprnd1.v.val_unsigned);
8489       return;
8490     }
8491
8492   /* Otherwise, just checksum the raw location expression.  */
8493   while (loc != NULL)
8494     {
8495       CHECKSUM_ULEB128 (loc->dw_loc_opc);
8496       CHECKSUM (loc->dw_loc_oprnd1);
8497       CHECKSUM (loc->dw_loc_oprnd2);
8498       loc = loc->dw_loc_next;
8499     }
8500 }
8501
8502 /* Calculate the checksum of an attribute.  */
8503
8504 static void
8505 attr_checksum_ordered (enum dwarf_tag tag, dw_attr_ref at,
8506                        struct md5_ctx *ctx, int *mark)
8507 {
8508   dw_loc_descr_ref loc;
8509   rtx r;
8510
8511   if (AT_class (at) == dw_val_class_die_ref)
8512     {
8513       dw_die_ref target_die = AT_ref (at);
8514
8515       /* For pointer and reference types, we checksum only the (qualified)
8516          name of the target type (if there is a name).  For friend entries,
8517          we checksum only the (qualified) name of the target type or function.
8518          This allows the checksum to remain the same whether the target type
8519          is complete or not.  */
8520       if ((at->dw_attr == DW_AT_type
8521            && (tag == DW_TAG_pointer_type
8522                || tag == DW_TAG_reference_type
8523                || tag == DW_TAG_rvalue_reference_type
8524                || tag == DW_TAG_ptr_to_member_type))
8525           || (at->dw_attr == DW_AT_friend
8526               && tag == DW_TAG_friend))
8527         {
8528           dw_attr_ref name_attr = get_AT (target_die, DW_AT_name);
8529
8530           if (name_attr != NULL)
8531             {
8532               dw_die_ref decl = get_AT_ref (target_die, DW_AT_specification);
8533
8534               if (decl == NULL)
8535                 decl = target_die;
8536               CHECKSUM_ULEB128 ('N');
8537               CHECKSUM_ULEB128 (at->dw_attr);
8538               if (decl->die_parent != NULL)
8539                 checksum_die_context (decl->die_parent, ctx);
8540               CHECKSUM_ULEB128 ('E');
8541               CHECKSUM_STRING (AT_string (name_attr));
8542               return;
8543             }
8544         }
8545
8546       /* For all other references to another DIE, we check to see if the
8547          target DIE has already been visited.  If it has, we emit a
8548          backward reference; if not, we descend recursively.  */
8549       if (target_die->die_mark > 0)
8550         {
8551           CHECKSUM_ULEB128 ('R');
8552           CHECKSUM_ULEB128 (at->dw_attr);
8553           CHECKSUM_ULEB128 (target_die->die_mark);
8554         }
8555       else
8556         {
8557           dw_die_ref decl = get_AT_ref (target_die, DW_AT_specification);
8558
8559           if (decl == NULL)
8560             decl = target_die;
8561           target_die->die_mark = ++(*mark);
8562           CHECKSUM_ULEB128 ('T');
8563           CHECKSUM_ULEB128 (at->dw_attr);
8564           if (decl->die_parent != NULL)
8565             checksum_die_context (decl->die_parent, ctx);
8566           die_checksum_ordered (target_die, ctx, mark);
8567         }
8568       return;
8569     }
8570
8571   CHECKSUM_ULEB128 ('A');
8572   CHECKSUM_ULEB128 (at->dw_attr);
8573
8574   switch (AT_class (at))
8575     {
8576     case dw_val_class_const:
8577       CHECKSUM_ULEB128 (DW_FORM_sdata);
8578       CHECKSUM_SLEB128 (at->dw_attr_val.v.val_int);
8579       break;
8580
8581     case dw_val_class_unsigned_const:
8582       CHECKSUM_ULEB128 (DW_FORM_sdata);
8583       CHECKSUM_SLEB128 ((int) at->dw_attr_val.v.val_unsigned);
8584       break;
8585
8586     case dw_val_class_const_double:
8587       CHECKSUM_ULEB128 (DW_FORM_block);
8588       CHECKSUM_ULEB128 (sizeof (at->dw_attr_val.v.val_double));
8589       CHECKSUM (at->dw_attr_val.v.val_double);
8590       break;
8591
8592     case dw_val_class_vec:
8593       CHECKSUM_ULEB128 (DW_FORM_block);
8594       CHECKSUM_ULEB128 (sizeof (at->dw_attr_val.v.val_vec));
8595       CHECKSUM (at->dw_attr_val.v.val_vec);
8596       break;
8597
8598     case dw_val_class_flag:
8599       CHECKSUM_ULEB128 (DW_FORM_flag);
8600       CHECKSUM_ULEB128 (at->dw_attr_val.v.val_flag ? 1 : 0);
8601       break;
8602
8603     case dw_val_class_str:
8604       CHECKSUM_ULEB128 (DW_FORM_string);
8605       CHECKSUM_STRING (AT_string (at));
8606       break;
8607
8608     case dw_val_class_addr:
8609       r = AT_addr (at);
8610       gcc_assert (GET_CODE (r) == SYMBOL_REF);
8611       CHECKSUM_ULEB128 (DW_FORM_string);
8612       CHECKSUM_STRING (XSTR (r, 0));
8613       break;
8614
8615     case dw_val_class_offset:
8616       CHECKSUM_ULEB128 (DW_FORM_sdata);
8617       CHECKSUM_ULEB128 (at->dw_attr_val.v.val_offset);
8618       break;
8619
8620     case dw_val_class_loc:
8621       for (loc = AT_loc (at); loc; loc = loc->dw_loc_next)
8622         loc_checksum_ordered (loc, ctx);
8623       break;
8624
8625     case dw_val_class_fde_ref:
8626     case dw_val_class_lbl_id:
8627     case dw_val_class_lineptr:
8628     case dw_val_class_macptr:
8629       break;
8630
8631     case dw_val_class_file:
8632       CHECKSUM_ULEB128 (DW_FORM_string);
8633       CHECKSUM_STRING (AT_file (at)->filename);
8634       break;
8635
8636     case dw_val_class_data8:
8637       CHECKSUM (at->dw_attr_val.v.val_data8);
8638       break;
8639
8640     default:
8641       break;
8642     }
8643 }
8644
8645 struct checksum_attributes
8646 {
8647   dw_attr_ref at_name;
8648   dw_attr_ref at_type;
8649   dw_attr_ref at_friend;
8650   dw_attr_ref at_accessibility;
8651   dw_attr_ref at_address_class;
8652   dw_attr_ref at_allocated;
8653   dw_attr_ref at_artificial;
8654   dw_attr_ref at_associated;
8655   dw_attr_ref at_binary_scale;
8656   dw_attr_ref at_bit_offset;
8657   dw_attr_ref at_bit_size;
8658   dw_attr_ref at_bit_stride;
8659   dw_attr_ref at_byte_size;
8660   dw_attr_ref at_byte_stride;
8661   dw_attr_ref at_const_value;
8662   dw_attr_ref at_containing_type;
8663   dw_attr_ref at_count;
8664   dw_attr_ref at_data_location;
8665   dw_attr_ref at_data_member_location;
8666   dw_attr_ref at_decimal_scale;
8667   dw_attr_ref at_decimal_sign;
8668   dw_attr_ref at_default_value;
8669   dw_attr_ref at_digit_count;
8670   dw_attr_ref at_discr;
8671   dw_attr_ref at_discr_list;
8672   dw_attr_ref at_discr_value;
8673   dw_attr_ref at_encoding;
8674   dw_attr_ref at_endianity;
8675   dw_attr_ref at_explicit;
8676   dw_attr_ref at_is_optional;
8677   dw_attr_ref at_location;
8678   dw_attr_ref at_lower_bound;
8679   dw_attr_ref at_mutable;
8680   dw_attr_ref at_ordering;
8681   dw_attr_ref at_picture_string;
8682   dw_attr_ref at_prototyped;
8683   dw_attr_ref at_small;
8684   dw_attr_ref at_segment;
8685   dw_attr_ref at_string_length;
8686   dw_attr_ref at_threads_scaled;
8687   dw_attr_ref at_upper_bound;
8688   dw_attr_ref at_use_location;
8689   dw_attr_ref at_use_UTF8;
8690   dw_attr_ref at_variable_parameter;
8691   dw_attr_ref at_virtuality;
8692   dw_attr_ref at_visibility;
8693   dw_attr_ref at_vtable_elem_location;
8694 };
8695
8696 /* Collect the attributes that we will want to use for the checksum.  */
8697
8698 static void
8699 collect_checksum_attributes (struct checksum_attributes *attrs, dw_die_ref die)
8700 {
8701   dw_attr_ref a;
8702   unsigned ix;
8703
8704   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
8705     {
8706       switch (a->dw_attr)
8707         {
8708         case DW_AT_name:
8709           attrs->at_name = a;
8710           break;
8711         case DW_AT_type:
8712           attrs->at_type = a;
8713           break;
8714         case DW_AT_friend:
8715           attrs->at_friend = a;
8716           break;
8717         case DW_AT_accessibility:
8718           attrs->at_accessibility = a;
8719           break;
8720         case DW_AT_address_class:
8721           attrs->at_address_class = a;
8722           break;
8723         case DW_AT_allocated:
8724           attrs->at_allocated = a;
8725           break;
8726         case DW_AT_artificial:
8727           attrs->at_artificial = a;
8728           break;
8729         case DW_AT_associated:
8730           attrs->at_associated = a;
8731           break;
8732         case DW_AT_binary_scale:
8733           attrs->at_binary_scale = a;
8734           break;
8735         case DW_AT_bit_offset:
8736           attrs->at_bit_offset = a;
8737           break;
8738         case DW_AT_bit_size:
8739           attrs->at_bit_size = a;
8740           break;
8741         case DW_AT_bit_stride:
8742           attrs->at_bit_stride = a;
8743           break;
8744         case DW_AT_byte_size:
8745           attrs->at_byte_size = a;
8746           break;
8747         case DW_AT_byte_stride:
8748           attrs->at_byte_stride = a;
8749           break;
8750         case DW_AT_const_value:
8751           attrs->at_const_value = a;
8752           break;
8753         case DW_AT_containing_type:
8754           attrs->at_containing_type = a;
8755           break;
8756         case DW_AT_count:
8757           attrs->at_count = a;
8758           break;
8759         case DW_AT_data_location:
8760           attrs->at_data_location = a;
8761           break;
8762         case DW_AT_data_member_location:
8763           attrs->at_data_member_location = a;
8764           break;
8765         case DW_AT_decimal_scale:
8766           attrs->at_decimal_scale = a;
8767           break;
8768         case DW_AT_decimal_sign:
8769           attrs->at_decimal_sign = a;
8770           break;
8771         case DW_AT_default_value:
8772           attrs->at_default_value = a;
8773           break;
8774         case DW_AT_digit_count:
8775           attrs->at_digit_count = a;
8776           break;
8777         case DW_AT_discr:
8778           attrs->at_discr = a;
8779           break;
8780         case DW_AT_discr_list:
8781           attrs->at_discr_list = a;
8782           break;
8783         case DW_AT_discr_value:
8784           attrs->at_discr_value = a;
8785           break;
8786         case DW_AT_encoding:
8787           attrs->at_encoding = a;
8788           break;
8789         case DW_AT_endianity:
8790           attrs->at_endianity = a;
8791           break;
8792         case DW_AT_explicit:
8793           attrs->at_explicit = a;
8794           break;
8795         case DW_AT_is_optional:
8796           attrs->at_is_optional = a;
8797           break;
8798         case DW_AT_location:
8799           attrs->at_location = a;
8800           break;
8801         case DW_AT_lower_bound:
8802           attrs->at_lower_bound = a;
8803           break;
8804         case DW_AT_mutable:
8805           attrs->at_mutable = a;
8806           break;
8807         case DW_AT_ordering:
8808           attrs->at_ordering = a;
8809           break;
8810         case DW_AT_picture_string:
8811           attrs->at_picture_string = a;
8812           break;
8813         case DW_AT_prototyped:
8814           attrs->at_prototyped = a;
8815           break;
8816         case DW_AT_small:
8817           attrs->at_small = a;
8818           break;
8819         case DW_AT_segment:
8820           attrs->at_segment = a;
8821           break;
8822         case DW_AT_string_length:
8823           attrs->at_string_length = a;
8824           break;
8825         case DW_AT_threads_scaled:
8826           attrs->at_threads_scaled = a;
8827           break;
8828         case DW_AT_upper_bound:
8829           attrs->at_upper_bound = a;
8830           break;
8831         case DW_AT_use_location:
8832           attrs->at_use_location = a;
8833           break;
8834         case DW_AT_use_UTF8:
8835           attrs->at_use_UTF8 = a;
8836           break;
8837         case DW_AT_variable_parameter:
8838           attrs->at_variable_parameter = a;
8839           break;
8840         case DW_AT_virtuality:
8841           attrs->at_virtuality = a;
8842           break;
8843         case DW_AT_visibility:
8844           attrs->at_visibility = a;
8845           break;
8846         case DW_AT_vtable_elem_location:
8847           attrs->at_vtable_elem_location = a;
8848           break;
8849         default:
8850           break;
8851         }
8852     }
8853 }
8854
8855 /* Calculate the checksum of a DIE, using an ordered subset of attributes.  */
8856
8857 static void
8858 die_checksum_ordered (dw_die_ref die, struct md5_ctx *ctx, int *mark)
8859 {
8860   dw_die_ref c;
8861   dw_die_ref decl;
8862   struct checksum_attributes attrs;
8863
8864   CHECKSUM_ULEB128 ('D');
8865   CHECKSUM_ULEB128 (die->die_tag);
8866
8867   memset (&attrs, 0, sizeof (attrs));
8868
8869   decl = get_AT_ref (die, DW_AT_specification);
8870   if (decl != NULL)
8871     collect_checksum_attributes (&attrs, decl);
8872   collect_checksum_attributes (&attrs, die);
8873
8874   CHECKSUM_ATTR (attrs.at_name);
8875   CHECKSUM_ATTR (attrs.at_accessibility);
8876   CHECKSUM_ATTR (attrs.at_address_class);
8877   CHECKSUM_ATTR (attrs.at_allocated);
8878   CHECKSUM_ATTR (attrs.at_artificial);
8879   CHECKSUM_ATTR (attrs.at_associated);
8880   CHECKSUM_ATTR (attrs.at_binary_scale);
8881   CHECKSUM_ATTR (attrs.at_bit_offset);
8882   CHECKSUM_ATTR (attrs.at_bit_size);
8883   CHECKSUM_ATTR (attrs.at_bit_stride);
8884   CHECKSUM_ATTR (attrs.at_byte_size);
8885   CHECKSUM_ATTR (attrs.at_byte_stride);
8886   CHECKSUM_ATTR (attrs.at_const_value);
8887   CHECKSUM_ATTR (attrs.at_containing_type);
8888   CHECKSUM_ATTR (attrs.at_count);
8889   CHECKSUM_ATTR (attrs.at_data_location);
8890   CHECKSUM_ATTR (attrs.at_data_member_location);
8891   CHECKSUM_ATTR (attrs.at_decimal_scale);
8892   CHECKSUM_ATTR (attrs.at_decimal_sign);
8893   CHECKSUM_ATTR (attrs.at_default_value);
8894   CHECKSUM_ATTR (attrs.at_digit_count);
8895   CHECKSUM_ATTR (attrs.at_discr);
8896   CHECKSUM_ATTR (attrs.at_discr_list);
8897   CHECKSUM_ATTR (attrs.at_discr_value);
8898   CHECKSUM_ATTR (attrs.at_encoding);
8899   CHECKSUM_ATTR (attrs.at_endianity);
8900   CHECKSUM_ATTR (attrs.at_explicit);
8901   CHECKSUM_ATTR (attrs.at_is_optional);
8902   CHECKSUM_ATTR (attrs.at_location);
8903   CHECKSUM_ATTR (attrs.at_lower_bound);
8904   CHECKSUM_ATTR (attrs.at_mutable);
8905   CHECKSUM_ATTR (attrs.at_ordering);
8906   CHECKSUM_ATTR (attrs.at_picture_string);
8907   CHECKSUM_ATTR (attrs.at_prototyped);
8908   CHECKSUM_ATTR (attrs.at_small);
8909   CHECKSUM_ATTR (attrs.at_segment);
8910   CHECKSUM_ATTR (attrs.at_string_length);
8911   CHECKSUM_ATTR (attrs.at_threads_scaled);
8912   CHECKSUM_ATTR (attrs.at_upper_bound);
8913   CHECKSUM_ATTR (attrs.at_use_location);
8914   CHECKSUM_ATTR (attrs.at_use_UTF8);
8915   CHECKSUM_ATTR (attrs.at_variable_parameter);
8916   CHECKSUM_ATTR (attrs.at_virtuality);
8917   CHECKSUM_ATTR (attrs.at_visibility);
8918   CHECKSUM_ATTR (attrs.at_vtable_elem_location);
8919   CHECKSUM_ATTR (attrs.at_type);
8920   CHECKSUM_ATTR (attrs.at_friend);
8921
8922   /* Checksum the child DIEs, except for nested types and member functions.  */
8923   c = die->die_child;
8924   if (c) do {
8925     dw_attr_ref name_attr;
8926
8927     c = c->die_sib;
8928     name_attr = get_AT (c, DW_AT_name);
8929     if ((is_type_die (c) || c->die_tag == DW_TAG_subprogram)
8930         && name_attr != NULL)
8931       {
8932         CHECKSUM_ULEB128 ('S');
8933         CHECKSUM_ULEB128 (c->die_tag);
8934         CHECKSUM_STRING (AT_string (name_attr));
8935       }
8936     else
8937       {
8938         /* Mark this DIE so it gets processed when unmarking.  */
8939         if (c->die_mark == 0)
8940           c->die_mark = -1;
8941         die_checksum_ordered (c, ctx, mark);
8942       }
8943   } while (c != die->die_child);
8944
8945   CHECKSUM_ULEB128 (0);
8946 }
8947
8948 #undef CHECKSUM
8949 #undef CHECKSUM_STRING
8950 #undef CHECKSUM_ATTR
8951 #undef CHECKSUM_LEB128
8952 #undef CHECKSUM_ULEB128
8953
8954 /* Generate the type signature for DIE.  This is computed by generating an
8955    MD5 checksum over the DIE's tag, its relevant attributes, and its
8956    children.  Attributes that are references to other DIEs are processed
8957    by recursion, using the MARK field to prevent infinite recursion.
8958    If the DIE is nested inside a namespace or another type, we also
8959    need to include that context in the signature.  The lower 64 bits
8960    of the resulting MD5 checksum comprise the signature.  */
8961
8962 static void
8963 generate_type_signature (dw_die_ref die, comdat_type_node *type_node)
8964 {
8965   int mark;
8966   const char *name;
8967   unsigned char checksum[16];
8968   struct md5_ctx ctx;
8969   dw_die_ref decl;
8970
8971   name = get_AT_string (die, DW_AT_name);
8972   decl = get_AT_ref (die, DW_AT_specification);
8973
8974   /* First, compute a signature for just the type name (and its surrounding
8975      context, if any.  This is stored in the type unit DIE for link-time
8976      ODR (one-definition rule) checking.  */
8977
8978   if (is_cxx() && name != NULL)
8979     {
8980       md5_init_ctx (&ctx);
8981
8982       /* Checksum the names of surrounding namespaces and structures.  */
8983       if (decl != NULL && decl->die_parent != NULL)
8984         checksum_die_context (decl->die_parent, &ctx);
8985
8986       md5_process_bytes (&die->die_tag, sizeof (die->die_tag), &ctx);
8987       md5_process_bytes (name, strlen (name) + 1, &ctx);
8988       md5_finish_ctx (&ctx, checksum);
8989
8990       add_AT_data8 (type_node->root_die, DW_AT_GNU_odr_signature, &checksum[8]);
8991     }
8992
8993   /* Next, compute the complete type signature.  */
8994
8995   md5_init_ctx (&ctx);
8996   mark = 1;
8997   die->die_mark = mark;
8998
8999   /* Checksum the names of surrounding namespaces and structures.  */
9000   if (decl != NULL && decl->die_parent != NULL)
9001     checksum_die_context (decl->die_parent, &ctx);
9002
9003   /* Checksum the DIE and its children.  */
9004   die_checksum_ordered (die, &ctx, &mark);
9005   unmark_all_dies (die);
9006   md5_finish_ctx (&ctx, checksum);
9007
9008   /* Store the signature in the type node and link the type DIE and the
9009      type node together.  */
9010   memcpy (type_node->signature, &checksum[16 - DWARF_TYPE_SIGNATURE_SIZE],
9011           DWARF_TYPE_SIGNATURE_SIZE);
9012   die->die_id.die_type_node = type_node;
9013   type_node->type_die = die;
9014
9015   /* If the DIE is a specification, link its declaration to the type node
9016      as well.  */
9017   if (decl != NULL)
9018     decl->die_id.die_type_node = type_node;
9019 }
9020
9021 /* Do the location expressions look same?  */
9022 static inline int
9023 same_loc_p (dw_loc_descr_ref loc1, dw_loc_descr_ref loc2, int *mark)
9024 {
9025   return loc1->dw_loc_opc == loc2->dw_loc_opc
9026          && same_dw_val_p (&loc1->dw_loc_oprnd1, &loc2->dw_loc_oprnd1, mark)
9027          && same_dw_val_p (&loc1->dw_loc_oprnd2, &loc2->dw_loc_oprnd2, mark);
9028 }
9029
9030 /* Do the values look the same?  */
9031 static int
9032 same_dw_val_p (const dw_val_node *v1, const dw_val_node *v2, int *mark)
9033 {
9034   dw_loc_descr_ref loc1, loc2;
9035   rtx r1, r2;
9036
9037   if (v1->val_class != v2->val_class)
9038     return 0;
9039
9040   switch (v1->val_class)
9041     {
9042     case dw_val_class_const:
9043       return v1->v.val_int == v2->v.val_int;
9044     case dw_val_class_unsigned_const:
9045       return v1->v.val_unsigned == v2->v.val_unsigned;
9046     case dw_val_class_const_double:
9047       return v1->v.val_double.high == v2->v.val_double.high
9048              && v1->v.val_double.low == v2->v.val_double.low;
9049     case dw_val_class_vec:
9050       if (v1->v.val_vec.length != v2->v.val_vec.length
9051           || v1->v.val_vec.elt_size != v2->v.val_vec.elt_size)
9052         return 0;
9053       if (memcmp (v1->v.val_vec.array, v2->v.val_vec.array,
9054                   v1->v.val_vec.length * v1->v.val_vec.elt_size))
9055         return 0;
9056       return 1;
9057     case dw_val_class_flag:
9058       return v1->v.val_flag == v2->v.val_flag;
9059     case dw_val_class_str:
9060       return !strcmp(v1->v.val_str->str, v2->v.val_str->str);
9061
9062     case dw_val_class_addr:
9063       r1 = v1->v.val_addr;
9064       r2 = v2->v.val_addr;
9065       if (GET_CODE (r1) != GET_CODE (r2))
9066         return 0;
9067       return !rtx_equal_p (r1, r2);
9068
9069     case dw_val_class_offset:
9070       return v1->v.val_offset == v2->v.val_offset;
9071
9072     case dw_val_class_loc:
9073       for (loc1 = v1->v.val_loc, loc2 = v2->v.val_loc;
9074            loc1 && loc2;
9075            loc1 = loc1->dw_loc_next, loc2 = loc2->dw_loc_next)
9076         if (!same_loc_p (loc1, loc2, mark))
9077           return 0;
9078       return !loc1 && !loc2;
9079
9080     case dw_val_class_die_ref:
9081       return same_die_p (v1->v.val_die_ref.die, v2->v.val_die_ref.die, mark);
9082
9083     case dw_val_class_fde_ref:
9084     case dw_val_class_lbl_id:
9085     case dw_val_class_lineptr:
9086     case dw_val_class_macptr:
9087       return 1;
9088
9089     case dw_val_class_file:
9090       return v1->v.val_file == v2->v.val_file;
9091
9092     case dw_val_class_data8:
9093       return !memcmp (v1->v.val_data8, v2->v.val_data8, 8);
9094
9095     default:
9096       return 1;
9097     }
9098 }
9099
9100 /* Do the attributes look the same?  */
9101
9102 static int
9103 same_attr_p (dw_attr_ref at1, dw_attr_ref at2, int *mark)
9104 {
9105   if (at1->dw_attr != at2->dw_attr)
9106     return 0;
9107
9108   /* We don't care that this was compiled with a different compiler
9109      snapshot; if the output is the same, that's what matters. */
9110   if (at1->dw_attr == DW_AT_producer)
9111     return 1;
9112
9113   return same_dw_val_p (&at1->dw_attr_val, &at2->dw_attr_val, mark);
9114 }
9115
9116 /* Do the dies look the same?  */
9117
9118 static int
9119 same_die_p (dw_die_ref die1, dw_die_ref die2, int *mark)
9120 {
9121   dw_die_ref c1, c2;
9122   dw_attr_ref a1;
9123   unsigned ix;
9124
9125   /* To avoid infinite recursion.  */
9126   if (die1->die_mark)
9127     return die1->die_mark == die2->die_mark;
9128   die1->die_mark = die2->die_mark = ++(*mark);
9129
9130   if (die1->die_tag != die2->die_tag)
9131     return 0;
9132
9133   if (VEC_length (dw_attr_node, die1->die_attr)
9134       != VEC_length (dw_attr_node, die2->die_attr))
9135     return 0;
9136
9137   for (ix = 0; VEC_iterate (dw_attr_node, die1->die_attr, ix, a1); ix++)
9138     if (!same_attr_p (a1, VEC_index (dw_attr_node, die2->die_attr, ix), mark))
9139       return 0;
9140
9141   c1 = die1->die_child;
9142   c2 = die2->die_child;
9143   if (! c1)
9144     {
9145       if (c2)
9146         return 0;
9147     }
9148   else
9149     for (;;)
9150       {
9151         if (!same_die_p (c1, c2, mark))
9152           return 0;
9153         c1 = c1->die_sib;
9154         c2 = c2->die_sib;
9155         if (c1 == die1->die_child)
9156           {
9157             if (c2 == die2->die_child)
9158               break;
9159             else
9160               return 0;
9161           }
9162     }
9163
9164   return 1;
9165 }
9166
9167 /* Do the dies look the same?  Wrapper around same_die_p.  */
9168
9169 static int
9170 same_die_p_wrap (dw_die_ref die1, dw_die_ref die2)
9171 {
9172   int mark = 0;
9173   int ret = same_die_p (die1, die2, &mark);
9174
9175   unmark_all_dies (die1);
9176   unmark_all_dies (die2);
9177
9178   return ret;
9179 }
9180
9181 /* The prefix to attach to symbols on DIEs in the current comdat debug
9182    info section.  */
9183 static char *comdat_symbol_id;
9184
9185 /* The index of the current symbol within the current comdat CU.  */
9186 static unsigned int comdat_symbol_number;
9187
9188 /* Calculate the MD5 checksum of the compilation unit DIE UNIT_DIE and its
9189    children, and set comdat_symbol_id accordingly.  */
9190
9191 static void
9192 compute_section_prefix (dw_die_ref unit_die)
9193 {
9194   const char *die_name = get_AT_string (unit_die, DW_AT_name);
9195   const char *base = die_name ? lbasename (die_name) : "anonymous";
9196   char *name = XALLOCAVEC (char, strlen (base) + 64);
9197   char *p;
9198   int i, mark;
9199   unsigned char checksum[16];
9200   struct md5_ctx ctx;
9201
9202   /* Compute the checksum of the DIE, then append part of it as hex digits to
9203      the name filename of the unit.  */
9204
9205   md5_init_ctx (&ctx);
9206   mark = 0;
9207   die_checksum (unit_die, &ctx, &mark);
9208   unmark_all_dies (unit_die);
9209   md5_finish_ctx (&ctx, checksum);
9210
9211   sprintf (name, "%s.", base);
9212   clean_symbol_name (name);
9213
9214   p = name + strlen (name);
9215   for (i = 0; i < 4; i++)
9216     {
9217       sprintf (p, "%.2x", checksum[i]);
9218       p += 2;
9219     }
9220
9221   comdat_symbol_id = unit_die->die_id.die_symbol = xstrdup (name);
9222   comdat_symbol_number = 0;
9223 }
9224
9225 /* Returns nonzero if DIE represents a type, in the sense of TYPE_P.  */
9226
9227 static int
9228 is_type_die (dw_die_ref die)
9229 {
9230   switch (die->die_tag)
9231     {
9232     case DW_TAG_array_type:
9233     case DW_TAG_class_type:
9234     case DW_TAG_interface_type:
9235     case DW_TAG_enumeration_type:
9236     case DW_TAG_pointer_type:
9237     case DW_TAG_reference_type:
9238     case DW_TAG_rvalue_reference_type:
9239     case DW_TAG_string_type:
9240     case DW_TAG_structure_type:
9241     case DW_TAG_subroutine_type:
9242     case DW_TAG_union_type:
9243     case DW_TAG_ptr_to_member_type:
9244     case DW_TAG_set_type:
9245     case DW_TAG_subrange_type:
9246     case DW_TAG_base_type:
9247     case DW_TAG_const_type:
9248     case DW_TAG_file_type:
9249     case DW_TAG_packed_type:
9250     case DW_TAG_volatile_type:
9251     case DW_TAG_typedef:
9252       return 1;
9253     default:
9254       return 0;
9255     }
9256 }
9257
9258 /* Returns 1 iff C is the sort of DIE that should go into a COMDAT CU.
9259    Basically, we want to choose the bits that are likely to be shared between
9260    compilations (types) and leave out the bits that are specific to individual
9261    compilations (functions).  */
9262
9263 static int
9264 is_comdat_die (dw_die_ref c)
9265 {
9266   /* I think we want to leave base types and __vtbl_ptr_type in the main CU, as
9267      we do for stabs.  The advantage is a greater likelihood of sharing between
9268      objects that don't include headers in the same order (and therefore would
9269      put the base types in a different comdat).  jason 8/28/00 */
9270
9271   if (c->die_tag == DW_TAG_base_type)
9272     return 0;
9273
9274   if (c->die_tag == DW_TAG_pointer_type
9275       || c->die_tag == DW_TAG_reference_type
9276       || c->die_tag == DW_TAG_rvalue_reference_type
9277       || c->die_tag == DW_TAG_const_type
9278       || c->die_tag == DW_TAG_volatile_type)
9279     {
9280       dw_die_ref t = get_AT_ref (c, DW_AT_type);
9281
9282       return t ? is_comdat_die (t) : 0;
9283     }
9284
9285   return is_type_die (c);
9286 }
9287
9288 /* Returns 1 iff C is the sort of DIE that might be referred to from another
9289    compilation unit.  */
9290
9291 static int
9292 is_symbol_die (dw_die_ref c)
9293 {
9294   return (is_type_die (c)
9295           || is_declaration_die (c)
9296           || c->die_tag == DW_TAG_namespace
9297           || c->die_tag == DW_TAG_module);
9298 }
9299
9300 static char *
9301 gen_internal_sym (const char *prefix)
9302 {
9303   char buf[256];
9304
9305   ASM_GENERATE_INTERNAL_LABEL (buf, prefix, label_num++);
9306   return xstrdup (buf);
9307 }
9308
9309 /* Assign symbols to all worthy DIEs under DIE.  */
9310
9311 static void
9312 assign_symbol_names (dw_die_ref die)
9313 {
9314   dw_die_ref c;
9315
9316   if (is_symbol_die (die))
9317     {
9318       if (comdat_symbol_id)
9319         {
9320           char *p = XALLOCAVEC (char, strlen (comdat_symbol_id) + 64);
9321
9322           sprintf (p, "%s.%s.%x", DIE_LABEL_PREFIX,
9323                    comdat_symbol_id, comdat_symbol_number++);
9324           die->die_id.die_symbol = xstrdup (p);
9325         }
9326       else
9327         die->die_id.die_symbol = gen_internal_sym ("LDIE");
9328     }
9329
9330   FOR_EACH_CHILD (die, c, assign_symbol_names (c));
9331 }
9332
9333 struct cu_hash_table_entry
9334 {
9335   dw_die_ref cu;
9336   unsigned min_comdat_num, max_comdat_num;
9337   struct cu_hash_table_entry *next;
9338 };
9339
9340 /* Routines to manipulate hash table of CUs.  */
9341 static hashval_t
9342 htab_cu_hash (const void *of)
9343 {
9344   const struct cu_hash_table_entry *const entry =
9345     (const struct cu_hash_table_entry *) of;
9346
9347   return htab_hash_string (entry->cu->die_id.die_symbol);
9348 }
9349
9350 static int
9351 htab_cu_eq (const void *of1, const void *of2)
9352 {
9353   const struct cu_hash_table_entry *const entry1 =
9354     (const struct cu_hash_table_entry *) of1;
9355   const struct die_struct *const entry2 = (const struct die_struct *) of2;
9356
9357   return !strcmp (entry1->cu->die_id.die_symbol, entry2->die_id.die_symbol);
9358 }
9359
9360 static void
9361 htab_cu_del (void *what)
9362 {
9363   struct cu_hash_table_entry *next,
9364     *entry = (struct cu_hash_table_entry *) what;
9365
9366   while (entry)
9367     {
9368       next = entry->next;
9369       free (entry);
9370       entry = next;
9371     }
9372 }
9373
9374 /* Check whether we have already seen this CU and set up SYM_NUM
9375    accordingly.  */
9376 static int
9377 check_duplicate_cu (dw_die_ref cu, htab_t htable, unsigned int *sym_num)
9378 {
9379   struct cu_hash_table_entry dummy;
9380   struct cu_hash_table_entry **slot, *entry, *last = &dummy;
9381
9382   dummy.max_comdat_num = 0;
9383
9384   slot = (struct cu_hash_table_entry **)
9385     htab_find_slot_with_hash (htable, cu, htab_hash_string (cu->die_id.die_symbol),
9386         INSERT);
9387   entry = *slot;
9388
9389   for (; entry; last = entry, entry = entry->next)
9390     {
9391       if (same_die_p_wrap (cu, entry->cu))
9392         break;
9393     }
9394
9395   if (entry)
9396     {
9397       *sym_num = entry->min_comdat_num;
9398       return 1;
9399     }
9400
9401   entry = XCNEW (struct cu_hash_table_entry);
9402   entry->cu = cu;
9403   entry->min_comdat_num = *sym_num = last->max_comdat_num;
9404   entry->next = *slot;
9405   *slot = entry;
9406
9407   return 0;
9408 }
9409
9410 /* Record SYM_NUM to record of CU in HTABLE.  */
9411 static void
9412 record_comdat_symbol_number (dw_die_ref cu, htab_t htable, unsigned int sym_num)
9413 {
9414   struct cu_hash_table_entry **slot, *entry;
9415
9416   slot = (struct cu_hash_table_entry **)
9417     htab_find_slot_with_hash (htable, cu, htab_hash_string (cu->die_id.die_symbol),
9418         NO_INSERT);
9419   entry = *slot;
9420
9421   entry->max_comdat_num = sym_num;
9422 }
9423
9424 /* Traverse the DIE (which is always comp_unit_die), and set up
9425    additional compilation units for each of the include files we see
9426    bracketed by BINCL/EINCL.  */
9427
9428 static void
9429 break_out_includes (dw_die_ref die)
9430 {
9431   dw_die_ref c;
9432   dw_die_ref unit = NULL;
9433   limbo_die_node *node, **pnode;
9434   htab_t cu_hash_table;
9435
9436   c = die->die_child;
9437   if (c) do {
9438     dw_die_ref prev = c;
9439     c = c->die_sib;
9440     while (c->die_tag == DW_TAG_GNU_BINCL || c->die_tag == DW_TAG_GNU_EINCL
9441            || (unit && is_comdat_die (c)))
9442       {
9443         dw_die_ref next = c->die_sib;
9444
9445         /* This DIE is for a secondary CU; remove it from the main one.  */
9446         remove_child_with_prev (c, prev);
9447
9448         if (c->die_tag == DW_TAG_GNU_BINCL)
9449           unit = push_new_compile_unit (unit, c);
9450         else if (c->die_tag == DW_TAG_GNU_EINCL)
9451           unit = pop_compile_unit (unit);
9452         else
9453           add_child_die (unit, c);
9454         c = next;
9455         if (c == die->die_child)
9456           break;
9457       }
9458   } while (c != die->die_child);
9459
9460 #if 0
9461   /* We can only use this in debugging, since the frontend doesn't check
9462      to make sure that we leave every include file we enter.  */
9463   gcc_assert (!unit);
9464 #endif
9465
9466   assign_symbol_names (die);
9467   cu_hash_table = htab_create (10, htab_cu_hash, htab_cu_eq, htab_cu_del);
9468   for (node = limbo_die_list, pnode = &limbo_die_list;
9469        node;
9470        node = node->next)
9471     {
9472       int is_dupl;
9473
9474       compute_section_prefix (node->die);
9475       is_dupl = check_duplicate_cu (node->die, cu_hash_table,
9476                         &comdat_symbol_number);
9477       assign_symbol_names (node->die);
9478       if (is_dupl)
9479         *pnode = node->next;
9480       else
9481         {
9482           pnode = &node->next;
9483           record_comdat_symbol_number (node->die, cu_hash_table,
9484                 comdat_symbol_number);
9485         }
9486     }
9487   htab_delete (cu_hash_table);
9488 }
9489
9490 /* Return non-zero if this DIE is a declaration.  */
9491
9492 static int
9493 is_declaration_die (dw_die_ref die)
9494 {
9495   dw_attr_ref a;
9496   unsigned ix;
9497
9498   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
9499     if (a->dw_attr == DW_AT_declaration)
9500       return 1;
9501
9502   return 0;
9503 }
9504
9505 /* Return non-zero if this is a type DIE that should be moved to a
9506    COMDAT .debug_types section.  */
9507
9508 static int
9509 should_move_die_to_comdat (dw_die_ref die)
9510 {
9511   switch (die->die_tag)
9512     {
9513     case DW_TAG_class_type:
9514     case DW_TAG_structure_type:
9515     case DW_TAG_enumeration_type:
9516     case DW_TAG_union_type:
9517       /* Don't move declarations or inlined instances.  */
9518       if (is_declaration_die (die) || get_AT (die, DW_AT_abstract_origin))
9519         return 0;
9520       return 1;
9521     case DW_TAG_array_type:
9522     case DW_TAG_interface_type:
9523     case DW_TAG_pointer_type:
9524     case DW_TAG_reference_type:
9525     case DW_TAG_rvalue_reference_type:
9526     case DW_TAG_string_type:
9527     case DW_TAG_subroutine_type:
9528     case DW_TAG_ptr_to_member_type:
9529     case DW_TAG_set_type:
9530     case DW_TAG_subrange_type:
9531     case DW_TAG_base_type:
9532     case DW_TAG_const_type:
9533     case DW_TAG_file_type:
9534     case DW_TAG_packed_type:
9535     case DW_TAG_volatile_type:
9536     case DW_TAG_typedef:
9537     default:
9538       return 0;
9539     }
9540 }
9541
9542 /* Make a clone of DIE.  */
9543
9544 static dw_die_ref
9545 clone_die (dw_die_ref die)
9546 {
9547   dw_die_ref clone;
9548   dw_attr_ref a;
9549   unsigned ix;
9550
9551   clone = GGC_CNEW (die_node);
9552   clone->die_tag = die->die_tag;
9553
9554   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
9555     add_dwarf_attr (clone, a);
9556
9557   return clone;
9558 }
9559
9560 /* Make a clone of the tree rooted at DIE.  */
9561
9562 static dw_die_ref
9563 clone_tree (dw_die_ref die)
9564 {
9565   dw_die_ref c;
9566   dw_die_ref clone = clone_die (die);
9567
9568   FOR_EACH_CHILD (die, c, add_child_die (clone, clone_tree(c)));
9569
9570   return clone;
9571 }
9572
9573 /* Make a clone of DIE as a declaration.  */
9574
9575 static dw_die_ref
9576 clone_as_declaration (dw_die_ref die)
9577 {
9578   dw_die_ref clone;
9579   dw_die_ref decl;
9580   dw_attr_ref a;
9581   unsigned ix;
9582
9583   /* If the DIE is already a declaration, just clone it.  */
9584   if (is_declaration_die (die))
9585     return clone_die (die);
9586
9587   /* If the DIE is a specification, just clone its declaration DIE.  */
9588   decl = get_AT_ref (die, DW_AT_specification);
9589   if (decl != NULL)
9590     return clone_die (decl);
9591
9592   clone = GGC_CNEW (die_node);
9593   clone->die_tag = die->die_tag;
9594
9595   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
9596     {
9597       /* We don't want to copy over all attributes.
9598          For example we don't want DW_AT_byte_size because otherwise we will no
9599          longer have a declaration and GDB will treat it as a definition.  */
9600
9601       switch (a->dw_attr)
9602         {
9603         case DW_AT_artificial:
9604         case DW_AT_containing_type:
9605         case DW_AT_external:
9606         case DW_AT_name:
9607         case DW_AT_type:
9608         case DW_AT_virtuality:
9609         case DW_AT_linkage_name:
9610         case DW_AT_MIPS_linkage_name:
9611           add_dwarf_attr (clone, a);
9612           break;
9613         case DW_AT_byte_size:
9614         default:
9615           break;
9616         }
9617     }
9618
9619   if (die->die_id.die_type_node)
9620     add_AT_die_ref (clone, DW_AT_signature, die);
9621
9622   add_AT_flag (clone, DW_AT_declaration, 1);
9623   return clone;
9624 }
9625
9626 /* Copy the declaration context to the new compile unit DIE.  This includes
9627    any surrounding namespace or type declarations.  If the DIE has an
9628    AT_specification attribute, it also includes attributes and children
9629    attached to the specification.  */
9630
9631 static void
9632 copy_declaration_context (dw_die_ref unit, dw_die_ref die)
9633 {
9634   dw_die_ref decl;
9635   dw_die_ref new_decl;
9636
9637   decl = get_AT_ref (die, DW_AT_specification);
9638   if (decl == NULL)
9639     decl = die;
9640   else
9641     {
9642       unsigned ix;
9643       dw_die_ref c;
9644       dw_attr_ref a;
9645
9646       /* Copy the type node pointer from the new DIE to the original
9647          declaration DIE so we can forward references later.  */
9648       decl->die_id.die_type_node = die->die_id.die_type_node;
9649
9650       remove_AT (die, DW_AT_specification);
9651
9652       for (ix = 0; VEC_iterate (dw_attr_node, decl->die_attr, ix, a); ix++)
9653         {
9654           if (a->dw_attr != DW_AT_name
9655               && a->dw_attr != DW_AT_declaration
9656               && a->dw_attr != DW_AT_external)
9657             add_dwarf_attr (die, a);
9658         }
9659
9660       FOR_EACH_CHILD (decl, c, add_child_die (die, clone_tree(c)));
9661     }
9662
9663   if (decl->die_parent != NULL
9664       && decl->die_parent->die_tag != DW_TAG_compile_unit
9665       && decl->die_parent->die_tag != DW_TAG_type_unit)
9666     {
9667       new_decl = copy_ancestor_tree (unit, decl, NULL);
9668       if (new_decl != NULL)
9669         {
9670           remove_AT (new_decl, DW_AT_signature);
9671           add_AT_specification (die, new_decl);
9672         }
9673     }
9674 }
9675
9676 /* Generate the skeleton ancestor tree for the given NODE, then clone
9677    the DIE and add the clone into the tree.  */
9678
9679 static void
9680 generate_skeleton_ancestor_tree (skeleton_chain_node *node)
9681 {
9682   if (node->new_die != NULL)
9683     return;
9684
9685   node->new_die = clone_as_declaration (node->old_die);
9686
9687   if (node->parent != NULL)
9688     {
9689       generate_skeleton_ancestor_tree (node->parent);
9690       add_child_die (node->parent->new_die, node->new_die);
9691     }
9692 }
9693
9694 /* Generate a skeleton tree of DIEs containing any declarations that are
9695    found in the original tree.  We traverse the tree looking for declaration
9696    DIEs, and construct the skeleton from the bottom up whenever we find one.  */
9697
9698 static void
9699 generate_skeleton_bottom_up (skeleton_chain_node *parent)
9700 {
9701   skeleton_chain_node node;
9702   dw_die_ref c;
9703   dw_die_ref first;
9704   dw_die_ref prev = NULL;
9705   dw_die_ref next = NULL;
9706
9707   node.parent = parent;
9708
9709   first = c = parent->old_die->die_child;
9710   if (c)
9711     next = c->die_sib;
9712   if (c) do {
9713     if (prev == NULL || prev->die_sib == c)
9714       prev = c;
9715     c = next;
9716     next = (c == first ? NULL : c->die_sib);
9717     node.old_die = c;
9718     node.new_die = NULL;
9719     if (is_declaration_die (c))
9720       {
9721         /* Clone the existing DIE, move the original to the skeleton
9722            tree (which is in the main CU), and put the clone, with
9723            all the original's children, where the original came from.  */
9724         dw_die_ref clone = clone_die (c);
9725         move_all_children (c, clone);
9726
9727         replace_child (c, clone, prev);
9728         generate_skeleton_ancestor_tree (parent);
9729         add_child_die (parent->new_die, c);
9730         node.new_die = c;
9731         c = clone;
9732       }
9733     generate_skeleton_bottom_up (&node);
9734   } while (next != NULL);
9735 }
9736
9737 /* Wrapper function for generate_skeleton_bottom_up.  */
9738
9739 static dw_die_ref
9740 generate_skeleton (dw_die_ref die)
9741 {
9742   skeleton_chain_node node;
9743
9744   node.old_die = die;
9745   node.new_die = NULL;
9746   node.parent = NULL;
9747
9748   /* If this type definition is nested inside another type,
9749      always leave at least a declaration in its place.  */
9750   if (die->die_parent != NULL && is_type_die (die->die_parent))
9751     node.new_die = clone_as_declaration (die);
9752
9753   generate_skeleton_bottom_up (&node);
9754   return node.new_die;
9755 }
9756
9757 /* Remove the DIE from its parent, possibly replacing it with a cloned
9758    declaration.  The original DIE will be moved to a new compile unit
9759    so that existing references to it follow it to the new location.  If
9760    any of the original DIE's descendants is a declaration, we need to
9761    replace the original DIE with a skeleton tree and move the
9762    declarations back into the skeleton tree.  */
9763
9764 static dw_die_ref
9765 remove_child_or_replace_with_skeleton (dw_die_ref child, dw_die_ref prev)
9766 {
9767   dw_die_ref skeleton;
9768
9769   skeleton = generate_skeleton (child);
9770   if (skeleton == NULL)
9771     remove_child_with_prev (child, prev);
9772   else
9773     {
9774       skeleton->die_id.die_type_node = child->die_id.die_type_node;
9775       replace_child (child, skeleton, prev);
9776     }
9777
9778   return skeleton;
9779 }
9780
9781 /* Traverse the DIE and set up additional .debug_types sections for each
9782    type worthy of being placed in a COMDAT section.  */
9783
9784 static void
9785 break_out_comdat_types (dw_die_ref die)
9786 {
9787   dw_die_ref c;
9788   dw_die_ref first;
9789   dw_die_ref prev = NULL;
9790   dw_die_ref next = NULL;
9791   dw_die_ref unit = NULL;
9792
9793   first = c = die->die_child;
9794   if (c)
9795     next = c->die_sib;
9796   if (c) do {
9797     if (prev == NULL || prev->die_sib == c)
9798       prev = c;
9799     c = next;
9800     next = (c == first ? NULL : c->die_sib);
9801     if (should_move_die_to_comdat (c))
9802       {
9803         dw_die_ref replacement;
9804         comdat_type_node_ref type_node;
9805
9806         /* Create a new type unit DIE as the root for the new tree, and
9807            add it to the list of comdat types.  */
9808         unit = new_die (DW_TAG_type_unit, NULL, NULL);
9809         add_AT_unsigned (unit, DW_AT_language,
9810                          get_AT_unsigned (comp_unit_die, DW_AT_language));
9811         type_node = GGC_CNEW (comdat_type_node);
9812         type_node->root_die = unit;
9813         type_node->next = comdat_type_list;
9814         comdat_type_list = type_node;
9815
9816         /* Generate the type signature.  */
9817         generate_type_signature (c, type_node);
9818
9819         /* Copy the declaration context, attributes, and children of the
9820            declaration into the new compile unit DIE.  */
9821         copy_declaration_context (unit, c);
9822
9823         /* Remove this DIE from the main CU.  */
9824         replacement = remove_child_or_replace_with_skeleton (c, prev);
9825
9826         /* Break out nested types into their own type units.  */
9827         break_out_comdat_types (c);
9828
9829         /* Add the DIE to the new compunit.  */
9830         add_child_die (unit, c);
9831
9832         if (replacement != NULL)
9833           c = replacement;
9834       }
9835     else if (c->die_tag == DW_TAG_namespace
9836              || c->die_tag == DW_TAG_class_type
9837              || c->die_tag == DW_TAG_structure_type
9838              || c->die_tag == DW_TAG_union_type)
9839       {
9840         /* Look for nested types that can be broken out.  */
9841         break_out_comdat_types (c);
9842       }
9843   } while (next != NULL);
9844 }
9845
9846 /* Structure to map a DIE in one CU to its copy in a comdat type unit.  */
9847
9848 struct decl_table_entry
9849 {
9850   dw_die_ref orig;
9851   dw_die_ref copy;
9852 };
9853
9854 /* Routines to manipulate hash table of copied declarations.  */
9855
9856 static hashval_t
9857 htab_decl_hash (const void *of)
9858 {
9859   const struct decl_table_entry *const entry =
9860     (const struct decl_table_entry *) of;
9861
9862   return htab_hash_pointer (entry->orig);
9863 }
9864
9865 static int
9866 htab_decl_eq (const void *of1, const void *of2)
9867 {
9868   const struct decl_table_entry *const entry1 =
9869     (const struct decl_table_entry *) of1;
9870   const struct die_struct *const entry2 = (const struct die_struct *) of2;
9871
9872   return entry1->orig == entry2;
9873 }
9874
9875 static void
9876 htab_decl_del (void *what)
9877 {
9878   struct decl_table_entry *entry = (struct decl_table_entry *) what;
9879
9880   free (entry);
9881 }
9882
9883 /* Copy DIE and its ancestors, up to, but not including, the compile unit
9884    or type unit entry, to a new tree.  Adds the new tree to UNIT and returns
9885    a pointer to the copy of DIE.  If DECL_TABLE is provided, it is used
9886    to check if the ancestor has already been copied into UNIT.  */
9887
9888 static dw_die_ref
9889 copy_ancestor_tree (dw_die_ref unit, dw_die_ref die, htab_t decl_table)
9890 {
9891   dw_die_ref parent = die->die_parent;
9892   dw_die_ref new_parent = unit;
9893   dw_die_ref copy;
9894   void **slot = NULL;
9895   struct decl_table_entry *entry = NULL;
9896
9897   if (decl_table)
9898     {
9899       /* Check if the entry has already been copied to UNIT.  */
9900       slot = htab_find_slot_with_hash (decl_table, die,
9901                                        htab_hash_pointer (die), INSERT);
9902       if (*slot != HTAB_EMPTY_ENTRY)
9903         {
9904           entry = (struct decl_table_entry *) *slot;
9905           return entry->copy;
9906         }
9907
9908       /* Record in DECL_TABLE that DIE has been copied to UNIT.  */
9909       entry = XCNEW (struct decl_table_entry);
9910       entry->orig = die;
9911       entry->copy = NULL;
9912       *slot = entry;
9913     }
9914
9915   if (parent != NULL)
9916     {
9917       dw_die_ref spec = get_AT_ref (parent, DW_AT_specification);
9918       if (spec != NULL)
9919         parent = spec;
9920       if (parent->die_tag != DW_TAG_compile_unit
9921           && parent->die_tag != DW_TAG_type_unit)
9922         new_parent = copy_ancestor_tree (unit, parent, decl_table);
9923     }
9924
9925   copy = clone_as_declaration (die);
9926   add_child_die (new_parent, copy);
9927
9928   if (decl_table != NULL)
9929     {
9930       /* Make sure the copy is marked as part of the type unit.  */
9931       copy->die_mark = 1;
9932       /* Record the pointer to the copy.  */
9933       entry->copy = copy;
9934     }
9935
9936   return copy;
9937 }
9938
9939 /* Walk the DIE and its children, looking for references to incomplete
9940    or trivial types that are unmarked (i.e., that are not in the current
9941    type_unit).  */
9942
9943 static void
9944 copy_decls_walk (dw_die_ref unit, dw_die_ref die, htab_t decl_table)
9945 {
9946   dw_die_ref c;
9947   dw_attr_ref a;
9948   unsigned ix;
9949
9950   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
9951     {
9952       if (AT_class (a) == dw_val_class_die_ref)
9953         {
9954           dw_die_ref targ = AT_ref (a);
9955           comdat_type_node_ref type_node = targ->die_id.die_type_node;
9956           void **slot;
9957           struct decl_table_entry *entry;
9958
9959           if (targ->die_mark != 0 || type_node != NULL)
9960             continue;
9961
9962           slot = htab_find_slot_with_hash (decl_table, targ,
9963                                            htab_hash_pointer (targ), INSERT);
9964
9965           if (*slot != HTAB_EMPTY_ENTRY)
9966             {
9967               /* TARG has already been copied, so we just need to
9968                  modify the reference to point to the copy.  */
9969               entry = (struct decl_table_entry *) *slot;
9970               a->dw_attr_val.v.val_die_ref.die = entry->copy;
9971             }
9972           else
9973             {
9974               dw_die_ref parent = unit;
9975               dw_die_ref copy = clone_tree (targ);
9976
9977               /* Make sure the cloned tree is marked as part of the
9978                  type unit.  */
9979               mark_dies (copy);
9980
9981               /* Record in DECL_TABLE that TARG has been copied.
9982                  Need to do this now, before the recursive call,
9983                  because DECL_TABLE may be expanded and SLOT
9984                  would no longer be a valid pointer.  */
9985               entry = XCNEW (struct decl_table_entry);
9986               entry->orig = targ;
9987               entry->copy = copy;
9988               *slot = entry;
9989
9990               /* If TARG has surrounding context, copy its ancestor tree
9991                  into the new type unit.  */
9992               if (targ->die_parent != NULL
9993                   && targ->die_parent->die_tag != DW_TAG_compile_unit
9994                   && targ->die_parent->die_tag != DW_TAG_type_unit)
9995                 parent = copy_ancestor_tree (unit, targ->die_parent,
9996                                              decl_table);
9997
9998               add_child_die (parent, copy);
9999               a->dw_attr_val.v.val_die_ref.die = copy;
10000
10001               /* Make sure the newly-copied DIE is walked.  If it was
10002                  installed in a previously-added context, it won't
10003                  get visited otherwise.  */
10004               if (parent != unit)
10005                 copy_decls_walk (unit, parent, decl_table);
10006             }
10007         }
10008     }
10009
10010   FOR_EACH_CHILD (die, c, copy_decls_walk (unit, c, decl_table));
10011 }
10012
10013 /* Copy declarations for "unworthy" types into the new comdat section.
10014    Incomplete types, modified types, and certain other types aren't broken
10015    out into comdat sections of their own, so they don't have a signature,
10016    and we need to copy the declaration into the same section so that we
10017    don't have an external reference.  */
10018
10019 static void
10020 copy_decls_for_unworthy_types (dw_die_ref unit)
10021 {
10022   htab_t decl_table;
10023
10024   mark_dies (unit);
10025   decl_table = htab_create (10, htab_decl_hash, htab_decl_eq, htab_decl_del);
10026   copy_decls_walk (unit, unit, decl_table);
10027   htab_delete (decl_table);
10028   unmark_dies (unit);
10029 }
10030
10031 /* Traverse the DIE and add a sibling attribute if it may have the
10032    effect of speeding up access to siblings.  To save some space,
10033    avoid generating sibling attributes for DIE's without children.  */
10034
10035 static void
10036 add_sibling_attributes (dw_die_ref die)
10037 {
10038   dw_die_ref c;
10039
10040   if (! die->die_child)
10041     return;
10042
10043   if (die->die_parent && die != die->die_parent->die_child)
10044     add_AT_die_ref (die, DW_AT_sibling, die->die_sib);
10045
10046   FOR_EACH_CHILD (die, c, add_sibling_attributes (c));
10047 }
10048
10049 /* Output all location lists for the DIE and its children.  */
10050
10051 static void
10052 output_location_lists (dw_die_ref die)
10053 {
10054   dw_die_ref c;
10055   dw_attr_ref a;
10056   unsigned ix;
10057
10058   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
10059     if (AT_class (a) == dw_val_class_loc_list)
10060       output_loc_list (AT_loc_list (a));
10061
10062   FOR_EACH_CHILD (die, c, output_location_lists (c));
10063 }
10064
10065 /* The format of each DIE (and its attribute value pairs) is encoded in an
10066    abbreviation table.  This routine builds the abbreviation table and assigns
10067    a unique abbreviation id for each abbreviation entry.  The children of each
10068    die are visited recursively.  */
10069
10070 static void
10071 build_abbrev_table (dw_die_ref die)
10072 {
10073   unsigned long abbrev_id;
10074   unsigned int n_alloc;
10075   dw_die_ref c;
10076   dw_attr_ref a;
10077   unsigned ix;
10078
10079   /* Scan the DIE references, and mark as external any that refer to
10080      DIEs from other CUs (i.e. those which are not marked).  */
10081   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
10082     if (AT_class (a) == dw_val_class_die_ref
10083         && AT_ref (a)->die_mark == 0)
10084       {
10085         gcc_assert (dwarf_version >= 4 || AT_ref (a)->die_id.die_symbol);
10086         set_AT_ref_external (a, 1);
10087       }
10088
10089   for (abbrev_id = 1; abbrev_id < abbrev_die_table_in_use; ++abbrev_id)
10090     {
10091       dw_die_ref abbrev = abbrev_die_table[abbrev_id];
10092       dw_attr_ref die_a, abbrev_a;
10093       unsigned ix;
10094       bool ok = true;
10095
10096       if (abbrev->die_tag != die->die_tag)
10097         continue;
10098       if ((abbrev->die_child != NULL) != (die->die_child != NULL))
10099         continue;
10100
10101       if (VEC_length (dw_attr_node, abbrev->die_attr)
10102           != VEC_length (dw_attr_node, die->die_attr))
10103         continue;
10104
10105       for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, die_a); ix++)
10106         {
10107           abbrev_a = VEC_index (dw_attr_node, abbrev->die_attr, ix);
10108           if ((abbrev_a->dw_attr != die_a->dw_attr)
10109               || (value_format (abbrev_a) != value_format (die_a)))
10110             {
10111               ok = false;
10112               break;
10113             }
10114         }
10115       if (ok)
10116         break;
10117     }
10118
10119   if (abbrev_id >= abbrev_die_table_in_use)
10120     {
10121       if (abbrev_die_table_in_use >= abbrev_die_table_allocated)
10122         {
10123           n_alloc = abbrev_die_table_allocated + ABBREV_DIE_TABLE_INCREMENT;
10124           abbrev_die_table = GGC_RESIZEVEC (dw_die_ref, abbrev_die_table,
10125                                             n_alloc);
10126
10127           memset (&abbrev_die_table[abbrev_die_table_allocated], 0,
10128                  (n_alloc - abbrev_die_table_allocated) * sizeof (dw_die_ref));
10129           abbrev_die_table_allocated = n_alloc;
10130         }
10131
10132       ++abbrev_die_table_in_use;
10133       abbrev_die_table[abbrev_id] = die;
10134     }
10135
10136   die->die_abbrev = abbrev_id;
10137   FOR_EACH_CHILD (die, c, build_abbrev_table (c));
10138 }
10139 \f
10140 /* Return the power-of-two number of bytes necessary to represent VALUE.  */
10141
10142 static int
10143 constant_size (unsigned HOST_WIDE_INT value)
10144 {
10145   int log;
10146
10147   if (value == 0)
10148     log = 0;
10149   else
10150     log = floor_log2 (value);
10151
10152   log = log / 8;
10153   log = 1 << (floor_log2 (log) + 1);
10154
10155   return log;
10156 }
10157
10158 /* Return the size of a DIE as it is represented in the
10159    .debug_info section.  */
10160
10161 static unsigned long
10162 size_of_die (dw_die_ref die)
10163 {
10164   unsigned long size = 0;
10165   dw_attr_ref a;
10166   unsigned ix;
10167
10168   size += size_of_uleb128 (die->die_abbrev);
10169   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
10170     {
10171       switch (AT_class (a))
10172         {
10173         case dw_val_class_addr:
10174           size += DWARF2_ADDR_SIZE;
10175           break;
10176         case dw_val_class_offset:
10177           size += DWARF_OFFSET_SIZE;
10178           break;
10179         case dw_val_class_loc:
10180           {
10181             unsigned long lsize = size_of_locs (AT_loc (a));
10182
10183             /* Block length.  */
10184             if (dwarf_version >= 4)
10185               size += size_of_uleb128 (lsize);
10186             else
10187               size += constant_size (lsize);
10188             size += lsize;
10189           }
10190           break;
10191         case dw_val_class_loc_list:
10192           size += DWARF_OFFSET_SIZE;
10193           break;
10194         case dw_val_class_range_list:
10195           size += DWARF_OFFSET_SIZE;
10196           break;
10197         case dw_val_class_const:
10198           size += size_of_sleb128 (AT_int (a));
10199           break;
10200         case dw_val_class_unsigned_const:
10201           size += constant_size (AT_unsigned (a));
10202           break;
10203         case dw_val_class_const_double:
10204           size += 2 * HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR;
10205           if (HOST_BITS_PER_WIDE_INT >= 64)
10206             size++; /* block */
10207           break;
10208         case dw_val_class_vec:
10209           size += constant_size (a->dw_attr_val.v.val_vec.length
10210                                  * a->dw_attr_val.v.val_vec.elt_size)
10211                   + a->dw_attr_val.v.val_vec.length
10212                     * a->dw_attr_val.v.val_vec.elt_size; /* block */
10213           break;
10214         case dw_val_class_flag:
10215           if (dwarf_version >= 4)
10216             /* Currently all add_AT_flag calls pass in 1 as last argument,
10217                so DW_FORM_flag_present can be used.  If that ever changes,
10218                we'll need to use DW_FORM_flag and have some optimization
10219                in build_abbrev_table that will change those to
10220                DW_FORM_flag_present if it is set to 1 in all DIEs using
10221                the same abbrev entry.  */
10222             gcc_assert (a->dw_attr_val.v.val_flag == 1);
10223           else
10224             size += 1;
10225           break;
10226         case dw_val_class_die_ref:
10227           if (AT_ref_external (a))
10228             {
10229               /* In DWARF4, we use DW_FORM_sig8; for earlier versions
10230                  we use DW_FORM_ref_addr.  In DWARF2, DW_FORM_ref_addr
10231                  is sized by target address length, whereas in DWARF3
10232                  it's always sized as an offset.  */
10233               if (dwarf_version >= 4)
10234                 size += DWARF_TYPE_SIGNATURE_SIZE;
10235               else if (dwarf_version == 2)
10236                 size += DWARF2_ADDR_SIZE;
10237               else
10238                 size += DWARF_OFFSET_SIZE;
10239             }
10240           else
10241             size += DWARF_OFFSET_SIZE;
10242           break;
10243         case dw_val_class_fde_ref:
10244           size += DWARF_OFFSET_SIZE;
10245           break;
10246         case dw_val_class_lbl_id:
10247           size += DWARF2_ADDR_SIZE;
10248           break;
10249         case dw_val_class_lineptr:
10250         case dw_val_class_macptr:
10251           size += DWARF_OFFSET_SIZE;
10252           break;
10253         case dw_val_class_str:
10254           if (AT_string_form (a) == DW_FORM_strp)
10255             size += DWARF_OFFSET_SIZE;
10256           else
10257             size += strlen (a->dw_attr_val.v.val_str->str) + 1;
10258           break;
10259         case dw_val_class_file:
10260           size += constant_size (maybe_emit_file (a->dw_attr_val.v.val_file));
10261           break;
10262         case dw_val_class_data8:
10263           size += 8;
10264           break;
10265         default:
10266           gcc_unreachable ();
10267         }
10268     }
10269
10270   return size;
10271 }
10272
10273 /* Size the debugging information associated with a given DIE.  Visits the
10274    DIE's children recursively.  Updates the global variable next_die_offset, on
10275    each time through.  Uses the current value of next_die_offset to update the
10276    die_offset field in each DIE.  */
10277
10278 static void
10279 calc_die_sizes (dw_die_ref die)
10280 {
10281   dw_die_ref c;
10282
10283   die->die_offset = next_die_offset;
10284   next_die_offset += size_of_die (die);
10285
10286   FOR_EACH_CHILD (die, c, calc_die_sizes (c));
10287
10288   if (die->die_child != NULL)
10289     /* Count the null byte used to terminate sibling lists.  */
10290     next_die_offset += 1;
10291 }
10292
10293 /* Set the marks for a die and its children.  We do this so
10294    that we know whether or not a reference needs to use FORM_ref_addr; only
10295    DIEs in the same CU will be marked.  We used to clear out the offset
10296    and use that as the flag, but ran into ordering problems.  */
10297
10298 static void
10299 mark_dies (dw_die_ref die)
10300 {
10301   dw_die_ref c;
10302
10303   gcc_assert (!die->die_mark);
10304
10305   die->die_mark = 1;
10306   FOR_EACH_CHILD (die, c, mark_dies (c));
10307 }
10308
10309 /* Clear the marks for a die and its children.  */
10310
10311 static void
10312 unmark_dies (dw_die_ref die)
10313 {
10314   dw_die_ref c;
10315
10316   if (dwarf_version < 4)
10317     gcc_assert (die->die_mark);
10318
10319   die->die_mark = 0;
10320   FOR_EACH_CHILD (die, c, unmark_dies (c));
10321 }
10322
10323 /* Clear the marks for a die, its children and referred dies.  */
10324
10325 static void
10326 unmark_all_dies (dw_die_ref die)
10327 {
10328   dw_die_ref c;
10329   dw_attr_ref a;
10330   unsigned ix;
10331
10332   if (!die->die_mark)
10333     return;
10334   die->die_mark = 0;
10335
10336   FOR_EACH_CHILD (die, c, unmark_all_dies (c));
10337
10338   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
10339     if (AT_class (a) == dw_val_class_die_ref)
10340       unmark_all_dies (AT_ref (a));
10341 }
10342
10343 /* Return the size of the .debug_pubnames or .debug_pubtypes table
10344    generated for the compilation unit.  */
10345
10346 static unsigned long
10347 size_of_pubnames (VEC (pubname_entry, gc) * names)
10348 {
10349   unsigned long size;
10350   unsigned i;
10351   pubname_ref p;
10352
10353   size = DWARF_PUBNAMES_HEADER_SIZE;
10354   for (i = 0; VEC_iterate (pubname_entry, names, i, p); i++)
10355     if (names != pubtype_table
10356         || p->die->die_offset != 0
10357         || !flag_eliminate_unused_debug_types)
10358       size += strlen (p->name) + DWARF_OFFSET_SIZE + 1;
10359
10360   size += DWARF_OFFSET_SIZE;
10361   return size;
10362 }
10363
10364 /* Return the size of the information in the .debug_aranges section.  */
10365
10366 static unsigned long
10367 size_of_aranges (void)
10368 {
10369   unsigned long size;
10370
10371   size = DWARF_ARANGES_HEADER_SIZE;
10372
10373   /* Count the address/length pair for this compilation unit.  */
10374   if (text_section_used)
10375     size += 2 * DWARF2_ADDR_SIZE;
10376   if (cold_text_section_used)
10377     size += 2 * DWARF2_ADDR_SIZE;
10378   size += 2 * DWARF2_ADDR_SIZE * arange_table_in_use;
10379
10380   /* Count the two zero words used to terminated the address range table.  */
10381   size += 2 * DWARF2_ADDR_SIZE;
10382   return size;
10383 }
10384 \f
10385 /* Select the encoding of an attribute value.  */
10386
10387 static enum dwarf_form
10388 value_format (dw_attr_ref a)
10389 {
10390   switch (a->dw_attr_val.val_class)
10391     {
10392     case dw_val_class_addr:
10393       /* Only very few attributes allow DW_FORM_addr.  */
10394       switch (a->dw_attr)
10395         {
10396         case DW_AT_low_pc:
10397         case DW_AT_high_pc:
10398         case DW_AT_entry_pc:
10399         case DW_AT_trampoline:
10400           return DW_FORM_addr;
10401         default:
10402           break;
10403         }
10404       switch (DWARF2_ADDR_SIZE)
10405         {
10406         case 1:
10407           return DW_FORM_data1;
10408         case 2:
10409           return DW_FORM_data2;
10410         case 4:
10411           return DW_FORM_data4;
10412         case 8:
10413           return DW_FORM_data8;
10414         default:
10415           gcc_unreachable ();
10416         }
10417     case dw_val_class_range_list:
10418     case dw_val_class_loc_list:
10419       if (dwarf_version >= 4)
10420         return DW_FORM_sec_offset;
10421       /* FALLTHRU */
10422     case dw_val_class_offset:
10423       switch (DWARF_OFFSET_SIZE)
10424         {
10425         case 4:
10426           return DW_FORM_data4;
10427         case 8:
10428           return DW_FORM_data8;
10429         default:
10430           gcc_unreachable ();
10431         }
10432     case dw_val_class_loc:
10433       if (dwarf_version >= 4)
10434         return DW_FORM_exprloc;
10435       switch (constant_size (size_of_locs (AT_loc (a))))
10436         {
10437         case 1:
10438           return DW_FORM_block1;
10439         case 2:
10440           return DW_FORM_block2;
10441         default:
10442           gcc_unreachable ();
10443         }
10444     case dw_val_class_const:
10445       return DW_FORM_sdata;
10446     case dw_val_class_unsigned_const:
10447       switch (constant_size (AT_unsigned (a)))
10448         {
10449         case 1:
10450           return DW_FORM_data1;
10451         case 2:
10452           return DW_FORM_data2;
10453         case 4:
10454           return DW_FORM_data4;
10455         case 8:
10456           return DW_FORM_data8;
10457         default:
10458           gcc_unreachable ();
10459         }
10460     case dw_val_class_const_double:
10461       switch (HOST_BITS_PER_WIDE_INT)
10462         {
10463         case 8:
10464           return DW_FORM_data2;
10465         case 16:
10466           return DW_FORM_data4;
10467         case 32:
10468           return DW_FORM_data8;
10469         case 64:
10470         default:
10471           return DW_FORM_block1;
10472         }
10473     case dw_val_class_vec:
10474       switch (constant_size (a->dw_attr_val.v.val_vec.length
10475                              * a->dw_attr_val.v.val_vec.elt_size))
10476         {
10477         case 1:
10478           return DW_FORM_block1;
10479         case 2:
10480           return DW_FORM_block2;
10481         case 4:
10482           return DW_FORM_block4;
10483         default:
10484           gcc_unreachable ();
10485         }
10486     case dw_val_class_flag:
10487       if (dwarf_version >= 4)
10488         {
10489           /* Currently all add_AT_flag calls pass in 1 as last argument,
10490              so DW_FORM_flag_present can be used.  If that ever changes,
10491              we'll need to use DW_FORM_flag and have some optimization
10492              in build_abbrev_table that will change those to
10493              DW_FORM_flag_present if it is set to 1 in all DIEs using
10494              the same abbrev entry.  */
10495           gcc_assert (a->dw_attr_val.v.val_flag == 1);
10496           return DW_FORM_flag_present;
10497         }
10498       return DW_FORM_flag;
10499     case dw_val_class_die_ref:
10500       if (AT_ref_external (a))
10501         return dwarf_version >= 4 ? DW_FORM_sig8 : DW_FORM_ref_addr;
10502       else
10503         return DW_FORM_ref;
10504     case dw_val_class_fde_ref:
10505       return DW_FORM_data;
10506     case dw_val_class_lbl_id:
10507       return DW_FORM_addr;
10508     case dw_val_class_lineptr:
10509     case dw_val_class_macptr:
10510       return dwarf_version >= 4 ? DW_FORM_sec_offset : DW_FORM_data;
10511     case dw_val_class_str:
10512       return AT_string_form (a);
10513     case dw_val_class_file:
10514       switch (constant_size (maybe_emit_file (a->dw_attr_val.v.val_file)))
10515         {
10516         case 1:
10517           return DW_FORM_data1;
10518         case 2:
10519           return DW_FORM_data2;
10520         case 4:
10521           return DW_FORM_data4;
10522         default:
10523           gcc_unreachable ();
10524         }
10525
10526     case dw_val_class_data8:
10527       return DW_FORM_data8;
10528
10529     default:
10530       gcc_unreachable ();
10531     }
10532 }
10533
10534 /* Output the encoding of an attribute value.  */
10535
10536 static void
10537 output_value_format (dw_attr_ref a)
10538 {
10539   enum dwarf_form form = value_format (a);
10540
10541   dw2_asm_output_data_uleb128 (form, "(%s)", dwarf_form_name (form));
10542 }
10543
10544 /* Output the .debug_abbrev section which defines the DIE abbreviation
10545    table.  */
10546
10547 static void
10548 output_abbrev_section (void)
10549 {
10550   unsigned long abbrev_id;
10551
10552   for (abbrev_id = 1; abbrev_id < abbrev_die_table_in_use; ++abbrev_id)
10553     {
10554       dw_die_ref abbrev = abbrev_die_table[abbrev_id];
10555       unsigned ix;
10556       dw_attr_ref a_attr;
10557
10558       dw2_asm_output_data_uleb128 (abbrev_id, "(abbrev code)");
10559       dw2_asm_output_data_uleb128 (abbrev->die_tag, "(TAG: %s)",
10560                                    dwarf_tag_name (abbrev->die_tag));
10561
10562       if (abbrev->die_child != NULL)
10563         dw2_asm_output_data (1, DW_children_yes, "DW_children_yes");
10564       else
10565         dw2_asm_output_data (1, DW_children_no, "DW_children_no");
10566
10567       for (ix = 0; VEC_iterate (dw_attr_node, abbrev->die_attr, ix, a_attr);
10568            ix++)
10569         {
10570           dw2_asm_output_data_uleb128 (a_attr->dw_attr, "(%s)",
10571                                        dwarf_attr_name (a_attr->dw_attr));
10572           output_value_format (a_attr);
10573         }
10574
10575       dw2_asm_output_data (1, 0, NULL);
10576       dw2_asm_output_data (1, 0, NULL);
10577     }
10578
10579   /* Terminate the table.  */
10580   dw2_asm_output_data (1, 0, NULL);
10581 }
10582
10583 /* Output a symbol we can use to refer to this DIE from another CU.  */
10584
10585 static inline void
10586 output_die_symbol (dw_die_ref die)
10587 {
10588   char *sym = die->die_id.die_symbol;
10589
10590   if (sym == 0)
10591     return;
10592
10593   if (strncmp (sym, DIE_LABEL_PREFIX, sizeof (DIE_LABEL_PREFIX) - 1) == 0)
10594     /* We make these global, not weak; if the target doesn't support
10595        .linkonce, it doesn't support combining the sections, so debugging
10596        will break.  */
10597     targetm.asm_out.globalize_label (asm_out_file, sym);
10598
10599   ASM_OUTPUT_LABEL (asm_out_file, sym);
10600 }
10601
10602 /* Return a new location list, given the begin and end range, and the
10603    expression.  */
10604
10605 static inline dw_loc_list_ref
10606 new_loc_list (dw_loc_descr_ref expr, const char *begin, const char *end,
10607               const char *section)
10608 {
10609   dw_loc_list_ref retlist = GGC_CNEW (dw_loc_list_node);
10610
10611   retlist->begin = begin;
10612   retlist->end = end;
10613   retlist->expr = expr;
10614   retlist->section = section;
10615
10616   return retlist;
10617 }
10618
10619 /* Generate a new internal symbol for this location list node, if it
10620    hasn't got one yet.  */
10621
10622 static inline void
10623 gen_llsym (dw_loc_list_ref list)
10624 {
10625   gcc_assert (!list->ll_symbol);
10626   list->ll_symbol = gen_internal_sym ("LLST");
10627 }
10628
10629 /* Output the location list given to us.  */
10630
10631 static void
10632 output_loc_list (dw_loc_list_ref list_head)
10633 {
10634   dw_loc_list_ref curr = list_head;
10635
10636   ASM_OUTPUT_LABEL (asm_out_file, list_head->ll_symbol);
10637
10638   /* Walk the location list, and output each range + expression.  */
10639   for (curr = list_head; curr != NULL; curr = curr->dw_loc_next)
10640     {
10641       unsigned long size;
10642       /* Don't output an entry that starts and ends at the same address.  */
10643       if (strcmp (curr->begin, curr->end) == 0)
10644         continue;
10645       if (!have_multiple_function_sections)
10646         {
10647           dw2_asm_output_delta (DWARF2_ADDR_SIZE, curr->begin, curr->section,
10648                                 "Location list begin address (%s)",
10649                                 list_head->ll_symbol);
10650           dw2_asm_output_delta (DWARF2_ADDR_SIZE, curr->end, curr->section,
10651                                 "Location list end address (%s)",
10652                                 list_head->ll_symbol);
10653         }
10654       else
10655         {
10656           dw2_asm_output_addr (DWARF2_ADDR_SIZE, curr->begin,
10657                                "Location list begin address (%s)",
10658                                list_head->ll_symbol);
10659           dw2_asm_output_addr (DWARF2_ADDR_SIZE, curr->end,
10660                                "Location list end address (%s)",
10661                                list_head->ll_symbol);
10662         }
10663       size = size_of_locs (curr->expr);
10664
10665       /* Output the block length for this list of location operations.  */
10666       gcc_assert (size <= 0xffff);
10667       dw2_asm_output_data (2, size, "%s", "Location expression size");
10668
10669       output_loc_sequence (curr->expr);
10670     }
10671
10672   dw2_asm_output_data (DWARF2_ADDR_SIZE, 0,
10673                        "Location list terminator begin (%s)",
10674                        list_head->ll_symbol);
10675   dw2_asm_output_data (DWARF2_ADDR_SIZE, 0,
10676                        "Location list terminator end (%s)",
10677                        list_head->ll_symbol);
10678 }
10679
10680 /* Output a type signature.  */
10681
10682 static inline void
10683 output_signature (const char *sig, const char *name)
10684 {
10685   int i;
10686
10687   for (i = 0; i < DWARF_TYPE_SIGNATURE_SIZE; i++)
10688     dw2_asm_output_data (1, sig[i], i == 0 ? "%s" : NULL, name);
10689 }
10690
10691 /* Output the DIE and its attributes.  Called recursively to generate
10692    the definitions of each child DIE.  */
10693
10694 static void
10695 output_die (dw_die_ref die)
10696 {
10697   dw_attr_ref a;
10698   dw_die_ref c;
10699   unsigned long size;
10700   unsigned ix;
10701
10702   /* If someone in another CU might refer to us, set up a symbol for
10703      them to point to.  */
10704   if (dwarf_version < 4 && die->die_id.die_symbol)
10705     output_die_symbol (die);
10706
10707   dw2_asm_output_data_uleb128 (die->die_abbrev, "(DIE (%#lx) %s)",
10708                                (unsigned long)die->die_offset,
10709                                dwarf_tag_name (die->die_tag));
10710
10711   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
10712     {
10713       const char *name = dwarf_attr_name (a->dw_attr);
10714
10715       switch (AT_class (a))
10716         {
10717         case dw_val_class_addr:
10718           dw2_asm_output_addr_rtx (DWARF2_ADDR_SIZE, AT_addr (a), "%s", name);
10719           break;
10720
10721         case dw_val_class_offset:
10722           dw2_asm_output_data (DWARF_OFFSET_SIZE, a->dw_attr_val.v.val_offset,
10723                                "%s", name);
10724           break;
10725
10726         case dw_val_class_range_list:
10727           {
10728             char *p = strchr (ranges_section_label, '\0');
10729
10730             sprintf (p, "+" HOST_WIDE_INT_PRINT_HEX,
10731                      a->dw_attr_val.v.val_offset);
10732             dw2_asm_output_offset (DWARF_OFFSET_SIZE, ranges_section_label,
10733                                    debug_ranges_section, "%s", name);
10734             *p = '\0';
10735           }
10736           break;
10737
10738         case dw_val_class_loc:
10739           size = size_of_locs (AT_loc (a));
10740
10741           /* Output the block length for this list of location operations.  */
10742           if (dwarf_version >= 4)
10743             dw2_asm_output_data_uleb128 (size, "%s", name);
10744           else
10745             dw2_asm_output_data (constant_size (size), size, "%s", name);
10746
10747           output_loc_sequence (AT_loc (a));
10748           break;
10749
10750         case dw_val_class_const:
10751           /* ??? It would be slightly more efficient to use a scheme like is
10752              used for unsigned constants below, but gdb 4.x does not sign
10753              extend.  Gdb 5.x does sign extend.  */
10754           dw2_asm_output_data_sleb128 (AT_int (a), "%s", name);
10755           break;
10756
10757         case dw_val_class_unsigned_const:
10758           dw2_asm_output_data (constant_size (AT_unsigned (a)),
10759                                AT_unsigned (a), "%s", name);
10760           break;
10761
10762         case dw_val_class_const_double:
10763           {
10764             unsigned HOST_WIDE_INT first, second;
10765
10766             if (HOST_BITS_PER_WIDE_INT >= 64)
10767               dw2_asm_output_data (1,
10768                                    2 * HOST_BITS_PER_WIDE_INT
10769                                    / HOST_BITS_PER_CHAR,
10770                                    NULL);
10771
10772             if (WORDS_BIG_ENDIAN)
10773               {
10774                 first = a->dw_attr_val.v.val_double.high;
10775                 second = a->dw_attr_val.v.val_double.low;
10776               }
10777             else
10778               {
10779                 first = a->dw_attr_val.v.val_double.low;
10780                 second = a->dw_attr_val.v.val_double.high;
10781               }
10782
10783             dw2_asm_output_data (HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR,
10784                                  first, name);
10785             dw2_asm_output_data (HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR,
10786                                  second, NULL);
10787           }
10788           break;
10789
10790         case dw_val_class_vec:
10791           {
10792             unsigned int elt_size = a->dw_attr_val.v.val_vec.elt_size;
10793             unsigned int len = a->dw_attr_val.v.val_vec.length;
10794             unsigned int i;
10795             unsigned char *p;
10796
10797             dw2_asm_output_data (constant_size (len * elt_size),
10798                                  len * elt_size, "%s", name);
10799             if (elt_size > sizeof (HOST_WIDE_INT))
10800               {
10801                 elt_size /= 2;
10802                 len *= 2;
10803               }
10804             for (i = 0, p = a->dw_attr_val.v.val_vec.array;
10805                  i < len;
10806                  i++, p += elt_size)
10807               dw2_asm_output_data (elt_size, extract_int (p, elt_size),
10808                                    "fp or vector constant word %u", i);
10809             break;
10810           }
10811
10812         case dw_val_class_flag:
10813           if (dwarf_version >= 4)
10814             {
10815               /* Currently all add_AT_flag calls pass in 1 as last argument,
10816                  so DW_FORM_flag_present can be used.  If that ever changes,
10817                  we'll need to use DW_FORM_flag and have some optimization
10818                  in build_abbrev_table that will change those to
10819                  DW_FORM_flag_present if it is set to 1 in all DIEs using
10820                  the same abbrev entry.  */
10821               gcc_assert (AT_flag (a) == 1);
10822               if (flag_debug_asm)
10823                 fprintf (asm_out_file, "\t\t\t%s %s\n",
10824                          ASM_COMMENT_START, name);
10825               break;
10826             }
10827           dw2_asm_output_data (1, AT_flag (a), "%s", name);
10828           break;
10829
10830         case dw_val_class_loc_list:
10831           {
10832             char *sym = AT_loc_list (a)->ll_symbol;
10833
10834             gcc_assert (sym);
10835             dw2_asm_output_offset (DWARF_OFFSET_SIZE, sym, debug_loc_section,
10836                                    "%s", name);
10837           }
10838           break;
10839
10840         case dw_val_class_die_ref:
10841           if (AT_ref_external (a))
10842             {
10843               if (dwarf_version >= 4)
10844                 {
10845                   comdat_type_node_ref type_node =
10846                     AT_ref (a)->die_id.die_type_node;
10847
10848                   gcc_assert (type_node);
10849                   output_signature (type_node->signature, name);
10850                 }
10851               else
10852                 {
10853                   char *sym = AT_ref (a)->die_id.die_symbol;
10854                   int size;
10855
10856                   gcc_assert (sym);
10857                   /* In DWARF2, DW_FORM_ref_addr is sized by target address
10858                      length, whereas in DWARF3 it's always sized as an
10859                      offset.  */
10860                   if (dwarf_version == 2)
10861                     size = DWARF2_ADDR_SIZE;
10862                   else
10863                     size = DWARF_OFFSET_SIZE;
10864                   dw2_asm_output_offset (size, sym, debug_info_section, "%s",
10865                                          name);
10866                 }
10867             }
10868           else
10869             {
10870               gcc_assert (AT_ref (a)->die_offset);
10871               dw2_asm_output_data (DWARF_OFFSET_SIZE, AT_ref (a)->die_offset,
10872                                    "%s", name);
10873             }
10874           break;
10875
10876         case dw_val_class_fde_ref:
10877           {
10878             char l1[20];
10879
10880             ASM_GENERATE_INTERNAL_LABEL (l1, FDE_LABEL,
10881                                          a->dw_attr_val.v.val_fde_index * 2);
10882             dw2_asm_output_offset (DWARF_OFFSET_SIZE, l1, debug_frame_section,
10883                                    "%s", name);
10884           }
10885           break;
10886
10887         case dw_val_class_lbl_id:
10888           dw2_asm_output_addr (DWARF2_ADDR_SIZE, AT_lbl (a), "%s", name);
10889           break;
10890
10891         case dw_val_class_lineptr:
10892           dw2_asm_output_offset (DWARF_OFFSET_SIZE, AT_lbl (a),
10893                                  debug_line_section, "%s", name);
10894           break;
10895
10896         case dw_val_class_macptr:
10897           dw2_asm_output_offset (DWARF_OFFSET_SIZE, AT_lbl (a),
10898                                  debug_macinfo_section, "%s", name);
10899           break;
10900
10901         case dw_val_class_str:
10902           if (AT_string_form (a) == DW_FORM_strp)
10903             dw2_asm_output_offset (DWARF_OFFSET_SIZE,
10904                                    a->dw_attr_val.v.val_str->label,
10905                                    debug_str_section,
10906                                    "%s: \"%s\"", name, AT_string (a));
10907           else
10908             dw2_asm_output_nstring (AT_string (a), -1, "%s", name);
10909           break;
10910
10911         case dw_val_class_file:
10912           {
10913             int f = maybe_emit_file (a->dw_attr_val.v.val_file);
10914
10915             dw2_asm_output_data (constant_size (f), f, "%s (%s)", name,
10916                                  a->dw_attr_val.v.val_file->filename);
10917             break;
10918           }
10919
10920         case dw_val_class_data8:
10921           {
10922             int i;
10923
10924             for (i = 0; i < 8; i++)
10925               dw2_asm_output_data (1, a->dw_attr_val.v.val_data8[i],
10926                                    i == 0 ? "%s" : NULL, name);
10927             break;
10928           }
10929
10930         default:
10931           gcc_unreachable ();
10932         }
10933     }
10934
10935   FOR_EACH_CHILD (die, c, output_die (c));
10936
10937   /* Add null byte to terminate sibling list.  */
10938   if (die->die_child != NULL)
10939     dw2_asm_output_data (1, 0, "end of children of DIE %#lx",
10940                          (unsigned long) die->die_offset);
10941 }
10942
10943 /* Output the compilation unit that appears at the beginning of the
10944    .debug_info section, and precedes the DIE descriptions.  */
10945
10946 static void
10947 output_compilation_unit_header (void)
10948 {
10949   int ver = dwarf_version;
10950
10951   if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
10952     dw2_asm_output_data (4, 0xffffffff,
10953       "Initial length escape value indicating 64-bit DWARF extension");
10954   dw2_asm_output_data (DWARF_OFFSET_SIZE,
10955                        next_die_offset - DWARF_INITIAL_LENGTH_SIZE,
10956                        "Length of Compilation Unit Info");
10957   dw2_asm_output_data (2, ver, "DWARF version number");
10958   dw2_asm_output_offset (DWARF_OFFSET_SIZE, abbrev_section_label,
10959                          debug_abbrev_section,
10960                          "Offset Into Abbrev. Section");
10961   dw2_asm_output_data (1, DWARF2_ADDR_SIZE, "Pointer Size (in bytes)");
10962 }
10963
10964 /* Output the compilation unit DIE and its children.  */
10965
10966 static void
10967 output_comp_unit (dw_die_ref die, int output_if_empty)
10968 {
10969   const char *secname;
10970   char *oldsym, *tmp;
10971
10972   /* Unless we are outputting main CU, we may throw away empty ones.  */
10973   if (!output_if_empty && die->die_child == NULL)
10974     return;
10975
10976   /* Even if there are no children of this DIE, we must output the information
10977      about the compilation unit.  Otherwise, on an empty translation unit, we
10978      will generate a present, but empty, .debug_info section.  IRIX 6.5 `nm'
10979      will then complain when examining the file.  First mark all the DIEs in
10980      this CU so we know which get local refs.  */
10981   mark_dies (die);
10982
10983   build_abbrev_table (die);
10984
10985   /* Initialize the beginning DIE offset - and calculate sizes/offsets.  */
10986   next_die_offset = DWARF_COMPILE_UNIT_HEADER_SIZE;
10987   calc_die_sizes (die);
10988
10989   oldsym = die->die_id.die_symbol;
10990   if (oldsym)
10991     {
10992       tmp = XALLOCAVEC (char, strlen (oldsym) + 24);
10993
10994       sprintf (tmp, ".gnu.linkonce.wi.%s", oldsym);
10995       secname = tmp;
10996       die->die_id.die_symbol = NULL;
10997       switch_to_section (get_section (secname, SECTION_DEBUG, NULL));
10998     }
10999   else
11000     switch_to_section (debug_info_section);
11001
11002   /* Output debugging information.  */
11003   output_compilation_unit_header ();
11004   output_die (die);
11005
11006   /* Leave the marks on the main CU, so we can check them in
11007      output_pubnames.  */
11008   if (oldsym)
11009     {
11010       unmark_dies (die);
11011       die->die_id.die_symbol = oldsym;
11012     }
11013 }
11014
11015 /* Output a comdat type unit DIE and its children.  */
11016
11017 static void
11018 output_comdat_type_unit (comdat_type_node *node)
11019 {
11020   const char *secname;
11021   char *tmp;
11022   int i;
11023 #if defined (OBJECT_FORMAT_ELF)
11024   tree comdat_key;
11025 #endif
11026
11027   /* First mark all the DIEs in this CU so we know which get local refs.  */
11028   mark_dies (node->root_die);
11029
11030   build_abbrev_table (node->root_die);
11031
11032   /* Initialize the beginning DIE offset - and calculate sizes/offsets.  */
11033   next_die_offset = DWARF_COMDAT_TYPE_UNIT_HEADER_SIZE;
11034   calc_die_sizes (node->root_die);
11035
11036 #if defined (OBJECT_FORMAT_ELF)
11037   secname = ".debug_types";
11038   tmp = XALLOCAVEC (char, 4 + DWARF_TYPE_SIGNATURE_SIZE * 2);
11039   sprintf (tmp, "wt.");
11040   for (i = 0; i < DWARF_TYPE_SIGNATURE_SIZE; i++)
11041     sprintf (tmp + 3 + i * 2, "%02x", node->signature[i] & 0xff);
11042   comdat_key = get_identifier (tmp);
11043   targetm.asm_out.named_section (secname,
11044                                  SECTION_DEBUG | SECTION_LINKONCE,
11045                                  comdat_key);
11046 #else
11047   tmp = XALLOCAVEC (char, 18 + DWARF_TYPE_SIGNATURE_SIZE * 2);
11048   sprintf (tmp, ".gnu.linkonce.wt.");
11049   for (i = 0; i < DWARF_TYPE_SIGNATURE_SIZE; i++)
11050     sprintf (tmp + 17 + i * 2, "%02x", node->signature[i] & 0xff);
11051   secname = tmp;
11052   switch_to_section (get_section (secname, SECTION_DEBUG, NULL));
11053 #endif
11054
11055   /* Output debugging information.  */
11056   output_compilation_unit_header ();
11057   output_signature (node->signature, "Type Signature");
11058   dw2_asm_output_data (DWARF_OFFSET_SIZE, node->type_die->die_offset,
11059                        "Offset to Type DIE");
11060   output_die (node->root_die);
11061
11062   unmark_dies (node->root_die);
11063 }
11064
11065 /* Return the DWARF2/3 pubname associated with a decl.  */
11066
11067 static const char *
11068 dwarf2_name (tree decl, int scope)
11069 {
11070   return lang_hooks.dwarf_name (decl, scope ? 1 : 0);
11071 }
11072
11073 /* Add a new entry to .debug_pubnames if appropriate.  */
11074
11075 static void
11076 add_pubname_string (const char *str, dw_die_ref die)
11077 {
11078   pubname_entry e;
11079
11080   e.die = die;
11081   e.name = xstrdup (str);
11082   VEC_safe_push (pubname_entry, gc, pubname_table, &e);
11083 }
11084
11085 static void
11086 add_pubname (tree decl, dw_die_ref die)
11087 {
11088   if (TREE_PUBLIC (decl))
11089     {
11090       const char *name = dwarf2_name (decl, 1);
11091       if (name)
11092         add_pubname_string (name, die);
11093     }
11094 }
11095
11096 /* Add a new entry to .debug_pubtypes if appropriate.  */
11097
11098 static void
11099 add_pubtype (tree decl, dw_die_ref die)
11100 {
11101   pubname_entry e;
11102
11103   e.name = NULL;
11104   if ((TREE_PUBLIC (decl)
11105        || die->die_parent == comp_unit_die)
11106       && (die->die_tag == DW_TAG_typedef || COMPLETE_TYPE_P (decl)))
11107     {
11108       e.die = die;
11109       if (TYPE_P (decl))
11110         {
11111           if (TYPE_NAME (decl))
11112             {
11113               if (TREE_CODE (TYPE_NAME (decl)) == IDENTIFIER_NODE)
11114                 e.name = IDENTIFIER_POINTER (TYPE_NAME (decl));
11115               else if (TREE_CODE (TYPE_NAME (decl)) == TYPE_DECL
11116                        && DECL_NAME (TYPE_NAME (decl)))
11117                 e.name = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (decl)));
11118               else
11119                e.name = xstrdup ((const char *) get_AT_string (die, DW_AT_name));
11120             }
11121         }
11122       else
11123         {
11124           e.name = dwarf2_name (decl, 1);
11125           if (e.name)
11126             e.name = xstrdup (e.name);
11127         }
11128
11129       /* If we don't have a name for the type, there's no point in adding
11130          it to the table.  */
11131       if (e.name && e.name[0] != '\0')
11132         VEC_safe_push (pubname_entry, gc, pubtype_table, &e);
11133     }
11134 }
11135
11136 /* Output the public names table used to speed up access to externally
11137    visible names; or the public types table used to find type definitions.  */
11138
11139 static void
11140 output_pubnames (VEC (pubname_entry, gc) * names)
11141 {
11142   unsigned i;
11143   unsigned long pubnames_length = size_of_pubnames (names);
11144   pubname_ref pub;
11145
11146   if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
11147     dw2_asm_output_data (4, 0xffffffff,
11148       "Initial length escape value indicating 64-bit DWARF extension");
11149   if (names == pubname_table)
11150     dw2_asm_output_data (DWARF_OFFSET_SIZE, pubnames_length,
11151                          "Length of Public Names Info");
11152   else
11153     dw2_asm_output_data (DWARF_OFFSET_SIZE, pubnames_length,
11154                          "Length of Public Type Names Info");
11155   /* Version number for pubnames/pubtypes is still 2, even in DWARF3.  */
11156   dw2_asm_output_data (2, 2, "DWARF Version");
11157   dw2_asm_output_offset (DWARF_OFFSET_SIZE, debug_info_section_label,
11158                          debug_info_section,
11159                          "Offset of Compilation Unit Info");
11160   dw2_asm_output_data (DWARF_OFFSET_SIZE, next_die_offset,
11161                        "Compilation Unit Length");
11162
11163   for (i = 0; VEC_iterate (pubname_entry, names, i, pub); i++)
11164     {
11165       /* We shouldn't see pubnames for DIEs outside of the main CU.  */
11166       if (names == pubname_table)
11167         gcc_assert (pub->die->die_mark);
11168
11169       if (names != pubtype_table
11170           || pub->die->die_offset != 0
11171           || !flag_eliminate_unused_debug_types)
11172         {
11173           dw2_asm_output_data (DWARF_OFFSET_SIZE, pub->die->die_offset,
11174                                "DIE offset");
11175
11176           dw2_asm_output_nstring (pub->name, -1, "external name");
11177         }
11178     }
11179
11180   dw2_asm_output_data (DWARF_OFFSET_SIZE, 0, NULL);
11181 }
11182
11183 /* Add a new entry to .debug_aranges if appropriate.  */
11184
11185 static void
11186 add_arange (tree decl, dw_die_ref die)
11187 {
11188   if (! DECL_SECTION_NAME (decl))
11189     return;
11190
11191   if (arange_table_in_use == arange_table_allocated)
11192     {
11193       arange_table_allocated += ARANGE_TABLE_INCREMENT;
11194       arange_table = GGC_RESIZEVEC (dw_die_ref, arange_table,
11195                                     arange_table_allocated);
11196       memset (arange_table + arange_table_in_use, 0,
11197               ARANGE_TABLE_INCREMENT * sizeof (dw_die_ref));
11198     }
11199
11200   arange_table[arange_table_in_use++] = die;
11201 }
11202
11203 /* Output the information that goes into the .debug_aranges table.
11204    Namely, define the beginning and ending address range of the
11205    text section generated for this compilation unit.  */
11206
11207 static void
11208 output_aranges (void)
11209 {
11210   unsigned i;
11211   unsigned long aranges_length = size_of_aranges ();
11212
11213   if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
11214     dw2_asm_output_data (4, 0xffffffff,
11215       "Initial length escape value indicating 64-bit DWARF extension");
11216   dw2_asm_output_data (DWARF_OFFSET_SIZE, aranges_length,
11217                        "Length of Address Ranges Info");
11218   /* Version number for aranges is still 2, even in DWARF3.  */
11219   dw2_asm_output_data (2, 2, "DWARF Version");
11220   dw2_asm_output_offset (DWARF_OFFSET_SIZE, debug_info_section_label,
11221                          debug_info_section,
11222                          "Offset of Compilation Unit Info");
11223   dw2_asm_output_data (1, DWARF2_ADDR_SIZE, "Size of Address");
11224   dw2_asm_output_data (1, 0, "Size of Segment Descriptor");
11225
11226   /* We need to align to twice the pointer size here.  */
11227   if (DWARF_ARANGES_PAD_SIZE)
11228     {
11229       /* Pad using a 2 byte words so that padding is correct for any
11230          pointer size.  */
11231       dw2_asm_output_data (2, 0, "Pad to %d byte boundary",
11232                            2 * DWARF2_ADDR_SIZE);
11233       for (i = 2; i < (unsigned) DWARF_ARANGES_PAD_SIZE; i += 2)
11234         dw2_asm_output_data (2, 0, NULL);
11235     }
11236
11237   /* It is necessary not to output these entries if the sections were
11238      not used; if the sections were not used, the length will be 0 and
11239      the address may end up as 0 if the section is discarded by ld
11240      --gc-sections, leaving an invalid (0, 0) entry that can be
11241      confused with the terminator.  */
11242   if (text_section_used)
11243     {
11244       dw2_asm_output_addr (DWARF2_ADDR_SIZE, text_section_label, "Address");
11245       dw2_asm_output_delta (DWARF2_ADDR_SIZE, text_end_label,
11246                             text_section_label, "Length");
11247     }
11248   if (cold_text_section_used)
11249     {
11250       dw2_asm_output_addr (DWARF2_ADDR_SIZE, cold_text_section_label,
11251                            "Address");
11252       dw2_asm_output_delta (DWARF2_ADDR_SIZE, cold_end_label,
11253                             cold_text_section_label, "Length");
11254     }
11255
11256   for (i = 0; i < arange_table_in_use; i++)
11257     {
11258       dw_die_ref die = arange_table[i];
11259
11260       /* We shouldn't see aranges for DIEs outside of the main CU.  */
11261       gcc_assert (die->die_mark);
11262
11263       if (die->die_tag == DW_TAG_subprogram)
11264         {
11265           dw2_asm_output_addr (DWARF2_ADDR_SIZE, get_AT_low_pc (die),
11266                                "Address");
11267           dw2_asm_output_delta (DWARF2_ADDR_SIZE, get_AT_hi_pc (die),
11268                                 get_AT_low_pc (die), "Length");
11269         }
11270       else
11271         {
11272           /* A static variable; extract the symbol from DW_AT_location.
11273              Note that this code isn't currently hit, as we only emit
11274              aranges for functions (jason 9/23/99).  */
11275           dw_attr_ref a = get_AT (die, DW_AT_location);
11276           dw_loc_descr_ref loc;
11277
11278           gcc_assert (a && AT_class (a) == dw_val_class_loc);
11279
11280           loc = AT_loc (a);
11281           gcc_assert (loc->dw_loc_opc == DW_OP_addr);
11282
11283           dw2_asm_output_addr_rtx (DWARF2_ADDR_SIZE,
11284                                    loc->dw_loc_oprnd1.v.val_addr, "Address");
11285           dw2_asm_output_data (DWARF2_ADDR_SIZE,
11286                                get_AT_unsigned (die, DW_AT_byte_size),
11287                                "Length");
11288         }
11289     }
11290
11291   /* Output the terminator words.  */
11292   dw2_asm_output_data (DWARF2_ADDR_SIZE, 0, NULL);
11293   dw2_asm_output_data (DWARF2_ADDR_SIZE, 0, NULL);
11294 }
11295
11296 /* Add a new entry to .debug_ranges.  Return the offset at which it
11297    was placed.  */
11298
11299 static unsigned int
11300 add_ranges_num (int num)
11301 {
11302   unsigned int in_use = ranges_table_in_use;
11303
11304   if (in_use == ranges_table_allocated)
11305     {
11306       ranges_table_allocated += RANGES_TABLE_INCREMENT;
11307       ranges_table = GGC_RESIZEVEC (struct dw_ranges_struct, ranges_table,
11308                                     ranges_table_allocated);
11309       memset (ranges_table + ranges_table_in_use, 0,
11310               RANGES_TABLE_INCREMENT * sizeof (struct dw_ranges_struct));
11311     }
11312
11313   ranges_table[in_use].num = num;
11314   ranges_table_in_use = in_use + 1;
11315
11316   return in_use * 2 * DWARF2_ADDR_SIZE;
11317 }
11318
11319 /* Add a new entry to .debug_ranges corresponding to a block, or a
11320    range terminator if BLOCK is NULL.  */
11321
11322 static unsigned int
11323 add_ranges (const_tree block)
11324 {
11325   return add_ranges_num (block ? BLOCK_NUMBER (block) : 0);
11326 }
11327
11328 /* Add a new entry to .debug_ranges corresponding to a pair of
11329    labels.  */
11330
11331 static void
11332 add_ranges_by_labels (dw_die_ref die, const char *begin, const char *end,
11333                       bool *added)
11334 {
11335   unsigned int in_use = ranges_by_label_in_use;
11336   unsigned int offset;
11337
11338   if (in_use == ranges_by_label_allocated)
11339     {
11340       ranges_by_label_allocated += RANGES_TABLE_INCREMENT;
11341       ranges_by_label = GGC_RESIZEVEC (struct dw_ranges_by_label_struct,
11342                                        ranges_by_label,
11343                                        ranges_by_label_allocated);
11344       memset (ranges_by_label + ranges_by_label_in_use, 0,
11345               RANGES_TABLE_INCREMENT
11346               * sizeof (struct dw_ranges_by_label_struct));
11347     }
11348
11349   ranges_by_label[in_use].begin = begin;
11350   ranges_by_label[in_use].end = end;
11351   ranges_by_label_in_use = in_use + 1;
11352
11353   offset = add_ranges_num (-(int)in_use - 1);
11354   if (!*added)
11355     {
11356       add_AT_range_list (die, DW_AT_ranges, offset);
11357       *added = true;
11358     }
11359 }
11360
11361 static void
11362 output_ranges (void)
11363 {
11364   unsigned i;
11365   static const char *const start_fmt = "Offset %#x";
11366   const char *fmt = start_fmt;
11367
11368   for (i = 0; i < ranges_table_in_use; i++)
11369     {
11370       int block_num = ranges_table[i].num;
11371
11372       if (block_num > 0)
11373         {
11374           char blabel[MAX_ARTIFICIAL_LABEL_BYTES];
11375           char elabel[MAX_ARTIFICIAL_LABEL_BYTES];
11376
11377           ASM_GENERATE_INTERNAL_LABEL (blabel, BLOCK_BEGIN_LABEL, block_num);
11378           ASM_GENERATE_INTERNAL_LABEL (elabel, BLOCK_END_LABEL, block_num);
11379
11380           /* If all code is in the text section, then the compilation
11381              unit base address defaults to DW_AT_low_pc, which is the
11382              base of the text section.  */
11383           if (!have_multiple_function_sections)
11384             {
11385               dw2_asm_output_delta (DWARF2_ADDR_SIZE, blabel,
11386                                     text_section_label,
11387                                     fmt, i * 2 * DWARF2_ADDR_SIZE);
11388               dw2_asm_output_delta (DWARF2_ADDR_SIZE, elabel,
11389                                     text_section_label, NULL);
11390             }
11391
11392           /* Otherwise, the compilation unit base address is zero,
11393              which allows us to use absolute addresses, and not worry
11394              about whether the target supports cross-section
11395              arithmetic.  */
11396           else
11397             {
11398               dw2_asm_output_addr (DWARF2_ADDR_SIZE, blabel,
11399                                    fmt, i * 2 * DWARF2_ADDR_SIZE);
11400               dw2_asm_output_addr (DWARF2_ADDR_SIZE, elabel, NULL);
11401             }
11402
11403           fmt = NULL;
11404         }
11405
11406       /* Negative block_num stands for an index into ranges_by_label.  */
11407       else if (block_num < 0)
11408         {
11409           int lab_idx = - block_num - 1;
11410
11411           if (!have_multiple_function_sections)
11412             {
11413               gcc_unreachable ();
11414 #if 0
11415               /* If we ever use add_ranges_by_labels () for a single
11416                  function section, all we have to do is to take out
11417                  the #if 0 above.  */
11418               dw2_asm_output_delta (DWARF2_ADDR_SIZE,
11419                                     ranges_by_label[lab_idx].begin,
11420                                     text_section_label,
11421                                     fmt, i * 2 * DWARF2_ADDR_SIZE);
11422               dw2_asm_output_delta (DWARF2_ADDR_SIZE,
11423                                     ranges_by_label[lab_idx].end,
11424                                     text_section_label, NULL);
11425 #endif
11426             }
11427           else
11428             {
11429               dw2_asm_output_addr (DWARF2_ADDR_SIZE,
11430                                    ranges_by_label[lab_idx].begin,
11431                                    fmt, i * 2 * DWARF2_ADDR_SIZE);
11432               dw2_asm_output_addr (DWARF2_ADDR_SIZE,
11433                                    ranges_by_label[lab_idx].end,
11434                                    NULL);
11435             }
11436         }
11437       else
11438         {
11439           dw2_asm_output_data (DWARF2_ADDR_SIZE, 0, NULL);
11440           dw2_asm_output_data (DWARF2_ADDR_SIZE, 0, NULL);
11441           fmt = start_fmt;
11442         }
11443     }
11444 }
11445
11446 /* Data structure containing information about input files.  */
11447 struct file_info
11448 {
11449   const char *path;     /* Complete file name.  */
11450   const char *fname;    /* File name part.  */
11451   int length;           /* Length of entire string.  */
11452   struct dwarf_file_data * file_idx;    /* Index in input file table.  */
11453   int dir_idx;          /* Index in directory table.  */
11454 };
11455
11456 /* Data structure containing information about directories with source
11457    files.  */
11458 struct dir_info
11459 {
11460   const char *path;     /* Path including directory name.  */
11461   int length;           /* Path length.  */
11462   int prefix;           /* Index of directory entry which is a prefix.  */
11463   int count;            /* Number of files in this directory.  */
11464   int dir_idx;          /* Index of directory used as base.  */
11465 };
11466
11467 /* Callback function for file_info comparison.  We sort by looking at
11468    the directories in the path.  */
11469
11470 static int
11471 file_info_cmp (const void *p1, const void *p2)
11472 {
11473   const struct file_info *const s1 = (const struct file_info *) p1;
11474   const struct file_info *const s2 = (const struct file_info *) p2;
11475   const unsigned char *cp1;
11476   const unsigned char *cp2;
11477
11478   /* Take care of file names without directories.  We need to make sure that
11479      we return consistent values to qsort since some will get confused if
11480      we return the same value when identical operands are passed in opposite
11481      orders.  So if neither has a directory, return 0 and otherwise return
11482      1 or -1 depending on which one has the directory.  */
11483   if ((s1->path == s1->fname || s2->path == s2->fname))
11484     return (s2->path == s2->fname) - (s1->path == s1->fname);
11485
11486   cp1 = (const unsigned char *) s1->path;
11487   cp2 = (const unsigned char *) s2->path;
11488
11489   while (1)
11490     {
11491       ++cp1;
11492       ++cp2;
11493       /* Reached the end of the first path?  If so, handle like above.  */
11494       if ((cp1 == (const unsigned char *) s1->fname)
11495           || (cp2 == (const unsigned char *) s2->fname))
11496         return ((cp2 == (const unsigned char *) s2->fname)
11497                 - (cp1 == (const unsigned char *) s1->fname));
11498
11499       /* Character of current path component the same?  */
11500       else if (*cp1 != *cp2)
11501         return *cp1 - *cp2;
11502     }
11503 }
11504
11505 struct file_name_acquire_data
11506 {
11507   struct file_info *files;
11508   int used_files;
11509   int max_files;
11510 };
11511
11512 /* Traversal function for the hash table.  */
11513
11514 static int
11515 file_name_acquire (void ** slot, void *data)
11516 {
11517   struct file_name_acquire_data *fnad = (struct file_name_acquire_data *) data;
11518   struct dwarf_file_data *d = (struct dwarf_file_data *) *slot;
11519   struct file_info *fi;
11520   const char *f;
11521
11522   gcc_assert (fnad->max_files >= d->emitted_number);
11523
11524   if (! d->emitted_number)
11525     return 1;
11526
11527   gcc_assert (fnad->max_files != fnad->used_files);
11528
11529   fi = fnad->files + fnad->used_files++;
11530
11531   /* Skip all leading "./".  */
11532   f = d->filename;
11533   while (f[0] == '.' && IS_DIR_SEPARATOR (f[1]))
11534     f += 2;
11535
11536   /* Create a new array entry.  */
11537   fi->path = f;
11538   fi->length = strlen (f);
11539   fi->file_idx = d;
11540
11541   /* Search for the file name part.  */
11542   f = strrchr (f, DIR_SEPARATOR);
11543 #if defined (DIR_SEPARATOR_2)
11544   {
11545     char *g = strrchr (fi->path, DIR_SEPARATOR_2);
11546
11547     if (g != NULL)
11548       {
11549         if (f == NULL || f < g)
11550           f = g;
11551       }
11552   }
11553 #endif
11554
11555   fi->fname = f == NULL ? fi->path : f + 1;
11556   return 1;
11557 }
11558
11559 /* Output the directory table and the file name table.  We try to minimize
11560    the total amount of memory needed.  A heuristic is used to avoid large
11561    slowdowns with many input files.  */
11562
11563 static void
11564 output_file_names (void)
11565 {
11566   struct file_name_acquire_data fnad;
11567   int numfiles;
11568   struct file_info *files;
11569   struct dir_info *dirs;
11570   int *saved;
11571   int *savehere;
11572   int *backmap;
11573   int ndirs;
11574   int idx_offset;
11575   int i;
11576
11577   if (!last_emitted_file)
11578     {
11579       dw2_asm_output_data (1, 0, "End directory table");
11580       dw2_asm_output_data (1, 0, "End file name table");
11581       return;
11582     }
11583
11584   numfiles = last_emitted_file->emitted_number;
11585
11586   /* Allocate the various arrays we need.  */
11587   files = XALLOCAVEC (struct file_info, numfiles);
11588   dirs = XALLOCAVEC (struct dir_info, numfiles);
11589
11590   fnad.files = files;
11591   fnad.used_files = 0;
11592   fnad.max_files = numfiles;
11593   htab_traverse (file_table, file_name_acquire, &fnad);
11594   gcc_assert (fnad.used_files == fnad.max_files);
11595
11596   qsort (files, numfiles, sizeof (files[0]), file_info_cmp);
11597
11598   /* Find all the different directories used.  */
11599   dirs[0].path = files[0].path;
11600   dirs[0].length = files[0].fname - files[0].path;
11601   dirs[0].prefix = -1;
11602   dirs[0].count = 1;
11603   dirs[0].dir_idx = 0;
11604   files[0].dir_idx = 0;
11605   ndirs = 1;
11606
11607   for (i = 1; i < numfiles; i++)
11608     if (files[i].fname - files[i].path == dirs[ndirs - 1].length
11609         && memcmp (dirs[ndirs - 1].path, files[i].path,
11610                    dirs[ndirs - 1].length) == 0)
11611       {
11612         /* Same directory as last entry.  */
11613         files[i].dir_idx = ndirs - 1;
11614         ++dirs[ndirs - 1].count;
11615       }
11616     else
11617       {
11618         int j;
11619
11620         /* This is a new directory.  */
11621         dirs[ndirs].path = files[i].path;
11622         dirs[ndirs].length = files[i].fname - files[i].path;
11623         dirs[ndirs].count = 1;
11624         dirs[ndirs].dir_idx = ndirs;
11625         files[i].dir_idx = ndirs;
11626
11627         /* Search for a prefix.  */
11628         dirs[ndirs].prefix = -1;
11629         for (j = 0; j < ndirs; j++)
11630           if (dirs[j].length < dirs[ndirs].length
11631               && dirs[j].length > 1
11632               && (dirs[ndirs].prefix == -1
11633                   || dirs[j].length > dirs[dirs[ndirs].prefix].length)
11634               && memcmp (dirs[j].path, dirs[ndirs].path, dirs[j].length) == 0)
11635             dirs[ndirs].prefix = j;
11636
11637         ++ndirs;
11638       }
11639
11640   /* Now to the actual work.  We have to find a subset of the directories which
11641      allow expressing the file name using references to the directory table
11642      with the least amount of characters.  We do not do an exhaustive search
11643      where we would have to check out every combination of every single
11644      possible prefix.  Instead we use a heuristic which provides nearly optimal
11645      results in most cases and never is much off.  */
11646   saved = XALLOCAVEC (int, ndirs);
11647   savehere = XALLOCAVEC (int, ndirs);
11648
11649   memset (saved, '\0', ndirs * sizeof (saved[0]));
11650   for (i = 0; i < ndirs; i++)
11651     {
11652       int j;
11653       int total;
11654
11655       /* We can always save some space for the current directory.  But this
11656          does not mean it will be enough to justify adding the directory.  */
11657       savehere[i] = dirs[i].length;
11658       total = (savehere[i] - saved[i]) * dirs[i].count;
11659
11660       for (j = i + 1; j < ndirs; j++)
11661         {
11662           savehere[j] = 0;
11663           if (saved[j] < dirs[i].length)
11664             {
11665               /* Determine whether the dirs[i] path is a prefix of the
11666                  dirs[j] path.  */
11667               int k;
11668
11669               k = dirs[j].prefix;
11670               while (k != -1 && k != (int) i)
11671                 k = dirs[k].prefix;
11672
11673               if (k == (int) i)
11674                 {
11675                   /* Yes it is.  We can possibly save some memory by
11676                      writing the filenames in dirs[j] relative to
11677                      dirs[i].  */
11678                   savehere[j] = dirs[i].length;
11679                   total += (savehere[j] - saved[j]) * dirs[j].count;
11680                 }
11681             }
11682         }
11683
11684       /* Check whether we can save enough to justify adding the dirs[i]
11685          directory.  */
11686       if (total > dirs[i].length + 1)
11687         {
11688           /* It's worthwhile adding.  */
11689           for (j = i; j < ndirs; j++)
11690             if (savehere[j] > 0)
11691               {
11692                 /* Remember how much we saved for this directory so far.  */
11693                 saved[j] = savehere[j];
11694
11695                 /* Remember the prefix directory.  */
11696                 dirs[j].dir_idx = i;
11697               }
11698         }
11699     }
11700
11701   /* Emit the directory name table.  */
11702   idx_offset = dirs[0].length > 0 ? 1 : 0;
11703   for (i = 1 - idx_offset; i < ndirs; i++)
11704     dw2_asm_output_nstring (dirs[i].path,
11705                             dirs[i].length
11706                              - !DWARF2_DIR_SHOULD_END_WITH_SEPARATOR,
11707                             "Directory Entry: %#x", i + idx_offset);
11708
11709   dw2_asm_output_data (1, 0, "End directory table");
11710
11711   /* We have to emit them in the order of emitted_number since that's
11712      used in the debug info generation.  To do this efficiently we
11713      generate a back-mapping of the indices first.  */
11714   backmap = XALLOCAVEC (int, numfiles);
11715   for (i = 0; i < numfiles; i++)
11716     backmap[files[i].file_idx->emitted_number - 1] = i;
11717
11718   /* Now write all the file names.  */
11719   for (i = 0; i < numfiles; i++)
11720     {
11721       int file_idx = backmap[i];
11722       int dir_idx = dirs[files[file_idx].dir_idx].dir_idx;
11723
11724 #ifdef VMS_DEBUGGING_INFO
11725 #define MAX_VMS_VERSION_LEN 6 /* ";32768" */
11726
11727       /* Setting these fields can lead to debugger miscomparisons,
11728          but VMS Debug requires them to be set correctly.  */
11729
11730       int ver;
11731       long long cdt;
11732       long siz;
11733       int maxfilelen = strlen (files[file_idx].path)
11734                                + dirs[dir_idx].length
11735                                + MAX_VMS_VERSION_LEN + 1;
11736       char *filebuf = XALLOCAVEC (char, maxfilelen);
11737
11738       vms_file_stats_name (files[file_idx].path, 0, 0, 0, &ver);
11739       snprintf (filebuf, maxfilelen, "%s;%d",
11740                 files[file_idx].path + dirs[dir_idx].length, ver);
11741
11742       dw2_asm_output_nstring
11743         (filebuf, -1, "File Entry: %#x", (unsigned) i + 1);
11744
11745       /* Include directory index.  */
11746       dw2_asm_output_data_uleb128 (dir_idx + idx_offset, NULL);
11747
11748       /* Modification time.  */
11749       dw2_asm_output_data_uleb128
11750         ((vms_file_stats_name (files[file_idx].path, &cdt, 0, 0, 0) == 0)
11751           ? cdt : 0,
11752          NULL);
11753
11754       /* File length in bytes.  */
11755       dw2_asm_output_data_uleb128
11756         ((vms_file_stats_name (files[file_idx].path, 0, &siz, 0, 0) == 0)
11757           ? siz : 0,
11758          NULL);
11759 #else
11760       dw2_asm_output_nstring (files[file_idx].path + dirs[dir_idx].length, -1,
11761                               "File Entry: %#x", (unsigned) i + 1);
11762
11763       /* Include directory index.  */
11764       dw2_asm_output_data_uleb128 (dir_idx + idx_offset, NULL);
11765
11766       /* Modification time.  */
11767       dw2_asm_output_data_uleb128 (0, NULL);
11768
11769       /* File length in bytes.  */
11770       dw2_asm_output_data_uleb128 (0, NULL);
11771 #endif
11772     }
11773
11774   dw2_asm_output_data (1, 0, "End file name table");
11775 }
11776
11777
11778 /* Output the source line number correspondence information.  This
11779    information goes into the .debug_line section.  */
11780
11781 static void
11782 output_line_info (void)
11783 {
11784   char l1[20], l2[20], p1[20], p2[20];
11785   char line_label[MAX_ARTIFICIAL_LABEL_BYTES];
11786   char prev_line_label[MAX_ARTIFICIAL_LABEL_BYTES];
11787   unsigned opc;
11788   unsigned n_op_args;
11789   unsigned long lt_index;
11790   unsigned long current_line;
11791   long line_offset;
11792   long line_delta;
11793   unsigned long current_file;
11794   unsigned long function;
11795   int ver = dwarf_version;
11796
11797   ASM_GENERATE_INTERNAL_LABEL (l1, LINE_NUMBER_BEGIN_LABEL, 0);
11798   ASM_GENERATE_INTERNAL_LABEL (l2, LINE_NUMBER_END_LABEL, 0);
11799   ASM_GENERATE_INTERNAL_LABEL (p1, LN_PROLOG_AS_LABEL, 0);
11800   ASM_GENERATE_INTERNAL_LABEL (p2, LN_PROLOG_END_LABEL, 0);
11801
11802   if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
11803     dw2_asm_output_data (4, 0xffffffff,
11804       "Initial length escape value indicating 64-bit DWARF extension");
11805   dw2_asm_output_delta (DWARF_OFFSET_SIZE, l2, l1,
11806                         "Length of Source Line Info");
11807   ASM_OUTPUT_LABEL (asm_out_file, l1);
11808
11809   dw2_asm_output_data (2, ver, "DWARF Version");
11810   dw2_asm_output_delta (DWARF_OFFSET_SIZE, p2, p1, "Prolog Length");
11811   ASM_OUTPUT_LABEL (asm_out_file, p1);
11812
11813   /* Define the architecture-dependent minimum instruction length (in
11814    bytes).  In this implementation of DWARF, this field is used for
11815    information purposes only.  Since GCC generates assembly language,
11816    we have no a priori knowledge of how many instruction bytes are
11817    generated for each source line, and therefore can use only the
11818    DW_LNE_set_address and DW_LNS_fixed_advance_pc line information
11819    commands.  Accordingly, we fix this as `1', which is "correct
11820    enough" for all architectures, and don't let the target override.  */
11821   dw2_asm_output_data (1, 1,
11822                        "Minimum Instruction Length");
11823
11824   if (ver >= 4)
11825     dw2_asm_output_data (1, DWARF_LINE_DEFAULT_MAX_OPS_PER_INSN,
11826                          "Maximum Operations Per Instruction");
11827   dw2_asm_output_data (1, DWARF_LINE_DEFAULT_IS_STMT_START,
11828                        "Default is_stmt_start flag");
11829   dw2_asm_output_data (1, DWARF_LINE_BASE,
11830                        "Line Base Value (Special Opcodes)");
11831   dw2_asm_output_data (1, DWARF_LINE_RANGE,
11832                        "Line Range Value (Special Opcodes)");
11833   dw2_asm_output_data (1, DWARF_LINE_OPCODE_BASE,
11834                        "Special Opcode Base");
11835
11836   for (opc = 1; opc < DWARF_LINE_OPCODE_BASE; opc++)
11837     {
11838       switch (opc)
11839         {
11840         case DW_LNS_advance_pc:
11841         case DW_LNS_advance_line:
11842         case DW_LNS_set_file:
11843         case DW_LNS_set_column:
11844         case DW_LNS_fixed_advance_pc:
11845           n_op_args = 1;
11846           break;
11847         default:
11848           n_op_args = 0;
11849           break;
11850         }
11851
11852       dw2_asm_output_data (1, n_op_args, "opcode: %#x has %d args",
11853                            opc, n_op_args);
11854     }
11855
11856   /* Write out the information about the files we use.  */
11857   output_file_names ();
11858   ASM_OUTPUT_LABEL (asm_out_file, p2);
11859
11860   /* We used to set the address register to the first location in the text
11861      section here, but that didn't accomplish anything since we already
11862      have a line note for the opening brace of the first function.  */
11863
11864   /* Generate the line number to PC correspondence table, encoded as
11865      a series of state machine operations.  */
11866   current_file = 1;
11867   current_line = 1;
11868
11869   if (cfun && in_cold_section_p)
11870     strcpy (prev_line_label, crtl->subsections.cold_section_label);
11871   else
11872     strcpy (prev_line_label, text_section_label);
11873   for (lt_index = 1; lt_index < line_info_table_in_use; ++lt_index)
11874     {
11875       dw_line_info_ref line_info = &line_info_table[lt_index];
11876
11877 #if 0
11878       /* Disable this optimization for now; GDB wants to see two line notes
11879          at the beginning of a function so it can find the end of the
11880          prologue.  */
11881
11882       /* Don't emit anything for redundant notes.  Just updating the
11883          address doesn't accomplish anything, because we already assume
11884          that anything after the last address is this line.  */
11885       if (line_info->dw_line_num == current_line
11886           && line_info->dw_file_num == current_file)
11887         continue;
11888 #endif
11889
11890       /* Emit debug info for the address of the current line.
11891
11892          Unfortunately, we have little choice here currently, and must always
11893          use the most general form.  GCC does not know the address delta
11894          itself, so we can't use DW_LNS_advance_pc.  Many ports do have length
11895          attributes which will give an upper bound on the address range.  We
11896          could perhaps use length attributes to determine when it is safe to
11897          use DW_LNS_fixed_advance_pc.  */
11898
11899       ASM_GENERATE_INTERNAL_LABEL (line_label, LINE_CODE_LABEL, lt_index);
11900       if (0)
11901         {
11902           /* This can handle deltas up to 0xffff.  This takes 3 bytes.  */
11903           dw2_asm_output_data (1, DW_LNS_fixed_advance_pc,
11904                                "DW_LNS_fixed_advance_pc");
11905           dw2_asm_output_delta (2, line_label, prev_line_label, NULL);
11906         }
11907       else
11908         {
11909           /* This can handle any delta.  This takes
11910              4+DWARF2_ADDR_SIZE bytes.  */
11911           dw2_asm_output_data (1, 0, "DW_LNE_set_address");
11912           dw2_asm_output_data_uleb128 (1 + DWARF2_ADDR_SIZE, NULL);
11913           dw2_asm_output_data (1, DW_LNE_set_address, NULL);
11914           dw2_asm_output_addr (DWARF2_ADDR_SIZE, line_label, NULL);
11915         }
11916
11917       strcpy (prev_line_label, line_label);
11918
11919       /* Emit debug info for the source file of the current line, if
11920          different from the previous line.  */
11921       if (line_info->dw_file_num != current_file)
11922         {
11923           current_file = line_info->dw_file_num;
11924           dw2_asm_output_data (1, DW_LNS_set_file, "DW_LNS_set_file");
11925           dw2_asm_output_data_uleb128 (current_file, "%lu", current_file);
11926         }
11927
11928       /* Emit debug info for the current line number, choosing the encoding
11929          that uses the least amount of space.  */
11930       if (line_info->dw_line_num != current_line)
11931         {
11932           line_offset = line_info->dw_line_num - current_line;
11933           line_delta = line_offset - DWARF_LINE_BASE;
11934           current_line = line_info->dw_line_num;
11935           if (line_delta >= 0 && line_delta < (DWARF_LINE_RANGE - 1))
11936             /* This can handle deltas from -10 to 234, using the current
11937                definitions of DWARF_LINE_BASE and DWARF_LINE_RANGE.  This
11938                takes 1 byte.  */
11939             dw2_asm_output_data (1, DWARF_LINE_OPCODE_BASE + line_delta,
11940                                  "line %lu", current_line);
11941           else
11942             {
11943               /* This can handle any delta.  This takes at least 4 bytes,
11944                  depending on the value being encoded.  */
11945               dw2_asm_output_data (1, DW_LNS_advance_line,
11946                                    "advance to line %lu", current_line);
11947               dw2_asm_output_data_sleb128 (line_offset, NULL);
11948               dw2_asm_output_data (1, DW_LNS_copy, "DW_LNS_copy");
11949             }
11950         }
11951       else
11952         /* We still need to start a new row, so output a copy insn.  */
11953         dw2_asm_output_data (1, DW_LNS_copy, "DW_LNS_copy");
11954     }
11955
11956   /* Emit debug info for the address of the end of the function.  */
11957   if (0)
11958     {
11959       dw2_asm_output_data (1, DW_LNS_fixed_advance_pc,
11960                            "DW_LNS_fixed_advance_pc");
11961       dw2_asm_output_delta (2, text_end_label, prev_line_label, NULL);
11962     }
11963   else
11964     {
11965       dw2_asm_output_data (1, 0, "DW_LNE_set_address");
11966       dw2_asm_output_data_uleb128 (1 + DWARF2_ADDR_SIZE, NULL);
11967       dw2_asm_output_data (1, DW_LNE_set_address, NULL);
11968       dw2_asm_output_addr (DWARF2_ADDR_SIZE, text_end_label, NULL);
11969     }
11970
11971   dw2_asm_output_data (1, 0, "DW_LNE_end_sequence");
11972   dw2_asm_output_data_uleb128 (1, NULL);
11973   dw2_asm_output_data (1, DW_LNE_end_sequence, NULL);
11974
11975   function = 0;
11976   current_file = 1;
11977   current_line = 1;
11978   for (lt_index = 0; lt_index < separate_line_info_table_in_use;)
11979     {
11980       dw_separate_line_info_ref line_info
11981         = &separate_line_info_table[lt_index];
11982
11983 #if 0
11984       /* Don't emit anything for redundant notes.  */
11985       if (line_info->dw_line_num == current_line
11986           && line_info->dw_file_num == current_file
11987           && line_info->function == function)
11988         goto cont;
11989 #endif
11990
11991       /* Emit debug info for the address of the current line.  If this is
11992          a new function, or the first line of a function, then we need
11993          to handle it differently.  */
11994       ASM_GENERATE_INTERNAL_LABEL (line_label, SEPARATE_LINE_CODE_LABEL,
11995                                    lt_index);
11996       if (function != line_info->function)
11997         {
11998           function = line_info->function;
11999
12000           /* Set the address register to the first line in the function.  */
12001           dw2_asm_output_data (1, 0, "DW_LNE_set_address");
12002           dw2_asm_output_data_uleb128 (1 + DWARF2_ADDR_SIZE, NULL);
12003           dw2_asm_output_data (1, DW_LNE_set_address, NULL);
12004           dw2_asm_output_addr (DWARF2_ADDR_SIZE, line_label, NULL);
12005         }
12006       else
12007         {
12008           /* ??? See the DW_LNS_advance_pc comment above.  */
12009           if (0)
12010             {
12011               dw2_asm_output_data (1, DW_LNS_fixed_advance_pc,
12012                                    "DW_LNS_fixed_advance_pc");
12013               dw2_asm_output_delta (2, line_label, prev_line_label, NULL);
12014             }
12015           else
12016             {
12017               dw2_asm_output_data (1, 0, "DW_LNE_set_address");
12018               dw2_asm_output_data_uleb128 (1 + DWARF2_ADDR_SIZE, NULL);
12019               dw2_asm_output_data (1, DW_LNE_set_address, NULL);
12020               dw2_asm_output_addr (DWARF2_ADDR_SIZE, line_label, NULL);
12021             }
12022         }
12023
12024       strcpy (prev_line_label, line_label);
12025
12026       /* Emit debug info for the source file of the current line, if
12027          different from the previous line.  */
12028       if (line_info->dw_file_num != current_file)
12029         {
12030           current_file = line_info->dw_file_num;
12031           dw2_asm_output_data (1, DW_LNS_set_file, "DW_LNS_set_file");
12032           dw2_asm_output_data_uleb128 (current_file, "%lu", current_file);
12033         }
12034
12035       /* Emit debug info for the current line number, choosing the encoding
12036          that uses the least amount of space.  */
12037       if (line_info->dw_line_num != current_line)
12038         {
12039           line_offset = line_info->dw_line_num - current_line;
12040           line_delta = line_offset - DWARF_LINE_BASE;
12041           current_line = line_info->dw_line_num;
12042           if (line_delta >= 0 && line_delta < (DWARF_LINE_RANGE - 1))
12043             dw2_asm_output_data (1, DWARF_LINE_OPCODE_BASE + line_delta,
12044                                  "line %lu", current_line);
12045           else
12046             {
12047               dw2_asm_output_data (1, DW_LNS_advance_line,
12048                                    "advance to line %lu", current_line);
12049               dw2_asm_output_data_sleb128 (line_offset, NULL);
12050               dw2_asm_output_data (1, DW_LNS_copy, "DW_LNS_copy");
12051             }
12052         }
12053       else
12054         dw2_asm_output_data (1, DW_LNS_copy, "DW_LNS_copy");
12055
12056 #if 0
12057     cont:
12058 #endif
12059
12060       lt_index++;
12061
12062       /* If we're done with a function, end its sequence.  */
12063       if (lt_index == separate_line_info_table_in_use
12064           || separate_line_info_table[lt_index].function != function)
12065         {
12066           current_file = 1;
12067           current_line = 1;
12068
12069           /* Emit debug info for the address of the end of the function.  */
12070           ASM_GENERATE_INTERNAL_LABEL (line_label, FUNC_END_LABEL, function);
12071           if (0)
12072             {
12073               dw2_asm_output_data (1, DW_LNS_fixed_advance_pc,
12074                                    "DW_LNS_fixed_advance_pc");
12075               dw2_asm_output_delta (2, line_label, prev_line_label, NULL);
12076             }
12077           else
12078             {
12079               dw2_asm_output_data (1, 0, "DW_LNE_set_address");
12080               dw2_asm_output_data_uleb128 (1 + DWARF2_ADDR_SIZE, NULL);
12081               dw2_asm_output_data (1, DW_LNE_set_address, NULL);
12082               dw2_asm_output_addr (DWARF2_ADDR_SIZE, line_label, NULL);
12083             }
12084
12085           /* Output the marker for the end of this sequence.  */
12086           dw2_asm_output_data (1, 0, "DW_LNE_end_sequence");
12087           dw2_asm_output_data_uleb128 (1, NULL);
12088           dw2_asm_output_data (1, DW_LNE_end_sequence, NULL);
12089         }
12090     }
12091
12092   /* Output the marker for the end of the line number info.  */
12093   ASM_OUTPUT_LABEL (asm_out_file, l2);
12094 }
12095
12096 /* Return the size of the .debug_dcall table for the compilation unit.  */
12097
12098 static unsigned long
12099 size_of_dcall_table (void)
12100 {
12101   unsigned long size;
12102   unsigned int i;
12103   dcall_entry *p;
12104   tree last_poc_decl = NULL;
12105
12106   /* Header:  version + debug info section pointer + pointer size.  */
12107   size = 2 + DWARF_OFFSET_SIZE + 1;
12108
12109   /* Each entry:  code label + DIE offset.  */
12110   for (i = 0; VEC_iterate (dcall_entry, dcall_table, i, p); i++)
12111     {
12112       gcc_assert (p->targ_die != NULL);
12113       /* Insert a "from" entry when the point-of-call DIE offset changes.  */
12114       if (p->poc_decl != last_poc_decl)
12115         {
12116           dw_die_ref poc_die = lookup_decl_die (p->poc_decl);
12117           gcc_assert (poc_die);
12118           last_poc_decl = p->poc_decl;
12119           if (poc_die)
12120             size += (DWARF_OFFSET_SIZE
12121                      + size_of_uleb128 (poc_die->die_offset));
12122         }
12123       size += DWARF_OFFSET_SIZE + size_of_uleb128 (p->targ_die->die_offset);
12124     }
12125
12126   return size;
12127 }
12128
12129 /* Output the direct call table used to disambiguate PC values when
12130    identical function have been merged.  */
12131
12132 static void
12133 output_dcall_table (void)
12134 {
12135   unsigned i;
12136   unsigned long dcall_length = size_of_dcall_table ();
12137   dcall_entry *p;
12138   char poc_label[MAX_ARTIFICIAL_LABEL_BYTES];
12139   tree last_poc_decl = NULL;
12140
12141   if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
12142     dw2_asm_output_data (4, 0xffffffff,
12143       "Initial length escape value indicating 64-bit DWARF extension");
12144   dw2_asm_output_data (DWARF_OFFSET_SIZE, dcall_length,
12145                        "Length of Direct Call Table");
12146   dw2_asm_output_data (2, 4, "Version number");
12147   dw2_asm_output_offset (DWARF_OFFSET_SIZE, debug_info_section_label,
12148                          debug_info_section,
12149                          "Offset of Compilation Unit Info");
12150   dw2_asm_output_data (1, DWARF2_ADDR_SIZE, "Pointer Size (in bytes)");
12151
12152   for (i = 0; VEC_iterate (dcall_entry, dcall_table, i, p); i++)
12153     {
12154       /* Insert a "from" entry when the point-of-call DIE offset changes.  */
12155       if (p->poc_decl != last_poc_decl)
12156         {
12157           dw_die_ref poc_die = lookup_decl_die (p->poc_decl);
12158           last_poc_decl = p->poc_decl;
12159           if (poc_die)
12160             {
12161               dw2_asm_output_data (DWARF_OFFSET_SIZE, 0, "New caller");
12162               dw2_asm_output_data_uleb128 (poc_die->die_offset,
12163                                            "Caller DIE offset");
12164             }
12165         }
12166       ASM_GENERATE_INTERNAL_LABEL (poc_label, "LPOC", p->poc_label_num);
12167       dw2_asm_output_addr (DWARF_OFFSET_SIZE, poc_label, "Point of call");
12168       dw2_asm_output_data_uleb128 (p->targ_die->die_offset,
12169                                    "Callee DIE offset");
12170     }
12171 }
12172 \f
12173 /* Return the size of the .debug_vcall table for the compilation unit.  */
12174
12175 static unsigned long
12176 size_of_vcall_table (void)
12177 {
12178   unsigned long size;
12179   unsigned int i;
12180   vcall_entry *p;
12181
12182   /* Header:  version + pointer size.  */
12183   size = 2 + 1;
12184
12185   /* Each entry:  code label + vtable slot index.  */
12186   for (i = 0; VEC_iterate (vcall_entry, vcall_table, i, p); i++)
12187     size += DWARF_OFFSET_SIZE + size_of_uleb128 (p->vtable_slot);
12188
12189   return size;
12190 }
12191
12192 /* Output the virtual call table used to disambiguate PC values when
12193    identical function have been merged.  */
12194
12195 static void
12196 output_vcall_table (void)
12197 {
12198   unsigned i;
12199   unsigned long vcall_length = size_of_vcall_table ();
12200   vcall_entry *p;
12201   char poc_label[MAX_ARTIFICIAL_LABEL_BYTES];
12202
12203   if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
12204     dw2_asm_output_data (4, 0xffffffff,
12205       "Initial length escape value indicating 64-bit DWARF extension");
12206   dw2_asm_output_data (DWARF_OFFSET_SIZE, vcall_length,
12207                        "Length of Virtual Call Table");
12208   dw2_asm_output_data (2, 4, "Version number");
12209   dw2_asm_output_data (1, DWARF2_ADDR_SIZE, "Pointer Size (in bytes)");
12210
12211   for (i = 0; VEC_iterate (vcall_entry, vcall_table, i, p); i++)
12212     {
12213       ASM_GENERATE_INTERNAL_LABEL (poc_label, "LPOC", p->poc_label_num);
12214       dw2_asm_output_addr (DWARF_OFFSET_SIZE, poc_label, "Point of call");
12215       dw2_asm_output_data_uleb128 (p->vtable_slot, "Vtable slot");
12216     }
12217 }
12218 \f
12219 /* Given a pointer to a tree node for some base type, return a pointer to
12220    a DIE that describes the given type.
12221
12222    This routine must only be called for GCC type nodes that correspond to
12223    Dwarf base (fundamental) types.  */
12224
12225 static dw_die_ref
12226 base_type_die (tree type)
12227 {
12228   dw_die_ref base_type_result;
12229   enum dwarf_type encoding;
12230
12231   if (TREE_CODE (type) == ERROR_MARK || TREE_CODE (type) == VOID_TYPE)
12232     return 0;
12233
12234   /* If this is a subtype that should not be emitted as a subrange type,
12235      use the base type.  See subrange_type_for_debug_p.  */
12236   if (TREE_CODE (type) == INTEGER_TYPE && TREE_TYPE (type) != NULL_TREE)
12237     type = TREE_TYPE (type);
12238
12239   switch (TREE_CODE (type))
12240     {
12241     case INTEGER_TYPE:
12242       if (TYPE_STRING_FLAG (type))
12243         {
12244           if (TYPE_UNSIGNED (type))
12245             encoding = DW_ATE_unsigned_char;
12246           else
12247             encoding = DW_ATE_signed_char;
12248         }
12249       else if (TYPE_UNSIGNED (type))
12250         encoding = DW_ATE_unsigned;
12251       else
12252         encoding = DW_ATE_signed;
12253       break;
12254
12255     case REAL_TYPE:
12256       if (DECIMAL_FLOAT_MODE_P (TYPE_MODE (type)))
12257         {
12258           if (dwarf_version >= 3 || !dwarf_strict)
12259             encoding = DW_ATE_decimal_float;
12260           else
12261             encoding = DW_ATE_lo_user;
12262         }
12263       else
12264         encoding = DW_ATE_float;
12265       break;
12266
12267     case FIXED_POINT_TYPE:
12268       if (!(dwarf_version >= 3 || !dwarf_strict))
12269         encoding = DW_ATE_lo_user;
12270       else if (TYPE_UNSIGNED (type))
12271         encoding = DW_ATE_unsigned_fixed;
12272       else
12273         encoding = DW_ATE_signed_fixed;
12274       break;
12275
12276       /* Dwarf2 doesn't know anything about complex ints, so use
12277          a user defined type for it.  */
12278     case COMPLEX_TYPE:
12279       if (TREE_CODE (TREE_TYPE (type)) == REAL_TYPE)
12280         encoding = DW_ATE_complex_float;
12281       else
12282         encoding = DW_ATE_lo_user;
12283       break;
12284
12285     case BOOLEAN_TYPE:
12286       /* GNU FORTRAN/Ada/C++ BOOLEAN type.  */
12287       encoding = DW_ATE_boolean;
12288       break;
12289
12290     default:
12291       /* No other TREE_CODEs are Dwarf fundamental types.  */
12292       gcc_unreachable ();
12293     }
12294
12295   base_type_result = new_die (DW_TAG_base_type, comp_unit_die, type);
12296
12297   add_AT_unsigned (base_type_result, DW_AT_byte_size,
12298                    int_size_in_bytes (type));
12299   add_AT_unsigned (base_type_result, DW_AT_encoding, encoding);
12300
12301   return base_type_result;
12302 }
12303
12304 /* Given a pointer to an arbitrary ..._TYPE tree node, return nonzero if the
12305    given input type is a Dwarf "fundamental" type.  Otherwise return null.  */
12306
12307 static inline int
12308 is_base_type (tree type)
12309 {
12310   switch (TREE_CODE (type))
12311     {
12312     case ERROR_MARK:
12313     case VOID_TYPE:
12314     case INTEGER_TYPE:
12315     case REAL_TYPE:
12316     case FIXED_POINT_TYPE:
12317     case COMPLEX_TYPE:
12318     case BOOLEAN_TYPE:
12319       return 1;
12320
12321     case ARRAY_TYPE:
12322     case RECORD_TYPE:
12323     case UNION_TYPE:
12324     case QUAL_UNION_TYPE:
12325     case ENUMERAL_TYPE:
12326     case FUNCTION_TYPE:
12327     case METHOD_TYPE:
12328     case POINTER_TYPE:
12329     case REFERENCE_TYPE:
12330     case OFFSET_TYPE:
12331     case LANG_TYPE:
12332     case VECTOR_TYPE:
12333       return 0;
12334
12335     default:
12336       gcc_unreachable ();
12337     }
12338
12339   return 0;
12340 }
12341
12342 /* Given a pointer to a tree node, assumed to be some kind of a ..._TYPE
12343    node, return the size in bits for the type if it is a constant, or else
12344    return the alignment for the type if the type's size is not constant, or
12345    else return BITS_PER_WORD if the type actually turns out to be an
12346    ERROR_MARK node.  */
12347
12348 static inline unsigned HOST_WIDE_INT
12349 simple_type_size_in_bits (const_tree type)
12350 {
12351   if (TREE_CODE (type) == ERROR_MARK)
12352     return BITS_PER_WORD;
12353   else if (TYPE_SIZE (type) == NULL_TREE)
12354     return 0;
12355   else if (host_integerp (TYPE_SIZE (type), 1))
12356     return tree_low_cst (TYPE_SIZE (type), 1);
12357   else
12358     return TYPE_ALIGN (type);
12359 }
12360
12361 /*  Given a pointer to a tree node for a subrange type, return a pointer
12362     to a DIE that describes the given type.  */
12363
12364 static dw_die_ref
12365 subrange_type_die (tree type, tree low, tree high, dw_die_ref context_die)
12366 {
12367   dw_die_ref subrange_die;
12368   const HOST_WIDE_INT size_in_bytes = int_size_in_bytes (type);
12369
12370   if (context_die == NULL)
12371     context_die = comp_unit_die;
12372
12373   subrange_die = new_die (DW_TAG_subrange_type, context_die, type);
12374
12375   if (int_size_in_bytes (TREE_TYPE (type)) != size_in_bytes)
12376     {
12377       /* The size of the subrange type and its base type do not match,
12378          so we need to generate a size attribute for the subrange type.  */
12379       add_AT_unsigned (subrange_die, DW_AT_byte_size, size_in_bytes);
12380     }
12381
12382   if (low)
12383     add_bound_info (subrange_die, DW_AT_lower_bound, low);
12384   if (high)
12385     add_bound_info (subrange_die, DW_AT_upper_bound, high);
12386
12387   return subrange_die;
12388 }
12389
12390 /* Given a pointer to an arbitrary ..._TYPE tree node, return a debugging
12391    entry that chains various modifiers in front of the given type.  */
12392
12393 static dw_die_ref
12394 modified_type_die (tree type, int is_const_type, int is_volatile_type,
12395                    dw_die_ref context_die)
12396 {
12397   enum tree_code code = TREE_CODE (type);
12398   dw_die_ref mod_type_die;
12399   dw_die_ref sub_die = NULL;
12400   tree item_type = NULL;
12401   tree qualified_type;
12402   tree name, low, high;
12403
12404   if (code == ERROR_MARK)
12405     return NULL;
12406
12407   /* See if we already have the appropriately qualified variant of
12408      this type.  */
12409   qualified_type
12410     = get_qualified_type (type,
12411                           ((is_const_type ? TYPE_QUAL_CONST : 0)
12412                            | (is_volatile_type ? TYPE_QUAL_VOLATILE : 0)));
12413
12414   if (qualified_type == sizetype
12415       && TYPE_NAME (qualified_type)
12416       && TREE_CODE (TYPE_NAME (qualified_type)) == TYPE_DECL)
12417     {
12418 #ifdef ENABLE_CHECKING
12419       gcc_assert (TREE_CODE (TREE_TYPE (TYPE_NAME (qualified_type)))
12420                   == INTEGER_TYPE
12421                   && TYPE_PRECISION (TREE_TYPE (TYPE_NAME (qualified_type)))
12422                      == TYPE_PRECISION (qualified_type)
12423                   && TYPE_UNSIGNED (TREE_TYPE (TYPE_NAME (qualified_type)))
12424                      == TYPE_UNSIGNED (qualified_type));
12425 #endif
12426       qualified_type = TREE_TYPE (TYPE_NAME (qualified_type));
12427     }
12428
12429   /* If we do, then we can just use its DIE, if it exists.  */
12430   if (qualified_type)
12431     {
12432       mod_type_die = lookup_type_die (qualified_type);
12433       if (mod_type_die)
12434         return mod_type_die;
12435     }
12436
12437   name = qualified_type ? TYPE_NAME (qualified_type) : NULL;
12438
12439   /* Handle C typedef types.  */
12440   if (name && TREE_CODE (name) == TYPE_DECL && DECL_ORIGINAL_TYPE (name)
12441       && !DECL_ARTIFICIAL (name))
12442     {
12443       tree dtype = TREE_TYPE (name);
12444
12445       if (qualified_type == dtype)
12446         {
12447           /* For a named type, use the typedef.  */
12448           gen_type_die (qualified_type, context_die);
12449           return lookup_type_die (qualified_type);
12450         }
12451       else if (is_const_type < TYPE_READONLY (dtype)
12452                || is_volatile_type < TYPE_VOLATILE (dtype)
12453                || (is_const_type <= TYPE_READONLY (dtype)
12454                    && is_volatile_type <= TYPE_VOLATILE (dtype)
12455                    && DECL_ORIGINAL_TYPE (name) != type))
12456         /* cv-unqualified version of named type.  Just use the unnamed
12457            type to which it refers.  */
12458         return modified_type_die (DECL_ORIGINAL_TYPE (name),
12459                                   is_const_type, is_volatile_type,
12460                                   context_die);
12461       /* Else cv-qualified version of named type; fall through.  */
12462     }
12463
12464   if (is_const_type)
12465     {
12466       mod_type_die = new_die (DW_TAG_const_type, comp_unit_die, type);
12467       sub_die = modified_type_die (type, 0, is_volatile_type, context_die);
12468     }
12469   else if (is_volatile_type)
12470     {
12471       mod_type_die = new_die (DW_TAG_volatile_type, comp_unit_die, type);
12472       sub_die = modified_type_die (type, 0, 0, context_die);
12473     }
12474   else if (code == POINTER_TYPE)
12475     {
12476       mod_type_die = new_die (DW_TAG_pointer_type, comp_unit_die, type);
12477       add_AT_unsigned (mod_type_die, DW_AT_byte_size,
12478                        simple_type_size_in_bits (type) / BITS_PER_UNIT);
12479       item_type = TREE_TYPE (type);
12480       if (!ADDR_SPACE_GENERIC_P (TYPE_ADDR_SPACE (item_type)))
12481         add_AT_unsigned (mod_type_die, DW_AT_address_class,
12482                          TYPE_ADDR_SPACE (item_type));
12483     }
12484   else if (code == REFERENCE_TYPE)
12485     {
12486       if (TYPE_REF_IS_RVALUE (type) && dwarf_version >= 4)
12487         mod_type_die = new_die (DW_TAG_rvalue_reference_type, comp_unit_die,
12488                                 type);
12489       else
12490         mod_type_die = new_die (DW_TAG_reference_type, comp_unit_die, type);
12491       add_AT_unsigned (mod_type_die, DW_AT_byte_size,
12492                        simple_type_size_in_bits (type) / BITS_PER_UNIT);
12493       item_type = TREE_TYPE (type);
12494       if (!ADDR_SPACE_GENERIC_P (TYPE_ADDR_SPACE (item_type)))
12495         add_AT_unsigned (mod_type_die, DW_AT_address_class,
12496                          TYPE_ADDR_SPACE (item_type));
12497     }
12498   else if (code == INTEGER_TYPE
12499            && TREE_TYPE (type) != NULL_TREE
12500            && subrange_type_for_debug_p (type, &low, &high))
12501     {
12502       mod_type_die = subrange_type_die (type, low, high, context_die);
12503       item_type = TREE_TYPE (type);
12504     }
12505   else if (is_base_type (type))
12506     mod_type_die = base_type_die (type);
12507   else
12508     {
12509       gen_type_die (type, context_die);
12510
12511       /* We have to get the type_main_variant here (and pass that to the
12512          `lookup_type_die' routine) because the ..._TYPE node we have
12513          might simply be a *copy* of some original type node (where the
12514          copy was created to help us keep track of typedef names) and
12515          that copy might have a different TYPE_UID from the original
12516          ..._TYPE node.  */
12517       if (TREE_CODE (type) != VECTOR_TYPE)
12518         return lookup_type_die (type_main_variant (type));
12519       else
12520         /* Vectors have the debugging information in the type,
12521            not the main variant.  */
12522         return lookup_type_die (type);
12523     }
12524
12525   /* Builtin types don't have a DECL_ORIGINAL_TYPE.  For those,
12526      don't output a DW_TAG_typedef, since there isn't one in the
12527      user's program; just attach a DW_AT_name to the type.
12528      Don't attach a DW_AT_name to DW_TAG_const_type or DW_TAG_volatile_type
12529      if the base type already has the same name.  */
12530   if (name
12531       && ((TREE_CODE (name) != TYPE_DECL
12532            && (qualified_type == TYPE_MAIN_VARIANT (type)
12533                || (!is_const_type && !is_volatile_type)))
12534           || (TREE_CODE (name) == TYPE_DECL
12535               && TREE_TYPE (name) == qualified_type
12536               && DECL_NAME (name))))
12537     {
12538       if (TREE_CODE (name) == TYPE_DECL)
12539         /* Could just call add_name_and_src_coords_attributes here,
12540            but since this is a builtin type it doesn't have any
12541            useful source coordinates anyway.  */
12542         name = DECL_NAME (name);
12543       add_name_attribute (mod_type_die, IDENTIFIER_POINTER (name));
12544     }
12545   /* This probably indicates a bug.  */
12546   else if (mod_type_die && mod_type_die->die_tag == DW_TAG_base_type)
12547     add_name_attribute (mod_type_die, "__unknown__");
12548
12549   if (qualified_type)
12550     equate_type_number_to_die (qualified_type, mod_type_die);
12551
12552   if (item_type)
12553     /* We must do this after the equate_type_number_to_die call, in case
12554        this is a recursive type.  This ensures that the modified_type_die
12555        recursion will terminate even if the type is recursive.  Recursive
12556        types are possible in Ada.  */
12557     sub_die = modified_type_die (item_type,
12558                                  TYPE_READONLY (item_type),
12559                                  TYPE_VOLATILE (item_type),
12560                                  context_die);
12561
12562   if (sub_die != NULL)
12563     add_AT_die_ref (mod_type_die, DW_AT_type, sub_die);
12564
12565   return mod_type_die;
12566 }
12567
12568 /* Generate DIEs for the generic parameters of T.
12569    T must be either a generic type or a generic function.
12570    See http://gcc.gnu.org/wiki/TemplateParmsDwarf for more.  */
12571
12572 static void
12573 gen_generic_params_dies (tree t)
12574 {
12575   tree parms, args;
12576   int parms_num, i;
12577   dw_die_ref die = NULL;
12578
12579   if (!t || (TYPE_P (t) && !COMPLETE_TYPE_P (t)))
12580     return;
12581
12582   if (TYPE_P (t))
12583     die = lookup_type_die (t);
12584   else if (DECL_P (t))
12585     die = lookup_decl_die (t);
12586
12587   gcc_assert (die);
12588
12589   parms = lang_hooks.get_innermost_generic_parms (t);
12590   if (!parms)
12591     /* T has no generic parameter. It means T is neither a generic type
12592        or function. End of story.  */
12593     return;
12594
12595   parms_num = TREE_VEC_LENGTH (parms);
12596   args = lang_hooks.get_innermost_generic_args (t);
12597   for (i = 0; i < parms_num; i++)
12598     {
12599       tree parm, arg, arg_pack_elems;
12600
12601       parm = TREE_VEC_ELT (parms, i);
12602       arg = TREE_VEC_ELT (args, i);
12603       arg_pack_elems = lang_hooks.types.get_argument_pack_elems (arg);
12604       gcc_assert (parm && TREE_VALUE (parm) && arg);
12605
12606       if (parm && TREE_VALUE (parm) && arg)
12607         {
12608           /* If PARM represents a template parameter pack,
12609              emit a DW_TAG_GNU_template_parameter_pack DIE, followed
12610              by DW_TAG_template_*_parameter DIEs for the argument
12611              pack elements of ARG. Note that ARG would then be
12612              an argument pack.  */
12613           if (arg_pack_elems)
12614             template_parameter_pack_die (TREE_VALUE (parm),
12615                                          arg_pack_elems,
12616                                          die);
12617           else
12618             generic_parameter_die (TREE_VALUE (parm), arg,
12619                                    true /* Emit DW_AT_name */, die);
12620         }
12621     }
12622 }
12623
12624 /* Create and return a DIE for PARM which should be
12625    the representation of a generic type parameter.
12626    For instance, in the C++ front end, PARM would be a template parameter.
12627    ARG is the argument to PARM.
12628    EMIT_NAME_P if tree, the DIE will have DW_AT_name attribute set to the
12629    name of the PARM.
12630    PARENT_DIE is the parent DIE which the new created DIE should be added to,
12631    as a child node.  */
12632
12633 static dw_die_ref
12634 generic_parameter_die (tree parm, tree arg,
12635                        bool emit_name_p,
12636                        dw_die_ref parent_die)
12637 {
12638   dw_die_ref tmpl_die = NULL;
12639   const char *name = NULL;
12640
12641   if (!parm || !DECL_NAME (parm) || !arg)
12642     return NULL;
12643
12644   /* We support non-type generic parameters and arguments,
12645      type generic parameters and arguments, as well as
12646      generic generic parameters (a.k.a. template template parameters in C++)
12647      and arguments.  */
12648   if (TREE_CODE (parm) == PARM_DECL)
12649     /* PARM is a nontype generic parameter  */
12650     tmpl_die = new_die (DW_TAG_template_value_param, parent_die, parm);
12651   else if (TREE_CODE (parm) == TYPE_DECL)
12652     /* PARM is a type generic parameter.  */
12653     tmpl_die = new_die (DW_TAG_template_type_param, parent_die, parm);
12654   else if (lang_hooks.decls.generic_generic_parameter_decl_p (parm))
12655     /* PARM is a generic generic parameter.
12656        Its DIE is a GNU extension. It shall have a
12657        DW_AT_name attribute to represent the name of the template template
12658        parameter, and a DW_AT_GNU_template_name attribute to represent the
12659        name of the template template argument.  */
12660     tmpl_die = new_die (DW_TAG_GNU_template_template_param,
12661                         parent_die, parm);
12662   else
12663     gcc_unreachable ();
12664
12665   if (tmpl_die)
12666     {
12667       tree tmpl_type;
12668
12669       /* If PARM is a generic parameter pack, it means we are
12670          emitting debug info for a template argument pack element.
12671          In other terms, ARG is a template argument pack element.
12672          In that case, we don't emit any DW_AT_name attribute for
12673          the die.  */
12674       if (emit_name_p)
12675         {
12676           name = IDENTIFIER_POINTER (DECL_NAME (parm));
12677           gcc_assert (name);
12678           add_AT_string (tmpl_die, DW_AT_name, name);
12679         }
12680
12681       if (!lang_hooks.decls.generic_generic_parameter_decl_p (parm))
12682         {
12683           /* DWARF3, 5.6.8 says if PARM is a non-type generic parameter
12684              TMPL_DIE should have a child DW_AT_type attribute that is set
12685              to the type of the argument to PARM, which is ARG.
12686              If PARM is a type generic parameter, TMPL_DIE should have a
12687              child DW_AT_type that is set to ARG.  */
12688           tmpl_type = TYPE_P (arg) ? arg : TREE_TYPE (arg);
12689           add_type_attribute (tmpl_die, tmpl_type, 0,
12690                               TREE_THIS_VOLATILE (tmpl_type),
12691                               parent_die);
12692         }
12693       else
12694         {
12695           /* So TMPL_DIE is a DIE representing a
12696              a generic generic template parameter, a.k.a template template
12697              parameter in C++ and arg is a template.  */
12698
12699           /* The DW_AT_GNU_template_name attribute of the DIE must be set
12700              to the name of the argument.  */
12701           name = dwarf2_name (TYPE_P (arg) ? TYPE_NAME (arg) : arg, 1);
12702           if (name)
12703             add_AT_string (tmpl_die, DW_AT_GNU_template_name, name);
12704         }
12705
12706       if (TREE_CODE (parm) == PARM_DECL)
12707         /* So PARM is a non-type generic parameter.
12708            DWARF3 5.6.8 says we must set a DW_AT_const_value child
12709            attribute of TMPL_DIE which value represents the value
12710            of ARG.
12711            We must be careful here:
12712            The value of ARG might reference some function decls.
12713            We might currently be emitting debug info for a generic
12714            type and types are emitted before function decls, we don't
12715            know if the function decls referenced by ARG will actually be
12716            emitted after cgraph computations.
12717            So must defer the generation of the DW_AT_const_value to
12718            after cgraph is ready.  */
12719         append_entry_to_tmpl_value_parm_die_table (tmpl_die, arg);
12720     }
12721
12722   return tmpl_die;
12723 }
12724
12725 /* Generate and return a  DW_TAG_GNU_template_parameter_pack DIE representing.
12726    PARM_PACK must be a template parameter pack. The returned DIE
12727    will be child DIE of PARENT_DIE.  */
12728
12729 static dw_die_ref
12730 template_parameter_pack_die (tree parm_pack,
12731                              tree parm_pack_args,
12732                              dw_die_ref parent_die)
12733 {
12734   dw_die_ref die;
12735   int j;
12736
12737   gcc_assert (parent_die && parm_pack);
12738
12739   die = new_die (DW_TAG_GNU_template_parameter_pack, parent_die, parm_pack);
12740   add_name_and_src_coords_attributes (die, parm_pack);
12741   for (j = 0; j < TREE_VEC_LENGTH (parm_pack_args); j++)
12742     generic_parameter_die (parm_pack,
12743                            TREE_VEC_ELT (parm_pack_args, j),
12744                            false /* Don't emit DW_AT_name */,
12745                            die);
12746   return die;
12747 }
12748
12749 /* Given a pointer to an arbitrary ..._TYPE tree node, return true if it is
12750    an enumerated type.  */
12751
12752 static inline int
12753 type_is_enum (const_tree type)
12754 {
12755   return TREE_CODE (type) == ENUMERAL_TYPE;
12756 }
12757
12758 /* Return the DBX register number described by a given RTL node.  */
12759
12760 static unsigned int
12761 dbx_reg_number (const_rtx rtl)
12762 {
12763   unsigned regno = REGNO (rtl);
12764
12765   gcc_assert (regno < FIRST_PSEUDO_REGISTER);
12766
12767 #ifdef LEAF_REG_REMAP
12768   if (current_function_uses_only_leaf_regs)
12769     {
12770       int leaf_reg = LEAF_REG_REMAP (regno);
12771       if (leaf_reg != -1)
12772         regno = (unsigned) leaf_reg;
12773     }
12774 #endif
12775
12776   return DBX_REGISTER_NUMBER (regno);
12777 }
12778
12779 /* Optionally add a DW_OP_piece term to a location description expression.
12780    DW_OP_piece is only added if the location description expression already
12781    doesn't end with DW_OP_piece.  */
12782
12783 static void
12784 add_loc_descr_op_piece (dw_loc_descr_ref *list_head, int size)
12785 {
12786   dw_loc_descr_ref loc;
12787
12788   if (*list_head != NULL)
12789     {
12790       /* Find the end of the chain.  */
12791       for (loc = *list_head; loc->dw_loc_next != NULL; loc = loc->dw_loc_next)
12792         ;
12793
12794       if (loc->dw_loc_opc != DW_OP_piece)
12795         loc->dw_loc_next = new_loc_descr (DW_OP_piece, size, 0);
12796     }
12797 }
12798
12799 /* Return a location descriptor that designates a machine register or
12800    zero if there is none.  */
12801
12802 static dw_loc_descr_ref
12803 reg_loc_descriptor (rtx rtl, enum var_init_status initialized)
12804 {
12805   rtx regs;
12806
12807   if (REGNO (rtl) >= FIRST_PSEUDO_REGISTER)
12808     return 0;
12809
12810   regs = targetm.dwarf_register_span (rtl);
12811
12812   if (hard_regno_nregs[REGNO (rtl)][GET_MODE (rtl)] > 1 || regs)
12813     return multiple_reg_loc_descriptor (rtl, regs, initialized);
12814   else
12815     return one_reg_loc_descriptor (dbx_reg_number (rtl), initialized);
12816 }
12817
12818 /* Return a location descriptor that designates a machine register for
12819    a given hard register number.  */
12820
12821 static dw_loc_descr_ref
12822 one_reg_loc_descriptor (unsigned int regno, enum var_init_status initialized)
12823 {
12824   dw_loc_descr_ref reg_loc_descr;
12825
12826   if (regno <= 31)
12827     reg_loc_descr
12828       = new_loc_descr ((enum dwarf_location_atom) (DW_OP_reg0 + regno), 0, 0);
12829   else
12830     reg_loc_descr = new_loc_descr (DW_OP_regx, regno, 0);
12831
12832   if (initialized == VAR_INIT_STATUS_UNINITIALIZED)
12833     add_loc_descr (&reg_loc_descr, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
12834
12835   return reg_loc_descr;
12836 }
12837
12838 /* Given an RTL of a register, return a location descriptor that
12839    designates a value that spans more than one register.  */
12840
12841 static dw_loc_descr_ref
12842 multiple_reg_loc_descriptor (rtx rtl, rtx regs,
12843                              enum var_init_status initialized)
12844 {
12845   int nregs, size, i;
12846   unsigned reg;
12847   dw_loc_descr_ref loc_result = NULL;
12848
12849   reg = REGNO (rtl);
12850 #ifdef LEAF_REG_REMAP
12851   if (current_function_uses_only_leaf_regs)
12852     {
12853       int leaf_reg = LEAF_REG_REMAP (reg);
12854       if (leaf_reg != -1)
12855         reg = (unsigned) leaf_reg;
12856     }
12857 #endif
12858   gcc_assert ((unsigned) DBX_REGISTER_NUMBER (reg) == dbx_reg_number (rtl));
12859   nregs = hard_regno_nregs[REGNO (rtl)][GET_MODE (rtl)];
12860
12861   /* Simple, contiguous registers.  */
12862   if (regs == NULL_RTX)
12863     {
12864       size = GET_MODE_SIZE (GET_MODE (rtl)) / nregs;
12865
12866       loc_result = NULL;
12867       while (nregs--)
12868         {
12869           dw_loc_descr_ref t;
12870
12871           t = one_reg_loc_descriptor (DBX_REGISTER_NUMBER (reg),
12872                                       VAR_INIT_STATUS_INITIALIZED);
12873           add_loc_descr (&loc_result, t);
12874           add_loc_descr_op_piece (&loc_result, size);
12875           ++reg;
12876         }
12877       return loc_result;
12878     }
12879
12880   /* Now onto stupid register sets in non contiguous locations.  */
12881
12882   gcc_assert (GET_CODE (regs) == PARALLEL);
12883
12884   size = GET_MODE_SIZE (GET_MODE (XVECEXP (regs, 0, 0)));
12885   loc_result = NULL;
12886
12887   for (i = 0; i < XVECLEN (regs, 0); ++i)
12888     {
12889       dw_loc_descr_ref t;
12890
12891       t = one_reg_loc_descriptor (REGNO (XVECEXP (regs, 0, i)),
12892                                   VAR_INIT_STATUS_INITIALIZED);
12893       add_loc_descr (&loc_result, t);
12894       size = GET_MODE_SIZE (GET_MODE (XVECEXP (regs, 0, 0)));
12895       add_loc_descr_op_piece (&loc_result, size);
12896     }
12897
12898   if (loc_result && initialized == VAR_INIT_STATUS_UNINITIALIZED)
12899     add_loc_descr (&loc_result, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
12900   return loc_result;
12901 }
12902
12903 #endif /* DWARF2_DEBUGGING_INFO */
12904
12905 #if defined (DWARF2_DEBUGGING_INFO) || defined (DWARF2_UNWIND_INFO)
12906
12907 /* Return a location descriptor that designates a constant.  */
12908
12909 static dw_loc_descr_ref
12910 int_loc_descriptor (HOST_WIDE_INT i)
12911 {
12912   enum dwarf_location_atom op;
12913
12914   /* Pick the smallest representation of a constant, rather than just
12915      defaulting to the LEB encoding.  */
12916   if (i >= 0)
12917     {
12918       if (i <= 31)
12919         op = (enum dwarf_location_atom) (DW_OP_lit0 + i);
12920       else if (i <= 0xff)
12921         op = DW_OP_const1u;
12922       else if (i <= 0xffff)
12923         op = DW_OP_const2u;
12924       else if (HOST_BITS_PER_WIDE_INT == 32
12925                || i <= 0xffffffff)
12926         op = DW_OP_const4u;
12927       else
12928         op = DW_OP_constu;
12929     }
12930   else
12931     {
12932       if (i >= -0x80)
12933         op = DW_OP_const1s;
12934       else if (i >= -0x8000)
12935         op = DW_OP_const2s;
12936       else if (HOST_BITS_PER_WIDE_INT == 32
12937                || i >= -0x80000000)
12938         op = DW_OP_const4s;
12939       else
12940         op = DW_OP_consts;
12941     }
12942
12943   return new_loc_descr (op, i, 0);
12944 }
12945 #endif
12946
12947 #ifdef DWARF2_DEBUGGING_INFO
12948 /* Return loc description representing "address" of integer value.
12949    This can appear only as toplevel expression.  */
12950
12951 static dw_loc_descr_ref
12952 address_of_int_loc_descriptor (int size, HOST_WIDE_INT i)
12953 {
12954   int litsize;
12955   dw_loc_descr_ref loc_result = NULL;
12956
12957   if (!(dwarf_version >= 4 || !dwarf_strict))
12958     return NULL;
12959
12960   if (i >= 0)
12961     {
12962       if (i <= 31)
12963         litsize = 1;
12964       else if (i <= 0xff)
12965         litsize = 2;
12966       else if (i <= 0xffff)
12967         litsize = 3;
12968       else if (HOST_BITS_PER_WIDE_INT == 32
12969                || i <= 0xffffffff)
12970         litsize = 5;
12971       else
12972         litsize = 1 + size_of_uleb128 ((unsigned HOST_WIDE_INT) i);
12973     }
12974   else
12975     {
12976       if (i >= -0x80)
12977         litsize = 2;
12978       else if (i >= -0x8000)
12979         litsize = 3;
12980       else if (HOST_BITS_PER_WIDE_INT == 32
12981                || i >= -0x80000000)
12982         litsize = 5;
12983       else
12984         litsize = 1 + size_of_sleb128 (i);
12985     }
12986   /* Determine if DW_OP_stack_value or DW_OP_implicit_value
12987      is more compact.  For DW_OP_stack_value we need:
12988      litsize + 1 (DW_OP_stack_value)
12989      and for DW_OP_implicit_value:
12990      1 (DW_OP_implicit_value) + 1 (length) + size.  */
12991   if ((int) DWARF2_ADDR_SIZE >= size && litsize + 1 <= 1 + 1 + size)
12992     {
12993       loc_result = int_loc_descriptor (i);
12994       add_loc_descr (&loc_result,
12995                      new_loc_descr (DW_OP_stack_value, 0, 0));
12996       return loc_result;
12997     }
12998
12999   loc_result = new_loc_descr (DW_OP_implicit_value,
13000                               size, 0);
13001   loc_result->dw_loc_oprnd2.val_class = dw_val_class_const;
13002   loc_result->dw_loc_oprnd2.v.val_int = i;
13003   return loc_result;
13004 }
13005
13006 /* Return a location descriptor that designates a base+offset location.  */
13007
13008 static dw_loc_descr_ref
13009 based_loc_descr (rtx reg, HOST_WIDE_INT offset,
13010                  enum var_init_status initialized)
13011 {
13012   unsigned int regno;
13013   dw_loc_descr_ref result;
13014   dw_fde_ref fde = current_fde ();
13015
13016   /* We only use "frame base" when we're sure we're talking about the
13017      post-prologue local stack frame.  We do this by *not* running
13018      register elimination until this point, and recognizing the special
13019      argument pointer and soft frame pointer rtx's.  */
13020   if (reg == arg_pointer_rtx || reg == frame_pointer_rtx)
13021     {
13022       rtx elim = eliminate_regs (reg, VOIDmode, NULL_RTX);
13023
13024       if (elim != reg)
13025         {
13026           if (GET_CODE (elim) == PLUS)
13027             {
13028               offset += INTVAL (XEXP (elim, 1));
13029               elim = XEXP (elim, 0);
13030             }
13031           gcc_assert ((SUPPORTS_STACK_ALIGNMENT
13032                        && (elim == hard_frame_pointer_rtx
13033                            || elim == stack_pointer_rtx))
13034                       || elim == (frame_pointer_needed
13035                                   ? hard_frame_pointer_rtx
13036                                   : stack_pointer_rtx));
13037
13038           /* If drap register is used to align stack, use frame
13039              pointer + offset to access stack variables.  If stack
13040              is aligned without drap, use stack pointer + offset to
13041              access stack variables.  */
13042           if (crtl->stack_realign_tried
13043               && reg == frame_pointer_rtx)
13044             {
13045               int base_reg
13046                 = DWARF_FRAME_REGNUM ((fde && fde->drap_reg != INVALID_REGNUM)
13047                                       ? HARD_FRAME_POINTER_REGNUM
13048                                       : STACK_POINTER_REGNUM);
13049               return new_reg_loc_descr (base_reg, offset);
13050             }
13051
13052           offset += frame_pointer_fb_offset;
13053           return new_loc_descr (DW_OP_fbreg, offset, 0);
13054         }
13055     }
13056   else if (!optimize
13057            && fde
13058            && (fde->drap_reg == REGNO (reg)
13059                || fde->vdrap_reg == REGNO (reg)))
13060     {
13061       /* Use cfa+offset to represent the location of arguments passed
13062          on the stack when drap is used to align stack.
13063          Only do this when not optimizing, for optimized code var-tracking
13064          is supposed to track where the arguments live and the register
13065          used as vdrap or drap in some spot might be used for something
13066          else in other part of the routine.  */
13067       return new_loc_descr (DW_OP_fbreg, offset, 0);
13068     }
13069
13070   regno = dbx_reg_number (reg);
13071   if (regno <= 31)
13072     result = new_loc_descr ((enum dwarf_location_atom) (DW_OP_breg0 + regno),
13073                             offset, 0);
13074   else
13075     result = new_loc_descr (DW_OP_bregx, regno, offset);
13076
13077   if (initialized == VAR_INIT_STATUS_UNINITIALIZED)
13078     add_loc_descr (&result, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
13079
13080   return result;
13081 }
13082
13083 /* Return true if this RTL expression describes a base+offset calculation.  */
13084
13085 static inline int
13086 is_based_loc (const_rtx rtl)
13087 {
13088   return (GET_CODE (rtl) == PLUS
13089           && ((REG_P (XEXP (rtl, 0))
13090                && REGNO (XEXP (rtl, 0)) < FIRST_PSEUDO_REGISTER
13091                && CONST_INT_P (XEXP (rtl, 1)))));
13092 }
13093
13094 /* Try to handle TLS MEMs, for which mem_loc_descriptor on XEXP (mem, 0)
13095    failed.  */
13096
13097 static dw_loc_descr_ref
13098 tls_mem_loc_descriptor (rtx mem)
13099 {
13100   tree base;
13101   dw_loc_descr_ref loc_result;
13102
13103   if (MEM_EXPR (mem) == NULL_TREE || MEM_OFFSET (mem) == NULL_RTX)
13104     return NULL;
13105
13106   base = get_base_address (MEM_EXPR (mem));
13107   if (base == NULL
13108       || TREE_CODE (base) != VAR_DECL
13109       || !DECL_THREAD_LOCAL_P (base))
13110     return NULL;
13111
13112   loc_result = loc_descriptor_from_tree (MEM_EXPR (mem), 1);
13113   if (loc_result == NULL)
13114     return NULL;
13115
13116   if (INTVAL (MEM_OFFSET (mem)))
13117     loc_descr_plus_const (&loc_result, INTVAL (MEM_OFFSET (mem)));
13118
13119   return loc_result;
13120 }
13121
13122 /* Output debug info about reason why we failed to expand expression as dwarf
13123    expression.  */
13124
13125 static void
13126 expansion_failed (tree expr, rtx rtl, char const *reason)
13127 {
13128   if (dump_file && (dump_flags & TDF_DETAILS))
13129     {
13130       fprintf (dump_file, "Failed to expand as dwarf: ");
13131       if (expr)
13132         print_generic_expr (dump_file, expr, dump_flags);
13133       if (rtl)
13134         {
13135           fprintf (dump_file, "\n");
13136           print_rtl (dump_file, rtl);
13137         }
13138       fprintf (dump_file, "\nReason: %s\n", reason);
13139     }
13140 }
13141
13142 /* Helper function for const_ok_for_output, called either directly
13143    or via for_each_rtx.  */
13144
13145 static int
13146 const_ok_for_output_1 (rtx *rtlp, void *data ATTRIBUTE_UNUSED)
13147 {
13148   rtx rtl = *rtlp;
13149
13150   if (GET_CODE (rtl) == UNSPEC)
13151     {
13152       /* If delegitimize_address couldn't do anything with the UNSPEC, assume
13153          we can't express it in the debug info.  */
13154 #ifdef ENABLE_CHECKING
13155       inform (current_function_decl
13156               ? DECL_SOURCE_LOCATION (current_function_decl)
13157               : UNKNOWN_LOCATION,
13158               "non-delegitimized UNSPEC %d found in variable location",
13159               XINT (rtl, 1));
13160 #endif
13161       expansion_failed (NULL_TREE, rtl,
13162                         "UNSPEC hasn't been delegitimized.\n");
13163       return 1;
13164     }
13165
13166   if (GET_CODE (rtl) != SYMBOL_REF)
13167     return 0;
13168
13169   if (CONSTANT_POOL_ADDRESS_P (rtl))
13170     {
13171       bool marked;
13172       get_pool_constant_mark (rtl, &marked);
13173       /* If all references to this pool constant were optimized away,
13174          it was not output and thus we can't represent it.  */
13175       if (!marked)
13176         {
13177           expansion_failed (NULL_TREE, rtl,
13178                             "Constant was removed from constant pool.\n");
13179           return 1;
13180         }
13181     }
13182
13183   if (SYMBOL_REF_TLS_MODEL (rtl) != TLS_MODEL_NONE)
13184     return 1;
13185
13186   /* Avoid references to external symbols in debug info, on several targets
13187      the linker might even refuse to link when linking a shared library,
13188      and in many other cases the relocations for .debug_info/.debug_loc are
13189      dropped, so the address becomes zero anyway.  Hidden symbols, guaranteed
13190      to be defined within the same shared library or executable are fine.  */
13191   if (SYMBOL_REF_EXTERNAL_P (rtl))
13192     {
13193       tree decl = SYMBOL_REF_DECL (rtl);
13194
13195       if (decl == NULL || !targetm.binds_local_p (decl))
13196         {
13197           expansion_failed (NULL_TREE, rtl,
13198                             "Symbol not defined in current TU.\n");
13199           return 1;
13200         }
13201     }
13202
13203   return 0;
13204 }
13205
13206 /* Return true if constant RTL can be emitted in DW_OP_addr or
13207    DW_AT_const_value.  TLS SYMBOL_REFs, external SYMBOL_REFs or
13208    non-marked constant pool SYMBOL_REFs can't be referenced in it.  */
13209
13210 static bool
13211 const_ok_for_output (rtx rtl)
13212 {
13213   if (GET_CODE (rtl) == SYMBOL_REF)
13214     return const_ok_for_output_1 (&rtl, NULL) == 0;
13215
13216   if (GET_CODE (rtl) == CONST)
13217     return for_each_rtx (&XEXP (rtl, 0), const_ok_for_output_1, NULL) == 0;
13218
13219   return true;
13220 }
13221
13222 /* The following routine converts the RTL for a variable or parameter
13223    (resident in memory) into an equivalent Dwarf representation of a
13224    mechanism for getting the address of that same variable onto the top of a
13225    hypothetical "address evaluation" stack.
13226
13227    When creating memory location descriptors, we are effectively transforming
13228    the RTL for a memory-resident object into its Dwarf postfix expression
13229    equivalent.  This routine recursively descends an RTL tree, turning
13230    it into Dwarf postfix code as it goes.
13231
13232    MODE is the mode of the memory reference, needed to handle some
13233    autoincrement addressing modes.
13234
13235    CAN_USE_FBREG is a flag whether we can use DW_AT_frame_base in the
13236    location list for RTL.
13237
13238    Return 0 if we can't represent the location.  */
13239
13240 static dw_loc_descr_ref
13241 mem_loc_descriptor (rtx rtl, enum machine_mode mode,
13242                     enum var_init_status initialized)
13243 {
13244   dw_loc_descr_ref mem_loc_result = NULL;
13245   enum dwarf_location_atom op;
13246   dw_loc_descr_ref op0, op1;
13247
13248   /* Note that for a dynamically sized array, the location we will generate a
13249      description of here will be the lowest numbered location which is
13250      actually within the array.  That's *not* necessarily the same as the
13251      zeroth element of the array.  */
13252
13253   rtl = targetm.delegitimize_address (rtl);
13254
13255   switch (GET_CODE (rtl))
13256     {
13257     case POST_INC:
13258     case POST_DEC:
13259     case POST_MODIFY:
13260       return mem_loc_descriptor (XEXP (rtl, 0), mode, initialized);
13261
13262     case SUBREG:
13263       /* The case of a subreg may arise when we have a local (register)
13264          variable or a formal (register) parameter which doesn't quite fill
13265          up an entire register.  For now, just assume that it is
13266          legitimate to make the Dwarf info refer to the whole register which
13267          contains the given subreg.  */
13268       if (!subreg_lowpart_p (rtl))
13269         break;
13270       rtl = SUBREG_REG (rtl);
13271       if (GET_MODE_SIZE (GET_MODE (rtl)) > DWARF2_ADDR_SIZE)
13272         break;
13273       if (GET_MODE_CLASS (GET_MODE (rtl)) != MODE_INT)
13274         break;
13275       mem_loc_result = mem_loc_descriptor (rtl, mode, initialized);
13276       break;
13277
13278     case REG:
13279       /* Whenever a register number forms a part of the description of the
13280          method for calculating the (dynamic) address of a memory resident
13281          object, DWARF rules require the register number be referred to as
13282          a "base register".  This distinction is not based in any way upon
13283          what category of register the hardware believes the given register
13284          belongs to.  This is strictly DWARF terminology we're dealing with
13285          here. Note that in cases where the location of a memory-resident
13286          data object could be expressed as: OP_ADD (OP_BASEREG (basereg),
13287          OP_CONST (0)) the actual DWARF location descriptor that we generate
13288          may just be OP_BASEREG (basereg).  This may look deceptively like
13289          the object in question was allocated to a register (rather than in
13290          memory) so DWARF consumers need to be aware of the subtle
13291          distinction between OP_REG and OP_BASEREG.  */
13292       if (REGNO (rtl) < FIRST_PSEUDO_REGISTER)
13293         mem_loc_result = based_loc_descr (rtl, 0, VAR_INIT_STATUS_INITIALIZED);
13294       else if (stack_realign_drap
13295                && crtl->drap_reg
13296                && crtl->args.internal_arg_pointer == rtl
13297                && REGNO (crtl->drap_reg) < FIRST_PSEUDO_REGISTER)
13298         {
13299           /* If RTL is internal_arg_pointer, which has been optimized
13300              out, use DRAP instead.  */
13301           mem_loc_result = based_loc_descr (crtl->drap_reg, 0,
13302                                             VAR_INIT_STATUS_INITIALIZED);
13303         }
13304       break;
13305
13306     case SIGN_EXTEND:
13307     case ZERO_EXTEND:
13308       op0 = mem_loc_descriptor (XEXP (rtl, 0), mode,
13309                                 VAR_INIT_STATUS_INITIALIZED);
13310       if (op0 == 0)
13311         break;
13312       else
13313         {
13314           int shift = DWARF2_ADDR_SIZE
13315                       - GET_MODE_SIZE (GET_MODE (XEXP (rtl, 0)));
13316           shift *= BITS_PER_UNIT;
13317           if (GET_CODE (rtl) == SIGN_EXTEND)
13318             op = DW_OP_shra;
13319           else
13320             op = DW_OP_shr;
13321           mem_loc_result = op0;
13322           add_loc_descr (&mem_loc_result, int_loc_descriptor (shift));
13323           add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_shl, 0, 0));
13324           add_loc_descr (&mem_loc_result, int_loc_descriptor (shift));
13325           add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0));
13326         }
13327       break;
13328
13329     case MEM:
13330       mem_loc_result = mem_loc_descriptor (XEXP (rtl, 0), GET_MODE (rtl),
13331                                            VAR_INIT_STATUS_INITIALIZED);
13332       if (mem_loc_result == NULL)
13333         mem_loc_result = tls_mem_loc_descriptor (rtl);
13334       if (mem_loc_result != 0)
13335         {
13336           if (GET_MODE_SIZE (GET_MODE (rtl)) > DWARF2_ADDR_SIZE)
13337             {
13338               expansion_failed (NULL_TREE, rtl, "DWARF address size mismatch");
13339               return 0;
13340             }
13341           else if (GET_MODE_SIZE (GET_MODE (rtl)) == DWARF2_ADDR_SIZE)
13342             add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_deref, 0, 0));
13343           else
13344             add_loc_descr (&mem_loc_result,
13345                            new_loc_descr (DW_OP_deref_size,
13346                                           GET_MODE_SIZE (GET_MODE (rtl)), 0));
13347         }
13348       else
13349         {
13350           rtx new_rtl = avoid_constant_pool_reference (rtl);
13351           if (new_rtl != rtl)
13352             return mem_loc_descriptor (new_rtl, mode, initialized);
13353         }
13354       break;
13355
13356     case LO_SUM:
13357          rtl = XEXP (rtl, 1);
13358
13359       /* ... fall through ...  */
13360
13361     case LABEL_REF:
13362       /* Some ports can transform a symbol ref into a label ref, because
13363          the symbol ref is too far away and has to be dumped into a constant
13364          pool.  */
13365     case CONST:
13366     case SYMBOL_REF:
13367       if (GET_CODE (rtl) == SYMBOL_REF
13368           && SYMBOL_REF_TLS_MODEL (rtl) != TLS_MODEL_NONE)
13369         {
13370           dw_loc_descr_ref temp;
13371
13372           /* If this is not defined, we have no way to emit the data.  */
13373           if (!targetm.have_tls || !targetm.asm_out.output_dwarf_dtprel)
13374             break;
13375
13376           temp = new_loc_descr (DW_OP_addr, 0, 0);
13377           temp->dw_loc_oprnd1.val_class = dw_val_class_addr;
13378           temp->dw_loc_oprnd1.v.val_addr = rtl;
13379           temp->dtprel = true;
13380
13381           mem_loc_result = new_loc_descr (DW_OP_GNU_push_tls_address, 0, 0);
13382           add_loc_descr (&mem_loc_result, temp);
13383
13384           break;
13385         }
13386
13387       if (!const_ok_for_output (rtl))
13388         break;
13389
13390     symref:
13391       mem_loc_result = new_loc_descr (DW_OP_addr, 0, 0);
13392       mem_loc_result->dw_loc_oprnd1.val_class = dw_val_class_addr;
13393       mem_loc_result->dw_loc_oprnd1.v.val_addr = rtl;
13394       VEC_safe_push (rtx, gc, used_rtx_array, rtl);
13395       break;
13396
13397     case CONCAT:
13398     case CONCATN:
13399     case VAR_LOCATION:
13400       expansion_failed (NULL_TREE, rtl,
13401                         "CONCAT/CONCATN/VAR_LOCATION is handled only by loc_descriptor");
13402       return 0;
13403
13404     case PRE_MODIFY:
13405       /* Extract the PLUS expression nested inside and fall into
13406          PLUS code below.  */
13407       rtl = XEXP (rtl, 1);
13408       goto plus;
13409
13410     case PRE_INC:
13411     case PRE_DEC:
13412       /* Turn these into a PLUS expression and fall into the PLUS code
13413          below.  */
13414       rtl = gen_rtx_PLUS (word_mode, XEXP (rtl, 0),
13415                           GEN_INT (GET_CODE (rtl) == PRE_INC
13416                                    ? GET_MODE_UNIT_SIZE (mode)
13417                                    : -GET_MODE_UNIT_SIZE (mode)));
13418
13419       /* ... fall through ...  */
13420
13421     case PLUS:
13422     plus:
13423       if (is_based_loc (rtl))
13424         mem_loc_result = based_loc_descr (XEXP (rtl, 0),
13425                                           INTVAL (XEXP (rtl, 1)),
13426                                           VAR_INIT_STATUS_INITIALIZED);
13427       else
13428         {
13429           mem_loc_result = mem_loc_descriptor (XEXP (rtl, 0), mode,
13430                                                VAR_INIT_STATUS_INITIALIZED);
13431           if (mem_loc_result == 0)
13432             break;
13433
13434           if (CONST_INT_P (XEXP (rtl, 1)))
13435             loc_descr_plus_const (&mem_loc_result, INTVAL (XEXP (rtl, 1)));
13436           else
13437             {
13438               dw_loc_descr_ref mem_loc_result2
13439                 = mem_loc_descriptor (XEXP (rtl, 1), mode,
13440                                       VAR_INIT_STATUS_INITIALIZED);
13441               if (mem_loc_result2 == 0)
13442                 break;
13443               add_loc_descr (&mem_loc_result, mem_loc_result2);
13444               add_loc_descr (&mem_loc_result,
13445                              new_loc_descr (DW_OP_plus, 0, 0));
13446             }
13447         }
13448       break;
13449
13450     /* If a pseudo-reg is optimized away, it is possible for it to
13451        be replaced with a MEM containing a multiply or shift.  */
13452     case MINUS:
13453       op = DW_OP_minus;
13454       goto do_binop;
13455
13456     case MULT:
13457       op = DW_OP_mul;
13458       goto do_binop;
13459
13460     case DIV:
13461       op = DW_OP_div;
13462       goto do_binop;
13463
13464     case UMOD:
13465       op = DW_OP_mod;
13466       goto do_binop;
13467
13468     case ASHIFT:
13469       op = DW_OP_shl;
13470       goto do_binop;
13471
13472     case ASHIFTRT:
13473       op = DW_OP_shra;
13474       goto do_binop;
13475
13476     case LSHIFTRT:
13477       op = DW_OP_shr;
13478       goto do_binop;
13479
13480     case AND:
13481       op = DW_OP_and;
13482       goto do_binop;
13483
13484     case IOR:
13485       op = DW_OP_or;
13486       goto do_binop;
13487
13488     case XOR:
13489       op = DW_OP_xor;
13490       goto do_binop;
13491
13492     do_binop:
13493       op0 = mem_loc_descriptor (XEXP (rtl, 0), mode,
13494                                 VAR_INIT_STATUS_INITIALIZED);
13495       op1 = mem_loc_descriptor (XEXP (rtl, 1), mode,
13496                                 VAR_INIT_STATUS_INITIALIZED);
13497
13498       if (op0 == 0 || op1 == 0)
13499         break;
13500
13501       mem_loc_result = op0;
13502       add_loc_descr (&mem_loc_result, op1);
13503       add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0));
13504       break;
13505
13506     case MOD:
13507       op0 = mem_loc_descriptor (XEXP (rtl, 0), mode,
13508                                 VAR_INIT_STATUS_INITIALIZED);
13509       op1 = mem_loc_descriptor (XEXP (rtl, 1), mode,
13510                                 VAR_INIT_STATUS_INITIALIZED);
13511
13512       if (op0 == 0 || op1 == 0)
13513         break;
13514
13515       mem_loc_result = op0;
13516       add_loc_descr (&mem_loc_result, op1);
13517       add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_over, 0, 0));
13518       add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_over, 0, 0));
13519       add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_div, 0, 0));
13520       add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_mul, 0, 0));
13521       add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_minus, 0, 0));
13522       break;
13523
13524     case NOT:
13525       op = DW_OP_not;
13526       goto do_unop;
13527
13528     case ABS:
13529       op = DW_OP_abs;
13530       goto do_unop;
13531
13532     case NEG:
13533       op = DW_OP_neg;
13534       goto do_unop;
13535
13536     do_unop:
13537       op0 = mem_loc_descriptor (XEXP (rtl, 0), mode,
13538                                 VAR_INIT_STATUS_INITIALIZED);
13539
13540       if (op0 == 0)
13541         break;
13542
13543       mem_loc_result = op0;
13544       add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0));
13545       break;
13546
13547     case CONST_INT:
13548       mem_loc_result = int_loc_descriptor (INTVAL (rtl));
13549       break;
13550
13551     case EQ:
13552       op = DW_OP_eq;
13553       goto do_scompare;
13554
13555     case GE:
13556       op = DW_OP_ge;
13557       goto do_scompare;
13558
13559     case GT:
13560       op = DW_OP_gt;
13561       goto do_scompare;
13562
13563     case LE:
13564       op = DW_OP_le;
13565       goto do_scompare;
13566
13567     case LT:
13568       op = DW_OP_lt;
13569       goto do_scompare;
13570
13571     case NE:
13572       op = DW_OP_ne;
13573       goto do_scompare;
13574
13575     do_scompare:
13576       if (GET_MODE_SIZE (GET_MODE (XEXP (rtl, 0))) > DWARF2_ADDR_SIZE
13577           || GET_MODE_SIZE (GET_MODE (XEXP (rtl, 1))) > DWARF2_ADDR_SIZE)
13578         break;
13579       else
13580         {
13581           enum machine_mode op_mode = GET_MODE (XEXP (rtl, 0));
13582
13583           if (op_mode == VOIDmode)
13584             op_mode = GET_MODE (XEXP (rtl, 1));
13585           if (op_mode != VOIDmode && GET_MODE_CLASS (op_mode) != MODE_INT)
13586             break;
13587
13588           op0 = mem_loc_descriptor (XEXP (rtl, 0), mode,
13589                                     VAR_INIT_STATUS_INITIALIZED);
13590           op1 = mem_loc_descriptor (XEXP (rtl, 1), mode,
13591                                     VAR_INIT_STATUS_INITIALIZED);
13592
13593           if (op0 == 0 || op1 == 0)
13594             break;
13595
13596           if (op_mode != VOIDmode
13597               && GET_MODE_SIZE (op_mode) < DWARF2_ADDR_SIZE)
13598             {
13599               int shift = DWARF2_ADDR_SIZE - GET_MODE_SIZE (op_mode);
13600               shift *= BITS_PER_UNIT;
13601               /* For eq/ne, if the operands are known to be zero-extended,
13602                  there is no need to do the fancy shifting up.  */
13603               if (op == DW_OP_eq || op == DW_OP_ne)
13604                 {
13605                   dw_loc_descr_ref last0, last1;
13606                   for (last0 = op0;
13607                        last0->dw_loc_next != NULL;
13608                        last0 = last0->dw_loc_next)
13609                     ;
13610                   for (last1 = op1;
13611                        last1->dw_loc_next != NULL;
13612                        last1 = last1->dw_loc_next)
13613                     ;
13614                   /* deref_size zero extends, and for constants we can check
13615                      whether they are zero extended or not.  */
13616                   if (((last0->dw_loc_opc == DW_OP_deref_size
13617                         && last0->dw_loc_oprnd1.v.val_int
13618                            <= GET_MODE_SIZE (op_mode))
13619                        || (CONST_INT_P (XEXP (rtl, 0))
13620                             && (unsigned HOST_WIDE_INT) INTVAL (XEXP (rtl, 0))
13621                                == (INTVAL (XEXP (rtl, 0))
13622                                    & GET_MODE_MASK (op_mode))))
13623                       && ((last1->dw_loc_opc == DW_OP_deref_size
13624                            && last1->dw_loc_oprnd1.v.val_int
13625                               <= GET_MODE_SIZE (op_mode))
13626                           || (CONST_INT_P (XEXP (rtl, 1))
13627                               && (unsigned HOST_WIDE_INT)
13628                                  INTVAL (XEXP (rtl, 1))
13629                                  == (INTVAL (XEXP (rtl, 1))
13630                                      & GET_MODE_MASK (op_mode)))))
13631                     goto do_compare;
13632                 }
13633               add_loc_descr (&op0, int_loc_descriptor (shift));
13634               add_loc_descr (&op0, new_loc_descr (DW_OP_shl, 0, 0));
13635               if (CONST_INT_P (XEXP (rtl, 1)))
13636                 op1 = int_loc_descriptor (INTVAL (XEXP (rtl, 1)) << shift);
13637               else
13638                 {
13639                   add_loc_descr (&op1, int_loc_descriptor (shift));
13640                   add_loc_descr (&op1, new_loc_descr (DW_OP_shl, 0, 0));
13641                 }
13642             }
13643         }
13644
13645     do_compare:
13646       mem_loc_result = op0;
13647       add_loc_descr (&mem_loc_result, op1);
13648       add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0));
13649       if (STORE_FLAG_VALUE != 1)
13650         {
13651           add_loc_descr (&mem_loc_result,
13652                          int_loc_descriptor (STORE_FLAG_VALUE));
13653           add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_mul, 0, 0));
13654         }
13655       break;
13656
13657     case GEU:
13658       op = DW_OP_ge;
13659       goto do_ucompare;
13660
13661     case GTU:
13662       op = DW_OP_gt;
13663       goto do_ucompare;
13664
13665     case LEU:
13666       op = DW_OP_le;
13667       goto do_ucompare;
13668
13669     case LTU:
13670       op = DW_OP_lt;
13671       goto do_ucompare;
13672
13673     do_ucompare:
13674       if (GET_MODE_SIZE (GET_MODE (XEXP (rtl, 0))) > DWARF2_ADDR_SIZE
13675           || GET_MODE_SIZE (GET_MODE (XEXP (rtl, 1))) > DWARF2_ADDR_SIZE)
13676         break;
13677       else
13678         {
13679           enum machine_mode op_mode = GET_MODE (XEXP (rtl, 0));
13680
13681           if (op_mode == VOIDmode)
13682             op_mode = GET_MODE (XEXP (rtl, 1));
13683           if (op_mode != VOIDmode && GET_MODE_CLASS (op_mode) != MODE_INT)
13684             break;
13685
13686           op0 = mem_loc_descriptor (XEXP (rtl, 0), mode,
13687                                     VAR_INIT_STATUS_INITIALIZED);
13688           op1 = mem_loc_descriptor (XEXP (rtl, 1), mode,
13689                                     VAR_INIT_STATUS_INITIALIZED);
13690
13691           if (op0 == 0 || op1 == 0)
13692             break;
13693
13694           if (op_mode != VOIDmode
13695               && GET_MODE_SIZE (op_mode) < DWARF2_ADDR_SIZE)
13696             {
13697               HOST_WIDE_INT mask = GET_MODE_MASK (op_mode);
13698               dw_loc_descr_ref last0, last1;
13699               for (last0 = op0;
13700                    last0->dw_loc_next != NULL;
13701                    last0 = last0->dw_loc_next)
13702                 ;
13703               for (last1 = op1;
13704                    last1->dw_loc_next != NULL;
13705                    last1 = last1->dw_loc_next)
13706                 ;
13707               if (CONST_INT_P (XEXP (rtl, 0)))
13708                 op0 = int_loc_descriptor (INTVAL (XEXP (rtl, 0)) & mask);
13709               /* deref_size zero extends, so no need to mask it again.  */
13710               else if (last0->dw_loc_opc != DW_OP_deref_size
13711                        || last0->dw_loc_oprnd1.v.val_int
13712                           > GET_MODE_SIZE (op_mode))
13713                 {
13714                   add_loc_descr (&op0, int_loc_descriptor (mask));
13715                   add_loc_descr (&op0, new_loc_descr (DW_OP_and, 0, 0));
13716                 }
13717               if (CONST_INT_P (XEXP (rtl, 1)))
13718                 op1 = int_loc_descriptor (INTVAL (XEXP (rtl, 1)) & mask);
13719               /* deref_size zero extends, so no need to mask it again.  */
13720               else if (last1->dw_loc_opc != DW_OP_deref_size
13721                        || last1->dw_loc_oprnd1.v.val_int
13722                           > GET_MODE_SIZE (op_mode))
13723                 {
13724                   add_loc_descr (&op1, int_loc_descriptor (mask));
13725                   add_loc_descr (&op1, new_loc_descr (DW_OP_and, 0, 0));
13726                 }
13727             }
13728           else
13729             {
13730               HOST_WIDE_INT bias = 1;
13731               bias <<= (DWARF2_ADDR_SIZE * BITS_PER_UNIT - 1);
13732               add_loc_descr (&op0, new_loc_descr (DW_OP_plus_uconst, bias, 0));
13733               if (CONST_INT_P (XEXP (rtl, 1)))
13734                 op1 = int_loc_descriptor ((unsigned HOST_WIDE_INT) bias
13735                                           + INTVAL (XEXP (rtl, 1)));
13736               else
13737                 add_loc_descr (&op1, new_loc_descr (DW_OP_plus_uconst,
13738                                                     bias, 0));
13739             }
13740         }
13741       goto do_compare;
13742
13743     case SMIN:
13744     case SMAX:
13745     case UMIN:
13746     case UMAX:
13747       if (GET_MODE_CLASS (GET_MODE (XEXP (rtl, 0))) != MODE_INT
13748           || GET_MODE_SIZE (GET_MODE (XEXP (rtl, 0))) > DWARF2_ADDR_SIZE
13749           || GET_MODE (XEXP (rtl, 0)) != GET_MODE (XEXP (rtl, 1)))
13750         break;
13751
13752       op0 = mem_loc_descriptor (XEXP (rtl, 0), mode,
13753                                 VAR_INIT_STATUS_INITIALIZED);
13754       op1 = mem_loc_descriptor (XEXP (rtl, 1), mode,
13755                                 VAR_INIT_STATUS_INITIALIZED);
13756
13757       if (op0 == 0 || op1 == 0)
13758         break;
13759
13760       add_loc_descr (&op0, new_loc_descr (DW_OP_dup, 0, 0));
13761       add_loc_descr (&op1, new_loc_descr (DW_OP_swap, 0, 0));
13762       add_loc_descr (&op1, new_loc_descr (DW_OP_over, 0, 0));
13763       if (GET_CODE (rtl) == UMIN || GET_CODE (rtl) == UMAX)
13764         {
13765           if (GET_MODE_SIZE (GET_MODE (XEXP (rtl, 0))) < DWARF2_ADDR_SIZE)
13766             {
13767               HOST_WIDE_INT mask = GET_MODE_MASK (GET_MODE (XEXP (rtl, 0)));
13768               add_loc_descr (&op0, int_loc_descriptor (mask));
13769               add_loc_descr (&op0, new_loc_descr (DW_OP_and, 0, 0));
13770               add_loc_descr (&op1, int_loc_descriptor (mask));
13771               add_loc_descr (&op1, new_loc_descr (DW_OP_and, 0, 0));
13772             }
13773           else
13774             {
13775               HOST_WIDE_INT bias = 1;
13776               bias <<= (DWARF2_ADDR_SIZE * BITS_PER_UNIT - 1);
13777               add_loc_descr (&op0, new_loc_descr (DW_OP_plus_uconst, bias, 0));
13778               add_loc_descr (&op1, new_loc_descr (DW_OP_plus_uconst, bias, 0));
13779             }
13780         }
13781       else if (GET_MODE_SIZE (GET_MODE (XEXP (rtl, 0))) < DWARF2_ADDR_SIZE)
13782         {
13783           int shift = DWARF2_ADDR_SIZE
13784                       - GET_MODE_SIZE (GET_MODE (XEXP (rtl, 0)));
13785           shift *= BITS_PER_UNIT;
13786           add_loc_descr (&op0, int_loc_descriptor (shift));
13787           add_loc_descr (&op0, new_loc_descr (DW_OP_shl, 0, 0));
13788           add_loc_descr (&op1, int_loc_descriptor (shift));
13789           add_loc_descr (&op1, new_loc_descr (DW_OP_shl, 0, 0));
13790         }
13791
13792       if (GET_CODE (rtl) == SMIN || GET_CODE (rtl) == UMIN)
13793         op = DW_OP_lt;
13794       else
13795         op = DW_OP_gt;
13796       mem_loc_result = op0;
13797       add_loc_descr (&mem_loc_result, op1);
13798       add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0));
13799       {
13800         dw_loc_descr_ref bra_node, drop_node;
13801
13802         bra_node = new_loc_descr (DW_OP_bra, 0, 0);
13803         add_loc_descr (&mem_loc_result, bra_node);
13804         add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_swap, 0, 0));
13805         drop_node = new_loc_descr (DW_OP_drop, 0, 0);
13806         add_loc_descr (&mem_loc_result, drop_node);
13807         bra_node->dw_loc_oprnd1.val_class = dw_val_class_loc;
13808         bra_node->dw_loc_oprnd1.v.val_loc = drop_node;
13809       }
13810       break;
13811
13812     case ZERO_EXTRACT:
13813     case SIGN_EXTRACT:
13814       if (CONST_INT_P (XEXP (rtl, 1))
13815           && CONST_INT_P (XEXP (rtl, 2))
13816           && ((unsigned) INTVAL (XEXP (rtl, 1))
13817               + (unsigned) INTVAL (XEXP (rtl, 2))
13818               <= GET_MODE_BITSIZE (GET_MODE (rtl)))
13819           && GET_MODE_BITSIZE (GET_MODE (rtl)) <= DWARF2_ADDR_SIZE
13820           && GET_MODE_BITSIZE (GET_MODE (XEXP (rtl, 0))) <= DWARF2_ADDR_SIZE)
13821         {
13822           int shift, size;
13823           op0 = mem_loc_descriptor (XEXP (rtl, 0), mode,
13824                                     VAR_INIT_STATUS_INITIALIZED);
13825           if (op0 == 0)
13826             break;
13827           if (GET_CODE (rtl) == SIGN_EXTRACT)
13828             op = DW_OP_shra;
13829           else
13830             op = DW_OP_shr;
13831           mem_loc_result = op0;
13832           size = INTVAL (XEXP (rtl, 1));
13833           shift = INTVAL (XEXP (rtl, 2));
13834           if (BITS_BIG_ENDIAN)
13835             shift = GET_MODE_BITSIZE (GET_MODE (XEXP (rtl, 0)))
13836                     - shift - size;
13837           if (shift + size != (int) DWARF2_ADDR_SIZE)
13838             {
13839               add_loc_descr (&mem_loc_result,
13840                              int_loc_descriptor (DWARF2_ADDR_SIZE
13841                                                  - shift - size));
13842               add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_shl, 0, 0));
13843             }
13844           if (size != (int) DWARF2_ADDR_SIZE)
13845             {
13846               add_loc_descr (&mem_loc_result,
13847                              int_loc_descriptor (DWARF2_ADDR_SIZE - size));
13848               add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0));
13849             }
13850         }
13851       break;
13852
13853     case COMPARE:
13854     case IF_THEN_ELSE:
13855     case ROTATE:
13856     case ROTATERT:
13857     case TRUNCATE:
13858       /* In theory, we could implement the above.  */
13859       /* DWARF cannot represent the unsigned compare operations
13860          natively.  */
13861     case SS_MULT:
13862     case US_MULT:
13863     case SS_DIV:
13864     case US_DIV:
13865     case SS_PLUS:
13866     case US_PLUS:
13867     case SS_MINUS:
13868     case US_MINUS:
13869     case SS_NEG:
13870     case US_NEG:
13871     case SS_ABS:
13872     case SS_ASHIFT:
13873     case US_ASHIFT:
13874     case SS_TRUNCATE:
13875     case US_TRUNCATE:
13876     case UDIV:
13877     case UNORDERED:
13878     case ORDERED:
13879     case UNEQ:
13880     case UNGE:
13881     case UNGT:
13882     case UNLE:
13883     case UNLT:
13884     case LTGT:
13885     case FLOAT_EXTEND:
13886     case FLOAT_TRUNCATE:
13887     case FLOAT:
13888     case UNSIGNED_FLOAT:
13889     case FIX:
13890     case UNSIGNED_FIX:
13891     case FRACT_CONVERT:
13892     case UNSIGNED_FRACT_CONVERT:
13893     case SAT_FRACT:
13894     case UNSIGNED_SAT_FRACT:
13895     case SQRT:
13896     case BSWAP:
13897     case FFS:
13898     case CLZ:
13899     case CTZ:
13900     case POPCOUNT:
13901     case PARITY:
13902     case ASM_OPERANDS:
13903     case VEC_MERGE:
13904     case VEC_SELECT:
13905     case VEC_CONCAT:
13906     case VEC_DUPLICATE:
13907     case UNSPEC:
13908     case HIGH:
13909       /* If delegitimize_address couldn't do anything with the UNSPEC, we
13910          can't express it in the debug info.  This can happen e.g. with some
13911          TLS UNSPECs.  */
13912       break;
13913
13914     case CONST_STRING:
13915       resolve_one_addr (&rtl, NULL);
13916       goto symref;
13917
13918     default:
13919 #ifdef ENABLE_CHECKING
13920       print_rtl (stderr, rtl);
13921       gcc_unreachable ();
13922 #else
13923       break;
13924 #endif
13925     }
13926
13927   if (mem_loc_result && initialized == VAR_INIT_STATUS_UNINITIALIZED)
13928     add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
13929
13930   return mem_loc_result;
13931 }
13932
13933 /* Return a descriptor that describes the concatenation of two locations.
13934    This is typically a complex variable.  */
13935
13936 static dw_loc_descr_ref
13937 concat_loc_descriptor (rtx x0, rtx x1, enum var_init_status initialized)
13938 {
13939   dw_loc_descr_ref cc_loc_result = NULL;
13940   dw_loc_descr_ref x0_ref
13941     = loc_descriptor (x0, VOIDmode, VAR_INIT_STATUS_INITIALIZED);
13942   dw_loc_descr_ref x1_ref
13943     = loc_descriptor (x1, VOIDmode, VAR_INIT_STATUS_INITIALIZED);
13944
13945   if (x0_ref == 0 || x1_ref == 0)
13946     return 0;
13947
13948   cc_loc_result = x0_ref;
13949   add_loc_descr_op_piece (&cc_loc_result, GET_MODE_SIZE (GET_MODE (x0)));
13950
13951   add_loc_descr (&cc_loc_result, x1_ref);
13952   add_loc_descr_op_piece (&cc_loc_result, GET_MODE_SIZE (GET_MODE (x1)));
13953
13954   if (initialized == VAR_INIT_STATUS_UNINITIALIZED)
13955     add_loc_descr (&cc_loc_result, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
13956
13957   return cc_loc_result;
13958 }
13959
13960 /* Return a descriptor that describes the concatenation of N
13961    locations.  */
13962
13963 static dw_loc_descr_ref
13964 concatn_loc_descriptor (rtx concatn, enum var_init_status initialized)
13965 {
13966   unsigned int i;
13967   dw_loc_descr_ref cc_loc_result = NULL;
13968   unsigned int n = XVECLEN (concatn, 0);
13969
13970   for (i = 0; i < n; ++i)
13971     {
13972       dw_loc_descr_ref ref;
13973       rtx x = XVECEXP (concatn, 0, i);
13974
13975       ref = loc_descriptor (x, VOIDmode, VAR_INIT_STATUS_INITIALIZED);
13976       if (ref == NULL)
13977         return NULL;
13978
13979       add_loc_descr (&cc_loc_result, ref);
13980       add_loc_descr_op_piece (&cc_loc_result, GET_MODE_SIZE (GET_MODE (x)));
13981     }
13982
13983   if (cc_loc_result && initialized == VAR_INIT_STATUS_UNINITIALIZED)
13984     add_loc_descr (&cc_loc_result, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
13985
13986   return cc_loc_result;
13987 }
13988
13989 /* Output a proper Dwarf location descriptor for a variable or parameter
13990    which is either allocated in a register or in a memory location.  For a
13991    register, we just generate an OP_REG and the register number.  For a
13992    memory location we provide a Dwarf postfix expression describing how to
13993    generate the (dynamic) address of the object onto the address stack.
13994
13995    MODE is mode of the decl if this loc_descriptor is going to be used in
13996    .debug_loc section where DW_OP_stack_value and DW_OP_implicit_value are
13997    allowed, VOIDmode otherwise.
13998
13999    If we don't know how to describe it, return 0.  */
14000
14001 static dw_loc_descr_ref
14002 loc_descriptor (rtx rtl, enum machine_mode mode,
14003                 enum var_init_status initialized)
14004 {
14005   dw_loc_descr_ref loc_result = NULL;
14006
14007   switch (GET_CODE (rtl))
14008     {
14009     case SUBREG:
14010       /* The case of a subreg may arise when we have a local (register)
14011          variable or a formal (register) parameter which doesn't quite fill
14012          up an entire register.  For now, just assume that it is
14013          legitimate to make the Dwarf info refer to the whole register which
14014          contains the given subreg.  */
14015       loc_result = loc_descriptor (SUBREG_REG (rtl), mode, initialized);
14016       break;
14017
14018     case REG:
14019       loc_result = reg_loc_descriptor (rtl, initialized);
14020       break;
14021
14022     case SIGN_EXTEND:
14023     case ZERO_EXTEND:
14024       loc_result = loc_descriptor (XEXP (rtl, 0), mode, initialized);
14025       break;
14026
14027     case MEM:
14028       loc_result = mem_loc_descriptor (XEXP (rtl, 0), GET_MODE (rtl),
14029                                        initialized);
14030       if (loc_result == NULL)
14031         loc_result = tls_mem_loc_descriptor (rtl);
14032       if (loc_result == NULL)
14033         {
14034           rtx new_rtl = avoid_constant_pool_reference (rtl);
14035           if (new_rtl != rtl)
14036             loc_result = loc_descriptor (new_rtl, mode, initialized);
14037         }
14038       break;
14039
14040     case CONCAT:
14041       loc_result = concat_loc_descriptor (XEXP (rtl, 0), XEXP (rtl, 1),
14042                                           initialized);
14043       break;
14044
14045     case CONCATN:
14046       loc_result = concatn_loc_descriptor (rtl, initialized);
14047       break;
14048
14049     case VAR_LOCATION:
14050       /* Single part.  */
14051       if (GET_CODE (PAT_VAR_LOCATION_LOC (rtl)) != PARALLEL)
14052         {
14053           rtx loc = PAT_VAR_LOCATION_LOC (rtl);
14054           if (GET_CODE (loc) == EXPR_LIST)
14055             loc = XEXP (loc, 0);
14056           loc_result = loc_descriptor (loc, mode, initialized);
14057           break;
14058         }
14059
14060       rtl = XEXP (rtl, 1);
14061       /* FALLTHRU */
14062
14063     case PARALLEL:
14064       {
14065         rtvec par_elems = XVEC (rtl, 0);
14066         int num_elem = GET_NUM_ELEM (par_elems);
14067         enum machine_mode mode;
14068         int i;
14069
14070         /* Create the first one, so we have something to add to.  */
14071         loc_result = loc_descriptor (XEXP (RTVEC_ELT (par_elems, 0), 0),
14072                                      VOIDmode, initialized);
14073         if (loc_result == NULL)
14074           return NULL;
14075         mode = GET_MODE (XEXP (RTVEC_ELT (par_elems, 0), 0));
14076         add_loc_descr_op_piece (&loc_result, GET_MODE_SIZE (mode));
14077         for (i = 1; i < num_elem; i++)
14078           {
14079             dw_loc_descr_ref temp;
14080
14081             temp = loc_descriptor (XEXP (RTVEC_ELT (par_elems, i), 0),
14082                                    VOIDmode, initialized);
14083             if (temp == NULL)
14084               return NULL;
14085             add_loc_descr (&loc_result, temp);
14086             mode = GET_MODE (XEXP (RTVEC_ELT (par_elems, i), 0));
14087             add_loc_descr_op_piece (&loc_result, GET_MODE_SIZE (mode));
14088           }
14089       }
14090       break;
14091
14092     case CONST_INT:
14093       if (mode != VOIDmode && mode != BLKmode)
14094         loc_result = address_of_int_loc_descriptor (GET_MODE_SIZE (mode),
14095                                                     INTVAL (rtl));
14096       break;
14097
14098     case CONST_DOUBLE:
14099       if (mode == VOIDmode)
14100         mode = GET_MODE (rtl);
14101
14102       if (mode != VOIDmode && (dwarf_version >= 4 || !dwarf_strict))
14103         {
14104           gcc_assert (mode == GET_MODE (rtl) || VOIDmode == GET_MODE (rtl));
14105
14106           /* Note that a CONST_DOUBLE rtx could represent either an integer
14107              or a floating-point constant.  A CONST_DOUBLE is used whenever
14108              the constant requires more than one word in order to be
14109              adequately represented.  We output CONST_DOUBLEs as blocks.  */
14110           loc_result = new_loc_descr (DW_OP_implicit_value,
14111                                       GET_MODE_SIZE (mode), 0);
14112           if (SCALAR_FLOAT_MODE_P (mode))
14113             {
14114               unsigned int length = GET_MODE_SIZE (mode);
14115               unsigned char *array = GGC_NEWVEC (unsigned char, length);
14116
14117               insert_float (rtl, array);
14118               loc_result->dw_loc_oprnd2.val_class = dw_val_class_vec;
14119               loc_result->dw_loc_oprnd2.v.val_vec.length = length / 4;
14120               loc_result->dw_loc_oprnd2.v.val_vec.elt_size = 4;
14121               loc_result->dw_loc_oprnd2.v.val_vec.array = array;
14122             }
14123           else
14124             {
14125               loc_result->dw_loc_oprnd2.val_class = dw_val_class_const_double;
14126               loc_result->dw_loc_oprnd2.v.val_double
14127                 = rtx_to_double_int (rtl);
14128             }
14129         }
14130       break;
14131
14132     case CONST_VECTOR:
14133       if (mode == VOIDmode)
14134         mode = GET_MODE (rtl);
14135
14136       if (mode != VOIDmode && (dwarf_version >= 4 || !dwarf_strict))
14137         {
14138           unsigned int elt_size = GET_MODE_UNIT_SIZE (GET_MODE (rtl));
14139           unsigned int length = CONST_VECTOR_NUNITS (rtl);
14140           unsigned char *array = GGC_NEWVEC (unsigned char, length * elt_size);
14141           unsigned int i;
14142           unsigned char *p;
14143
14144           gcc_assert (mode == GET_MODE (rtl) || VOIDmode == GET_MODE (rtl));
14145           switch (GET_MODE_CLASS (mode))
14146             {
14147             case MODE_VECTOR_INT:
14148               for (i = 0, p = array; i < length; i++, p += elt_size)
14149                 {
14150                   rtx elt = CONST_VECTOR_ELT (rtl, i);
14151                   double_int val = rtx_to_double_int (elt);
14152
14153                   if (elt_size <= sizeof (HOST_WIDE_INT))
14154                     insert_int (double_int_to_shwi (val), elt_size, p);
14155                   else
14156                     {
14157                       gcc_assert (elt_size == 2 * sizeof (HOST_WIDE_INT));
14158                       insert_double (val, p);
14159                     }
14160                 }
14161               break;
14162
14163             case MODE_VECTOR_FLOAT:
14164               for (i = 0, p = array; i < length; i++, p += elt_size)
14165                 {
14166                   rtx elt = CONST_VECTOR_ELT (rtl, i);
14167                   insert_float (elt, p);
14168                 }
14169               break;
14170
14171             default:
14172               gcc_unreachable ();
14173             }
14174
14175           loc_result = new_loc_descr (DW_OP_implicit_value,
14176                                       length * elt_size, 0);
14177           loc_result->dw_loc_oprnd2.val_class = dw_val_class_vec;
14178           loc_result->dw_loc_oprnd2.v.val_vec.length = length;
14179           loc_result->dw_loc_oprnd2.v.val_vec.elt_size = elt_size;
14180           loc_result->dw_loc_oprnd2.v.val_vec.array = array;
14181         }
14182       break;
14183
14184     case CONST:
14185       if (mode == VOIDmode
14186           || GET_CODE (XEXP (rtl, 0)) == CONST_INT
14187           || GET_CODE (XEXP (rtl, 0)) == CONST_DOUBLE
14188           || GET_CODE (XEXP (rtl, 0)) == CONST_VECTOR)
14189         {
14190           loc_result = loc_descriptor (XEXP (rtl, 0), mode, initialized);
14191           break;
14192         }
14193       /* FALLTHROUGH */
14194     case SYMBOL_REF:
14195       if (!const_ok_for_output (rtl))
14196         break;
14197     case LABEL_REF:
14198       if (mode != VOIDmode && GET_MODE_SIZE (mode) == DWARF2_ADDR_SIZE
14199           && (dwarf_version >= 4 || !dwarf_strict))
14200         {
14201           loc_result = new_loc_descr (DW_OP_addr, 0, 0);
14202           loc_result->dw_loc_oprnd1.val_class = dw_val_class_addr;
14203           loc_result->dw_loc_oprnd1.v.val_addr = rtl;
14204           add_loc_descr (&loc_result, new_loc_descr (DW_OP_stack_value, 0, 0));
14205           VEC_safe_push (rtx, gc, used_rtx_array, rtl);
14206         }
14207       break;
14208
14209     default:
14210       if (GET_MODE_CLASS (mode) == MODE_INT && GET_MODE (rtl) == mode
14211           && GET_MODE_SIZE (GET_MODE (rtl)) <= DWARF2_ADDR_SIZE
14212           && (dwarf_version >= 4 || !dwarf_strict))
14213         {
14214           /* Value expression.  */
14215           loc_result = mem_loc_descriptor (rtl, VOIDmode, initialized);
14216           if (loc_result)
14217             add_loc_descr (&loc_result,
14218                            new_loc_descr (DW_OP_stack_value, 0, 0));
14219         }
14220       break;
14221     }
14222
14223   return loc_result;
14224 }
14225
14226 /* We need to figure out what section we should use as the base for the
14227    address ranges where a given location is valid.
14228    1. If this particular DECL has a section associated with it, use that.
14229    2. If this function has a section associated with it, use that.
14230    3. Otherwise, use the text section.
14231    XXX: If you split a variable across multiple sections, we won't notice.  */
14232
14233 static const char *
14234 secname_for_decl (const_tree decl)
14235 {
14236   const char *secname;
14237
14238   if (VAR_OR_FUNCTION_DECL_P (decl) && DECL_SECTION_NAME (decl))
14239     {
14240       tree sectree = DECL_SECTION_NAME (decl);
14241       secname = TREE_STRING_POINTER (sectree);
14242     }
14243   else if (current_function_decl && DECL_SECTION_NAME (current_function_decl))
14244     {
14245       tree sectree = DECL_SECTION_NAME (current_function_decl);
14246       secname = TREE_STRING_POINTER (sectree);
14247     }
14248   else if (cfun && in_cold_section_p)
14249     secname = crtl->subsections.cold_section_label;
14250   else
14251     secname = text_section_label;
14252
14253   return secname;
14254 }
14255
14256 /* Return true when DECL_BY_REFERENCE is defined and set for DECL.  */
14257
14258 static bool
14259 decl_by_reference_p (tree decl)
14260 {
14261   return ((TREE_CODE (decl) == PARM_DECL || TREE_CODE (decl) == RESULT_DECL
14262            || TREE_CODE (decl) == VAR_DECL)
14263           && DECL_BY_REFERENCE (decl));
14264 }
14265
14266 /* Helper function for dw_loc_list.  Compute proper Dwarf location descriptor
14267    for VARLOC.  */
14268
14269 static dw_loc_descr_ref
14270 dw_loc_list_1 (tree loc, rtx varloc, int want_address,
14271                enum var_init_status initialized)
14272 {
14273   int have_address = 0;
14274   dw_loc_descr_ref descr;
14275   enum machine_mode mode;
14276
14277   if (want_address != 2)
14278     {
14279       gcc_assert (GET_CODE (varloc) == VAR_LOCATION);
14280       /* Single part.  */
14281       if (GET_CODE (PAT_VAR_LOCATION_LOC (varloc)) != PARALLEL)
14282         {
14283           varloc = PAT_VAR_LOCATION_LOC (varloc);
14284           if (GET_CODE (varloc) == EXPR_LIST)
14285             varloc = XEXP (varloc, 0);
14286           mode = GET_MODE (varloc);
14287           if (MEM_P (varloc))
14288             {
14289               rtx addr = XEXP (varloc, 0);
14290               descr = mem_loc_descriptor (addr, mode, initialized);
14291               if (descr)
14292                 have_address = 1;
14293               else
14294                 {
14295                   rtx x = avoid_constant_pool_reference (varloc);
14296                   if (x != varloc)
14297                     descr = mem_loc_descriptor (x, mode, initialized);
14298                 }
14299             }
14300           else
14301             descr = mem_loc_descriptor (varloc, mode, initialized);
14302         }
14303       else
14304         return 0;
14305     }
14306   else
14307     {
14308       if (GET_CODE (varloc) == VAR_LOCATION)
14309         mode = DECL_MODE (PAT_VAR_LOCATION_DECL (varloc));
14310       else
14311         mode = DECL_MODE (loc);
14312       descr = loc_descriptor (varloc, mode, initialized);
14313       have_address = 1;
14314     }
14315
14316   if (!descr)
14317     return 0;
14318
14319   if (want_address == 2 && !have_address
14320       && (dwarf_version >= 4 || !dwarf_strict))
14321     {
14322       if (int_size_in_bytes (TREE_TYPE (loc)) > DWARF2_ADDR_SIZE)
14323         {
14324           expansion_failed (loc, NULL_RTX,
14325                             "DWARF address size mismatch");
14326           return 0;
14327         }
14328       add_loc_descr (&descr, new_loc_descr (DW_OP_stack_value, 0, 0));
14329       have_address = 1;
14330     }
14331   /* Show if we can't fill the request for an address.  */
14332   if (want_address && !have_address)
14333     {
14334       expansion_failed (loc, NULL_RTX,
14335                         "Want address and only have value");
14336       return 0;
14337     }
14338
14339   /* If we've got an address and don't want one, dereference.  */
14340   if (!want_address && have_address)
14341     {
14342       HOST_WIDE_INT size = int_size_in_bytes (TREE_TYPE (loc));
14343       enum dwarf_location_atom op;
14344
14345       if (size > DWARF2_ADDR_SIZE || size == -1)
14346         {
14347           expansion_failed (loc, NULL_RTX,
14348                             "DWARF address size mismatch");
14349           return 0;
14350         }
14351       else if (size == DWARF2_ADDR_SIZE)
14352         op = DW_OP_deref;
14353       else
14354         op = DW_OP_deref_size;
14355
14356       add_loc_descr (&descr, new_loc_descr (op, size, 0));
14357     }
14358
14359   return descr;
14360 }
14361
14362 /* Create a DW_OP_piece or DW_OP_bit_piece for bitsize, or return NULL
14363    if it is not possible.  */
14364
14365 static dw_loc_descr_ref
14366 new_loc_descr_op_bit_piece (HOST_WIDE_INT bitsize, HOST_WIDE_INT offset)
14367 {
14368   if ((bitsize % BITS_PER_UNIT) == 0 && offset == 0)
14369     return new_loc_descr (DW_OP_piece, bitsize / BITS_PER_UNIT, 0);
14370   else if (dwarf_version >= 3 || !dwarf_strict)
14371     return new_loc_descr (DW_OP_bit_piece, bitsize, offset);
14372   else
14373     return NULL;
14374 }
14375
14376 /* Helper function for dw_loc_list.  Compute proper Dwarf location descriptor
14377    for VAR_LOC_NOTE for variable DECL that has been optimized by SRA.  */
14378
14379 static dw_loc_descr_ref
14380 dw_sra_loc_expr (tree decl, rtx loc)
14381 {
14382   rtx p;
14383   unsigned int padsize = 0;
14384   dw_loc_descr_ref descr, *descr_tail;
14385   unsigned HOST_WIDE_INT decl_size;
14386   rtx varloc;
14387   enum var_init_status initialized;
14388
14389   if (DECL_SIZE (decl) == NULL
14390       || !host_integerp (DECL_SIZE (decl), 1))
14391     return NULL;
14392
14393   decl_size = tree_low_cst (DECL_SIZE (decl), 1);
14394   descr = NULL;
14395   descr_tail = &descr;
14396
14397   for (p = loc; p; p = XEXP (p, 1))
14398     {
14399       unsigned int bitsize = decl_piece_bitsize (p);
14400       rtx loc_note = *decl_piece_varloc_ptr (p);
14401       dw_loc_descr_ref cur_descr;
14402       dw_loc_descr_ref *tail, last = NULL;
14403       unsigned int opsize = 0;
14404
14405       if (loc_note == NULL_RTX
14406           || NOTE_VAR_LOCATION_LOC (loc_note) == NULL_RTX)
14407         {
14408           padsize += bitsize;
14409           continue;
14410         }
14411       initialized = NOTE_VAR_LOCATION_STATUS (loc_note);
14412       varloc = NOTE_VAR_LOCATION (loc_note);
14413       cur_descr = dw_loc_list_1 (decl, varloc, 2, initialized);
14414       if (cur_descr == NULL)
14415         {
14416           padsize += bitsize;
14417           continue;
14418         }
14419
14420       /* Check that cur_descr either doesn't use
14421          DW_OP_*piece operations, or their sum is equal
14422          to bitsize.  Otherwise we can't embed it.  */
14423       for (tail = &cur_descr; *tail != NULL;
14424            tail = &(*tail)->dw_loc_next)
14425         if ((*tail)->dw_loc_opc == DW_OP_piece)
14426           {
14427             opsize += (*tail)->dw_loc_oprnd1.v.val_unsigned
14428                       * BITS_PER_UNIT;
14429             last = *tail;
14430           }
14431         else if ((*tail)->dw_loc_opc == DW_OP_bit_piece)
14432           {
14433             opsize += (*tail)->dw_loc_oprnd1.v.val_unsigned;
14434             last = *tail;
14435           }
14436
14437       if (last != NULL && opsize != bitsize)
14438         {
14439           padsize += bitsize;
14440           continue;
14441         }
14442
14443       /* If there is a hole, add DW_OP_*piece after empty DWARF
14444          expression, which means that those bits are optimized out.  */
14445       if (padsize)
14446         {
14447           if (padsize > decl_size)
14448             return NULL;
14449           decl_size -= padsize;
14450           *descr_tail = new_loc_descr_op_bit_piece (padsize, 0);
14451           if (*descr_tail == NULL)
14452             return NULL;
14453           descr_tail = &(*descr_tail)->dw_loc_next;
14454           padsize = 0;
14455         }
14456       *descr_tail = cur_descr;
14457       descr_tail = tail;
14458       if (bitsize > decl_size)
14459         return NULL;
14460       decl_size -= bitsize;
14461       if (last == NULL)
14462         {
14463           HOST_WIDE_INT offset = 0;
14464           if (GET_CODE (varloc) == VAR_LOCATION
14465               && GET_CODE (PAT_VAR_LOCATION_LOC (varloc)) != PARALLEL)
14466             {
14467               varloc = PAT_VAR_LOCATION_LOC (varloc);
14468               if (GET_CODE (varloc) == EXPR_LIST)
14469                 varloc = XEXP (varloc, 0);
14470             }
14471           do 
14472             {
14473               if (GET_CODE (varloc) == CONST
14474                   || GET_CODE (varloc) == SIGN_EXTEND
14475                   || GET_CODE (varloc) == ZERO_EXTEND)
14476                 varloc = XEXP (varloc, 0);
14477               else if (GET_CODE (varloc) == SUBREG)
14478                 varloc = SUBREG_REG (varloc);
14479               else
14480                 break;
14481             }
14482           while (1);
14483           /* DW_OP_bit_size offset should be zero for register
14484              or implicit location descriptions and empty location
14485              descriptions, but for memory addresses needs big endian
14486              adjustment.  */
14487           if (MEM_P (varloc))
14488             {
14489               unsigned HOST_WIDE_INT memsize
14490                 = INTVAL (MEM_SIZE (varloc)) * BITS_PER_UNIT;
14491               if (memsize != bitsize)
14492                 {
14493                   if (BYTES_BIG_ENDIAN != WORDS_BIG_ENDIAN
14494                       && (memsize > BITS_PER_WORD || bitsize > BITS_PER_WORD))
14495                     return NULL;
14496                   if (memsize < bitsize)
14497                     return NULL;
14498                   if (BITS_BIG_ENDIAN)
14499                     offset = memsize - bitsize;
14500                 }
14501             }
14502
14503           *descr_tail = new_loc_descr_op_bit_piece (bitsize, offset);
14504           if (*descr_tail == NULL)
14505             return NULL;
14506           descr_tail = &(*descr_tail)->dw_loc_next;
14507         }
14508     }
14509
14510   /* If there were any non-empty expressions, add padding till the end of
14511      the decl.  */
14512   if (descr != NULL && decl_size != 0)
14513     {
14514       *descr_tail = new_loc_descr_op_bit_piece (decl_size, 0);
14515       if (*descr_tail == NULL)
14516         return NULL;
14517     }
14518   return descr;
14519 }
14520
14521 /* Return the dwarf representation of the location list LOC_LIST of
14522    DECL.  WANT_ADDRESS has the same meaning as in loc_list_from_tree
14523    function.  */
14524
14525 static dw_loc_list_ref
14526 dw_loc_list (var_loc_list *loc_list, tree decl, int want_address)
14527 {
14528   const char *endname, *secname;
14529   rtx varloc;
14530   enum var_init_status initialized;
14531   struct var_loc_node *node;
14532   dw_loc_descr_ref descr;
14533   char label_id[MAX_ARTIFICIAL_LABEL_BYTES];
14534   dw_loc_list_ref list = NULL;
14535   dw_loc_list_ref *listp = &list;
14536
14537   /* Now that we know what section we are using for a base,
14538      actually construct the list of locations.
14539      The first location information is what is passed to the
14540      function that creates the location list, and the remaining
14541      locations just get added on to that list.
14542      Note that we only know the start address for a location
14543      (IE location changes), so to build the range, we use
14544      the range [current location start, next location start].
14545      This means we have to special case the last node, and generate
14546      a range of [last location start, end of function label].  */
14547
14548   secname = secname_for_decl (decl);
14549
14550   for (node = loc_list->first; node; node = node->next)
14551     if (GET_CODE (node->loc) == EXPR_LIST
14552         || NOTE_VAR_LOCATION_LOC (node->loc) != NULL_RTX)
14553       {
14554         if (GET_CODE (node->loc) == EXPR_LIST)
14555           {
14556             /* This requires DW_OP_{,bit_}piece, which is not usable
14557                inside DWARF expressions.  */
14558             if (want_address != 2)
14559               continue;
14560             descr = dw_sra_loc_expr (decl, node->loc);
14561             if (descr == NULL)
14562               continue;
14563           }
14564         else
14565           {
14566             initialized = NOTE_VAR_LOCATION_STATUS (node->loc);
14567             varloc = NOTE_VAR_LOCATION (node->loc);
14568             descr = dw_loc_list_1 (decl, varloc, want_address, initialized);
14569           }
14570         if (descr)
14571           {
14572             /* The variable has a location between NODE->LABEL and
14573                NODE->NEXT->LABEL.  */
14574             if (node->next)
14575               endname = node->next->label;
14576             /* If the variable has a location at the last label
14577                it keeps its location until the end of function.  */
14578             else if (!current_function_decl)
14579               endname = text_end_label;
14580             else
14581               {
14582                 ASM_GENERATE_INTERNAL_LABEL (label_id, FUNC_END_LABEL,
14583                                              current_function_funcdef_no);
14584                 endname = ggc_strdup (label_id);
14585               }
14586
14587             *listp = new_loc_list (descr, node->label, endname, secname);
14588             listp = &(*listp)->dw_loc_next;
14589           }
14590       }
14591
14592   /* Try to avoid the overhead of a location list emitting a location
14593      expression instead, but only if we didn't have more than one
14594      location entry in the first place.  If some entries were not
14595      representable, we don't want to pretend a single entry that was
14596      applies to the entire scope in which the variable is
14597      available.  */
14598   if (list && loc_list->first->next)
14599     gen_llsym (list);
14600
14601   return list;
14602 }
14603
14604 /* Return if the loc_list has only single element and thus can be represented
14605    as location description.   */
14606
14607 static bool
14608 single_element_loc_list_p (dw_loc_list_ref list)
14609 {
14610   gcc_assert (!list->dw_loc_next || list->ll_symbol);
14611   return !list->ll_symbol;
14612 }
14613
14614 /* To each location in list LIST add loc descr REF.  */
14615
14616 static void
14617 add_loc_descr_to_each (dw_loc_list_ref list, dw_loc_descr_ref ref)
14618 {
14619   dw_loc_descr_ref copy;
14620   add_loc_descr (&list->expr, ref);
14621   list = list->dw_loc_next;
14622   while (list)
14623     {
14624       copy = GGC_CNEW (dw_loc_descr_node);
14625       memcpy (copy, ref, sizeof (dw_loc_descr_node));
14626       add_loc_descr (&list->expr, copy);
14627       while (copy->dw_loc_next)
14628         {
14629           dw_loc_descr_ref new_copy = GGC_CNEW (dw_loc_descr_node);
14630           memcpy (new_copy, copy->dw_loc_next, sizeof (dw_loc_descr_node));
14631           copy->dw_loc_next = new_copy;
14632           copy = new_copy;
14633         }
14634       list = list->dw_loc_next;
14635     }
14636 }
14637
14638 /* Given two lists RET and LIST
14639    produce location list that is result of adding expression in LIST
14640    to expression in RET on each possition in program.
14641    Might be destructive on both RET and LIST.
14642
14643    TODO: We handle only simple cases of RET or LIST having at most one
14644    element. General case would inolve sorting the lists in program order
14645    and merging them that will need some additional work.
14646    Adding that will improve quality of debug info especially for SRA-ed
14647    structures.  */
14648
14649 static void
14650 add_loc_list (dw_loc_list_ref *ret, dw_loc_list_ref list)
14651 {
14652   if (!list)
14653     return;
14654   if (!*ret)
14655     {
14656       *ret = list;
14657       return;
14658     }
14659   if (!list->dw_loc_next)
14660     {
14661       add_loc_descr_to_each (*ret, list->expr);
14662       return;
14663     }
14664   if (!(*ret)->dw_loc_next)
14665     {
14666       add_loc_descr_to_each (list, (*ret)->expr);
14667       *ret = list;
14668       return;
14669     }
14670   expansion_failed (NULL_TREE, NULL_RTX,
14671                     "Don't know how to merge two non-trivial"
14672                     " location lists.\n");
14673   *ret = NULL;
14674   return;
14675 }
14676
14677 /* LOC is constant expression.  Try a luck, look it up in constant
14678    pool and return its loc_descr of its address.  */
14679
14680 static dw_loc_descr_ref
14681 cst_pool_loc_descr (tree loc)
14682 {
14683   /* Get an RTL for this, if something has been emitted.  */
14684   rtx rtl = lookup_constant_def (loc);
14685   enum machine_mode mode;
14686
14687   if (!rtl || !MEM_P (rtl))
14688     {
14689       gcc_assert (!rtl);
14690       return 0;
14691     }
14692   gcc_assert (GET_CODE (XEXP (rtl, 0)) == SYMBOL_REF);
14693
14694   /* TODO: We might get more coverage if we was actually delaying expansion
14695      of all expressions till end of compilation when constant pools are fully
14696      populated.  */
14697   if (!TREE_ASM_WRITTEN (SYMBOL_REF_DECL (XEXP (rtl, 0))))
14698     {
14699       expansion_failed (loc, NULL_RTX,
14700                         "CST value in contant pool but not marked.");
14701       return 0;
14702     }
14703   mode = GET_MODE (rtl);
14704   rtl = XEXP (rtl, 0);
14705   return mem_loc_descriptor (rtl, mode, VAR_INIT_STATUS_INITIALIZED);
14706 }
14707
14708 /* Return dw_loc_list representing address of addr_expr LOC
14709    by looking for innder INDIRECT_REF expression and turing it
14710    into simple arithmetics.  */
14711
14712 static dw_loc_list_ref
14713 loc_list_for_address_of_addr_expr_of_indirect_ref (tree loc, bool toplev)
14714 {
14715   tree obj, offset;
14716   HOST_WIDE_INT bitsize, bitpos, bytepos;
14717   enum machine_mode mode;
14718   int volatilep;
14719   int unsignedp = TYPE_UNSIGNED (TREE_TYPE (loc));
14720   dw_loc_list_ref list_ret = NULL, list_ret1 = NULL;
14721
14722   obj = get_inner_reference (TREE_OPERAND (loc, 0),
14723                              &bitsize, &bitpos, &offset, &mode,
14724                              &unsignedp, &volatilep, false);
14725   STRIP_NOPS (obj);
14726   if (bitpos % BITS_PER_UNIT)
14727     {
14728       expansion_failed (loc, NULL_RTX, "bitfield access");
14729       return 0;
14730     }
14731   if (!INDIRECT_REF_P (obj))
14732     {
14733       expansion_failed (obj,
14734                         NULL_RTX, "no indirect ref in inner refrence");
14735       return 0;
14736     }
14737   if (!offset && !bitpos)
14738     list_ret = loc_list_from_tree (TREE_OPERAND (obj, 0), toplev ? 2 : 1);
14739   else if (toplev
14740            && int_size_in_bytes (TREE_TYPE (loc)) <= DWARF2_ADDR_SIZE
14741            && (dwarf_version >= 4 || !dwarf_strict))
14742     {
14743       list_ret = loc_list_from_tree (TREE_OPERAND (obj, 0), 0);
14744       if (!list_ret)
14745         return 0;
14746       if (offset)
14747         {
14748           /* Variable offset.  */
14749           list_ret1 = loc_list_from_tree (offset, 0);
14750           if (list_ret1 == 0)
14751             return 0;
14752           add_loc_list (&list_ret, list_ret1);
14753           if (!list_ret)
14754             return 0;
14755           add_loc_descr_to_each (list_ret,
14756                                  new_loc_descr (DW_OP_plus, 0, 0));
14757         }
14758       bytepos = bitpos / BITS_PER_UNIT;
14759       if (bytepos > 0)
14760         add_loc_descr_to_each (list_ret,
14761                                new_loc_descr (DW_OP_plus_uconst,
14762                                               bytepos, 0));
14763       else if (bytepos < 0)
14764         loc_list_plus_const (list_ret, bytepos);
14765       add_loc_descr_to_each (list_ret,
14766                              new_loc_descr (DW_OP_stack_value, 0, 0));
14767     }
14768   return list_ret;
14769 }
14770
14771
14772 /* Generate Dwarf location list representing LOC.
14773    If WANT_ADDRESS is false, expression computing LOC will be computed
14774    If WANT_ADDRESS is 1, expression computing address of LOC will be returned
14775    if WANT_ADDRESS is 2, expression computing address useable in location
14776      will be returned (i.e. DW_OP_reg can be used
14777      to refer to register values).  */
14778
14779 static dw_loc_list_ref
14780 loc_list_from_tree (tree loc, int want_address)
14781 {
14782   dw_loc_descr_ref ret = NULL, ret1 = NULL;
14783   dw_loc_list_ref list_ret = NULL, list_ret1 = NULL;
14784   int have_address = 0;
14785   enum dwarf_location_atom op;
14786
14787   /* ??? Most of the time we do not take proper care for sign/zero
14788      extending the values properly.  Hopefully this won't be a real
14789      problem...  */
14790
14791   switch (TREE_CODE (loc))
14792     {
14793     case ERROR_MARK:
14794       expansion_failed (loc, NULL_RTX, "ERROR_MARK");
14795       return 0;
14796
14797     case PLACEHOLDER_EXPR:
14798       /* This case involves extracting fields from an object to determine the
14799          position of other fields.  We don't try to encode this here.  The
14800          only user of this is Ada, which encodes the needed information using
14801          the names of types.  */
14802       expansion_failed (loc, NULL_RTX, "PLACEHOLDER_EXPR");
14803       return 0;
14804
14805     case CALL_EXPR:
14806       expansion_failed (loc, NULL_RTX, "CALL_EXPR");
14807       /* There are no opcodes for these operations.  */
14808       return 0;
14809
14810     case PREINCREMENT_EXPR:
14811     case PREDECREMENT_EXPR:
14812     case POSTINCREMENT_EXPR:
14813     case POSTDECREMENT_EXPR:
14814       expansion_failed (loc, NULL_RTX, "PRE/POST INDCREMENT/DECREMENT");
14815       /* There are no opcodes for these operations.  */
14816       return 0;
14817
14818     case ADDR_EXPR:
14819       /* If we already want an address, see if there is INDIRECT_REF inside
14820          e.g. for &this->field.  */
14821       if (want_address)
14822         {
14823           list_ret = loc_list_for_address_of_addr_expr_of_indirect_ref
14824                        (loc, want_address == 2);
14825           if (list_ret)
14826             have_address = 1;
14827           else if (decl_address_ip_invariant_p (TREE_OPERAND (loc, 0))
14828                    && (ret = cst_pool_loc_descr (loc)))
14829             have_address = 1;
14830         }
14831         /* Otherwise, process the argument and look for the address.  */
14832       if (!list_ret && !ret)
14833         list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 1);
14834       else
14835         {
14836           if (want_address)
14837             expansion_failed (loc, NULL_RTX, "need address of ADDR_EXPR");
14838           return NULL;
14839         }
14840       break;
14841
14842     case VAR_DECL:
14843       if (DECL_THREAD_LOCAL_P (loc))
14844         {
14845           rtx rtl;
14846           enum dwarf_location_atom first_op;
14847           enum dwarf_location_atom second_op;
14848           bool dtprel = false;
14849
14850           if (targetm.have_tls)
14851             {
14852               /* If this is not defined, we have no way to emit the
14853                  data.  */
14854               if (!targetm.asm_out.output_dwarf_dtprel)
14855                 return 0;
14856
14857                /* The way DW_OP_GNU_push_tls_address is specified, we
14858                   can only look up addresses of objects in the current
14859                   module.  */
14860               if (DECL_EXTERNAL (loc) && !targetm.binds_local_p (loc))
14861                 return 0;
14862               first_op = DW_OP_addr;
14863               dtprel = true;
14864               second_op = DW_OP_GNU_push_tls_address;
14865             }
14866           else
14867             {
14868               if (!targetm.emutls.debug_form_tls_address
14869                   || !(dwarf_version >= 3 || !dwarf_strict))
14870                 return 0;
14871               loc = emutls_decl (loc);
14872               first_op = DW_OP_addr;
14873               second_op = DW_OP_form_tls_address;
14874             }
14875
14876           rtl = rtl_for_decl_location (loc);
14877           if (rtl == NULL_RTX)
14878             return 0;
14879
14880           if (!MEM_P (rtl))
14881             return 0;
14882           rtl = XEXP (rtl, 0);
14883           if (! CONSTANT_P (rtl))
14884             return 0;
14885
14886           ret = new_loc_descr (first_op, 0, 0);
14887           ret->dw_loc_oprnd1.val_class = dw_val_class_addr;
14888           ret->dw_loc_oprnd1.v.val_addr = rtl;
14889           ret->dtprel = dtprel;
14890
14891           ret1 = new_loc_descr (second_op, 0, 0);
14892           add_loc_descr (&ret, ret1);
14893
14894           have_address = 1;
14895           break;
14896         }
14897       /* FALLTHRU */
14898
14899     case PARM_DECL:
14900       if (DECL_HAS_VALUE_EXPR_P (loc))
14901         return loc_list_from_tree (DECL_VALUE_EXPR (loc),
14902                                    want_address);
14903       /* FALLTHRU */
14904
14905     case RESULT_DECL:
14906     case FUNCTION_DECL:
14907       {
14908         rtx rtl;
14909         var_loc_list *loc_list = lookup_decl_loc (loc);
14910
14911         if (loc_list && loc_list->first)
14912           {
14913             list_ret = dw_loc_list (loc_list, loc, want_address);
14914             have_address = want_address != 0;
14915             break;
14916           }
14917         rtl = rtl_for_decl_location (loc);
14918         if (rtl == NULL_RTX)
14919           {
14920             expansion_failed (loc, NULL_RTX, "DECL has no RTL");
14921             return 0;
14922           }
14923         else if (CONST_INT_P (rtl))
14924           {
14925             HOST_WIDE_INT val = INTVAL (rtl);
14926             if (TYPE_UNSIGNED (TREE_TYPE (loc)))
14927               val &= GET_MODE_MASK (DECL_MODE (loc));
14928             ret = int_loc_descriptor (val);
14929           }
14930         else if (GET_CODE (rtl) == CONST_STRING)
14931           {
14932             expansion_failed (loc, NULL_RTX, "CONST_STRING");
14933             return 0;
14934           }
14935         else if (CONSTANT_P (rtl) && const_ok_for_output (rtl))
14936           {
14937             ret = new_loc_descr (DW_OP_addr, 0, 0);
14938             ret->dw_loc_oprnd1.val_class = dw_val_class_addr;
14939             ret->dw_loc_oprnd1.v.val_addr = rtl;
14940           }
14941         else
14942           {
14943             enum machine_mode mode;
14944
14945             /* Certain constructs can only be represented at top-level.  */
14946             if (want_address == 2)
14947               {
14948                 ret = loc_descriptor (rtl, VOIDmode,
14949                                       VAR_INIT_STATUS_INITIALIZED);
14950                 have_address = 1;
14951               }
14952             else
14953               {
14954                 mode = GET_MODE (rtl);
14955                 if (MEM_P (rtl))
14956                   {
14957                     rtl = XEXP (rtl, 0);
14958                     have_address = 1;
14959                   }
14960                 ret = mem_loc_descriptor (rtl, mode, VAR_INIT_STATUS_INITIALIZED);
14961               }
14962             if (!ret)
14963               expansion_failed (loc, rtl,
14964                                 "failed to produce loc descriptor for rtl");
14965           }
14966       }
14967       break;
14968
14969     case INDIRECT_REF:
14970     case ALIGN_INDIRECT_REF:
14971     case MISALIGNED_INDIRECT_REF:
14972       list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 0);
14973       have_address = 1;
14974       break;
14975
14976     case COMPOUND_EXPR:
14977       return loc_list_from_tree (TREE_OPERAND (loc, 1), want_address);
14978
14979     CASE_CONVERT:
14980     case VIEW_CONVERT_EXPR:
14981     case SAVE_EXPR:
14982     case MODIFY_EXPR:
14983       return loc_list_from_tree (TREE_OPERAND (loc, 0), want_address);
14984
14985     case COMPONENT_REF:
14986     case BIT_FIELD_REF:
14987     case ARRAY_REF:
14988     case ARRAY_RANGE_REF:
14989     case REALPART_EXPR:
14990     case IMAGPART_EXPR:
14991       {
14992         tree obj, offset;
14993         HOST_WIDE_INT bitsize, bitpos, bytepos;
14994         enum machine_mode mode;
14995         int volatilep;
14996         int unsignedp = TYPE_UNSIGNED (TREE_TYPE (loc));
14997
14998         obj = get_inner_reference (loc, &bitsize, &bitpos, &offset, &mode,
14999                                    &unsignedp, &volatilep, false);
15000
15001         gcc_assert (obj != loc);
15002
15003         list_ret = loc_list_from_tree (obj,
15004                                        want_address == 2
15005                                        && !bitpos && !offset ? 2 : 1);
15006         /* TODO: We can extract value of the small expression via shifting even
15007            for nonzero bitpos.  */
15008         if (list_ret == 0)
15009           return 0;
15010         if (bitpos % BITS_PER_UNIT != 0 || bitsize % BITS_PER_UNIT != 0)
15011           {
15012             expansion_failed (loc, NULL_RTX,
15013                               "bitfield access");
15014             return 0;
15015           }
15016
15017         if (offset != NULL_TREE)
15018           {
15019             /* Variable offset.  */
15020             list_ret1 = loc_list_from_tree (offset, 0);
15021             if (list_ret1 == 0)
15022               return 0;
15023             add_loc_list (&list_ret, list_ret1);
15024             if (!list_ret)
15025               return 0;
15026             add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_plus, 0, 0));
15027           }
15028
15029         bytepos = bitpos / BITS_PER_UNIT;
15030         if (bytepos > 0)
15031           add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_plus_uconst, bytepos, 0));
15032         else if (bytepos < 0)
15033           loc_list_plus_const (list_ret, bytepos);
15034
15035         have_address = 1;
15036         break;
15037       }
15038
15039     case INTEGER_CST:
15040       if ((want_address || !host_integerp (loc, 0))
15041           && (ret = cst_pool_loc_descr (loc)))
15042         have_address = 1;
15043       else if (want_address == 2
15044                && host_integerp (loc, 0)
15045                && (ret = address_of_int_loc_descriptor
15046                            (int_size_in_bytes (TREE_TYPE (loc)),
15047                             tree_low_cst (loc, 0))))
15048         have_address = 1;
15049       else if (host_integerp (loc, 0))
15050         ret = int_loc_descriptor (tree_low_cst (loc, 0));
15051       else
15052         {
15053           expansion_failed (loc, NULL_RTX,
15054                             "Integer operand is not host integer");
15055           return 0;
15056         }
15057       break;
15058
15059     case CONSTRUCTOR:
15060     case REAL_CST:
15061     case STRING_CST:
15062     case COMPLEX_CST:
15063       if ((ret = cst_pool_loc_descr (loc)))
15064         have_address = 1;
15065       else
15066       /* We can construct small constants here using int_loc_descriptor.  */
15067         expansion_failed (loc, NULL_RTX,
15068                           "constructor or constant not in constant pool");
15069       break;
15070
15071     case TRUTH_AND_EXPR:
15072     case TRUTH_ANDIF_EXPR:
15073     case BIT_AND_EXPR:
15074       op = DW_OP_and;
15075       goto do_binop;
15076
15077     case TRUTH_XOR_EXPR:
15078     case BIT_XOR_EXPR:
15079       op = DW_OP_xor;
15080       goto do_binop;
15081
15082     case TRUTH_OR_EXPR:
15083     case TRUTH_ORIF_EXPR:
15084     case BIT_IOR_EXPR:
15085       op = DW_OP_or;
15086       goto do_binop;
15087
15088     case FLOOR_DIV_EXPR:
15089     case CEIL_DIV_EXPR:
15090     case ROUND_DIV_EXPR:
15091     case TRUNC_DIV_EXPR:
15092       if (TYPE_UNSIGNED (TREE_TYPE (loc)))
15093         return 0;
15094       op = DW_OP_div;
15095       goto do_binop;
15096
15097     case MINUS_EXPR:
15098       op = DW_OP_minus;
15099       goto do_binop;
15100
15101     case FLOOR_MOD_EXPR:
15102     case CEIL_MOD_EXPR:
15103     case ROUND_MOD_EXPR:
15104     case TRUNC_MOD_EXPR:
15105       if (TYPE_UNSIGNED (TREE_TYPE (loc)))
15106         {
15107           op = DW_OP_mod;
15108           goto do_binop;
15109         }
15110       list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 0);
15111       list_ret1 = loc_list_from_tree (TREE_OPERAND (loc, 1), 0);
15112       if (list_ret == 0 || list_ret1 == 0)
15113         return 0;
15114
15115       add_loc_list (&list_ret, list_ret1);
15116       if (list_ret == 0)
15117         return 0;
15118       add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_over, 0, 0));
15119       add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_over, 0, 0));
15120       add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_div, 0, 0));
15121       add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_mul, 0, 0));
15122       add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_minus, 0, 0));
15123       break;
15124
15125     case MULT_EXPR:
15126       op = DW_OP_mul;
15127       goto do_binop;
15128
15129     case LSHIFT_EXPR:
15130       op = DW_OP_shl;
15131       goto do_binop;
15132
15133     case RSHIFT_EXPR:
15134       op = (TYPE_UNSIGNED (TREE_TYPE (loc)) ? DW_OP_shr : DW_OP_shra);
15135       goto do_binop;
15136
15137     case POINTER_PLUS_EXPR:
15138     case PLUS_EXPR:
15139       if (TREE_CODE (TREE_OPERAND (loc, 1)) == INTEGER_CST
15140           && host_integerp (TREE_OPERAND (loc, 1), 0))
15141         {
15142           list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 0);
15143           if (list_ret == 0)
15144             return 0;
15145
15146           loc_list_plus_const (list_ret, tree_low_cst (TREE_OPERAND (loc, 1), 0));
15147           break;
15148         }
15149
15150       op = DW_OP_plus;
15151       goto do_binop;
15152
15153     case LE_EXPR:
15154       if (TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (loc, 0))))
15155         return 0;
15156
15157       op = DW_OP_le;
15158       goto do_binop;
15159
15160     case GE_EXPR:
15161       if (TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (loc, 0))))
15162         return 0;
15163
15164       op = DW_OP_ge;
15165       goto do_binop;
15166
15167     case LT_EXPR:
15168       if (TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (loc, 0))))
15169         return 0;
15170
15171       op = DW_OP_lt;
15172       goto do_binop;
15173
15174     case GT_EXPR:
15175       if (TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (loc, 0))))
15176         return 0;
15177
15178       op = DW_OP_gt;
15179       goto do_binop;
15180
15181     case EQ_EXPR:
15182       op = DW_OP_eq;
15183       goto do_binop;
15184
15185     case NE_EXPR:
15186       op = DW_OP_ne;
15187       goto do_binop;
15188
15189     do_binop:
15190       list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 0);
15191       list_ret1 = loc_list_from_tree (TREE_OPERAND (loc, 1), 0);
15192       if (list_ret == 0 || list_ret1 == 0)
15193         return 0;
15194
15195       add_loc_list (&list_ret, list_ret1);
15196       if (list_ret == 0)
15197         return 0;
15198       add_loc_descr_to_each (list_ret, new_loc_descr (op, 0, 0));
15199       break;
15200
15201     case TRUTH_NOT_EXPR:
15202     case BIT_NOT_EXPR:
15203       op = DW_OP_not;
15204       goto do_unop;
15205
15206     case ABS_EXPR:
15207       op = DW_OP_abs;
15208       goto do_unop;
15209
15210     case NEGATE_EXPR:
15211       op = DW_OP_neg;
15212       goto do_unop;
15213
15214     do_unop:
15215       list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 0);
15216       if (list_ret == 0)
15217         return 0;
15218
15219       add_loc_descr_to_each (list_ret, new_loc_descr (op, 0, 0));
15220       break;
15221
15222     case MIN_EXPR:
15223     case MAX_EXPR:
15224       {
15225         const enum tree_code code =
15226           TREE_CODE (loc) == MIN_EXPR ? GT_EXPR : LT_EXPR;
15227
15228         loc = build3 (COND_EXPR, TREE_TYPE (loc),
15229                       build2 (code, integer_type_node,
15230                               TREE_OPERAND (loc, 0), TREE_OPERAND (loc, 1)),
15231                       TREE_OPERAND (loc, 1), TREE_OPERAND (loc, 0));
15232       }
15233
15234       /* ... fall through ...  */
15235
15236     case COND_EXPR:
15237       {
15238         dw_loc_descr_ref lhs
15239           = loc_descriptor_from_tree (TREE_OPERAND (loc, 1), 0);
15240         dw_loc_list_ref rhs
15241           = loc_list_from_tree (TREE_OPERAND (loc, 2), 0);
15242         dw_loc_descr_ref bra_node, jump_node, tmp;
15243
15244         list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 0);
15245         if (list_ret == 0 || lhs == 0 || rhs == 0)
15246           return 0;
15247
15248         bra_node = new_loc_descr (DW_OP_bra, 0, 0);
15249         add_loc_descr_to_each (list_ret, bra_node);
15250
15251         add_loc_list (&list_ret, rhs);
15252         jump_node = new_loc_descr (DW_OP_skip, 0, 0);
15253         add_loc_descr_to_each (list_ret, jump_node);
15254
15255         add_loc_descr_to_each (list_ret, lhs);
15256         bra_node->dw_loc_oprnd1.val_class = dw_val_class_loc;
15257         bra_node->dw_loc_oprnd1.v.val_loc = lhs;
15258
15259         /* ??? Need a node to point the skip at.  Use a nop.  */
15260         tmp = new_loc_descr (DW_OP_nop, 0, 0);
15261         add_loc_descr_to_each (list_ret, tmp);
15262         jump_node->dw_loc_oprnd1.val_class = dw_val_class_loc;
15263         jump_node->dw_loc_oprnd1.v.val_loc = tmp;
15264       }
15265       break;
15266
15267     case FIX_TRUNC_EXPR:
15268       return 0;
15269
15270     default:
15271       /* Leave front-end specific codes as simply unknown.  This comes
15272          up, for instance, with the C STMT_EXPR.  */
15273       if ((unsigned int) TREE_CODE (loc)
15274           >= (unsigned int) LAST_AND_UNUSED_TREE_CODE)
15275         {
15276           expansion_failed (loc, NULL_RTX,
15277                             "language specific tree node");
15278           return 0;
15279         }
15280
15281 #ifdef ENABLE_CHECKING
15282       /* Otherwise this is a generic code; we should just lists all of
15283          these explicitly.  We forgot one.  */
15284       gcc_unreachable ();
15285 #else
15286       /* In a release build, we want to degrade gracefully: better to
15287          generate incomplete debugging information than to crash.  */
15288       return NULL;
15289 #endif
15290     }
15291
15292   if (!ret && !list_ret)
15293     return 0;
15294
15295   if (want_address == 2 && !have_address
15296       && (dwarf_version >= 4 || !dwarf_strict))
15297     {
15298       if (int_size_in_bytes (TREE_TYPE (loc)) > DWARF2_ADDR_SIZE)
15299         {
15300           expansion_failed (loc, NULL_RTX,
15301                             "DWARF address size mismatch");
15302           return 0;
15303         }
15304       if (ret)
15305         add_loc_descr (&ret, new_loc_descr (DW_OP_stack_value, 0, 0));
15306       else
15307         add_loc_descr_to_each (list_ret,
15308                                new_loc_descr (DW_OP_stack_value, 0, 0));
15309       have_address = 1;
15310     }
15311   /* Show if we can't fill the request for an address.  */
15312   if (want_address && !have_address)
15313     {
15314       expansion_failed (loc, NULL_RTX,
15315                         "Want address and only have value");
15316       return 0;
15317     }
15318
15319   gcc_assert (!ret || !list_ret);
15320
15321   /* If we've got an address and don't want one, dereference.  */
15322   if (!want_address && have_address)
15323     {
15324       HOST_WIDE_INT size = int_size_in_bytes (TREE_TYPE (loc));
15325
15326       if (size > DWARF2_ADDR_SIZE || size == -1)
15327         {
15328           expansion_failed (loc, NULL_RTX,
15329                             "DWARF address size mismatch");
15330           return 0;
15331         }
15332       else if (size == DWARF2_ADDR_SIZE)
15333         op = DW_OP_deref;
15334       else
15335         op = DW_OP_deref_size;
15336
15337       if (ret)
15338         add_loc_descr (&ret, new_loc_descr (op, size, 0));
15339       else
15340         add_loc_descr_to_each (list_ret, new_loc_descr (op, size, 0));
15341     }
15342   if (ret)
15343     list_ret = new_loc_list (ret, NULL, NULL, NULL);
15344
15345   return list_ret;
15346 }
15347
15348 /* Same as above but return only single location expression.  */
15349 static dw_loc_descr_ref
15350 loc_descriptor_from_tree (tree loc, int want_address)
15351 {
15352   dw_loc_list_ref ret = loc_list_from_tree (loc, want_address);
15353   if (!ret)
15354     return NULL;
15355   if (ret->dw_loc_next)
15356     {
15357       expansion_failed (loc, NULL_RTX,
15358                         "Location list where only loc descriptor needed");
15359       return NULL;
15360     }
15361   return ret->expr;
15362 }
15363
15364 /* Given a value, round it up to the lowest multiple of `boundary'
15365    which is not less than the value itself.  */
15366
15367 static inline HOST_WIDE_INT
15368 ceiling (HOST_WIDE_INT value, unsigned int boundary)
15369 {
15370   return (((value + boundary - 1) / boundary) * boundary);
15371 }
15372
15373 /* Given a pointer to what is assumed to be a FIELD_DECL node, return a
15374    pointer to the declared type for the relevant field variable, or return
15375    `integer_type_node' if the given node turns out to be an
15376    ERROR_MARK node.  */
15377
15378 static inline tree
15379 field_type (const_tree decl)
15380 {
15381   tree type;
15382
15383   if (TREE_CODE (decl) == ERROR_MARK)
15384     return integer_type_node;
15385
15386   type = DECL_BIT_FIELD_TYPE (decl);
15387   if (type == NULL_TREE)
15388     type = TREE_TYPE (decl);
15389
15390   return type;
15391 }
15392
15393 /* Given a pointer to a tree node, return the alignment in bits for
15394    it, or else return BITS_PER_WORD if the node actually turns out to
15395    be an ERROR_MARK node.  */
15396
15397 static inline unsigned
15398 simple_type_align_in_bits (const_tree type)
15399 {
15400   return (TREE_CODE (type) != ERROR_MARK) ? TYPE_ALIGN (type) : BITS_PER_WORD;
15401 }
15402
15403 static inline unsigned
15404 simple_decl_align_in_bits (const_tree decl)
15405 {
15406   return (TREE_CODE (decl) != ERROR_MARK) ? DECL_ALIGN (decl) : BITS_PER_WORD;
15407 }
15408
15409 /* Return the result of rounding T up to ALIGN.  */
15410
15411 static inline HOST_WIDE_INT
15412 round_up_to_align (HOST_WIDE_INT t, unsigned int align)
15413 {
15414   /* We must be careful if T is negative because HOST_WIDE_INT can be
15415      either "above" or "below" unsigned int as per the C promotion
15416      rules, depending on the host, thus making the signedness of the
15417      direct multiplication and division unpredictable.  */
15418   unsigned HOST_WIDE_INT u = (unsigned HOST_WIDE_INT) t;
15419
15420   u += align - 1;
15421   u /= align;
15422   u *= align;
15423
15424   return (HOST_WIDE_INT) u;
15425 }
15426
15427 /* Given a pointer to a FIELD_DECL, compute and return the byte offset of the
15428    lowest addressed byte of the "containing object" for the given FIELD_DECL,
15429    or return 0 if we are unable to determine what that offset is, either
15430    because the argument turns out to be a pointer to an ERROR_MARK node, or
15431    because the offset is actually variable.  (We can't handle the latter case
15432    just yet).  */
15433
15434 static HOST_WIDE_INT
15435 field_byte_offset (const_tree decl)
15436 {
15437   HOST_WIDE_INT object_offset_in_bits;
15438   HOST_WIDE_INT bitpos_int;
15439
15440   if (TREE_CODE (decl) == ERROR_MARK)
15441     return 0;
15442
15443   gcc_assert (TREE_CODE (decl) == FIELD_DECL);
15444
15445   /* We cannot yet cope with fields whose positions are variable, so
15446      for now, when we see such things, we simply return 0.  Someday, we may
15447      be able to handle such cases, but it will be damn difficult.  */
15448   if (! host_integerp (bit_position (decl), 0))
15449     return 0;
15450
15451   bitpos_int = int_bit_position (decl);
15452
15453 #ifdef PCC_BITFIELD_TYPE_MATTERS
15454   if (PCC_BITFIELD_TYPE_MATTERS)
15455     {
15456       tree type;
15457       tree field_size_tree;
15458       HOST_WIDE_INT deepest_bitpos;
15459       unsigned HOST_WIDE_INT field_size_in_bits;
15460       unsigned int type_align_in_bits;
15461       unsigned int decl_align_in_bits;
15462       unsigned HOST_WIDE_INT type_size_in_bits;
15463
15464       type = field_type (decl);
15465       type_size_in_bits = simple_type_size_in_bits (type);
15466       type_align_in_bits = simple_type_align_in_bits (type);
15467
15468       field_size_tree = DECL_SIZE (decl);
15469
15470       /* The size could be unspecified if there was an error, or for
15471          a flexible array member.  */
15472       if (!field_size_tree)
15473         field_size_tree = bitsize_zero_node;
15474
15475       /* If the size of the field is not constant, use the type size.  */
15476       if (host_integerp (field_size_tree, 1))
15477         field_size_in_bits = tree_low_cst (field_size_tree, 1);
15478       else
15479         field_size_in_bits = type_size_in_bits;
15480
15481       decl_align_in_bits = simple_decl_align_in_bits (decl);
15482
15483       /* The GCC front-end doesn't make any attempt to keep track of the
15484          starting bit offset (relative to the start of the containing
15485          structure type) of the hypothetical "containing object" for a
15486          bit-field.  Thus, when computing the byte offset value for the
15487          start of the "containing object" of a bit-field, we must deduce
15488          this information on our own. This can be rather tricky to do in
15489          some cases.  For example, handling the following structure type
15490          definition when compiling for an i386/i486 target (which only
15491          aligns long long's to 32-bit boundaries) can be very tricky:
15492
15493          struct S { int field1; long long field2:31; };
15494
15495          Fortunately, there is a simple rule-of-thumb which can be used
15496          in such cases.  When compiling for an i386/i486, GCC will
15497          allocate 8 bytes for the structure shown above.  It decides to
15498          do this based upon one simple rule for bit-field allocation.
15499          GCC allocates each "containing object" for each bit-field at
15500          the first (i.e. lowest addressed) legitimate alignment boundary
15501          (based upon the required minimum alignment for the declared
15502          type of the field) which it can possibly use, subject to the
15503          condition that there is still enough available space remaining
15504          in the containing object (when allocated at the selected point)
15505          to fully accommodate all of the bits of the bit-field itself.
15506
15507          This simple rule makes it obvious why GCC allocates 8 bytes for
15508          each object of the structure type shown above.  When looking
15509          for a place to allocate the "containing object" for `field2',
15510          the compiler simply tries to allocate a 64-bit "containing
15511          object" at each successive 32-bit boundary (starting at zero)
15512          until it finds a place to allocate that 64- bit field such that
15513          at least 31 contiguous (and previously unallocated) bits remain
15514          within that selected 64 bit field.  (As it turns out, for the
15515          example above, the compiler finds it is OK to allocate the
15516          "containing object" 64-bit field at bit-offset zero within the
15517          structure type.)
15518
15519          Here we attempt to work backwards from the limited set of facts
15520          we're given, and we try to deduce from those facts, where GCC
15521          must have believed that the containing object started (within
15522          the structure type). The value we deduce is then used (by the
15523          callers of this routine) to generate DW_AT_location and
15524          DW_AT_bit_offset attributes for fields (both bit-fields and, in
15525          the case of DW_AT_location, regular fields as well).  */
15526
15527       /* Figure out the bit-distance from the start of the structure to
15528          the "deepest" bit of the bit-field.  */
15529       deepest_bitpos = bitpos_int + field_size_in_bits;
15530
15531       /* This is the tricky part.  Use some fancy footwork to deduce
15532          where the lowest addressed bit of the containing object must
15533          be.  */
15534       object_offset_in_bits = deepest_bitpos - type_size_in_bits;
15535
15536       /* Round up to type_align by default.  This works best for
15537          bitfields.  */
15538       object_offset_in_bits
15539         = round_up_to_align (object_offset_in_bits, type_align_in_bits);
15540
15541       if (object_offset_in_bits > bitpos_int)
15542         {
15543           object_offset_in_bits = deepest_bitpos - type_size_in_bits;
15544
15545           /* Round up to decl_align instead.  */
15546           object_offset_in_bits
15547             = round_up_to_align (object_offset_in_bits, decl_align_in_bits);
15548         }
15549     }
15550   else
15551 #endif
15552     object_offset_in_bits = bitpos_int;
15553
15554   return object_offset_in_bits / BITS_PER_UNIT;
15555 }
15556 \f
15557 /* The following routines define various Dwarf attributes and any data
15558    associated with them.  */
15559
15560 /* Add a location description attribute value to a DIE.
15561
15562    This emits location attributes suitable for whole variables and
15563    whole parameters.  Note that the location attributes for struct fields are
15564    generated by the routine `data_member_location_attribute' below.  */
15565
15566 static inline void
15567 add_AT_location_description (dw_die_ref die, enum dwarf_attribute attr_kind,
15568                              dw_loc_list_ref descr)
15569 {
15570   if (descr == 0)
15571     return;
15572   if (single_element_loc_list_p (descr))
15573     add_AT_loc (die, attr_kind, descr->expr);
15574   else
15575     add_AT_loc_list (die, attr_kind, descr);
15576 }
15577
15578 /* Attach the specialized form of location attribute used for data members of
15579    struct and union types.  In the special case of a FIELD_DECL node which
15580    represents a bit-field, the "offset" part of this special location
15581    descriptor must indicate the distance in bytes from the lowest-addressed
15582    byte of the containing struct or union type to the lowest-addressed byte of
15583    the "containing object" for the bit-field.  (See the `field_byte_offset'
15584    function above).
15585
15586    For any given bit-field, the "containing object" is a hypothetical object
15587    (of some integral or enum type) within which the given bit-field lives.  The
15588    type of this hypothetical "containing object" is always the same as the
15589    declared type of the individual bit-field itself (for GCC anyway... the
15590    DWARF spec doesn't actually mandate this).  Note that it is the size (in
15591    bytes) of the hypothetical "containing object" which will be given in the
15592    DW_AT_byte_size attribute for this bit-field.  (See the
15593    `byte_size_attribute' function below.)  It is also used when calculating the
15594    value of the DW_AT_bit_offset attribute.  (See the `bit_offset_attribute'
15595    function below.)  */
15596
15597 static void
15598 add_data_member_location_attribute (dw_die_ref die, tree decl)
15599 {
15600   HOST_WIDE_INT offset;
15601   dw_loc_descr_ref loc_descr = 0;
15602
15603   if (TREE_CODE (decl) == TREE_BINFO)
15604     {
15605       /* We're working on the TAG_inheritance for a base class.  */
15606       if (BINFO_VIRTUAL_P (decl) && is_cxx ())
15607         {
15608           /* For C++ virtual bases we can't just use BINFO_OFFSET, as they
15609              aren't at a fixed offset from all (sub)objects of the same
15610              type.  We need to extract the appropriate offset from our
15611              vtable.  The following dwarf expression means
15612
15613                BaseAddr = ObAddr + *((*ObAddr) - Offset)
15614
15615              This is specific to the V3 ABI, of course.  */
15616
15617           dw_loc_descr_ref tmp;
15618
15619           /* Make a copy of the object address.  */
15620           tmp = new_loc_descr (DW_OP_dup, 0, 0);
15621           add_loc_descr (&loc_descr, tmp);
15622
15623           /* Extract the vtable address.  */
15624           tmp = new_loc_descr (DW_OP_deref, 0, 0);
15625           add_loc_descr (&loc_descr, tmp);
15626
15627           /* Calculate the address of the offset.  */
15628           offset = tree_low_cst (BINFO_VPTR_FIELD (decl), 0);
15629           gcc_assert (offset < 0);
15630
15631           tmp = int_loc_descriptor (-offset);
15632           add_loc_descr (&loc_descr, tmp);
15633           tmp = new_loc_descr (DW_OP_minus, 0, 0);
15634           add_loc_descr (&loc_descr, tmp);
15635
15636           /* Extract the offset.  */
15637           tmp = new_loc_descr (DW_OP_deref, 0, 0);
15638           add_loc_descr (&loc_descr, tmp);
15639
15640           /* Add it to the object address.  */
15641           tmp = new_loc_descr (DW_OP_plus, 0, 0);
15642           add_loc_descr (&loc_descr, tmp);
15643         }
15644       else
15645         offset = tree_low_cst (BINFO_OFFSET (decl), 0);
15646     }
15647   else
15648     offset = field_byte_offset (decl);
15649
15650   if (! loc_descr)
15651     {
15652       if (dwarf_version > 2)
15653         {
15654           /* Don't need to output a location expression, just the constant. */
15655           add_AT_int (die, DW_AT_data_member_location, offset);
15656           return;
15657         }
15658       else
15659         {
15660           enum dwarf_location_atom op;
15661
15662           /* The DWARF2 standard says that we should assume that the structure
15663              address is already on the stack, so we can specify a structure
15664              field address by using DW_OP_plus_uconst.  */
15665
15666 #ifdef MIPS_DEBUGGING_INFO
15667           /* ??? The SGI dwarf reader does not handle the DW_OP_plus_uconst
15668              operator correctly.  It works only if we leave the offset on the
15669              stack.  */
15670           op = DW_OP_constu;
15671 #else
15672           op = DW_OP_plus_uconst;
15673 #endif
15674
15675           loc_descr = new_loc_descr (op, offset, 0);
15676         }
15677     }
15678
15679   add_AT_loc (die, DW_AT_data_member_location, loc_descr);
15680 }
15681
15682 /* Writes integer values to dw_vec_const array.  */
15683
15684 static void
15685 insert_int (HOST_WIDE_INT val, unsigned int size, unsigned char *dest)
15686 {
15687   while (size != 0)
15688     {
15689       *dest++ = val & 0xff;
15690       val >>= 8;
15691       --size;
15692     }
15693 }
15694
15695 /* Reads integers from dw_vec_const array.  Inverse of insert_int.  */
15696
15697 static HOST_WIDE_INT
15698 extract_int (const unsigned char *src, unsigned int size)
15699 {
15700   HOST_WIDE_INT val = 0;
15701
15702   src += size;
15703   while (size != 0)
15704     {
15705       val <<= 8;
15706       val |= *--src & 0xff;
15707       --size;
15708     }
15709   return val;
15710 }
15711
15712 /* Writes double_int values to dw_vec_const array.  */
15713
15714 static void
15715 insert_double (double_int val, unsigned char *dest)
15716 {
15717   unsigned char *p0 = dest;
15718   unsigned char *p1 = dest + sizeof (HOST_WIDE_INT);
15719
15720   if (WORDS_BIG_ENDIAN)
15721     {
15722       p0 = p1;
15723       p1 = dest;
15724     }
15725
15726   insert_int ((HOST_WIDE_INT) val.low, sizeof (HOST_WIDE_INT), p0);
15727   insert_int ((HOST_WIDE_INT) val.high, sizeof (HOST_WIDE_INT), p1);
15728 }
15729
15730 /* Writes floating point values to dw_vec_const array.  */
15731
15732 static void
15733 insert_float (const_rtx rtl, unsigned char *array)
15734 {
15735   REAL_VALUE_TYPE rv;
15736   long val[4];
15737   int i;
15738
15739   REAL_VALUE_FROM_CONST_DOUBLE (rv, rtl);
15740   real_to_target (val, &rv, GET_MODE (rtl));
15741
15742   /* real_to_target puts 32-bit pieces in each long.  Pack them.  */
15743   for (i = 0; i < GET_MODE_SIZE (GET_MODE (rtl)) / 4; i++)
15744     {
15745       insert_int (val[i], 4, array);
15746       array += 4;
15747     }
15748 }
15749
15750 /* Attach a DW_AT_const_value attribute for a variable or a parameter which
15751    does not have a "location" either in memory or in a register.  These
15752    things can arise in GNU C when a constant is passed as an actual parameter
15753    to an inlined function.  They can also arise in C++ where declared
15754    constants do not necessarily get memory "homes".  */
15755
15756 static bool
15757 add_const_value_attribute (dw_die_ref die, rtx rtl)
15758 {
15759   switch (GET_CODE (rtl))
15760     {
15761     case CONST_INT:
15762       {
15763         HOST_WIDE_INT val = INTVAL (rtl);
15764
15765         if (val < 0)
15766           add_AT_int (die, DW_AT_const_value, val);
15767         else
15768           add_AT_unsigned (die, DW_AT_const_value, (unsigned HOST_WIDE_INT) val);
15769       }
15770       return true;
15771
15772     case CONST_DOUBLE:
15773       /* Note that a CONST_DOUBLE rtx could represent either an integer or a
15774          floating-point constant.  A CONST_DOUBLE is used whenever the
15775          constant requires more than one word in order to be adequately
15776          represented.  */
15777       {
15778         enum machine_mode mode = GET_MODE (rtl);
15779
15780         if (SCALAR_FLOAT_MODE_P (mode))
15781           {
15782             unsigned int length = GET_MODE_SIZE (mode);
15783             unsigned char *array = GGC_NEWVEC (unsigned char, length);
15784
15785             insert_float (rtl, array);
15786             add_AT_vec (die, DW_AT_const_value, length / 4, 4, array);
15787           }
15788         else
15789           add_AT_double (die, DW_AT_const_value,
15790                          CONST_DOUBLE_HIGH (rtl), CONST_DOUBLE_LOW (rtl));
15791       }
15792       return true;
15793
15794     case CONST_VECTOR:
15795       {
15796         enum machine_mode mode = GET_MODE (rtl);
15797         unsigned int elt_size = GET_MODE_UNIT_SIZE (mode);
15798         unsigned int length = CONST_VECTOR_NUNITS (rtl);
15799         unsigned char *array = GGC_NEWVEC (unsigned char, length * elt_size);
15800         unsigned int i;
15801         unsigned char *p;
15802
15803         switch (GET_MODE_CLASS (mode))
15804           {
15805           case MODE_VECTOR_INT:
15806             for (i = 0, p = array; i < length; i++, p += elt_size)
15807               {
15808                 rtx elt = CONST_VECTOR_ELT (rtl, i);
15809                 double_int val = rtx_to_double_int (elt);
15810
15811                 if (elt_size <= sizeof (HOST_WIDE_INT))
15812                   insert_int (double_int_to_shwi (val), elt_size, p);
15813                 else
15814                   {
15815                     gcc_assert (elt_size == 2 * sizeof (HOST_WIDE_INT));
15816                     insert_double (val, p);
15817                   }
15818               }
15819             break;
15820
15821           case MODE_VECTOR_FLOAT:
15822             for (i = 0, p = array; i < length; i++, p += elt_size)
15823               {
15824                 rtx elt = CONST_VECTOR_ELT (rtl, i);
15825                 insert_float (elt, p);
15826               }
15827             break;
15828
15829           default:
15830             gcc_unreachable ();
15831           }
15832
15833         add_AT_vec (die, DW_AT_const_value, length, elt_size, array);
15834       }
15835       return true;
15836
15837     case CONST_STRING:
15838       if (dwarf_version >= 4 || !dwarf_strict)
15839         {
15840           dw_loc_descr_ref loc_result;
15841           resolve_one_addr (&rtl, NULL);
15842         rtl_addr:
15843           loc_result = new_loc_descr (DW_OP_addr, 0, 0);
15844           loc_result->dw_loc_oprnd1.val_class = dw_val_class_addr;
15845           loc_result->dw_loc_oprnd1.v.val_addr = rtl;
15846           add_loc_descr (&loc_result, new_loc_descr (DW_OP_stack_value, 0, 0));
15847           add_AT_loc (die, DW_AT_location, loc_result);
15848           VEC_safe_push (rtx, gc, used_rtx_array, rtl);
15849           return true;
15850         }
15851       return false;
15852
15853     case CONST:
15854       if (CONSTANT_P (XEXP (rtl, 0)))
15855         return add_const_value_attribute (die, XEXP (rtl, 0));
15856       /* FALLTHROUGH */
15857     case SYMBOL_REF:
15858       if (!const_ok_for_output (rtl))
15859         return false;
15860     case LABEL_REF:
15861       if (dwarf_version >= 4 || !dwarf_strict)
15862         goto rtl_addr;
15863       return false;
15864
15865     case PLUS:
15866       /* In cases where an inlined instance of an inline function is passed
15867          the address of an `auto' variable (which is local to the caller) we
15868          can get a situation where the DECL_RTL of the artificial local
15869          variable (for the inlining) which acts as a stand-in for the
15870          corresponding formal parameter (of the inline function) will look
15871          like (plus:SI (reg:SI FRAME_PTR) (const_int ...)).  This is not
15872          exactly a compile-time constant expression, but it isn't the address
15873          of the (artificial) local variable either.  Rather, it represents the
15874          *value* which the artificial local variable always has during its
15875          lifetime.  We currently have no way to represent such quasi-constant
15876          values in Dwarf, so for now we just punt and generate nothing.  */
15877       return false;
15878
15879     case HIGH:
15880     case CONST_FIXED:
15881       return false;
15882
15883     case MEM:
15884       if (GET_CODE (XEXP (rtl, 0)) == CONST_STRING
15885           && MEM_READONLY_P (rtl)
15886           && GET_MODE (rtl) == BLKmode)
15887         {
15888           add_AT_string (die, DW_AT_const_value, XSTR (XEXP (rtl, 0), 0));
15889           return true;
15890         }
15891       return false;
15892
15893     default:
15894       /* No other kinds of rtx should be possible here.  */
15895       gcc_unreachable ();
15896     }
15897   return false;
15898 }
15899
15900 /* Determine whether the evaluation of EXPR references any variables
15901    or functions which aren't otherwise used (and therefore may not be
15902    output).  */
15903 static tree
15904 reference_to_unused (tree * tp, int * walk_subtrees,
15905                      void * data ATTRIBUTE_UNUSED)
15906 {
15907   if (! EXPR_P (*tp) && ! CONSTANT_CLASS_P (*tp))
15908     *walk_subtrees = 0;
15909
15910   if (DECL_P (*tp) && ! TREE_PUBLIC (*tp) && ! TREE_USED (*tp)
15911       && ! TREE_ASM_WRITTEN (*tp))
15912     return *tp;
15913   /* ???  The C++ FE emits debug information for using decls, so
15914      putting gcc_unreachable here falls over.  See PR31899.  For now
15915      be conservative.  */
15916   else if (!cgraph_global_info_ready
15917            && (TREE_CODE (*tp) == VAR_DECL || TREE_CODE (*tp) == FUNCTION_DECL))
15918     return *tp;
15919   else if (TREE_CODE (*tp) == VAR_DECL)
15920     {
15921       struct varpool_node *node = varpool_node (*tp);
15922       if (!node->needed)
15923         return *tp;
15924     }
15925   else if (TREE_CODE (*tp) == FUNCTION_DECL
15926            && (!DECL_EXTERNAL (*tp) || DECL_DECLARED_INLINE_P (*tp)))
15927     {
15928       /* The call graph machinery must have finished analyzing,
15929          optimizing and gimplifying the CU by now.
15930          So if *TP has no call graph node associated
15931          to it, it means *TP will not be emitted.  */
15932       if (!cgraph_get_node (*tp))
15933         return *tp;
15934     }
15935   else if (TREE_CODE (*tp) == STRING_CST && !TREE_ASM_WRITTEN (*tp))
15936     return *tp;
15937
15938   return NULL_TREE;
15939 }
15940
15941 /* Generate an RTL constant from a decl initializer INIT with decl type TYPE,
15942    for use in a later add_const_value_attribute call.  */
15943
15944 static rtx
15945 rtl_for_decl_init (tree init, tree type)
15946 {
15947   rtx rtl = NULL_RTX;
15948
15949   /* If a variable is initialized with a string constant without embedded
15950      zeros, build CONST_STRING.  */
15951   if (TREE_CODE (init) == STRING_CST && TREE_CODE (type) == ARRAY_TYPE)
15952     {
15953       tree enttype = TREE_TYPE (type);
15954       tree domain = TYPE_DOMAIN (type);
15955       enum machine_mode mode = TYPE_MODE (enttype);
15956
15957       if (GET_MODE_CLASS (mode) == MODE_INT && GET_MODE_SIZE (mode) == 1
15958           && domain
15959           && integer_zerop (TYPE_MIN_VALUE (domain))
15960           && compare_tree_int (TYPE_MAX_VALUE (domain),
15961                                TREE_STRING_LENGTH (init) - 1) == 0
15962           && ((size_t) TREE_STRING_LENGTH (init)
15963               == strlen (TREE_STRING_POINTER (init)) + 1))
15964         {
15965           rtl = gen_rtx_CONST_STRING (VOIDmode,
15966                                       ggc_strdup (TREE_STRING_POINTER (init)));
15967           rtl = gen_rtx_MEM (BLKmode, rtl);
15968           MEM_READONLY_P (rtl) = 1;
15969         }
15970     }
15971   /* Other aggregates, and complex values, could be represented using
15972      CONCAT: FIXME!  */
15973   else if (AGGREGATE_TYPE_P (type) || TREE_CODE (type) == COMPLEX_TYPE)
15974     ;
15975   /* Vectors only work if their mode is supported by the target.
15976      FIXME: generic vectors ought to work too.  */
15977   else if (TREE_CODE (type) == VECTOR_TYPE && TYPE_MODE (type) == BLKmode)
15978     ;
15979   /* If the initializer is something that we know will expand into an
15980      immediate RTL constant, expand it now.  We must be careful not to
15981      reference variables which won't be output.  */
15982   else if (initializer_constant_valid_p (init, type)
15983            && ! walk_tree (&init, reference_to_unused, NULL, NULL))
15984     {
15985       /* Convert vector CONSTRUCTOR initializers to VECTOR_CST if
15986          possible.  */
15987       if (TREE_CODE (type) == VECTOR_TYPE)
15988         switch (TREE_CODE (init))
15989           {
15990           case VECTOR_CST:
15991             break;
15992           case CONSTRUCTOR:
15993             if (TREE_CONSTANT (init))
15994               {
15995                 VEC(constructor_elt,gc) *elts = CONSTRUCTOR_ELTS (init);
15996                 bool constant_p = true;
15997                 tree value;
15998                 unsigned HOST_WIDE_INT ix;
15999
16000                 /* Even when ctor is constant, it might contain non-*_CST
16001                    elements (e.g. { 1.0/0.0 - 1.0/0.0, 0.0 }) and those don't
16002                    belong into VECTOR_CST nodes.  */
16003                 FOR_EACH_CONSTRUCTOR_VALUE (elts, ix, value)
16004                   if (!CONSTANT_CLASS_P (value))
16005                     {
16006                       constant_p = false;
16007                       break;
16008                     }
16009
16010                 if (constant_p)
16011                   {
16012                     init = build_vector_from_ctor (type, elts);
16013                     break;
16014                   }
16015               }
16016             /* FALLTHRU */
16017
16018           default:
16019             return NULL;
16020           }
16021
16022       rtl = expand_expr (init, NULL_RTX, VOIDmode, EXPAND_INITIALIZER);
16023
16024       /* If expand_expr returns a MEM, it wasn't immediate.  */
16025       gcc_assert (!rtl || !MEM_P (rtl));
16026     }
16027
16028   return rtl;
16029 }
16030
16031 /* Generate RTL for the variable DECL to represent its location.  */
16032
16033 static rtx
16034 rtl_for_decl_location (tree decl)
16035 {
16036   rtx rtl;
16037
16038   /* Here we have to decide where we are going to say the parameter "lives"
16039      (as far as the debugger is concerned).  We only have a couple of
16040      choices.  GCC provides us with DECL_RTL and with DECL_INCOMING_RTL.
16041
16042      DECL_RTL normally indicates where the parameter lives during most of the
16043      activation of the function.  If optimization is enabled however, this
16044      could be either NULL or else a pseudo-reg.  Both of those cases indicate
16045      that the parameter doesn't really live anywhere (as far as the code
16046      generation parts of GCC are concerned) during most of the function's
16047      activation.  That will happen (for example) if the parameter is never
16048      referenced within the function.
16049
16050      We could just generate a location descriptor here for all non-NULL
16051      non-pseudo values of DECL_RTL and ignore all of the rest, but we can be
16052      a little nicer than that if we also consider DECL_INCOMING_RTL in cases
16053      where DECL_RTL is NULL or is a pseudo-reg.
16054
16055      Note however that we can only get away with using DECL_INCOMING_RTL as
16056      a backup substitute for DECL_RTL in certain limited cases.  In cases
16057      where DECL_ARG_TYPE (decl) indicates the same type as TREE_TYPE (decl),
16058      we can be sure that the parameter was passed using the same type as it is
16059      declared to have within the function, and that its DECL_INCOMING_RTL
16060      points us to a place where a value of that type is passed.
16061
16062      In cases where DECL_ARG_TYPE (decl) and TREE_TYPE (decl) are different,
16063      we cannot (in general) use DECL_INCOMING_RTL as a substitute for DECL_RTL
16064      because in these cases DECL_INCOMING_RTL points us to a value of some
16065      type which is *different* from the type of the parameter itself.  Thus,
16066      if we tried to use DECL_INCOMING_RTL to generate a location attribute in
16067      such cases, the debugger would end up (for example) trying to fetch a
16068      `float' from a place which actually contains the first part of a
16069      `double'.  That would lead to really incorrect and confusing
16070      output at debug-time.
16071
16072      So, in general, we *do not* use DECL_INCOMING_RTL as a backup for DECL_RTL
16073      in cases where DECL_ARG_TYPE (decl) != TREE_TYPE (decl).  There
16074      are a couple of exceptions however.  On little-endian machines we can
16075      get away with using DECL_INCOMING_RTL even when DECL_ARG_TYPE (decl) is
16076      not the same as TREE_TYPE (decl), but only when DECL_ARG_TYPE (decl) is
16077      an integral type that is smaller than TREE_TYPE (decl). These cases arise
16078      when (on a little-endian machine) a non-prototyped function has a
16079      parameter declared to be of type `short' or `char'.  In such cases,
16080      TREE_TYPE (decl) will be `short' or `char', DECL_ARG_TYPE (decl) will
16081      be `int', and DECL_INCOMING_RTL will point to the lowest-order byte of the
16082      passed `int' value.  If the debugger then uses that address to fetch
16083      a `short' or a `char' (on a little-endian machine) the result will be
16084      the correct data, so we allow for such exceptional cases below.
16085
16086      Note that our goal here is to describe the place where the given formal
16087      parameter lives during most of the function's activation (i.e. between the
16088      end of the prologue and the start of the epilogue).  We'll do that as best
16089      as we can. Note however that if the given formal parameter is modified
16090      sometime during the execution of the function, then a stack backtrace (at
16091      debug-time) will show the function as having been called with the *new*
16092      value rather than the value which was originally passed in.  This happens
16093      rarely enough that it is not a major problem, but it *is* a problem, and
16094      I'd like to fix it.
16095
16096      A future version of dwarf2out.c may generate two additional attributes for
16097      any given DW_TAG_formal_parameter DIE which will describe the "passed
16098      type" and the "passed location" for the given formal parameter in addition
16099      to the attributes we now generate to indicate the "declared type" and the
16100      "active location" for each parameter.  This additional set of attributes
16101      could be used by debuggers for stack backtraces. Separately, note that
16102      sometimes DECL_RTL can be NULL and DECL_INCOMING_RTL can be NULL also.
16103      This happens (for example) for inlined-instances of inline function formal
16104      parameters which are never referenced.  This really shouldn't be
16105      happening.  All PARM_DECL nodes should get valid non-NULL
16106      DECL_INCOMING_RTL values.  FIXME.  */
16107
16108   /* Use DECL_RTL as the "location" unless we find something better.  */
16109   rtl = DECL_RTL_IF_SET (decl);
16110
16111   /* When generating abstract instances, ignore everything except
16112      constants, symbols living in memory, and symbols living in
16113      fixed registers.  */
16114   if (! reload_completed)
16115     {
16116       if (rtl
16117           && (CONSTANT_P (rtl)
16118               || (MEM_P (rtl)
16119                   && CONSTANT_P (XEXP (rtl, 0)))
16120               || (REG_P (rtl)
16121                   && TREE_CODE (decl) == VAR_DECL
16122                   && TREE_STATIC (decl))))
16123         {
16124           rtl = targetm.delegitimize_address (rtl);
16125           return rtl;
16126         }
16127       rtl = NULL_RTX;
16128     }
16129   else if (TREE_CODE (decl) == PARM_DECL)
16130     {
16131       if (rtl == NULL_RTX || is_pseudo_reg (rtl))
16132         {
16133           tree declared_type = TREE_TYPE (decl);
16134           tree passed_type = DECL_ARG_TYPE (decl);
16135           enum machine_mode dmode = TYPE_MODE (declared_type);
16136           enum machine_mode pmode = TYPE_MODE (passed_type);
16137
16138           /* This decl represents a formal parameter which was optimized out.
16139              Note that DECL_INCOMING_RTL may be NULL in here, but we handle
16140              all cases where (rtl == NULL_RTX) just below.  */
16141           if (dmode == pmode)
16142             rtl = DECL_INCOMING_RTL (decl);
16143           else if (SCALAR_INT_MODE_P (dmode)
16144                    && GET_MODE_SIZE (dmode) <= GET_MODE_SIZE (pmode)
16145                    && DECL_INCOMING_RTL (decl))
16146             {
16147               rtx inc = DECL_INCOMING_RTL (decl);
16148               if (REG_P (inc))
16149                 rtl = inc;
16150               else if (MEM_P (inc))
16151                 {
16152                   if (BYTES_BIG_ENDIAN)
16153                     rtl = adjust_address_nv (inc, dmode,
16154                                              GET_MODE_SIZE (pmode)
16155                                              - GET_MODE_SIZE (dmode));
16156                   else
16157                     rtl = inc;
16158                 }
16159             }
16160         }
16161
16162       /* If the parm was passed in registers, but lives on the stack, then
16163          make a big endian correction if the mode of the type of the
16164          parameter is not the same as the mode of the rtl.  */
16165       /* ??? This is the same series of checks that are made in dbxout.c before
16166          we reach the big endian correction code there.  It isn't clear if all
16167          of these checks are necessary here, but keeping them all is the safe
16168          thing to do.  */
16169       else if (MEM_P (rtl)
16170                && XEXP (rtl, 0) != const0_rtx
16171                && ! CONSTANT_P (XEXP (rtl, 0))
16172                /* Not passed in memory.  */
16173                && !MEM_P (DECL_INCOMING_RTL (decl))
16174                /* Not passed by invisible reference.  */
16175                && (!REG_P (XEXP (rtl, 0))
16176                    || REGNO (XEXP (rtl, 0)) == HARD_FRAME_POINTER_REGNUM
16177                    || REGNO (XEXP (rtl, 0)) == STACK_POINTER_REGNUM
16178 #if ARG_POINTER_REGNUM != HARD_FRAME_POINTER_REGNUM
16179                    || REGNO (XEXP (rtl, 0)) == ARG_POINTER_REGNUM
16180 #endif
16181                      )
16182                /* Big endian correction check.  */
16183                && BYTES_BIG_ENDIAN
16184                && TYPE_MODE (TREE_TYPE (decl)) != GET_MODE (rtl)
16185                && (GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (decl)))
16186                    < UNITS_PER_WORD))
16187         {
16188           int offset = (UNITS_PER_WORD
16189                         - GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (decl))));
16190
16191           rtl = gen_rtx_MEM (TYPE_MODE (TREE_TYPE (decl)),
16192                              plus_constant (XEXP (rtl, 0), offset));
16193         }
16194     }
16195   else if (TREE_CODE (decl) == VAR_DECL
16196            && rtl
16197            && MEM_P (rtl)
16198            && GET_MODE (rtl) != TYPE_MODE (TREE_TYPE (decl))
16199            && BYTES_BIG_ENDIAN)
16200     {
16201       int rsize = GET_MODE_SIZE (GET_MODE (rtl));
16202       int dsize = GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (decl)));
16203
16204       /* If a variable is declared "register" yet is smaller than
16205          a register, then if we store the variable to memory, it
16206          looks like we're storing a register-sized value, when in
16207          fact we are not.  We need to adjust the offset of the
16208          storage location to reflect the actual value's bytes,
16209          else gdb will not be able to display it.  */
16210       if (rsize > dsize)
16211         rtl = gen_rtx_MEM (TYPE_MODE (TREE_TYPE (decl)),
16212                            plus_constant (XEXP (rtl, 0), rsize-dsize));
16213     }
16214
16215   /* A variable with no DECL_RTL but a DECL_INITIAL is a compile-time constant,
16216      and will have been substituted directly into all expressions that use it.
16217      C does not have such a concept, but C++ and other languages do.  */
16218   if (!rtl && TREE_CODE (decl) == VAR_DECL && DECL_INITIAL (decl))
16219     rtl = rtl_for_decl_init (DECL_INITIAL (decl), TREE_TYPE (decl));
16220
16221   if (rtl)
16222     rtl = targetm.delegitimize_address (rtl);
16223
16224   /* If we don't look past the constant pool, we risk emitting a
16225      reference to a constant pool entry that isn't referenced from
16226      code, and thus is not emitted.  */
16227   if (rtl)
16228     rtl = avoid_constant_pool_reference (rtl);
16229
16230   /* Try harder to get a rtl.  If this symbol ends up not being emitted
16231      in the current CU, resolve_addr will remove the expression referencing
16232      it.  */
16233   if (rtl == NULL_RTX
16234       && TREE_CODE (decl) == VAR_DECL
16235       && !DECL_EXTERNAL (decl)
16236       && TREE_STATIC (decl)
16237       && DECL_NAME (decl)
16238       && !DECL_HARD_REGISTER (decl)
16239       && DECL_MODE (decl) != VOIDmode)
16240     {
16241       rtl = make_decl_rtl_for_debug (decl);
16242       if (!MEM_P (rtl)
16243           || GET_CODE (XEXP (rtl, 0)) != SYMBOL_REF
16244           || SYMBOL_REF_DECL (XEXP (rtl, 0)) != decl)
16245         rtl = NULL_RTX;
16246     }
16247
16248   return rtl;
16249 }
16250
16251 /* Check whether decl is a Fortran COMMON symbol.  If not, NULL_TREE is
16252    returned.  If so, the decl for the COMMON block is returned, and the
16253    value is the offset into the common block for the symbol.  */
16254
16255 static tree
16256 fortran_common (tree decl, HOST_WIDE_INT *value)
16257 {
16258   tree val_expr, cvar;
16259   enum machine_mode mode;
16260   HOST_WIDE_INT bitsize, bitpos;
16261   tree offset;
16262   int volatilep = 0, unsignedp = 0;
16263
16264   /* If the decl isn't a VAR_DECL, or if it isn't static, or if
16265      it does not have a value (the offset into the common area), or if it
16266      is thread local (as opposed to global) then it isn't common, and shouldn't
16267      be handled as such.  */
16268   if (TREE_CODE (decl) != VAR_DECL
16269       || !TREE_STATIC (decl)
16270       || !DECL_HAS_VALUE_EXPR_P (decl)
16271       || !is_fortran ())
16272     return NULL_TREE;
16273
16274   val_expr = DECL_VALUE_EXPR (decl);
16275   if (TREE_CODE (val_expr) != COMPONENT_REF)
16276     return NULL_TREE;
16277
16278   cvar = get_inner_reference (val_expr, &bitsize, &bitpos, &offset,
16279                               &mode, &unsignedp, &volatilep, true);
16280
16281   if (cvar == NULL_TREE
16282       || TREE_CODE (cvar) != VAR_DECL
16283       || DECL_ARTIFICIAL (cvar)
16284       || !TREE_PUBLIC (cvar))
16285     return NULL_TREE;
16286
16287   *value = 0;
16288   if (offset != NULL)
16289     {
16290       if (!host_integerp (offset, 0))
16291         return NULL_TREE;
16292       *value = tree_low_cst (offset, 0);
16293     }
16294   if (bitpos != 0)
16295     *value += bitpos / BITS_PER_UNIT;
16296
16297   return cvar;
16298 }
16299
16300 /* Generate *either* a DW_AT_location attribute or else a DW_AT_const_value
16301    data attribute for a variable or a parameter.  We generate the
16302    DW_AT_const_value attribute only in those cases where the given variable
16303    or parameter does not have a true "location" either in memory or in a
16304    register.  This can happen (for example) when a constant is passed as an
16305    actual argument in a call to an inline function.  (It's possible that
16306    these things can crop up in other ways also.)  Note that one type of
16307    constant value which can be passed into an inlined function is a constant
16308    pointer.  This can happen for example if an actual argument in an inlined
16309    function call evaluates to a compile-time constant address.  */
16310
16311 static bool
16312 add_location_or_const_value_attribute (dw_die_ref die, tree decl,
16313                                        enum dwarf_attribute attr)
16314 {
16315   rtx rtl;
16316   dw_loc_list_ref list;
16317   var_loc_list *loc_list;
16318
16319   if (TREE_CODE (decl) == ERROR_MARK)
16320     return false;
16321
16322   gcc_assert (TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == PARM_DECL
16323               || TREE_CODE (decl) == RESULT_DECL);
16324
16325   /* Try to get some constant RTL for this decl, and use that as the value of
16326      the location.  */
16327
16328   rtl = rtl_for_decl_location (decl);
16329   if (rtl && (CONSTANT_P (rtl) || GET_CODE (rtl) == CONST_STRING)
16330       && add_const_value_attribute (die, rtl))
16331     return true;
16332
16333   /* See if we have single element location list that is equivalent to
16334      a constant value.  That way we are better to use add_const_value_attribute
16335      rather than expanding constant value equivalent.  */
16336   loc_list = lookup_decl_loc (decl);
16337   if (loc_list
16338       && loc_list->first
16339       && loc_list->first->next == NULL
16340       && NOTE_P (loc_list->first->loc)
16341       && NOTE_VAR_LOCATION (loc_list->first->loc)
16342       && NOTE_VAR_LOCATION_LOC (loc_list->first->loc))
16343     {
16344       struct var_loc_node *node;
16345
16346       node = loc_list->first;
16347       rtl = NOTE_VAR_LOCATION_LOC (node->loc);
16348       if (GET_CODE (rtl) == EXPR_LIST)
16349         rtl = XEXP (rtl, 0);
16350       if ((CONSTANT_P (rtl) || GET_CODE (rtl) == CONST_STRING)
16351           && add_const_value_attribute (die, rtl))
16352          return true;
16353     }
16354   list = loc_list_from_tree (decl, decl_by_reference_p (decl) ? 0 : 2);
16355   if (list)
16356     {
16357       add_AT_location_description (die, attr, list);
16358       return true;
16359     }
16360   /* None of that worked, so it must not really have a location;
16361      try adding a constant value attribute from the DECL_INITIAL.  */
16362   return tree_add_const_value_attribute_for_decl (die, decl);
16363 }
16364
16365 /* Add VARIABLE and DIE into deferred locations list.  */
16366
16367 static void
16368 defer_location (tree variable, dw_die_ref die)
16369 {
16370   deferred_locations entry;
16371   entry.variable = variable;
16372   entry.die = die;
16373   VEC_safe_push (deferred_locations, gc, deferred_locations_list, &entry);
16374 }
16375
16376 /* Helper function for tree_add_const_value_attribute.  Natively encode
16377    initializer INIT into an array.  Return true if successful.  */
16378
16379 static bool
16380 native_encode_initializer (tree init, unsigned char *array, int size)
16381 {
16382   tree type;
16383
16384   if (init == NULL_TREE)
16385     return false;
16386
16387   STRIP_NOPS (init);
16388   switch (TREE_CODE (init))
16389     {
16390     case STRING_CST:
16391       type = TREE_TYPE (init);
16392       if (TREE_CODE (type) == ARRAY_TYPE)
16393         {
16394           tree enttype = TREE_TYPE (type);
16395           enum machine_mode mode = TYPE_MODE (enttype);
16396
16397           if (GET_MODE_CLASS (mode) != MODE_INT || GET_MODE_SIZE (mode) != 1)
16398             return false;
16399           if (int_size_in_bytes (type) != size)
16400             return false;
16401           if (size > TREE_STRING_LENGTH (init))
16402             {
16403               memcpy (array, TREE_STRING_POINTER (init),
16404                       TREE_STRING_LENGTH (init));
16405               memset (array + TREE_STRING_LENGTH (init),
16406                       '\0', size - TREE_STRING_LENGTH (init));
16407             }
16408           else
16409             memcpy (array, TREE_STRING_POINTER (init), size);
16410           return true;
16411         }
16412       return false;
16413     case CONSTRUCTOR:
16414       type = TREE_TYPE (init);
16415       if (int_size_in_bytes (type) != size)
16416         return false;
16417       if (TREE_CODE (type) == ARRAY_TYPE)
16418         {
16419           HOST_WIDE_INT min_index;
16420           unsigned HOST_WIDE_INT cnt;
16421           int curpos = 0, fieldsize;
16422           constructor_elt *ce;
16423
16424           if (TYPE_DOMAIN (type) == NULL_TREE
16425               || !host_integerp (TYPE_MIN_VALUE (TYPE_DOMAIN (type)), 0))
16426             return false;
16427
16428           fieldsize = int_size_in_bytes (TREE_TYPE (type));
16429           if (fieldsize <= 0)
16430             return false;
16431
16432           min_index = tree_low_cst (TYPE_MIN_VALUE (TYPE_DOMAIN (type)), 0);
16433           memset (array, '\0', size);
16434           for (cnt = 0;
16435                VEC_iterate (constructor_elt, CONSTRUCTOR_ELTS (init), cnt, ce);
16436                cnt++)
16437             {
16438               tree val = ce->value;
16439               tree index = ce->index;
16440               int pos = curpos;
16441               if (index && TREE_CODE (index) == RANGE_EXPR)
16442                 pos = (tree_low_cst (TREE_OPERAND (index, 0), 0) - min_index)
16443                       * fieldsize;
16444               else if (index)
16445                 pos = (tree_low_cst (index, 0) - min_index) * fieldsize;
16446
16447               if (val)
16448                 {
16449                   STRIP_NOPS (val);
16450                   if (!native_encode_initializer (val, array + pos, fieldsize))
16451                     return false;
16452                 }
16453               curpos = pos + fieldsize;
16454               if (index && TREE_CODE (index) == RANGE_EXPR)
16455                 {
16456                   int count = tree_low_cst (TREE_OPERAND (index, 1), 0)
16457                               - tree_low_cst (TREE_OPERAND (index, 0), 0);
16458                   while (count > 0)
16459                     {
16460                       if (val)
16461                         memcpy (array + curpos, array + pos, fieldsize);
16462                       curpos += fieldsize;
16463                     }
16464                 }
16465               gcc_assert (curpos <= size);
16466             }
16467           return true;
16468         }
16469       else if (TREE_CODE (type) == RECORD_TYPE
16470                || TREE_CODE (type) == UNION_TYPE)
16471         {
16472           tree field = NULL_TREE;
16473           unsigned HOST_WIDE_INT cnt;
16474           constructor_elt *ce;
16475
16476           if (int_size_in_bytes (type) != size)
16477             return false;
16478
16479           if (TREE_CODE (type) == RECORD_TYPE)
16480             field = TYPE_FIELDS (type);
16481
16482           for (cnt = 0;
16483                VEC_iterate (constructor_elt, CONSTRUCTOR_ELTS (init), cnt, ce);
16484                cnt++, field = field ? TREE_CHAIN (field) : 0)
16485             {
16486               tree val = ce->value;
16487               int pos, fieldsize;
16488
16489               if (ce->index != 0)
16490                 field = ce->index;
16491
16492               if (val)
16493                 STRIP_NOPS (val);
16494
16495               if (field == NULL_TREE || DECL_BIT_FIELD (field))
16496                 return false;
16497
16498               if (TREE_CODE (TREE_TYPE (field)) == ARRAY_TYPE
16499                   && TYPE_DOMAIN (TREE_TYPE (field))
16500                   && ! TYPE_MAX_VALUE (TYPE_DOMAIN (TREE_TYPE (field))))
16501                 return false;
16502               else if (DECL_SIZE_UNIT (field) == NULL_TREE
16503                        || !host_integerp (DECL_SIZE_UNIT (field), 0))
16504                 return false;
16505               fieldsize = tree_low_cst (DECL_SIZE_UNIT (field), 0);
16506               pos = int_byte_position (field);
16507               gcc_assert (pos + fieldsize <= size);
16508               if (val
16509                   && !native_encode_initializer (val, array + pos, fieldsize))
16510                 return false;
16511             }
16512           return true;
16513         }
16514       return false;
16515     case VIEW_CONVERT_EXPR:
16516     case NON_LVALUE_EXPR:
16517       return native_encode_initializer (TREE_OPERAND (init, 0), array, size);
16518     default:
16519       return native_encode_expr (init, array, size) == size;
16520     }
16521 }
16522
16523 /* Attach a DW_AT_const_value attribute to DIE. The value of the
16524    attribute is the const value T.  */
16525
16526 static bool
16527 tree_add_const_value_attribute (dw_die_ref die, tree t)
16528 {
16529   tree init;
16530   tree type = TREE_TYPE (t);
16531   rtx rtl;
16532
16533   if (!t || !TREE_TYPE (t) || TREE_TYPE (t) == error_mark_node)
16534     return false;
16535
16536   init = t;
16537   gcc_assert (!DECL_P (init));
16538
16539   rtl = rtl_for_decl_init (init, type);
16540   if (rtl)
16541     return add_const_value_attribute (die, rtl);
16542   /* If the host and target are sane, try harder.  */
16543   else if (CHAR_BIT == 8 && BITS_PER_UNIT == 8
16544            && initializer_constant_valid_p (init, type))
16545     {
16546       HOST_WIDE_INT size = int_size_in_bytes (TREE_TYPE (init));
16547       if (size > 0 && (int) size == size)
16548         {
16549           unsigned char *array = GGC_CNEWVEC (unsigned char, size);
16550
16551           if (native_encode_initializer (init, array, size))
16552             {
16553               add_AT_vec (die, DW_AT_const_value, size, 1, array);
16554               return true;
16555             }
16556         }
16557     }
16558   return false;
16559 }
16560
16561 /* Attach a DW_AT_const_value attribute to VAR_DIE. The value of the
16562    attribute is the const value of T, where T is an integral constant
16563    variable with static storage duration
16564    (so it can't be a PARM_DECL or a RESULT_DECL).  */
16565
16566 static bool
16567 tree_add_const_value_attribute_for_decl (dw_die_ref var_die, tree decl)
16568 {
16569
16570   if (!decl
16571       || (TREE_CODE (decl) != VAR_DECL
16572           && TREE_CODE (decl) != CONST_DECL))
16573     return false;
16574
16575     if (TREE_READONLY (decl)
16576         && ! TREE_THIS_VOLATILE (decl)
16577         && DECL_INITIAL (decl))
16578       /* OK */;
16579     else
16580       return false;
16581
16582   /* Don't add DW_AT_const_value if abstract origin already has one.  */
16583   if (get_AT (var_die, DW_AT_const_value))
16584     return false;
16585
16586   return tree_add_const_value_attribute (var_die, DECL_INITIAL (decl));
16587 }
16588
16589 /* Convert the CFI instructions for the current function into a
16590    location list.  This is used for DW_AT_frame_base when we targeting
16591    a dwarf2 consumer that does not support the dwarf3
16592    DW_OP_call_frame_cfa.  OFFSET is a constant to be added to all CFA
16593    expressions.  */
16594
16595 static dw_loc_list_ref
16596 convert_cfa_to_fb_loc_list (HOST_WIDE_INT offset)
16597 {
16598   dw_fde_ref fde;
16599   dw_loc_list_ref list, *list_tail;
16600   dw_cfi_ref cfi;
16601   dw_cfa_location last_cfa, next_cfa;
16602   const char *start_label, *last_label, *section;
16603   dw_cfa_location remember;
16604
16605   fde = current_fde ();
16606   gcc_assert (fde != NULL);
16607
16608   section = secname_for_decl (current_function_decl);
16609   list_tail = &list;
16610   list = NULL;
16611
16612   memset (&next_cfa, 0, sizeof (next_cfa));
16613   next_cfa.reg = INVALID_REGNUM;
16614   remember = next_cfa;
16615
16616   start_label = fde->dw_fde_begin;
16617
16618   /* ??? Bald assumption that the CIE opcode list does not contain
16619      advance opcodes.  */
16620   for (cfi = cie_cfi_head; cfi; cfi = cfi->dw_cfi_next)
16621     lookup_cfa_1 (cfi, &next_cfa, &remember);
16622
16623   last_cfa = next_cfa;
16624   last_label = start_label;
16625
16626   for (cfi = fde->dw_fde_cfi; cfi; cfi = cfi->dw_cfi_next)
16627     switch (cfi->dw_cfi_opc)
16628       {
16629       case DW_CFA_set_loc:
16630       case DW_CFA_advance_loc1:
16631       case DW_CFA_advance_loc2:
16632       case DW_CFA_advance_loc4:
16633         if (!cfa_equal_p (&last_cfa, &next_cfa))
16634           {
16635             *list_tail = new_loc_list (build_cfa_loc (&last_cfa, offset),
16636                                        start_label, last_label, section);
16637
16638             list_tail = &(*list_tail)->dw_loc_next;
16639             last_cfa = next_cfa;
16640             start_label = last_label;
16641           }
16642         last_label = cfi->dw_cfi_oprnd1.dw_cfi_addr;
16643         break;
16644
16645       case DW_CFA_advance_loc:
16646         /* The encoding is complex enough that we should never emit this.  */
16647         gcc_unreachable ();
16648
16649       default:
16650         lookup_cfa_1 (cfi, &next_cfa, &remember);
16651         break;
16652       }
16653
16654   if (!cfa_equal_p (&last_cfa, &next_cfa))
16655     {
16656       *list_tail = new_loc_list (build_cfa_loc (&last_cfa, offset),
16657                                  start_label, last_label, section);
16658       list_tail = &(*list_tail)->dw_loc_next;
16659       start_label = last_label;
16660     }
16661
16662   *list_tail = new_loc_list (build_cfa_loc (&next_cfa, offset),
16663                              start_label, fde->dw_fde_end, section);
16664
16665   if (list && list->dw_loc_next)
16666     gen_llsym (list);
16667
16668   return list;
16669 }
16670
16671 /* Compute a displacement from the "steady-state frame pointer" to the
16672    frame base (often the same as the CFA), and store it in
16673    frame_pointer_fb_offset.  OFFSET is added to the displacement
16674    before the latter is negated.  */
16675
16676 static void
16677 compute_frame_pointer_to_fb_displacement (HOST_WIDE_INT offset)
16678 {
16679   rtx reg, elim;
16680
16681 #ifdef FRAME_POINTER_CFA_OFFSET
16682   reg = frame_pointer_rtx;
16683   offset += FRAME_POINTER_CFA_OFFSET (current_function_decl);
16684 #else
16685   reg = arg_pointer_rtx;
16686   offset += ARG_POINTER_CFA_OFFSET (current_function_decl);
16687 #endif
16688
16689   elim = eliminate_regs (reg, VOIDmode, NULL_RTX);
16690   if (GET_CODE (elim) == PLUS)
16691     {
16692       offset += INTVAL (XEXP (elim, 1));
16693       elim = XEXP (elim, 0);
16694     }
16695
16696   gcc_assert ((SUPPORTS_STACK_ALIGNMENT
16697                && (elim == hard_frame_pointer_rtx
16698                    || elim == stack_pointer_rtx))
16699               || elim == (frame_pointer_needed
16700                           ? hard_frame_pointer_rtx
16701                           : stack_pointer_rtx));
16702
16703   frame_pointer_fb_offset = -offset;
16704 }
16705
16706 /* Generate a DW_AT_name attribute given some string value to be included as
16707    the value of the attribute.  */
16708
16709 static void
16710 add_name_attribute (dw_die_ref die, const char *name_string)
16711 {
16712   if (name_string != NULL && *name_string != 0)
16713     {
16714       if (demangle_name_func)
16715         name_string = (*demangle_name_func) (name_string);
16716
16717       add_AT_string (die, DW_AT_name, name_string);
16718     }
16719 }
16720
16721 /* Generate a DW_AT_comp_dir attribute for DIE.  */
16722
16723 static void
16724 add_comp_dir_attribute (dw_die_ref die)
16725 {
16726   const char *wd = get_src_pwd ();
16727   char *wd1;
16728
16729   if (wd == NULL)
16730     return;
16731
16732   if (DWARF2_DIR_SHOULD_END_WITH_SEPARATOR)
16733     {
16734       int wdlen;
16735
16736       wdlen = strlen (wd);
16737       wd1 = GGC_NEWVEC (char, wdlen + 2);
16738       strcpy (wd1, wd);
16739       wd1 [wdlen] = DIR_SEPARATOR;
16740       wd1 [wdlen + 1] = 0;
16741       wd = wd1;
16742     }
16743
16744     add_AT_string (die, DW_AT_comp_dir, remap_debug_filename (wd));
16745 }
16746
16747 /* Return the default for DW_AT_lower_bound, or -1 if there is not any
16748    default.  */
16749
16750 static int
16751 lower_bound_default (void)
16752 {
16753   switch (get_AT_unsigned (comp_unit_die, DW_AT_language))
16754     {
16755     case DW_LANG_C:
16756     case DW_LANG_C89:
16757     case DW_LANG_C99:
16758     case DW_LANG_C_plus_plus:
16759     case DW_LANG_ObjC:
16760     case DW_LANG_ObjC_plus_plus:
16761     case DW_LANG_Java:
16762       return 0;
16763     case DW_LANG_Fortran77:
16764     case DW_LANG_Fortran90:
16765     case DW_LANG_Fortran95:
16766       return 1;
16767     case DW_LANG_UPC:
16768     case DW_LANG_D:
16769     case DW_LANG_Python:
16770       return dwarf_version >= 4 ? 0 : -1;
16771     case DW_LANG_Ada95:
16772     case DW_LANG_Ada83:
16773     case DW_LANG_Cobol74:
16774     case DW_LANG_Cobol85:
16775     case DW_LANG_Pascal83:
16776     case DW_LANG_Modula2:
16777     case DW_LANG_PLI:
16778       return dwarf_version >= 4 ? 1 : -1;
16779     default:
16780       return -1;
16781     }
16782 }
16783
16784 /* Given a tree node describing an array bound (either lower or upper) output
16785    a representation for that bound.  */
16786
16787 static void
16788 add_bound_info (dw_die_ref subrange_die, enum dwarf_attribute bound_attr, tree bound)
16789 {
16790   switch (TREE_CODE (bound))
16791     {
16792     case ERROR_MARK:
16793       return;
16794
16795     /* All fixed-bounds are represented by INTEGER_CST nodes.  */
16796     case INTEGER_CST:
16797       {
16798         unsigned int prec = simple_type_size_in_bits (TREE_TYPE (bound));
16799         int dflt;
16800
16801         /* Use the default if possible.  */
16802         if (bound_attr == DW_AT_lower_bound
16803             && host_integerp (bound, 0)
16804             && (dflt = lower_bound_default ()) != -1
16805             && tree_low_cst (bound, 0) == dflt)
16806           ;
16807
16808         /* Otherwise represent the bound as an unsigned value with the
16809            precision of its type.  The precision and signedness of the
16810            type will be necessary to re-interpret it unambiguously.  */
16811         else if (prec < HOST_BITS_PER_WIDE_INT)
16812           {
16813             unsigned HOST_WIDE_INT mask
16814               = ((unsigned HOST_WIDE_INT) 1 << prec) - 1;
16815             add_AT_unsigned (subrange_die, bound_attr,
16816                              TREE_INT_CST_LOW (bound) & mask);
16817           }
16818         else if (prec == HOST_BITS_PER_WIDE_INT
16819                  || TREE_INT_CST_HIGH (bound) == 0)
16820           add_AT_unsigned (subrange_die, bound_attr,
16821                            TREE_INT_CST_LOW (bound));
16822         else
16823           add_AT_double (subrange_die, bound_attr, TREE_INT_CST_HIGH (bound),
16824                          TREE_INT_CST_LOW (bound));
16825       }
16826       break;
16827
16828     CASE_CONVERT:
16829     case VIEW_CONVERT_EXPR:
16830       add_bound_info (subrange_die, bound_attr, TREE_OPERAND (bound, 0));
16831       break;
16832
16833     case SAVE_EXPR:
16834       break;
16835
16836     case VAR_DECL:
16837     case PARM_DECL:
16838     case RESULT_DECL:
16839       {
16840         dw_die_ref decl_die = lookup_decl_die (bound);
16841
16842         /* ??? Can this happen, or should the variable have been bound
16843            first?  Probably it can, since I imagine that we try to create
16844            the types of parameters in the order in which they exist in
16845            the list, and won't have created a forward reference to a
16846            later parameter.  */
16847         if (decl_die != NULL)
16848           {
16849             add_AT_die_ref (subrange_die, bound_attr, decl_die);
16850             break;
16851           }
16852       }
16853       /* FALLTHRU */
16854
16855     default:
16856       {
16857         /* Otherwise try to create a stack operation procedure to
16858            evaluate the value of the array bound.  */
16859
16860         dw_die_ref ctx, decl_die;
16861         dw_loc_list_ref list;
16862
16863         list = loc_list_from_tree (bound, 2);
16864         if (list == NULL || single_element_loc_list_p (list))
16865           {
16866             /* If DW_AT_*bound is not a reference nor constant, it is
16867                a DWARF expression rather than location description.
16868                For that loc_list_from_tree (bound, 0) is needed.
16869                If that fails to give a single element list,
16870                fall back to outputting this as a reference anyway.  */
16871             dw_loc_list_ref list2 = loc_list_from_tree (bound, 0);
16872             if (list2 && single_element_loc_list_p (list2))
16873               {
16874                 add_AT_loc (subrange_die, bound_attr, list2->expr);
16875                 break;
16876               }
16877           }
16878         if (list == NULL)
16879           break;
16880
16881         if (current_function_decl == 0)
16882           ctx = comp_unit_die;
16883         else
16884           ctx = lookup_decl_die (current_function_decl);
16885
16886         decl_die = new_die (DW_TAG_variable, ctx, bound);
16887         add_AT_flag (decl_die, DW_AT_artificial, 1);
16888         add_type_attribute (decl_die, TREE_TYPE (bound), 1, 0, ctx);
16889         add_AT_location_description (decl_die, DW_AT_location, list);
16890         add_AT_die_ref (subrange_die, bound_attr, decl_die);
16891         break;
16892       }
16893     }
16894 }
16895
16896 /* Add subscript info to TYPE_DIE, describing an array TYPE, collapsing
16897    possibly nested array subscripts in a flat sequence if COLLAPSE_P is true.
16898    Note that the block of subscript information for an array type also
16899    includes information about the element type of the given array type.  */
16900
16901 static void
16902 add_subscript_info (dw_die_ref type_die, tree type, bool collapse_p)
16903 {
16904   unsigned dimension_number;
16905   tree lower, upper;
16906   dw_die_ref subrange_die;
16907
16908   for (dimension_number = 0;
16909        TREE_CODE (type) == ARRAY_TYPE && (dimension_number == 0 || collapse_p);
16910        type = TREE_TYPE (type), dimension_number++)
16911     {
16912       tree domain = TYPE_DOMAIN (type);
16913
16914       if (TYPE_STRING_FLAG (type) && is_fortran () && dimension_number > 0)
16915         break;
16916
16917       /* Arrays come in three flavors: Unspecified bounds, fixed bounds,
16918          and (in GNU C only) variable bounds.  Handle all three forms
16919          here.  */
16920       subrange_die = new_die (DW_TAG_subrange_type, type_die, NULL);
16921       if (domain)
16922         {
16923           /* We have an array type with specified bounds.  */
16924           lower = TYPE_MIN_VALUE (domain);
16925           upper = TYPE_MAX_VALUE (domain);
16926
16927           /* Define the index type.  */
16928           if (TREE_TYPE (domain))
16929             {
16930               /* ??? This is probably an Ada unnamed subrange type.  Ignore the
16931                  TREE_TYPE field.  We can't emit debug info for this
16932                  because it is an unnamed integral type.  */
16933               if (TREE_CODE (domain) == INTEGER_TYPE
16934                   && TYPE_NAME (domain) == NULL_TREE
16935                   && TREE_CODE (TREE_TYPE (domain)) == INTEGER_TYPE
16936                   && TYPE_NAME (TREE_TYPE (domain)) == NULL_TREE)
16937                 ;
16938               else
16939                 add_type_attribute (subrange_die, TREE_TYPE (domain), 0, 0,
16940                                     type_die);
16941             }
16942
16943           /* ??? If upper is NULL, the array has unspecified length,
16944              but it does have a lower bound.  This happens with Fortran
16945                dimension arr(N:*)
16946              Since the debugger is definitely going to need to know N
16947              to produce useful results, go ahead and output the lower
16948              bound solo, and hope the debugger can cope.  */
16949
16950           add_bound_info (subrange_die, DW_AT_lower_bound, lower);
16951           if (upper)
16952             add_bound_info (subrange_die, DW_AT_upper_bound, upper);
16953         }
16954
16955       /* Otherwise we have an array type with an unspecified length.  The
16956          DWARF-2 spec does not say how to handle this; let's just leave out the
16957          bounds.  */
16958     }
16959 }
16960
16961 static void
16962 add_byte_size_attribute (dw_die_ref die, tree tree_node)
16963 {
16964   unsigned size;
16965
16966   switch (TREE_CODE (tree_node))
16967     {
16968     case ERROR_MARK:
16969       size = 0;
16970       break;
16971     case ENUMERAL_TYPE:
16972     case RECORD_TYPE:
16973     case UNION_TYPE:
16974     case QUAL_UNION_TYPE:
16975       size = int_size_in_bytes (tree_node);
16976       break;
16977     case FIELD_DECL:
16978       /* For a data member of a struct or union, the DW_AT_byte_size is
16979          generally given as the number of bytes normally allocated for an
16980          object of the *declared* type of the member itself.  This is true
16981          even for bit-fields.  */
16982       size = simple_type_size_in_bits (field_type (tree_node)) / BITS_PER_UNIT;
16983       break;
16984     default:
16985       gcc_unreachable ();
16986     }
16987
16988   /* Note that `size' might be -1 when we get to this point.  If it is, that
16989      indicates that the byte size of the entity in question is variable.  We
16990      have no good way of expressing this fact in Dwarf at the present time,
16991      so just let the -1 pass on through.  */
16992   add_AT_unsigned (die, DW_AT_byte_size, size);
16993 }
16994
16995 /* For a FIELD_DECL node which represents a bit-field, output an attribute
16996    which specifies the distance in bits from the highest order bit of the
16997    "containing object" for the bit-field to the highest order bit of the
16998    bit-field itself.
16999
17000    For any given bit-field, the "containing object" is a hypothetical object
17001    (of some integral or enum type) within which the given bit-field lives.  The
17002    type of this hypothetical "containing object" is always the same as the
17003    declared type of the individual bit-field itself.  The determination of the
17004    exact location of the "containing object" for a bit-field is rather
17005    complicated.  It's handled by the `field_byte_offset' function (above).
17006
17007    Note that it is the size (in bytes) of the hypothetical "containing object"
17008    which will be given in the DW_AT_byte_size attribute for this bit-field.
17009    (See `byte_size_attribute' above).  */
17010
17011 static inline void
17012 add_bit_offset_attribute (dw_die_ref die, tree decl)
17013 {
17014   HOST_WIDE_INT object_offset_in_bytes = field_byte_offset (decl);
17015   tree type = DECL_BIT_FIELD_TYPE (decl);
17016   HOST_WIDE_INT bitpos_int;
17017   HOST_WIDE_INT highest_order_object_bit_offset;
17018   HOST_WIDE_INT highest_order_field_bit_offset;
17019   HOST_WIDE_INT unsigned bit_offset;
17020
17021   /* Must be a field and a bit field.  */
17022   gcc_assert (type && TREE_CODE (decl) == FIELD_DECL);
17023
17024   /* We can't yet handle bit-fields whose offsets are variable, so if we
17025      encounter such things, just return without generating any attribute
17026      whatsoever.  Likewise for variable or too large size.  */
17027   if (! host_integerp (bit_position (decl), 0)
17028       || ! host_integerp (DECL_SIZE (decl), 1))
17029     return;
17030
17031   bitpos_int = int_bit_position (decl);
17032
17033   /* Note that the bit offset is always the distance (in bits) from the
17034      highest-order bit of the "containing object" to the highest-order bit of
17035      the bit-field itself.  Since the "high-order end" of any object or field
17036      is different on big-endian and little-endian machines, the computation
17037      below must take account of these differences.  */
17038   highest_order_object_bit_offset = object_offset_in_bytes * BITS_PER_UNIT;
17039   highest_order_field_bit_offset = bitpos_int;
17040
17041   if (! BYTES_BIG_ENDIAN)
17042     {
17043       highest_order_field_bit_offset += tree_low_cst (DECL_SIZE (decl), 0);
17044       highest_order_object_bit_offset += simple_type_size_in_bits (type);
17045     }
17046
17047   bit_offset
17048     = (! BYTES_BIG_ENDIAN
17049        ? highest_order_object_bit_offset - highest_order_field_bit_offset
17050        : highest_order_field_bit_offset - highest_order_object_bit_offset);
17051
17052   add_AT_unsigned (die, DW_AT_bit_offset, bit_offset);
17053 }
17054
17055 /* For a FIELD_DECL node which represents a bit field, output an attribute
17056    which specifies the length in bits of the given field.  */
17057
17058 static inline void
17059 add_bit_size_attribute (dw_die_ref die, tree decl)
17060 {
17061   /* Must be a field and a bit field.  */
17062   gcc_assert (TREE_CODE (decl) == FIELD_DECL
17063               && DECL_BIT_FIELD_TYPE (decl));
17064
17065   if (host_integerp (DECL_SIZE (decl), 1))
17066     add_AT_unsigned (die, DW_AT_bit_size, tree_low_cst (DECL_SIZE (decl), 1));
17067 }
17068
17069 /* If the compiled language is ANSI C, then add a 'prototyped'
17070    attribute, if arg types are given for the parameters of a function.  */
17071
17072 static inline void
17073 add_prototyped_attribute (dw_die_ref die, tree func_type)
17074 {
17075   if (get_AT_unsigned (comp_unit_die, DW_AT_language) == DW_LANG_C89
17076       && TYPE_ARG_TYPES (func_type) != NULL)
17077     add_AT_flag (die, DW_AT_prototyped, 1);
17078 }
17079
17080 /* Add an 'abstract_origin' attribute below a given DIE.  The DIE is found
17081    by looking in either the type declaration or object declaration
17082    equate table.  */
17083
17084 static inline dw_die_ref
17085 add_abstract_origin_attribute (dw_die_ref die, tree origin)
17086 {
17087   dw_die_ref origin_die = NULL;
17088
17089   if (TREE_CODE (origin) != FUNCTION_DECL)
17090     {
17091       /* We may have gotten separated from the block for the inlined
17092          function, if we're in an exception handler or some such; make
17093          sure that the abstract function has been written out.
17094
17095          Doing this for nested functions is wrong, however; functions are
17096          distinct units, and our context might not even be inline.  */
17097       tree fn = origin;
17098
17099       if (TYPE_P (fn))
17100         fn = TYPE_STUB_DECL (fn);
17101
17102       fn = decl_function_context (fn);
17103       if (fn)
17104         dwarf2out_abstract_function (fn);
17105     }
17106
17107   if (DECL_P (origin))
17108     origin_die = lookup_decl_die (origin);
17109   else if (TYPE_P (origin))
17110     origin_die = lookup_type_die (origin);
17111
17112   /* XXX: Functions that are never lowered don't always have correct block
17113      trees (in the case of java, they simply have no block tree, in some other
17114      languages).  For these functions, there is nothing we can really do to
17115      output correct debug info for inlined functions in all cases.  Rather
17116      than die, we'll just produce deficient debug info now, in that we will
17117      have variables without a proper abstract origin.  In the future, when all
17118      functions are lowered, we should re-add a gcc_assert (origin_die)
17119      here.  */
17120
17121   if (origin_die)
17122     add_AT_die_ref (die, DW_AT_abstract_origin, origin_die);
17123   return origin_die;
17124 }
17125
17126 /* We do not currently support the pure_virtual attribute.  */
17127
17128 static inline void
17129 add_pure_or_virtual_attribute (dw_die_ref die, tree func_decl)
17130 {
17131   if (DECL_VINDEX (func_decl))
17132     {
17133       add_AT_unsigned (die, DW_AT_virtuality, DW_VIRTUALITY_virtual);
17134
17135       if (host_integerp (DECL_VINDEX (func_decl), 0))
17136         add_AT_loc (die, DW_AT_vtable_elem_location,
17137                     new_loc_descr (DW_OP_constu,
17138                                    tree_low_cst (DECL_VINDEX (func_decl), 0),
17139                                    0));
17140
17141       /* GNU extension: Record what type this method came from originally.  */
17142       if (debug_info_level > DINFO_LEVEL_TERSE
17143           && DECL_CONTEXT (func_decl))
17144         add_AT_die_ref (die, DW_AT_containing_type,
17145                         lookup_type_die (DECL_CONTEXT (func_decl)));
17146     }
17147 }
17148 \f
17149 /* Add source coordinate attributes for the given decl.  */
17150
17151 static void
17152 add_src_coords_attributes (dw_die_ref die, tree decl)
17153 {
17154   expanded_location s = expand_location (DECL_SOURCE_LOCATION (decl));
17155
17156   add_AT_file (die, DW_AT_decl_file, lookup_filename (s.file));
17157   add_AT_unsigned (die, DW_AT_decl_line, s.line);
17158 }
17159
17160 /* Add a DW_AT_name attribute and source coordinate attribute for the
17161    given decl, but only if it actually has a name.  */
17162
17163 static void
17164 add_name_and_src_coords_attributes (dw_die_ref die, tree decl)
17165 {
17166   tree decl_name;
17167
17168   decl_name = DECL_NAME (decl);
17169   if (decl_name != NULL && IDENTIFIER_POINTER (decl_name) != NULL)
17170     {
17171       const char *name = dwarf2_name (decl, 0);
17172       if (name)
17173         add_name_attribute (die, name);
17174       if (! DECL_ARTIFICIAL (decl))
17175         add_src_coords_attributes (die, decl);
17176
17177       if ((TREE_CODE (decl) == FUNCTION_DECL || TREE_CODE (decl) == VAR_DECL)
17178           && TREE_PUBLIC (decl)
17179           && !DECL_ABSTRACT (decl)
17180           && !(TREE_CODE (decl) == VAR_DECL && DECL_REGISTER (decl)))
17181         {
17182           /* Defer until we have an assembler name set.  */
17183           if (!DECL_ASSEMBLER_NAME_SET_P (decl))
17184             {
17185               limbo_die_node *asm_name;
17186
17187               asm_name = GGC_CNEW (limbo_die_node);
17188               asm_name->die = die;
17189               asm_name->created_for = decl;
17190               asm_name->next = deferred_asm_name;
17191               deferred_asm_name = asm_name;
17192             }
17193           else if (DECL_ASSEMBLER_NAME (decl) != DECL_NAME (decl))
17194             add_AT_string (die, AT_linkage_name,
17195                            IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl)));
17196         }
17197     }
17198
17199 #ifdef VMS_DEBUGGING_INFO
17200   /* Get the function's name, as described by its RTL.  This may be different
17201      from the DECL_NAME name used in the source file.  */
17202   if (TREE_CODE (decl) == FUNCTION_DECL && TREE_ASM_WRITTEN (decl))
17203     {
17204       add_AT_addr (die, DW_AT_VMS_rtnbeg_pd_address,
17205                    XEXP (DECL_RTL (decl), 0));
17206       VEC_safe_push (rtx, gc, used_rtx_array, XEXP (DECL_RTL (decl), 0));
17207     }
17208 #endif
17209 }
17210
17211 /* Push a new declaration scope.  */
17212
17213 static void
17214 push_decl_scope (tree scope)
17215 {
17216   VEC_safe_push (tree, gc, decl_scope_table, scope);
17217 }
17218
17219 /* Pop a declaration scope.  */
17220
17221 static inline void
17222 pop_decl_scope (void)
17223 {
17224   VEC_pop (tree, decl_scope_table);
17225 }
17226
17227 /* Return the DIE for the scope that immediately contains this type.
17228    Non-named types get global scope.  Named types nested in other
17229    types get their containing scope if it's open, or global scope
17230    otherwise.  All other types (i.e. function-local named types) get
17231    the current active scope.  */
17232
17233 static dw_die_ref
17234 scope_die_for (tree t, dw_die_ref context_die)
17235 {
17236   dw_die_ref scope_die = NULL;
17237   tree containing_scope;
17238   int i;
17239
17240   /* Non-types always go in the current scope.  */
17241   gcc_assert (TYPE_P (t));
17242
17243   containing_scope = TYPE_CONTEXT (t);
17244
17245   /* Use the containing namespace if it was passed in (for a declaration).  */
17246   if (containing_scope && TREE_CODE (containing_scope) == NAMESPACE_DECL)
17247     {
17248       if (context_die == lookup_decl_die (containing_scope))
17249         /* OK */;
17250       else
17251         containing_scope = NULL_TREE;
17252     }
17253
17254   /* Ignore function type "scopes" from the C frontend.  They mean that
17255      a tagged type is local to a parmlist of a function declarator, but
17256      that isn't useful to DWARF.  */
17257   if (containing_scope && TREE_CODE (containing_scope) == FUNCTION_TYPE)
17258     containing_scope = NULL_TREE;
17259
17260   if (containing_scope == NULL_TREE)
17261     scope_die = comp_unit_die;
17262   else if (TYPE_P (containing_scope))
17263     {
17264       /* For types, we can just look up the appropriate DIE.  But
17265          first we check to see if we're in the middle of emitting it
17266          so we know where the new DIE should go.  */
17267       for (i = VEC_length (tree, decl_scope_table) - 1; i >= 0; --i)
17268         if (VEC_index (tree, decl_scope_table, i) == containing_scope)
17269           break;
17270
17271       if (i < 0)
17272         {
17273           gcc_assert (debug_info_level <= DINFO_LEVEL_TERSE
17274                       || TREE_ASM_WRITTEN (containing_scope));
17275
17276           /* If none of the current dies are suitable, we get file scope.  */
17277           scope_die = comp_unit_die;
17278         }
17279       else
17280         scope_die = lookup_type_die (containing_scope);
17281     }
17282   else
17283     scope_die = context_die;
17284
17285   return scope_die;
17286 }
17287
17288 /* Returns nonzero if CONTEXT_DIE is internal to a function.  */
17289
17290 static inline int
17291 local_scope_p (dw_die_ref context_die)
17292 {
17293   for (; context_die; context_die = context_die->die_parent)
17294     if (context_die->die_tag == DW_TAG_inlined_subroutine
17295         || context_die->die_tag == DW_TAG_subprogram)
17296       return 1;
17297
17298   return 0;
17299 }
17300
17301 /* Returns nonzero if CONTEXT_DIE is a class.  */
17302
17303 static inline int
17304 class_scope_p (dw_die_ref context_die)
17305 {
17306   return (context_die
17307           && (context_die->die_tag == DW_TAG_structure_type
17308               || context_die->die_tag == DW_TAG_class_type
17309               || context_die->die_tag == DW_TAG_interface_type
17310               || context_die->die_tag == DW_TAG_union_type));
17311 }
17312
17313 /* Returns nonzero if CONTEXT_DIE is a class or namespace, for deciding
17314    whether or not to treat a DIE in this context as a declaration.  */
17315
17316 static inline int
17317 class_or_namespace_scope_p (dw_die_ref context_die)
17318 {
17319   return (class_scope_p (context_die)
17320           || (context_die && context_die->die_tag == DW_TAG_namespace));
17321 }
17322
17323 /* Many forms of DIEs require a "type description" attribute.  This
17324    routine locates the proper "type descriptor" die for the type given
17325    by 'type', and adds a DW_AT_type attribute below the given die.  */
17326
17327 static void
17328 add_type_attribute (dw_die_ref object_die, tree type, int decl_const,
17329                     int decl_volatile, dw_die_ref context_die)
17330 {
17331   enum tree_code code  = TREE_CODE (type);
17332   dw_die_ref type_die  = NULL;
17333
17334   /* ??? If this type is an unnamed subrange type of an integral, floating-point
17335      or fixed-point type, use the inner type.  This is because we have no
17336      support for unnamed types in base_type_die.  This can happen if this is
17337      an Ada subrange type.  Correct solution is emit a subrange type die.  */
17338   if ((code == INTEGER_TYPE || code == REAL_TYPE || code == FIXED_POINT_TYPE)
17339       && TREE_TYPE (type) != 0 && TYPE_NAME (type) == 0)
17340     type = TREE_TYPE (type), code = TREE_CODE (type);
17341
17342   if (code == ERROR_MARK
17343       /* Handle a special case.  For functions whose return type is void, we
17344          generate *no* type attribute.  (Note that no object may have type
17345          `void', so this only applies to function return types).  */
17346       || code == VOID_TYPE)
17347     return;
17348
17349   type_die = modified_type_die (type,
17350                                 decl_const || TYPE_READONLY (type),
17351                                 decl_volatile || TYPE_VOLATILE (type),
17352                                 context_die);
17353
17354   if (type_die != NULL)
17355     add_AT_die_ref (object_die, DW_AT_type, type_die);
17356 }
17357
17358 /* Given an object die, add the calling convention attribute for the
17359    function call type.  */
17360 static void
17361 add_calling_convention_attribute (dw_die_ref subr_die, tree decl)
17362 {
17363   enum dwarf_calling_convention value = DW_CC_normal;
17364
17365   value = ((enum dwarf_calling_convention)
17366            targetm.dwarf_calling_convention (TREE_TYPE (decl)));
17367
17368   /* DWARF doesn't provide a way to identify a program's source-level
17369      entry point.  DW_AT_calling_convention attributes are only meant
17370      to describe functions' calling conventions.  However, lacking a
17371      better way to signal the Fortran main program, we use this for the
17372      time being, following existing custom.  */
17373   if (is_fortran ()
17374       && !strcmp (IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl)), "MAIN__"))
17375     value = DW_CC_program;
17376
17377   /* Only add the attribute if the backend requests it, and
17378      is not DW_CC_normal.  */
17379   if (value && (value != DW_CC_normal))
17380     add_AT_unsigned (subr_die, DW_AT_calling_convention, value);
17381 }
17382
17383 /* Given a tree pointer to a struct, class, union, or enum type node, return
17384    a pointer to the (string) tag name for the given type, or zero if the type
17385    was declared without a tag.  */
17386
17387 static const char *
17388 type_tag (const_tree type)
17389 {
17390   const char *name = 0;
17391
17392   if (TYPE_NAME (type) != 0)
17393     {
17394       tree t = 0;
17395
17396       /* Find the IDENTIFIER_NODE for the type name.  */
17397       if (TREE_CODE (TYPE_NAME (type)) == IDENTIFIER_NODE)
17398         t = TYPE_NAME (type);
17399
17400       /* The g++ front end makes the TYPE_NAME of *each* tagged type point to
17401          a TYPE_DECL node, regardless of whether or not a `typedef' was
17402          involved.  */
17403       else if (TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
17404                && ! DECL_IGNORED_P (TYPE_NAME (type)))
17405         {
17406           /* We want to be extra verbose.  Don't call dwarf_name if
17407              DECL_NAME isn't set.  The default hook for decl_printable_name
17408              doesn't like that, and in this context it's correct to return
17409              0, instead of "<anonymous>" or the like.  */
17410           if (DECL_NAME (TYPE_NAME (type)))
17411             name = lang_hooks.dwarf_name (TYPE_NAME (type), 2);
17412         }
17413
17414       /* Now get the name as a string, or invent one.  */
17415       if (!name && t != 0)
17416         name = IDENTIFIER_POINTER (t);
17417     }
17418
17419   return (name == 0 || *name == '\0') ? 0 : name;
17420 }
17421
17422 /* Return the type associated with a data member, make a special check
17423    for bit field types.  */
17424
17425 static inline tree
17426 member_declared_type (const_tree member)
17427 {
17428   return (DECL_BIT_FIELD_TYPE (member)
17429           ? DECL_BIT_FIELD_TYPE (member) : TREE_TYPE (member));
17430 }
17431
17432 /* Get the decl's label, as described by its RTL. This may be different
17433    from the DECL_NAME name used in the source file.  */
17434
17435 #if 0
17436 static const char *
17437 decl_start_label (tree decl)
17438 {
17439   rtx x;
17440   const char *fnname;
17441
17442   x = DECL_RTL (decl);
17443   gcc_assert (MEM_P (x));
17444
17445   x = XEXP (x, 0);
17446   gcc_assert (GET_CODE (x) == SYMBOL_REF);
17447
17448   fnname = XSTR (x, 0);
17449   return fnname;
17450 }
17451 #endif
17452 \f
17453 /* These routines generate the internal representation of the DIE's for
17454    the compilation unit.  Debugging information is collected by walking
17455    the declaration trees passed in from dwarf2out_decl().  */
17456
17457 static void
17458 gen_array_type_die (tree type, dw_die_ref context_die)
17459 {
17460   dw_die_ref scope_die = scope_die_for (type, context_die);
17461   dw_die_ref array_die;
17462
17463   /* GNU compilers represent multidimensional array types as sequences of one
17464      dimensional array types whose element types are themselves array types.
17465      We sometimes squish that down to a single array_type DIE with multiple
17466      subscripts in the Dwarf debugging info.  The draft Dwarf specification
17467      say that we are allowed to do this kind of compression in C, because
17468      there is no difference between an array of arrays and a multidimensional
17469      array.  We don't do this for Ada to remain as close as possible to the
17470      actual representation, which is especially important against the language
17471      flexibilty wrt arrays of variable size.  */
17472
17473   bool collapse_nested_arrays = !is_ada ();
17474   tree element_type;
17475
17476   /* Emit DW_TAG_string_type for Fortran character types (with kind 1 only, as
17477      DW_TAG_string_type doesn't have DW_AT_type attribute).  */
17478   if (TYPE_STRING_FLAG (type)
17479       && TREE_CODE (type) == ARRAY_TYPE
17480       && is_fortran ()
17481       && TYPE_MODE (TREE_TYPE (type)) == TYPE_MODE (char_type_node))
17482     {
17483       HOST_WIDE_INT size;
17484
17485       array_die = new_die (DW_TAG_string_type, scope_die, type);
17486       add_name_attribute (array_die, type_tag (type));
17487       equate_type_number_to_die (type, array_die);
17488       size = int_size_in_bytes (type);
17489       if (size >= 0)
17490         add_AT_unsigned (array_die, DW_AT_byte_size, size);
17491       else if (TYPE_DOMAIN (type) != NULL_TREE
17492                && TYPE_MAX_VALUE (TYPE_DOMAIN (type)) != NULL_TREE
17493                && DECL_P (TYPE_MAX_VALUE (TYPE_DOMAIN (type))))
17494         {
17495           tree szdecl = TYPE_MAX_VALUE (TYPE_DOMAIN (type));
17496           dw_loc_list_ref loc = loc_list_from_tree (szdecl, 2);
17497
17498           size = int_size_in_bytes (TREE_TYPE (szdecl));
17499           if (loc && size > 0)
17500             {
17501               add_AT_location_description (array_die, DW_AT_string_length, loc);
17502               if (size != DWARF2_ADDR_SIZE)
17503                 add_AT_unsigned (array_die, DW_AT_byte_size, size);
17504             }
17505         }
17506       return;
17507     }
17508
17509   /* ??? The SGI dwarf reader fails for array of array of enum types
17510      (e.g. const enum machine_mode insn_operand_mode[2][10]) unless the inner
17511      array type comes before the outer array type.  We thus call gen_type_die
17512      before we new_die and must prevent nested array types collapsing for this
17513      target.  */
17514
17515 #ifdef MIPS_DEBUGGING_INFO
17516   gen_type_die (TREE_TYPE (type), context_die);
17517   collapse_nested_arrays = false;
17518 #endif
17519
17520   array_die = new_die (DW_TAG_array_type, scope_die, type);
17521   add_name_attribute (array_die, type_tag (type));
17522   equate_type_number_to_die (type, array_die);
17523
17524   if (TREE_CODE (type) == VECTOR_TYPE)
17525     {
17526       /* The frontend feeds us a representation for the vector as a struct
17527          containing an array.  Pull out the array type.  */
17528       type = TREE_TYPE (TYPE_FIELDS (TYPE_DEBUG_REPRESENTATION_TYPE (type)));
17529       add_AT_flag (array_die, DW_AT_GNU_vector, 1);
17530     }
17531
17532   /* For Fortran multidimensional arrays use DW_ORD_col_major ordering.  */
17533   if (is_fortran ()
17534       && TREE_CODE (type) == ARRAY_TYPE
17535       && TREE_CODE (TREE_TYPE (type)) == ARRAY_TYPE
17536       && !TYPE_STRING_FLAG (TREE_TYPE (type)))
17537     add_AT_unsigned (array_die, DW_AT_ordering, DW_ORD_col_major);
17538
17539 #if 0
17540   /* We default the array ordering.  SDB will probably do
17541      the right things even if DW_AT_ordering is not present.  It's not even
17542      an issue until we start to get into multidimensional arrays anyway.  If
17543      SDB is ever caught doing the Wrong Thing for multi-dimensional arrays,
17544      then we'll have to put the DW_AT_ordering attribute back in.  (But if
17545      and when we find out that we need to put these in, we will only do so
17546      for multidimensional arrays.  */
17547   add_AT_unsigned (array_die, DW_AT_ordering, DW_ORD_row_major);
17548 #endif
17549
17550 #ifdef MIPS_DEBUGGING_INFO
17551   /* The SGI compilers handle arrays of unknown bound by setting
17552      AT_declaration and not emitting any subrange DIEs.  */
17553   if (! TYPE_DOMAIN (type))
17554     add_AT_flag (array_die, DW_AT_declaration, 1);
17555   else
17556 #endif
17557     add_subscript_info (array_die, type, collapse_nested_arrays);
17558
17559   /* Add representation of the type of the elements of this array type and
17560      emit the corresponding DIE if we haven't done it already.  */
17561   element_type = TREE_TYPE (type);
17562   if (collapse_nested_arrays)
17563     while (TREE_CODE (element_type) == ARRAY_TYPE)
17564       {
17565         if (TYPE_STRING_FLAG (element_type) && is_fortran ())
17566           break;
17567         element_type = TREE_TYPE (element_type);
17568       }
17569
17570 #ifndef MIPS_DEBUGGING_INFO
17571   gen_type_die (element_type, context_die);
17572 #endif
17573
17574   add_type_attribute (array_die, element_type, 0, 0, context_die);
17575
17576   if (get_AT (array_die, DW_AT_name))
17577     add_pubtype (type, array_die);
17578 }
17579
17580 static dw_loc_descr_ref
17581 descr_info_loc (tree val, tree base_decl)
17582 {
17583   HOST_WIDE_INT size;
17584   dw_loc_descr_ref loc, loc2;
17585   enum dwarf_location_atom op;
17586
17587   if (val == base_decl)
17588     return new_loc_descr (DW_OP_push_object_address, 0, 0);
17589
17590   switch (TREE_CODE (val))
17591     {
17592     CASE_CONVERT:
17593       return descr_info_loc (TREE_OPERAND (val, 0), base_decl);
17594     case VAR_DECL:
17595       return loc_descriptor_from_tree (val, 0);
17596     case INTEGER_CST:
17597       if (host_integerp (val, 0))
17598         return int_loc_descriptor (tree_low_cst (val, 0));
17599       break;
17600     case INDIRECT_REF:
17601       size = int_size_in_bytes (TREE_TYPE (val));
17602       if (size < 0)
17603         break;
17604       loc = descr_info_loc (TREE_OPERAND (val, 0), base_decl);
17605       if (!loc)
17606         break;
17607       if (size == DWARF2_ADDR_SIZE)
17608         add_loc_descr (&loc, new_loc_descr (DW_OP_deref, 0, 0));
17609       else
17610         add_loc_descr (&loc, new_loc_descr (DW_OP_deref_size, size, 0));
17611       return loc;
17612     case POINTER_PLUS_EXPR:
17613     case PLUS_EXPR:
17614       if (host_integerp (TREE_OPERAND (val, 1), 1)
17615           && (unsigned HOST_WIDE_INT) tree_low_cst (TREE_OPERAND (val, 1), 1)
17616              < 16384)
17617         {
17618           loc = descr_info_loc (TREE_OPERAND (val, 0), base_decl);
17619           if (!loc)
17620             break;
17621           loc_descr_plus_const (&loc, tree_low_cst (TREE_OPERAND (val, 1), 0));
17622         }
17623       else
17624         {
17625           op = DW_OP_plus;
17626         do_binop:
17627           loc = descr_info_loc (TREE_OPERAND (val, 0), base_decl);
17628           if (!loc)
17629             break;
17630           loc2 = descr_info_loc (TREE_OPERAND (val, 1), base_decl);
17631           if (!loc2)
17632             break;
17633           add_loc_descr (&loc, loc2);
17634           add_loc_descr (&loc2, new_loc_descr (op, 0, 0));
17635         }
17636       return loc;
17637     case MINUS_EXPR:
17638       op = DW_OP_minus;
17639       goto do_binop;
17640     case MULT_EXPR:
17641       op = DW_OP_mul;
17642       goto do_binop;
17643     case EQ_EXPR:
17644       op = DW_OP_eq;
17645       goto do_binop;
17646     case NE_EXPR:
17647       op = DW_OP_ne;
17648       goto do_binop;
17649     default:
17650       break;
17651     }
17652   return NULL;
17653 }
17654
17655 static void
17656 add_descr_info_field (dw_die_ref die, enum dwarf_attribute attr,
17657                       tree val, tree base_decl)
17658 {
17659   dw_loc_descr_ref loc;
17660
17661   if (host_integerp (val, 0))
17662     {
17663       add_AT_unsigned (die, attr, tree_low_cst (val, 0));
17664       return;
17665     }
17666
17667   loc = descr_info_loc (val, base_decl);
17668   if (!loc)
17669     return;
17670
17671   add_AT_loc (die, attr, loc);
17672 }
17673
17674 /* This routine generates DIE for array with hidden descriptor, details
17675    are filled into *info by a langhook.  */
17676
17677 static void
17678 gen_descr_array_type_die (tree type, struct array_descr_info *info,
17679                           dw_die_ref context_die)
17680 {
17681   dw_die_ref scope_die = scope_die_for (type, context_die);
17682   dw_die_ref array_die;
17683   int dim;
17684
17685   array_die = new_die (DW_TAG_array_type, scope_die, type);
17686   add_name_attribute (array_die, type_tag (type));
17687   equate_type_number_to_die (type, array_die);
17688
17689   /* For Fortran multidimensional arrays use DW_ORD_col_major ordering.  */
17690   if (is_fortran ()
17691       && info->ndimensions >= 2)
17692     add_AT_unsigned (array_die, DW_AT_ordering, DW_ORD_col_major);
17693
17694   if (info->data_location)
17695     add_descr_info_field (array_die, DW_AT_data_location, info->data_location,
17696                           info->base_decl);
17697   if (info->associated)
17698     add_descr_info_field (array_die, DW_AT_associated, info->associated,
17699                           info->base_decl);
17700   if (info->allocated)
17701     add_descr_info_field (array_die, DW_AT_allocated, info->allocated,
17702                           info->base_decl);
17703
17704   for (dim = 0; dim < info->ndimensions; dim++)
17705     {
17706       dw_die_ref subrange_die
17707         = new_die (DW_TAG_subrange_type, array_die, NULL);
17708
17709       if (info->dimen[dim].lower_bound)
17710         {
17711           /* If it is the default value, omit it.  */
17712           int dflt;
17713
17714           if (host_integerp (info->dimen[dim].lower_bound, 0)
17715               && (dflt = lower_bound_default ()) != -1
17716               && tree_low_cst (info->dimen[dim].lower_bound, 0) == dflt)
17717             ;
17718           else
17719             add_descr_info_field (subrange_die, DW_AT_lower_bound,
17720                                   info->dimen[dim].lower_bound,
17721                                   info->base_decl);
17722         }
17723       if (info->dimen[dim].upper_bound)
17724         add_descr_info_field (subrange_die, DW_AT_upper_bound,
17725                               info->dimen[dim].upper_bound,
17726                               info->base_decl);
17727       if (info->dimen[dim].stride)
17728         add_descr_info_field (subrange_die, DW_AT_byte_stride,
17729                               info->dimen[dim].stride,
17730                               info->base_decl);
17731     }
17732
17733   gen_type_die (info->element_type, context_die);
17734   add_type_attribute (array_die, info->element_type, 0, 0, context_die);
17735
17736   if (get_AT (array_die, DW_AT_name))
17737     add_pubtype (type, array_die);
17738 }
17739
17740 #if 0
17741 static void
17742 gen_entry_point_die (tree decl, dw_die_ref context_die)
17743 {
17744   tree origin = decl_ultimate_origin (decl);
17745   dw_die_ref decl_die = new_die (DW_TAG_entry_point, context_die, decl);
17746
17747   if (origin != NULL)
17748     add_abstract_origin_attribute (decl_die, origin);
17749   else
17750     {
17751       add_name_and_src_coords_attributes (decl_die, decl);
17752       add_type_attribute (decl_die, TREE_TYPE (TREE_TYPE (decl)),
17753                           0, 0, context_die);
17754     }
17755
17756   if (DECL_ABSTRACT (decl))
17757     equate_decl_number_to_die (decl, decl_die);
17758   else
17759     add_AT_lbl_id (decl_die, DW_AT_low_pc, decl_start_label (decl));
17760 }
17761 #endif
17762
17763 /* Walk through the list of incomplete types again, trying once more to
17764    emit full debugging info for them.  */
17765
17766 static void
17767 retry_incomplete_types (void)
17768 {
17769   int i;
17770
17771   for (i = VEC_length (tree, incomplete_types) - 1; i >= 0; i--)
17772     if (should_emit_struct_debug (VEC_index (tree, incomplete_types, i),
17773                                   DINFO_USAGE_DIR_USE))
17774       gen_type_die (VEC_index (tree, incomplete_types, i), comp_unit_die);
17775 }
17776
17777 /* Determine what tag to use for a record type.  */
17778
17779 static enum dwarf_tag
17780 record_type_tag (tree type)
17781 {
17782   if (! lang_hooks.types.classify_record)
17783     return DW_TAG_structure_type;
17784
17785   switch (lang_hooks.types.classify_record (type))
17786     {
17787     case RECORD_IS_STRUCT:
17788       return DW_TAG_structure_type;
17789
17790     case RECORD_IS_CLASS:
17791       return DW_TAG_class_type;
17792
17793     case RECORD_IS_INTERFACE:
17794       if (dwarf_version >= 3 || !dwarf_strict)
17795         return DW_TAG_interface_type;
17796       return DW_TAG_structure_type;
17797
17798     default:
17799       gcc_unreachable ();
17800     }
17801 }
17802
17803 /* Generate a DIE to represent an enumeration type.  Note that these DIEs
17804    include all of the information about the enumeration values also. Each
17805    enumerated type name/value is listed as a child of the enumerated type
17806    DIE.  */
17807
17808 static dw_die_ref
17809 gen_enumeration_type_die (tree type, dw_die_ref context_die)
17810 {
17811   dw_die_ref type_die = lookup_type_die (type);
17812
17813   if (type_die == NULL)
17814     {
17815       type_die = new_die (DW_TAG_enumeration_type,
17816                           scope_die_for (type, context_die), type);
17817       equate_type_number_to_die (type, type_die);
17818       add_name_attribute (type_die, type_tag (type));
17819       if ((dwarf_version >= 4 || !dwarf_strict)
17820           && ENUM_IS_SCOPED (type))
17821         add_AT_flag (type_die, DW_AT_enum_class, 1);
17822     }
17823   else if (! TYPE_SIZE (type))
17824     return type_die;
17825   else
17826     remove_AT (type_die, DW_AT_declaration);
17827
17828   /* Handle a GNU C/C++ extension, i.e. incomplete enum types.  If the
17829      given enum type is incomplete, do not generate the DW_AT_byte_size
17830      attribute or the DW_AT_element_list attribute.  */
17831   if (TYPE_SIZE (type))
17832     {
17833       tree link;
17834
17835       TREE_ASM_WRITTEN (type) = 1;
17836       add_byte_size_attribute (type_die, type);
17837       if (TYPE_STUB_DECL (type) != NULL_TREE)
17838         add_src_coords_attributes (type_die, TYPE_STUB_DECL (type));
17839
17840       /* If the first reference to this type was as the return type of an
17841          inline function, then it may not have a parent.  Fix this now.  */
17842       if (type_die->die_parent == NULL)
17843         add_child_die (scope_die_for (type, context_die), type_die);
17844
17845       for (link = TYPE_VALUES (type);
17846            link != NULL; link = TREE_CHAIN (link))
17847         {
17848           dw_die_ref enum_die = new_die (DW_TAG_enumerator, type_die, link);
17849           tree value = TREE_VALUE (link);
17850
17851           add_name_attribute (enum_die,
17852                               IDENTIFIER_POINTER (TREE_PURPOSE (link)));
17853
17854           if (TREE_CODE (value) == CONST_DECL)
17855             value = DECL_INITIAL (value);
17856
17857           if (host_integerp (value, TYPE_UNSIGNED (TREE_TYPE (value))))
17858             /* DWARF2 does not provide a way of indicating whether or
17859                not enumeration constants are signed or unsigned.  GDB
17860                always assumes the values are signed, so we output all
17861                values as if they were signed.  That means that
17862                enumeration constants with very large unsigned values
17863                will appear to have negative values in the debugger.  */
17864             add_AT_int (enum_die, DW_AT_const_value,
17865                         tree_low_cst (value, tree_int_cst_sgn (value) > 0));
17866         }
17867     }
17868   else
17869     add_AT_flag (type_die, DW_AT_declaration, 1);
17870
17871   if (get_AT (type_die, DW_AT_name))
17872     add_pubtype (type, type_die);
17873
17874   return type_die;
17875 }
17876
17877 /* Generate a DIE to represent either a real live formal parameter decl or to
17878    represent just the type of some formal parameter position in some function
17879    type.
17880
17881    Note that this routine is a bit unusual because its argument may be a
17882    ..._DECL node (i.e. either a PARM_DECL or perhaps a VAR_DECL which
17883    represents an inlining of some PARM_DECL) or else some sort of a ..._TYPE
17884    node.  If it's the former then this function is being called to output a
17885    DIE to represent a formal parameter object (or some inlining thereof).  If
17886    it's the latter, then this function is only being called to output a
17887    DW_TAG_formal_parameter DIE to stand as a placeholder for some formal
17888    argument type of some subprogram type.
17889    If EMIT_NAME_P is true, name and source coordinate attributes
17890    are emitted.  */
17891
17892 static dw_die_ref
17893 gen_formal_parameter_die (tree node, tree origin, bool emit_name_p,
17894                           dw_die_ref context_die)
17895 {
17896   tree node_or_origin = node ? node : origin;
17897   tree ultimate_origin;
17898   dw_die_ref parm_die
17899     = new_die (DW_TAG_formal_parameter, context_die, node);
17900
17901   switch (TREE_CODE_CLASS (TREE_CODE (node_or_origin)))
17902     {
17903     case tcc_declaration:
17904       ultimate_origin = decl_ultimate_origin (node_or_origin);
17905       if (node || ultimate_origin)
17906         origin = ultimate_origin;
17907       if (origin != NULL)
17908         add_abstract_origin_attribute (parm_die, origin);
17909       else
17910         {
17911           tree type = TREE_TYPE (node);
17912           if (emit_name_p)
17913             add_name_and_src_coords_attributes (parm_die, node);
17914           if (decl_by_reference_p (node))
17915             add_type_attribute (parm_die, TREE_TYPE (type), 0, 0,
17916                                 context_die);
17917           else
17918             add_type_attribute (parm_die, type,
17919                                 TREE_READONLY (node),
17920                                 TREE_THIS_VOLATILE (node),
17921                                 context_die);
17922           if (DECL_ARTIFICIAL (node))
17923             add_AT_flag (parm_die, DW_AT_artificial, 1);
17924         }
17925
17926       if (node && node != origin)
17927         equate_decl_number_to_die (node, parm_die);
17928       if (! DECL_ABSTRACT (node_or_origin))
17929         add_location_or_const_value_attribute (parm_die, node_or_origin,
17930                                                DW_AT_location);
17931
17932       break;
17933
17934     case tcc_type:
17935       /* We were called with some kind of a ..._TYPE node.  */
17936       add_type_attribute (parm_die, node_or_origin, 0, 0, context_die);
17937       break;
17938
17939     default:
17940       gcc_unreachable ();
17941     }
17942
17943   return parm_die;
17944 }
17945
17946 /* Generate and return a DW_TAG_GNU_formal_parameter_pack. Also generate
17947    children DW_TAG_formal_parameter DIEs representing the arguments of the
17948    parameter pack.
17949
17950    PARM_PACK must be a function parameter pack.
17951    PACK_ARG is the first argument of the parameter pack. Its TREE_CHAIN
17952    must point to the subsequent arguments of the function PACK_ARG belongs to.
17953    SUBR_DIE is the DIE of the function PACK_ARG belongs to.
17954    If NEXT_ARG is non NULL, *NEXT_ARG is set to the function argument
17955    following the last one for which a DIE was generated.  */
17956
17957 static dw_die_ref
17958 gen_formal_parameter_pack_die  (tree parm_pack,
17959                                 tree pack_arg,
17960                                 dw_die_ref subr_die,
17961                                 tree *next_arg)
17962 {
17963   tree arg;
17964   dw_die_ref parm_pack_die;
17965
17966   gcc_assert (parm_pack
17967               && lang_hooks.function_parameter_pack_p (parm_pack)
17968               && subr_die);
17969
17970   parm_pack_die = new_die (DW_TAG_GNU_formal_parameter_pack, subr_die, parm_pack);
17971   add_src_coords_attributes (parm_pack_die, parm_pack);
17972
17973   for (arg = pack_arg; arg; arg = TREE_CHAIN (arg))
17974     {
17975       if (! lang_hooks.decls.function_parm_expanded_from_pack_p (arg,
17976                                                                  parm_pack))
17977         break;
17978       gen_formal_parameter_die (arg, NULL,
17979                                 false /* Don't emit name attribute.  */,
17980                                 parm_pack_die);
17981     }
17982   if (next_arg)
17983     *next_arg = arg;
17984   return parm_pack_die;
17985 }
17986
17987 /* Generate a special type of DIE used as a stand-in for a trailing ellipsis
17988    at the end of an (ANSI prototyped) formal parameters list.  */
17989
17990 static void
17991 gen_unspecified_parameters_die (tree decl_or_type, dw_die_ref context_die)
17992 {
17993   new_die (DW_TAG_unspecified_parameters, context_die, decl_or_type);
17994 }
17995
17996 /* Generate a list of nameless DW_TAG_formal_parameter DIEs (and perhaps a
17997    DW_TAG_unspecified_parameters DIE) to represent the types of the formal
17998    parameters as specified in some function type specification (except for
17999    those which appear as part of a function *definition*).  */
18000
18001 static void
18002 gen_formal_types_die (tree function_or_method_type, dw_die_ref context_die)
18003 {
18004   tree link;
18005   tree formal_type = NULL;
18006   tree first_parm_type;
18007   tree arg;
18008
18009   if (TREE_CODE (function_or_method_type) == FUNCTION_DECL)
18010     {
18011       arg = DECL_ARGUMENTS (function_or_method_type);
18012       function_or_method_type = TREE_TYPE (function_or_method_type);
18013     }
18014   else
18015     arg = NULL_TREE;
18016
18017   first_parm_type = TYPE_ARG_TYPES (function_or_method_type);
18018
18019   /* Make our first pass over the list of formal parameter types and output a
18020      DW_TAG_formal_parameter DIE for each one.  */
18021   for (link = first_parm_type; link; )
18022     {
18023       dw_die_ref parm_die;
18024
18025       formal_type = TREE_VALUE (link);
18026       if (formal_type == void_type_node)
18027         break;
18028
18029       /* Output a (nameless) DIE to represent the formal parameter itself.  */
18030       parm_die = gen_formal_parameter_die (formal_type, NULL,
18031                                            true /* Emit name attribute.  */,
18032                                            context_die);
18033       if ((TREE_CODE (function_or_method_type) == METHOD_TYPE
18034            && link == first_parm_type)
18035           || (arg && DECL_ARTIFICIAL (arg)))
18036         add_AT_flag (parm_die, DW_AT_artificial, 1);
18037
18038       link = TREE_CHAIN (link);
18039       if (arg)
18040         arg = TREE_CHAIN (arg);
18041     }
18042
18043   /* If this function type has an ellipsis, add a
18044      DW_TAG_unspecified_parameters DIE to the end of the parameter list.  */
18045   if (formal_type != void_type_node)
18046     gen_unspecified_parameters_die (function_or_method_type, context_die);
18047
18048   /* Make our second (and final) pass over the list of formal parameter types
18049      and output DIEs to represent those types (as necessary).  */
18050   for (link = TYPE_ARG_TYPES (function_or_method_type);
18051        link && TREE_VALUE (link);
18052        link = TREE_CHAIN (link))
18053     gen_type_die (TREE_VALUE (link), context_die);
18054 }
18055
18056 /* We want to generate the DIE for TYPE so that we can generate the
18057    die for MEMBER, which has been defined; we will need to refer back
18058    to the member declaration nested within TYPE.  If we're trying to
18059    generate minimal debug info for TYPE, processing TYPE won't do the
18060    trick; we need to attach the member declaration by hand.  */
18061
18062 static void
18063 gen_type_die_for_member (tree type, tree member, dw_die_ref context_die)
18064 {
18065   gen_type_die (type, context_die);
18066
18067   /* If we're trying to avoid duplicate debug info, we may not have
18068      emitted the member decl for this function.  Emit it now.  */
18069   if (TYPE_STUB_DECL (type)
18070       && TYPE_DECL_SUPPRESS_DEBUG (TYPE_STUB_DECL (type))
18071       && ! lookup_decl_die (member))
18072     {
18073       dw_die_ref type_die;
18074       gcc_assert (!decl_ultimate_origin (member));
18075
18076       push_decl_scope (type);
18077       type_die = lookup_type_die (type);
18078       if (TREE_CODE (member) == FUNCTION_DECL)
18079         gen_subprogram_die (member, type_die);
18080       else if (TREE_CODE (member) == FIELD_DECL)
18081         {
18082           /* Ignore the nameless fields that are used to skip bits but handle
18083              C++ anonymous unions and structs.  */
18084           if (DECL_NAME (member) != NULL_TREE
18085               || TREE_CODE (TREE_TYPE (member)) == UNION_TYPE
18086               || TREE_CODE (TREE_TYPE (member)) == RECORD_TYPE)
18087             {
18088               gen_type_die (member_declared_type (member), type_die);
18089               gen_field_die (member, type_die);
18090             }
18091         }
18092       else
18093         gen_variable_die (member, NULL_TREE, type_die);
18094
18095       pop_decl_scope ();
18096     }
18097 }
18098
18099 /* Generate the DWARF2 info for the "abstract" instance of a function which we
18100    may later generate inlined and/or out-of-line instances of.  */
18101
18102 static void
18103 dwarf2out_abstract_function (tree decl)
18104 {
18105   dw_die_ref old_die;
18106   tree save_fn;
18107   tree context;
18108   int was_abstract;
18109   htab_t old_decl_loc_table;
18110
18111   /* Make sure we have the actual abstract inline, not a clone.  */
18112   decl = DECL_ORIGIN (decl);
18113
18114   old_die = lookup_decl_die (decl);
18115   if (old_die && get_AT (old_die, DW_AT_inline))
18116     /* We've already generated the abstract instance.  */
18117     return;
18118
18119   /* We can be called while recursively when seeing block defining inlined subroutine
18120      DIE.  Be sure to not clobber the outer location table nor use it or we would
18121      get locations in abstract instantces.  */
18122   old_decl_loc_table = decl_loc_table;
18123   decl_loc_table = NULL;
18124
18125   /* Be sure we've emitted the in-class declaration DIE (if any) first, so
18126      we don't get confused by DECL_ABSTRACT.  */
18127   if (debug_info_level > DINFO_LEVEL_TERSE)
18128     {
18129       context = decl_class_context (decl);
18130       if (context)
18131         gen_type_die_for_member
18132           (context, decl, decl_function_context (decl) ? NULL : comp_unit_die);
18133     }
18134
18135   /* Pretend we've just finished compiling this function.  */
18136   save_fn = current_function_decl;
18137   current_function_decl = decl;
18138   push_cfun (DECL_STRUCT_FUNCTION (decl));
18139
18140   was_abstract = DECL_ABSTRACT (decl);
18141   set_decl_abstract_flags (decl, 1);
18142   dwarf2out_decl (decl);
18143   if (! was_abstract)
18144     set_decl_abstract_flags (decl, 0);
18145
18146   current_function_decl = save_fn;
18147   decl_loc_table = old_decl_loc_table;
18148   pop_cfun ();
18149 }
18150
18151 /* Helper function of premark_used_types() which gets called through
18152    htab_traverse.
18153
18154    Marks the DIE of a given type in *SLOT as perennial, so it never gets
18155    marked as unused by prune_unused_types.  */
18156
18157 static int
18158 premark_used_types_helper (void **slot, void *data ATTRIBUTE_UNUSED)
18159 {
18160   tree type;
18161   dw_die_ref die;
18162
18163   type = (tree) *slot;
18164   die = lookup_type_die (type);
18165   if (die != NULL)
18166     die->die_perennial_p = 1;
18167   return 1;
18168 }
18169
18170 /* Helper function of premark_types_used_by_global_vars which gets called
18171    through htab_traverse.
18172
18173    Marks the DIE of a given type in *SLOT as perennial, so it never gets
18174    marked as unused by prune_unused_types. The DIE of the type is marked
18175    only if the global variable using the type will actually be emitted.  */
18176
18177 static int
18178 premark_types_used_by_global_vars_helper (void **slot,
18179                                           void *data ATTRIBUTE_UNUSED)
18180 {
18181   struct types_used_by_vars_entry *entry;
18182   dw_die_ref die;
18183
18184   entry = (struct types_used_by_vars_entry *) *slot;
18185   gcc_assert (entry->type != NULL
18186               && entry->var_decl != NULL);
18187   die = lookup_type_die (entry->type);
18188   if (die)
18189     {
18190       /* Ask cgraph if the global variable really is to be emitted.
18191          If yes, then we'll keep the DIE of ENTRY->TYPE.  */
18192       struct varpool_node *node = varpool_node (entry->var_decl);
18193       if (node->needed)
18194         {
18195           die->die_perennial_p = 1;
18196           /* Keep the parent DIEs as well.  */
18197           while ((die = die->die_parent) && die->die_perennial_p == 0)
18198             die->die_perennial_p = 1;
18199         }
18200     }
18201   return 1;
18202 }
18203
18204 /* Mark all members of used_types_hash as perennial.  */
18205
18206 static void
18207 premark_used_types (void)
18208 {
18209   if (cfun && cfun->used_types_hash)
18210     htab_traverse (cfun->used_types_hash, premark_used_types_helper, NULL);
18211 }
18212
18213 /* Mark all members of types_used_by_vars_entry as perennial.  */
18214
18215 static void
18216 premark_types_used_by_global_vars (void)
18217 {
18218   if (types_used_by_vars_hash)
18219     htab_traverse (types_used_by_vars_hash,
18220                    premark_types_used_by_global_vars_helper, NULL);
18221 }
18222
18223 /* Generate a DIE to represent a declared function (either file-scope or
18224    block-local).  */
18225
18226 static void
18227 gen_subprogram_die (tree decl, dw_die_ref context_die)
18228 {
18229   char label_id[MAX_ARTIFICIAL_LABEL_BYTES];
18230   tree origin = decl_ultimate_origin (decl);
18231   dw_die_ref subr_die;
18232   tree fn_arg_types;
18233   tree outer_scope;
18234   dw_die_ref old_die = lookup_decl_die (decl);
18235   int declaration = (current_function_decl != decl
18236                      || class_or_namespace_scope_p (context_die));
18237
18238   premark_used_types ();
18239
18240   /* It is possible to have both DECL_ABSTRACT and DECLARATION be true if we
18241      started to generate the abstract instance of an inline, decided to output
18242      its containing class, and proceeded to emit the declaration of the inline
18243      from the member list for the class.  If so, DECLARATION takes priority;
18244      we'll get back to the abstract instance when done with the class.  */
18245
18246   /* The class-scope declaration DIE must be the primary DIE.  */
18247   if (origin && declaration && class_or_namespace_scope_p (context_die))
18248     {
18249       origin = NULL;
18250       gcc_assert (!old_die);
18251     }
18252
18253   /* Now that the C++ front end lazily declares artificial member fns, we
18254      might need to retrofit the declaration into its class.  */
18255   if (!declaration && !origin && !old_die
18256       && DECL_CONTEXT (decl) && TYPE_P (DECL_CONTEXT (decl))
18257       && !class_or_namespace_scope_p (context_die)
18258       && debug_info_level > DINFO_LEVEL_TERSE)
18259     old_die = force_decl_die (decl);
18260
18261   if (origin != NULL)
18262     {
18263       gcc_assert (!declaration || local_scope_p (context_die));
18264
18265       /* Fixup die_parent for the abstract instance of a nested
18266          inline function.  */
18267       if (old_die && old_die->die_parent == NULL)
18268         add_child_die (context_die, old_die);
18269
18270       subr_die = new_die (DW_TAG_subprogram, context_die, decl);
18271       add_abstract_origin_attribute (subr_die, origin);
18272     }
18273   else if (old_die)
18274     {
18275       expanded_location s = expand_location (DECL_SOURCE_LOCATION (decl));
18276       struct dwarf_file_data * file_index = lookup_filename (s.file);
18277
18278       if (!get_AT_flag (old_die, DW_AT_declaration)
18279           /* We can have a normal definition following an inline one in the
18280              case of redefinition of GNU C extern inlines.
18281              It seems reasonable to use AT_specification in this case.  */
18282           && !get_AT (old_die, DW_AT_inline))
18283         {
18284           /* Detect and ignore this case, where we are trying to output
18285              something we have already output.  */
18286           return;
18287         }
18288
18289       /* If the definition comes from the same place as the declaration,
18290          maybe use the old DIE.  We always want the DIE for this function
18291          that has the *_pc attributes to be under comp_unit_die so the
18292          debugger can find it.  We also need to do this for abstract
18293          instances of inlines, since the spec requires the out-of-line copy
18294          to have the same parent.  For local class methods, this doesn't
18295          apply; we just use the old DIE.  */
18296       if ((old_die->die_parent == comp_unit_die || context_die == NULL)
18297           && (DECL_ARTIFICIAL (decl)
18298               || (get_AT_file (old_die, DW_AT_decl_file) == file_index
18299                   && (get_AT_unsigned (old_die, DW_AT_decl_line)
18300                       == (unsigned) s.line))))
18301         {
18302           subr_die = old_die;
18303
18304           /* Clear out the declaration attribute and the formal parameters.
18305              Do not remove all children, because it is possible that this
18306              declaration die was forced using force_decl_die(). In such
18307              cases die that forced declaration die (e.g. TAG_imported_module)
18308              is one of the children that we do not want to remove.  */
18309           remove_AT (subr_die, DW_AT_declaration);
18310           remove_child_TAG (subr_die, DW_TAG_formal_parameter);
18311         }
18312       else
18313         {
18314           subr_die = new_die (DW_TAG_subprogram, context_die, decl);
18315           add_AT_specification (subr_die, old_die);
18316           if (get_AT_file (old_die, DW_AT_decl_file) != file_index)
18317             add_AT_file (subr_die, DW_AT_decl_file, file_index);
18318           if (get_AT_unsigned (old_die, DW_AT_decl_line) != (unsigned) s.line)
18319             add_AT_unsigned (subr_die, DW_AT_decl_line, s.line);
18320         }
18321     }
18322   else
18323     {
18324       subr_die = new_die (DW_TAG_subprogram, context_die, decl);
18325
18326       if (TREE_PUBLIC (decl))
18327         add_AT_flag (subr_die, DW_AT_external, 1);
18328
18329       add_name_and_src_coords_attributes (subr_die, decl);
18330       if (debug_info_level > DINFO_LEVEL_TERSE)
18331         {
18332           add_prototyped_attribute (subr_die, TREE_TYPE (decl));
18333           add_type_attribute (subr_die, TREE_TYPE (TREE_TYPE (decl)),
18334                               0, 0, context_die);
18335         }
18336
18337       add_pure_or_virtual_attribute (subr_die, decl);
18338       if (DECL_ARTIFICIAL (decl))
18339         add_AT_flag (subr_die, DW_AT_artificial, 1);
18340
18341       if (TREE_PROTECTED (decl))
18342         add_AT_unsigned (subr_die, DW_AT_accessibility, DW_ACCESS_protected);
18343       else if (TREE_PRIVATE (decl))
18344         add_AT_unsigned (subr_die, DW_AT_accessibility, DW_ACCESS_private);
18345     }
18346
18347   if (declaration)
18348     {
18349       if (!old_die || !get_AT (old_die, DW_AT_inline))
18350         {
18351           add_AT_flag (subr_die, DW_AT_declaration, 1);
18352
18353           /* If this is an explicit function declaration then generate
18354              a DW_AT_explicit attribute.  */
18355           if (lang_hooks.decls.function_decl_explicit_p (decl)
18356               && (dwarf_version >= 3 || !dwarf_strict))
18357             add_AT_flag (subr_die, DW_AT_explicit, 1);
18358
18359           /* The first time we see a member function, it is in the context of
18360              the class to which it belongs.  We make sure of this by emitting
18361              the class first.  The next time is the definition, which is
18362              handled above.  The two may come from the same source text.
18363
18364              Note that force_decl_die() forces function declaration die. It is
18365              later reused to represent definition.  */
18366           equate_decl_number_to_die (decl, subr_die);
18367         }
18368     }
18369   else if (DECL_ABSTRACT (decl))
18370     {
18371       if (DECL_DECLARED_INLINE_P (decl))
18372         {
18373           if (cgraph_function_possibly_inlined_p (decl))
18374             add_AT_unsigned (subr_die, DW_AT_inline, DW_INL_declared_inlined);
18375           else
18376             add_AT_unsigned (subr_die, DW_AT_inline, DW_INL_declared_not_inlined);
18377         }
18378       else
18379         {
18380           if (cgraph_function_possibly_inlined_p (decl))
18381             add_AT_unsigned (subr_die, DW_AT_inline, DW_INL_inlined);
18382           else
18383             add_AT_unsigned (subr_die, DW_AT_inline, DW_INL_not_inlined);
18384         }
18385
18386       if (DECL_DECLARED_INLINE_P (decl)
18387           && lookup_attribute ("artificial", DECL_ATTRIBUTES (decl)))
18388         add_AT_flag (subr_die, DW_AT_artificial, 1);
18389
18390       equate_decl_number_to_die (decl, subr_die);
18391     }
18392   else if (!DECL_EXTERNAL (decl))
18393     {
18394       HOST_WIDE_INT cfa_fb_offset;
18395
18396       if (!old_die || !get_AT (old_die, DW_AT_inline))
18397         equate_decl_number_to_die (decl, subr_die);
18398
18399       if (!flag_reorder_blocks_and_partition)
18400         {
18401           ASM_GENERATE_INTERNAL_LABEL (label_id, FUNC_BEGIN_LABEL,
18402                                        current_function_funcdef_no);
18403           add_AT_lbl_id (subr_die, DW_AT_low_pc, label_id);
18404           ASM_GENERATE_INTERNAL_LABEL (label_id, FUNC_END_LABEL,
18405                                        current_function_funcdef_no);
18406           add_AT_lbl_id (subr_die, DW_AT_high_pc, label_id);
18407
18408           add_pubname (decl, subr_die);
18409           add_arange (decl, subr_die);
18410         }
18411       else
18412         {  /* Do nothing for now; maybe need to duplicate die, one for
18413               hot section and one for cold section, then use the hot/cold
18414               section begin/end labels to generate the aranges...  */
18415           /*
18416             add_AT_lbl_id (subr_die, DW_AT_low_pc, hot_section_label);
18417             add_AT_lbl_id (subr_die, DW_AT_high_pc, hot_section_end_label);
18418             add_AT_lbl_id (subr_die, DW_AT_lo_user, unlikely_section_label);
18419             add_AT_lbl_id (subr_die, DW_AT_hi_user, cold_section_end_label);
18420
18421             add_pubname (decl, subr_die);
18422             add_arange (decl, subr_die);
18423             add_arange (decl, subr_die);
18424            */
18425         }
18426
18427 #ifdef MIPS_DEBUGGING_INFO
18428       /* Add a reference to the FDE for this routine.  */
18429       add_AT_fde_ref (subr_die, DW_AT_MIPS_fde, current_funcdef_fde);
18430 #endif
18431
18432       cfa_fb_offset = CFA_FRAME_BASE_OFFSET (decl);
18433
18434       /* We define the "frame base" as the function's CFA.  This is more
18435          convenient for several reasons: (1) It's stable across the prologue
18436          and epilogue, which makes it better than just a frame pointer,
18437          (2) With dwarf3, there exists a one-byte encoding that allows us
18438          to reference the .debug_frame data by proxy, but failing that,
18439          (3) We can at least reuse the code inspection and interpretation
18440          code that determines the CFA position at various points in the
18441          function.  */
18442       if (dwarf_version >= 3)
18443         {
18444           dw_loc_descr_ref op = new_loc_descr (DW_OP_call_frame_cfa, 0, 0);
18445           add_AT_loc (subr_die, DW_AT_frame_base, op);
18446         }
18447       else
18448         {
18449           dw_loc_list_ref list = convert_cfa_to_fb_loc_list (cfa_fb_offset);
18450           if (list->dw_loc_next)
18451             add_AT_loc_list (subr_die, DW_AT_frame_base, list);
18452           else
18453             add_AT_loc (subr_die, DW_AT_frame_base, list->expr);
18454         }
18455
18456       /* Compute a displacement from the "steady-state frame pointer" to
18457          the CFA.  The former is what all stack slots and argument slots
18458          will reference in the rtl; the later is what we've told the
18459          debugger about.  We'll need to adjust all frame_base references
18460          by this displacement.  */
18461       compute_frame_pointer_to_fb_displacement (cfa_fb_offset);
18462
18463       if (cfun->static_chain_decl)
18464         add_AT_location_description (subr_die, DW_AT_static_link,
18465                  loc_list_from_tree (cfun->static_chain_decl, 2));
18466     }
18467
18468   /* Generate child dies for template paramaters.  */
18469   if (debug_info_level > DINFO_LEVEL_TERSE)
18470     gen_generic_params_dies (decl);
18471
18472   /* Now output descriptions of the arguments for this function. This gets
18473      (unnecessarily?) complex because of the fact that the DECL_ARGUMENT list
18474      for a FUNCTION_DECL doesn't indicate cases where there was a trailing
18475      `...' at the end of the formal parameter list.  In order to find out if
18476      there was a trailing ellipsis or not, we must instead look at the type
18477      associated with the FUNCTION_DECL.  This will be a node of type
18478      FUNCTION_TYPE. If the chain of type nodes hanging off of this
18479      FUNCTION_TYPE node ends with a void_type_node then there should *not* be
18480      an ellipsis at the end.  */
18481
18482   /* In the case where we are describing a mere function declaration, all we
18483      need to do here (and all we *can* do here) is to describe the *types* of
18484      its formal parameters.  */
18485   if (debug_info_level <= DINFO_LEVEL_TERSE)
18486     ;
18487   else if (declaration)
18488     gen_formal_types_die (decl, subr_die);
18489   else
18490     {
18491       /* Generate DIEs to represent all known formal parameters.  */
18492       tree parm = DECL_ARGUMENTS (decl);
18493       tree generic_decl = lang_hooks.decls.get_generic_function_decl (decl);
18494       tree generic_decl_parm = generic_decl
18495                                 ? DECL_ARGUMENTS (generic_decl)
18496                                 : NULL;
18497
18498       /* Now we want to walk the list of parameters of the function and
18499          emit their relevant DIEs.
18500
18501          We consider the case of DECL being an instance of a generic function
18502          as well as it being a normal function.
18503
18504          If DECL is an instance of a generic function we walk the
18505          parameters of the generic function declaration _and_ the parameters of
18506          DECL itself. This is useful because we want to emit specific DIEs for
18507          function parameter packs and those are declared as part of the
18508          generic function declaration. In that particular case,
18509          the parameter pack yields a DW_TAG_GNU_formal_parameter_pack DIE.
18510          That DIE has children DIEs representing the set of arguments
18511          of the pack. Note that the set of pack arguments can be empty.
18512          In that case, the DW_TAG_GNU_formal_parameter_pack DIE will not have any
18513          children DIE.
18514
18515          Otherwise, we just consider the parameters of DECL.  */
18516       while (generic_decl_parm || parm)
18517         {
18518           if (generic_decl_parm
18519               && lang_hooks.function_parameter_pack_p (generic_decl_parm))
18520             gen_formal_parameter_pack_die (generic_decl_parm,
18521                                            parm, subr_die,
18522                                            &parm);
18523           else if (parm)
18524             {
18525               gen_decl_die (parm, NULL, subr_die);
18526               parm = TREE_CHAIN (parm);
18527             }
18528
18529           if (generic_decl_parm)
18530             generic_decl_parm = TREE_CHAIN (generic_decl_parm);
18531         }
18532
18533       /* Decide whether we need an unspecified_parameters DIE at the end.
18534          There are 2 more cases to do this for: 1) the ansi ... declaration -
18535          this is detectable when the end of the arg list is not a
18536          void_type_node 2) an unprototyped function declaration (not a
18537          definition).  This just means that we have no info about the
18538          parameters at all.  */
18539       fn_arg_types = TYPE_ARG_TYPES (TREE_TYPE (decl));
18540       if (fn_arg_types != NULL)
18541         {
18542           /* This is the prototyped case, check for....  */
18543           if (TREE_VALUE (tree_last (fn_arg_types)) != void_type_node)
18544             gen_unspecified_parameters_die (decl, subr_die);
18545         }
18546       else if (DECL_INITIAL (decl) == NULL_TREE)
18547         gen_unspecified_parameters_die (decl, subr_die);
18548     }
18549
18550   /* Output Dwarf info for all of the stuff within the body of the function
18551      (if it has one - it may be just a declaration).  */
18552   outer_scope = DECL_INITIAL (decl);
18553
18554   /* OUTER_SCOPE is a pointer to the outermost BLOCK node created to represent
18555      a function.  This BLOCK actually represents the outermost binding contour
18556      for the function, i.e. the contour in which the function's formal
18557      parameters and labels get declared. Curiously, it appears that the front
18558      end doesn't actually put the PARM_DECL nodes for the current function onto
18559      the BLOCK_VARS list for this outer scope, but are strung off of the
18560      DECL_ARGUMENTS list for the function instead.
18561
18562      The BLOCK_VARS list for the `outer_scope' does provide us with a list of
18563      the LABEL_DECL nodes for the function however, and we output DWARF info
18564      for those in decls_for_scope.  Just within the `outer_scope' there will be
18565      a BLOCK node representing the function's outermost pair of curly braces,
18566      and any blocks used for the base and member initializers of a C++
18567      constructor function.  */
18568   if (! declaration && TREE_CODE (outer_scope) != ERROR_MARK)
18569     {
18570       /* Emit a DW_TAG_variable DIE for a named return value.  */
18571       if (DECL_NAME (DECL_RESULT (decl)))
18572         gen_decl_die (DECL_RESULT (decl), NULL, subr_die);
18573
18574       current_function_has_inlines = 0;
18575       decls_for_scope (outer_scope, subr_die, 0);
18576
18577 #if 0 && defined (MIPS_DEBUGGING_INFO)
18578       if (current_function_has_inlines)
18579         {
18580           add_AT_flag (subr_die, DW_AT_MIPS_has_inlines, 1);
18581           if (! comp_unit_has_inlines)
18582             {
18583               add_AT_flag (comp_unit_die, DW_AT_MIPS_has_inlines, 1);
18584               comp_unit_has_inlines = 1;
18585             }
18586         }
18587 #endif
18588     }
18589   /* Add the calling convention attribute if requested.  */
18590   add_calling_convention_attribute (subr_die, decl);
18591
18592 }
18593
18594 /* Returns a hash value for X (which really is a die_struct).  */
18595
18596 static hashval_t
18597 common_block_die_table_hash (const void *x)
18598 {
18599   const_dw_die_ref d = (const_dw_die_ref) x;
18600   return (hashval_t) d->decl_id ^ htab_hash_pointer (d->die_parent);
18601 }
18602
18603 /* Return nonzero if decl_id and die_parent of die_struct X is the same
18604    as decl_id and die_parent of die_struct Y.  */
18605
18606 static int
18607 common_block_die_table_eq (const void *x, const void *y)
18608 {
18609   const_dw_die_ref d = (const_dw_die_ref) x;
18610   const_dw_die_ref e = (const_dw_die_ref) y;
18611   return d->decl_id == e->decl_id && d->die_parent == e->die_parent;
18612 }
18613
18614 /* Generate a DIE to represent a declared data object.
18615    Either DECL or ORIGIN must be non-null.  */
18616
18617 static void
18618 gen_variable_die (tree decl, tree origin, dw_die_ref context_die)
18619 {
18620   HOST_WIDE_INT off;
18621   tree com_decl;
18622   tree decl_or_origin = decl ? decl : origin;
18623   tree ultimate_origin;
18624   dw_die_ref var_die;
18625   dw_die_ref old_die = decl ? lookup_decl_die (decl) : NULL;
18626   dw_die_ref origin_die;
18627   int declaration = (DECL_EXTERNAL (decl_or_origin)
18628                      || class_or_namespace_scope_p (context_die));
18629
18630   ultimate_origin = decl_ultimate_origin (decl_or_origin);
18631   if (decl || ultimate_origin)
18632     origin = ultimate_origin;
18633   com_decl = fortran_common (decl_or_origin, &off);
18634
18635   /* Symbol in common gets emitted as a child of the common block, in the form
18636      of a data member.  */
18637   if (com_decl)
18638     {
18639       dw_die_ref com_die;
18640       dw_loc_list_ref loc;
18641       die_node com_die_arg;
18642
18643       var_die = lookup_decl_die (decl_or_origin);
18644       if (var_die)
18645         {
18646           if (get_AT (var_die, DW_AT_location) == NULL)
18647             {
18648               loc = loc_list_from_tree (com_decl, off ? 1 : 2);
18649               if (loc)
18650                 {
18651                   if (off)
18652                     {
18653                       /* Optimize the common case.  */
18654                       if (single_element_loc_list_p (loc)
18655                           && loc->expr->dw_loc_opc == DW_OP_addr
18656                           && loc->expr->dw_loc_next == NULL
18657                           && GET_CODE (loc->expr->dw_loc_oprnd1.v.val_addr)
18658                              == SYMBOL_REF)
18659                         loc->expr->dw_loc_oprnd1.v.val_addr
18660                           = plus_constant (loc->expr->dw_loc_oprnd1.v.val_addr, off);
18661                         else
18662                           loc_list_plus_const (loc, off);
18663                     }
18664                   add_AT_location_description (var_die, DW_AT_location, loc);
18665                   remove_AT (var_die, DW_AT_declaration);
18666                 }
18667             }
18668           return;
18669         }
18670
18671       if (common_block_die_table == NULL)
18672         common_block_die_table
18673           = htab_create_ggc (10, common_block_die_table_hash,
18674                              common_block_die_table_eq, NULL);
18675
18676       com_die_arg.decl_id = DECL_UID (com_decl);
18677       com_die_arg.die_parent = context_die;
18678       com_die = (dw_die_ref) htab_find (common_block_die_table, &com_die_arg);
18679       loc = loc_list_from_tree (com_decl, 2);
18680       if (com_die == NULL)
18681         {
18682           const char *cnam
18683             = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (com_decl));
18684           void **slot;
18685
18686           com_die = new_die (DW_TAG_common_block, context_die, decl);
18687           add_name_and_src_coords_attributes (com_die, com_decl);
18688           if (loc)
18689             {
18690               add_AT_location_description (com_die, DW_AT_location, loc);
18691               /* Avoid sharing the same loc descriptor between
18692                  DW_TAG_common_block and DW_TAG_variable.  */
18693               loc = loc_list_from_tree (com_decl, 2);
18694             }
18695           else if (DECL_EXTERNAL (decl))
18696             add_AT_flag (com_die, DW_AT_declaration, 1);
18697           add_pubname_string (cnam, com_die); /* ??? needed? */
18698           com_die->decl_id = DECL_UID (com_decl);
18699           slot = htab_find_slot (common_block_die_table, com_die, INSERT);
18700           *slot = (void *) com_die;
18701         }
18702       else if (get_AT (com_die, DW_AT_location) == NULL && loc)
18703         {
18704           add_AT_location_description (com_die, DW_AT_location, loc);
18705           loc = loc_list_from_tree (com_decl, 2);
18706           remove_AT (com_die, DW_AT_declaration);
18707         }
18708       var_die = new_die (DW_TAG_variable, com_die, decl);
18709       add_name_and_src_coords_attributes (var_die, decl);
18710       add_type_attribute (var_die, TREE_TYPE (decl), TREE_READONLY (decl),
18711                           TREE_THIS_VOLATILE (decl), context_die);
18712       add_AT_flag (var_die, DW_AT_external, 1);
18713       if (loc)
18714         {
18715           if (off)
18716             {
18717               /* Optimize the common case.  */
18718               if (single_element_loc_list_p (loc)
18719                   && loc->expr->dw_loc_opc == DW_OP_addr
18720                   && loc->expr->dw_loc_next == NULL
18721                   && GET_CODE (loc->expr->dw_loc_oprnd1.v.val_addr) == SYMBOL_REF)
18722                 loc->expr->dw_loc_oprnd1.v.val_addr
18723                   = plus_constant (loc->expr->dw_loc_oprnd1.v.val_addr, off);
18724               else
18725                 loc_list_plus_const (loc, off);
18726             }
18727           add_AT_location_description (var_die, DW_AT_location, loc);
18728         }
18729       else if (DECL_EXTERNAL (decl))
18730         add_AT_flag (var_die, DW_AT_declaration, 1);
18731       equate_decl_number_to_die (decl, var_die);
18732       return;
18733     }
18734
18735   /* If the compiler emitted a definition for the DECL declaration
18736      and if we already emitted a DIE for it, don't emit a second
18737      DIE for it again. Allow re-declarations of DECLs that are
18738      inside functions, though.  */
18739   if (old_die && declaration && !local_scope_p (context_die))
18740     return;
18741
18742   /* For static data members, the declaration in the class is supposed
18743      to have DW_TAG_member tag; the specification should still be
18744      DW_TAG_variable referencing the DW_TAG_member DIE.  */
18745   if (declaration && class_scope_p (context_die))
18746     var_die = new_die (DW_TAG_member, context_die, decl);
18747   else
18748     var_die = new_die (DW_TAG_variable, context_die, decl);
18749
18750   origin_die = NULL;
18751   if (origin != NULL)
18752     origin_die = add_abstract_origin_attribute (var_die, origin);
18753
18754   /* Loop unrolling can create multiple blocks that refer to the same
18755      static variable, so we must test for the DW_AT_declaration flag.
18756
18757      ??? Loop unrolling/reorder_blocks should perhaps be rewritten to
18758      copy decls and set the DECL_ABSTRACT flag on them instead of
18759      sharing them.
18760
18761      ??? Duplicated blocks have been rewritten to use .debug_ranges.
18762
18763      ??? The declare_in_namespace support causes us to get two DIEs for one
18764      variable, both of which are declarations.  We want to avoid considering
18765      one to be a specification, so we must test that this DIE is not a
18766      declaration.  */
18767   else if (old_die && TREE_STATIC (decl) && ! declaration
18768            && get_AT_flag (old_die, DW_AT_declaration) == 1)
18769     {
18770       /* This is a definition of a C++ class level static.  */
18771       add_AT_specification (var_die, old_die);
18772       if (DECL_NAME (decl))
18773         {
18774           expanded_location s = expand_location (DECL_SOURCE_LOCATION (decl));
18775           struct dwarf_file_data * file_index = lookup_filename (s.file);
18776
18777           if (get_AT_file (old_die, DW_AT_decl_file) != file_index)
18778             add_AT_file (var_die, DW_AT_decl_file, file_index);
18779
18780           if (get_AT_unsigned (old_die, DW_AT_decl_line) != (unsigned) s.line)
18781             add_AT_unsigned (var_die, DW_AT_decl_line, s.line);
18782         }
18783     }
18784   else
18785     {
18786       tree type = TREE_TYPE (decl);
18787
18788       add_name_and_src_coords_attributes (var_die, decl);
18789       if (decl_by_reference_p (decl))
18790         add_type_attribute (var_die, TREE_TYPE (type), 0, 0, context_die);
18791       else
18792         add_type_attribute (var_die, type, TREE_READONLY (decl),
18793                             TREE_THIS_VOLATILE (decl), context_die);
18794
18795       if (TREE_PUBLIC (decl))
18796         add_AT_flag (var_die, DW_AT_external, 1);
18797
18798       if (DECL_ARTIFICIAL (decl))
18799         add_AT_flag (var_die, DW_AT_artificial, 1);
18800
18801       if (TREE_PROTECTED (decl))
18802         add_AT_unsigned (var_die, DW_AT_accessibility, DW_ACCESS_protected);
18803       else if (TREE_PRIVATE (decl))
18804         add_AT_unsigned (var_die, DW_AT_accessibility, DW_ACCESS_private);
18805     }
18806
18807   if (declaration)
18808     add_AT_flag (var_die, DW_AT_declaration, 1);
18809
18810   if (decl && (DECL_ABSTRACT (decl) || declaration))
18811     equate_decl_number_to_die (decl, var_die);
18812
18813   if (! declaration
18814       && (! DECL_ABSTRACT (decl_or_origin)
18815           /* Local static vars are shared between all clones/inlines,
18816              so emit DW_AT_location on the abstract DIE if DECL_RTL is
18817              already set.  */
18818           || (TREE_CODE (decl_or_origin) == VAR_DECL
18819               && TREE_STATIC (decl_or_origin)
18820               && DECL_RTL_SET_P (decl_or_origin)))
18821       /* When abstract origin already has DW_AT_location attribute, no need
18822          to add it again.  */
18823       && (origin_die == NULL || get_AT (origin_die, DW_AT_location) == NULL))
18824     {
18825       if (TREE_CODE (decl_or_origin) == VAR_DECL && TREE_STATIC (decl_or_origin)
18826           && !TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (decl_or_origin)))
18827         defer_location (decl_or_origin, var_die);
18828       else
18829         add_location_or_const_value_attribute (var_die,
18830                                                decl_or_origin,
18831                                                DW_AT_location);
18832       add_pubname (decl_or_origin, var_die);
18833     }
18834   else
18835     tree_add_const_value_attribute_for_decl (var_die, decl_or_origin);
18836 }
18837
18838 /* Generate a DIE to represent a named constant.  */
18839
18840 static void
18841 gen_const_die (tree decl, dw_die_ref context_die)
18842 {
18843   dw_die_ref const_die;
18844   tree type = TREE_TYPE (decl);
18845
18846   const_die = new_die (DW_TAG_constant, context_die, decl);
18847   add_name_and_src_coords_attributes (const_die, decl);
18848   add_type_attribute (const_die, type, 1, 0, context_die);
18849   if (TREE_PUBLIC (decl))
18850     add_AT_flag (const_die, DW_AT_external, 1);
18851   if (DECL_ARTIFICIAL (decl))
18852     add_AT_flag (const_die, DW_AT_artificial, 1);
18853   tree_add_const_value_attribute_for_decl (const_die, decl);
18854 }
18855
18856 /* Generate a DIE to represent a label identifier.  */
18857
18858 static void
18859 gen_label_die (tree decl, dw_die_ref context_die)
18860 {
18861   tree origin = decl_ultimate_origin (decl);
18862   dw_die_ref lbl_die = new_die (DW_TAG_label, context_die, decl);
18863   rtx insn;
18864   char label[MAX_ARTIFICIAL_LABEL_BYTES];
18865
18866   if (origin != NULL)
18867     add_abstract_origin_attribute (lbl_die, origin);
18868   else
18869     add_name_and_src_coords_attributes (lbl_die, decl);
18870
18871   if (DECL_ABSTRACT (decl))
18872     equate_decl_number_to_die (decl, lbl_die);
18873   else
18874     {
18875       insn = DECL_RTL_IF_SET (decl);
18876
18877       /* Deleted labels are programmer specified labels which have been
18878          eliminated because of various optimizations.  We still emit them
18879          here so that it is possible to put breakpoints on them.  */
18880       if (insn
18881           && (LABEL_P (insn)
18882               || ((NOTE_P (insn)
18883                    && NOTE_KIND (insn) == NOTE_INSN_DELETED_LABEL))))
18884         {
18885           /* When optimization is enabled (via -O) some parts of the compiler
18886              (e.g. jump.c and cse.c) may try to delete CODE_LABEL insns which
18887              represent source-level labels which were explicitly declared by
18888              the user.  This really shouldn't be happening though, so catch
18889              it if it ever does happen.  */
18890           gcc_assert (!INSN_DELETED_P (insn));
18891
18892           ASM_GENERATE_INTERNAL_LABEL (label, "L", CODE_LABEL_NUMBER (insn));
18893           add_AT_lbl_id (lbl_die, DW_AT_low_pc, label);
18894         }
18895     }
18896 }
18897
18898 /* A helper function for gen_inlined_subroutine_die.  Add source coordinate
18899    attributes to the DIE for a block STMT, to describe where the inlined
18900    function was called from.  This is similar to add_src_coords_attributes.  */
18901
18902 static inline void
18903 add_call_src_coords_attributes (tree stmt, dw_die_ref die)
18904 {
18905   expanded_location s = expand_location (BLOCK_SOURCE_LOCATION (stmt));
18906
18907   if (dwarf_version >= 3 || !dwarf_strict)
18908     {
18909       add_AT_file (die, DW_AT_call_file, lookup_filename (s.file));
18910       add_AT_unsigned (die, DW_AT_call_line, s.line);
18911     }
18912 }
18913
18914
18915 /* A helper function for gen_lexical_block_die and gen_inlined_subroutine_die.
18916    Add low_pc and high_pc attributes to the DIE for a block STMT.  */
18917
18918 static inline void
18919 add_high_low_attributes (tree stmt, dw_die_ref die)
18920 {
18921   char label[MAX_ARTIFICIAL_LABEL_BYTES];
18922
18923   if (BLOCK_FRAGMENT_CHAIN (stmt)
18924       && (dwarf_version >= 3 || !dwarf_strict))
18925     {
18926       tree chain;
18927
18928       if (inlined_function_outer_scope_p (stmt))
18929         {
18930           ASM_GENERATE_INTERNAL_LABEL (label, BLOCK_BEGIN_LABEL,
18931                                        BLOCK_NUMBER (stmt));
18932           add_AT_lbl_id (die, DW_AT_entry_pc, label);
18933         }
18934
18935       add_AT_range_list (die, DW_AT_ranges, add_ranges (stmt));
18936
18937       chain = BLOCK_FRAGMENT_CHAIN (stmt);
18938       do
18939         {
18940           add_ranges (chain);
18941           chain = BLOCK_FRAGMENT_CHAIN (chain);
18942         }
18943       while (chain);
18944       add_ranges (NULL);
18945     }
18946   else
18947     {
18948       ASM_GENERATE_INTERNAL_LABEL (label, BLOCK_BEGIN_LABEL,
18949                                    BLOCK_NUMBER (stmt));
18950       add_AT_lbl_id (die, DW_AT_low_pc, label);
18951       ASM_GENERATE_INTERNAL_LABEL (label, BLOCK_END_LABEL,
18952                                    BLOCK_NUMBER (stmt));
18953       add_AT_lbl_id (die, DW_AT_high_pc, label);
18954     }
18955 }
18956
18957 /* Generate a DIE for a lexical block.  */
18958
18959 static void
18960 gen_lexical_block_die (tree stmt, dw_die_ref context_die, int depth)
18961 {
18962   dw_die_ref stmt_die = new_die (DW_TAG_lexical_block, context_die, stmt);
18963
18964   if (! BLOCK_ABSTRACT (stmt) && TREE_ASM_WRITTEN (stmt))
18965     add_high_low_attributes (stmt, stmt_die);
18966
18967   decls_for_scope (stmt, stmt_die, depth);
18968 }
18969
18970 /* Generate a DIE for an inlined subprogram.  */
18971
18972 static void
18973 gen_inlined_subroutine_die (tree stmt, dw_die_ref context_die, int depth)
18974 {
18975   tree decl;
18976
18977   /* The instance of function that is effectively being inlined shall not
18978      be abstract.  */
18979   gcc_assert (! BLOCK_ABSTRACT (stmt));
18980
18981   decl = block_ultimate_origin (stmt);
18982
18983   /* Emit info for the abstract instance first, if we haven't yet.  We
18984      must emit this even if the block is abstract, otherwise when we
18985      emit the block below (or elsewhere), we may end up trying to emit
18986      a die whose origin die hasn't been emitted, and crashing.  */
18987   dwarf2out_abstract_function (decl);
18988
18989   if (! BLOCK_ABSTRACT (stmt))
18990     {
18991       dw_die_ref subr_die
18992         = new_die (DW_TAG_inlined_subroutine, context_die, stmt);
18993
18994       add_abstract_origin_attribute (subr_die, decl);
18995       if (TREE_ASM_WRITTEN (stmt))
18996         add_high_low_attributes (stmt, subr_die);
18997       add_call_src_coords_attributes (stmt, subr_die);
18998
18999       decls_for_scope (stmt, subr_die, depth);
19000       current_function_has_inlines = 1;
19001     }
19002 }
19003
19004 /* Generate a DIE for a field in a record, or structure.  */
19005
19006 static void
19007 gen_field_die (tree decl, dw_die_ref context_die)
19008 {
19009   dw_die_ref decl_die;
19010
19011   if (TREE_TYPE (decl) == error_mark_node)
19012     return;
19013
19014   decl_die = new_die (DW_TAG_member, context_die, decl);
19015   add_name_and_src_coords_attributes (decl_die, decl);
19016   add_type_attribute (decl_die, member_declared_type (decl),
19017                       TREE_READONLY (decl), TREE_THIS_VOLATILE (decl),
19018                       context_die);
19019
19020   if (DECL_BIT_FIELD_TYPE (decl))
19021     {
19022       add_byte_size_attribute (decl_die, decl);
19023       add_bit_size_attribute (decl_die, decl);
19024       add_bit_offset_attribute (decl_die, decl);
19025     }
19026
19027   if (TREE_CODE (DECL_FIELD_CONTEXT (decl)) != UNION_TYPE)
19028     add_data_member_location_attribute (decl_die, decl);
19029
19030   if (DECL_ARTIFICIAL (decl))
19031     add_AT_flag (decl_die, DW_AT_artificial, 1);
19032
19033   if (TREE_PROTECTED (decl))
19034     add_AT_unsigned (decl_die, DW_AT_accessibility, DW_ACCESS_protected);
19035   else if (TREE_PRIVATE (decl))
19036     add_AT_unsigned (decl_die, DW_AT_accessibility, DW_ACCESS_private);
19037
19038   /* Equate decl number to die, so that we can look up this decl later on.  */
19039   equate_decl_number_to_die (decl, decl_die);
19040 }
19041
19042 #if 0
19043 /* Don't generate either pointer_type DIEs or reference_type DIEs here.
19044    Use modified_type_die instead.
19045    We keep this code here just in case these types of DIEs may be needed to
19046    represent certain things in other languages (e.g. Pascal) someday.  */
19047
19048 static void
19049 gen_pointer_type_die (tree type, dw_die_ref context_die)
19050 {
19051   dw_die_ref ptr_die
19052     = new_die (DW_TAG_pointer_type, scope_die_for (type, context_die), type);
19053
19054   equate_type_number_to_die (type, ptr_die);
19055   add_type_attribute (ptr_die, TREE_TYPE (type), 0, 0, context_die);
19056   add_AT_unsigned (mod_type_die, DW_AT_byte_size, PTR_SIZE);
19057 }
19058
19059 /* Don't generate either pointer_type DIEs or reference_type DIEs here.
19060    Use modified_type_die instead.
19061    We keep this code here just in case these types of DIEs may be needed to
19062    represent certain things in other languages (e.g. Pascal) someday.  */
19063
19064 static void
19065 gen_reference_type_die (tree type, dw_die_ref context_die)
19066 {
19067   dw_die_ref ref_die, scope_die = scope_die_for (type, context_die);
19068
19069   if (TYPE_REF_IS_RVALUE (type) && dwarf_version >= 4)
19070     ref_die = new_die (DW_TAG_rvalue_reference_type, scope_die, type);
19071   else
19072     ref_die = new_die (DW_TAG_reference_type, scope_die, type);
19073
19074   equate_type_number_to_die (type, ref_die);
19075   add_type_attribute (ref_die, TREE_TYPE (type), 0, 0, context_die);
19076   add_AT_unsigned (mod_type_die, DW_AT_byte_size, PTR_SIZE);
19077 }
19078 #endif
19079
19080 /* Generate a DIE for a pointer to a member type.  */
19081
19082 static void
19083 gen_ptr_to_mbr_type_die (tree type, dw_die_ref context_die)
19084 {
19085   dw_die_ref ptr_die
19086     = new_die (DW_TAG_ptr_to_member_type,
19087                scope_die_for (type, context_die), type);
19088
19089   equate_type_number_to_die (type, ptr_die);
19090   add_AT_die_ref (ptr_die, DW_AT_containing_type,
19091                   lookup_type_die (TYPE_OFFSET_BASETYPE (type)));
19092   add_type_attribute (ptr_die, TREE_TYPE (type), 0, 0, context_die);
19093 }
19094
19095 /* Generate the DIE for the compilation unit.  */
19096
19097 static dw_die_ref
19098 gen_compile_unit_die (const char *filename)
19099 {
19100   dw_die_ref die;
19101   char producer[250];
19102   const char *language_string = lang_hooks.name;
19103   int language;
19104
19105   die = new_die (DW_TAG_compile_unit, NULL, NULL);
19106
19107   if (filename)
19108     {
19109       add_name_attribute (die, filename);
19110       /* Don't add cwd for <built-in>.  */
19111       if (!IS_ABSOLUTE_PATH (filename) && filename[0] != '<')
19112         add_comp_dir_attribute (die);
19113     }
19114
19115   sprintf (producer, "%s %s", language_string, version_string);
19116
19117 #ifdef MIPS_DEBUGGING_INFO
19118   /* The MIPS/SGI compilers place the 'cc' command line options in the producer
19119      string.  The SGI debugger looks for -g, -g1, -g2, or -g3; if they do
19120      not appear in the producer string, the debugger reaches the conclusion
19121      that the object file is stripped and has no debugging information.
19122      To get the MIPS/SGI debugger to believe that there is debugging
19123      information in the object file, we add a -g to the producer string.  */
19124   if (debug_info_level > DINFO_LEVEL_TERSE)
19125     strcat (producer, " -g");
19126 #endif
19127
19128   add_AT_string (die, DW_AT_producer, producer);
19129
19130   language = DW_LANG_C89;
19131   if (strcmp (language_string, "GNU C++") == 0)
19132     language = DW_LANG_C_plus_plus;
19133   else if (strcmp (language_string, "GNU F77") == 0)
19134     language = DW_LANG_Fortran77;
19135   else if (strcmp (language_string, "GNU Pascal") == 0)
19136     language = DW_LANG_Pascal83;
19137   else if (dwarf_version >= 3 || !dwarf_strict)
19138     {
19139       if (strcmp (language_string, "GNU Ada") == 0)
19140         language = DW_LANG_Ada95;
19141       else if (strcmp (language_string, "GNU Fortran") == 0)
19142         language = DW_LANG_Fortran95;
19143       else if (strcmp (language_string, "GNU Java") == 0)
19144         language = DW_LANG_Java;
19145       else if (strcmp (language_string, "GNU Objective-C") == 0)
19146         language = DW_LANG_ObjC;
19147       else if (strcmp (language_string, "GNU Objective-C++") == 0)
19148         language = DW_LANG_ObjC_plus_plus;
19149     }
19150
19151   add_AT_unsigned (die, DW_AT_language, language);
19152
19153   switch (language)
19154     {
19155     case DW_LANG_Fortran77:
19156     case DW_LANG_Fortran90:
19157     case DW_LANG_Fortran95:
19158       /* Fortran has case insensitive identifiers and the front-end
19159          lowercases everything.  */
19160       add_AT_unsigned (die, DW_AT_identifier_case, DW_ID_down_case);
19161       break;
19162     default:
19163       /* The default DW_ID_case_sensitive doesn't need to be specified.  */
19164       break;
19165     }
19166   return die;
19167 }
19168
19169 /* Generate the DIE for a base class.  */
19170
19171 static void
19172 gen_inheritance_die (tree binfo, tree access, dw_die_ref context_die)
19173 {
19174   dw_die_ref die = new_die (DW_TAG_inheritance, context_die, binfo);
19175
19176   add_type_attribute (die, BINFO_TYPE (binfo), 0, 0, context_die);
19177   add_data_member_location_attribute (die, binfo);
19178
19179   if (BINFO_VIRTUAL_P (binfo))
19180     add_AT_unsigned (die, DW_AT_virtuality, DW_VIRTUALITY_virtual);
19181
19182   if (access == access_public_node)
19183     add_AT_unsigned (die, DW_AT_accessibility, DW_ACCESS_public);
19184   else if (access == access_protected_node)
19185     add_AT_unsigned (die, DW_AT_accessibility, DW_ACCESS_protected);
19186 }
19187
19188 /* Generate a DIE for a class member.  */
19189
19190 static void
19191 gen_member_die (tree type, dw_die_ref context_die)
19192 {
19193   tree member;
19194   tree binfo = TYPE_BINFO (type);
19195   dw_die_ref child;
19196
19197   /* If this is not an incomplete type, output descriptions of each of its
19198      members. Note that as we output the DIEs necessary to represent the
19199      members of this record or union type, we will also be trying to output
19200      DIEs to represent the *types* of those members. However the `type'
19201      function (above) will specifically avoid generating type DIEs for member
19202      types *within* the list of member DIEs for this (containing) type except
19203      for those types (of members) which are explicitly marked as also being
19204      members of this (containing) type themselves.  The g++ front- end can
19205      force any given type to be treated as a member of some other (containing)
19206      type by setting the TYPE_CONTEXT of the given (member) type to point to
19207      the TREE node representing the appropriate (containing) type.  */
19208
19209   /* First output info about the base classes.  */
19210   if (binfo)
19211     {
19212       VEC(tree,gc) *accesses = BINFO_BASE_ACCESSES (binfo);
19213       int i;
19214       tree base;
19215
19216       for (i = 0; BINFO_BASE_ITERATE (binfo, i, base); i++)
19217         gen_inheritance_die (base,
19218                              (accesses ? VEC_index (tree, accesses, i)
19219                               : access_public_node), context_die);
19220     }
19221
19222   /* Now output info about the data members and type members.  */
19223   for (member = TYPE_FIELDS (type); member; member = TREE_CHAIN (member))
19224     {
19225       /* If we thought we were generating minimal debug info for TYPE
19226          and then changed our minds, some of the member declarations
19227          may have already been defined.  Don't define them again, but
19228          do put them in the right order.  */
19229
19230       child = lookup_decl_die (member);
19231       if (child)
19232         splice_child_die (context_die, child);
19233       else
19234         gen_decl_die (member, NULL, context_die);
19235     }
19236
19237   /* Now output info about the function members (if any).  */
19238   for (member = TYPE_METHODS (type); member; member = TREE_CHAIN (member))
19239     {
19240       /* Don't include clones in the member list.  */
19241       if (DECL_ABSTRACT_ORIGIN (member))
19242         continue;
19243
19244       child = lookup_decl_die (member);
19245       if (child)
19246         splice_child_die (context_die, child);
19247       else
19248         gen_decl_die (member, NULL, context_die);
19249     }
19250 }
19251
19252 /* Generate a DIE for a structure or union type.  If TYPE_DECL_SUPPRESS_DEBUG
19253    is set, we pretend that the type was never defined, so we only get the
19254    member DIEs needed by later specification DIEs.  */
19255
19256 static void
19257 gen_struct_or_union_type_die (tree type, dw_die_ref context_die,
19258                                 enum debug_info_usage usage)
19259 {
19260   dw_die_ref type_die = lookup_type_die (type);
19261   dw_die_ref scope_die = 0;
19262   int nested = 0;
19263   int complete = (TYPE_SIZE (type)
19264                   && (! TYPE_STUB_DECL (type)
19265                       || ! TYPE_DECL_SUPPRESS_DEBUG (TYPE_STUB_DECL (type))));
19266   int ns_decl = (context_die && context_die->die_tag == DW_TAG_namespace);
19267   complete = complete && should_emit_struct_debug (type, usage);
19268
19269   if (type_die && ! complete)
19270     return;
19271
19272   if (TYPE_CONTEXT (type) != NULL_TREE
19273       && (AGGREGATE_TYPE_P (TYPE_CONTEXT (type))
19274           || TREE_CODE (TYPE_CONTEXT (type)) == NAMESPACE_DECL))
19275     nested = 1;
19276
19277   scope_die = scope_die_for (type, context_die);
19278
19279   if (! type_die || (nested && scope_die == comp_unit_die))
19280     /* First occurrence of type or toplevel definition of nested class.  */
19281     {
19282       dw_die_ref old_die = type_die;
19283
19284       type_die = new_die (TREE_CODE (type) == RECORD_TYPE
19285                           ? record_type_tag (type) : DW_TAG_union_type,
19286                           scope_die, type);
19287       equate_type_number_to_die (type, type_die);
19288       if (old_die)
19289         add_AT_specification (type_die, old_die);
19290       else
19291         add_name_attribute (type_die, type_tag (type));
19292     }
19293   else
19294     remove_AT (type_die, DW_AT_declaration);
19295
19296   /* Generate child dies for template paramaters.  */
19297   if (debug_info_level > DINFO_LEVEL_TERSE
19298       && COMPLETE_TYPE_P (type))
19299     gen_generic_params_dies (type);
19300
19301   /* If this type has been completed, then give it a byte_size attribute and
19302      then give a list of members.  */
19303   if (complete && !ns_decl)
19304     {
19305       /* Prevent infinite recursion in cases where the type of some member of
19306          this type is expressed in terms of this type itself.  */
19307       TREE_ASM_WRITTEN (type) = 1;
19308       add_byte_size_attribute (type_die, type);
19309       if (TYPE_STUB_DECL (type) != NULL_TREE)
19310         add_src_coords_attributes (type_die, TYPE_STUB_DECL (type));
19311
19312       /* If the first reference to this type was as the return type of an
19313          inline function, then it may not have a parent.  Fix this now.  */
19314       if (type_die->die_parent == NULL)
19315         add_child_die (scope_die, type_die);
19316
19317       push_decl_scope (type);
19318       gen_member_die (type, type_die);
19319       pop_decl_scope ();
19320
19321       /* GNU extension: Record what type our vtable lives in.  */
19322       if (TYPE_VFIELD (type))
19323         {
19324           tree vtype = DECL_FCONTEXT (TYPE_VFIELD (type));
19325
19326           gen_type_die (vtype, context_die);
19327           add_AT_die_ref (type_die, DW_AT_containing_type,
19328                           lookup_type_die (vtype));
19329         }
19330     }
19331   else
19332     {
19333       add_AT_flag (type_die, DW_AT_declaration, 1);
19334
19335       /* We don't need to do this for function-local types.  */
19336       if (TYPE_STUB_DECL (type)
19337           && ! decl_function_context (TYPE_STUB_DECL (type)))
19338         VEC_safe_push (tree, gc, incomplete_types, type);
19339     }
19340
19341   if (get_AT (type_die, DW_AT_name))
19342     add_pubtype (type, type_die);
19343 }
19344
19345 /* Generate a DIE for a subroutine _type_.  */
19346
19347 static void
19348 gen_subroutine_type_die (tree type, dw_die_ref context_die)
19349 {
19350   tree return_type = TREE_TYPE (type);
19351   dw_die_ref subr_die
19352     = new_die (DW_TAG_subroutine_type,
19353                scope_die_for (type, context_die), type);
19354
19355   equate_type_number_to_die (type, subr_die);
19356   add_prototyped_attribute (subr_die, type);
19357   add_type_attribute (subr_die, return_type, 0, 0, context_die);
19358   gen_formal_types_die (type, subr_die);
19359
19360   if (get_AT (subr_die, DW_AT_name))
19361     add_pubtype (type, subr_die);
19362 }
19363
19364 /* Generate a DIE for a type definition.  */
19365
19366 static void
19367 gen_typedef_die (tree decl, dw_die_ref context_die)
19368 {
19369   dw_die_ref type_die;
19370   tree origin;
19371
19372   if (TREE_ASM_WRITTEN (decl))
19373     return;
19374
19375   TREE_ASM_WRITTEN (decl) = 1;
19376   type_die = new_die (DW_TAG_typedef, context_die, decl);
19377   origin = decl_ultimate_origin (decl);
19378   if (origin != NULL)
19379     add_abstract_origin_attribute (type_die, origin);
19380   else
19381     {
19382       tree type;
19383
19384       add_name_and_src_coords_attributes (type_die, decl);
19385       if (DECL_ORIGINAL_TYPE (decl))
19386         {
19387           type = DECL_ORIGINAL_TYPE (decl);
19388
19389           gcc_assert (type != TREE_TYPE (decl));
19390           equate_type_number_to_die (TREE_TYPE (decl), type_die);
19391         }
19392       else
19393         type = TREE_TYPE (decl);
19394
19395       add_type_attribute (type_die, type, TREE_READONLY (decl),
19396                           TREE_THIS_VOLATILE (decl), context_die);
19397     }
19398
19399   if (DECL_ABSTRACT (decl))
19400     equate_decl_number_to_die (decl, type_die);
19401
19402   if (get_AT (type_die, DW_AT_name))
19403     add_pubtype (decl, type_die);
19404 }
19405
19406 /* Generate a type description DIE.  */
19407
19408 static void
19409 gen_type_die_with_usage (tree type, dw_die_ref context_die,
19410                                 enum debug_info_usage usage)
19411 {
19412   int need_pop;
19413   struct array_descr_info info;
19414
19415   if (type == NULL_TREE || type == error_mark_node)
19416     return;
19417
19418   /* If TYPE is a typedef type variant, let's generate debug info
19419      for the parent typedef which TYPE is a type of.  */
19420   if (TYPE_NAME (type) && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
19421       && DECL_ORIGINAL_TYPE (TYPE_NAME (type)))
19422     {
19423       if (TREE_ASM_WRITTEN (type))
19424         return;
19425
19426       /* Prevent broken recursion; we can't hand off to the same type.  */
19427       gcc_assert (DECL_ORIGINAL_TYPE (TYPE_NAME (type)) != type);
19428
19429       /* Use the DIE of the containing namespace as the parent DIE of
19430          the type description DIE we want to generate.  */
19431       if (DECL_CONTEXT (TYPE_NAME (type))
19432           && TREE_CODE (DECL_CONTEXT (TYPE_NAME (type))) == NAMESPACE_DECL)
19433         context_die = get_context_die (DECL_CONTEXT (TYPE_NAME (type)));
19434
19435       TREE_ASM_WRITTEN (type) = 1;
19436       gen_decl_die (TYPE_NAME (type), NULL, context_die);
19437       return;
19438     }
19439
19440   /* If this is an array type with hidden descriptor, handle it first.  */
19441   if (!TREE_ASM_WRITTEN (type)
19442       && lang_hooks.types.get_array_descr_info
19443       && lang_hooks.types.get_array_descr_info (type, &info)
19444       && (dwarf_version >= 3 || !dwarf_strict))
19445     {
19446       gen_descr_array_type_die (type, &info, context_die);
19447       TREE_ASM_WRITTEN (type) = 1;
19448       return;
19449     }
19450
19451   /* We are going to output a DIE to represent the unqualified version
19452      of this type (i.e. without any const or volatile qualifiers) so
19453      get the main variant (i.e. the unqualified version) of this type
19454      now.  (Vectors are special because the debugging info is in the
19455      cloned type itself).  */
19456   if (TREE_CODE (type) != VECTOR_TYPE)
19457     type = type_main_variant (type);
19458
19459   if (TREE_ASM_WRITTEN (type))
19460     return;
19461
19462   switch (TREE_CODE (type))
19463     {
19464     case ERROR_MARK:
19465       break;
19466
19467     case POINTER_TYPE:
19468     case REFERENCE_TYPE:
19469       /* We must set TREE_ASM_WRITTEN in case this is a recursive type.  This
19470          ensures that the gen_type_die recursion will terminate even if the
19471          type is recursive.  Recursive types are possible in Ada.  */
19472       /* ??? We could perhaps do this for all types before the switch
19473          statement.  */
19474       TREE_ASM_WRITTEN (type) = 1;
19475
19476       /* For these types, all that is required is that we output a DIE (or a
19477          set of DIEs) to represent the "basis" type.  */
19478       gen_type_die_with_usage (TREE_TYPE (type), context_die,
19479                                 DINFO_USAGE_IND_USE);
19480       break;
19481
19482     case OFFSET_TYPE:
19483       /* This code is used for C++ pointer-to-data-member types.
19484          Output a description of the relevant class type.  */
19485       gen_type_die_with_usage (TYPE_OFFSET_BASETYPE (type), context_die,
19486                                         DINFO_USAGE_IND_USE);
19487
19488       /* Output a description of the type of the object pointed to.  */
19489       gen_type_die_with_usage (TREE_TYPE (type), context_die,
19490                                         DINFO_USAGE_IND_USE);
19491
19492       /* Now output a DIE to represent this pointer-to-data-member type
19493          itself.  */
19494       gen_ptr_to_mbr_type_die (type, context_die);
19495       break;
19496
19497     case FUNCTION_TYPE:
19498       /* Force out return type (in case it wasn't forced out already).  */
19499       gen_type_die_with_usage (TREE_TYPE (type), context_die,
19500                                         DINFO_USAGE_DIR_USE);
19501       gen_subroutine_type_die (type, context_die);
19502       break;
19503
19504     case METHOD_TYPE:
19505       /* Force out return type (in case it wasn't forced out already).  */
19506       gen_type_die_with_usage (TREE_TYPE (type), context_die,
19507                                         DINFO_USAGE_DIR_USE);
19508       gen_subroutine_type_die (type, context_die);
19509       break;
19510
19511     case ARRAY_TYPE:
19512       gen_array_type_die (type, context_die);
19513       break;
19514
19515     case VECTOR_TYPE:
19516       gen_array_type_die (type, context_die);
19517       break;
19518
19519     case ENUMERAL_TYPE:
19520     case RECORD_TYPE:
19521     case UNION_TYPE:
19522     case QUAL_UNION_TYPE:
19523       /* If this is a nested type whose containing class hasn't been written
19524          out yet, writing it out will cover this one, too.  This does not apply
19525          to instantiations of member class templates; they need to be added to
19526          the containing class as they are generated.  FIXME: This hurts the
19527          idea of combining type decls from multiple TUs, since we can't predict
19528          what set of template instantiations we'll get.  */
19529       if (TYPE_CONTEXT (type)
19530           && AGGREGATE_TYPE_P (TYPE_CONTEXT (type))
19531           && ! TREE_ASM_WRITTEN (TYPE_CONTEXT (type)))
19532         {
19533           gen_type_die_with_usage (TYPE_CONTEXT (type), context_die, usage);
19534
19535           if (TREE_ASM_WRITTEN (type))
19536             return;
19537
19538           /* If that failed, attach ourselves to the stub.  */
19539           push_decl_scope (TYPE_CONTEXT (type));
19540           context_die = lookup_type_die (TYPE_CONTEXT (type));
19541           need_pop = 1;
19542         }
19543       else if (TYPE_CONTEXT (type) != NULL_TREE
19544                && (TREE_CODE (TYPE_CONTEXT (type)) == FUNCTION_DECL))
19545         {
19546           /* If this type is local to a function that hasn't been written
19547              out yet, use a NULL context for now; it will be fixed up in
19548              decls_for_scope.  */
19549           context_die = lookup_decl_die (TYPE_CONTEXT (type));
19550           need_pop = 0;
19551         }
19552       else
19553         {
19554           context_die = declare_in_namespace (type, context_die);
19555           need_pop = 0;
19556         }
19557
19558       if (TREE_CODE (type) == ENUMERAL_TYPE)
19559         {
19560           /* This might have been written out by the call to
19561              declare_in_namespace.  */
19562           if (!TREE_ASM_WRITTEN (type))
19563             gen_enumeration_type_die (type, context_die);
19564         }
19565       else
19566         gen_struct_or_union_type_die (type, context_die, usage);
19567
19568       if (need_pop)
19569         pop_decl_scope ();
19570
19571       /* Don't set TREE_ASM_WRITTEN on an incomplete struct; we want to fix
19572          it up if it is ever completed.  gen_*_type_die will set it for us
19573          when appropriate.  */
19574       return;
19575
19576     case VOID_TYPE:
19577     case INTEGER_TYPE:
19578     case REAL_TYPE:
19579     case FIXED_POINT_TYPE:
19580     case COMPLEX_TYPE:
19581     case BOOLEAN_TYPE:
19582       /* No DIEs needed for fundamental types.  */
19583       break;
19584
19585     case LANG_TYPE:
19586       /* Just use DW_TAG_unspecified_type.  */
19587       {
19588         dw_die_ref type_die = lookup_type_die (type);
19589         if (type_die == NULL)
19590           {
19591             tree name = TYPE_NAME (type);
19592             if (TREE_CODE (name) == TYPE_DECL)
19593               name = DECL_NAME (name);
19594             type_die = new_die (DW_TAG_unspecified_type, comp_unit_die, type);
19595             add_name_attribute (type_die, IDENTIFIER_POINTER (name));
19596             equate_type_number_to_die (type, type_die);
19597           }
19598       }
19599       break;
19600
19601     default:
19602       gcc_unreachable ();
19603     }
19604
19605   TREE_ASM_WRITTEN (type) = 1;
19606 }
19607
19608 static void
19609 gen_type_die (tree type, dw_die_ref context_die)
19610 {
19611   gen_type_die_with_usage (type, context_die, DINFO_USAGE_DIR_USE);
19612 }
19613
19614 /* Generate a DW_TAG_lexical_block DIE followed by DIEs to represent all of the
19615    things which are local to the given block.  */
19616
19617 static void
19618 gen_block_die (tree stmt, dw_die_ref context_die, int depth)
19619 {
19620   int must_output_die = 0;
19621   bool inlined_func;
19622
19623   /* Ignore blocks that are NULL.  */
19624   if (stmt == NULL_TREE)
19625     return;
19626
19627   inlined_func = inlined_function_outer_scope_p (stmt);
19628
19629   /* If the block is one fragment of a non-contiguous block, do not
19630      process the variables, since they will have been done by the
19631      origin block.  Do process subblocks.  */
19632   if (BLOCK_FRAGMENT_ORIGIN (stmt))
19633     {
19634       tree sub;
19635
19636       for (sub = BLOCK_SUBBLOCKS (stmt); sub; sub = BLOCK_CHAIN (sub))
19637         gen_block_die (sub, context_die, depth + 1);
19638
19639       return;
19640     }
19641
19642   /* Determine if we need to output any Dwarf DIEs at all to represent this
19643      block.  */
19644   if (inlined_func)
19645     /* The outer scopes for inlinings *must* always be represented.  We
19646        generate DW_TAG_inlined_subroutine DIEs for them.  (See below.) */
19647     must_output_die = 1;
19648   else
19649     {
19650       /* Determine if this block directly contains any "significant"
19651          local declarations which we will need to output DIEs for.  */
19652       if (debug_info_level > DINFO_LEVEL_TERSE)
19653         /* We are not in terse mode so *any* local declaration counts
19654            as being a "significant" one.  */
19655         must_output_die = ((BLOCK_VARS (stmt) != NULL
19656                             || BLOCK_NUM_NONLOCALIZED_VARS (stmt))
19657                            && (TREE_USED (stmt)
19658                                || TREE_ASM_WRITTEN (stmt)
19659                                || BLOCK_ABSTRACT (stmt)));
19660       else if ((TREE_USED (stmt)
19661                 || TREE_ASM_WRITTEN (stmt)
19662                 || BLOCK_ABSTRACT (stmt))
19663                && !dwarf2out_ignore_block (stmt))
19664         must_output_die = 1;
19665     }
19666
19667   /* It would be a waste of space to generate a Dwarf DW_TAG_lexical_block
19668      DIE for any block which contains no significant local declarations at
19669      all.  Rather, in such cases we just call `decls_for_scope' so that any
19670      needed Dwarf info for any sub-blocks will get properly generated. Note
19671      that in terse mode, our definition of what constitutes a "significant"
19672      local declaration gets restricted to include only inlined function
19673      instances and local (nested) function definitions.  */
19674   if (must_output_die)
19675     {
19676       if (inlined_func)
19677         {
19678           /* If STMT block is abstract, that means we have been called
19679              indirectly from dwarf2out_abstract_function.
19680              That function rightfully marks the descendent blocks (of
19681              the abstract function it is dealing with) as being abstract,
19682              precisely to prevent us from emitting any
19683              DW_TAG_inlined_subroutine DIE as a descendent
19684              of an abstract function instance. So in that case, we should
19685              not call gen_inlined_subroutine_die.
19686
19687              Later though, when cgraph asks dwarf2out to emit info
19688              for the concrete instance of the function decl into which
19689              the concrete instance of STMT got inlined, the later will lead
19690              to the generation of a DW_TAG_inlined_subroutine DIE.  */
19691           if (! BLOCK_ABSTRACT (stmt))
19692             gen_inlined_subroutine_die (stmt, context_die, depth);
19693         }
19694       else
19695         gen_lexical_block_die (stmt, context_die, depth);
19696     }
19697   else
19698     decls_for_scope (stmt, context_die, depth);
19699 }
19700
19701 /* Process variable DECL (or variable with origin ORIGIN) within
19702    block STMT and add it to CONTEXT_DIE.  */
19703 static void
19704 process_scope_var (tree stmt, tree decl, tree origin, dw_die_ref context_die)
19705 {
19706   dw_die_ref die;
19707   tree decl_or_origin = decl ? decl : origin;
19708
19709   if (TREE_CODE (decl_or_origin) == FUNCTION_DECL)
19710     die = lookup_decl_die (decl_or_origin);
19711   else if (TREE_CODE (decl_or_origin) == TYPE_DECL
19712            && TYPE_DECL_IS_STUB (decl_or_origin))
19713     die = lookup_type_die (TREE_TYPE (decl_or_origin));
19714   else
19715     die = NULL;
19716
19717   if (die != NULL && die->die_parent == NULL)
19718     add_child_die (context_die, die);
19719   else if (TREE_CODE (decl_or_origin) == IMPORTED_DECL)
19720     dwarf2out_imported_module_or_decl_1 (decl_or_origin, DECL_NAME (decl_or_origin),
19721                                          stmt, context_die);
19722   else
19723     gen_decl_die (decl, origin, context_die);
19724 }
19725
19726 /* Generate all of the decls declared within a given scope and (recursively)
19727    all of its sub-blocks.  */
19728
19729 static void
19730 decls_for_scope (tree stmt, dw_die_ref context_die, int depth)
19731 {
19732   tree decl;
19733   unsigned int i;
19734   tree subblocks;
19735
19736   /* Ignore NULL blocks.  */
19737   if (stmt == NULL_TREE)
19738     return;
19739
19740   /* Output the DIEs to represent all of the data objects and typedefs
19741      declared directly within this block but not within any nested
19742      sub-blocks.  Also, nested function and tag DIEs have been
19743      generated with a parent of NULL; fix that up now.  */
19744   for (decl = BLOCK_VARS (stmt); decl != NULL; decl = TREE_CHAIN (decl))
19745     process_scope_var (stmt, decl, NULL_TREE, context_die);
19746   for (i = 0; i < BLOCK_NUM_NONLOCALIZED_VARS (stmt); i++)
19747     process_scope_var (stmt, NULL, BLOCK_NONLOCALIZED_VAR (stmt, i),
19748                        context_die);
19749
19750   /* If we're at -g1, we're not interested in subblocks.  */
19751   if (debug_info_level <= DINFO_LEVEL_TERSE)
19752     return;
19753
19754   /* Output the DIEs to represent all sub-blocks (and the items declared
19755      therein) of this block.  */
19756   for (subblocks = BLOCK_SUBBLOCKS (stmt);
19757        subblocks != NULL;
19758        subblocks = BLOCK_CHAIN (subblocks))
19759     gen_block_die (subblocks, context_die, depth + 1);
19760 }
19761
19762 /* Is this a typedef we can avoid emitting?  */
19763
19764 static inline int
19765 is_redundant_typedef (const_tree decl)
19766 {
19767   if (TYPE_DECL_IS_STUB (decl))
19768     return 1;
19769
19770   if (DECL_ARTIFICIAL (decl)
19771       && DECL_CONTEXT (decl)
19772       && is_tagged_type (DECL_CONTEXT (decl))
19773       && TREE_CODE (TYPE_NAME (DECL_CONTEXT (decl))) == TYPE_DECL
19774       && DECL_NAME (decl) == DECL_NAME (TYPE_NAME (DECL_CONTEXT (decl))))
19775     /* Also ignore the artificial member typedef for the class name.  */
19776     return 1;
19777
19778   return 0;
19779 }
19780
19781 /* Returns the DIE for a context.  */
19782
19783 static inline dw_die_ref
19784 get_context_die (tree context)
19785 {
19786   if (context)
19787     {
19788       /* Find die that represents this context.  */
19789       if (TYPE_P (context))
19790         return force_type_die (TYPE_MAIN_VARIANT (context));
19791       else
19792         return force_decl_die (context);
19793     }
19794   return comp_unit_die;
19795 }
19796
19797 /* Returns the DIE for decl.  A DIE will always be returned.  */
19798
19799 static dw_die_ref
19800 force_decl_die (tree decl)
19801 {
19802   dw_die_ref decl_die;
19803   unsigned saved_external_flag;
19804   tree save_fn = NULL_TREE;
19805   decl_die = lookup_decl_die (decl);
19806   if (!decl_die)
19807     {
19808       dw_die_ref context_die = get_context_die (DECL_CONTEXT (decl));
19809
19810       decl_die = lookup_decl_die (decl);
19811       if (decl_die)
19812         return decl_die;
19813
19814       switch (TREE_CODE (decl))
19815         {
19816         case FUNCTION_DECL:
19817           /* Clear current_function_decl, so that gen_subprogram_die thinks
19818              that this is a declaration. At this point, we just want to force
19819              declaration die.  */
19820           save_fn = current_function_decl;
19821           current_function_decl = NULL_TREE;
19822           gen_subprogram_die (decl, context_die);
19823           current_function_decl = save_fn;
19824           break;
19825
19826         case VAR_DECL:
19827           /* Set external flag to force declaration die. Restore it after
19828            gen_decl_die() call.  */
19829           saved_external_flag = DECL_EXTERNAL (decl);
19830           DECL_EXTERNAL (decl) = 1;
19831           gen_decl_die (decl, NULL, context_die);
19832           DECL_EXTERNAL (decl) = saved_external_flag;
19833           break;
19834
19835         case NAMESPACE_DECL:
19836           if (dwarf_version >= 3 || !dwarf_strict)
19837             dwarf2out_decl (decl);
19838           else
19839             /* DWARF2 has neither DW_TAG_module, nor DW_TAG_namespace.  */
19840             decl_die = comp_unit_die;
19841           break;
19842
19843         default:
19844           gcc_unreachable ();
19845         }
19846
19847       /* We should be able to find the DIE now.  */
19848       if (!decl_die)
19849         decl_die = lookup_decl_die (decl);
19850       gcc_assert (decl_die);
19851     }
19852
19853   return decl_die;
19854 }
19855
19856 /* Returns the DIE for TYPE, that must not be a base type.  A DIE is
19857    always returned.  */
19858
19859 static dw_die_ref
19860 force_type_die (tree type)
19861 {
19862   dw_die_ref type_die;
19863
19864   type_die = lookup_type_die (type);
19865   if (!type_die)
19866     {
19867       dw_die_ref context_die = get_context_die (TYPE_CONTEXT (type));
19868
19869       type_die = modified_type_die (type, TYPE_READONLY (type),
19870                                     TYPE_VOLATILE (type), context_die);
19871       gcc_assert (type_die);
19872     }
19873   return type_die;
19874 }
19875
19876 /* Force out any required namespaces to be able to output DECL,
19877    and return the new context_die for it, if it's changed.  */
19878
19879 static dw_die_ref
19880 setup_namespace_context (tree thing, dw_die_ref context_die)
19881 {
19882   tree context = (DECL_P (thing)
19883                   ? DECL_CONTEXT (thing) : TYPE_CONTEXT (thing));
19884   if (context && TREE_CODE (context) == NAMESPACE_DECL)
19885     /* Force out the namespace.  */
19886     context_die = force_decl_die (context);
19887
19888   return context_die;
19889 }
19890
19891 /* Emit a declaration DIE for THING (which is either a DECL or a tagged
19892    type) within its namespace, if appropriate.
19893
19894    For compatibility with older debuggers, namespace DIEs only contain
19895    declarations; all definitions are emitted at CU scope.  */
19896
19897 static dw_die_ref
19898 declare_in_namespace (tree thing, dw_die_ref context_die)
19899 {
19900   dw_die_ref ns_context;
19901
19902   if (debug_info_level <= DINFO_LEVEL_TERSE)
19903     return context_die;
19904
19905   /* If this decl is from an inlined function, then don't try to emit it in its
19906      namespace, as we will get confused.  It would have already been emitted
19907      when the abstract instance of the inline function was emitted anyways.  */
19908   if (DECL_P (thing) && DECL_ABSTRACT_ORIGIN (thing))
19909     return context_die;
19910
19911   ns_context = setup_namespace_context (thing, context_die);
19912
19913   if (ns_context != context_die)
19914     {
19915       if (is_fortran ())
19916         return ns_context;
19917       if (DECL_P (thing))
19918         gen_decl_die (thing, NULL, ns_context);
19919       else
19920         gen_type_die (thing, ns_context);
19921     }
19922   return context_die;
19923 }
19924
19925 /* Generate a DIE for a namespace or namespace alias.  */
19926
19927 static void
19928 gen_namespace_die (tree decl, dw_die_ref context_die)
19929 {
19930   dw_die_ref namespace_die;
19931
19932   /* Namespace aliases have a DECL_ABSTRACT_ORIGIN of the namespace
19933      they are an alias of.  */
19934   if (DECL_ABSTRACT_ORIGIN (decl) == NULL)
19935     {
19936       /* Output a real namespace or module.  */
19937       context_die = setup_namespace_context (decl, comp_unit_die);
19938       namespace_die = new_die (is_fortran ()
19939                                ? DW_TAG_module : DW_TAG_namespace,
19940                                context_die, decl);
19941       /* For Fortran modules defined in different CU don't add src coords.  */
19942       if (namespace_die->die_tag == DW_TAG_module && DECL_EXTERNAL (decl))
19943         {
19944           const char *name = dwarf2_name (decl, 0);
19945           if (name)
19946             add_name_attribute (namespace_die, name);
19947         }
19948       else
19949         add_name_and_src_coords_attributes (namespace_die, decl);
19950       if (DECL_EXTERNAL (decl))
19951         add_AT_flag (namespace_die, DW_AT_declaration, 1);
19952       equate_decl_number_to_die (decl, namespace_die);
19953     }
19954   else
19955     {
19956       /* Output a namespace alias.  */
19957
19958       /* Force out the namespace we are an alias of, if necessary.  */
19959       dw_die_ref origin_die
19960         = force_decl_die (DECL_ABSTRACT_ORIGIN (decl));
19961
19962       if (DECL_CONTEXT (decl) == NULL_TREE
19963           || TREE_CODE (DECL_CONTEXT (decl)) == NAMESPACE_DECL)
19964         context_die = setup_namespace_context (decl, comp_unit_die);
19965       /* Now create the namespace alias DIE.  */
19966       namespace_die = new_die (DW_TAG_imported_declaration, context_die, decl);
19967       add_name_and_src_coords_attributes (namespace_die, decl);
19968       add_AT_die_ref (namespace_die, DW_AT_import, origin_die);
19969       equate_decl_number_to_die (decl, namespace_die);
19970     }
19971 }
19972
19973 /* Generate Dwarf debug information for a decl described by DECL.  */
19974
19975 static void
19976 gen_decl_die (tree decl, tree origin, dw_die_ref context_die)
19977 {
19978   tree decl_or_origin = decl ? decl : origin;
19979   tree class_origin = NULL, ultimate_origin;
19980
19981   if (DECL_P (decl_or_origin) && DECL_IGNORED_P (decl_or_origin))
19982     return;
19983
19984   switch (TREE_CODE (decl_or_origin))
19985     {
19986     case ERROR_MARK:
19987       break;
19988
19989     case CONST_DECL:
19990       if (!is_fortran ())
19991         {
19992           /* The individual enumerators of an enum type get output when we output
19993              the Dwarf representation of the relevant enum type itself.  */
19994           break;
19995         }
19996
19997       /* Emit its type.  */
19998       gen_type_die (TREE_TYPE (decl), context_die);
19999
20000       /* And its containing namespace.  */
20001       context_die = declare_in_namespace (decl, context_die);
20002
20003       gen_const_die (decl, context_die);
20004       break;
20005
20006     case FUNCTION_DECL:
20007       /* Don't output any DIEs to represent mere function declarations,
20008          unless they are class members or explicit block externs.  */
20009       if (DECL_INITIAL (decl_or_origin) == NULL_TREE
20010           && DECL_CONTEXT (decl_or_origin) == NULL_TREE
20011           && (current_function_decl == NULL_TREE
20012               || DECL_ARTIFICIAL (decl_or_origin)))
20013         break;
20014
20015 #if 0
20016       /* FIXME */
20017       /* This doesn't work because the C frontend sets DECL_ABSTRACT_ORIGIN
20018          on local redeclarations of global functions.  That seems broken.  */
20019       if (current_function_decl != decl)
20020         /* This is only a declaration.  */;
20021 #endif
20022
20023       /* If we're emitting a clone, emit info for the abstract instance.  */
20024       if (origin || DECL_ORIGIN (decl) != decl)
20025         dwarf2out_abstract_function (origin
20026                                      ? DECL_ORIGIN (origin)
20027                                      : DECL_ABSTRACT_ORIGIN (decl));
20028
20029       /* If we're emitting an out-of-line copy of an inline function,
20030          emit info for the abstract instance and set up to refer to it.  */
20031       else if (cgraph_function_possibly_inlined_p (decl)
20032                && ! DECL_ABSTRACT (decl)
20033                && ! class_or_namespace_scope_p (context_die)
20034                /* dwarf2out_abstract_function won't emit a die if this is just
20035                   a declaration.  We must avoid setting DECL_ABSTRACT_ORIGIN in
20036                   that case, because that works only if we have a die.  */
20037                && DECL_INITIAL (decl) != NULL_TREE)
20038         {
20039           dwarf2out_abstract_function (decl);
20040           set_decl_origin_self (decl);
20041         }
20042
20043       /* Otherwise we're emitting the primary DIE for this decl.  */
20044       else if (debug_info_level > DINFO_LEVEL_TERSE)
20045         {
20046           /* Before we describe the FUNCTION_DECL itself, make sure that we
20047              have described its return type.  */
20048           gen_type_die (TREE_TYPE (TREE_TYPE (decl)), context_die);
20049
20050           /* And its virtual context.  */
20051           if (DECL_VINDEX (decl) != NULL_TREE)
20052             gen_type_die (DECL_CONTEXT (decl), context_die);
20053
20054           /* And its containing type.  */
20055           if (!origin)
20056             origin = decl_class_context (decl);
20057           if (origin != NULL_TREE)
20058             gen_type_die_for_member (origin, decl, context_die);
20059
20060           /* And its containing namespace.  */
20061           context_die = declare_in_namespace (decl, context_die);
20062         }
20063
20064       /* Now output a DIE to represent the function itself.  */
20065       if (decl)
20066         gen_subprogram_die (decl, context_die);
20067       break;
20068
20069     case TYPE_DECL:
20070       /* If we are in terse mode, don't generate any DIEs to represent any
20071          actual typedefs.  */
20072       if (debug_info_level <= DINFO_LEVEL_TERSE)
20073         break;
20074
20075       /* In the special case of a TYPE_DECL node representing the declaration
20076          of some type tag, if the given TYPE_DECL is marked as having been
20077          instantiated from some other (original) TYPE_DECL node (e.g. one which
20078          was generated within the original definition of an inline function) we
20079          used to generate a special (abbreviated) DW_TAG_structure_type,
20080          DW_TAG_union_type, or DW_TAG_enumeration_type DIE here.  But nothing
20081          should be actually referencing those DIEs, as variable DIEs with that
20082          type would be emitted already in the abstract origin, so it was always
20083          removed during unused type prunning.  Don't add anything in this
20084          case.  */
20085       if (TYPE_DECL_IS_STUB (decl) && decl_ultimate_origin (decl) != NULL_TREE)
20086         break;
20087
20088       if (is_redundant_typedef (decl))
20089         gen_type_die (TREE_TYPE (decl), context_die);
20090       else
20091         /* Output a DIE to represent the typedef itself.  */
20092         gen_typedef_die (decl, context_die);
20093       break;
20094
20095     case LABEL_DECL:
20096       if (debug_info_level >= DINFO_LEVEL_NORMAL)
20097         gen_label_die (decl, context_die);
20098       break;
20099
20100     case VAR_DECL:
20101     case RESULT_DECL:
20102       /* If we are in terse mode, don't generate any DIEs to represent any
20103          variable declarations or definitions.  */
20104       if (debug_info_level <= DINFO_LEVEL_TERSE)
20105         break;
20106
20107       /* Output any DIEs that are needed to specify the type of this data
20108          object.  */
20109       if (decl_by_reference_p (decl_or_origin))
20110         gen_type_die (TREE_TYPE (TREE_TYPE (decl_or_origin)), context_die);
20111       else
20112         gen_type_die (TREE_TYPE (decl_or_origin), context_die);
20113
20114       /* And its containing type.  */
20115       class_origin = decl_class_context (decl_or_origin);
20116       if (class_origin != NULL_TREE)
20117         gen_type_die_for_member (class_origin, decl_or_origin, context_die);
20118
20119       /* And its containing namespace.  */
20120       context_die = declare_in_namespace (decl_or_origin, context_die);
20121
20122       /* Now output the DIE to represent the data object itself.  This gets
20123          complicated because of the possibility that the VAR_DECL really
20124          represents an inlined instance of a formal parameter for an inline
20125          function.  */
20126       ultimate_origin = decl_ultimate_origin (decl_or_origin);
20127       if (ultimate_origin != NULL_TREE
20128           && TREE_CODE (ultimate_origin) == PARM_DECL)
20129         gen_formal_parameter_die (decl, origin,
20130                                   true /* Emit name attribute.  */,
20131                                   context_die);
20132       else
20133         gen_variable_die (decl, origin, context_die);
20134       break;
20135
20136     case FIELD_DECL:
20137       /* Ignore the nameless fields that are used to skip bits but handle C++
20138          anonymous unions and structs.  */
20139       if (DECL_NAME (decl) != NULL_TREE
20140           || TREE_CODE (TREE_TYPE (decl)) == UNION_TYPE
20141           || TREE_CODE (TREE_TYPE (decl)) == RECORD_TYPE)
20142         {
20143           gen_type_die (member_declared_type (decl), context_die);
20144           gen_field_die (decl, context_die);
20145         }
20146       break;
20147
20148     case PARM_DECL:
20149       if (DECL_BY_REFERENCE (decl_or_origin))
20150         gen_type_die (TREE_TYPE (TREE_TYPE (decl_or_origin)), context_die);
20151       else
20152         gen_type_die (TREE_TYPE (decl_or_origin), context_die);
20153       gen_formal_parameter_die (decl, origin,
20154                                 true /* Emit name attribute.  */,
20155                                 context_die);
20156       break;
20157
20158     case NAMESPACE_DECL:
20159     case IMPORTED_DECL:
20160       if (dwarf_version >= 3 || !dwarf_strict)
20161         gen_namespace_die (decl, context_die);
20162       break;
20163
20164     default:
20165       /* Probably some frontend-internal decl.  Assume we don't care.  */
20166       gcc_assert ((int)TREE_CODE (decl) > NUM_TREE_CODES);
20167       break;
20168     }
20169 }
20170 \f
20171 /* Output debug information for global decl DECL.  Called from toplev.c after
20172    compilation proper has finished.  */
20173
20174 static void
20175 dwarf2out_global_decl (tree decl)
20176 {
20177   /* Output DWARF2 information for file-scope tentative data object
20178      declarations, file-scope (extern) function declarations (which
20179      had no corresponding body) and file-scope tagged type declarations
20180      and definitions which have not yet been forced out.  */
20181   if (TREE_CODE (decl) != FUNCTION_DECL || !DECL_INITIAL (decl))
20182     dwarf2out_decl (decl);
20183 }
20184
20185 /* Output debug information for type decl DECL.  Called from toplev.c
20186    and from language front ends (to record built-in types).  */
20187 static void
20188 dwarf2out_type_decl (tree decl, int local)
20189 {
20190   if (!local)
20191     dwarf2out_decl (decl);
20192 }
20193
20194 /* Output debug information for imported module or decl DECL.
20195    NAME is non-NULL name in the lexical block if the decl has been renamed.
20196    LEXICAL_BLOCK is the lexical block (which TREE_CODE is a BLOCK)
20197    that DECL belongs to.
20198    LEXICAL_BLOCK_DIE is the DIE of LEXICAL_BLOCK.  */
20199 static void
20200 dwarf2out_imported_module_or_decl_1 (tree decl,
20201                                      tree name,
20202                                      tree lexical_block,
20203                                      dw_die_ref lexical_block_die)
20204 {
20205   expanded_location xloc;
20206   dw_die_ref imported_die = NULL;
20207   dw_die_ref at_import_die;
20208
20209   if (TREE_CODE (decl) == IMPORTED_DECL)
20210     {
20211       xloc = expand_location (DECL_SOURCE_LOCATION (decl));
20212       decl = IMPORTED_DECL_ASSOCIATED_DECL (decl);
20213       gcc_assert (decl);
20214     }
20215   else
20216     xloc = expand_location (input_location);
20217
20218   if (TREE_CODE (decl) == TYPE_DECL || TREE_CODE (decl) == CONST_DECL)
20219     {
20220       at_import_die = force_type_die (TREE_TYPE (decl));
20221       /* For namespace N { typedef void T; } using N::T; base_type_die
20222          returns NULL, but DW_TAG_imported_declaration requires
20223          the DW_AT_import tag.  Force creation of DW_TAG_typedef.  */
20224       if (!at_import_die)
20225         {
20226           gcc_assert (TREE_CODE (decl) == TYPE_DECL);
20227           gen_typedef_die (decl, get_context_die (DECL_CONTEXT (decl)));
20228           at_import_die = lookup_type_die (TREE_TYPE (decl));
20229           gcc_assert (at_import_die);
20230         }
20231     }
20232   else
20233     {
20234       at_import_die = lookup_decl_die (decl);
20235       if (!at_import_die)
20236         {
20237           /* If we're trying to avoid duplicate debug info, we may not have
20238              emitted the member decl for this field.  Emit it now.  */
20239           if (TREE_CODE (decl) == FIELD_DECL)
20240             {
20241               tree type = DECL_CONTEXT (decl);
20242
20243               if (TYPE_CONTEXT (type)
20244                   && TYPE_P (TYPE_CONTEXT (type))
20245                   && !should_emit_struct_debug (TYPE_CONTEXT (type),
20246                                                 DINFO_USAGE_DIR_USE))
20247                 return;
20248               gen_type_die_for_member (type, decl,
20249                                        get_context_die (TYPE_CONTEXT (type)));
20250             }
20251           at_import_die = force_decl_die (decl);
20252         }
20253     }
20254
20255   if (TREE_CODE (decl) == NAMESPACE_DECL)
20256     {
20257       if (dwarf_version >= 3 || !dwarf_strict)
20258         imported_die = new_die (DW_TAG_imported_module,
20259                                 lexical_block_die,
20260                                 lexical_block);
20261       else
20262         return;
20263     }
20264   else
20265     imported_die = new_die (DW_TAG_imported_declaration,
20266                             lexical_block_die,
20267                             lexical_block);
20268
20269   add_AT_file (imported_die, DW_AT_decl_file, lookup_filename (xloc.file));
20270   add_AT_unsigned (imported_die, DW_AT_decl_line, xloc.line);
20271   if (name)
20272     add_AT_string (imported_die, DW_AT_name,
20273                    IDENTIFIER_POINTER (name));
20274   add_AT_die_ref (imported_die, DW_AT_import, at_import_die);
20275 }
20276
20277 /* Output debug information for imported module or decl DECL.
20278    NAME is non-NULL name in context if the decl has been renamed.
20279    CHILD is true if decl is one of the renamed decls as part of
20280    importing whole module.  */
20281
20282 static void
20283 dwarf2out_imported_module_or_decl (tree decl, tree name, tree context,
20284                                    bool child)
20285 {
20286   /* dw_die_ref at_import_die;  */
20287   dw_die_ref scope_die;
20288
20289   if (debug_info_level <= DINFO_LEVEL_TERSE)
20290     return;
20291
20292   gcc_assert (decl);
20293
20294   /* To emit DW_TAG_imported_module or DW_TAG_imported_decl, we need two DIEs.
20295      We need decl DIE for reference and scope die. First, get DIE for the decl
20296      itself.  */
20297
20298   /* Get the scope die for decl context. Use comp_unit_die for global module
20299      or decl. If die is not found for non globals, force new die.  */
20300   if (context
20301       && TYPE_P (context)
20302       && !should_emit_struct_debug (context, DINFO_USAGE_DIR_USE))
20303     return;
20304
20305   if (!(dwarf_version >= 3 || !dwarf_strict))
20306     return;
20307
20308   scope_die = get_context_die (context);
20309
20310   if (child)
20311     {
20312       gcc_assert (scope_die->die_child);
20313       gcc_assert (scope_die->die_child->die_tag == DW_TAG_imported_module);
20314       gcc_assert (TREE_CODE (decl) != NAMESPACE_DECL);
20315       scope_die = scope_die->die_child;
20316     }
20317
20318   /* OK, now we have DIEs for decl as well as scope. Emit imported die.  */
20319   dwarf2out_imported_module_or_decl_1 (decl, name, context, scope_die);
20320
20321 }
20322
20323 /* Write the debugging output for DECL.  */
20324
20325 void
20326 dwarf2out_decl (tree decl)
20327 {
20328   dw_die_ref context_die = comp_unit_die;
20329
20330   switch (TREE_CODE (decl))
20331     {
20332     case ERROR_MARK:
20333       return;
20334
20335     case FUNCTION_DECL:
20336       /* What we would really like to do here is to filter out all mere
20337          file-scope declarations of file-scope functions which are never
20338          referenced later within this translation unit (and keep all of ones
20339          that *are* referenced later on) but we aren't clairvoyant, so we have
20340          no idea which functions will be referenced in the future (i.e. later
20341          on within the current translation unit). So here we just ignore all
20342          file-scope function declarations which are not also definitions.  If
20343          and when the debugger needs to know something about these functions,
20344          it will have to hunt around and find the DWARF information associated
20345          with the definition of the function.
20346
20347          We can't just check DECL_EXTERNAL to find out which FUNCTION_DECL
20348          nodes represent definitions and which ones represent mere
20349          declarations.  We have to check DECL_INITIAL instead. That's because
20350          the C front-end supports some weird semantics for "extern inline"
20351          function definitions.  These can get inlined within the current
20352          translation unit (and thus, we need to generate Dwarf info for their
20353          abstract instances so that the Dwarf info for the concrete inlined
20354          instances can have something to refer to) but the compiler never
20355          generates any out-of-lines instances of such things (despite the fact
20356          that they *are* definitions).
20357
20358          The important point is that the C front-end marks these "extern
20359          inline" functions as DECL_EXTERNAL, but we need to generate DWARF for
20360          them anyway. Note that the C++ front-end also plays some similar games
20361          for inline function definitions appearing within include files which
20362          also contain `#pragma interface' pragmas.  */
20363       if (DECL_INITIAL (decl) == NULL_TREE)
20364         return;
20365
20366       /* If we're a nested function, initially use a parent of NULL; if we're
20367          a plain function, this will be fixed up in decls_for_scope.  If
20368          we're a method, it will be ignored, since we already have a DIE.  */
20369       if (decl_function_context (decl)
20370           /* But if we're in terse mode, we don't care about scope.  */
20371           && debug_info_level > DINFO_LEVEL_TERSE)
20372         context_die = NULL;
20373       break;
20374
20375     case VAR_DECL:
20376       /* Ignore this VAR_DECL if it refers to a file-scope extern data object
20377          declaration and if the declaration was never even referenced from
20378          within this entire compilation unit.  We suppress these DIEs in
20379          order to save space in the .debug section (by eliminating entries
20380          which are probably useless).  Note that we must not suppress
20381          block-local extern declarations (whether used or not) because that
20382          would screw-up the debugger's name lookup mechanism and cause it to
20383          miss things which really ought to be in scope at a given point.  */
20384       if (DECL_EXTERNAL (decl) && !TREE_USED (decl))
20385         return;
20386
20387       /* For local statics lookup proper context die.  */
20388       if (TREE_STATIC (decl) && decl_function_context (decl))
20389         context_die = lookup_decl_die (DECL_CONTEXT (decl));
20390
20391       /* If we are in terse mode, don't generate any DIEs to represent any
20392          variable declarations or definitions.  */
20393       if (debug_info_level <= DINFO_LEVEL_TERSE)
20394         return;
20395       break;
20396
20397     case CONST_DECL:
20398       if (debug_info_level <= DINFO_LEVEL_TERSE)
20399         return;
20400       if (!is_fortran ())
20401         return;
20402       if (TREE_STATIC (decl) && decl_function_context (decl))
20403         context_die = lookup_decl_die (DECL_CONTEXT (decl));
20404       break;
20405
20406     case NAMESPACE_DECL:
20407     case IMPORTED_DECL:
20408       if (debug_info_level <= DINFO_LEVEL_TERSE)
20409         return;
20410       if (lookup_decl_die (decl) != NULL)
20411         return;
20412       break;
20413
20414     case TYPE_DECL:
20415       /* Don't emit stubs for types unless they are needed by other DIEs.  */
20416       if (TYPE_DECL_SUPPRESS_DEBUG (decl))
20417         return;
20418
20419       /* Don't bother trying to generate any DIEs to represent any of the
20420          normal built-in types for the language we are compiling.  */
20421       if (DECL_IS_BUILTIN (decl))
20422         {
20423           /* OK, we need to generate one for `bool' so GDB knows what type
20424              comparisons have.  */
20425           if (is_cxx ()
20426               && TREE_CODE (TREE_TYPE (decl)) == BOOLEAN_TYPE
20427               && ! DECL_IGNORED_P (decl))
20428             modified_type_die (TREE_TYPE (decl), 0, 0, NULL);
20429
20430           return;
20431         }
20432
20433       /* If we are in terse mode, don't generate any DIEs for types.  */
20434       if (debug_info_level <= DINFO_LEVEL_TERSE)
20435         return;
20436
20437       /* If we're a function-scope tag, initially use a parent of NULL;
20438          this will be fixed up in decls_for_scope.  */
20439       if (decl_function_context (decl))
20440         context_die = NULL;
20441
20442       break;
20443
20444     default:
20445       return;
20446     }
20447
20448   gen_decl_die (decl, NULL, context_die);
20449 }
20450
20451 /* Write the debugging output for DECL.  */
20452
20453 static void
20454 dwarf2out_function_decl (tree decl)
20455 {
20456   dwarf2out_decl (decl);
20457
20458   htab_empty (decl_loc_table);
20459 }
20460
20461 /* Output a marker (i.e. a label) for the beginning of the generated code for
20462    a lexical block.  */
20463
20464 static void
20465 dwarf2out_begin_block (unsigned int line ATTRIBUTE_UNUSED,
20466                        unsigned int blocknum)
20467 {
20468   switch_to_section (current_function_section ());
20469   ASM_OUTPUT_DEBUG_LABEL (asm_out_file, BLOCK_BEGIN_LABEL, blocknum);
20470 }
20471
20472 /* Output a marker (i.e. a label) for the end of the generated code for a
20473    lexical block.  */
20474
20475 static void
20476 dwarf2out_end_block (unsigned int line ATTRIBUTE_UNUSED, unsigned int blocknum)
20477 {
20478   switch_to_section (current_function_section ());
20479   ASM_OUTPUT_DEBUG_LABEL (asm_out_file, BLOCK_END_LABEL, blocknum);
20480 }
20481
20482 /* Returns nonzero if it is appropriate not to emit any debugging
20483    information for BLOCK, because it doesn't contain any instructions.
20484
20485    Don't allow this for blocks with nested functions or local classes
20486    as we would end up with orphans, and in the presence of scheduling
20487    we may end up calling them anyway.  */
20488
20489 static bool
20490 dwarf2out_ignore_block (const_tree block)
20491 {
20492   tree decl;
20493   unsigned int i;
20494
20495   for (decl = BLOCK_VARS (block); decl; decl = TREE_CHAIN (decl))
20496     if (TREE_CODE (decl) == FUNCTION_DECL
20497         || (TREE_CODE (decl) == TYPE_DECL && TYPE_DECL_IS_STUB (decl)))
20498       return 0;
20499   for (i = 0; i < BLOCK_NUM_NONLOCALIZED_VARS (block); i++)
20500     {
20501       decl = BLOCK_NONLOCALIZED_VAR (block, i);
20502       if (TREE_CODE (decl) == FUNCTION_DECL
20503           || (TREE_CODE (decl) == TYPE_DECL && TYPE_DECL_IS_STUB (decl)))
20504       return 0;
20505     }
20506
20507   return 1;
20508 }
20509
20510 /* Hash table routines for file_hash.  */
20511
20512 static int
20513 file_table_eq (const void *p1_p, const void *p2_p)
20514 {
20515   const struct dwarf_file_data *const p1 =
20516     (const struct dwarf_file_data *) p1_p;
20517   const char *const p2 = (const char *) p2_p;
20518   return strcmp (p1->filename, p2) == 0;
20519 }
20520
20521 static hashval_t
20522 file_table_hash (const void *p_p)
20523 {
20524   const struct dwarf_file_data *const p = (const struct dwarf_file_data *) p_p;
20525   return htab_hash_string (p->filename);
20526 }
20527
20528 /* Lookup FILE_NAME (in the list of filenames that we know about here in
20529    dwarf2out.c) and return its "index".  The index of each (known) filename is
20530    just a unique number which is associated with only that one filename.  We
20531    need such numbers for the sake of generating labels (in the .debug_sfnames
20532    section) and references to those files numbers (in the .debug_srcinfo
20533    and.debug_macinfo sections).  If the filename given as an argument is not
20534    found in our current list, add it to the list and assign it the next
20535    available unique index number.  In order to speed up searches, we remember
20536    the index of the filename was looked up last.  This handles the majority of
20537    all searches.  */
20538
20539 static struct dwarf_file_data *
20540 lookup_filename (const char *file_name)
20541 {
20542   void ** slot;
20543   struct dwarf_file_data * created;
20544
20545   /* Check to see if the file name that was searched on the previous
20546      call matches this file name.  If so, return the index.  */
20547   if (file_table_last_lookup
20548       && (file_name == file_table_last_lookup->filename
20549           || strcmp (file_table_last_lookup->filename, file_name) == 0))
20550     return file_table_last_lookup;
20551
20552   /* Didn't match the previous lookup, search the table.  */
20553   slot = htab_find_slot_with_hash (file_table, file_name,
20554                                    htab_hash_string (file_name), INSERT);
20555   if (*slot)
20556     return (struct dwarf_file_data *) *slot;
20557
20558   created = GGC_NEW (struct dwarf_file_data);
20559   created->filename = file_name;
20560   created->emitted_number = 0;
20561   *slot = created;
20562   return created;
20563 }
20564
20565 /* If the assembler will construct the file table, then translate the compiler
20566    internal file table number into the assembler file table number, and emit
20567    a .file directive if we haven't already emitted one yet.  The file table
20568    numbers are different because we prune debug info for unused variables and
20569    types, which may include filenames.  */
20570
20571 static int
20572 maybe_emit_file (struct dwarf_file_data * fd)
20573 {
20574   if (! fd->emitted_number)
20575     {
20576       if (last_emitted_file)
20577         fd->emitted_number = last_emitted_file->emitted_number + 1;
20578       else
20579         fd->emitted_number = 1;
20580       last_emitted_file = fd;
20581
20582       if (DWARF2_ASM_LINE_DEBUG_INFO)
20583         {
20584           fprintf (asm_out_file, "\t.file %u ", fd->emitted_number);
20585           output_quoted_string (asm_out_file,
20586                                 remap_debug_filename (fd->filename));
20587           fputc ('\n', asm_out_file);
20588         }
20589     }
20590
20591   return fd->emitted_number;
20592 }
20593
20594 /* Schedule generation of a DW_AT_const_value attribute to DIE.
20595    That generation should happen after function debug info has been
20596    generated. The value of the attribute is the constant value of ARG.  */
20597
20598 static void
20599 append_entry_to_tmpl_value_parm_die_table (dw_die_ref die, tree arg)
20600 {
20601   die_arg_entry entry;
20602
20603   if (!die || !arg)
20604     return;
20605
20606   if (!tmpl_value_parm_die_table)
20607     tmpl_value_parm_die_table
20608       = VEC_alloc (die_arg_entry, gc, 32);
20609
20610   entry.die = die;
20611   entry.arg = arg;
20612   VEC_safe_push (die_arg_entry, gc,
20613                  tmpl_value_parm_die_table,
20614                  &entry);
20615 }
20616
20617 /* Add a DW_AT_const_value attribute to DIEs that were scheduled
20618    by append_entry_to_tmpl_value_parm_die_table. This function must
20619    be called after function DIEs have been generated.  */
20620
20621 static void
20622 gen_remaining_tmpl_value_param_die_attribute (void)
20623 {
20624   if (tmpl_value_parm_die_table)
20625     {
20626       unsigned i;
20627       die_arg_entry *e;
20628
20629       for (i = 0;
20630            VEC_iterate (die_arg_entry, tmpl_value_parm_die_table, i, e);
20631            i++)
20632         tree_add_const_value_attribute (e->die, e->arg);
20633     }
20634 }
20635
20636
20637 /* Replace DW_AT_name for the decl with name.  */
20638
20639 static void
20640 dwarf2out_set_name (tree decl, tree name)
20641 {
20642   dw_die_ref die;
20643   dw_attr_ref attr;
20644   const char *dname;
20645
20646   die = TYPE_SYMTAB_DIE (decl);
20647   if (!die)
20648     return;
20649
20650   dname = dwarf2_name (name, 0);
20651   if (!dname)
20652     return;
20653
20654   attr = get_AT (die, DW_AT_name);
20655   if (attr)
20656     {
20657       struct indirect_string_node *node;
20658
20659       node = find_AT_string (dname);
20660       /* replace the string.  */
20661       attr->dw_attr_val.v.val_str = node;
20662     }
20663
20664   else
20665     add_name_attribute (die, dname);
20666 }
20667
20668 /* Called by the final INSN scan whenever we see a direct function call.
20669    Make an entry into the direct call table, recording the point of call
20670    and a reference to the target function's debug entry.  */
20671
20672 static void
20673 dwarf2out_direct_call (tree targ)
20674 {
20675   dcall_entry e;
20676   tree origin = decl_ultimate_origin (targ);
20677
20678   /* If this is a clone, use the abstract origin as the target.  */
20679   if (origin)
20680     targ = origin;
20681
20682   e.poc_label_num = poc_label_num++;
20683   e.poc_decl = current_function_decl;
20684   e.targ_die = force_decl_die (targ);
20685   VEC_safe_push (dcall_entry, gc, dcall_table, &e);
20686
20687   /* Drop a label at the return point to mark the point of call.  */
20688   ASM_OUTPUT_DEBUG_LABEL (asm_out_file, "LPOC", e.poc_label_num);
20689 }
20690
20691 /* Returns a hash value for X (which really is a struct vcall_insn).  */
20692
20693 static hashval_t
20694 vcall_insn_table_hash (const void *x)
20695 {
20696   return (hashval_t) ((const struct vcall_insn *) x)->insn_uid;
20697 }
20698
20699 /* Return nonzero if insn_uid of struct vcall_insn *X is the same as
20700    insnd_uid of *Y.  */
20701
20702 static int
20703 vcall_insn_table_eq (const void *x, const void *y)
20704 {
20705   return (((const struct vcall_insn *) x)->insn_uid
20706           == ((const struct vcall_insn *) y)->insn_uid);
20707 }
20708
20709 /* Associate VTABLE_SLOT with INSN_UID in the VCALL_INSN_TABLE.  */
20710
20711 static void
20712 store_vcall_insn (unsigned int vtable_slot, int insn_uid)
20713 {
20714   struct vcall_insn *item = GGC_NEW (struct vcall_insn);
20715   struct vcall_insn **slot;
20716
20717   gcc_assert (item);
20718   item->insn_uid = insn_uid;
20719   item->vtable_slot = vtable_slot;
20720   slot = (struct vcall_insn **)
20721       htab_find_slot_with_hash (vcall_insn_table, &item,
20722                                 (hashval_t) insn_uid, INSERT);
20723   *slot = item;
20724 }
20725
20726 /* Return the VTABLE_SLOT associated with INSN_UID.  */
20727
20728 static unsigned int
20729 lookup_vcall_insn (unsigned int insn_uid)
20730 {
20731   struct vcall_insn item;
20732   struct vcall_insn *p;
20733
20734   item.insn_uid = insn_uid;
20735   item.vtable_slot = 0;
20736   p = (struct vcall_insn *) htab_find_with_hash (vcall_insn_table,
20737                                                  (void *) &item,
20738                                                  (hashval_t) insn_uid);
20739   if (p == NULL)
20740     return (unsigned int) -1;
20741   return p->vtable_slot;
20742 }
20743
20744
20745 /* Called when lowering indirect calls to RTL.  We make a note of INSN_UID
20746    and the OBJ_TYPE_REF_TOKEN from ADDR.  For C++ virtual calls, the token
20747    is the vtable slot index that we will need to put in the virtual call
20748    table later.  */
20749
20750 static void
20751 dwarf2out_virtual_call_token (tree addr, int insn_uid)
20752 {
20753   if (is_cxx() && TREE_CODE (addr) == OBJ_TYPE_REF)
20754     {
20755       tree token = OBJ_TYPE_REF_TOKEN (addr);
20756       if (TREE_CODE (token) == INTEGER_CST)
20757         store_vcall_insn (TREE_INT_CST_LOW (token), insn_uid);
20758     }
20759 }
20760
20761 /* Called when scheduling RTL, when a CALL_INSN is split.  Copies the
20762    OBJ_TYPE_REF_TOKEN previously associated with OLD_INSN and associates it
20763    with NEW_INSN.  */
20764
20765 static void
20766 dwarf2out_copy_call_info (rtx old_insn, rtx new_insn)
20767 {
20768   unsigned int vtable_slot = lookup_vcall_insn (INSN_UID (old_insn));
20769
20770   if (vtable_slot != (unsigned int) -1)
20771     store_vcall_insn (vtable_slot, INSN_UID (new_insn));
20772 }
20773
20774 /* Called by the final INSN scan whenever we see a virtual function call.
20775    Make an entry into the virtual call table, recording the point of call
20776    and the slot index of the vtable entry used to call the virtual member
20777    function.  The slot index was associated with the INSN_UID during the
20778    lowering to RTL.  */
20779
20780 static void
20781 dwarf2out_virtual_call (int insn_uid)
20782 {
20783   unsigned int vtable_slot = lookup_vcall_insn (insn_uid);
20784   vcall_entry e;
20785
20786   if (vtable_slot == (unsigned int) -1)
20787     return;
20788
20789   e.poc_label_num = poc_label_num++;
20790   e.vtable_slot = vtable_slot;
20791   VEC_safe_push (vcall_entry, gc, vcall_table, &e);
20792
20793   /* Drop a label at the return point to mark the point of call.  */
20794   ASM_OUTPUT_DEBUG_LABEL (asm_out_file, "LPOC", e.poc_label_num);
20795 }
20796
20797 /* Called by the final INSN scan whenever we see a var location.  We
20798    use it to drop labels in the right places, and throw the location in
20799    our lookup table.  */
20800
20801 static void
20802 dwarf2out_var_location (rtx loc_note)
20803 {
20804   char loclabel[MAX_ARTIFICIAL_LABEL_BYTES + 2];
20805   struct var_loc_node *newloc;
20806   rtx next_real;
20807   static const char *last_label;
20808   static const char *last_postcall_label;
20809   static bool last_in_cold_section_p;
20810   tree decl;
20811
20812   if (!DECL_P (NOTE_VAR_LOCATION_DECL (loc_note)))
20813     return;
20814
20815   next_real = next_real_insn (loc_note);
20816   /* If there are no instructions which would be affected by this note,
20817      don't do anything.  */
20818   if (next_real == NULL_RTX)
20819     return;
20820
20821   /* If there were any real insns between note we processed last time
20822      and this note (or if it is the first note), clear
20823      last_{,postcall_}label so that they are not reused this time.  */
20824   if (last_var_location_insn == NULL_RTX
20825       || last_var_location_insn != next_real
20826       || last_in_cold_section_p != in_cold_section_p)
20827     {
20828       last_label = NULL;
20829       last_postcall_label = NULL;
20830     }
20831
20832   decl = NOTE_VAR_LOCATION_DECL (loc_note);
20833   newloc = add_var_loc_to_decl (decl, loc_note,
20834                                 NOTE_DURING_CALL_P (loc_note)
20835                                 ? last_postcall_label : last_label);
20836   if (newloc == NULL)
20837     return;
20838
20839   /* If there were no real insns between note we processed last time
20840      and this note, use the label we emitted last time.  Otherwise
20841      create a new label and emit it.  */
20842   if (last_label == NULL)
20843     {
20844       ASM_GENERATE_INTERNAL_LABEL (loclabel, "LVL", loclabel_num);
20845       ASM_OUTPUT_DEBUG_LABEL (asm_out_file, "LVL", loclabel_num);
20846       loclabel_num++;
20847       last_label = ggc_strdup (loclabel);
20848     }
20849
20850   if (!NOTE_DURING_CALL_P (loc_note))
20851     newloc->label = last_label;
20852   else
20853     {
20854       if (!last_postcall_label)
20855         {
20856           sprintf (loclabel, "%s-1", last_label);
20857           last_postcall_label = ggc_strdup (loclabel);
20858         }
20859       newloc->label = last_postcall_label;
20860     }
20861
20862   last_var_location_insn = next_real;
20863   last_in_cold_section_p = in_cold_section_p;
20864 }
20865
20866 /* We need to reset the locations at the beginning of each
20867    function. We can't do this in the end_function hook, because the
20868    declarations that use the locations won't have been output when
20869    that hook is called.  Also compute have_multiple_function_sections here.  */
20870
20871 static void
20872 dwarf2out_begin_function (tree fun)
20873 {
20874   if (function_section (fun) != text_section)
20875     have_multiple_function_sections = true;
20876
20877   dwarf2out_note_section_used ();
20878 }
20879
20880 /* Output a label to mark the beginning of a source code line entry
20881    and record information relating to this source line, in
20882    'line_info_table' for later output of the .debug_line section.  */
20883
20884 static void
20885 dwarf2out_source_line (unsigned int line, const char *filename,
20886                        int discriminator, bool is_stmt)
20887 {
20888   static bool last_is_stmt = true;
20889
20890   if (debug_info_level >= DINFO_LEVEL_NORMAL
20891       && line != 0)
20892     {
20893       int file_num = maybe_emit_file (lookup_filename (filename));
20894
20895       switch_to_section (current_function_section ());
20896
20897       /* If requested, emit something human-readable.  */
20898       if (flag_debug_asm)
20899         fprintf (asm_out_file, "\t%s %s:%d\n", ASM_COMMENT_START,
20900                  filename, line);
20901
20902       if (DWARF2_ASM_LINE_DEBUG_INFO)
20903         {
20904           /* Emit the .loc directive understood by GNU as.  */
20905           fprintf (asm_out_file, "\t.loc %d %d 0", file_num, line);
20906           if (is_stmt != last_is_stmt)
20907             {
20908               fprintf (asm_out_file, " is_stmt %d", is_stmt ? 1 : 0);
20909               last_is_stmt = is_stmt;
20910             }
20911           if (SUPPORTS_DISCRIMINATOR && discriminator != 0)
20912             fprintf (asm_out_file, " discriminator %d", discriminator);
20913           fputc ('\n', asm_out_file);
20914
20915           /* Indicate that line number info exists.  */
20916           line_info_table_in_use++;
20917         }
20918       else if (function_section (current_function_decl) != text_section)
20919         {
20920           dw_separate_line_info_ref line_info;
20921           targetm.asm_out.internal_label (asm_out_file,
20922                                           SEPARATE_LINE_CODE_LABEL,
20923                                           separate_line_info_table_in_use);
20924
20925           /* Expand the line info table if necessary.  */
20926           if (separate_line_info_table_in_use
20927               == separate_line_info_table_allocated)
20928             {
20929               separate_line_info_table_allocated += LINE_INFO_TABLE_INCREMENT;
20930               separate_line_info_table
20931                 = GGC_RESIZEVEC (dw_separate_line_info_entry,
20932                                  separate_line_info_table,
20933                                  separate_line_info_table_allocated);
20934               memset (separate_line_info_table
20935                        + separate_line_info_table_in_use,
20936                       0,
20937                       (LINE_INFO_TABLE_INCREMENT
20938                        * sizeof (dw_separate_line_info_entry)));
20939             }
20940
20941           /* Add the new entry at the end of the line_info_table.  */
20942           line_info
20943             = &separate_line_info_table[separate_line_info_table_in_use++];
20944           line_info->dw_file_num = file_num;
20945           line_info->dw_line_num = line;
20946           line_info->function = current_function_funcdef_no;
20947         }
20948       else
20949         {
20950           dw_line_info_ref line_info;
20951
20952           targetm.asm_out.internal_label (asm_out_file, LINE_CODE_LABEL,
20953                                      line_info_table_in_use);
20954
20955           /* Expand the line info table if necessary.  */
20956           if (line_info_table_in_use == line_info_table_allocated)
20957             {
20958               line_info_table_allocated += LINE_INFO_TABLE_INCREMENT;
20959               line_info_table
20960                 = GGC_RESIZEVEC (dw_line_info_entry, line_info_table,
20961                                  line_info_table_allocated);
20962               memset (line_info_table + line_info_table_in_use, 0,
20963                       LINE_INFO_TABLE_INCREMENT * sizeof (dw_line_info_entry));
20964             }
20965
20966           /* Add the new entry at the end of the line_info_table.  */
20967           line_info = &line_info_table[line_info_table_in_use++];
20968           line_info->dw_file_num = file_num;
20969           line_info->dw_line_num = line;
20970         }
20971     }
20972 }
20973
20974 /* Record the beginning of a new source file.  */
20975
20976 static void
20977 dwarf2out_start_source_file (unsigned int lineno, const char *filename)
20978 {
20979   if (flag_eliminate_dwarf2_dups && dwarf_version < 4)
20980     {
20981       /* Record the beginning of the file for break_out_includes.  */
20982       dw_die_ref bincl_die;
20983
20984       bincl_die = new_die (DW_TAG_GNU_BINCL, comp_unit_die, NULL);
20985       add_AT_string (bincl_die, DW_AT_name, remap_debug_filename (filename));
20986     }
20987
20988   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
20989     {
20990       int file_num = maybe_emit_file (lookup_filename (filename));
20991
20992       switch_to_section (debug_macinfo_section);
20993       dw2_asm_output_data (1, DW_MACINFO_start_file, "Start new file");
20994       dw2_asm_output_data_uleb128 (lineno, "Included from line number %d",
20995                                    lineno);
20996
20997       dw2_asm_output_data_uleb128 (file_num, "file %s", filename);
20998     }
20999 }
21000
21001 /* Record the end of a source file.  */
21002
21003 static void
21004 dwarf2out_end_source_file (unsigned int lineno ATTRIBUTE_UNUSED)
21005 {
21006   if (flag_eliminate_dwarf2_dups && dwarf_version < 4)
21007     /* Record the end of the file for break_out_includes.  */
21008     new_die (DW_TAG_GNU_EINCL, comp_unit_die, NULL);
21009
21010   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
21011     {
21012       switch_to_section (debug_macinfo_section);
21013       dw2_asm_output_data (1, DW_MACINFO_end_file, "End file");
21014     }
21015 }
21016
21017 /* Called from debug_define in toplev.c.  The `buffer' parameter contains
21018    the tail part of the directive line, i.e. the part which is past the
21019    initial whitespace, #, whitespace, directive-name, whitespace part.  */
21020
21021 static void
21022 dwarf2out_define (unsigned int lineno ATTRIBUTE_UNUSED,
21023                   const char *buffer ATTRIBUTE_UNUSED)
21024 {
21025   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
21026     {
21027       switch_to_section (debug_macinfo_section);
21028       dw2_asm_output_data (1, DW_MACINFO_define, "Define macro");
21029       dw2_asm_output_data_uleb128 (lineno, "At line number %d", lineno);
21030       dw2_asm_output_nstring (buffer, -1, "The macro");
21031     }
21032 }
21033
21034 /* Called from debug_undef in toplev.c.  The `buffer' parameter contains
21035    the tail part of the directive line, i.e. the part which is past the
21036    initial whitespace, #, whitespace, directive-name, whitespace part.  */
21037
21038 static void
21039 dwarf2out_undef (unsigned int lineno ATTRIBUTE_UNUSED,
21040                  const char *buffer ATTRIBUTE_UNUSED)
21041 {
21042   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
21043     {
21044       switch_to_section (debug_macinfo_section);
21045       dw2_asm_output_data (1, DW_MACINFO_undef, "Undefine macro");
21046       dw2_asm_output_data_uleb128 (lineno, "At line number %d", lineno);
21047       dw2_asm_output_nstring (buffer, -1, "The macro");
21048     }
21049 }
21050
21051 /* Set up for Dwarf output at the start of compilation.  */
21052
21053 static void
21054 dwarf2out_init (const char *filename ATTRIBUTE_UNUSED)
21055 {
21056   /* Allocate the file_table.  */
21057   file_table = htab_create_ggc (50, file_table_hash,
21058                                 file_table_eq, NULL);
21059
21060   /* Allocate the decl_die_table.  */
21061   decl_die_table = htab_create_ggc (10, decl_die_table_hash,
21062                                     decl_die_table_eq, NULL);
21063
21064   /* Allocate the decl_loc_table.  */
21065   decl_loc_table = htab_create_ggc (10, decl_loc_table_hash,
21066                                     decl_loc_table_eq, NULL);
21067
21068   /* Allocate the initial hunk of the decl_scope_table.  */
21069   decl_scope_table = VEC_alloc (tree, gc, 256);
21070
21071   /* Allocate the initial hunk of the abbrev_die_table.  */
21072   abbrev_die_table = GGC_CNEWVEC (dw_die_ref, ABBREV_DIE_TABLE_INCREMENT);
21073   abbrev_die_table_allocated = ABBREV_DIE_TABLE_INCREMENT;
21074   /* Zero-th entry is allocated, but unused.  */
21075   abbrev_die_table_in_use = 1;
21076
21077   /* Allocate the initial hunk of the line_info_table.  */
21078   line_info_table = GGC_CNEWVEC (dw_line_info_entry, LINE_INFO_TABLE_INCREMENT);
21079   line_info_table_allocated = LINE_INFO_TABLE_INCREMENT;
21080
21081   /* Zero-th entry is allocated, but unused.  */
21082   line_info_table_in_use = 1;
21083
21084   /* Allocate the pubtypes and pubnames vectors.  */
21085   pubname_table = VEC_alloc (pubname_entry, gc, 32);
21086   pubtype_table = VEC_alloc (pubname_entry, gc, 32);
21087
21088   /* Allocate the table that maps insn UIDs to vtable slot indexes.  */
21089   vcall_insn_table = htab_create_ggc (10, vcall_insn_table_hash,
21090                                       vcall_insn_table_eq, NULL);
21091
21092   /* Generate the initial DIE for the .debug section.  Note that the (string)
21093      value given in the DW_AT_name attribute of the DW_TAG_compile_unit DIE
21094      will (typically) be a relative pathname and that this pathname should be
21095      taken as being relative to the directory from which the compiler was
21096      invoked when the given (base) source file was compiled.  We will fill
21097      in this value in dwarf2out_finish.  */
21098   comp_unit_die = gen_compile_unit_die (NULL);
21099
21100   incomplete_types = VEC_alloc (tree, gc, 64);
21101
21102   used_rtx_array = VEC_alloc (rtx, gc, 32);
21103
21104   debug_info_section = get_section (DEBUG_INFO_SECTION,
21105                                     SECTION_DEBUG, NULL);
21106   debug_abbrev_section = get_section (DEBUG_ABBREV_SECTION,
21107                                       SECTION_DEBUG, NULL);
21108   debug_aranges_section = get_section (DEBUG_ARANGES_SECTION,
21109                                        SECTION_DEBUG, NULL);
21110   debug_macinfo_section = get_section (DEBUG_MACINFO_SECTION,
21111                                        SECTION_DEBUG, NULL);
21112   debug_line_section = get_section (DEBUG_LINE_SECTION,
21113                                     SECTION_DEBUG, NULL);
21114   debug_loc_section = get_section (DEBUG_LOC_SECTION,
21115                                    SECTION_DEBUG, NULL);
21116   debug_pubnames_section = get_section (DEBUG_PUBNAMES_SECTION,
21117                                         SECTION_DEBUG, NULL);
21118   debug_pubtypes_section = get_section (DEBUG_PUBTYPES_SECTION,
21119                                         SECTION_DEBUG, NULL);
21120   debug_dcall_section = get_section (DEBUG_DCALL_SECTION,
21121                                      SECTION_DEBUG, NULL);
21122   debug_vcall_section = get_section (DEBUG_VCALL_SECTION,
21123                                      SECTION_DEBUG, NULL);
21124   debug_str_section = get_section (DEBUG_STR_SECTION,
21125                                    DEBUG_STR_SECTION_FLAGS, NULL);
21126   debug_ranges_section = get_section (DEBUG_RANGES_SECTION,
21127                                       SECTION_DEBUG, NULL);
21128   debug_frame_section = get_section (DEBUG_FRAME_SECTION,
21129                                      SECTION_DEBUG, NULL);
21130
21131   ASM_GENERATE_INTERNAL_LABEL (text_end_label, TEXT_END_LABEL, 0);
21132   ASM_GENERATE_INTERNAL_LABEL (abbrev_section_label,
21133                                DEBUG_ABBREV_SECTION_LABEL, 0);
21134   ASM_GENERATE_INTERNAL_LABEL (text_section_label, TEXT_SECTION_LABEL, 0);
21135   ASM_GENERATE_INTERNAL_LABEL (cold_text_section_label,
21136                                COLD_TEXT_SECTION_LABEL, 0);
21137   ASM_GENERATE_INTERNAL_LABEL (cold_end_label, COLD_END_LABEL, 0);
21138
21139   ASM_GENERATE_INTERNAL_LABEL (debug_info_section_label,
21140                                DEBUG_INFO_SECTION_LABEL, 0);
21141   ASM_GENERATE_INTERNAL_LABEL (debug_line_section_label,
21142                                DEBUG_LINE_SECTION_LABEL, 0);
21143   ASM_GENERATE_INTERNAL_LABEL (ranges_section_label,
21144                                DEBUG_RANGES_SECTION_LABEL, 0);
21145   switch_to_section (debug_abbrev_section);
21146   ASM_OUTPUT_LABEL (asm_out_file, abbrev_section_label);
21147   switch_to_section (debug_info_section);
21148   ASM_OUTPUT_LABEL (asm_out_file, debug_info_section_label);
21149   switch_to_section (debug_line_section);
21150   ASM_OUTPUT_LABEL (asm_out_file, debug_line_section_label);
21151
21152   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
21153     {
21154       switch_to_section (debug_macinfo_section);
21155       ASM_GENERATE_INTERNAL_LABEL (macinfo_section_label,
21156                                    DEBUG_MACINFO_SECTION_LABEL, 0);
21157       ASM_OUTPUT_LABEL (asm_out_file, macinfo_section_label);
21158     }
21159
21160   switch_to_section (text_section);
21161   ASM_OUTPUT_LABEL (asm_out_file, text_section_label);
21162   if (flag_reorder_blocks_and_partition)
21163     {
21164       cold_text_section = unlikely_text_section ();
21165       switch_to_section (cold_text_section);
21166       ASM_OUTPUT_LABEL (asm_out_file, cold_text_section_label);
21167     }
21168
21169 }
21170
21171 /* Called before cgraph_optimize starts outputtting functions, variables
21172    and toplevel asms into assembly.  */
21173
21174 static void
21175 dwarf2out_assembly_start (void)
21176 {
21177   if (HAVE_GAS_CFI_SECTIONS_DIRECTIVE && dwarf2out_do_cfi_asm ())
21178     {
21179 #ifndef TARGET_UNWIND_INFO
21180       if (USING_SJLJ_EXCEPTIONS || (!flag_unwind_tables && !flag_exceptions))
21181 #endif
21182         fprintf (asm_out_file, "\t.cfi_sections\t.debug_frame\n");
21183     }
21184 }
21185
21186 /* A helper function for dwarf2out_finish called through
21187    htab_traverse.  Emit one queued .debug_str string.  */
21188
21189 static int
21190 output_indirect_string (void **h, void *v ATTRIBUTE_UNUSED)
21191 {
21192   struct indirect_string_node *node = (struct indirect_string_node *) *h;
21193
21194   if (node->label && node->refcount)
21195     {
21196       switch_to_section (debug_str_section);
21197       ASM_OUTPUT_LABEL (asm_out_file, node->label);
21198       assemble_string (node->str, strlen (node->str) + 1);
21199     }
21200
21201   return 1;
21202 }
21203
21204 #if ENABLE_ASSERT_CHECKING
21205 /* Verify that all marks are clear.  */
21206
21207 static void
21208 verify_marks_clear (dw_die_ref die)
21209 {
21210   dw_die_ref c;
21211
21212   gcc_assert (! die->die_mark);
21213   FOR_EACH_CHILD (die, c, verify_marks_clear (c));
21214 }
21215 #endif /* ENABLE_ASSERT_CHECKING */
21216
21217 /* Clear the marks for a die and its children.
21218    Be cool if the mark isn't set.  */
21219
21220 static void
21221 prune_unmark_dies (dw_die_ref die)
21222 {
21223   dw_die_ref c;
21224
21225   if (die->die_mark)
21226     die->die_mark = 0;
21227   FOR_EACH_CHILD (die, c, prune_unmark_dies (c));
21228 }
21229
21230 /* Given DIE that we're marking as used, find any other dies
21231    it references as attributes and mark them as used.  */
21232
21233 static void
21234 prune_unused_types_walk_attribs (dw_die_ref die)
21235 {
21236   dw_attr_ref a;
21237   unsigned ix;
21238
21239   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
21240     {
21241       if (a->dw_attr_val.val_class == dw_val_class_die_ref)
21242         {
21243           /* A reference to another DIE.
21244              Make sure that it will get emitted.
21245              If it was broken out into a comdat group, don't follow it.  */
21246           if (dwarf_version < 4
21247               || a->dw_attr == DW_AT_specification
21248               || a->dw_attr_val.v.val_die_ref.die->die_id.die_type_node == NULL)
21249             prune_unused_types_mark (a->dw_attr_val.v.val_die_ref.die, 1);
21250         }
21251       /* Set the string's refcount to 0 so that prune_unused_types_mark
21252          accounts properly for it.  */
21253       if (AT_class (a) == dw_val_class_str)
21254         a->dw_attr_val.v.val_str->refcount = 0;
21255     }
21256 }
21257
21258
21259 /* Mark DIE as being used.  If DOKIDS is true, then walk down
21260    to DIE's children.  */
21261
21262 static void
21263 prune_unused_types_mark (dw_die_ref die, int dokids)
21264 {
21265   dw_die_ref c;
21266
21267   if (die->die_mark == 0)
21268     {
21269       /* We haven't done this node yet.  Mark it as used.  */
21270       die->die_mark = 1;
21271
21272       /* We also have to mark its parents as used.
21273          (But we don't want to mark our parents' kids due to this.)  */
21274       if (die->die_parent)
21275         prune_unused_types_mark (die->die_parent, 0);
21276
21277       /* Mark any referenced nodes.  */
21278       prune_unused_types_walk_attribs (die);
21279
21280       /* If this node is a specification,
21281          also mark the definition, if it exists.  */
21282       if (get_AT_flag (die, DW_AT_declaration) && die->die_definition)
21283         prune_unused_types_mark (die->die_definition, 1);
21284     }
21285
21286   if (dokids && die->die_mark != 2)
21287     {
21288       /* We need to walk the children, but haven't done so yet.
21289          Remember that we've walked the kids.  */
21290       die->die_mark = 2;
21291
21292       /* If this is an array type, we need to make sure our
21293          kids get marked, even if they're types.  If we're
21294          breaking out types into comdat sections, do this
21295          for all type definitions.  */
21296       if (die->die_tag == DW_TAG_array_type
21297           || (dwarf_version >= 4
21298               && is_type_die (die) && ! is_declaration_die (die)))
21299         FOR_EACH_CHILD (die, c, prune_unused_types_mark (c, 1));
21300       else
21301         FOR_EACH_CHILD (die, c, prune_unused_types_walk (c));
21302     }
21303 }
21304
21305 /* For local classes, look if any static member functions were emitted
21306    and if so, mark them.  */
21307
21308 static void
21309 prune_unused_types_walk_local_classes (dw_die_ref die)
21310 {
21311   dw_die_ref c;
21312
21313   if (die->die_mark == 2)
21314     return;
21315
21316   switch (die->die_tag)
21317     {
21318     case DW_TAG_structure_type:
21319     case DW_TAG_union_type:
21320     case DW_TAG_class_type:
21321       break;
21322
21323     case DW_TAG_subprogram:
21324       if (!get_AT_flag (die, DW_AT_declaration)
21325           || die->die_definition != NULL)
21326         prune_unused_types_mark (die, 1);
21327       return;
21328
21329     default:
21330       return;
21331     }
21332
21333   /* Mark children.  */
21334   FOR_EACH_CHILD (die, c, prune_unused_types_walk_local_classes (c));
21335 }
21336
21337 /* Walk the tree DIE and mark types that we actually use.  */
21338
21339 static void
21340 prune_unused_types_walk (dw_die_ref die)
21341 {
21342   dw_die_ref c;
21343
21344   /* Don't do anything if this node is already marked and
21345      children have been marked as well.  */
21346   if (die->die_mark == 2)
21347     return;
21348
21349   switch (die->die_tag)
21350     {
21351     case DW_TAG_structure_type:
21352     case DW_TAG_union_type:
21353     case DW_TAG_class_type:
21354       if (die->die_perennial_p)
21355         break;
21356
21357       for (c = die->die_parent; c; c = c->die_parent)
21358         if (c->die_tag == DW_TAG_subprogram)
21359           break;
21360
21361       /* Finding used static member functions inside of classes
21362          is needed just for local classes, because for other classes
21363          static member function DIEs with DW_AT_specification
21364          are emitted outside of the DW_TAG_*_type.  If we ever change
21365          it, we'd need to call this even for non-local classes.  */
21366       if (c)
21367         prune_unused_types_walk_local_classes (die);
21368
21369       /* It's a type node --- don't mark it.  */
21370       return;
21371
21372     case DW_TAG_const_type:
21373     case DW_TAG_packed_type:
21374     case DW_TAG_pointer_type:
21375     case DW_TAG_reference_type:
21376     case DW_TAG_rvalue_reference_type:
21377     case DW_TAG_volatile_type:
21378     case DW_TAG_typedef:
21379     case DW_TAG_array_type:
21380     case DW_TAG_interface_type:
21381     case DW_TAG_friend:
21382     case DW_TAG_variant_part:
21383     case DW_TAG_enumeration_type:
21384     case DW_TAG_subroutine_type:
21385     case DW_TAG_string_type:
21386     case DW_TAG_set_type:
21387     case DW_TAG_subrange_type:
21388     case DW_TAG_ptr_to_member_type:
21389     case DW_TAG_file_type:
21390       if (die->die_perennial_p)
21391         break;
21392
21393       /* It's a type node --- don't mark it.  */
21394       return;
21395
21396     default:
21397       /* Mark everything else.  */
21398       break;
21399   }
21400
21401   if (die->die_mark == 0)
21402     {
21403       die->die_mark = 1;
21404
21405       /* Now, mark any dies referenced from here.  */
21406       prune_unused_types_walk_attribs (die);
21407     }
21408
21409   die->die_mark = 2;
21410
21411   /* Mark children.  */
21412   FOR_EACH_CHILD (die, c, prune_unused_types_walk (c));
21413 }
21414
21415 /* Increment the string counts on strings referred to from DIE's
21416    attributes.  */
21417
21418 static void
21419 prune_unused_types_update_strings (dw_die_ref die)
21420 {
21421   dw_attr_ref a;
21422   unsigned ix;
21423
21424   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
21425     if (AT_class (a) == dw_val_class_str)
21426       {
21427         struct indirect_string_node *s = a->dw_attr_val.v.val_str;
21428         s->refcount++;
21429         /* Avoid unnecessarily putting strings that are used less than
21430            twice in the hash table.  */
21431         if (s->refcount
21432             == ((DEBUG_STR_SECTION_FLAGS & SECTION_MERGE) ? 1 : 2))
21433           {
21434             void ** slot;
21435             slot = htab_find_slot_with_hash (debug_str_hash, s->str,
21436                                              htab_hash_string (s->str),
21437                                              INSERT);
21438             gcc_assert (*slot == NULL);
21439             *slot = s;
21440           }
21441       }
21442 }
21443
21444 /* Remove from the tree DIE any dies that aren't marked.  */
21445
21446 static void
21447 prune_unused_types_prune (dw_die_ref die)
21448 {
21449   dw_die_ref c;
21450
21451   gcc_assert (die->die_mark);
21452   prune_unused_types_update_strings (die);
21453
21454   if (! die->die_child)
21455     return;
21456
21457   c = die->die_child;
21458   do {
21459     dw_die_ref prev = c;
21460     for (c = c->die_sib; ! c->die_mark; c = c->die_sib)
21461       if (c == die->die_child)
21462         {
21463           /* No marked children between 'prev' and the end of the list.  */
21464           if (prev == c)
21465             /* No marked children at all.  */
21466             die->die_child = NULL;
21467           else
21468             {
21469               prev->die_sib = c->die_sib;
21470               die->die_child = prev;
21471             }
21472           return;
21473         }
21474
21475     if (c != prev->die_sib)
21476       prev->die_sib = c;
21477     prune_unused_types_prune (c);
21478   } while (c != die->die_child);
21479 }
21480
21481 /* A helper function for dwarf2out_finish called through
21482    htab_traverse.  Clear .debug_str strings that we haven't already
21483    decided to emit.  */
21484
21485 static int
21486 prune_indirect_string (void **h, void *v ATTRIBUTE_UNUSED)
21487 {
21488   struct indirect_string_node *node = (struct indirect_string_node *) *h;
21489
21490   if (!node->label || !node->refcount)
21491     htab_clear_slot (debug_str_hash, h);
21492
21493   return 1;
21494 }
21495
21496 /* Remove dies representing declarations that we never use.  */
21497
21498 static void
21499 prune_unused_types (void)
21500 {
21501   unsigned int i;
21502   limbo_die_node *node;
21503   comdat_type_node *ctnode;
21504   pubname_ref pub;
21505   dcall_entry *dcall;
21506
21507 #if ENABLE_ASSERT_CHECKING
21508   /* All the marks should already be clear.  */
21509   verify_marks_clear (comp_unit_die);
21510   for (node = limbo_die_list; node; node = node->next)
21511     verify_marks_clear (node->die);
21512   for (ctnode = comdat_type_list; ctnode; ctnode = ctnode->next)
21513     verify_marks_clear (ctnode->root_die);
21514 #endif /* ENABLE_ASSERT_CHECKING */
21515
21516   /* Mark types that are used in global variables.  */
21517   premark_types_used_by_global_vars ();
21518
21519   /* Set the mark on nodes that are actually used.  */
21520   prune_unused_types_walk (comp_unit_die);
21521   for (node = limbo_die_list; node; node = node->next)
21522     prune_unused_types_walk (node->die);
21523   for (ctnode = comdat_type_list; ctnode; ctnode = ctnode->next)
21524     {
21525       prune_unused_types_walk (ctnode->root_die);
21526       prune_unused_types_mark (ctnode->type_die, 1);
21527     }
21528
21529   /* Also set the mark on nodes referenced from the
21530      pubname_table or arange_table.  */
21531   for (i = 0; VEC_iterate (pubname_entry, pubname_table, i, pub); i++)
21532     prune_unused_types_mark (pub->die, 1);
21533   for (i = 0; i < arange_table_in_use; i++)
21534     prune_unused_types_mark (arange_table[i], 1);
21535
21536   /* Mark nodes referenced from the direct call table.  */
21537   for (i = 0; VEC_iterate (dcall_entry, dcall_table, i, dcall); i++)
21538     prune_unused_types_mark (dcall->targ_die, 1);
21539
21540   /* Get rid of nodes that aren't marked; and update the string counts.  */
21541   if (debug_str_hash && debug_str_hash_forced)
21542     htab_traverse (debug_str_hash, prune_indirect_string, NULL);
21543   else if (debug_str_hash)
21544     htab_empty (debug_str_hash);
21545   prune_unused_types_prune (comp_unit_die);
21546   for (node = limbo_die_list; node; node = node->next)
21547     prune_unused_types_prune (node->die);
21548   for (ctnode = comdat_type_list; ctnode; ctnode = ctnode->next)
21549     prune_unused_types_prune (ctnode->root_die);
21550
21551   /* Leave the marks clear.  */
21552   prune_unmark_dies (comp_unit_die);
21553   for (node = limbo_die_list; node; node = node->next)
21554     prune_unmark_dies (node->die);
21555   for (ctnode = comdat_type_list; ctnode; ctnode = ctnode->next)
21556     prune_unmark_dies (ctnode->root_die);
21557 }
21558
21559 /* Set the parameter to true if there are any relative pathnames in
21560    the file table.  */
21561 static int
21562 file_table_relative_p (void ** slot, void *param)
21563 {
21564   bool *p = (bool *) param;
21565   struct dwarf_file_data *d = (struct dwarf_file_data *) *slot;
21566   if (!IS_ABSOLUTE_PATH (d->filename))
21567     {
21568       *p = true;
21569       return 0;
21570     }
21571   return 1;
21572 }
21573
21574 /* Routines to manipulate hash table of comdat type units.  */
21575
21576 static hashval_t
21577 htab_ct_hash (const void *of)
21578 {
21579   hashval_t h;
21580   const comdat_type_node *const type_node = (const comdat_type_node *) of;
21581
21582   memcpy (&h, type_node->signature, sizeof (h));
21583   return h;
21584 }
21585
21586 static int
21587 htab_ct_eq (const void *of1, const void *of2)
21588 {
21589   const comdat_type_node *const type_node_1 = (const comdat_type_node *) of1;
21590   const comdat_type_node *const type_node_2 = (const comdat_type_node *) of2;
21591
21592   return (! memcmp (type_node_1->signature, type_node_2->signature,
21593                     DWARF_TYPE_SIGNATURE_SIZE));
21594 }
21595
21596 /* Move a DW_AT_{,MIPS_}linkage_name attribute just added to dw_die_ref
21597    to the location it would have been added, should we know its
21598    DECL_ASSEMBLER_NAME when we added other attributes.  This will
21599    probably improve compactness of debug info, removing equivalent
21600    abbrevs, and hide any differences caused by deferring the
21601    computation of the assembler name, triggered by e.g. PCH.  */
21602
21603 static inline void
21604 move_linkage_attr (dw_die_ref die)
21605 {
21606   unsigned ix = VEC_length (dw_attr_node, die->die_attr);
21607   dw_attr_node linkage = *VEC_index (dw_attr_node, die->die_attr, ix - 1);
21608
21609   gcc_assert (linkage.dw_attr == AT_linkage_name);
21610
21611   while (--ix > 0)
21612     {
21613       dw_attr_node *prev = VEC_index (dw_attr_node, die->die_attr, ix - 1);
21614
21615       if (prev->dw_attr == DW_AT_decl_line || prev->dw_attr == DW_AT_name)
21616         break;
21617     }
21618
21619   if (ix != VEC_length (dw_attr_node, die->die_attr) - 1)
21620     {
21621       VEC_pop (dw_attr_node, die->die_attr);
21622       VEC_quick_insert (dw_attr_node, die->die_attr, ix, &linkage);
21623     }
21624 }
21625
21626 /* Helper function for resolve_addr, attempt to resolve
21627    one CONST_STRING, return non-zero if not successful.  Similarly verify that
21628    SYMBOL_REFs refer to variables emitted in the current CU.  */
21629
21630 static int
21631 resolve_one_addr (rtx *addr, void *data ATTRIBUTE_UNUSED)
21632 {
21633   rtx rtl = *addr;
21634
21635   if (GET_CODE (rtl) == CONST_STRING)
21636     {
21637       size_t len = strlen (XSTR (rtl, 0)) + 1;
21638       tree t = build_string (len, XSTR (rtl, 0));
21639       tree tlen = build_int_cst (NULL_TREE, len - 1);
21640       TREE_TYPE (t)
21641         = build_array_type (char_type_node, build_index_type (tlen));
21642       rtl = lookup_constant_def (t);
21643       if (!rtl || !MEM_P (rtl))
21644         return 1;
21645       rtl = XEXP (rtl, 0);
21646       VEC_safe_push (rtx, gc, used_rtx_array, rtl);
21647       *addr = rtl;
21648       return 0;
21649     }
21650
21651   if (GET_CODE (rtl) == SYMBOL_REF
21652       && SYMBOL_REF_DECL (rtl)
21653       && !TREE_ASM_WRITTEN (SYMBOL_REF_DECL (rtl)))
21654     return 1;
21655
21656   if (GET_CODE (rtl) == CONST
21657       && for_each_rtx (&XEXP (rtl, 0), resolve_one_addr, NULL))
21658     return 1;
21659
21660   return 0;
21661 }
21662
21663 /* Helper function for resolve_addr, handle one location
21664    expression, return false if at least one CONST_STRING or SYMBOL_REF in
21665    the location list couldn't be resolved.  */
21666
21667 static bool
21668 resolve_addr_in_expr (dw_loc_descr_ref loc)
21669 {
21670   for (; loc; loc = loc->dw_loc_next)
21671     if ((loc->dw_loc_opc == DW_OP_addr
21672          && resolve_one_addr (&loc->dw_loc_oprnd1.v.val_addr, NULL))
21673         || (loc->dw_loc_opc == DW_OP_implicit_value
21674             && loc->dw_loc_oprnd2.val_class == dw_val_class_addr
21675             && resolve_one_addr (&loc->dw_loc_oprnd2.v.val_addr, NULL)))
21676       return false;
21677   return true;
21678 }
21679
21680 /* Resolve DW_OP_addr and DW_AT_const_value CONST_STRING arguments to
21681    an address in .rodata section if the string literal is emitted there,
21682    or remove the containing location list or replace DW_AT_const_value
21683    with DW_AT_location and empty location expression, if it isn't found
21684    in .rodata.  Similarly for SYMBOL_REFs, keep only those that refer
21685    to something that has been emitted in the current CU.  */
21686
21687 static void
21688 resolve_addr (dw_die_ref die)
21689 {
21690   dw_die_ref c;
21691   dw_attr_ref a;
21692   dw_loc_list_ref *curr;
21693   unsigned ix;
21694
21695   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
21696     switch (AT_class (a))
21697       {
21698       case dw_val_class_loc_list:
21699         curr = AT_loc_list_ptr (a);
21700         while (*curr)
21701           {
21702             if (!resolve_addr_in_expr ((*curr)->expr))
21703               {
21704                 dw_loc_list_ref next = (*curr)->dw_loc_next;
21705                 if (next && (*curr)->ll_symbol)
21706                   {
21707                     gcc_assert (!next->ll_symbol);
21708                     next->ll_symbol = (*curr)->ll_symbol;
21709                   }
21710                 *curr = next;
21711               }
21712             else
21713               curr = &(*curr)->dw_loc_next;
21714           }
21715         if (!AT_loc_list (a))
21716           {
21717             remove_AT (die, a->dw_attr);
21718             ix--;
21719           }
21720         break;
21721       case dw_val_class_loc:
21722         if (!resolve_addr_in_expr (AT_loc (a)))
21723           {
21724             remove_AT (die, a->dw_attr);
21725             ix--;
21726           }
21727         break;
21728       case dw_val_class_addr:
21729         if (a->dw_attr == DW_AT_const_value
21730             && resolve_one_addr (&a->dw_attr_val.v.val_addr, NULL))
21731           {
21732             remove_AT (die, a->dw_attr);
21733             ix--;
21734           }
21735         break;
21736       default:
21737         break;
21738       }
21739
21740   FOR_EACH_CHILD (die, c, resolve_addr (c));
21741 }
21742
21743 /* Output stuff that dwarf requires at the end of every file,
21744    and generate the DWARF-2 debugging info.  */
21745
21746 static void
21747 dwarf2out_finish (const char *filename)
21748 {
21749   limbo_die_node *node, *next_node;
21750   comdat_type_node *ctnode;
21751   htab_t comdat_type_table;
21752   dw_die_ref die = 0;
21753   unsigned int i;
21754
21755   gen_remaining_tmpl_value_param_die_attribute ();
21756
21757   /* Add the name for the main input file now.  We delayed this from
21758      dwarf2out_init to avoid complications with PCH.  */
21759   add_name_attribute (comp_unit_die, remap_debug_filename (filename));
21760   if (!IS_ABSOLUTE_PATH (filename))
21761     add_comp_dir_attribute (comp_unit_die);
21762   else if (get_AT (comp_unit_die, DW_AT_comp_dir) == NULL)
21763     {
21764       bool p = false;
21765       htab_traverse (file_table, file_table_relative_p, &p);
21766       if (p)
21767         add_comp_dir_attribute (comp_unit_die);
21768     }
21769
21770   for (i = 0; i < VEC_length (deferred_locations, deferred_locations_list); i++)
21771     {
21772       add_location_or_const_value_attribute (
21773         VEC_index (deferred_locations, deferred_locations_list, i)->die,
21774         VEC_index (deferred_locations, deferred_locations_list, i)->variable,
21775         DW_AT_location);
21776     }
21777
21778   /* Traverse the limbo die list, and add parent/child links.  The only
21779      dies without parents that should be here are concrete instances of
21780      inline functions, and the comp_unit_die.  We can ignore the comp_unit_die.
21781      For concrete instances, we can get the parent die from the abstract
21782      instance.  */
21783   for (node = limbo_die_list; node; node = next_node)
21784     {
21785       next_node = node->next;
21786       die = node->die;
21787
21788       if (die->die_parent == NULL)
21789         {
21790           dw_die_ref origin = get_AT_ref (die, DW_AT_abstract_origin);
21791
21792           if (origin)
21793             add_child_die (origin->die_parent, die);
21794           else if (die == comp_unit_die)
21795             ;
21796           else if (errorcount > 0 || sorrycount > 0)
21797             /* It's OK to be confused by errors in the input.  */
21798             add_child_die (comp_unit_die, die);
21799           else
21800             {
21801               /* In certain situations, the lexical block containing a
21802                  nested function can be optimized away, which results
21803                  in the nested function die being orphaned.  Likewise
21804                  with the return type of that nested function.  Force
21805                  this to be a child of the containing function.
21806
21807                  It may happen that even the containing function got fully
21808                  inlined and optimized out.  In that case we are lost and
21809                  assign the empty child.  This should not be big issue as
21810                  the function is likely unreachable too.  */
21811               tree context = NULL_TREE;
21812
21813               gcc_assert (node->created_for);
21814
21815               if (DECL_P (node->created_for))
21816                 context = DECL_CONTEXT (node->created_for);
21817               else if (TYPE_P (node->created_for))
21818                 context = TYPE_CONTEXT (node->created_for);
21819
21820               gcc_assert (context
21821                           && (TREE_CODE (context) == FUNCTION_DECL
21822                               || TREE_CODE (context) == NAMESPACE_DECL));
21823
21824               origin = lookup_decl_die (context);
21825               if (origin)
21826                 add_child_die (origin, die);
21827               else
21828                 add_child_die (comp_unit_die, die);
21829             }
21830         }
21831     }
21832
21833   limbo_die_list = NULL;
21834
21835   resolve_addr (comp_unit_die);
21836
21837   for (node = deferred_asm_name; node; node = node->next)
21838     {
21839       tree decl = node->created_for;
21840       if (DECL_ASSEMBLER_NAME (decl) != DECL_NAME (decl))
21841         {
21842           add_AT_string (node->die, AT_linkage_name,
21843                          IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl)));
21844           move_linkage_attr (node->die);
21845         }
21846     }
21847
21848   deferred_asm_name = NULL;
21849
21850   /* Walk through the list of incomplete types again, trying once more to
21851      emit full debugging info for them.  */
21852   retry_incomplete_types ();
21853
21854   if (flag_eliminate_unused_debug_types)
21855     prune_unused_types ();
21856
21857   /* Generate separate CUs for each of the include files we've seen.
21858      They will go into limbo_die_list.  */
21859   if (flag_eliminate_dwarf2_dups && dwarf_version < 4)
21860     break_out_includes (comp_unit_die);
21861
21862   /* Generate separate COMDAT sections for type DIEs. */
21863   if (dwarf_version >= 4)
21864     {
21865       break_out_comdat_types (comp_unit_die);
21866
21867       /* Each new type_unit DIE was added to the limbo die list when created.
21868          Since these have all been added to comdat_type_list, clear the
21869          limbo die list.  */
21870       limbo_die_list = NULL;
21871
21872       /* For each new comdat type unit, copy declarations for incomplete
21873          types to make the new unit self-contained (i.e., no direct
21874          references to the main compile unit).  */
21875       for (ctnode = comdat_type_list; ctnode != NULL; ctnode = ctnode->next)
21876         copy_decls_for_unworthy_types (ctnode->root_die);
21877       copy_decls_for_unworthy_types (comp_unit_die);
21878
21879       /* In the process of copying declarations from one unit to another,
21880          we may have left some declarations behind that are no longer
21881          referenced.  Prune them.  */
21882       prune_unused_types ();
21883     }
21884
21885   /* Traverse the DIE's and add add sibling attributes to those DIE's
21886      that have children.  */
21887   add_sibling_attributes (comp_unit_die);
21888   for (node = limbo_die_list; node; node = node->next)
21889     add_sibling_attributes (node->die);
21890   for (ctnode = comdat_type_list; ctnode != NULL; ctnode = ctnode->next)
21891     add_sibling_attributes (ctnode->root_die);
21892
21893   /* Output a terminator label for the .text section.  */
21894   switch_to_section (text_section);
21895   targetm.asm_out.internal_label (asm_out_file, TEXT_END_LABEL, 0);
21896   if (flag_reorder_blocks_and_partition)
21897     {
21898       switch_to_section (unlikely_text_section ());
21899       targetm.asm_out.internal_label (asm_out_file, COLD_END_LABEL, 0);
21900     }
21901
21902   /* We can only use the low/high_pc attributes if all of the code was
21903      in .text.  */
21904   if (!have_multiple_function_sections
21905       || !(dwarf_version >= 3 || !dwarf_strict))
21906     {
21907       add_AT_lbl_id (comp_unit_die, DW_AT_low_pc, text_section_label);
21908       add_AT_lbl_id (comp_unit_die, DW_AT_high_pc, text_end_label);
21909     }
21910
21911   else
21912     {
21913       unsigned fde_idx = 0;
21914       bool range_list_added = false;
21915
21916       /* We need to give .debug_loc and .debug_ranges an appropriate
21917          "base address".  Use zero so that these addresses become
21918          absolute.  Historically, we've emitted the unexpected
21919          DW_AT_entry_pc instead of DW_AT_low_pc for this purpose.
21920          Emit both to give time for other tools to adapt.  */
21921       add_AT_addr (comp_unit_die, DW_AT_low_pc, const0_rtx);
21922       add_AT_addr (comp_unit_die, DW_AT_entry_pc, const0_rtx);
21923
21924       if (text_section_used)
21925         add_ranges_by_labels (comp_unit_die, text_section_label,
21926                               text_end_label, &range_list_added);
21927       if (flag_reorder_blocks_and_partition && cold_text_section_used)
21928         add_ranges_by_labels (comp_unit_die, cold_text_section_label,
21929                               cold_end_label, &range_list_added);
21930
21931       for (fde_idx = 0; fde_idx < fde_table_in_use; fde_idx++)
21932         {
21933           dw_fde_ref fde = &fde_table[fde_idx];
21934
21935           if (fde->dw_fde_switched_sections)
21936             {
21937               if (!fde->in_std_section)
21938                 add_ranges_by_labels (comp_unit_die,
21939                                       fde->dw_fde_hot_section_label,
21940                                       fde->dw_fde_hot_section_end_label,
21941                                       &range_list_added);
21942               if (!fde->cold_in_std_section)
21943                 add_ranges_by_labels (comp_unit_die,
21944                                       fde->dw_fde_unlikely_section_label,
21945                                       fde->dw_fde_unlikely_section_end_label,
21946                                       &range_list_added);
21947             }
21948           else if (!fde->in_std_section)
21949             add_ranges_by_labels (comp_unit_die, fde->dw_fde_begin,
21950                                   fde->dw_fde_end, &range_list_added);
21951         }
21952
21953       if (range_list_added)
21954         add_ranges (NULL);
21955     }
21956
21957   /* Output location list section if necessary.  */
21958   if (have_location_lists)
21959     {
21960       /* Output the location lists info.  */
21961       switch_to_section (debug_loc_section);
21962       ASM_GENERATE_INTERNAL_LABEL (loc_section_label,
21963                                    DEBUG_LOC_SECTION_LABEL, 0);
21964       ASM_OUTPUT_LABEL (asm_out_file, loc_section_label);
21965       output_location_lists (die);
21966     }
21967
21968   if (debug_info_level >= DINFO_LEVEL_NORMAL)
21969     add_AT_lineptr (comp_unit_die, DW_AT_stmt_list,
21970                     debug_line_section_label);
21971
21972   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
21973     add_AT_macptr (comp_unit_die, DW_AT_macro_info, macinfo_section_label);
21974
21975   /* Output all of the compilation units.  We put the main one last so that
21976      the offsets are available to output_pubnames.  */
21977   for (node = limbo_die_list; node; node = node->next)
21978     output_comp_unit (node->die, 0);
21979
21980   comdat_type_table = htab_create (100, htab_ct_hash, htab_ct_eq, NULL);
21981   for (ctnode = comdat_type_list; ctnode != NULL; ctnode = ctnode->next)
21982     {
21983       void **slot = htab_find_slot (comdat_type_table, ctnode, INSERT);
21984
21985       /* Don't output duplicate types.  */
21986       if (*slot != HTAB_EMPTY_ENTRY)
21987         continue;
21988
21989       /* Add a pointer to the line table for the main compilation unit
21990          so that the debugger can make sense of DW_AT_decl_file
21991          attributes.  */
21992       if (debug_info_level >= DINFO_LEVEL_NORMAL)
21993         add_AT_lineptr (ctnode->root_die, DW_AT_stmt_list,
21994                         debug_line_section_label);
21995
21996       output_comdat_type_unit (ctnode);
21997       *slot = ctnode;
21998     }
21999   htab_delete (comdat_type_table);
22000
22001   /* Output the main compilation unit if non-empty or if .debug_macinfo
22002      has been emitted.  */
22003   output_comp_unit (comp_unit_die, debug_info_level >= DINFO_LEVEL_VERBOSE);
22004
22005   /* Output the abbreviation table.  */
22006   switch_to_section (debug_abbrev_section);
22007   output_abbrev_section ();
22008
22009   /* Output public names table if necessary.  */
22010   if (!VEC_empty (pubname_entry, pubname_table))
22011     {
22012       switch_to_section (debug_pubnames_section);
22013       output_pubnames (pubname_table);
22014     }
22015
22016   /* Output public types table if necessary.  */
22017   /* ??? Only defined by DWARF3, but emitted by Darwin for DWARF2.
22018      It shouldn't hurt to emit it always, since pure DWARF2 consumers
22019      simply won't look for the section.  */
22020   if (!VEC_empty (pubname_entry, pubtype_table))
22021     {
22022       switch_to_section (debug_pubtypes_section);
22023       output_pubnames (pubtype_table);
22024     }
22025
22026   /* Output direct and virtual call tables if necessary.  */
22027   if (!VEC_empty (dcall_entry, dcall_table))
22028     {
22029       switch_to_section (debug_dcall_section);
22030       output_dcall_table ();
22031     }
22032   if (!VEC_empty (vcall_entry, vcall_table))
22033     {
22034       switch_to_section (debug_vcall_section);
22035       output_vcall_table ();
22036     }
22037
22038   /* Output the address range information.  We only put functions in the arange
22039      table, so don't write it out if we don't have any.  */
22040   if (fde_table_in_use)
22041     {
22042       switch_to_section (debug_aranges_section);
22043       output_aranges ();
22044     }
22045
22046   /* Output ranges section if necessary.  */
22047   if (ranges_table_in_use)
22048     {
22049       switch_to_section (debug_ranges_section);
22050       ASM_OUTPUT_LABEL (asm_out_file, ranges_section_label);
22051       output_ranges ();
22052     }
22053
22054   /* Output the source line correspondence table.  We must do this
22055      even if there is no line information.  Otherwise, on an empty
22056      translation unit, we will generate a present, but empty,
22057      .debug_info section.  IRIX 6.5 `nm' will then complain when
22058      examining the file.  This is done late so that any filenames
22059      used by the debug_info section are marked as 'used'.  */
22060   if (! DWARF2_ASM_LINE_DEBUG_INFO)
22061     {
22062       switch_to_section (debug_line_section);
22063       output_line_info ();
22064     }
22065
22066   /* Have to end the macro section.  */
22067   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
22068     {
22069       switch_to_section (debug_macinfo_section);
22070       dw2_asm_output_data (1, 0, "End compilation unit");
22071     }
22072
22073   /* If we emitted any DW_FORM_strp form attribute, output the string
22074      table too.  */
22075   if (debug_str_hash)
22076     htab_traverse (debug_str_hash, output_indirect_string, NULL);
22077 }
22078 #else
22079
22080 /* This should never be used, but its address is needed for comparisons.  */
22081 const struct gcc_debug_hooks dwarf2_debug_hooks =
22082 {
22083   0,            /* init */
22084   0,            /* finish */
22085   0,            /* assembly_start */
22086   0,            /* define */
22087   0,            /* undef */
22088   0,            /* start_source_file */
22089   0,            /* end_source_file */
22090   0,            /* begin_block */
22091   0,            /* end_block */
22092   0,            /* ignore_block */
22093   0,            /* source_line */
22094   0,            /* begin_prologue */
22095   0,            /* end_prologue */
22096   0,            /* end_epilogue */
22097   0,            /* begin_function */
22098   0,            /* end_function */
22099   0,            /* function_decl */
22100   0,            /* global_decl */
22101   0,            /* type_decl */
22102   0,            /* imported_module_or_decl */
22103   0,            /* deferred_inline_function */
22104   0,            /* outlining_inline_function */
22105   0,            /* label */
22106   0,            /* handle_pch */
22107   0,            /* var_location */
22108   0,            /* switch_text_section */
22109   0,            /* direct_call */
22110   0,            /* virtual_call_token */
22111   0,            /* copy_call_info */
22112   0,            /* virtual_call */
22113   0,            /* set_name */
22114   0             /* start_end_main_source_file */
22115 };
22116
22117 #endif /* DWARF2_DEBUGGING_INFO */
22118
22119 #include "gt-dwarf2out.h"