OSDN Git Service

0cdd2dc274d3683dc28daa34fc7509f3cccde96a
[pf3gnuchains/gcc-fork.git] / gcc / dwarf2out.c
1 /* Output Dwarf2 format symbol table information from GCC.
2    Copyright (C) 1992, 1993, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
3    2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
4    Free Software Foundation, Inc.
5    Contributed by Gary Funck (gary@intrepid.com).
6    Derived from DWARF 1 implementation of Ron Guilmette (rfg@monkeys.com).
7    Extensively modified by Jason Merrill (jason@cygnus.com).
8
9 This file is part of GCC.
10
11 GCC is free software; you can redistribute it and/or modify it under
12 the terms of the GNU General Public License as published by the Free
13 Software Foundation; either version 3, or (at your option) any later
14 version.
15
16 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
17 WARRANTY; without even the implied warranty of MERCHANTABILITY or
18 FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
19 for more details.
20
21 You should have received a copy of the GNU General Public License
22 along with GCC; see the file COPYING3.  If not see
23 <http://www.gnu.org/licenses/>.  */
24
25 /* TODO: Emit .debug_line header even when there are no functions, since
26            the file numbers are used by .debug_info.  Alternately, leave
27            out locations for types and decls.
28          Avoid talking about ctors and op= for PODs.
29          Factor out common prologue sequences into multiple CIEs.  */
30
31 /* The first part of this file deals with the DWARF 2 frame unwind
32    information, which is also used by the GCC efficient exception handling
33    mechanism.  The second part, controlled only by an #ifdef
34    DWARF2_DEBUGGING_INFO, deals with the other DWARF 2 debugging
35    information.  */
36
37 /* DWARF2 Abbreviation Glossary:
38
39    CFA = Canonical Frame Address
40            a fixed address on the stack which identifies a call frame.
41            We define it to be the value of SP just before the call insn.
42            The CFA register and offset, which may change during the course
43            of the function, are used to calculate its value at runtime.
44
45    CFI = Call Frame Instruction
46            an instruction for the DWARF2 abstract machine
47
48    CIE = Common Information Entry
49            information describing information common to one or more FDEs
50
51    DIE = Debugging Information Entry
52
53    FDE = Frame Description Entry
54            information describing the stack call frame, in particular,
55            how to restore registers
56
57    DW_CFA_... = DWARF2 CFA call frame instruction
58    DW_TAG_... = DWARF2 DIE tag */
59
60 #include "config.h"
61 #include "system.h"
62 #include "coretypes.h"
63 #include "tm.h"
64 #include "tree.h"
65 #include "version.h"
66 #include "flags.h"
67 #include "rtl.h"
68 #include "hard-reg-set.h"
69 #include "regs.h"
70 #include "insn-config.h"
71 #include "reload.h"
72 #include "function.h"
73 #include "output.h"
74 #include "expr.h"
75 #include "libfuncs.h"
76 #include "except.h"
77 #include "dwarf2.h"
78 #include "dwarf2out.h"
79 #include "dwarf2asm.h"
80 #include "toplev.h"
81 #include "ggc.h"
82 #include "md5.h"
83 #include "tm_p.h"
84 #include "diagnostic.h"
85 #include "tree-pretty-print.h"
86 #include "debug.h"
87 #include "target.h"
88 #include "langhooks.h"
89 #include "hashtab.h"
90 #include "cgraph.h"
91 #include "input.h"
92 #include "gimple.h"
93 #include "tree-pass.h"
94 #include "tree-flow.h"
95
96 #ifdef DWARF2_DEBUGGING_INFO
97 static void dwarf2out_source_line (unsigned int, const char *, int, bool);
98
99 static rtx last_var_location_insn;
100 #endif
101
102 #ifdef VMS_DEBUGGING_INFO
103 int vms_file_stats_name (const char *, long long *, long *, char *, int *);
104
105 /* Define this macro to be a nonzero value if the directory specifications
106     which are output in the debug info should end with a separator.  */
107 #define DWARF2_DIR_SHOULD_END_WITH_SEPARATOR 1
108 /* Define this macro to evaluate to a nonzero value if GCC should refrain
109    from generating indirect strings in DWARF2 debug information, for instance
110    if your target is stuck with an old version of GDB that is unable to
111    process them properly or uses VMS Debug.  */
112 #define DWARF2_INDIRECT_STRING_SUPPORT_MISSING_ON_TARGET 1
113 #else
114 #define DWARF2_DIR_SHOULD_END_WITH_SEPARATOR 0
115 #define DWARF2_INDIRECT_STRING_SUPPORT_MISSING_ON_TARGET 0
116 #endif
117
118 #ifndef DWARF2_FRAME_INFO
119 # ifdef DWARF2_DEBUGGING_INFO
120 #  define DWARF2_FRAME_INFO \
121   (write_symbols == DWARF2_DEBUG || write_symbols == VMS_AND_DWARF2_DEBUG)
122 # else
123 #  define DWARF2_FRAME_INFO 0
124 # endif
125 #endif
126
127 /* Map register numbers held in the call frame info that gcc has
128    collected using DWARF_FRAME_REGNUM to those that should be output in
129    .debug_frame and .eh_frame.  */
130 #ifndef DWARF2_FRAME_REG_OUT
131 #define DWARF2_FRAME_REG_OUT(REGNO, FOR_EH) (REGNO)
132 #endif
133
134 /* Save the result of dwarf2out_do_frame across PCH.  */
135 static GTY(()) bool saved_do_cfi_asm = 0;
136
137 /* Decide whether we want to emit frame unwind information for the current
138    translation unit.  */
139
140 int
141 dwarf2out_do_frame (void)
142 {
143   /* We want to emit correct CFA location expressions or lists, so we
144      have to return true if we're going to output debug info, even if
145      we're not going to output frame or unwind info.  */
146   return (write_symbols == DWARF2_DEBUG
147           || write_symbols == VMS_AND_DWARF2_DEBUG
148           || DWARF2_FRAME_INFO || saved_do_cfi_asm
149 #ifdef DWARF2_UNWIND_INFO
150           || (DWARF2_UNWIND_INFO
151               && (flag_unwind_tables
152                   || (flag_exceptions && ! USING_SJLJ_EXCEPTIONS)))
153 #endif
154           );
155 }
156
157 /* Decide whether to emit frame unwind via assembler directives.  */
158
159 int
160 dwarf2out_do_cfi_asm (void)
161 {
162   int enc;
163
164 #ifdef MIPS_DEBUGGING_INFO
165   return false;
166 #endif
167   if (!flag_dwarf2_cfi_asm || !dwarf2out_do_frame ())
168     return false;
169   if (saved_do_cfi_asm)
170     return true;
171   if (!HAVE_GAS_CFI_PERSONALITY_DIRECTIVE)
172     return false;
173
174   /* Make sure the personality encoding is one the assembler can support.
175      In particular, aligned addresses can't be handled.  */
176   enc = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/2,/*global=*/1);
177   if ((enc & 0x70) != 0 && (enc & 0x70) != DW_EH_PE_pcrel)
178     return false;
179   enc = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/0,/*global=*/0);
180   if ((enc & 0x70) != 0 && (enc & 0x70) != DW_EH_PE_pcrel)
181     return false;
182
183   if (!HAVE_GAS_CFI_SECTIONS_DIRECTIVE)
184     {
185 #ifdef TARGET_UNWIND_INFO
186       return false;
187 #else
188       if (USING_SJLJ_EXCEPTIONS || (!flag_unwind_tables && !flag_exceptions))
189         return false;
190 #endif
191     }
192
193   saved_do_cfi_asm = true;
194   return true;
195 }
196
197 /* The size of the target's pointer type.  */
198 #ifndef PTR_SIZE
199 #define PTR_SIZE (POINTER_SIZE / BITS_PER_UNIT)
200 #endif
201
202 /* Array of RTXes referenced by the debugging information, which therefore
203    must be kept around forever.  */
204 static GTY(()) VEC(rtx,gc) *used_rtx_array;
205
206 /* A pointer to the base of a list of incomplete types which might be
207    completed at some later time.  incomplete_types_list needs to be a
208    VEC(tree,gc) because we want to tell the garbage collector about
209    it.  */
210 static GTY(()) VEC(tree,gc) *incomplete_types;
211
212 /* A pointer to the base of a table of references to declaration
213    scopes.  This table is a display which tracks the nesting
214    of declaration scopes at the current scope and containing
215    scopes.  This table is used to find the proper place to
216    define type declaration DIE's.  */
217 static GTY(()) VEC(tree,gc) *decl_scope_table;
218
219 /* Pointers to various DWARF2 sections.  */
220 static GTY(()) section *debug_info_section;
221 static GTY(()) section *debug_abbrev_section;
222 static GTY(()) section *debug_aranges_section;
223 static GTY(()) section *debug_macinfo_section;
224 static GTY(()) section *debug_line_section;
225 static GTY(()) section *debug_loc_section;
226 static GTY(()) section *debug_pubnames_section;
227 static GTY(()) section *debug_pubtypes_section;
228 static GTY(()) section *debug_dcall_section;
229 static GTY(()) section *debug_vcall_section;
230 static GTY(()) section *debug_str_section;
231 static GTY(()) section *debug_ranges_section;
232 static GTY(()) section *debug_frame_section;
233
234 /* Personality decl of current unit.  Used only when assembler does not support
235    personality CFI.  */
236 static GTY(()) rtx current_unit_personality;
237
238 /* How to start an assembler comment.  */
239 #ifndef ASM_COMMENT_START
240 #define ASM_COMMENT_START ";#"
241 #endif
242
243 typedef struct dw_cfi_struct *dw_cfi_ref;
244 typedef struct dw_fde_struct *dw_fde_ref;
245 typedef union  dw_cfi_oprnd_struct *dw_cfi_oprnd_ref;
246
247 /* Call frames are described using a sequence of Call Frame
248    Information instructions.  The register number, offset
249    and address fields are provided as possible operands;
250    their use is selected by the opcode field.  */
251
252 enum dw_cfi_oprnd_type {
253   dw_cfi_oprnd_unused,
254   dw_cfi_oprnd_reg_num,
255   dw_cfi_oprnd_offset,
256   dw_cfi_oprnd_addr,
257   dw_cfi_oprnd_loc
258 };
259
260 typedef union GTY(()) dw_cfi_oprnd_struct {
261   unsigned int GTY ((tag ("dw_cfi_oprnd_reg_num"))) dw_cfi_reg_num;
262   HOST_WIDE_INT GTY ((tag ("dw_cfi_oprnd_offset"))) dw_cfi_offset;
263   const char * GTY ((tag ("dw_cfi_oprnd_addr"))) dw_cfi_addr;
264   struct dw_loc_descr_struct * GTY ((tag ("dw_cfi_oprnd_loc"))) dw_cfi_loc;
265 }
266 dw_cfi_oprnd;
267
268 typedef struct GTY(()) dw_cfi_struct {
269   dw_cfi_ref dw_cfi_next;
270   enum dwarf_call_frame_info dw_cfi_opc;
271   dw_cfi_oprnd GTY ((desc ("dw_cfi_oprnd1_desc (%1.dw_cfi_opc)")))
272     dw_cfi_oprnd1;
273   dw_cfi_oprnd GTY ((desc ("dw_cfi_oprnd2_desc (%1.dw_cfi_opc)")))
274     dw_cfi_oprnd2;
275 }
276 dw_cfi_node;
277
278 /* This is how we define the location of the CFA. We use to handle it
279    as REG + OFFSET all the time,  but now it can be more complex.
280    It can now be either REG + CFA_OFFSET or *(REG + BASE_OFFSET) + CFA_OFFSET.
281    Instead of passing around REG and OFFSET, we pass a copy
282    of this structure.  */
283 typedef struct GTY(()) cfa_loc {
284   HOST_WIDE_INT offset;
285   HOST_WIDE_INT base_offset;
286   unsigned int reg;
287   BOOL_BITFIELD indirect : 1;  /* 1 if CFA is accessed via a dereference.  */
288   BOOL_BITFIELD in_use : 1;    /* 1 if a saved cfa is stored here.  */
289 } dw_cfa_location;
290
291 /* All call frame descriptions (FDE's) in the GCC generated DWARF
292    refer to a single Common Information Entry (CIE), defined at
293    the beginning of the .debug_frame section.  This use of a single
294    CIE obviates the need to keep track of multiple CIE's
295    in the DWARF generation routines below.  */
296
297 typedef struct GTY(()) dw_fde_struct {
298   tree decl;
299   const char *dw_fde_begin;
300   const char *dw_fde_current_label;
301   const char *dw_fde_end;
302   const char *dw_fde_hot_section_label;
303   const char *dw_fde_hot_section_end_label;
304   const char *dw_fde_unlikely_section_label;
305   const char *dw_fde_unlikely_section_end_label;
306   dw_cfi_ref dw_fde_cfi;
307   dw_cfi_ref dw_fde_switch_cfi; /* Last CFI before switching sections.  */
308   HOST_WIDE_INT stack_realignment;
309   unsigned funcdef_number;
310   /* Dynamic realign argument pointer register.  */
311   unsigned int drap_reg;
312   /* Virtual dynamic realign argument pointer register.  */
313   unsigned int vdrap_reg;
314   /* These 3 flags are copied from rtl_data in function.h.  */
315   unsigned all_throwers_are_sibcalls : 1;
316   unsigned uses_eh_lsda : 1;
317   unsigned nothrow : 1;
318   /* Whether we did stack realign in this call frame.  */
319   unsigned stack_realign : 1;
320   /* Whether dynamic realign argument pointer register has been saved.  */
321   unsigned drap_reg_saved: 1;
322   /* True iff dw_fde_begin label is in text_section or cold_text_section.  */
323   unsigned in_std_section : 1;
324   /* True iff dw_fde_unlikely_section_label is in text_section or
325      cold_text_section.  */
326   unsigned cold_in_std_section : 1;
327   /* True iff switched sections.  */
328   unsigned dw_fde_switched_sections : 1;
329   /* True iff switching from cold to hot section.  */
330   unsigned dw_fde_switched_cold_to_hot : 1;
331 }
332 dw_fde_node;
333
334 /* Maximum size (in bytes) of an artificially generated label.  */
335 #define MAX_ARTIFICIAL_LABEL_BYTES      30
336
337 /* The size of addresses as they appear in the Dwarf 2 data.
338    Some architectures use word addresses to refer to code locations,
339    but Dwarf 2 info always uses byte addresses.  On such machines,
340    Dwarf 2 addresses need to be larger than the architecture's
341    pointers.  */
342 #ifndef DWARF2_ADDR_SIZE
343 #define DWARF2_ADDR_SIZE (POINTER_SIZE / BITS_PER_UNIT)
344 #endif
345
346 /* The size in bytes of a DWARF field indicating an offset or length
347    relative to a debug info section, specified to be 4 bytes in the
348    DWARF-2 specification.  The SGI/MIPS ABI defines it to be the same
349    as PTR_SIZE.  */
350
351 #ifndef DWARF_OFFSET_SIZE
352 #define DWARF_OFFSET_SIZE 4
353 #endif
354
355 /* The size in bytes of a DWARF 4 type signature.  */
356
357 #ifndef DWARF_TYPE_SIGNATURE_SIZE
358 #define DWARF_TYPE_SIGNATURE_SIZE 8
359 #endif
360
361 /* According to the (draft) DWARF 3 specification, the initial length
362    should either be 4 or 12 bytes.  When it's 12 bytes, the first 4
363    bytes are 0xffffffff, followed by the length stored in the next 8
364    bytes.
365
366    However, the SGI/MIPS ABI uses an initial length which is equal to
367    DWARF_OFFSET_SIZE.  It is defined (elsewhere) accordingly.  */
368
369 #ifndef DWARF_INITIAL_LENGTH_SIZE
370 #define DWARF_INITIAL_LENGTH_SIZE (DWARF_OFFSET_SIZE == 4 ? 4 : 12)
371 #endif
372
373 /* Round SIZE up to the nearest BOUNDARY.  */
374 #define DWARF_ROUND(SIZE,BOUNDARY) \
375   ((((SIZE) + (BOUNDARY) - 1) / (BOUNDARY)) * (BOUNDARY))
376
377 /* Offsets recorded in opcodes are a multiple of this alignment factor.  */
378 #ifndef DWARF_CIE_DATA_ALIGNMENT
379 #ifdef STACK_GROWS_DOWNWARD
380 #define DWARF_CIE_DATA_ALIGNMENT (-((int) UNITS_PER_WORD))
381 #else
382 #define DWARF_CIE_DATA_ALIGNMENT ((int) UNITS_PER_WORD)
383 #endif
384 #endif
385
386 /* CIE identifier.  */
387 #if HOST_BITS_PER_WIDE_INT >= 64
388 #define DWARF_CIE_ID \
389   (unsigned HOST_WIDE_INT) (DWARF_OFFSET_SIZE == 4 ? DW_CIE_ID : DW64_CIE_ID)
390 #else
391 #define DWARF_CIE_ID DW_CIE_ID
392 #endif
393
394 /* A pointer to the base of a table that contains frame description
395    information for each routine.  */
396 static GTY((length ("fde_table_allocated"))) dw_fde_ref fde_table;
397
398 /* Number of elements currently allocated for fde_table.  */
399 static GTY(()) unsigned fde_table_allocated;
400
401 /* Number of elements in fde_table currently in use.  */
402 static GTY(()) unsigned fde_table_in_use;
403
404 /* Size (in elements) of increments by which we may expand the
405    fde_table.  */
406 #define FDE_TABLE_INCREMENT 256
407
408 /* Get the current fde_table entry we should use.  */
409
410 static inline dw_fde_ref
411 current_fde (void)
412 {
413   return fde_table_in_use ? &fde_table[fde_table_in_use - 1] : NULL;
414 }
415
416 /* A list of call frame insns for the CIE.  */
417 static GTY(()) dw_cfi_ref cie_cfi_head;
418
419 #if defined (DWARF2_DEBUGGING_INFO) || defined (DWARF2_UNWIND_INFO)
420 /* Some DWARF extensions (e.g., MIPS/SGI) implement a subprogram
421    attribute that accelerates the lookup of the FDE associated
422    with the subprogram.  This variable holds the table index of the FDE
423    associated with the current function (body) definition.  */
424 static unsigned current_funcdef_fde;
425 #endif
426
427 struct GTY(()) indirect_string_node {
428   const char *str;
429   unsigned int refcount;
430   enum dwarf_form form;
431   char *label;
432 };
433
434 static GTY ((param_is (struct indirect_string_node))) htab_t debug_str_hash;
435
436 /* True if the compilation unit has location entries that reference
437    debug strings.  */
438 static GTY(()) bool debug_str_hash_forced = false;
439
440 static GTY(()) int dw2_string_counter;
441 static GTY(()) unsigned long dwarf2out_cfi_label_num;
442
443 /* True if the compilation unit places functions in more than one section.  */
444 static GTY(()) bool have_multiple_function_sections = false;
445
446 /* Whether the default text and cold text sections have been used at all.  */
447
448 static GTY(()) bool text_section_used = false;
449 static GTY(()) bool cold_text_section_used = false;
450
451 /* The default cold text section.  */
452 static GTY(()) section *cold_text_section;
453
454 #if defined (DWARF2_DEBUGGING_INFO) || defined (DWARF2_UNWIND_INFO)
455
456 /* Forward declarations for functions defined in this file.  */
457
458 static char *stripattributes (const char *);
459 static const char *dwarf_cfi_name (unsigned);
460 static dw_cfi_ref new_cfi (void);
461 static void add_cfi (dw_cfi_ref *, dw_cfi_ref);
462 static void add_fde_cfi (const char *, dw_cfi_ref);
463 static void lookup_cfa_1 (dw_cfi_ref, dw_cfa_location *, dw_cfa_location *);
464 static void lookup_cfa (dw_cfa_location *);
465 static void reg_save (const char *, unsigned, unsigned, HOST_WIDE_INT);
466 #ifdef DWARF2_UNWIND_INFO
467 static void initial_return_save (rtx);
468 #endif
469 static HOST_WIDE_INT stack_adjust_offset (const_rtx, HOST_WIDE_INT,
470                                           HOST_WIDE_INT);
471 static void output_cfi (dw_cfi_ref, dw_fde_ref, int);
472 static void output_cfi_directive (dw_cfi_ref);
473 static void output_call_frame_info (int);
474 static void dwarf2out_note_section_used (void);
475 static void flush_queued_reg_saves (void);
476 static bool clobbers_queued_reg_save (const_rtx);
477 static void dwarf2out_frame_debug_expr (rtx, const char *);
478
479 /* Support for complex CFA locations.  */
480 static void output_cfa_loc (dw_cfi_ref);
481 static void output_cfa_loc_raw (dw_cfi_ref);
482 static void get_cfa_from_loc_descr (dw_cfa_location *,
483                                     struct dw_loc_descr_struct *);
484 static struct dw_loc_descr_struct *build_cfa_loc
485   (dw_cfa_location *, HOST_WIDE_INT);
486 static struct dw_loc_descr_struct *build_cfa_aligned_loc
487   (HOST_WIDE_INT, HOST_WIDE_INT);
488 static void def_cfa_1 (const char *, dw_cfa_location *);
489
490 /* How to start an assembler comment.  */
491 #ifndef ASM_COMMENT_START
492 #define ASM_COMMENT_START ";#"
493 #endif
494
495 /* Data and reference forms for relocatable data.  */
496 #define DW_FORM_data (DWARF_OFFSET_SIZE == 8 ? DW_FORM_data8 : DW_FORM_data4)
497 #define DW_FORM_ref (DWARF_OFFSET_SIZE == 8 ? DW_FORM_ref8 : DW_FORM_ref4)
498
499 #ifndef DEBUG_FRAME_SECTION
500 #define DEBUG_FRAME_SECTION     ".debug_frame"
501 #endif
502
503 #ifndef FUNC_BEGIN_LABEL
504 #define FUNC_BEGIN_LABEL        "LFB"
505 #endif
506
507 #ifndef FUNC_END_LABEL
508 #define FUNC_END_LABEL          "LFE"
509 #endif
510
511 #ifndef FRAME_BEGIN_LABEL
512 #define FRAME_BEGIN_LABEL       "Lframe"
513 #endif
514 #define CIE_AFTER_SIZE_LABEL    "LSCIE"
515 #define CIE_END_LABEL           "LECIE"
516 #define FDE_LABEL               "LSFDE"
517 #define FDE_AFTER_SIZE_LABEL    "LASFDE"
518 #define FDE_END_LABEL           "LEFDE"
519 #define LINE_NUMBER_BEGIN_LABEL "LSLT"
520 #define LINE_NUMBER_END_LABEL   "LELT"
521 #define LN_PROLOG_AS_LABEL      "LASLTP"
522 #define LN_PROLOG_END_LABEL     "LELTP"
523 #define DIE_LABEL_PREFIX        "DW"
524
525 /* The DWARF 2 CFA column which tracks the return address.  Normally this
526    is the column for PC, or the first column after all of the hard
527    registers.  */
528 #ifndef DWARF_FRAME_RETURN_COLUMN
529 #ifdef PC_REGNUM
530 #define DWARF_FRAME_RETURN_COLUMN       DWARF_FRAME_REGNUM (PC_REGNUM)
531 #else
532 #define DWARF_FRAME_RETURN_COLUMN       DWARF_FRAME_REGISTERS
533 #endif
534 #endif
535
536 /* The mapping from gcc register number to DWARF 2 CFA column number.  By
537    default, we just provide columns for all registers.  */
538 #ifndef DWARF_FRAME_REGNUM
539 #define DWARF_FRAME_REGNUM(REG) DBX_REGISTER_NUMBER (REG)
540 #endif
541 \f
542 /* Hook used by __throw.  */
543
544 rtx
545 expand_builtin_dwarf_sp_column (void)
546 {
547   unsigned int dwarf_regnum = DWARF_FRAME_REGNUM (STACK_POINTER_REGNUM);
548   return GEN_INT (DWARF2_FRAME_REG_OUT (dwarf_regnum, 1));
549 }
550
551 /* Return a pointer to a copy of the section string name S with all
552    attributes stripped off, and an asterisk prepended (for assemble_name).  */
553
554 static inline char *
555 stripattributes (const char *s)
556 {
557   char *stripped = XNEWVEC (char, strlen (s) + 2);
558   char *p = stripped;
559
560   *p++ = '*';
561
562   while (*s && *s != ',')
563     *p++ = *s++;
564
565   *p = '\0';
566   return stripped;
567 }
568
569 /* MEM is a memory reference for the register size table, each element of
570    which has mode MODE.  Initialize column C as a return address column.  */
571
572 static void
573 init_return_column_size (enum machine_mode mode, rtx mem, unsigned int c)
574 {
575   HOST_WIDE_INT offset = c * GET_MODE_SIZE (mode);
576   HOST_WIDE_INT size = GET_MODE_SIZE (Pmode);
577   emit_move_insn (adjust_address (mem, mode, offset), GEN_INT (size));
578 }
579
580 /* Divide OFF by DWARF_CIE_DATA_ALIGNMENT, asserting no remainder.  */
581
582 static inline HOST_WIDE_INT
583 div_data_align (HOST_WIDE_INT off)
584 {
585   HOST_WIDE_INT r = off / DWARF_CIE_DATA_ALIGNMENT;
586   gcc_assert (r * DWARF_CIE_DATA_ALIGNMENT == off);
587   return r;
588 }
589
590 /* Return true if we need a signed version of a given opcode
591    (e.g. DW_CFA_offset_extended_sf vs DW_CFA_offset_extended).  */
592
593 static inline bool
594 need_data_align_sf_opcode (HOST_WIDE_INT off)
595 {
596   return DWARF_CIE_DATA_ALIGNMENT < 0 ? off > 0 : off < 0;
597 }
598
599 /* Generate code to initialize the register size table.  */
600
601 void
602 expand_builtin_init_dwarf_reg_sizes (tree address)
603 {
604   unsigned int i;
605   enum machine_mode mode = TYPE_MODE (char_type_node);
606   rtx addr = expand_normal (address);
607   rtx mem = gen_rtx_MEM (BLKmode, addr);
608   bool wrote_return_column = false;
609
610   for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
611     {
612       int rnum = DWARF2_FRAME_REG_OUT (DWARF_FRAME_REGNUM (i), 1);
613
614       if (rnum < DWARF_FRAME_REGISTERS)
615         {
616           HOST_WIDE_INT offset = rnum * GET_MODE_SIZE (mode);
617           enum machine_mode save_mode = reg_raw_mode[i];
618           HOST_WIDE_INT size;
619
620           if (HARD_REGNO_CALL_PART_CLOBBERED (i, save_mode))
621             save_mode = choose_hard_reg_mode (i, 1, true);
622           if (DWARF_FRAME_REGNUM (i) == DWARF_FRAME_RETURN_COLUMN)
623             {
624               if (save_mode == VOIDmode)
625                 continue;
626               wrote_return_column = true;
627             }
628           size = GET_MODE_SIZE (save_mode);
629           if (offset < 0)
630             continue;
631
632           emit_move_insn (adjust_address (mem, mode, offset),
633                           gen_int_mode (size, mode));
634         }
635     }
636
637   if (!wrote_return_column)
638     init_return_column_size (mode, mem, DWARF_FRAME_RETURN_COLUMN);
639
640 #ifdef DWARF_ALT_FRAME_RETURN_COLUMN
641   init_return_column_size (mode, mem, DWARF_ALT_FRAME_RETURN_COLUMN);
642 #endif
643
644   targetm.init_dwarf_reg_sizes_extra (address);
645 }
646
647 /* Convert a DWARF call frame info. operation to its string name */
648
649 static const char *
650 dwarf_cfi_name (unsigned int cfi_opc)
651 {
652   switch (cfi_opc)
653     {
654     case DW_CFA_advance_loc:
655       return "DW_CFA_advance_loc";
656     case DW_CFA_offset:
657       return "DW_CFA_offset";
658     case DW_CFA_restore:
659       return "DW_CFA_restore";
660     case DW_CFA_nop:
661       return "DW_CFA_nop";
662     case DW_CFA_set_loc:
663       return "DW_CFA_set_loc";
664     case DW_CFA_advance_loc1:
665       return "DW_CFA_advance_loc1";
666     case DW_CFA_advance_loc2:
667       return "DW_CFA_advance_loc2";
668     case DW_CFA_advance_loc4:
669       return "DW_CFA_advance_loc4";
670     case DW_CFA_offset_extended:
671       return "DW_CFA_offset_extended";
672     case DW_CFA_restore_extended:
673       return "DW_CFA_restore_extended";
674     case DW_CFA_undefined:
675       return "DW_CFA_undefined";
676     case DW_CFA_same_value:
677       return "DW_CFA_same_value";
678     case DW_CFA_register:
679       return "DW_CFA_register";
680     case DW_CFA_remember_state:
681       return "DW_CFA_remember_state";
682     case DW_CFA_restore_state:
683       return "DW_CFA_restore_state";
684     case DW_CFA_def_cfa:
685       return "DW_CFA_def_cfa";
686     case DW_CFA_def_cfa_register:
687       return "DW_CFA_def_cfa_register";
688     case DW_CFA_def_cfa_offset:
689       return "DW_CFA_def_cfa_offset";
690
691     /* DWARF 3 */
692     case DW_CFA_def_cfa_expression:
693       return "DW_CFA_def_cfa_expression";
694     case DW_CFA_expression:
695       return "DW_CFA_expression";
696     case DW_CFA_offset_extended_sf:
697       return "DW_CFA_offset_extended_sf";
698     case DW_CFA_def_cfa_sf:
699       return "DW_CFA_def_cfa_sf";
700     case DW_CFA_def_cfa_offset_sf:
701       return "DW_CFA_def_cfa_offset_sf";
702
703     /* SGI/MIPS specific */
704     case DW_CFA_MIPS_advance_loc8:
705       return "DW_CFA_MIPS_advance_loc8";
706
707     /* GNU extensions */
708     case DW_CFA_GNU_window_save:
709       return "DW_CFA_GNU_window_save";
710     case DW_CFA_GNU_args_size:
711       return "DW_CFA_GNU_args_size";
712     case DW_CFA_GNU_negative_offset_extended:
713       return "DW_CFA_GNU_negative_offset_extended";
714
715     default:
716       return "DW_CFA_<unknown>";
717     }
718 }
719
720 /* Return a pointer to a newly allocated Call Frame Instruction.  */
721
722 static inline dw_cfi_ref
723 new_cfi (void)
724 {
725   dw_cfi_ref cfi = GGC_NEW (dw_cfi_node);
726
727   cfi->dw_cfi_next = NULL;
728   cfi->dw_cfi_oprnd1.dw_cfi_reg_num = 0;
729   cfi->dw_cfi_oprnd2.dw_cfi_reg_num = 0;
730
731   return cfi;
732 }
733
734 /* Add a Call Frame Instruction to list of instructions.  */
735
736 static inline void
737 add_cfi (dw_cfi_ref *list_head, dw_cfi_ref cfi)
738 {
739   dw_cfi_ref *p;
740   dw_fde_ref fde = current_fde ();
741
742   /* When DRAP is used, CFA is defined with an expression.  Redefine
743      CFA may lead to a different CFA value.   */
744   /* ??? Of course, this heuristic fails when we're annotating epilogues,
745      because of course we'll always want to redefine the CFA back to the
746      stack pointer on the way out.  Where should we move this check?  */
747   if (0 && fde && fde->drap_reg != INVALID_REGNUM)
748     switch (cfi->dw_cfi_opc)
749       {
750         case DW_CFA_def_cfa_register:
751         case DW_CFA_def_cfa_offset:
752         case DW_CFA_def_cfa_offset_sf:
753         case DW_CFA_def_cfa:
754         case DW_CFA_def_cfa_sf:
755           gcc_unreachable ();
756
757         default:
758           break;
759       }
760
761   /* Find the end of the chain.  */
762   for (p = list_head; (*p) != NULL; p = &(*p)->dw_cfi_next)
763     ;
764
765   *p = cfi;
766 }
767
768 /* Generate a new label for the CFI info to refer to.  FORCE is true
769    if a label needs to be output even when using .cfi_* directives.  */
770
771 char *
772 dwarf2out_cfi_label (bool force)
773 {
774   static char label[20];
775
776   if (!force && dwarf2out_do_cfi_asm ())
777     {
778       /* In this case, we will be emitting the asm directive instead of
779          the label, so just return a placeholder to keep the rest of the
780          interfaces happy.  */
781       strcpy (label, "<do not output>");
782     }
783   else
784     {
785       ASM_GENERATE_INTERNAL_LABEL (label, "LCFI", dwarf2out_cfi_label_num++);
786       ASM_OUTPUT_LABEL (asm_out_file, label);
787     }
788
789   return label;
790 }
791
792 /* True if remember_state should be emitted before following CFI directive.  */
793 static bool emit_cfa_remember;
794
795 /* Add CFI to the current fde at the PC value indicated by LABEL if specified,
796    or to the CIE if LABEL is NULL.  */
797
798 static void
799 add_fde_cfi (const char *label, dw_cfi_ref cfi)
800 {
801   dw_cfi_ref *list_head;
802
803   if (emit_cfa_remember)
804     {
805       dw_cfi_ref cfi_remember;
806
807       /* Emit the state save.  */
808       emit_cfa_remember = false;
809       cfi_remember = new_cfi ();
810       cfi_remember->dw_cfi_opc = DW_CFA_remember_state;
811       add_fde_cfi (label, cfi_remember);
812     }
813
814   list_head = &cie_cfi_head;
815
816   if (dwarf2out_do_cfi_asm ())
817     {
818       if (label)
819         {
820           dw_fde_ref fde = current_fde ();
821
822           gcc_assert (fde != NULL);
823
824           /* We still have to add the cfi to the list so that lookup_cfa
825              works later on.  When -g2 and above we even need to force
826              emitting of CFI labels and add to list a DW_CFA_set_loc for
827              convert_cfa_to_fb_loc_list purposes.  If we're generating
828              DWARF3 output we use DW_OP_call_frame_cfa and so don't use
829              convert_cfa_to_fb_loc_list.  */
830           if (dwarf_version == 2
831               && debug_info_level > DINFO_LEVEL_TERSE
832               && (write_symbols == DWARF2_DEBUG
833                   || write_symbols == VMS_AND_DWARF2_DEBUG))
834             {
835               switch (cfi->dw_cfi_opc)
836                 {
837                 case DW_CFA_def_cfa_offset:
838                 case DW_CFA_def_cfa_offset_sf:
839                 case DW_CFA_def_cfa_register:
840                 case DW_CFA_def_cfa:
841                 case DW_CFA_def_cfa_sf:
842                 case DW_CFA_def_cfa_expression:
843                 case DW_CFA_restore_state:
844                   if (*label == 0 || strcmp (label, "<do not output>") == 0)
845                     label = dwarf2out_cfi_label (true);
846
847                   if (fde->dw_fde_current_label == NULL
848                       || strcmp (label, fde->dw_fde_current_label) != 0)
849                     {
850                       dw_cfi_ref xcfi;
851
852                       label = xstrdup (label);
853
854                       /* Set the location counter to the new label.  */
855                       xcfi = new_cfi ();
856                       /* It doesn't metter whether DW_CFA_set_loc
857                          or DW_CFA_advance_loc4 is added here, those aren't
858                          emitted into assembly, only looked up by
859                          convert_cfa_to_fb_loc_list.  */
860                       xcfi->dw_cfi_opc = DW_CFA_set_loc;
861                       xcfi->dw_cfi_oprnd1.dw_cfi_addr = label;
862                       add_cfi (&fde->dw_fde_cfi, xcfi);
863                       fde->dw_fde_current_label = label;
864                     }
865                   break;
866                 default:
867                   break;
868                 }
869             }
870
871           output_cfi_directive (cfi);
872
873           list_head = &fde->dw_fde_cfi;
874         }
875       /* ??? If this is a CFI for the CIE, we don't emit.  This
876          assumes that the standard CIE contents that the assembler
877          uses matches the standard CIE contents that the compiler
878          uses.  This is probably a bad assumption.  I'm not quite
879          sure how to address this for now.  */
880     }
881   else if (label)
882     {
883       dw_fde_ref fde = current_fde ();
884
885       gcc_assert (fde != NULL);
886
887       if (*label == 0)
888         label = dwarf2out_cfi_label (false);
889
890       if (fde->dw_fde_current_label == NULL
891           || strcmp (label, fde->dw_fde_current_label) != 0)
892         {
893           dw_cfi_ref xcfi;
894
895           label = xstrdup (label);
896
897           /* Set the location counter to the new label.  */
898           xcfi = new_cfi ();
899           /* If we have a current label, advance from there, otherwise
900              set the location directly using set_loc.  */
901           xcfi->dw_cfi_opc = fde->dw_fde_current_label
902                              ? DW_CFA_advance_loc4
903                              : DW_CFA_set_loc;
904           xcfi->dw_cfi_oprnd1.dw_cfi_addr = label;
905           add_cfi (&fde->dw_fde_cfi, xcfi);
906
907           fde->dw_fde_current_label = label;
908         }
909
910       list_head = &fde->dw_fde_cfi;
911     }
912
913   add_cfi (list_head, cfi);
914 }
915
916 /* Subroutine of lookup_cfa.  */
917
918 static void
919 lookup_cfa_1 (dw_cfi_ref cfi, dw_cfa_location *loc, dw_cfa_location *remember)
920 {
921   switch (cfi->dw_cfi_opc)
922     {
923     case DW_CFA_def_cfa_offset:
924     case DW_CFA_def_cfa_offset_sf:
925       loc->offset = cfi->dw_cfi_oprnd1.dw_cfi_offset;
926       break;
927     case DW_CFA_def_cfa_register:
928       loc->reg = cfi->dw_cfi_oprnd1.dw_cfi_reg_num;
929       break;
930     case DW_CFA_def_cfa:
931     case DW_CFA_def_cfa_sf:
932       loc->reg = cfi->dw_cfi_oprnd1.dw_cfi_reg_num;
933       loc->offset = cfi->dw_cfi_oprnd2.dw_cfi_offset;
934       break;
935     case DW_CFA_def_cfa_expression:
936       get_cfa_from_loc_descr (loc, cfi->dw_cfi_oprnd1.dw_cfi_loc);
937       break;
938
939     case DW_CFA_remember_state:
940       gcc_assert (!remember->in_use);
941       *remember = *loc;
942       remember->in_use = 1;
943       break;
944     case DW_CFA_restore_state:
945       gcc_assert (remember->in_use);
946       *loc = *remember;
947       remember->in_use = 0;
948       break;
949
950     default:
951       break;
952     }
953 }
954
955 /* Find the previous value for the CFA.  */
956
957 static void
958 lookup_cfa (dw_cfa_location *loc)
959 {
960   dw_cfi_ref cfi;
961   dw_fde_ref fde;
962   dw_cfa_location remember;
963
964   memset (loc, 0, sizeof (*loc));
965   loc->reg = INVALID_REGNUM;
966   remember = *loc;
967
968   for (cfi = cie_cfi_head; cfi; cfi = cfi->dw_cfi_next)
969     lookup_cfa_1 (cfi, loc, &remember);
970
971   fde = current_fde ();
972   if (fde)
973     for (cfi = fde->dw_fde_cfi; cfi; cfi = cfi->dw_cfi_next)
974       lookup_cfa_1 (cfi, loc, &remember);
975 }
976
977 /* The current rule for calculating the DWARF2 canonical frame address.  */
978 static dw_cfa_location cfa;
979
980 /* The register used for saving registers to the stack, and its offset
981    from the CFA.  */
982 static dw_cfa_location cfa_store;
983
984 /* The current save location around an epilogue.  */
985 static dw_cfa_location cfa_remember;
986
987 /* The running total of the size of arguments pushed onto the stack.  */
988 static HOST_WIDE_INT args_size;
989
990 /* The last args_size we actually output.  */
991 static HOST_WIDE_INT old_args_size;
992
993 /* Entry point to update the canonical frame address (CFA).
994    LABEL is passed to add_fde_cfi.  The value of CFA is now to be
995    calculated from REG+OFFSET.  */
996
997 void
998 dwarf2out_def_cfa (const char *label, unsigned int reg, HOST_WIDE_INT offset)
999 {
1000   dw_cfa_location loc;
1001   loc.indirect = 0;
1002   loc.base_offset = 0;
1003   loc.reg = reg;
1004   loc.offset = offset;
1005   def_cfa_1 (label, &loc);
1006 }
1007
1008 /* Determine if two dw_cfa_location structures define the same data.  */
1009
1010 static bool
1011 cfa_equal_p (const dw_cfa_location *loc1, const dw_cfa_location *loc2)
1012 {
1013   return (loc1->reg == loc2->reg
1014           && loc1->offset == loc2->offset
1015           && loc1->indirect == loc2->indirect
1016           && (loc1->indirect == 0
1017               || loc1->base_offset == loc2->base_offset));
1018 }
1019
1020 /* This routine does the actual work.  The CFA is now calculated from
1021    the dw_cfa_location structure.  */
1022
1023 static void
1024 def_cfa_1 (const char *label, dw_cfa_location *loc_p)
1025 {
1026   dw_cfi_ref cfi;
1027   dw_cfa_location old_cfa, loc;
1028
1029   cfa = *loc_p;
1030   loc = *loc_p;
1031
1032   if (cfa_store.reg == loc.reg && loc.indirect == 0)
1033     cfa_store.offset = loc.offset;
1034
1035   loc.reg = DWARF_FRAME_REGNUM (loc.reg);
1036   lookup_cfa (&old_cfa);
1037
1038   /* If nothing changed, no need to issue any call frame instructions.  */
1039   if (cfa_equal_p (&loc, &old_cfa))
1040     return;
1041
1042   cfi = new_cfi ();
1043
1044   if (loc.reg == old_cfa.reg && !loc.indirect && !old_cfa.indirect)
1045     {
1046       /* Construct a "DW_CFA_def_cfa_offset <offset>" instruction, indicating
1047          the CFA register did not change but the offset did.  The data
1048          factoring for DW_CFA_def_cfa_offset_sf happens in output_cfi, or
1049          in the assembler via the .cfi_def_cfa_offset directive.  */
1050       if (loc.offset < 0)
1051         cfi->dw_cfi_opc = DW_CFA_def_cfa_offset_sf;
1052       else
1053         cfi->dw_cfi_opc = DW_CFA_def_cfa_offset;
1054       cfi->dw_cfi_oprnd1.dw_cfi_offset = loc.offset;
1055     }
1056
1057 #ifndef MIPS_DEBUGGING_INFO  /* SGI dbx thinks this means no offset.  */
1058   else if (loc.offset == old_cfa.offset
1059            && old_cfa.reg != INVALID_REGNUM
1060            && !loc.indirect
1061            && !old_cfa.indirect)
1062     {
1063       /* Construct a "DW_CFA_def_cfa_register <register>" instruction,
1064          indicating the CFA register has changed to <register> but the
1065          offset has not changed.  */
1066       cfi->dw_cfi_opc = DW_CFA_def_cfa_register;
1067       cfi->dw_cfi_oprnd1.dw_cfi_reg_num = loc.reg;
1068     }
1069 #endif
1070
1071   else if (loc.indirect == 0)
1072     {
1073       /* Construct a "DW_CFA_def_cfa <register> <offset>" instruction,
1074          indicating the CFA register has changed to <register> with
1075          the specified offset.  The data factoring for DW_CFA_def_cfa_sf
1076          happens in output_cfi, or in the assembler via the .cfi_def_cfa
1077          directive.  */
1078       if (loc.offset < 0)
1079         cfi->dw_cfi_opc = DW_CFA_def_cfa_sf;
1080       else
1081         cfi->dw_cfi_opc = DW_CFA_def_cfa;
1082       cfi->dw_cfi_oprnd1.dw_cfi_reg_num = loc.reg;
1083       cfi->dw_cfi_oprnd2.dw_cfi_offset = loc.offset;
1084     }
1085   else
1086     {
1087       /* Construct a DW_CFA_def_cfa_expression instruction to
1088          calculate the CFA using a full location expression since no
1089          register-offset pair is available.  */
1090       struct dw_loc_descr_struct *loc_list;
1091
1092       cfi->dw_cfi_opc = DW_CFA_def_cfa_expression;
1093       loc_list = build_cfa_loc (&loc, 0);
1094       cfi->dw_cfi_oprnd1.dw_cfi_loc = loc_list;
1095     }
1096
1097   add_fde_cfi (label, cfi);
1098 }
1099
1100 /* Add the CFI for saving a register.  REG is the CFA column number.
1101    LABEL is passed to add_fde_cfi.
1102    If SREG is -1, the register is saved at OFFSET from the CFA;
1103    otherwise it is saved in SREG.  */
1104
1105 static void
1106 reg_save (const char *label, unsigned int reg, unsigned int sreg, HOST_WIDE_INT offset)
1107 {
1108   dw_cfi_ref cfi = new_cfi ();
1109   dw_fde_ref fde = current_fde ();
1110
1111   cfi->dw_cfi_oprnd1.dw_cfi_reg_num = reg;
1112
1113   /* When stack is aligned, store REG using DW_CFA_expression with
1114      FP.  */
1115   if (fde
1116       && fde->stack_realign
1117       && sreg == INVALID_REGNUM)
1118     {
1119       cfi->dw_cfi_opc = DW_CFA_expression;
1120       cfi->dw_cfi_oprnd1.dw_cfi_reg_num = reg;
1121       cfi->dw_cfi_oprnd2.dw_cfi_loc
1122         = build_cfa_aligned_loc (offset, fde->stack_realignment);
1123     }
1124   else if (sreg == INVALID_REGNUM)
1125     {
1126       if (need_data_align_sf_opcode (offset))
1127         cfi->dw_cfi_opc = DW_CFA_offset_extended_sf;
1128       else if (reg & ~0x3f)
1129         cfi->dw_cfi_opc = DW_CFA_offset_extended;
1130       else
1131         cfi->dw_cfi_opc = DW_CFA_offset;
1132       cfi->dw_cfi_oprnd2.dw_cfi_offset = offset;
1133     }
1134   else if (sreg == reg)
1135     cfi->dw_cfi_opc = DW_CFA_same_value;
1136   else
1137     {
1138       cfi->dw_cfi_opc = DW_CFA_register;
1139       cfi->dw_cfi_oprnd2.dw_cfi_reg_num = sreg;
1140     }
1141
1142   add_fde_cfi (label, cfi);
1143 }
1144
1145 /* Add the CFI for saving a register window.  LABEL is passed to reg_save.
1146    This CFI tells the unwinder that it needs to restore the window registers
1147    from the previous frame's window save area.
1148
1149    ??? Perhaps we should note in the CIE where windows are saved (instead of
1150    assuming 0(cfa)) and what registers are in the window.  */
1151
1152 void
1153 dwarf2out_window_save (const char *label)
1154 {
1155   dw_cfi_ref cfi = new_cfi ();
1156
1157   cfi->dw_cfi_opc = DW_CFA_GNU_window_save;
1158   add_fde_cfi (label, cfi);
1159 }
1160
1161 /* Entry point for saving a register to the stack.  REG is the GCC register
1162    number.  LABEL and OFFSET are passed to reg_save.  */
1163
1164 void
1165 dwarf2out_reg_save (const char *label, unsigned int reg, HOST_WIDE_INT offset)
1166 {
1167   reg_save (label, DWARF_FRAME_REGNUM (reg), INVALID_REGNUM, offset);
1168 }
1169
1170 /* Entry point for saving the return address in the stack.
1171    LABEL and OFFSET are passed to reg_save.  */
1172
1173 void
1174 dwarf2out_return_save (const char *label, HOST_WIDE_INT offset)
1175 {
1176   reg_save (label, DWARF_FRAME_RETURN_COLUMN, INVALID_REGNUM, offset);
1177 }
1178
1179 /* Entry point for saving the return address in a register.
1180    LABEL and SREG are passed to reg_save.  */
1181
1182 void
1183 dwarf2out_return_reg (const char *label, unsigned int sreg)
1184 {
1185   reg_save (label, DWARF_FRAME_RETURN_COLUMN, DWARF_FRAME_REGNUM (sreg), 0);
1186 }
1187
1188 #ifdef DWARF2_UNWIND_INFO
1189 /* Record the initial position of the return address.  RTL is
1190    INCOMING_RETURN_ADDR_RTX.  */
1191
1192 static void
1193 initial_return_save (rtx rtl)
1194 {
1195   unsigned int reg = INVALID_REGNUM;
1196   HOST_WIDE_INT offset = 0;
1197
1198   switch (GET_CODE (rtl))
1199     {
1200     case REG:
1201       /* RA is in a register.  */
1202       reg = DWARF_FRAME_REGNUM (REGNO (rtl));
1203       break;
1204
1205     case MEM:
1206       /* RA is on the stack.  */
1207       rtl = XEXP (rtl, 0);
1208       switch (GET_CODE (rtl))
1209         {
1210         case REG:
1211           gcc_assert (REGNO (rtl) == STACK_POINTER_REGNUM);
1212           offset = 0;
1213           break;
1214
1215         case PLUS:
1216           gcc_assert (REGNO (XEXP (rtl, 0)) == STACK_POINTER_REGNUM);
1217           offset = INTVAL (XEXP (rtl, 1));
1218           break;
1219
1220         case MINUS:
1221           gcc_assert (REGNO (XEXP (rtl, 0)) == STACK_POINTER_REGNUM);
1222           offset = -INTVAL (XEXP (rtl, 1));
1223           break;
1224
1225         default:
1226           gcc_unreachable ();
1227         }
1228
1229       break;
1230
1231     case PLUS:
1232       /* The return address is at some offset from any value we can
1233          actually load.  For instance, on the SPARC it is in %i7+8. Just
1234          ignore the offset for now; it doesn't matter for unwinding frames.  */
1235       gcc_assert (CONST_INT_P (XEXP (rtl, 1)));
1236       initial_return_save (XEXP (rtl, 0));
1237       return;
1238
1239     default:
1240       gcc_unreachable ();
1241     }
1242
1243   if (reg != DWARF_FRAME_RETURN_COLUMN)
1244     reg_save (NULL, DWARF_FRAME_RETURN_COLUMN, reg, offset - cfa.offset);
1245 }
1246 #endif
1247
1248 /* Given a SET, calculate the amount of stack adjustment it
1249    contains.  */
1250
1251 static HOST_WIDE_INT
1252 stack_adjust_offset (const_rtx pattern, HOST_WIDE_INT cur_args_size,
1253                      HOST_WIDE_INT cur_offset)
1254 {
1255   const_rtx src = SET_SRC (pattern);
1256   const_rtx dest = SET_DEST (pattern);
1257   HOST_WIDE_INT offset = 0;
1258   enum rtx_code code;
1259
1260   if (dest == stack_pointer_rtx)
1261     {
1262       code = GET_CODE (src);
1263
1264       /* Assume (set (reg sp) (reg whatever)) sets args_size
1265          level to 0.  */
1266       if (code == REG && src != stack_pointer_rtx)
1267         {
1268           offset = -cur_args_size;
1269 #ifndef STACK_GROWS_DOWNWARD
1270           offset = -offset;
1271 #endif
1272           return offset - cur_offset;
1273         }
1274
1275       if (! (code == PLUS || code == MINUS)
1276           || XEXP (src, 0) != stack_pointer_rtx
1277           || !CONST_INT_P (XEXP (src, 1)))
1278         return 0;
1279
1280       /* (set (reg sp) (plus (reg sp) (const_int))) */
1281       offset = INTVAL (XEXP (src, 1));
1282       if (code == PLUS)
1283         offset = -offset;
1284       return offset;
1285     }
1286
1287   if (MEM_P (src) && !MEM_P (dest))
1288     dest = src;
1289   if (MEM_P (dest))
1290     {
1291       /* (set (mem (pre_dec (reg sp))) (foo)) */
1292       src = XEXP (dest, 0);
1293       code = GET_CODE (src);
1294
1295       switch (code)
1296         {
1297         case PRE_MODIFY:
1298         case POST_MODIFY:
1299           if (XEXP (src, 0) == stack_pointer_rtx)
1300             {
1301               rtx val = XEXP (XEXP (src, 1), 1);
1302               /* We handle only adjustments by constant amount.  */
1303               gcc_assert (GET_CODE (XEXP (src, 1)) == PLUS
1304                           && CONST_INT_P (val));
1305               offset = -INTVAL (val);
1306               break;
1307             }
1308           return 0;
1309
1310         case PRE_DEC:
1311         case POST_DEC:
1312           if (XEXP (src, 0) == stack_pointer_rtx)
1313             {
1314               offset = GET_MODE_SIZE (GET_MODE (dest));
1315               break;
1316             }
1317           return 0;
1318
1319         case PRE_INC:
1320         case POST_INC:
1321           if (XEXP (src, 0) == stack_pointer_rtx)
1322             {
1323               offset = -GET_MODE_SIZE (GET_MODE (dest));
1324               break;
1325             }
1326           return 0;
1327
1328         default:
1329           return 0;
1330         }
1331     }
1332   else
1333     return 0;
1334
1335   return offset;
1336 }
1337
1338 /* Precomputed args_size for CODE_LABELs and BARRIERs preceeding them,
1339    indexed by INSN_UID.  */
1340
1341 static HOST_WIDE_INT *barrier_args_size;
1342
1343 /* Helper function for compute_barrier_args_size.  Handle one insn.  */
1344
1345 static HOST_WIDE_INT
1346 compute_barrier_args_size_1 (rtx insn, HOST_WIDE_INT cur_args_size,
1347                              VEC (rtx, heap) **next)
1348 {
1349   HOST_WIDE_INT offset = 0;
1350   int i;
1351
1352   if (! RTX_FRAME_RELATED_P (insn))
1353     {
1354       if (prologue_epilogue_contains (insn))
1355         /* Nothing */;
1356       else if (GET_CODE (PATTERN (insn)) == SET)
1357         offset = stack_adjust_offset (PATTERN (insn), cur_args_size, 0);
1358       else if (GET_CODE (PATTERN (insn)) == PARALLEL
1359                || GET_CODE (PATTERN (insn)) == SEQUENCE)
1360         {
1361           /* There may be stack adjustments inside compound insns.  Search
1362              for them.  */
1363           for (i = XVECLEN (PATTERN (insn), 0) - 1; i >= 0; i--)
1364             if (GET_CODE (XVECEXP (PATTERN (insn), 0, i)) == SET)
1365               offset += stack_adjust_offset (XVECEXP (PATTERN (insn), 0, i),
1366                                              cur_args_size, offset);
1367         }
1368     }
1369   else
1370     {
1371       rtx expr = find_reg_note (insn, REG_FRAME_RELATED_EXPR, NULL_RTX);
1372
1373       if (expr)
1374         {
1375           expr = XEXP (expr, 0);
1376           if (GET_CODE (expr) == PARALLEL
1377               || GET_CODE (expr) == SEQUENCE)
1378             for (i = 1; i < XVECLEN (expr, 0); i++)
1379               {
1380                 rtx elem = XVECEXP (expr, 0, i);
1381
1382                 if (GET_CODE (elem) == SET && !RTX_FRAME_RELATED_P (elem))
1383                   offset += stack_adjust_offset (elem, cur_args_size, offset);
1384               }
1385         }
1386     }
1387
1388 #ifndef STACK_GROWS_DOWNWARD
1389   offset = -offset;
1390 #endif
1391
1392   cur_args_size += offset;
1393   if (cur_args_size < 0)
1394     cur_args_size = 0;
1395
1396   if (JUMP_P (insn))
1397     {
1398       rtx dest = JUMP_LABEL (insn);
1399
1400       if (dest)
1401         {
1402           if (barrier_args_size [INSN_UID (dest)] < 0)
1403             {
1404               barrier_args_size [INSN_UID (dest)] = cur_args_size;
1405               VEC_safe_push (rtx, heap, *next, dest);
1406             }
1407         }
1408     }
1409
1410   return cur_args_size;
1411 }
1412
1413 /* Walk the whole function and compute args_size on BARRIERs.  */
1414
1415 static void
1416 compute_barrier_args_size (void)
1417 {
1418   int max_uid = get_max_uid (), i;
1419   rtx insn;
1420   VEC (rtx, heap) *worklist, *next, *tmp;
1421
1422   barrier_args_size = XNEWVEC (HOST_WIDE_INT, max_uid);
1423   for (i = 0; i < max_uid; i++)
1424     barrier_args_size[i] = -1;
1425
1426   worklist = VEC_alloc (rtx, heap, 20);
1427   next = VEC_alloc (rtx, heap, 20);
1428   insn = get_insns ();
1429   barrier_args_size[INSN_UID (insn)] = 0;
1430   VEC_quick_push (rtx, worklist, insn);
1431   for (;;)
1432     {
1433       while (!VEC_empty (rtx, worklist))
1434         {
1435           rtx prev, body, first_insn;
1436           HOST_WIDE_INT cur_args_size;
1437
1438           first_insn = insn = VEC_pop (rtx, worklist);
1439           cur_args_size = barrier_args_size[INSN_UID (insn)];
1440           prev = prev_nonnote_insn (insn);
1441           if (prev && BARRIER_P (prev))
1442             barrier_args_size[INSN_UID (prev)] = cur_args_size;
1443
1444           for (; insn; insn = NEXT_INSN (insn))
1445             {
1446               if (INSN_DELETED_P (insn) || NOTE_P (insn))
1447                 continue;
1448               if (BARRIER_P (insn))
1449                 break;
1450
1451               if (LABEL_P (insn))
1452                 {
1453                   if (insn == first_insn)
1454                     continue;
1455                   else if (barrier_args_size[INSN_UID (insn)] < 0)
1456                     {
1457                       barrier_args_size[INSN_UID (insn)] = cur_args_size;
1458                       continue;
1459                     }
1460                   else
1461                     {
1462                       /* The insns starting with this label have been
1463                          already scanned or are in the worklist.  */
1464                       break;
1465                     }
1466                 }
1467
1468               body = PATTERN (insn);
1469               if (GET_CODE (body) == SEQUENCE)
1470                 {
1471                   HOST_WIDE_INT dest_args_size = cur_args_size;
1472                   for (i = 1; i < XVECLEN (body, 0); i++)
1473                     if (INSN_ANNULLED_BRANCH_P (XVECEXP (body, 0, 0))
1474                         && INSN_FROM_TARGET_P (XVECEXP (body, 0, i)))
1475                       dest_args_size
1476                         = compute_barrier_args_size_1 (XVECEXP (body, 0, i),
1477                                                        dest_args_size, &next);
1478                     else
1479                       cur_args_size
1480                         = compute_barrier_args_size_1 (XVECEXP (body, 0, i),
1481                                                        cur_args_size, &next);
1482
1483                   if (INSN_ANNULLED_BRANCH_P (XVECEXP (body, 0, 0)))
1484                     compute_barrier_args_size_1 (XVECEXP (body, 0, 0),
1485                                                  dest_args_size, &next);
1486                   else
1487                     cur_args_size
1488                       = compute_barrier_args_size_1 (XVECEXP (body, 0, 0),
1489                                                      cur_args_size, &next);
1490                 }
1491               else
1492                 cur_args_size
1493                   = compute_barrier_args_size_1 (insn, cur_args_size, &next);
1494             }
1495         }
1496
1497       if (VEC_empty (rtx, next))
1498         break;
1499
1500       /* Swap WORKLIST with NEXT and truncate NEXT for next iteration.  */
1501       tmp = next;
1502       next = worklist;
1503       worklist = tmp;
1504       VEC_truncate (rtx, next, 0);
1505     }
1506
1507   VEC_free (rtx, heap, worklist);
1508   VEC_free (rtx, heap, next);
1509 }
1510
1511 /* Add a CFI to update the running total of the size of arguments
1512    pushed onto the stack.  */
1513
1514 static void
1515 dwarf2out_args_size (const char *label, HOST_WIDE_INT size)
1516 {
1517   dw_cfi_ref cfi;
1518
1519   if (size == old_args_size)
1520     return;
1521
1522   old_args_size = size;
1523
1524   cfi = new_cfi ();
1525   cfi->dw_cfi_opc = DW_CFA_GNU_args_size;
1526   cfi->dw_cfi_oprnd1.dw_cfi_offset = size;
1527   add_fde_cfi (label, cfi);
1528 }
1529
1530 /* Record a stack adjustment of OFFSET bytes.  */
1531
1532 static void
1533 dwarf2out_stack_adjust (HOST_WIDE_INT offset, const char *label)
1534 {
1535   if (cfa.reg == STACK_POINTER_REGNUM)
1536     cfa.offset += offset;
1537
1538   if (cfa_store.reg == STACK_POINTER_REGNUM)
1539     cfa_store.offset += offset;
1540
1541   if (ACCUMULATE_OUTGOING_ARGS)
1542     return;
1543
1544 #ifndef STACK_GROWS_DOWNWARD
1545   offset = -offset;
1546 #endif
1547
1548   args_size += offset;
1549   if (args_size < 0)
1550     args_size = 0;
1551
1552   def_cfa_1 (label, &cfa);
1553   if (flag_asynchronous_unwind_tables)
1554     dwarf2out_args_size (label, args_size);
1555 }
1556
1557 /* Check INSN to see if it looks like a push or a stack adjustment, and
1558    make a note of it if it does.  EH uses this information to find out
1559    how much extra space it needs to pop off the stack.  */
1560
1561 static void
1562 dwarf2out_notice_stack_adjust (rtx insn, bool after_p)
1563 {
1564   HOST_WIDE_INT offset;
1565   const char *label;
1566   int i;
1567
1568   /* Don't handle epilogues at all.  Certainly it would be wrong to do so
1569      with this function.  Proper support would require all frame-related
1570      insns to be marked, and to be able to handle saving state around
1571      epilogues textually in the middle of the function.  */
1572   if (prologue_epilogue_contains (insn))
1573     return;
1574
1575   /* If INSN is an instruction from target of an annulled branch, the
1576      effects are for the target only and so current argument size
1577      shouldn't change at all.  */
1578   if (final_sequence
1579       && INSN_ANNULLED_BRANCH_P (XVECEXP (final_sequence, 0, 0))
1580       && INSN_FROM_TARGET_P (insn))
1581     return;
1582
1583   /* If only calls can throw, and we have a frame pointer,
1584      save up adjustments until we see the CALL_INSN.  */
1585   if (!flag_asynchronous_unwind_tables && cfa.reg != STACK_POINTER_REGNUM)
1586     {
1587       if (CALL_P (insn) && !after_p)
1588         {
1589           /* Extract the size of the args from the CALL rtx itself.  */
1590           insn = PATTERN (insn);
1591           if (GET_CODE (insn) == PARALLEL)
1592             insn = XVECEXP (insn, 0, 0);
1593           if (GET_CODE (insn) == SET)
1594             insn = SET_SRC (insn);
1595           gcc_assert (GET_CODE (insn) == CALL);
1596           dwarf2out_args_size ("", INTVAL (XEXP (insn, 1)));
1597         }
1598       return;
1599     }
1600
1601   if (CALL_P (insn) && !after_p)
1602     {
1603       if (!flag_asynchronous_unwind_tables)
1604         dwarf2out_args_size ("", args_size);
1605       return;
1606     }
1607   else if (BARRIER_P (insn))
1608     {
1609       /* Don't call compute_barrier_args_size () if the only
1610          BARRIER is at the end of function.  */
1611       if (barrier_args_size == NULL && next_nonnote_insn (insn))
1612         compute_barrier_args_size ();
1613       if (barrier_args_size == NULL)
1614         offset = 0;
1615       else
1616         {
1617           offset = barrier_args_size[INSN_UID (insn)];
1618           if (offset < 0)
1619             offset = 0;
1620         }
1621
1622       offset -= args_size;
1623 #ifndef STACK_GROWS_DOWNWARD
1624       offset = -offset;
1625 #endif
1626     }
1627   else if (GET_CODE (PATTERN (insn)) == SET)
1628     offset = stack_adjust_offset (PATTERN (insn), args_size, 0);
1629   else if (GET_CODE (PATTERN (insn)) == PARALLEL
1630            || GET_CODE (PATTERN (insn)) == SEQUENCE)
1631     {
1632       /* There may be stack adjustments inside compound insns.  Search
1633          for them.  */
1634       for (offset = 0, i = XVECLEN (PATTERN (insn), 0) - 1; i >= 0; i--)
1635         if (GET_CODE (XVECEXP (PATTERN (insn), 0, i)) == SET)
1636           offset += stack_adjust_offset (XVECEXP (PATTERN (insn), 0, i),
1637                                          args_size, offset);
1638     }
1639   else
1640     return;
1641
1642   if (offset == 0)
1643     return;
1644
1645   label = dwarf2out_cfi_label (false);
1646   dwarf2out_stack_adjust (offset, label);
1647 }
1648
1649 #endif
1650
1651 /* We delay emitting a register save until either (a) we reach the end
1652    of the prologue or (b) the register is clobbered.  This clusters
1653    register saves so that there are fewer pc advances.  */
1654
1655 struct GTY(()) queued_reg_save {
1656   struct queued_reg_save *next;
1657   rtx reg;
1658   HOST_WIDE_INT cfa_offset;
1659   rtx saved_reg;
1660 };
1661
1662 static GTY(()) struct queued_reg_save *queued_reg_saves;
1663
1664 /* The caller's ORIG_REG is saved in SAVED_IN_REG.  */
1665 struct GTY(()) reg_saved_in_data {
1666   rtx orig_reg;
1667   rtx saved_in_reg;
1668 };
1669
1670 /* A list of registers saved in other registers.
1671    The list intentionally has a small maximum capacity of 4; if your
1672    port needs more than that, you might consider implementing a
1673    more efficient data structure.  */
1674 static GTY(()) struct reg_saved_in_data regs_saved_in_regs[4];
1675 static GTY(()) size_t num_regs_saved_in_regs;
1676
1677 #if defined (DWARF2_DEBUGGING_INFO) || defined (DWARF2_UNWIND_INFO)
1678 static const char *last_reg_save_label;
1679
1680 /* Add an entry to QUEUED_REG_SAVES saying that REG is now saved at
1681    SREG, or if SREG is NULL then it is saved at OFFSET to the CFA.  */
1682
1683 static void
1684 queue_reg_save (const char *label, rtx reg, rtx sreg, HOST_WIDE_INT offset)
1685 {
1686   struct queued_reg_save *q;
1687
1688   /* Duplicates waste space, but it's also necessary to remove them
1689      for correctness, since the queue gets output in reverse
1690      order.  */
1691   for (q = queued_reg_saves; q != NULL; q = q->next)
1692     if (REGNO (q->reg) == REGNO (reg))
1693       break;
1694
1695   if (q == NULL)
1696     {
1697       q = GGC_NEW (struct queued_reg_save);
1698       q->next = queued_reg_saves;
1699       queued_reg_saves = q;
1700     }
1701
1702   q->reg = reg;
1703   q->cfa_offset = offset;
1704   q->saved_reg = sreg;
1705
1706   last_reg_save_label = label;
1707 }
1708
1709 /* Output all the entries in QUEUED_REG_SAVES.  */
1710
1711 static void
1712 flush_queued_reg_saves (void)
1713 {
1714   struct queued_reg_save *q;
1715
1716   for (q = queued_reg_saves; q; q = q->next)
1717     {
1718       size_t i;
1719       unsigned int reg, sreg;
1720
1721       for (i = 0; i < num_regs_saved_in_regs; i++)
1722         if (REGNO (regs_saved_in_regs[i].orig_reg) == REGNO (q->reg))
1723           break;
1724       if (q->saved_reg && i == num_regs_saved_in_regs)
1725         {
1726           gcc_assert (i != ARRAY_SIZE (regs_saved_in_regs));
1727           num_regs_saved_in_regs++;
1728         }
1729       if (i != num_regs_saved_in_regs)
1730         {
1731           regs_saved_in_regs[i].orig_reg = q->reg;
1732           regs_saved_in_regs[i].saved_in_reg = q->saved_reg;
1733         }
1734
1735       reg = DWARF_FRAME_REGNUM (REGNO (q->reg));
1736       if (q->saved_reg)
1737         sreg = DWARF_FRAME_REGNUM (REGNO (q->saved_reg));
1738       else
1739         sreg = INVALID_REGNUM;
1740       reg_save (last_reg_save_label, reg, sreg, q->cfa_offset);
1741     }
1742
1743   queued_reg_saves = NULL;
1744   last_reg_save_label = NULL;
1745 }
1746
1747 /* Does INSN clobber any register which QUEUED_REG_SAVES lists a saved
1748    location for?  Or, does it clobber a register which we've previously
1749    said that some other register is saved in, and for which we now
1750    have a new location for?  */
1751
1752 static bool
1753 clobbers_queued_reg_save (const_rtx insn)
1754 {
1755   struct queued_reg_save *q;
1756
1757   for (q = queued_reg_saves; q; q = q->next)
1758     {
1759       size_t i;
1760       if (modified_in_p (q->reg, insn))
1761         return true;
1762       for (i = 0; i < num_regs_saved_in_regs; i++)
1763         if (REGNO (q->reg) == REGNO (regs_saved_in_regs[i].orig_reg)
1764             && modified_in_p (regs_saved_in_regs[i].saved_in_reg, insn))
1765           return true;
1766     }
1767
1768   return false;
1769 }
1770
1771 /* Entry point for saving the first register into the second.  */
1772
1773 void
1774 dwarf2out_reg_save_reg (const char *label, rtx reg, rtx sreg)
1775 {
1776   size_t i;
1777   unsigned int regno, sregno;
1778
1779   for (i = 0; i < num_regs_saved_in_regs; i++)
1780     if (REGNO (regs_saved_in_regs[i].orig_reg) == REGNO (reg))
1781       break;
1782   if (i == num_regs_saved_in_regs)
1783     {
1784       gcc_assert (i != ARRAY_SIZE (regs_saved_in_regs));
1785       num_regs_saved_in_regs++;
1786     }
1787   regs_saved_in_regs[i].orig_reg = reg;
1788   regs_saved_in_regs[i].saved_in_reg = sreg;
1789
1790   regno = DWARF_FRAME_REGNUM (REGNO (reg));
1791   sregno = DWARF_FRAME_REGNUM (REGNO (sreg));
1792   reg_save (label, regno, sregno, 0);
1793 }
1794
1795 /* What register, if any, is currently saved in REG?  */
1796
1797 static rtx
1798 reg_saved_in (rtx reg)
1799 {
1800   unsigned int regn = REGNO (reg);
1801   size_t i;
1802   struct queued_reg_save *q;
1803
1804   for (q = queued_reg_saves; q; q = q->next)
1805     if (q->saved_reg && regn == REGNO (q->saved_reg))
1806       return q->reg;
1807
1808   for (i = 0; i < num_regs_saved_in_regs; i++)
1809     if (regs_saved_in_regs[i].saved_in_reg
1810         && regn == REGNO (regs_saved_in_regs[i].saved_in_reg))
1811       return regs_saved_in_regs[i].orig_reg;
1812
1813   return NULL_RTX;
1814 }
1815
1816
1817 /* A temporary register holding an integral value used in adjusting SP
1818    or setting up the store_reg.  The "offset" field holds the integer
1819    value, not an offset.  */
1820 static dw_cfa_location cfa_temp;
1821
1822 /* A subroutine of dwarf2out_frame_debug, process a REG_DEF_CFA note.  */
1823
1824 static void
1825 dwarf2out_frame_debug_def_cfa (rtx pat, const char *label)
1826 {
1827   memset (&cfa, 0, sizeof (cfa));
1828
1829   switch (GET_CODE (pat))
1830     {
1831     case PLUS:
1832       cfa.reg = REGNO (XEXP (pat, 0));
1833       cfa.offset = INTVAL (XEXP (pat, 1));
1834       break;
1835
1836     case REG:
1837       cfa.reg = REGNO (pat);
1838       break;
1839
1840     default:
1841       /* Recurse and define an expression.  */
1842       gcc_unreachable ();
1843     }
1844
1845   def_cfa_1 (label, &cfa);
1846 }
1847
1848 /* A subroutine of dwarf2out_frame_debug, process a REG_ADJUST_CFA note.  */
1849
1850 static void
1851 dwarf2out_frame_debug_adjust_cfa (rtx pat, const char *label)
1852 {
1853   rtx src, dest;
1854
1855   gcc_assert (GET_CODE (pat) == SET);
1856   dest = XEXP (pat, 0);
1857   src = XEXP (pat, 1);
1858
1859   switch (GET_CODE (src))
1860     {
1861     case PLUS:
1862       gcc_assert (REGNO (XEXP (src, 0)) == cfa.reg);
1863       cfa.offset -= INTVAL (XEXP (src, 1));
1864       break;
1865
1866     case REG:
1867         break;
1868
1869     default:
1870         gcc_unreachable ();
1871     }
1872
1873   cfa.reg = REGNO (dest);
1874   gcc_assert (cfa.indirect == 0);
1875
1876   def_cfa_1 (label, &cfa);
1877 }
1878
1879 /* A subroutine of dwarf2out_frame_debug, process a REG_CFA_OFFSET note.  */
1880
1881 static void
1882 dwarf2out_frame_debug_cfa_offset (rtx set, const char *label)
1883 {
1884   HOST_WIDE_INT offset;
1885   rtx src, addr, span;
1886
1887   src = XEXP (set, 1);
1888   addr = XEXP (set, 0);
1889   gcc_assert (MEM_P (addr));
1890   addr = XEXP (addr, 0);
1891
1892   /* As documented, only consider extremely simple addresses.  */
1893   switch (GET_CODE (addr))
1894     {
1895     case REG:
1896       gcc_assert (REGNO (addr) == cfa.reg);
1897       offset = -cfa.offset;
1898       break;
1899     case PLUS:
1900       gcc_assert (REGNO (XEXP (addr, 0)) == cfa.reg);
1901       offset = INTVAL (XEXP (addr, 1)) - cfa.offset;
1902       break;
1903     default:
1904       gcc_unreachable ();
1905     }
1906
1907   span = targetm.dwarf_register_span (src);
1908
1909   /* ??? We'd like to use queue_reg_save, but we need to come up with
1910      a different flushing heuristic for epilogues.  */
1911   if (!span)
1912     reg_save (label, DWARF_FRAME_REGNUM (REGNO (src)), INVALID_REGNUM, offset);
1913   else
1914     {
1915       /* We have a PARALLEL describing where the contents of SRC live.
1916          Queue register saves for each piece of the PARALLEL.  */
1917       int par_index;
1918       int limit;
1919       HOST_WIDE_INT span_offset = offset;
1920
1921       gcc_assert (GET_CODE (span) == PARALLEL);
1922
1923       limit = XVECLEN (span, 0);
1924       for (par_index = 0; par_index < limit; par_index++)
1925         {
1926           rtx elem = XVECEXP (span, 0, par_index);
1927
1928           reg_save (label, DWARF_FRAME_REGNUM (REGNO (elem)),
1929                     INVALID_REGNUM, span_offset);
1930           span_offset += GET_MODE_SIZE (GET_MODE (elem));
1931         }
1932     }
1933 }
1934
1935 /* A subroutine of dwarf2out_frame_debug, process a REG_CFA_REGISTER note.  */
1936
1937 static void
1938 dwarf2out_frame_debug_cfa_register (rtx set, const char *label)
1939 {
1940   rtx src, dest;
1941   unsigned sregno, dregno;
1942
1943   src = XEXP (set, 1);
1944   dest = XEXP (set, 0);
1945
1946   if (src == pc_rtx)
1947     sregno = DWARF_FRAME_RETURN_COLUMN;
1948   else
1949     sregno = DWARF_FRAME_REGNUM (REGNO (src));
1950
1951   dregno = DWARF_FRAME_REGNUM (REGNO (dest));
1952
1953   /* ??? We'd like to use queue_reg_save, but we need to come up with
1954      a different flushing heuristic for epilogues.  */
1955   reg_save (label, sregno, dregno, 0);
1956 }
1957
1958 /* A subroutine of dwarf2out_frame_debug, process a REG_CFA_RESTORE note.  */
1959
1960 static void
1961 dwarf2out_frame_debug_cfa_restore (rtx reg, const char *label)
1962 {
1963   dw_cfi_ref cfi = new_cfi ();
1964   unsigned int regno = DWARF_FRAME_REGNUM (REGNO (reg));
1965
1966   cfi->dw_cfi_opc = (regno & ~0x3f ? DW_CFA_restore_extended : DW_CFA_restore);
1967   cfi->dw_cfi_oprnd1.dw_cfi_reg_num = regno;
1968
1969   add_fde_cfi (label, cfi);
1970 }
1971
1972 /* Record call frame debugging information for an expression EXPR,
1973    which either sets SP or FP (adjusting how we calculate the frame
1974    address) or saves a register to the stack or another register.
1975    LABEL indicates the address of EXPR.
1976
1977    This function encodes a state machine mapping rtxes to actions on
1978    cfa, cfa_store, and cfa_temp.reg.  We describe these rules so
1979    users need not read the source code.
1980
1981   The High-Level Picture
1982
1983   Changes in the register we use to calculate the CFA: Currently we
1984   assume that if you copy the CFA register into another register, we
1985   should take the other one as the new CFA register; this seems to
1986   work pretty well.  If it's wrong for some target, it's simple
1987   enough not to set RTX_FRAME_RELATED_P on the insn in question.
1988
1989   Changes in the register we use for saving registers to the stack:
1990   This is usually SP, but not always.  Again, we deduce that if you
1991   copy SP into another register (and SP is not the CFA register),
1992   then the new register is the one we will be using for register
1993   saves.  This also seems to work.
1994
1995   Register saves: There's not much guesswork about this one; if
1996   RTX_FRAME_RELATED_P is set on an insn which modifies memory, it's a
1997   register save, and the register used to calculate the destination
1998   had better be the one we think we're using for this purpose.
1999   It's also assumed that a copy from a call-saved register to another
2000   register is saving that register if RTX_FRAME_RELATED_P is set on
2001   that instruction.  If the copy is from a call-saved register to
2002   the *same* register, that means that the register is now the same
2003   value as in the caller.
2004
2005   Except: If the register being saved is the CFA register, and the
2006   offset is nonzero, we are saving the CFA, so we assume we have to
2007   use DW_CFA_def_cfa_expression.  If the offset is 0, we assume that
2008   the intent is to save the value of SP from the previous frame.
2009
2010   In addition, if a register has previously been saved to a different
2011   register,
2012
2013   Invariants / Summaries of Rules
2014
2015   cfa          current rule for calculating the CFA.  It usually
2016                consists of a register and an offset.
2017   cfa_store    register used by prologue code to save things to the stack
2018                cfa_store.offset is the offset from the value of
2019                cfa_store.reg to the actual CFA
2020   cfa_temp     register holding an integral value.  cfa_temp.offset
2021                stores the value, which will be used to adjust the
2022                stack pointer.  cfa_temp is also used like cfa_store,
2023                to track stores to the stack via fp or a temp reg.
2024
2025   Rules  1- 4: Setting a register's value to cfa.reg or an expression
2026                with cfa.reg as the first operand changes the cfa.reg and its
2027                cfa.offset.  Rule 1 and 4 also set cfa_temp.reg and
2028                cfa_temp.offset.
2029
2030   Rules  6- 9: Set a non-cfa.reg register value to a constant or an
2031                expression yielding a constant.  This sets cfa_temp.reg
2032                and cfa_temp.offset.
2033
2034   Rule 5:      Create a new register cfa_store used to save items to the
2035                stack.
2036
2037   Rules 10-14: Save a register to the stack.  Define offset as the
2038                difference of the original location and cfa_store's
2039                location (or cfa_temp's location if cfa_temp is used).
2040
2041   Rules 16-20: If AND operation happens on sp in prologue, we assume
2042                stack is realigned.  We will use a group of DW_OP_XXX
2043                expressions to represent the location of the stored
2044                register instead of CFA+offset.
2045
2046   The Rules
2047
2048   "{a,b}" indicates a choice of a xor b.
2049   "<reg>:cfa.reg" indicates that <reg> must equal cfa.reg.
2050
2051   Rule 1:
2052   (set <reg1> <reg2>:cfa.reg)
2053   effects: cfa.reg = <reg1>
2054            cfa.offset unchanged
2055            cfa_temp.reg = <reg1>
2056            cfa_temp.offset = cfa.offset
2057
2058   Rule 2:
2059   (set sp ({minus,plus,losum} {sp,fp}:cfa.reg
2060                               {<const_int>,<reg>:cfa_temp.reg}))
2061   effects: cfa.reg = sp if fp used
2062            cfa.offset += {+/- <const_int>, cfa_temp.offset} if cfa.reg==sp
2063            cfa_store.offset += {+/- <const_int>, cfa_temp.offset}
2064              if cfa_store.reg==sp
2065
2066   Rule 3:
2067   (set fp ({minus,plus,losum} <reg>:cfa.reg <const_int>))
2068   effects: cfa.reg = fp
2069            cfa_offset += +/- <const_int>
2070
2071   Rule 4:
2072   (set <reg1> ({plus,losum} <reg2>:cfa.reg <const_int>))
2073   constraints: <reg1> != fp
2074                <reg1> != sp
2075   effects: cfa.reg = <reg1>
2076            cfa_temp.reg = <reg1>
2077            cfa_temp.offset = cfa.offset
2078
2079   Rule 5:
2080   (set <reg1> (plus <reg2>:cfa_temp.reg sp:cfa.reg))
2081   constraints: <reg1> != fp
2082                <reg1> != sp
2083   effects: cfa_store.reg = <reg1>
2084            cfa_store.offset = cfa.offset - cfa_temp.offset
2085
2086   Rule 6:
2087   (set <reg> <const_int>)
2088   effects: cfa_temp.reg = <reg>
2089            cfa_temp.offset = <const_int>
2090
2091   Rule 7:
2092   (set <reg1>:cfa_temp.reg (ior <reg2>:cfa_temp.reg <const_int>))
2093   effects: cfa_temp.reg = <reg1>
2094            cfa_temp.offset |= <const_int>
2095
2096   Rule 8:
2097   (set <reg> (high <exp>))
2098   effects: none
2099
2100   Rule 9:
2101   (set <reg> (lo_sum <exp> <const_int>))
2102   effects: cfa_temp.reg = <reg>
2103            cfa_temp.offset = <const_int>
2104
2105   Rule 10:
2106   (set (mem (pre_modify sp:cfa_store (???? <reg1> <const_int>))) <reg2>)
2107   effects: cfa_store.offset -= <const_int>
2108            cfa.offset = cfa_store.offset if cfa.reg == sp
2109            cfa.reg = sp
2110            cfa.base_offset = -cfa_store.offset
2111
2112   Rule 11:
2113   (set (mem ({pre_inc,pre_dec} sp:cfa_store.reg)) <reg>)
2114   effects: cfa_store.offset += -/+ mode_size(mem)
2115            cfa.offset = cfa_store.offset if cfa.reg == sp
2116            cfa.reg = sp
2117            cfa.base_offset = -cfa_store.offset
2118
2119   Rule 12:
2120   (set (mem ({minus,plus,losum} <reg1>:{cfa_store,cfa_temp} <const_int>))
2121
2122        <reg2>)
2123   effects: cfa.reg = <reg1>
2124            cfa.base_offset = -/+ <const_int> - {cfa_store,cfa_temp}.offset
2125
2126   Rule 13:
2127   (set (mem <reg1>:{cfa_store,cfa_temp}) <reg2>)
2128   effects: cfa.reg = <reg1>
2129            cfa.base_offset = -{cfa_store,cfa_temp}.offset
2130
2131   Rule 14:
2132   (set (mem (postinc <reg1>:cfa_temp <const_int>)) <reg2>)
2133   effects: cfa.reg = <reg1>
2134            cfa.base_offset = -cfa_temp.offset
2135            cfa_temp.offset -= mode_size(mem)
2136
2137   Rule 15:
2138   (set <reg> {unspec, unspec_volatile})
2139   effects: target-dependent
2140
2141   Rule 16:
2142   (set sp (and: sp <const_int>))
2143   constraints: cfa_store.reg == sp
2144   effects: current_fde.stack_realign = 1
2145            cfa_store.offset = 0
2146            fde->drap_reg = cfa.reg if cfa.reg != sp and cfa.reg != fp
2147
2148   Rule 17:
2149   (set (mem ({pre_inc, pre_dec} sp)) (mem (plus (cfa.reg) (const_int))))
2150   effects: cfa_store.offset += -/+ mode_size(mem)
2151
2152   Rule 18:
2153   (set (mem ({pre_inc, pre_dec} sp)) fp)
2154   constraints: fde->stack_realign == 1
2155   effects: cfa_store.offset = 0
2156            cfa.reg != HARD_FRAME_POINTER_REGNUM
2157
2158   Rule 19:
2159   (set (mem ({pre_inc, pre_dec} sp)) cfa.reg)
2160   constraints: fde->stack_realign == 1
2161                && cfa.offset == 0
2162                && cfa.indirect == 0
2163                && cfa.reg != HARD_FRAME_POINTER_REGNUM
2164   effects: Use DW_CFA_def_cfa_expression to define cfa
2165            cfa.reg == fde->drap_reg  */
2166
2167 static void
2168 dwarf2out_frame_debug_expr (rtx expr, const char *label)
2169 {
2170   rtx src, dest, span;
2171   HOST_WIDE_INT offset;
2172   dw_fde_ref fde;
2173
2174   /* If RTX_FRAME_RELATED_P is set on a PARALLEL, process each member of
2175      the PARALLEL independently. The first element is always processed if
2176      it is a SET. This is for backward compatibility.   Other elements
2177      are processed only if they are SETs and the RTX_FRAME_RELATED_P
2178      flag is set in them.  */
2179   if (GET_CODE (expr) == PARALLEL || GET_CODE (expr) == SEQUENCE)
2180     {
2181       int par_index;
2182       int limit = XVECLEN (expr, 0);
2183       rtx elem;
2184
2185       /* PARALLELs have strict read-modify-write semantics, so we
2186          ought to evaluate every rvalue before changing any lvalue.
2187          It's cumbersome to do that in general, but there's an
2188          easy approximation that is enough for all current users:
2189          handle register saves before register assignments.  */
2190       if (GET_CODE (expr) == PARALLEL)
2191         for (par_index = 0; par_index < limit; par_index++)
2192           {
2193             elem = XVECEXP (expr, 0, par_index);
2194             if (GET_CODE (elem) == SET
2195                 && MEM_P (SET_DEST (elem))
2196                 && (RTX_FRAME_RELATED_P (elem) || par_index == 0))
2197               dwarf2out_frame_debug_expr (elem, label);
2198           }
2199
2200       for (par_index = 0; par_index < limit; par_index++)
2201         {
2202           elem = XVECEXP (expr, 0, par_index);
2203           if (GET_CODE (elem) == SET
2204               && (!MEM_P (SET_DEST (elem)) || GET_CODE (expr) == SEQUENCE)
2205               && (RTX_FRAME_RELATED_P (elem) || par_index == 0))
2206             dwarf2out_frame_debug_expr (elem, label);
2207           else if (GET_CODE (elem) == SET
2208                    && par_index != 0
2209                    && !RTX_FRAME_RELATED_P (elem))
2210             {
2211               /* Stack adjustment combining might combine some post-prologue
2212                  stack adjustment into a prologue stack adjustment.  */
2213               HOST_WIDE_INT offset = stack_adjust_offset (elem, args_size, 0);
2214
2215               if (offset != 0)
2216                 dwarf2out_stack_adjust (offset, label);
2217             }
2218         }
2219       return;
2220     }
2221
2222   gcc_assert (GET_CODE (expr) == SET);
2223
2224   src = SET_SRC (expr);
2225   dest = SET_DEST (expr);
2226
2227   if (REG_P (src))
2228     {
2229       rtx rsi = reg_saved_in (src);
2230       if (rsi)
2231         src = rsi;
2232     }
2233
2234   fde = current_fde ();
2235
2236   switch (GET_CODE (dest))
2237     {
2238     case REG:
2239       switch (GET_CODE (src))
2240         {
2241           /* Setting FP from SP.  */
2242         case REG:
2243           if (cfa.reg == (unsigned) REGNO (src))
2244             {
2245               /* Rule 1 */
2246               /* Update the CFA rule wrt SP or FP.  Make sure src is
2247                  relative to the current CFA register.
2248
2249                  We used to require that dest be either SP or FP, but the
2250                  ARM copies SP to a temporary register, and from there to
2251                  FP.  So we just rely on the backends to only set
2252                  RTX_FRAME_RELATED_P on appropriate insns.  */
2253               cfa.reg = REGNO (dest);
2254               cfa_temp.reg = cfa.reg;
2255               cfa_temp.offset = cfa.offset;
2256             }
2257           else
2258             {
2259               /* Saving a register in a register.  */
2260               gcc_assert (!fixed_regs [REGNO (dest)]
2261                           /* For the SPARC and its register window.  */
2262                           || (DWARF_FRAME_REGNUM (REGNO (src))
2263                               == DWARF_FRAME_RETURN_COLUMN));
2264
2265               /* After stack is aligned, we can only save SP in FP
2266                  if drap register is used.  In this case, we have
2267                  to restore stack pointer with the CFA value and we
2268                  don't generate this DWARF information.  */
2269               if (fde
2270                   && fde->stack_realign
2271                   && REGNO (src) == STACK_POINTER_REGNUM)
2272                 gcc_assert (REGNO (dest) == HARD_FRAME_POINTER_REGNUM
2273                             && fde->drap_reg != INVALID_REGNUM
2274                             && cfa.reg != REGNO (src));
2275               else
2276                 queue_reg_save (label, src, dest, 0);
2277             }
2278           break;
2279
2280         case PLUS:
2281         case MINUS:
2282         case LO_SUM:
2283           if (dest == stack_pointer_rtx)
2284             {
2285               /* Rule 2 */
2286               /* Adjusting SP.  */
2287               switch (GET_CODE (XEXP (src, 1)))
2288                 {
2289                 case CONST_INT:
2290                   offset = INTVAL (XEXP (src, 1));
2291                   break;
2292                 case REG:
2293                   gcc_assert ((unsigned) REGNO (XEXP (src, 1))
2294                               == cfa_temp.reg);
2295                   offset = cfa_temp.offset;
2296                   break;
2297                 default:
2298                   gcc_unreachable ();
2299                 }
2300
2301               if (XEXP (src, 0) == hard_frame_pointer_rtx)
2302                 {
2303                   /* Restoring SP from FP in the epilogue.  */
2304                   gcc_assert (cfa.reg == (unsigned) HARD_FRAME_POINTER_REGNUM);
2305                   cfa.reg = STACK_POINTER_REGNUM;
2306                 }
2307               else if (GET_CODE (src) == LO_SUM)
2308                 /* Assume we've set the source reg of the LO_SUM from sp.  */
2309                 ;
2310               else
2311                 gcc_assert (XEXP (src, 0) == stack_pointer_rtx);
2312
2313               if (GET_CODE (src) != MINUS)
2314                 offset = -offset;
2315               if (cfa.reg == STACK_POINTER_REGNUM)
2316                 cfa.offset += offset;
2317               if (cfa_store.reg == STACK_POINTER_REGNUM)
2318                 cfa_store.offset += offset;
2319             }
2320           else if (dest == hard_frame_pointer_rtx)
2321             {
2322               /* Rule 3 */
2323               /* Either setting the FP from an offset of the SP,
2324                  or adjusting the FP */
2325               gcc_assert (frame_pointer_needed);
2326
2327               gcc_assert (REG_P (XEXP (src, 0))
2328                           && (unsigned) REGNO (XEXP (src, 0)) == cfa.reg
2329                           && CONST_INT_P (XEXP (src, 1)));
2330               offset = INTVAL (XEXP (src, 1));
2331               if (GET_CODE (src) != MINUS)
2332                 offset = -offset;
2333               cfa.offset += offset;
2334               cfa.reg = HARD_FRAME_POINTER_REGNUM;
2335             }
2336           else
2337             {
2338               gcc_assert (GET_CODE (src) != MINUS);
2339
2340               /* Rule 4 */
2341               if (REG_P (XEXP (src, 0))
2342                   && REGNO (XEXP (src, 0)) == cfa.reg
2343                   && CONST_INT_P (XEXP (src, 1)))
2344                 {
2345                   /* Setting a temporary CFA register that will be copied
2346                      into the FP later on.  */
2347                   offset = - INTVAL (XEXP (src, 1));
2348                   cfa.offset += offset;
2349                   cfa.reg = REGNO (dest);
2350                   /* Or used to save regs to the stack.  */
2351                   cfa_temp.reg = cfa.reg;
2352                   cfa_temp.offset = cfa.offset;
2353                 }
2354
2355               /* Rule 5 */
2356               else if (REG_P (XEXP (src, 0))
2357                        && REGNO (XEXP (src, 0)) == cfa_temp.reg
2358                        && XEXP (src, 1) == stack_pointer_rtx)
2359                 {
2360                   /* Setting a scratch register that we will use instead
2361                      of SP for saving registers to the stack.  */
2362                   gcc_assert (cfa.reg == STACK_POINTER_REGNUM);
2363                   cfa_store.reg = REGNO (dest);
2364                   cfa_store.offset = cfa.offset - cfa_temp.offset;
2365                 }
2366
2367               /* Rule 9 */
2368               else if (GET_CODE (src) == LO_SUM
2369                        && CONST_INT_P (XEXP (src, 1)))
2370                 {
2371                   cfa_temp.reg = REGNO (dest);
2372                   cfa_temp.offset = INTVAL (XEXP (src, 1));
2373                 }
2374               else
2375                 gcc_unreachable ();
2376             }
2377           break;
2378
2379           /* Rule 6 */
2380         case CONST_INT:
2381           cfa_temp.reg = REGNO (dest);
2382           cfa_temp.offset = INTVAL (src);
2383           break;
2384
2385           /* Rule 7 */
2386         case IOR:
2387           gcc_assert (REG_P (XEXP (src, 0))
2388                       && (unsigned) REGNO (XEXP (src, 0)) == cfa_temp.reg
2389                       && CONST_INT_P (XEXP (src, 1)));
2390
2391           if ((unsigned) REGNO (dest) != cfa_temp.reg)
2392             cfa_temp.reg = REGNO (dest);
2393           cfa_temp.offset |= INTVAL (XEXP (src, 1));
2394           break;
2395
2396           /* Skip over HIGH, assuming it will be followed by a LO_SUM,
2397              which will fill in all of the bits.  */
2398           /* Rule 8 */
2399         case HIGH:
2400           break;
2401
2402           /* Rule 15 */
2403         case UNSPEC:
2404         case UNSPEC_VOLATILE:
2405           gcc_assert (targetm.dwarf_handle_frame_unspec);
2406           targetm.dwarf_handle_frame_unspec (label, expr, XINT (src, 1));
2407           return;
2408
2409           /* Rule 16 */
2410         case AND:
2411           /* If this AND operation happens on stack pointer in prologue,
2412              we assume the stack is realigned and we extract the
2413              alignment.  */
2414           if (fde && XEXP (src, 0) == stack_pointer_rtx)
2415             {
2416               gcc_assert (cfa_store.reg == REGNO (XEXP (src, 0)));
2417               fde->stack_realign = 1;
2418               fde->stack_realignment = INTVAL (XEXP (src, 1));
2419               cfa_store.offset = 0;
2420
2421               if (cfa.reg != STACK_POINTER_REGNUM
2422                   && cfa.reg != HARD_FRAME_POINTER_REGNUM)
2423                 fde->drap_reg = cfa.reg;
2424             }
2425           return;
2426
2427         default:
2428           gcc_unreachable ();
2429         }
2430
2431       def_cfa_1 (label, &cfa);
2432       break;
2433
2434     case MEM:
2435
2436       /* Saving a register to the stack.  Make sure dest is relative to the
2437          CFA register.  */
2438       switch (GET_CODE (XEXP (dest, 0)))
2439         {
2440           /* Rule 10 */
2441           /* With a push.  */
2442         case PRE_MODIFY:
2443           /* We can't handle variable size modifications.  */
2444           gcc_assert (GET_CODE (XEXP (XEXP (XEXP (dest, 0), 1), 1))
2445                       == CONST_INT);
2446           offset = -INTVAL (XEXP (XEXP (XEXP (dest, 0), 1), 1));
2447
2448           gcc_assert (REGNO (XEXP (XEXP (dest, 0), 0)) == STACK_POINTER_REGNUM
2449                       && cfa_store.reg == STACK_POINTER_REGNUM);
2450
2451           cfa_store.offset += offset;
2452           if (cfa.reg == STACK_POINTER_REGNUM)
2453             cfa.offset = cfa_store.offset;
2454
2455           offset = -cfa_store.offset;
2456           break;
2457
2458           /* Rule 11 */
2459         case PRE_INC:
2460         case PRE_DEC:
2461           offset = GET_MODE_SIZE (GET_MODE (dest));
2462           if (GET_CODE (XEXP (dest, 0)) == PRE_INC)
2463             offset = -offset;
2464
2465           gcc_assert ((REGNO (XEXP (XEXP (dest, 0), 0))
2466                        == STACK_POINTER_REGNUM)
2467                       && cfa_store.reg == STACK_POINTER_REGNUM);
2468
2469           cfa_store.offset += offset;
2470
2471           /* Rule 18: If stack is aligned, we will use FP as a
2472              reference to represent the address of the stored
2473              regiser.  */
2474           if (fde
2475               && fde->stack_realign
2476               && src == hard_frame_pointer_rtx)
2477             {
2478               gcc_assert (cfa.reg != HARD_FRAME_POINTER_REGNUM);
2479               cfa_store.offset = 0;
2480             }
2481
2482           if (cfa.reg == STACK_POINTER_REGNUM)
2483             cfa.offset = cfa_store.offset;
2484
2485           offset = -cfa_store.offset;
2486           break;
2487
2488           /* Rule 12 */
2489           /* With an offset.  */
2490         case PLUS:
2491         case MINUS:
2492         case LO_SUM:
2493           {
2494             int regno;
2495
2496             gcc_assert (CONST_INT_P (XEXP (XEXP (dest, 0), 1))
2497                         && REG_P (XEXP (XEXP (dest, 0), 0)));
2498             offset = INTVAL (XEXP (XEXP (dest, 0), 1));
2499             if (GET_CODE (XEXP (dest, 0)) == MINUS)
2500               offset = -offset;
2501
2502             regno = REGNO (XEXP (XEXP (dest, 0), 0));
2503
2504             if (cfa_store.reg == (unsigned) regno)
2505               offset -= cfa_store.offset;
2506             else
2507               {
2508                 gcc_assert (cfa_temp.reg == (unsigned) regno);
2509                 offset -= cfa_temp.offset;
2510               }
2511           }
2512           break;
2513
2514           /* Rule 13 */
2515           /* Without an offset.  */
2516         case REG:
2517           {
2518             int regno = REGNO (XEXP (dest, 0));
2519
2520             if (cfa_store.reg == (unsigned) regno)
2521               offset = -cfa_store.offset;
2522             else
2523               {
2524                 gcc_assert (cfa_temp.reg == (unsigned) regno);
2525                 offset = -cfa_temp.offset;
2526               }
2527           }
2528           break;
2529
2530           /* Rule 14 */
2531         case POST_INC:
2532           gcc_assert (cfa_temp.reg
2533                       == (unsigned) REGNO (XEXP (XEXP (dest, 0), 0)));
2534           offset = -cfa_temp.offset;
2535           cfa_temp.offset -= GET_MODE_SIZE (GET_MODE (dest));
2536           break;
2537
2538         default:
2539           gcc_unreachable ();
2540         }
2541
2542         /* Rule 17 */
2543         /* If the source operand of this MEM operation is not a
2544            register, basically the source is return address.  Here
2545            we only care how much stack grew and we don't save it.  */
2546       if (!REG_P (src))
2547         break;
2548
2549       if (REGNO (src) != STACK_POINTER_REGNUM
2550           && REGNO (src) != HARD_FRAME_POINTER_REGNUM
2551           && (unsigned) REGNO (src) == cfa.reg)
2552         {
2553           /* We're storing the current CFA reg into the stack.  */
2554
2555           if (cfa.offset == 0)
2556             {
2557               /* Rule 19 */
2558               /* If stack is aligned, putting CFA reg into stack means
2559                  we can no longer use reg + offset to represent CFA.
2560                  Here we use DW_CFA_def_cfa_expression instead.  The
2561                  result of this expression equals to the original CFA
2562                  value.  */
2563               if (fde
2564                   && fde->stack_realign
2565                   && cfa.indirect == 0
2566                   && cfa.reg != HARD_FRAME_POINTER_REGNUM)
2567                 {
2568                   dw_cfa_location cfa_exp;
2569
2570                   gcc_assert (fde->drap_reg == cfa.reg);
2571
2572                   cfa_exp.indirect = 1;
2573                   cfa_exp.reg = HARD_FRAME_POINTER_REGNUM;
2574                   cfa_exp.base_offset = offset;
2575                   cfa_exp.offset = 0;
2576
2577                   fde->drap_reg_saved = 1;
2578
2579                   def_cfa_1 (label, &cfa_exp);
2580                   break;
2581                 }
2582
2583               /* If the source register is exactly the CFA, assume
2584                  we're saving SP like any other register; this happens
2585                  on the ARM.  */
2586               def_cfa_1 (label, &cfa);
2587               queue_reg_save (label, stack_pointer_rtx, NULL_RTX, offset);
2588               break;
2589             }
2590           else
2591             {
2592               /* Otherwise, we'll need to look in the stack to
2593                  calculate the CFA.  */
2594               rtx x = XEXP (dest, 0);
2595
2596               if (!REG_P (x))
2597                 x = XEXP (x, 0);
2598               gcc_assert (REG_P (x));
2599
2600               cfa.reg = REGNO (x);
2601               cfa.base_offset = offset;
2602               cfa.indirect = 1;
2603               def_cfa_1 (label, &cfa);
2604               break;
2605             }
2606         }
2607
2608       def_cfa_1 (label, &cfa);
2609       {
2610         span = targetm.dwarf_register_span (src);
2611
2612         if (!span)
2613           queue_reg_save (label, src, NULL_RTX, offset);
2614         else
2615           {
2616             /* We have a PARALLEL describing where the contents of SRC
2617                live.  Queue register saves for each piece of the
2618                PARALLEL.  */
2619             int par_index;
2620             int limit;
2621             HOST_WIDE_INT span_offset = offset;
2622
2623             gcc_assert (GET_CODE (span) == PARALLEL);
2624
2625             limit = XVECLEN (span, 0);
2626             for (par_index = 0; par_index < limit; par_index++)
2627               {
2628                 rtx elem = XVECEXP (span, 0, par_index);
2629
2630                 queue_reg_save (label, elem, NULL_RTX, span_offset);
2631                 span_offset += GET_MODE_SIZE (GET_MODE (elem));
2632               }
2633           }
2634       }
2635       break;
2636
2637     default:
2638       gcc_unreachable ();
2639     }
2640 }
2641
2642 /* Record call frame debugging information for INSN, which either
2643    sets SP or FP (adjusting how we calculate the frame address) or saves a
2644    register to the stack.  If INSN is NULL_RTX, initialize our state.
2645
2646    If AFTER_P is false, we're being called before the insn is emitted,
2647    otherwise after.  Call instructions get invoked twice.  */
2648
2649 void
2650 dwarf2out_frame_debug (rtx insn, bool after_p)
2651 {
2652   const char *label;
2653   rtx note, n;
2654   bool handled_one = false;
2655
2656   if (insn == NULL_RTX)
2657     {
2658       size_t i;
2659
2660       /* Flush any queued register saves.  */
2661       flush_queued_reg_saves ();
2662
2663       /* Set up state for generating call frame debug info.  */
2664       lookup_cfa (&cfa);
2665       gcc_assert (cfa.reg
2666                   == (unsigned long)DWARF_FRAME_REGNUM (STACK_POINTER_REGNUM));
2667
2668       cfa.reg = STACK_POINTER_REGNUM;
2669       cfa_store = cfa;
2670       cfa_temp.reg = -1;
2671       cfa_temp.offset = 0;
2672
2673       for (i = 0; i < num_regs_saved_in_regs; i++)
2674         {
2675           regs_saved_in_regs[i].orig_reg = NULL_RTX;
2676           regs_saved_in_regs[i].saved_in_reg = NULL_RTX;
2677         }
2678       num_regs_saved_in_regs = 0;
2679
2680       if (barrier_args_size)
2681         {
2682           XDELETEVEC (barrier_args_size);
2683           barrier_args_size = NULL;
2684         }
2685       return;
2686     }
2687
2688   if (!NONJUMP_INSN_P (insn) || clobbers_queued_reg_save (insn))
2689     flush_queued_reg_saves ();
2690
2691   if (!RTX_FRAME_RELATED_P (insn))
2692     {
2693       /* ??? This should be done unconditionally since stack adjustments
2694          matter if the stack pointer is not the CFA register anymore but
2695          is still used to save registers.  */
2696       if (!ACCUMULATE_OUTGOING_ARGS)
2697         dwarf2out_notice_stack_adjust (insn, after_p);
2698       return;
2699     }
2700
2701   label = dwarf2out_cfi_label (false);
2702
2703   for (note = REG_NOTES (insn); note; note = XEXP (note, 1))
2704     switch (REG_NOTE_KIND (note))
2705       {
2706       case REG_FRAME_RELATED_EXPR:
2707         insn = XEXP (note, 0);
2708         goto found;
2709
2710       case REG_CFA_DEF_CFA:
2711         dwarf2out_frame_debug_def_cfa (XEXP (note, 0), label);
2712         handled_one = true;
2713         break;
2714
2715       case REG_CFA_ADJUST_CFA:
2716         n = XEXP (note, 0);
2717         if (n == NULL)
2718           {
2719             n = PATTERN (insn);
2720             if (GET_CODE (n) == PARALLEL)
2721               n = XVECEXP (n, 0, 0);
2722           }
2723         dwarf2out_frame_debug_adjust_cfa (n, label);
2724         handled_one = true;
2725         break;
2726
2727       case REG_CFA_OFFSET:
2728         n = XEXP (note, 0);
2729         if (n == NULL)
2730           n = single_set (insn);
2731         dwarf2out_frame_debug_cfa_offset (n, label);
2732         handled_one = true;
2733         break;
2734
2735       case REG_CFA_REGISTER:
2736         n = XEXP (note, 0);
2737         if (n == NULL)
2738           {
2739             n = PATTERN (insn);
2740             if (GET_CODE (n) == PARALLEL)
2741               n = XVECEXP (n, 0, 0);
2742           }
2743         dwarf2out_frame_debug_cfa_register (n, label);
2744         handled_one = true;
2745         break;
2746
2747       case REG_CFA_RESTORE:
2748         n = XEXP (note, 0);
2749         if (n == NULL)
2750           {
2751             n = PATTERN (insn);
2752             if (GET_CODE (n) == PARALLEL)
2753               n = XVECEXP (n, 0, 0);
2754             n = XEXP (n, 0);
2755           }
2756         dwarf2out_frame_debug_cfa_restore (n, label);
2757         handled_one = true;
2758         break;
2759
2760       case REG_CFA_SET_VDRAP:
2761         n = XEXP (note, 0);
2762         if (REG_P (n))
2763           {
2764             dw_fde_ref fde = current_fde ();
2765             if (fde)
2766               {
2767                 gcc_assert (fde->vdrap_reg == INVALID_REGNUM);
2768                 if (REG_P (n))
2769                   fde->vdrap_reg = REGNO (n);
2770               }
2771           }
2772         handled_one = true;
2773         break;
2774
2775       default:
2776         break;
2777       }
2778   if (handled_one)
2779     return;
2780
2781   insn = PATTERN (insn);
2782  found:
2783   dwarf2out_frame_debug_expr (insn, label);
2784 }
2785
2786 /* Determine if we need to save and restore CFI information around this
2787    epilogue.  If SIBCALL is true, then this is a sibcall epilogue.  If
2788    we do need to save/restore, then emit the save now, and insert a
2789    NOTE_INSN_CFA_RESTORE_STATE at the appropriate place in the stream.  */
2790
2791 void
2792 dwarf2out_begin_epilogue (rtx insn)
2793 {
2794   bool saw_frp = false;
2795   rtx i;
2796
2797   /* Scan forward to the return insn, noticing if there are possible
2798      frame related insns.  */
2799   for (i = NEXT_INSN (insn); i ; i = NEXT_INSN (i))
2800     {
2801       if (!INSN_P (i))
2802         continue;
2803
2804       /* Look for both regular and sibcalls to end the block.  */
2805       if (returnjump_p (i))
2806         break;
2807       if (CALL_P (i) && SIBLING_CALL_P (i))
2808         break;
2809
2810       if (GET_CODE (PATTERN (i)) == SEQUENCE)
2811         {
2812           int idx;
2813           rtx seq = PATTERN (i);
2814
2815           if (returnjump_p (XVECEXP (seq, 0, 0)))
2816             break;
2817           if (CALL_P (XVECEXP (seq, 0, 0))
2818               && SIBLING_CALL_P (XVECEXP (seq, 0, 0)))
2819             break;
2820
2821           for (idx = 0; idx < XVECLEN (seq, 0); idx++)
2822             if (RTX_FRAME_RELATED_P (XVECEXP (seq, 0, idx)))
2823               saw_frp = true;
2824         }
2825
2826       if (RTX_FRAME_RELATED_P (i))
2827         saw_frp = true;
2828     }
2829
2830   /* If the port doesn't emit epilogue unwind info, we don't need a
2831      save/restore pair.  */
2832   if (!saw_frp)
2833     return;
2834
2835   /* Otherwise, search forward to see if the return insn was the last
2836      basic block of the function.  If so, we don't need save/restore.  */
2837   gcc_assert (i != NULL);
2838   i = next_real_insn (i);
2839   if (i == NULL)
2840     return;
2841
2842   /* Insert the restore before that next real insn in the stream, and before
2843      a potential NOTE_INSN_EPILOGUE_BEG -- we do need these notes to be
2844      properly nested.  This should be after any label or alignment.  This
2845      will be pushed into the CFI stream by the function below.  */
2846   while (1)
2847     {
2848       rtx p = PREV_INSN (i);
2849       if (!NOTE_P (p))
2850         break;
2851       if (NOTE_KIND (p) == NOTE_INSN_BASIC_BLOCK)
2852         break;
2853       i = p;
2854     }
2855   emit_note_before (NOTE_INSN_CFA_RESTORE_STATE, i);
2856
2857   emit_cfa_remember = true;
2858
2859   /* And emulate the state save.  */
2860   gcc_assert (!cfa_remember.in_use);
2861   cfa_remember = cfa;
2862   cfa_remember.in_use = 1;
2863 }
2864
2865 /* A "subroutine" of dwarf2out_begin_epilogue.  Emit the restore required.  */
2866
2867 void
2868 dwarf2out_frame_debug_restore_state (void)
2869 {
2870   dw_cfi_ref cfi = new_cfi ();
2871   const char *label = dwarf2out_cfi_label (false);
2872
2873   cfi->dw_cfi_opc = DW_CFA_restore_state;
2874   add_fde_cfi (label, cfi);
2875
2876   gcc_assert (cfa_remember.in_use);
2877   cfa = cfa_remember;
2878   cfa_remember.in_use = 0;
2879 }
2880
2881 #endif
2882
2883 /* Describe for the GTY machinery what parts of dw_cfi_oprnd1 are used.  */
2884 static enum dw_cfi_oprnd_type dw_cfi_oprnd1_desc
2885  (enum dwarf_call_frame_info cfi);
2886
2887 static enum dw_cfi_oprnd_type
2888 dw_cfi_oprnd1_desc (enum dwarf_call_frame_info cfi)
2889 {
2890   switch (cfi)
2891     {
2892     case DW_CFA_nop:
2893     case DW_CFA_GNU_window_save:
2894     case DW_CFA_remember_state:
2895     case DW_CFA_restore_state:
2896       return dw_cfi_oprnd_unused;
2897
2898     case DW_CFA_set_loc:
2899     case DW_CFA_advance_loc1:
2900     case DW_CFA_advance_loc2:
2901     case DW_CFA_advance_loc4:
2902     case DW_CFA_MIPS_advance_loc8:
2903       return dw_cfi_oprnd_addr;
2904
2905     case DW_CFA_offset:
2906     case DW_CFA_offset_extended:
2907     case DW_CFA_def_cfa:
2908     case DW_CFA_offset_extended_sf:
2909     case DW_CFA_def_cfa_sf:
2910     case DW_CFA_restore:
2911     case DW_CFA_restore_extended:
2912     case DW_CFA_undefined:
2913     case DW_CFA_same_value:
2914     case DW_CFA_def_cfa_register:
2915     case DW_CFA_register:
2916     case DW_CFA_expression:
2917       return dw_cfi_oprnd_reg_num;
2918
2919     case DW_CFA_def_cfa_offset:
2920     case DW_CFA_GNU_args_size:
2921     case DW_CFA_def_cfa_offset_sf:
2922       return dw_cfi_oprnd_offset;
2923
2924     case DW_CFA_def_cfa_expression:
2925       return dw_cfi_oprnd_loc;
2926
2927     default:
2928       gcc_unreachable ();
2929     }
2930 }
2931
2932 /* Describe for the GTY machinery what parts of dw_cfi_oprnd2 are used.  */
2933 static enum dw_cfi_oprnd_type dw_cfi_oprnd2_desc
2934  (enum dwarf_call_frame_info cfi);
2935
2936 static enum dw_cfi_oprnd_type
2937 dw_cfi_oprnd2_desc (enum dwarf_call_frame_info cfi)
2938 {
2939   switch (cfi)
2940     {
2941     case DW_CFA_def_cfa:
2942     case DW_CFA_def_cfa_sf:
2943     case DW_CFA_offset:
2944     case DW_CFA_offset_extended_sf:
2945     case DW_CFA_offset_extended:
2946       return dw_cfi_oprnd_offset;
2947
2948     case DW_CFA_register:
2949       return dw_cfi_oprnd_reg_num;
2950
2951     case DW_CFA_expression:
2952       return dw_cfi_oprnd_loc;
2953
2954     default:
2955       return dw_cfi_oprnd_unused;
2956     }
2957 }
2958
2959 #if defined (DWARF2_DEBUGGING_INFO) || defined (DWARF2_UNWIND_INFO)
2960
2961 /* Switch [BACK] to eh_frame_section.  If we don't have an eh_frame_section,
2962    switch to the data section instead, and write out a synthetic start label
2963    for collect2 the first time around.  */
2964
2965 static void
2966 switch_to_eh_frame_section (bool back)
2967 {
2968   tree label;
2969
2970 #ifdef EH_FRAME_SECTION_NAME
2971   if (eh_frame_section == 0)
2972     {
2973       int flags;
2974
2975       if (EH_TABLES_CAN_BE_READ_ONLY)
2976         {
2977           int fde_encoding;
2978           int per_encoding;
2979           int lsda_encoding;
2980
2981           fde_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/1,
2982                                                        /*global=*/0);
2983           per_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/2,
2984                                                        /*global=*/1);
2985           lsda_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/0,
2986                                                         /*global=*/0);
2987           flags = ((! flag_pic
2988                     || ((fde_encoding & 0x70) != DW_EH_PE_absptr
2989                         && (fde_encoding & 0x70) != DW_EH_PE_aligned
2990                         && (per_encoding & 0x70) != DW_EH_PE_absptr
2991                         && (per_encoding & 0x70) != DW_EH_PE_aligned
2992                         && (lsda_encoding & 0x70) != DW_EH_PE_absptr
2993                         && (lsda_encoding & 0x70) != DW_EH_PE_aligned))
2994                    ? 0 : SECTION_WRITE);
2995         }
2996       else
2997         flags = SECTION_WRITE;
2998       eh_frame_section = get_section (EH_FRAME_SECTION_NAME, flags, NULL);
2999     }
3000 #endif
3001
3002   if (eh_frame_section)
3003     switch_to_section (eh_frame_section);
3004   else
3005     {
3006       /* We have no special eh_frame section.  Put the information in
3007          the data section and emit special labels to guide collect2.  */
3008       switch_to_section (data_section);
3009
3010       if (!back)
3011         {
3012           label = get_file_function_name ("F");
3013           ASM_OUTPUT_ALIGN (asm_out_file, floor_log2 (PTR_SIZE));
3014           targetm.asm_out.globalize_label (asm_out_file,
3015                                            IDENTIFIER_POINTER (label));
3016           ASM_OUTPUT_LABEL (asm_out_file, IDENTIFIER_POINTER (label));
3017         }
3018     }
3019 }
3020
3021 /* Switch [BACK] to the eh or debug frame table section, depending on
3022    FOR_EH.  */
3023
3024 static void
3025 switch_to_frame_table_section (int for_eh, bool back)
3026 {
3027   if (for_eh)
3028     switch_to_eh_frame_section (back);
3029   else
3030     {
3031       if (!debug_frame_section)
3032         debug_frame_section = get_section (DEBUG_FRAME_SECTION,
3033                                            SECTION_DEBUG, NULL);
3034       switch_to_section (debug_frame_section);
3035     }
3036 }
3037
3038 /* Output a Call Frame Information opcode and its operand(s).  */
3039
3040 static void
3041 output_cfi (dw_cfi_ref cfi, dw_fde_ref fde, int for_eh)
3042 {
3043   unsigned long r;
3044   HOST_WIDE_INT off;
3045
3046   if (cfi->dw_cfi_opc == DW_CFA_advance_loc)
3047     dw2_asm_output_data (1, (cfi->dw_cfi_opc
3048                              | (cfi->dw_cfi_oprnd1.dw_cfi_offset & 0x3f)),
3049                          "DW_CFA_advance_loc " HOST_WIDE_INT_PRINT_HEX,
3050                          ((unsigned HOST_WIDE_INT)
3051                           cfi->dw_cfi_oprnd1.dw_cfi_offset));
3052   else if (cfi->dw_cfi_opc == DW_CFA_offset)
3053     {
3054       r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, for_eh);
3055       dw2_asm_output_data (1, (cfi->dw_cfi_opc | (r & 0x3f)),
3056                            "DW_CFA_offset, column %#lx", r);
3057       off = div_data_align (cfi->dw_cfi_oprnd2.dw_cfi_offset);
3058       dw2_asm_output_data_uleb128 (off, NULL);
3059     }
3060   else if (cfi->dw_cfi_opc == DW_CFA_restore)
3061     {
3062       r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, for_eh);
3063       dw2_asm_output_data (1, (cfi->dw_cfi_opc | (r & 0x3f)),
3064                            "DW_CFA_restore, column %#lx", r);
3065     }
3066   else
3067     {
3068       dw2_asm_output_data (1, cfi->dw_cfi_opc,
3069                            "%s", dwarf_cfi_name (cfi->dw_cfi_opc));
3070
3071       switch (cfi->dw_cfi_opc)
3072         {
3073         case DW_CFA_set_loc:
3074           if (for_eh)
3075             dw2_asm_output_encoded_addr_rtx (
3076                 ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/1, /*global=*/0),
3077                 gen_rtx_SYMBOL_REF (Pmode, cfi->dw_cfi_oprnd1.dw_cfi_addr),
3078                 false, NULL);
3079           else
3080             dw2_asm_output_addr (DWARF2_ADDR_SIZE,
3081                                  cfi->dw_cfi_oprnd1.dw_cfi_addr, NULL);
3082           fde->dw_fde_current_label = cfi->dw_cfi_oprnd1.dw_cfi_addr;
3083           break;
3084
3085         case DW_CFA_advance_loc1:
3086           dw2_asm_output_delta (1, cfi->dw_cfi_oprnd1.dw_cfi_addr,
3087                                 fde->dw_fde_current_label, NULL);
3088           fde->dw_fde_current_label = cfi->dw_cfi_oprnd1.dw_cfi_addr;
3089           break;
3090
3091         case DW_CFA_advance_loc2:
3092           dw2_asm_output_delta (2, cfi->dw_cfi_oprnd1.dw_cfi_addr,
3093                                 fde->dw_fde_current_label, NULL);
3094           fde->dw_fde_current_label = cfi->dw_cfi_oprnd1.dw_cfi_addr;
3095           break;
3096
3097         case DW_CFA_advance_loc4:
3098           dw2_asm_output_delta (4, cfi->dw_cfi_oprnd1.dw_cfi_addr,
3099                                 fde->dw_fde_current_label, NULL);
3100           fde->dw_fde_current_label = cfi->dw_cfi_oprnd1.dw_cfi_addr;
3101           break;
3102
3103         case DW_CFA_MIPS_advance_loc8:
3104           dw2_asm_output_delta (8, cfi->dw_cfi_oprnd1.dw_cfi_addr,
3105                                 fde->dw_fde_current_label, NULL);
3106           fde->dw_fde_current_label = cfi->dw_cfi_oprnd1.dw_cfi_addr;
3107           break;
3108
3109         case DW_CFA_offset_extended:
3110           r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, for_eh);
3111           dw2_asm_output_data_uleb128 (r, NULL);
3112           off = div_data_align (cfi->dw_cfi_oprnd2.dw_cfi_offset);
3113           dw2_asm_output_data_uleb128 (off, NULL);
3114           break;
3115
3116         case DW_CFA_def_cfa:
3117           r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, for_eh);
3118           dw2_asm_output_data_uleb128 (r, NULL);
3119           dw2_asm_output_data_uleb128 (cfi->dw_cfi_oprnd2.dw_cfi_offset, NULL);
3120           break;
3121
3122         case DW_CFA_offset_extended_sf:
3123           r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, for_eh);
3124           dw2_asm_output_data_uleb128 (r, NULL);
3125           off = div_data_align (cfi->dw_cfi_oprnd2.dw_cfi_offset);
3126           dw2_asm_output_data_sleb128 (off, NULL);
3127           break;
3128
3129         case DW_CFA_def_cfa_sf:
3130           r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, for_eh);
3131           dw2_asm_output_data_uleb128 (r, NULL);
3132           off = div_data_align (cfi->dw_cfi_oprnd2.dw_cfi_offset);
3133           dw2_asm_output_data_sleb128 (off, NULL);
3134           break;
3135
3136         case DW_CFA_restore_extended:
3137         case DW_CFA_undefined:
3138         case DW_CFA_same_value:
3139         case DW_CFA_def_cfa_register:
3140           r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, for_eh);
3141           dw2_asm_output_data_uleb128 (r, NULL);
3142           break;
3143
3144         case DW_CFA_register:
3145           r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, for_eh);
3146           dw2_asm_output_data_uleb128 (r, NULL);
3147           r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd2.dw_cfi_reg_num, for_eh);
3148           dw2_asm_output_data_uleb128 (r, NULL);
3149           break;
3150
3151         case DW_CFA_def_cfa_offset:
3152         case DW_CFA_GNU_args_size:
3153           dw2_asm_output_data_uleb128 (cfi->dw_cfi_oprnd1.dw_cfi_offset, NULL);
3154           break;
3155
3156         case DW_CFA_def_cfa_offset_sf:
3157           off = div_data_align (cfi->dw_cfi_oprnd1.dw_cfi_offset);
3158           dw2_asm_output_data_sleb128 (off, NULL);
3159           break;
3160
3161         case DW_CFA_GNU_window_save:
3162           break;
3163
3164         case DW_CFA_def_cfa_expression:
3165         case DW_CFA_expression:
3166           output_cfa_loc (cfi);
3167           break;
3168
3169         case DW_CFA_GNU_negative_offset_extended:
3170           /* Obsoleted by DW_CFA_offset_extended_sf.  */
3171           gcc_unreachable ();
3172
3173         default:
3174           break;
3175         }
3176     }
3177 }
3178
3179 /* Similar, but do it via assembler directives instead.  */
3180
3181 static void
3182 output_cfi_directive (dw_cfi_ref cfi)
3183 {
3184   unsigned long r, r2;
3185
3186   switch (cfi->dw_cfi_opc)
3187     {
3188     case DW_CFA_advance_loc:
3189     case DW_CFA_advance_loc1:
3190     case DW_CFA_advance_loc2:
3191     case DW_CFA_advance_loc4:
3192     case DW_CFA_MIPS_advance_loc8:
3193     case DW_CFA_set_loc:
3194       /* Should only be created by add_fde_cfi in a code path not
3195          followed when emitting via directives.  The assembler is
3196          going to take care of this for us.  */
3197       gcc_unreachable ();
3198
3199     case DW_CFA_offset:
3200     case DW_CFA_offset_extended:
3201     case DW_CFA_offset_extended_sf:
3202       r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, 1);
3203       fprintf (asm_out_file, "\t.cfi_offset %lu, "HOST_WIDE_INT_PRINT_DEC"\n",
3204                r, cfi->dw_cfi_oprnd2.dw_cfi_offset);
3205       break;
3206
3207     case DW_CFA_restore:
3208     case DW_CFA_restore_extended:
3209       r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, 1);
3210       fprintf (asm_out_file, "\t.cfi_restore %lu\n", r);
3211       break;
3212
3213     case DW_CFA_undefined:
3214       r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, 1);
3215       fprintf (asm_out_file, "\t.cfi_undefined %lu\n", r);
3216       break;
3217
3218     case DW_CFA_same_value:
3219       r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, 1);
3220       fprintf (asm_out_file, "\t.cfi_same_value %lu\n", r);
3221       break;
3222
3223     case DW_CFA_def_cfa:
3224     case DW_CFA_def_cfa_sf:
3225       r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, 1);
3226       fprintf (asm_out_file, "\t.cfi_def_cfa %lu, "HOST_WIDE_INT_PRINT_DEC"\n",
3227                r, cfi->dw_cfi_oprnd2.dw_cfi_offset);
3228       break;
3229
3230     case DW_CFA_def_cfa_register:
3231       r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, 1);
3232       fprintf (asm_out_file, "\t.cfi_def_cfa_register %lu\n", r);
3233       break;
3234
3235     case DW_CFA_register:
3236       r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, 1);
3237       r2 = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd2.dw_cfi_reg_num, 1);
3238       fprintf (asm_out_file, "\t.cfi_register %lu, %lu\n", r, r2);
3239       break;
3240
3241     case DW_CFA_def_cfa_offset:
3242     case DW_CFA_def_cfa_offset_sf:
3243       fprintf (asm_out_file, "\t.cfi_def_cfa_offset "
3244                HOST_WIDE_INT_PRINT_DEC"\n",
3245                cfi->dw_cfi_oprnd1.dw_cfi_offset);
3246       break;
3247
3248     case DW_CFA_remember_state:
3249       fprintf (asm_out_file, "\t.cfi_remember_state\n");
3250       break;
3251     case DW_CFA_restore_state:
3252       fprintf (asm_out_file, "\t.cfi_restore_state\n");
3253       break;
3254
3255     case DW_CFA_GNU_args_size:
3256       fprintf (asm_out_file, "\t.cfi_escape %#x,", DW_CFA_GNU_args_size);
3257       dw2_asm_output_data_uleb128_raw (cfi->dw_cfi_oprnd1.dw_cfi_offset);
3258       if (flag_debug_asm)
3259         fprintf (asm_out_file, "\t%s args_size "HOST_WIDE_INT_PRINT_DEC,
3260                  ASM_COMMENT_START, cfi->dw_cfi_oprnd1.dw_cfi_offset);
3261       fputc ('\n', asm_out_file);
3262       break;
3263
3264     case DW_CFA_GNU_window_save:
3265       fprintf (asm_out_file, "\t.cfi_window_save\n");
3266       break;
3267
3268     case DW_CFA_def_cfa_expression:
3269     case DW_CFA_expression:
3270       fprintf (asm_out_file, "\t.cfi_escape %#x,", cfi->dw_cfi_opc);
3271       output_cfa_loc_raw (cfi);
3272       fputc ('\n', asm_out_file);
3273       break;
3274
3275     default:
3276       gcc_unreachable ();
3277     }
3278 }
3279
3280 DEF_VEC_P (dw_cfi_ref);
3281 DEF_VEC_ALLOC_P (dw_cfi_ref, heap);
3282
3283 /* Output CFIs to bring current FDE to the same state as after executing
3284    CFIs in CFI chain.  DO_CFI_ASM is true if .cfi_* directives shall
3285    be emitted, false otherwise.  If it is false, FDE and FOR_EH are the
3286    other arguments to pass to output_cfi.  */
3287
3288 static void
3289 output_cfis (dw_cfi_ref cfi, bool do_cfi_asm, dw_fde_ref fde, bool for_eh)
3290 {
3291   struct dw_cfi_struct cfi_buf;
3292   dw_cfi_ref cfi2;
3293   dw_cfi_ref cfi_args_size = NULL, cfi_cfa = NULL, cfi_cfa_offset = NULL;
3294   VEC (dw_cfi_ref, heap) *regs = VEC_alloc (dw_cfi_ref, heap, 32);
3295   unsigned int len, idx;
3296
3297   for (;; cfi = cfi->dw_cfi_next)
3298     switch (cfi ? cfi->dw_cfi_opc : DW_CFA_nop)
3299       {
3300       case DW_CFA_advance_loc:
3301       case DW_CFA_advance_loc1:
3302       case DW_CFA_advance_loc2:
3303       case DW_CFA_advance_loc4:
3304       case DW_CFA_MIPS_advance_loc8:
3305       case DW_CFA_set_loc:
3306         /* All advances should be ignored.  */
3307         break;
3308       case DW_CFA_remember_state:
3309         {
3310           dw_cfi_ref args_size = cfi_args_size;
3311
3312           /* Skip everything between .cfi_remember_state and
3313              .cfi_restore_state.  */
3314           for (cfi2 = cfi->dw_cfi_next; cfi2; cfi2 = cfi2->dw_cfi_next)
3315             if (cfi2->dw_cfi_opc == DW_CFA_restore_state)
3316               break;
3317             else if (cfi2->dw_cfi_opc == DW_CFA_GNU_args_size)
3318               args_size = cfi2;
3319             else
3320               gcc_assert (cfi2->dw_cfi_opc != DW_CFA_remember_state);
3321
3322           if (cfi2 == NULL)
3323             goto flush_all;
3324           else
3325             {
3326               cfi = cfi2;
3327               cfi_args_size = args_size;
3328             }
3329           break;
3330         }
3331       case DW_CFA_GNU_args_size:
3332         cfi_args_size = cfi;
3333         break;
3334       case DW_CFA_GNU_window_save:
3335         goto flush_all;
3336       case DW_CFA_offset:
3337       case DW_CFA_offset_extended:
3338       case DW_CFA_offset_extended_sf:
3339       case DW_CFA_restore:
3340       case DW_CFA_restore_extended:
3341       case DW_CFA_undefined:
3342       case DW_CFA_same_value:
3343       case DW_CFA_register:
3344       case DW_CFA_val_offset:
3345       case DW_CFA_val_offset_sf:
3346       case DW_CFA_expression:
3347       case DW_CFA_val_expression:
3348       case DW_CFA_GNU_negative_offset_extended:
3349         if (VEC_length (dw_cfi_ref, regs) <= cfi->dw_cfi_oprnd1.dw_cfi_reg_num)
3350           VEC_safe_grow_cleared (dw_cfi_ref, heap, regs,
3351                                  cfi->dw_cfi_oprnd1.dw_cfi_reg_num + 1);
3352         VEC_replace (dw_cfi_ref, regs, cfi->dw_cfi_oprnd1.dw_cfi_reg_num, cfi);
3353         break;
3354       case DW_CFA_def_cfa:
3355       case DW_CFA_def_cfa_sf:
3356       case DW_CFA_def_cfa_expression:
3357         cfi_cfa = cfi;
3358         cfi_cfa_offset = cfi;
3359         break;
3360       case DW_CFA_def_cfa_register:
3361         cfi_cfa = cfi;
3362         break;
3363       case DW_CFA_def_cfa_offset:
3364       case DW_CFA_def_cfa_offset_sf:
3365         cfi_cfa_offset = cfi;
3366         break;
3367       case DW_CFA_nop:
3368         gcc_assert (cfi == NULL);
3369       flush_all:
3370         len = VEC_length (dw_cfi_ref, regs);
3371         for (idx = 0; idx < len; idx++)
3372           {
3373             cfi2 = VEC_replace (dw_cfi_ref, regs, idx, NULL);
3374             if (cfi2 != NULL
3375                 && cfi2->dw_cfi_opc != DW_CFA_restore
3376                 && cfi2->dw_cfi_opc != DW_CFA_restore_extended)
3377               {
3378                 if (do_cfi_asm)
3379                   output_cfi_directive (cfi2);
3380                 else
3381                   output_cfi (cfi2, fde, for_eh);
3382               }
3383           }
3384         if (cfi_cfa && cfi_cfa_offset && cfi_cfa_offset != cfi_cfa)
3385           {
3386             gcc_assert (cfi_cfa->dw_cfi_opc != DW_CFA_def_cfa_expression);
3387             cfi_buf = *cfi_cfa;
3388             switch (cfi_cfa_offset->dw_cfi_opc)
3389               {
3390               case DW_CFA_def_cfa_offset:
3391                 cfi_buf.dw_cfi_opc = DW_CFA_def_cfa;
3392                 cfi_buf.dw_cfi_oprnd2 = cfi_cfa_offset->dw_cfi_oprnd1;
3393                 break;
3394               case DW_CFA_def_cfa_offset_sf:
3395                 cfi_buf.dw_cfi_opc = DW_CFA_def_cfa_sf;
3396                 cfi_buf.dw_cfi_oprnd2 = cfi_cfa_offset->dw_cfi_oprnd1;
3397                 break;
3398               case DW_CFA_def_cfa:
3399               case DW_CFA_def_cfa_sf:
3400                 cfi_buf.dw_cfi_opc = cfi_cfa_offset->dw_cfi_opc;
3401                 cfi_buf.dw_cfi_oprnd2 = cfi_cfa_offset->dw_cfi_oprnd2;
3402                 break;
3403               default:
3404                 gcc_unreachable ();
3405               }
3406             cfi_cfa = &cfi_buf;
3407           }
3408         else if (cfi_cfa_offset)
3409           cfi_cfa = cfi_cfa_offset;
3410         if (cfi_cfa)
3411           {
3412             if (do_cfi_asm)
3413               output_cfi_directive (cfi_cfa);
3414             else
3415               output_cfi (cfi_cfa, fde, for_eh);
3416           }
3417         cfi_cfa = NULL;
3418         cfi_cfa_offset = NULL;
3419         if (cfi_args_size
3420             && cfi_args_size->dw_cfi_oprnd1.dw_cfi_offset)
3421           {
3422             if (do_cfi_asm)
3423               output_cfi_directive (cfi_args_size);
3424             else
3425               output_cfi (cfi_args_size, fde, for_eh);
3426           }
3427         cfi_args_size = NULL;
3428         if (cfi == NULL)
3429           {
3430             VEC_free (dw_cfi_ref, heap, regs);
3431             return;
3432           }
3433         else if (do_cfi_asm)
3434           output_cfi_directive (cfi);
3435         else
3436           output_cfi (cfi, fde, for_eh);
3437         break;
3438       default:
3439         gcc_unreachable ();
3440     }
3441 }
3442
3443 /* Output one FDE.  */
3444
3445 static void
3446 output_fde (dw_fde_ref fde, bool for_eh, bool second,
3447             char *section_start_label, int fde_encoding, char *augmentation,
3448             bool any_lsda_needed, int lsda_encoding)
3449 {
3450   const char *begin, *end;
3451   static unsigned int j;
3452   char l1[20], l2[20];
3453   dw_cfi_ref cfi;
3454
3455   targetm.asm_out.unwind_label (asm_out_file, fde->decl, for_eh,
3456                                 /* empty */ 0);
3457   targetm.asm_out.internal_label (asm_out_file, FDE_LABEL,
3458                                   for_eh + j);
3459   ASM_GENERATE_INTERNAL_LABEL (l1, FDE_AFTER_SIZE_LABEL, for_eh + j);
3460   ASM_GENERATE_INTERNAL_LABEL (l2, FDE_END_LABEL, for_eh + j);
3461   if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4 && !for_eh)
3462     dw2_asm_output_data (4, 0xffffffff, "Initial length escape value"
3463                          " indicating 64-bit DWARF extension");
3464   dw2_asm_output_delta (for_eh ? 4 : DWARF_OFFSET_SIZE, l2, l1,
3465                         "FDE Length");
3466   ASM_OUTPUT_LABEL (asm_out_file, l1);
3467
3468   if (for_eh)
3469     dw2_asm_output_delta (4, l1, section_start_label, "FDE CIE offset");
3470   else
3471     dw2_asm_output_offset (DWARF_OFFSET_SIZE, section_start_label,
3472                            debug_frame_section, "FDE CIE offset");
3473
3474   if (!fde->dw_fde_switched_sections)
3475     {
3476       begin = fde->dw_fde_begin;
3477       end = fde->dw_fde_end;
3478     }
3479   else
3480     {
3481       /* For the first section, prefer dw_fde_begin over
3482          dw_fde_{hot,cold}_section_label, as the latter
3483          might be separated from the real start of the
3484          function by alignment padding.  */
3485       if (!second)
3486         begin = fde->dw_fde_begin;
3487       else if (fde->dw_fde_switched_cold_to_hot)
3488         begin = fde->dw_fde_hot_section_label;
3489       else
3490         begin = fde->dw_fde_unlikely_section_label;
3491       if (second ^ fde->dw_fde_switched_cold_to_hot)
3492         end = fde->dw_fde_unlikely_section_end_label;
3493       else
3494         end = fde->dw_fde_hot_section_end_label;
3495     }
3496
3497   if (for_eh)
3498     {
3499       rtx sym_ref = gen_rtx_SYMBOL_REF (Pmode, begin);
3500       SYMBOL_REF_FLAGS (sym_ref) |= SYMBOL_FLAG_LOCAL;
3501       dw2_asm_output_encoded_addr_rtx (fde_encoding, sym_ref, false,
3502                                        "FDE initial location");
3503       dw2_asm_output_delta (size_of_encoded_value (fde_encoding),
3504                             end, begin, "FDE address range");
3505     }
3506   else
3507     {
3508       dw2_asm_output_addr (DWARF2_ADDR_SIZE, begin, "FDE initial location");
3509       dw2_asm_output_delta (DWARF2_ADDR_SIZE, end, begin, "FDE address range");
3510     }
3511
3512   if (augmentation[0])
3513     {
3514       if (any_lsda_needed)
3515         {
3516           int size = size_of_encoded_value (lsda_encoding);
3517
3518           if (lsda_encoding == DW_EH_PE_aligned)
3519             {
3520               int offset = (  4         /* Length */
3521                             + 4         /* CIE offset */
3522                             + 2 * size_of_encoded_value (fde_encoding)
3523                             + 1         /* Augmentation size */ );
3524               int pad = -offset & (PTR_SIZE - 1);
3525
3526               size += pad;
3527               gcc_assert (size_of_uleb128 (size) == 1);
3528             }
3529
3530           dw2_asm_output_data_uleb128 (size, "Augmentation size");
3531
3532           if (fde->uses_eh_lsda)
3533             {
3534               ASM_GENERATE_INTERNAL_LABEL (l1, second ? "LLSDAC" : "LLSDA",
3535                                            fde->funcdef_number);
3536               dw2_asm_output_encoded_addr_rtx (lsda_encoding,
3537                                                gen_rtx_SYMBOL_REF (Pmode, l1),
3538                                                false,
3539                                                "Language Specific Data Area");
3540             }
3541           else
3542             {
3543               if (lsda_encoding == DW_EH_PE_aligned)
3544                 ASM_OUTPUT_ALIGN (asm_out_file, floor_log2 (PTR_SIZE));
3545               dw2_asm_output_data (size_of_encoded_value (lsda_encoding), 0,
3546                                    "Language Specific Data Area (none)");
3547             }
3548         }
3549       else
3550         dw2_asm_output_data_uleb128 (0, "Augmentation size");
3551     }
3552
3553   /* Loop through the Call Frame Instructions associated with
3554      this FDE.  */
3555   fde->dw_fde_current_label = begin;
3556   if (!fde->dw_fde_switched_sections)
3557     for (cfi = fde->dw_fde_cfi; cfi != NULL; cfi = cfi->dw_cfi_next)
3558       output_cfi (cfi, fde, for_eh);
3559   else if (!second)
3560     {
3561       if (fde->dw_fde_switch_cfi)
3562         for (cfi = fde->dw_fde_cfi; cfi != NULL; cfi = cfi->dw_cfi_next)
3563           {
3564             output_cfi (cfi, fde, for_eh);
3565             if (cfi == fde->dw_fde_switch_cfi)
3566               break;
3567           }
3568     }
3569   else
3570     {
3571       dw_cfi_ref cfi_next = fde->dw_fde_cfi;
3572
3573       if (fde->dw_fde_switch_cfi)
3574         {
3575           cfi_next = fde->dw_fde_switch_cfi->dw_cfi_next;
3576           fde->dw_fde_switch_cfi->dw_cfi_next = NULL;
3577           output_cfis (fde->dw_fde_cfi, false, fde, for_eh);
3578           fde->dw_fde_switch_cfi->dw_cfi_next = cfi_next;
3579         }
3580       for (cfi = cfi_next; cfi != NULL; cfi = cfi->dw_cfi_next)
3581         output_cfi (cfi, fde, for_eh);
3582     }
3583
3584   /* If we are to emit a ref/link from function bodies to their frame tables,
3585      do it now.  This is typically performed to make sure that tables
3586      associated with functions are dragged with them and not discarded in
3587      garbage collecting links. We need to do this on a per function basis to
3588      cope with -ffunction-sections.  */
3589
3590 #ifdef ASM_OUTPUT_DWARF_TABLE_REF
3591   /* Switch to the function section, emit the ref to the tables, and
3592      switch *back* into the table section.  */
3593   switch_to_section (function_section (fde->decl));
3594   ASM_OUTPUT_DWARF_TABLE_REF (section_start_label);
3595   switch_to_frame_table_section (for_eh, true);
3596 #endif
3597
3598   /* Pad the FDE out to an address sized boundary.  */
3599   ASM_OUTPUT_ALIGN (asm_out_file,
3600                     floor_log2 ((for_eh ? PTR_SIZE : DWARF2_ADDR_SIZE)));
3601   ASM_OUTPUT_LABEL (asm_out_file, l2);
3602
3603   j += 2;
3604 }
3605
3606 /* Return true if frame description entry FDE is needed for EH.  */
3607
3608 static bool
3609 fde_needed_for_eh_p (dw_fde_ref fde)
3610 {
3611   if (flag_asynchronous_unwind_tables)
3612     return true;
3613
3614   if (TARGET_USES_WEAK_UNWIND_INFO && DECL_WEAK (fde->decl))
3615     return true;
3616
3617   if (fde->uses_eh_lsda)
3618     return true;
3619
3620   /* If exceptions are enabled, we have collected nothrow info.  */
3621   if (flag_exceptions && (fde->all_throwers_are_sibcalls || fde->nothrow))
3622     return false;
3623
3624   return true;
3625 }
3626
3627 /* Output the call frame information used to record information
3628    that relates to calculating the frame pointer, and records the
3629    location of saved registers.  */
3630
3631 static void
3632 output_call_frame_info (int for_eh)
3633 {
3634   unsigned int i;
3635   dw_fde_ref fde;
3636   dw_cfi_ref cfi;
3637   char l1[20], l2[20], section_start_label[20];
3638   bool any_lsda_needed = false;
3639   char augmentation[6];
3640   int augmentation_size;
3641   int fde_encoding = DW_EH_PE_absptr;
3642   int per_encoding = DW_EH_PE_absptr;
3643   int lsda_encoding = DW_EH_PE_absptr;
3644   int return_reg;
3645   rtx personality = NULL;
3646   int dw_cie_version;
3647
3648   /* Don't emit a CIE if there won't be any FDEs.  */
3649   if (fde_table_in_use == 0)
3650     return;
3651
3652   /* Nothing to do if the assembler's doing it all.  */
3653   if (dwarf2out_do_cfi_asm ())
3654     return;
3655
3656   /* If we don't have any functions we'll want to unwind out of, don't emit
3657      any EH unwind information.  If we make FDEs linkonce, we may have to
3658      emit an empty label for an FDE that wouldn't otherwise be emitted.  We
3659      want to avoid having an FDE kept around when the function it refers to
3660      is discarded.  Example where this matters: a primary function template
3661      in C++ requires EH information, an explicit specialization doesn't.  */
3662   if (for_eh)
3663     {
3664       bool any_eh_needed = false;
3665
3666       for (i = 0; i < fde_table_in_use; i++)
3667         if (fde_table[i].uses_eh_lsda)
3668           any_eh_needed = any_lsda_needed = true;
3669         else if (fde_needed_for_eh_p (&fde_table[i]))
3670           any_eh_needed = true;
3671         else if (TARGET_USES_WEAK_UNWIND_INFO)
3672           targetm.asm_out.unwind_label (asm_out_file, fde_table[i].decl, 1, 1);
3673
3674       if (!any_eh_needed)
3675         return;
3676     }
3677
3678   /* We're going to be generating comments, so turn on app.  */
3679   if (flag_debug_asm)
3680     app_enable ();
3681
3682   /* Switch to the proper frame section, first time.  */
3683   switch_to_frame_table_section (for_eh, false);
3684
3685   ASM_GENERATE_INTERNAL_LABEL (section_start_label, FRAME_BEGIN_LABEL, for_eh);
3686   ASM_OUTPUT_LABEL (asm_out_file, section_start_label);
3687
3688   /* Output the CIE.  */
3689   ASM_GENERATE_INTERNAL_LABEL (l1, CIE_AFTER_SIZE_LABEL, for_eh);
3690   ASM_GENERATE_INTERNAL_LABEL (l2, CIE_END_LABEL, for_eh);
3691   if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4 && !for_eh)
3692     dw2_asm_output_data (4, 0xffffffff,
3693       "Initial length escape value indicating 64-bit DWARF extension");
3694   dw2_asm_output_delta (for_eh ? 4 : DWARF_OFFSET_SIZE, l2, l1,
3695                         "Length of Common Information Entry");
3696   ASM_OUTPUT_LABEL (asm_out_file, l1);
3697
3698   /* Now that the CIE pointer is PC-relative for EH,
3699      use 0 to identify the CIE.  */
3700   dw2_asm_output_data ((for_eh ? 4 : DWARF_OFFSET_SIZE),
3701                        (for_eh ? 0 : DWARF_CIE_ID),
3702                        "CIE Identifier Tag");
3703
3704   /* Use the CIE version 3 for DWARF3; allow DWARF2 to continue to
3705      use CIE version 1, unless that would produce incorrect results
3706      due to overflowing the return register column.  */
3707   return_reg = DWARF2_FRAME_REG_OUT (DWARF_FRAME_RETURN_COLUMN, for_eh);
3708   dw_cie_version = 1;
3709   if (return_reg >= 256 || dwarf_version > 2)
3710     dw_cie_version = 3;
3711   dw2_asm_output_data (1, dw_cie_version, "CIE Version");
3712
3713   augmentation[0] = 0;
3714   augmentation_size = 0;
3715
3716   personality = current_unit_personality;
3717   if (for_eh)
3718     {
3719       char *p;
3720
3721       /* Augmentation:
3722          z      Indicates that a uleb128 is present to size the
3723                 augmentation section.
3724          L      Indicates the encoding (and thus presence) of
3725                 an LSDA pointer in the FDE augmentation.
3726          R      Indicates a non-default pointer encoding for
3727                 FDE code pointers.
3728          P      Indicates the presence of an encoding + language
3729                 personality routine in the CIE augmentation.  */
3730
3731       fde_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/1, /*global=*/0);
3732       per_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/2, /*global=*/1);
3733       lsda_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/0, /*global=*/0);
3734
3735       p = augmentation + 1;
3736       if (personality)
3737         {
3738           *p++ = 'P';
3739           augmentation_size += 1 + size_of_encoded_value (per_encoding);
3740           assemble_external_libcall (personality);
3741         }
3742       if (any_lsda_needed)
3743         {
3744           *p++ = 'L';
3745           augmentation_size += 1;
3746         }
3747       if (fde_encoding != DW_EH_PE_absptr)
3748         {
3749           *p++ = 'R';
3750           augmentation_size += 1;
3751         }
3752       if (p > augmentation + 1)
3753         {
3754           augmentation[0] = 'z';
3755           *p = '\0';
3756         }
3757
3758       /* Ug.  Some platforms can't do unaligned dynamic relocations at all.  */
3759       if (personality && per_encoding == DW_EH_PE_aligned)
3760         {
3761           int offset = (  4             /* Length */
3762                         + 4             /* CIE Id */
3763                         + 1             /* CIE version */
3764                         + strlen (augmentation) + 1     /* Augmentation */
3765                         + size_of_uleb128 (1)           /* Code alignment */
3766                         + size_of_sleb128 (DWARF_CIE_DATA_ALIGNMENT)
3767                         + 1             /* RA column */
3768                         + 1             /* Augmentation size */
3769                         + 1             /* Personality encoding */ );
3770           int pad = -offset & (PTR_SIZE - 1);
3771
3772           augmentation_size += pad;
3773
3774           /* Augmentations should be small, so there's scarce need to
3775              iterate for a solution.  Die if we exceed one uleb128 byte.  */
3776           gcc_assert (size_of_uleb128 (augmentation_size) == 1);
3777         }
3778     }
3779
3780   dw2_asm_output_nstring (augmentation, -1, "CIE Augmentation");
3781   if (dw_cie_version >= 4)
3782     {
3783       dw2_asm_output_data (1, DWARF2_ADDR_SIZE, "CIE Address Size");
3784       dw2_asm_output_data (1, 0, "CIE Segment Size");
3785     }
3786   dw2_asm_output_data_uleb128 (1, "CIE Code Alignment Factor");
3787   dw2_asm_output_data_sleb128 (DWARF_CIE_DATA_ALIGNMENT,
3788                                "CIE Data Alignment Factor");
3789
3790   if (dw_cie_version == 1)
3791     dw2_asm_output_data (1, return_reg, "CIE RA Column");
3792   else
3793     dw2_asm_output_data_uleb128 (return_reg, "CIE RA Column");
3794
3795   if (augmentation[0])
3796     {
3797       dw2_asm_output_data_uleb128 (augmentation_size, "Augmentation size");
3798       if (personality)
3799         {
3800           dw2_asm_output_data (1, per_encoding, "Personality (%s)",
3801                                eh_data_format_name (per_encoding));
3802           dw2_asm_output_encoded_addr_rtx (per_encoding,
3803                                            personality,
3804                                            true, NULL);
3805         }
3806
3807       if (any_lsda_needed)
3808         dw2_asm_output_data (1, lsda_encoding, "LSDA Encoding (%s)",
3809                              eh_data_format_name (lsda_encoding));
3810
3811       if (fde_encoding != DW_EH_PE_absptr)
3812         dw2_asm_output_data (1, fde_encoding, "FDE Encoding (%s)",
3813                              eh_data_format_name (fde_encoding));
3814     }
3815
3816   for (cfi = cie_cfi_head; cfi != NULL; cfi = cfi->dw_cfi_next)
3817     output_cfi (cfi, NULL, for_eh);
3818
3819   /* Pad the CIE out to an address sized boundary.  */
3820   ASM_OUTPUT_ALIGN (asm_out_file,
3821                     floor_log2 (for_eh ? PTR_SIZE : DWARF2_ADDR_SIZE));
3822   ASM_OUTPUT_LABEL (asm_out_file, l2);
3823
3824   /* Loop through all of the FDE's.  */
3825   for (i = 0; i < fde_table_in_use; i++)
3826     {
3827       unsigned int k;
3828       fde = &fde_table[i];
3829
3830       /* Don't emit EH unwind info for leaf functions that don't need it.  */
3831       if (for_eh && !fde_needed_for_eh_p (fde))
3832         continue;
3833
3834       for (k = 0; k < (fde->dw_fde_switched_sections ? 2 : 1); k++)
3835         output_fde (fde, for_eh, k, section_start_label, fde_encoding,
3836                     augmentation, any_lsda_needed, lsda_encoding);
3837     }
3838
3839   if (for_eh && targetm.terminate_dw2_eh_frame_info)
3840     dw2_asm_output_data (4, 0, "End of Table");
3841 #ifdef MIPS_DEBUGGING_INFO
3842   /* Work around Irix 6 assembler bug whereby labels at the end of a section
3843      get a value of 0.  Putting .align 0 after the label fixes it.  */
3844   ASM_OUTPUT_ALIGN (asm_out_file, 0);
3845 #endif
3846
3847   /* Turn off app to make assembly quicker.  */
3848   if (flag_debug_asm)
3849     app_disable ();
3850 }
3851
3852 /* Emit .cfi_startproc and .cfi_personality/.cfi_lsda if needed.  */
3853
3854 static void
3855 dwarf2out_do_cfi_startproc (bool second)
3856 {
3857   int enc;
3858   rtx ref;
3859   rtx personality = get_personality_function (current_function_decl);
3860
3861   fprintf (asm_out_file, "\t.cfi_startproc\n");
3862
3863   if (personality)
3864     {
3865       enc = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/2, /*global=*/1);
3866       ref = personality;
3867
3868       /* ??? The GAS support isn't entirely consistent.  We have to
3869          handle indirect support ourselves, but PC-relative is done
3870          in the assembler.  Further, the assembler can't handle any
3871          of the weirder relocation types.  */
3872       if (enc & DW_EH_PE_indirect)
3873         ref = dw2_force_const_mem (ref, true);
3874
3875       fprintf (asm_out_file, "\t.cfi_personality %#x,", enc);
3876       output_addr_const (asm_out_file, ref);
3877       fputc ('\n', asm_out_file);
3878     }
3879
3880   if (crtl->uses_eh_lsda)
3881     {
3882       char lab[20];
3883
3884       enc = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/0, /*global=*/0);
3885       ASM_GENERATE_INTERNAL_LABEL (lab, second ? "LLSDAC" : "LLSDA",
3886                                    current_function_funcdef_no);
3887       ref = gen_rtx_SYMBOL_REF (Pmode, lab);
3888       SYMBOL_REF_FLAGS (ref) = SYMBOL_FLAG_LOCAL;
3889
3890       if (enc & DW_EH_PE_indirect)
3891         ref = dw2_force_const_mem (ref, true);
3892
3893       fprintf (asm_out_file, "\t.cfi_lsda %#x,", enc);
3894       output_addr_const (asm_out_file, ref);
3895       fputc ('\n', asm_out_file);
3896     }
3897 }
3898
3899 /* Output a marker (i.e. a label) for the beginning of a function, before
3900    the prologue.  */
3901
3902 void
3903 dwarf2out_begin_prologue (unsigned int line ATTRIBUTE_UNUSED,
3904                           const char *file ATTRIBUTE_UNUSED)
3905 {
3906   char label[MAX_ARTIFICIAL_LABEL_BYTES];
3907   char * dup_label;
3908   dw_fde_ref fde;
3909   section *fnsec;
3910
3911   current_function_func_begin_label = NULL;
3912
3913 #ifdef TARGET_UNWIND_INFO
3914   /* ??? current_function_func_begin_label is also used by except.c
3915      for call-site information.  We must emit this label if it might
3916      be used.  */
3917   if ((! flag_exceptions || USING_SJLJ_EXCEPTIONS)
3918       && ! dwarf2out_do_frame ())
3919     return;
3920 #else
3921   if (! dwarf2out_do_frame ())
3922     return;
3923 #endif
3924
3925   fnsec = function_section (current_function_decl);
3926   switch_to_section (fnsec);
3927   ASM_GENERATE_INTERNAL_LABEL (label, FUNC_BEGIN_LABEL,
3928                                current_function_funcdef_no);
3929   ASM_OUTPUT_DEBUG_LABEL (asm_out_file, FUNC_BEGIN_LABEL,
3930                           current_function_funcdef_no);
3931   dup_label = xstrdup (label);
3932   current_function_func_begin_label = dup_label;
3933
3934 #ifdef TARGET_UNWIND_INFO
3935   /* We can elide the fde allocation if we're not emitting debug info.  */
3936   if (! dwarf2out_do_frame ())
3937     return;
3938 #endif
3939
3940   /* Expand the fde table if necessary.  */
3941   if (fde_table_in_use == fde_table_allocated)
3942     {
3943       fde_table_allocated += FDE_TABLE_INCREMENT;
3944       fde_table = GGC_RESIZEVEC (dw_fde_node, fde_table, fde_table_allocated);
3945       memset (fde_table + fde_table_in_use, 0,
3946               FDE_TABLE_INCREMENT * sizeof (dw_fde_node));
3947     }
3948
3949   /* Record the FDE associated with this function.  */
3950   current_funcdef_fde = fde_table_in_use;
3951
3952   /* Add the new FDE at the end of the fde_table.  */
3953   fde = &fde_table[fde_table_in_use++];
3954   fde->decl = current_function_decl;
3955   fde->dw_fde_begin = dup_label;
3956   fde->dw_fde_current_label = dup_label;
3957   fde->dw_fde_hot_section_label = NULL;
3958   fde->dw_fde_hot_section_end_label = NULL;
3959   fde->dw_fde_unlikely_section_label = NULL;
3960   fde->dw_fde_unlikely_section_end_label = NULL;
3961   fde->dw_fde_switched_sections = 0;
3962   fde->dw_fde_switched_cold_to_hot = 0;
3963   fde->dw_fde_end = NULL;
3964   fde->dw_fde_cfi = NULL;
3965   fde->dw_fde_switch_cfi = NULL;
3966   fde->funcdef_number = current_function_funcdef_no;
3967   fde->all_throwers_are_sibcalls = crtl->all_throwers_are_sibcalls;
3968   fde->uses_eh_lsda = crtl->uses_eh_lsda;
3969   fde->nothrow = crtl->nothrow;
3970   fde->drap_reg = INVALID_REGNUM;
3971   fde->vdrap_reg = INVALID_REGNUM;
3972   if (flag_reorder_blocks_and_partition)
3973     {
3974       section *unlikelysec;
3975       if (first_function_block_is_cold)
3976         fde->in_std_section = 1;
3977       else
3978         fde->in_std_section
3979           = (fnsec == text_section
3980              || (cold_text_section && fnsec == cold_text_section));
3981       unlikelysec = unlikely_text_section ();
3982       fde->cold_in_std_section
3983         = (unlikelysec == text_section
3984            || (cold_text_section && unlikelysec == cold_text_section));
3985     }
3986   else
3987     {
3988       fde->in_std_section
3989         = (fnsec == text_section
3990            || (cold_text_section && fnsec == cold_text_section));
3991       fde->cold_in_std_section = 0;
3992     }
3993
3994   args_size = old_args_size = 0;
3995
3996   /* We only want to output line number information for the genuine dwarf2
3997      prologue case, not the eh frame case.  */
3998 #ifdef DWARF2_DEBUGGING_INFO
3999   if (file)
4000     dwarf2out_source_line (line, file, 0, true);
4001 #endif
4002
4003   if (dwarf2out_do_cfi_asm ())
4004     dwarf2out_do_cfi_startproc (false);
4005   else
4006     {
4007       rtx personality = get_personality_function (current_function_decl);
4008       if (!current_unit_personality)
4009         current_unit_personality = personality;
4010
4011       /* We cannot keep a current personality per function as without CFI
4012          asm, at the point where we emit the CFI data, there is no current
4013          function anymore.  */
4014       if (personality && current_unit_personality != personality)
4015         sorry ("multiple EH personalities are supported only with assemblers "
4016                "supporting .cfi_personality directive");
4017     }
4018 }
4019
4020 /* Output a marker (i.e. a label) for the absolute end of the generated code
4021    for a function definition.  This gets called *after* the epilogue code has
4022    been generated.  */
4023
4024 void
4025 dwarf2out_end_epilogue (unsigned int line ATTRIBUTE_UNUSED,
4026                         const char *file ATTRIBUTE_UNUSED)
4027 {
4028   dw_fde_ref fde;
4029   char label[MAX_ARTIFICIAL_LABEL_BYTES];
4030
4031 #ifdef DWARF2_DEBUGGING_INFO
4032   last_var_location_insn = NULL_RTX;
4033 #endif
4034
4035   if (dwarf2out_do_cfi_asm ())
4036     fprintf (asm_out_file, "\t.cfi_endproc\n");
4037
4038   /* Output a label to mark the endpoint of the code generated for this
4039      function.  */
4040   ASM_GENERATE_INTERNAL_LABEL (label, FUNC_END_LABEL,
4041                                current_function_funcdef_no);
4042   ASM_OUTPUT_LABEL (asm_out_file, label);
4043   fde = current_fde ();
4044   gcc_assert (fde != NULL);
4045   fde->dw_fde_end = xstrdup (label);
4046 }
4047
4048 void
4049 dwarf2out_frame_init (void)
4050 {
4051   /* Allocate the initial hunk of the fde_table.  */
4052   fde_table = GGC_CNEWVEC (dw_fde_node, FDE_TABLE_INCREMENT);
4053   fde_table_allocated = FDE_TABLE_INCREMENT;
4054   fde_table_in_use = 0;
4055
4056   /* Generate the CFA instructions common to all FDE's.  Do it now for the
4057      sake of lookup_cfa.  */
4058
4059   /* On entry, the Canonical Frame Address is at SP.  */
4060   dwarf2out_def_cfa (NULL, STACK_POINTER_REGNUM, INCOMING_FRAME_SP_OFFSET);
4061
4062 #ifdef DWARF2_UNWIND_INFO
4063   if (DWARF2_UNWIND_INFO || DWARF2_FRAME_INFO)
4064     initial_return_save (INCOMING_RETURN_ADDR_RTX);
4065 #endif
4066 }
4067
4068 void
4069 dwarf2out_frame_finish (void)
4070 {
4071   /* Output call frame information.  */
4072   if (DWARF2_FRAME_INFO)
4073     output_call_frame_info (0);
4074
4075 #ifndef TARGET_UNWIND_INFO
4076   /* Output another copy for the unwinder.  */
4077   if (! USING_SJLJ_EXCEPTIONS && (flag_unwind_tables || flag_exceptions))
4078     output_call_frame_info (1);
4079 #endif
4080 }
4081
4082 /* Note that the current function section is being used for code.  */
4083
4084 static void
4085 dwarf2out_note_section_used (void)
4086 {
4087   section *sec = current_function_section ();
4088   if (sec == text_section)
4089     text_section_used = true;
4090   else if (sec == cold_text_section)
4091     cold_text_section_used = true;
4092 }
4093
4094 void
4095 dwarf2out_switch_text_section (void)
4096 {
4097   dw_fde_ref fde = current_fde ();
4098
4099   gcc_assert (cfun && fde && !fde->dw_fde_switched_sections);
4100
4101   fde->dw_fde_switched_sections = 1;
4102   fde->dw_fde_switched_cold_to_hot = !in_cold_section_p;
4103
4104   fde->dw_fde_hot_section_label = crtl->subsections.hot_section_label;
4105   fde->dw_fde_hot_section_end_label = crtl->subsections.hot_section_end_label;
4106   fde->dw_fde_unlikely_section_label = crtl->subsections.cold_section_label;
4107   fde->dw_fde_unlikely_section_end_label = crtl->subsections.cold_section_end_label;
4108   have_multiple_function_sections = true;
4109
4110   /* Reset the current label on switching text sections, so that we
4111      don't attempt to advance_loc4 between labels in different sections.  */
4112   fde->dw_fde_current_label = NULL;
4113
4114   /* There is no need to mark used sections when not debugging.  */
4115   if (cold_text_section != NULL)
4116     dwarf2out_note_section_used ();
4117
4118   if (dwarf2out_do_cfi_asm ())
4119     fprintf (asm_out_file, "\t.cfi_endproc\n");
4120
4121   /* Now do the real section switch.  */
4122   switch_to_section (current_function_section ());
4123
4124   if (dwarf2out_do_cfi_asm ())
4125     {
4126       dwarf2out_do_cfi_startproc (true);
4127       /* As this is a different FDE, insert all current CFI instructions
4128          again.  */
4129       output_cfis (fde->dw_fde_cfi, true, fde, true);
4130     }
4131   else
4132     {
4133       dw_cfi_ref cfi = fde->dw_fde_cfi;
4134
4135       cfi = fde->dw_fde_cfi;
4136       if (cfi)
4137         while (cfi->dw_cfi_next != NULL)
4138           cfi = cfi->dw_cfi_next;
4139       fde->dw_fde_switch_cfi = cfi;
4140     }
4141 }
4142 #endif
4143 \f
4144 /* And now, the subset of the debugging information support code necessary
4145    for emitting location expressions.  */
4146
4147 /* Data about a single source file.  */
4148 struct GTY(()) dwarf_file_data {
4149   const char * filename;
4150   int emitted_number;
4151 };
4152
4153 typedef struct dw_val_struct *dw_val_ref;
4154 typedef struct die_struct *dw_die_ref;
4155 typedef const struct die_struct *const_dw_die_ref;
4156 typedef struct dw_loc_descr_struct *dw_loc_descr_ref;
4157 typedef struct dw_loc_list_struct *dw_loc_list_ref;
4158
4159 typedef struct GTY(()) deferred_locations_struct
4160 {
4161   tree variable;
4162   dw_die_ref die;
4163 } deferred_locations;
4164
4165 DEF_VEC_O(deferred_locations);
4166 DEF_VEC_ALLOC_O(deferred_locations,gc);
4167
4168 static GTY(()) VEC(deferred_locations, gc) *deferred_locations_list;
4169
4170 DEF_VEC_P(dw_die_ref);
4171 DEF_VEC_ALLOC_P(dw_die_ref,heap);
4172
4173 /* Each DIE may have a series of attribute/value pairs.  Values
4174    can take on several forms.  The forms that are used in this
4175    implementation are listed below.  */
4176
4177 enum dw_val_class
4178 {
4179   dw_val_class_addr,
4180   dw_val_class_offset,
4181   dw_val_class_loc,
4182   dw_val_class_loc_list,
4183   dw_val_class_range_list,
4184   dw_val_class_const,
4185   dw_val_class_unsigned_const,
4186   dw_val_class_const_double,
4187   dw_val_class_vec,
4188   dw_val_class_flag,
4189   dw_val_class_die_ref,
4190   dw_val_class_fde_ref,
4191   dw_val_class_lbl_id,
4192   dw_val_class_lineptr,
4193   dw_val_class_str,
4194   dw_val_class_macptr,
4195   dw_val_class_file,
4196   dw_val_class_data8
4197 };
4198
4199 /* Describe a floating point constant value, or a vector constant value.  */
4200
4201 typedef struct GTY(()) dw_vec_struct {
4202   unsigned char * GTY((length ("%h.length"))) array;
4203   unsigned length;
4204   unsigned elt_size;
4205 }
4206 dw_vec_const;
4207
4208 /* The dw_val_node describes an attribute's value, as it is
4209    represented internally.  */
4210
4211 typedef struct GTY(()) dw_val_struct {
4212   enum dw_val_class val_class;
4213   union dw_val_struct_union
4214     {
4215       rtx GTY ((tag ("dw_val_class_addr"))) val_addr;
4216       unsigned HOST_WIDE_INT GTY ((tag ("dw_val_class_offset"))) val_offset;
4217       dw_loc_list_ref GTY ((tag ("dw_val_class_loc_list"))) val_loc_list;
4218       dw_loc_descr_ref GTY ((tag ("dw_val_class_loc"))) val_loc;
4219       HOST_WIDE_INT GTY ((default)) val_int;
4220       unsigned HOST_WIDE_INT GTY ((tag ("dw_val_class_unsigned_const"))) val_unsigned;
4221       double_int GTY ((tag ("dw_val_class_const_double"))) val_double;
4222       dw_vec_const GTY ((tag ("dw_val_class_vec"))) val_vec;
4223       struct dw_val_die_union
4224         {
4225           dw_die_ref die;
4226           int external;
4227         } GTY ((tag ("dw_val_class_die_ref"))) val_die_ref;
4228       unsigned GTY ((tag ("dw_val_class_fde_ref"))) val_fde_index;
4229       struct indirect_string_node * GTY ((tag ("dw_val_class_str"))) val_str;
4230       char * GTY ((tag ("dw_val_class_lbl_id"))) val_lbl_id;
4231       unsigned char GTY ((tag ("dw_val_class_flag"))) val_flag;
4232       struct dwarf_file_data * GTY ((tag ("dw_val_class_file"))) val_file;
4233       unsigned char GTY ((tag ("dw_val_class_data8"))) val_data8[8];
4234     }
4235   GTY ((desc ("%1.val_class"))) v;
4236 }
4237 dw_val_node;
4238
4239 /* Locations in memory are described using a sequence of stack machine
4240    operations.  */
4241
4242 typedef struct GTY(()) dw_loc_descr_struct {
4243   dw_loc_descr_ref dw_loc_next;
4244   ENUM_BITFIELD (dwarf_location_atom) dw_loc_opc : 8;
4245   /* Used to distinguish DW_OP_addr with a direct symbol relocation
4246      from DW_OP_addr with a dtp-relative symbol relocation.  */
4247   unsigned int dtprel : 1;
4248   int dw_loc_addr;
4249   dw_val_node dw_loc_oprnd1;
4250   dw_val_node dw_loc_oprnd2;
4251 }
4252 dw_loc_descr_node;
4253
4254 /* Location lists are ranges + location descriptions for that range,
4255    so you can track variables that are in different places over
4256    their entire life.  */
4257 typedef struct GTY(()) dw_loc_list_struct {
4258   dw_loc_list_ref dw_loc_next;
4259   const char *begin; /* Label for begin address of range */
4260   const char *end;  /* Label for end address of range */
4261   char *ll_symbol; /* Label for beginning of location list.
4262                       Only on head of list */
4263   const char *section; /* Section this loclist is relative to */
4264   dw_loc_descr_ref expr;
4265 } dw_loc_list_node;
4266
4267 #if defined (DWARF2_DEBUGGING_INFO) || defined (DWARF2_UNWIND_INFO)
4268
4269 static dw_loc_descr_ref int_loc_descriptor (HOST_WIDE_INT);
4270
4271 /* Convert a DWARF stack opcode into its string name.  */
4272
4273 static const char *
4274 dwarf_stack_op_name (unsigned int op)
4275 {
4276   switch (op)
4277     {
4278     case DW_OP_addr:
4279       return "DW_OP_addr";
4280     case DW_OP_deref:
4281       return "DW_OP_deref";
4282     case DW_OP_const1u:
4283       return "DW_OP_const1u";
4284     case DW_OP_const1s:
4285       return "DW_OP_const1s";
4286     case DW_OP_const2u:
4287       return "DW_OP_const2u";
4288     case DW_OP_const2s:
4289       return "DW_OP_const2s";
4290     case DW_OP_const4u:
4291       return "DW_OP_const4u";
4292     case DW_OP_const4s:
4293       return "DW_OP_const4s";
4294     case DW_OP_const8u:
4295       return "DW_OP_const8u";
4296     case DW_OP_const8s:
4297       return "DW_OP_const8s";
4298     case DW_OP_constu:
4299       return "DW_OP_constu";
4300     case DW_OP_consts:
4301       return "DW_OP_consts";
4302     case DW_OP_dup:
4303       return "DW_OP_dup";
4304     case DW_OP_drop:
4305       return "DW_OP_drop";
4306     case DW_OP_over:
4307       return "DW_OP_over";
4308     case DW_OP_pick:
4309       return "DW_OP_pick";
4310     case DW_OP_swap:
4311       return "DW_OP_swap";
4312     case DW_OP_rot:
4313       return "DW_OP_rot";
4314     case DW_OP_xderef:
4315       return "DW_OP_xderef";
4316     case DW_OP_abs:
4317       return "DW_OP_abs";
4318     case DW_OP_and:
4319       return "DW_OP_and";
4320     case DW_OP_div:
4321       return "DW_OP_div";
4322     case DW_OP_minus:
4323       return "DW_OP_minus";
4324     case DW_OP_mod:
4325       return "DW_OP_mod";
4326     case DW_OP_mul:
4327       return "DW_OP_mul";
4328     case DW_OP_neg:
4329       return "DW_OP_neg";
4330     case DW_OP_not:
4331       return "DW_OP_not";
4332     case DW_OP_or:
4333       return "DW_OP_or";
4334     case DW_OP_plus:
4335       return "DW_OP_plus";
4336     case DW_OP_plus_uconst:
4337       return "DW_OP_plus_uconst";
4338     case DW_OP_shl:
4339       return "DW_OP_shl";
4340     case DW_OP_shr:
4341       return "DW_OP_shr";
4342     case DW_OP_shra:
4343       return "DW_OP_shra";
4344     case DW_OP_xor:
4345       return "DW_OP_xor";
4346     case DW_OP_bra:
4347       return "DW_OP_bra";
4348     case DW_OP_eq:
4349       return "DW_OP_eq";
4350     case DW_OP_ge:
4351       return "DW_OP_ge";
4352     case DW_OP_gt:
4353       return "DW_OP_gt";
4354     case DW_OP_le:
4355       return "DW_OP_le";
4356     case DW_OP_lt:
4357       return "DW_OP_lt";
4358     case DW_OP_ne:
4359       return "DW_OP_ne";
4360     case DW_OP_skip:
4361       return "DW_OP_skip";
4362     case DW_OP_lit0:
4363       return "DW_OP_lit0";
4364     case DW_OP_lit1:
4365       return "DW_OP_lit1";
4366     case DW_OP_lit2:
4367       return "DW_OP_lit2";
4368     case DW_OP_lit3:
4369       return "DW_OP_lit3";
4370     case DW_OP_lit4:
4371       return "DW_OP_lit4";
4372     case DW_OP_lit5:
4373       return "DW_OP_lit5";
4374     case DW_OP_lit6:
4375       return "DW_OP_lit6";
4376     case DW_OP_lit7:
4377       return "DW_OP_lit7";
4378     case DW_OP_lit8:
4379       return "DW_OP_lit8";
4380     case DW_OP_lit9:
4381       return "DW_OP_lit9";
4382     case DW_OP_lit10:
4383       return "DW_OP_lit10";
4384     case DW_OP_lit11:
4385       return "DW_OP_lit11";
4386     case DW_OP_lit12:
4387       return "DW_OP_lit12";
4388     case DW_OP_lit13:
4389       return "DW_OP_lit13";
4390     case DW_OP_lit14:
4391       return "DW_OP_lit14";
4392     case DW_OP_lit15:
4393       return "DW_OP_lit15";
4394     case DW_OP_lit16:
4395       return "DW_OP_lit16";
4396     case DW_OP_lit17:
4397       return "DW_OP_lit17";
4398     case DW_OP_lit18:
4399       return "DW_OP_lit18";
4400     case DW_OP_lit19:
4401       return "DW_OP_lit19";
4402     case DW_OP_lit20:
4403       return "DW_OP_lit20";
4404     case DW_OP_lit21:
4405       return "DW_OP_lit21";
4406     case DW_OP_lit22:
4407       return "DW_OP_lit22";
4408     case DW_OP_lit23:
4409       return "DW_OP_lit23";
4410     case DW_OP_lit24:
4411       return "DW_OP_lit24";
4412     case DW_OP_lit25:
4413       return "DW_OP_lit25";
4414     case DW_OP_lit26:
4415       return "DW_OP_lit26";
4416     case DW_OP_lit27:
4417       return "DW_OP_lit27";
4418     case DW_OP_lit28:
4419       return "DW_OP_lit28";
4420     case DW_OP_lit29:
4421       return "DW_OP_lit29";
4422     case DW_OP_lit30:
4423       return "DW_OP_lit30";
4424     case DW_OP_lit31:
4425       return "DW_OP_lit31";
4426     case DW_OP_reg0:
4427       return "DW_OP_reg0";
4428     case DW_OP_reg1:
4429       return "DW_OP_reg1";
4430     case DW_OP_reg2:
4431       return "DW_OP_reg2";
4432     case DW_OP_reg3:
4433       return "DW_OP_reg3";
4434     case DW_OP_reg4:
4435       return "DW_OP_reg4";
4436     case DW_OP_reg5:
4437       return "DW_OP_reg5";
4438     case DW_OP_reg6:
4439       return "DW_OP_reg6";
4440     case DW_OP_reg7:
4441       return "DW_OP_reg7";
4442     case DW_OP_reg8:
4443       return "DW_OP_reg8";
4444     case DW_OP_reg9:
4445       return "DW_OP_reg9";
4446     case DW_OP_reg10:
4447       return "DW_OP_reg10";
4448     case DW_OP_reg11:
4449       return "DW_OP_reg11";
4450     case DW_OP_reg12:
4451       return "DW_OP_reg12";
4452     case DW_OP_reg13:
4453       return "DW_OP_reg13";
4454     case DW_OP_reg14:
4455       return "DW_OP_reg14";
4456     case DW_OP_reg15:
4457       return "DW_OP_reg15";
4458     case DW_OP_reg16:
4459       return "DW_OP_reg16";
4460     case DW_OP_reg17:
4461       return "DW_OP_reg17";
4462     case DW_OP_reg18:
4463       return "DW_OP_reg18";
4464     case DW_OP_reg19:
4465       return "DW_OP_reg19";
4466     case DW_OP_reg20:
4467       return "DW_OP_reg20";
4468     case DW_OP_reg21:
4469       return "DW_OP_reg21";
4470     case DW_OP_reg22:
4471       return "DW_OP_reg22";
4472     case DW_OP_reg23:
4473       return "DW_OP_reg23";
4474     case DW_OP_reg24:
4475       return "DW_OP_reg24";
4476     case DW_OP_reg25:
4477       return "DW_OP_reg25";
4478     case DW_OP_reg26:
4479       return "DW_OP_reg26";
4480     case DW_OP_reg27:
4481       return "DW_OP_reg27";
4482     case DW_OP_reg28:
4483       return "DW_OP_reg28";
4484     case DW_OP_reg29:
4485       return "DW_OP_reg29";
4486     case DW_OP_reg30:
4487       return "DW_OP_reg30";
4488     case DW_OP_reg31:
4489       return "DW_OP_reg31";
4490     case DW_OP_breg0:
4491       return "DW_OP_breg0";
4492     case DW_OP_breg1:
4493       return "DW_OP_breg1";
4494     case DW_OP_breg2:
4495       return "DW_OP_breg2";
4496     case DW_OP_breg3:
4497       return "DW_OP_breg3";
4498     case DW_OP_breg4:
4499       return "DW_OP_breg4";
4500     case DW_OP_breg5:
4501       return "DW_OP_breg5";
4502     case DW_OP_breg6:
4503       return "DW_OP_breg6";
4504     case DW_OP_breg7:
4505       return "DW_OP_breg7";
4506     case DW_OP_breg8:
4507       return "DW_OP_breg8";
4508     case DW_OP_breg9:
4509       return "DW_OP_breg9";
4510     case DW_OP_breg10:
4511       return "DW_OP_breg10";
4512     case DW_OP_breg11:
4513       return "DW_OP_breg11";
4514     case DW_OP_breg12:
4515       return "DW_OP_breg12";
4516     case DW_OP_breg13:
4517       return "DW_OP_breg13";
4518     case DW_OP_breg14:
4519       return "DW_OP_breg14";
4520     case DW_OP_breg15:
4521       return "DW_OP_breg15";
4522     case DW_OP_breg16:
4523       return "DW_OP_breg16";
4524     case DW_OP_breg17:
4525       return "DW_OP_breg17";
4526     case DW_OP_breg18:
4527       return "DW_OP_breg18";
4528     case DW_OP_breg19:
4529       return "DW_OP_breg19";
4530     case DW_OP_breg20:
4531       return "DW_OP_breg20";
4532     case DW_OP_breg21:
4533       return "DW_OP_breg21";
4534     case DW_OP_breg22:
4535       return "DW_OP_breg22";
4536     case DW_OP_breg23:
4537       return "DW_OP_breg23";
4538     case DW_OP_breg24:
4539       return "DW_OP_breg24";
4540     case DW_OP_breg25:
4541       return "DW_OP_breg25";
4542     case DW_OP_breg26:
4543       return "DW_OP_breg26";
4544     case DW_OP_breg27:
4545       return "DW_OP_breg27";
4546     case DW_OP_breg28:
4547       return "DW_OP_breg28";
4548     case DW_OP_breg29:
4549       return "DW_OP_breg29";
4550     case DW_OP_breg30:
4551       return "DW_OP_breg30";
4552     case DW_OP_breg31:
4553       return "DW_OP_breg31";
4554     case DW_OP_regx:
4555       return "DW_OP_regx";
4556     case DW_OP_fbreg:
4557       return "DW_OP_fbreg";
4558     case DW_OP_bregx:
4559       return "DW_OP_bregx";
4560     case DW_OP_piece:
4561       return "DW_OP_piece";
4562     case DW_OP_deref_size:
4563       return "DW_OP_deref_size";
4564     case DW_OP_xderef_size:
4565       return "DW_OP_xderef_size";
4566     case DW_OP_nop:
4567       return "DW_OP_nop";
4568
4569     case DW_OP_push_object_address:
4570       return "DW_OP_push_object_address";
4571     case DW_OP_call2:
4572       return "DW_OP_call2";
4573     case DW_OP_call4:
4574       return "DW_OP_call4";
4575     case DW_OP_call_ref:
4576       return "DW_OP_call_ref";
4577     case DW_OP_implicit_value:
4578       return "DW_OP_implicit_value";
4579     case DW_OP_stack_value:
4580       return "DW_OP_stack_value";
4581     case DW_OP_form_tls_address:
4582       return "DW_OP_form_tls_address";
4583     case DW_OP_call_frame_cfa:
4584       return "DW_OP_call_frame_cfa";
4585     case DW_OP_bit_piece:
4586       return "DW_OP_bit_piece";
4587
4588     case DW_OP_GNU_push_tls_address:
4589       return "DW_OP_GNU_push_tls_address";
4590     case DW_OP_GNU_uninit:
4591       return "DW_OP_GNU_uninit";
4592     case DW_OP_GNU_encoded_addr:
4593       return "DW_OP_GNU_encoded_addr";
4594
4595     default:
4596       return "OP_<unknown>";
4597     }
4598 }
4599
4600 /* Return a pointer to a newly allocated location description.  Location
4601    descriptions are simple expression terms that can be strung
4602    together to form more complicated location (address) descriptions.  */
4603
4604 static inline dw_loc_descr_ref
4605 new_loc_descr (enum dwarf_location_atom op, unsigned HOST_WIDE_INT oprnd1,
4606                unsigned HOST_WIDE_INT oprnd2)
4607 {
4608   dw_loc_descr_ref descr = GGC_CNEW (dw_loc_descr_node);
4609
4610   descr->dw_loc_opc = op;
4611   descr->dw_loc_oprnd1.val_class = dw_val_class_unsigned_const;
4612   descr->dw_loc_oprnd1.v.val_unsigned = oprnd1;
4613   descr->dw_loc_oprnd2.val_class = dw_val_class_unsigned_const;
4614   descr->dw_loc_oprnd2.v.val_unsigned = oprnd2;
4615
4616   return descr;
4617 }
4618
4619 /* Return a pointer to a newly allocated location description for
4620    REG and OFFSET.  */
4621
4622 static inline dw_loc_descr_ref
4623 new_reg_loc_descr (unsigned int reg,  unsigned HOST_WIDE_INT offset)
4624 {
4625   if (reg <= 31)
4626     return new_loc_descr ((enum dwarf_location_atom) (DW_OP_breg0 + reg),
4627                           offset, 0);
4628   else
4629     return new_loc_descr (DW_OP_bregx, reg, offset);
4630 }
4631
4632 /* Add a location description term to a location description expression.  */
4633
4634 static inline void
4635 add_loc_descr (dw_loc_descr_ref *list_head, dw_loc_descr_ref descr)
4636 {
4637   dw_loc_descr_ref *d;
4638
4639   /* Find the end of the chain.  */
4640   for (d = list_head; (*d) != NULL; d = &(*d)->dw_loc_next)
4641     ;
4642
4643   *d = descr;
4644 }
4645
4646 /* Add a constant OFFSET to a location expression.  */
4647
4648 static void
4649 loc_descr_plus_const (dw_loc_descr_ref *list_head, HOST_WIDE_INT offset)
4650 {
4651   dw_loc_descr_ref loc;
4652   HOST_WIDE_INT *p;
4653
4654   gcc_assert (*list_head != NULL);
4655
4656   if (!offset)
4657     return;
4658
4659   /* Find the end of the chain.  */
4660   for (loc = *list_head; loc->dw_loc_next != NULL; loc = loc->dw_loc_next)
4661     ;
4662
4663   p = NULL;
4664   if (loc->dw_loc_opc == DW_OP_fbreg
4665       || (loc->dw_loc_opc >= DW_OP_breg0 && loc->dw_loc_opc <= DW_OP_breg31))
4666     p = &loc->dw_loc_oprnd1.v.val_int;
4667   else if (loc->dw_loc_opc == DW_OP_bregx)
4668     p = &loc->dw_loc_oprnd2.v.val_int;
4669
4670   /* If the last operation is fbreg, breg{0..31,x}, optimize by adjusting its
4671      offset.  Don't optimize if an signed integer overflow would happen.  */
4672   if (p != NULL
4673       && ((offset > 0 && *p <= INTTYPE_MAXIMUM (HOST_WIDE_INT) - offset)
4674           || (offset < 0 && *p >= INTTYPE_MINIMUM (HOST_WIDE_INT) - offset)))
4675     *p += offset;
4676
4677   else if (offset > 0)
4678     loc->dw_loc_next = new_loc_descr (DW_OP_plus_uconst, offset, 0);
4679
4680   else
4681     {
4682       loc->dw_loc_next = int_loc_descriptor (-offset);
4683       add_loc_descr (&loc->dw_loc_next, new_loc_descr (DW_OP_minus, 0, 0));
4684     }
4685 }
4686
4687 #ifdef DWARF2_DEBUGGING_INFO
4688 /* Add a constant OFFSET to a location list.  */
4689
4690 static void
4691 loc_list_plus_const (dw_loc_list_ref list_head, HOST_WIDE_INT offset)
4692 {
4693   dw_loc_list_ref d;
4694   for (d = list_head; d != NULL; d = d->dw_loc_next)
4695     loc_descr_plus_const (&d->expr, offset);
4696 }
4697 #endif
4698
4699 /* Return the size of a location descriptor.  */
4700
4701 static unsigned long
4702 size_of_loc_descr (dw_loc_descr_ref loc)
4703 {
4704   unsigned long size = 1;
4705
4706   switch (loc->dw_loc_opc)
4707     {
4708     case DW_OP_addr:
4709       size += DWARF2_ADDR_SIZE;
4710       break;
4711     case DW_OP_const1u:
4712     case DW_OP_const1s:
4713       size += 1;
4714       break;
4715     case DW_OP_const2u:
4716     case DW_OP_const2s:
4717       size += 2;
4718       break;
4719     case DW_OP_const4u:
4720     case DW_OP_const4s:
4721       size += 4;
4722       break;
4723     case DW_OP_const8u:
4724     case DW_OP_const8s:
4725       size += 8;
4726       break;
4727     case DW_OP_constu:
4728       size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
4729       break;
4730     case DW_OP_consts:
4731       size += size_of_sleb128 (loc->dw_loc_oprnd1.v.val_int);
4732       break;
4733     case DW_OP_pick:
4734       size += 1;
4735       break;
4736     case DW_OP_plus_uconst:
4737       size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
4738       break;
4739     case DW_OP_skip:
4740     case DW_OP_bra:
4741       size += 2;
4742       break;
4743     case DW_OP_breg0:
4744     case DW_OP_breg1:
4745     case DW_OP_breg2:
4746     case DW_OP_breg3:
4747     case DW_OP_breg4:
4748     case DW_OP_breg5:
4749     case DW_OP_breg6:
4750     case DW_OP_breg7:
4751     case DW_OP_breg8:
4752     case DW_OP_breg9:
4753     case DW_OP_breg10:
4754     case DW_OP_breg11:
4755     case DW_OP_breg12:
4756     case DW_OP_breg13:
4757     case DW_OP_breg14:
4758     case DW_OP_breg15:
4759     case DW_OP_breg16:
4760     case DW_OP_breg17:
4761     case DW_OP_breg18:
4762     case DW_OP_breg19:
4763     case DW_OP_breg20:
4764     case DW_OP_breg21:
4765     case DW_OP_breg22:
4766     case DW_OP_breg23:
4767     case DW_OP_breg24:
4768     case DW_OP_breg25:
4769     case DW_OP_breg26:
4770     case DW_OP_breg27:
4771     case DW_OP_breg28:
4772     case DW_OP_breg29:
4773     case DW_OP_breg30:
4774     case DW_OP_breg31:
4775       size += size_of_sleb128 (loc->dw_loc_oprnd1.v.val_int);
4776       break;
4777     case DW_OP_regx:
4778       size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
4779       break;
4780     case DW_OP_fbreg:
4781       size += size_of_sleb128 (loc->dw_loc_oprnd1.v.val_int);
4782       break;
4783     case DW_OP_bregx:
4784       size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
4785       size += size_of_sleb128 (loc->dw_loc_oprnd2.v.val_int);
4786       break;
4787     case DW_OP_piece:
4788       size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
4789       break;
4790     case DW_OP_bit_piece:
4791       size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
4792       size += size_of_uleb128 (loc->dw_loc_oprnd2.v.val_unsigned);
4793       break;
4794     case DW_OP_deref_size:
4795     case DW_OP_xderef_size:
4796       size += 1;
4797       break;
4798     case DW_OP_call2:
4799       size += 2;
4800       break;
4801     case DW_OP_call4:
4802       size += 4;
4803       break;
4804     case DW_OP_call_ref:
4805       size += DWARF2_ADDR_SIZE;
4806       break;
4807     case DW_OP_implicit_value:
4808       size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned)
4809               + loc->dw_loc_oprnd1.v.val_unsigned;
4810       break;
4811     default:
4812       break;
4813     }
4814
4815   return size;
4816 }
4817
4818 /* Return the size of a series of location descriptors.  */
4819
4820 static unsigned long
4821 size_of_locs (dw_loc_descr_ref loc)
4822 {
4823   dw_loc_descr_ref l;
4824   unsigned long size;
4825
4826   /* If there are no skip or bra opcodes, don't fill in the dw_loc_addr
4827      field, to avoid writing to a PCH file.  */
4828   for (size = 0, l = loc; l != NULL; l = l->dw_loc_next)
4829     {
4830       if (l->dw_loc_opc == DW_OP_skip || l->dw_loc_opc == DW_OP_bra)
4831         break;
4832       size += size_of_loc_descr (l);
4833     }
4834   if (! l)
4835     return size;
4836
4837   for (size = 0, l = loc; l != NULL; l = l->dw_loc_next)
4838     {
4839       l->dw_loc_addr = size;
4840       size += size_of_loc_descr (l);
4841     }
4842
4843   return size;
4844 }
4845
4846 #ifdef DWARF2_DEBUGGING_INFO
4847 static HOST_WIDE_INT extract_int (const unsigned char *, unsigned);
4848 #endif
4849
4850 /* Output location description stack opcode's operands (if any).  */
4851
4852 static void
4853 output_loc_operands (dw_loc_descr_ref loc)
4854 {
4855   dw_val_ref val1 = &loc->dw_loc_oprnd1;
4856   dw_val_ref val2 = &loc->dw_loc_oprnd2;
4857
4858   switch (loc->dw_loc_opc)
4859     {
4860 #ifdef DWARF2_DEBUGGING_INFO
4861     case DW_OP_const2u:
4862     case DW_OP_const2s:
4863       dw2_asm_output_data (2, val1->v.val_int, NULL);
4864       break;
4865     case DW_OP_const4u:
4866     case DW_OP_const4s:
4867       dw2_asm_output_data (4, val1->v.val_int, NULL);
4868       break;
4869     case DW_OP_const8u:
4870     case DW_OP_const8s:
4871       gcc_assert (HOST_BITS_PER_WIDE_INT >= 64);
4872       dw2_asm_output_data (8, val1->v.val_int, NULL);
4873       break;
4874     case DW_OP_skip:
4875     case DW_OP_bra:
4876       {
4877         int offset;
4878
4879         gcc_assert (val1->val_class == dw_val_class_loc);
4880         offset = val1->v.val_loc->dw_loc_addr - (loc->dw_loc_addr + 3);
4881
4882         dw2_asm_output_data (2, offset, NULL);
4883       }
4884       break;
4885     case DW_OP_implicit_value:
4886       dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
4887       switch (val2->val_class)
4888         {
4889         case dw_val_class_const:
4890           dw2_asm_output_data (val1->v.val_unsigned, val2->v.val_int, NULL);
4891           break;
4892         case dw_val_class_vec:
4893           {
4894             unsigned int elt_size = val2->v.val_vec.elt_size;
4895             unsigned int len = val2->v.val_vec.length;
4896             unsigned int i;
4897             unsigned char *p;
4898
4899             if (elt_size > sizeof (HOST_WIDE_INT))
4900               {
4901                 elt_size /= 2;
4902                 len *= 2;
4903               }
4904             for (i = 0, p = val2->v.val_vec.array;
4905                  i < len;
4906                  i++, p += elt_size)
4907               dw2_asm_output_data (elt_size, extract_int (p, elt_size),
4908                                    "fp or vector constant word %u", i);
4909           }
4910           break;
4911         case dw_val_class_const_double:
4912           {
4913             unsigned HOST_WIDE_INT first, second;
4914
4915             if (WORDS_BIG_ENDIAN)
4916               {
4917                 first = val2->v.val_double.high;
4918                 second = val2->v.val_double.low;
4919               }
4920             else
4921               {
4922                 first = val2->v.val_double.low;
4923                 second = val2->v.val_double.high;
4924               }
4925             dw2_asm_output_data (HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR,
4926                                  first, NULL);
4927             dw2_asm_output_data (HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR,
4928                                  second, NULL);
4929           }
4930           break;
4931         case dw_val_class_addr:
4932           gcc_assert (val1->v.val_unsigned == DWARF2_ADDR_SIZE);
4933           dw2_asm_output_addr_rtx (DWARF2_ADDR_SIZE, val2->v.val_addr, NULL);
4934           break;
4935         default:
4936           gcc_unreachable ();
4937         }
4938       break;
4939 #else
4940     case DW_OP_const2u:
4941     case DW_OP_const2s:
4942     case DW_OP_const4u:
4943     case DW_OP_const4s:
4944     case DW_OP_const8u:
4945     case DW_OP_const8s:
4946     case DW_OP_skip:
4947     case DW_OP_bra:
4948     case DW_OP_implicit_value:
4949       /* We currently don't make any attempt to make sure these are
4950          aligned properly like we do for the main unwind info, so
4951          don't support emitting things larger than a byte if we're
4952          only doing unwinding.  */
4953       gcc_unreachable ();
4954 #endif
4955     case DW_OP_const1u:
4956     case DW_OP_const1s:
4957       dw2_asm_output_data (1, val1->v.val_int, NULL);
4958       break;
4959     case DW_OP_constu:
4960       dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
4961       break;
4962     case DW_OP_consts:
4963       dw2_asm_output_data_sleb128 (val1->v.val_int, NULL);
4964       break;
4965     case DW_OP_pick:
4966       dw2_asm_output_data (1, val1->v.val_int, NULL);
4967       break;
4968     case DW_OP_plus_uconst:
4969       dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
4970       break;
4971     case DW_OP_breg0:
4972     case DW_OP_breg1:
4973     case DW_OP_breg2:
4974     case DW_OP_breg3:
4975     case DW_OP_breg4:
4976     case DW_OP_breg5:
4977     case DW_OP_breg6:
4978     case DW_OP_breg7:
4979     case DW_OP_breg8:
4980     case DW_OP_breg9:
4981     case DW_OP_breg10:
4982     case DW_OP_breg11:
4983     case DW_OP_breg12:
4984     case DW_OP_breg13:
4985     case DW_OP_breg14:
4986     case DW_OP_breg15:
4987     case DW_OP_breg16:
4988     case DW_OP_breg17:
4989     case DW_OP_breg18:
4990     case DW_OP_breg19:
4991     case DW_OP_breg20:
4992     case DW_OP_breg21:
4993     case DW_OP_breg22:
4994     case DW_OP_breg23:
4995     case DW_OP_breg24:
4996     case DW_OP_breg25:
4997     case DW_OP_breg26:
4998     case DW_OP_breg27:
4999     case DW_OP_breg28:
5000     case DW_OP_breg29:
5001     case DW_OP_breg30:
5002     case DW_OP_breg31:
5003       dw2_asm_output_data_sleb128 (val1->v.val_int, NULL);
5004       break;
5005     case DW_OP_regx:
5006       dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
5007       break;
5008     case DW_OP_fbreg:
5009       dw2_asm_output_data_sleb128 (val1->v.val_int, NULL);
5010       break;
5011     case DW_OP_bregx:
5012       dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
5013       dw2_asm_output_data_sleb128 (val2->v.val_int, NULL);
5014       break;
5015     case DW_OP_piece:
5016       dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
5017       break;
5018     case DW_OP_bit_piece:
5019       dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
5020       dw2_asm_output_data_uleb128 (val2->v.val_unsigned, NULL);
5021       break;
5022     case DW_OP_deref_size:
5023     case DW_OP_xderef_size:
5024       dw2_asm_output_data (1, val1->v.val_int, NULL);
5025       break;
5026
5027     case DW_OP_addr:
5028       if (loc->dtprel)
5029         {
5030           if (targetm.asm_out.output_dwarf_dtprel)
5031             {
5032               targetm.asm_out.output_dwarf_dtprel (asm_out_file,
5033                                                    DWARF2_ADDR_SIZE,
5034                                                    val1->v.val_addr);
5035               fputc ('\n', asm_out_file);
5036             }
5037           else
5038             gcc_unreachable ();
5039         }
5040       else
5041         {
5042 #ifdef DWARF2_DEBUGGING_INFO
5043           dw2_asm_output_addr_rtx (DWARF2_ADDR_SIZE, val1->v.val_addr, NULL);
5044 #else
5045           gcc_unreachable ();
5046 #endif
5047         }
5048       break;
5049
5050     default:
5051       /* Other codes have no operands.  */
5052       break;
5053     }
5054 }
5055
5056 /* Output a sequence of location operations.  */
5057
5058 static void
5059 output_loc_sequence (dw_loc_descr_ref loc)
5060 {
5061   for (; loc != NULL; loc = loc->dw_loc_next)
5062     {
5063       /* Output the opcode.  */
5064       dw2_asm_output_data (1, loc->dw_loc_opc,
5065                            "%s", dwarf_stack_op_name (loc->dw_loc_opc));
5066
5067       /* Output the operand(s) (if any).  */
5068       output_loc_operands (loc);
5069     }
5070 }
5071
5072 /* Output location description stack opcode's operands (if any).
5073    The output is single bytes on a line, suitable for .cfi_escape.  */
5074
5075 static void
5076 output_loc_operands_raw (dw_loc_descr_ref loc)
5077 {
5078   dw_val_ref val1 = &loc->dw_loc_oprnd1;
5079   dw_val_ref val2 = &loc->dw_loc_oprnd2;
5080
5081   switch (loc->dw_loc_opc)
5082     {
5083     case DW_OP_addr:
5084     case DW_OP_implicit_value:
5085       /* We cannot output addresses in .cfi_escape, only bytes.  */
5086       gcc_unreachable ();
5087
5088     case DW_OP_const1u:
5089     case DW_OP_const1s:
5090     case DW_OP_pick:
5091     case DW_OP_deref_size:
5092     case DW_OP_xderef_size:
5093       fputc (',', asm_out_file);
5094       dw2_asm_output_data_raw (1, val1->v.val_int);
5095       break;
5096
5097     case DW_OP_const2u:
5098     case DW_OP_const2s:
5099       fputc (',', asm_out_file);
5100       dw2_asm_output_data_raw (2, val1->v.val_int);
5101       break;
5102
5103     case DW_OP_const4u:
5104     case DW_OP_const4s:
5105       fputc (',', asm_out_file);
5106       dw2_asm_output_data_raw (4, val1->v.val_int);
5107       break;
5108
5109     case DW_OP_const8u:
5110     case DW_OP_const8s:
5111       gcc_assert (HOST_BITS_PER_WIDE_INT >= 64);
5112       fputc (',', asm_out_file);
5113       dw2_asm_output_data_raw (8, val1->v.val_int);
5114       break;
5115
5116     case DW_OP_skip:
5117     case DW_OP_bra:
5118       {
5119         int offset;
5120
5121         gcc_assert (val1->val_class == dw_val_class_loc);
5122         offset = val1->v.val_loc->dw_loc_addr - (loc->dw_loc_addr + 3);
5123
5124         fputc (',', asm_out_file);
5125         dw2_asm_output_data_raw (2, offset);
5126       }
5127       break;
5128
5129     case DW_OP_constu:
5130     case DW_OP_plus_uconst:
5131     case DW_OP_regx:
5132     case DW_OP_piece:
5133       fputc (',', asm_out_file);
5134       dw2_asm_output_data_uleb128_raw (val1->v.val_unsigned);
5135       break;
5136
5137     case DW_OP_bit_piece:
5138       fputc (',', asm_out_file);
5139       dw2_asm_output_data_uleb128_raw (val1->v.val_unsigned);
5140       dw2_asm_output_data_uleb128_raw (val2->v.val_unsigned);
5141       break;
5142
5143     case DW_OP_consts:
5144     case DW_OP_breg0:
5145     case DW_OP_breg1:
5146     case DW_OP_breg2:
5147     case DW_OP_breg3:
5148     case DW_OP_breg4:
5149     case DW_OP_breg5:
5150     case DW_OP_breg6:
5151     case DW_OP_breg7:
5152     case DW_OP_breg8:
5153     case DW_OP_breg9:
5154     case DW_OP_breg10:
5155     case DW_OP_breg11:
5156     case DW_OP_breg12:
5157     case DW_OP_breg13:
5158     case DW_OP_breg14:
5159     case DW_OP_breg15:
5160     case DW_OP_breg16:
5161     case DW_OP_breg17:
5162     case DW_OP_breg18:
5163     case DW_OP_breg19:
5164     case DW_OP_breg20:
5165     case DW_OP_breg21:
5166     case DW_OP_breg22:
5167     case DW_OP_breg23:
5168     case DW_OP_breg24:
5169     case DW_OP_breg25:
5170     case DW_OP_breg26:
5171     case DW_OP_breg27:
5172     case DW_OP_breg28:
5173     case DW_OP_breg29:
5174     case DW_OP_breg30:
5175     case DW_OP_breg31:
5176     case DW_OP_fbreg:
5177       fputc (',', asm_out_file);
5178       dw2_asm_output_data_sleb128_raw (val1->v.val_int);
5179       break;
5180
5181     case DW_OP_bregx:
5182       fputc (',', asm_out_file);
5183       dw2_asm_output_data_uleb128_raw (val1->v.val_unsigned);
5184       fputc (',', asm_out_file);
5185       dw2_asm_output_data_sleb128_raw (val2->v.val_int);
5186       break;
5187
5188     default:
5189       /* Other codes have no operands.  */
5190       break;
5191     }
5192 }
5193
5194 static void
5195 output_loc_sequence_raw (dw_loc_descr_ref loc)
5196 {
5197   while (1)
5198     {
5199       /* Output the opcode.  */
5200       fprintf (asm_out_file, "%#x", loc->dw_loc_opc);
5201       output_loc_operands_raw (loc);
5202
5203       if (!loc->dw_loc_next)
5204         break;
5205       loc = loc->dw_loc_next;
5206
5207       fputc (',', asm_out_file);
5208     }
5209 }
5210
5211 /* This routine will generate the correct assembly data for a location
5212    description based on a cfi entry with a complex address.  */
5213
5214 static void
5215 output_cfa_loc (dw_cfi_ref cfi)
5216 {
5217   dw_loc_descr_ref loc;
5218   unsigned long size;
5219
5220   if (cfi->dw_cfi_opc == DW_CFA_expression)
5221     {
5222       dw2_asm_output_data (1, cfi->dw_cfi_oprnd1.dw_cfi_reg_num, NULL);
5223       loc = cfi->dw_cfi_oprnd2.dw_cfi_loc;
5224     }
5225   else
5226     loc = cfi->dw_cfi_oprnd1.dw_cfi_loc;
5227
5228   /* Output the size of the block.  */
5229   size = size_of_locs (loc);
5230   dw2_asm_output_data_uleb128 (size, NULL);
5231
5232   /* Now output the operations themselves.  */
5233   output_loc_sequence (loc);
5234 }
5235
5236 /* Similar, but used for .cfi_escape.  */
5237
5238 static void
5239 output_cfa_loc_raw (dw_cfi_ref cfi)
5240 {
5241   dw_loc_descr_ref loc;
5242   unsigned long size;
5243
5244   if (cfi->dw_cfi_opc == DW_CFA_expression)
5245     {
5246       fprintf (asm_out_file, "%#x,", cfi->dw_cfi_oprnd1.dw_cfi_reg_num);
5247       loc = cfi->dw_cfi_oprnd2.dw_cfi_loc;
5248     }
5249   else
5250     loc = cfi->dw_cfi_oprnd1.dw_cfi_loc;
5251
5252   /* Output the size of the block.  */
5253   size = size_of_locs (loc);
5254   dw2_asm_output_data_uleb128_raw (size);
5255   fputc (',', asm_out_file);
5256
5257   /* Now output the operations themselves.  */
5258   output_loc_sequence_raw (loc);
5259 }
5260
5261 /* This function builds a dwarf location descriptor sequence from a
5262    dw_cfa_location, adding the given OFFSET to the result of the
5263    expression.  */
5264
5265 static struct dw_loc_descr_struct *
5266 build_cfa_loc (dw_cfa_location *cfa, HOST_WIDE_INT offset)
5267 {
5268   struct dw_loc_descr_struct *head, *tmp;
5269
5270   offset += cfa->offset;
5271
5272   if (cfa->indirect)
5273     {
5274       head = new_reg_loc_descr (cfa->reg, cfa->base_offset);
5275       head->dw_loc_oprnd1.val_class = dw_val_class_const;
5276       tmp = new_loc_descr (DW_OP_deref, 0, 0);
5277       add_loc_descr (&head, tmp);
5278       if (offset != 0)
5279         {
5280           tmp = new_loc_descr (DW_OP_plus_uconst, offset, 0);
5281           add_loc_descr (&head, tmp);
5282         }
5283     }
5284   else
5285     head = new_reg_loc_descr (cfa->reg, offset);
5286
5287   return head;
5288 }
5289
5290 /* This function builds a dwarf location descriptor sequence for
5291    the address at OFFSET from the CFA when stack is aligned to
5292    ALIGNMENT byte.  */
5293
5294 static struct dw_loc_descr_struct *
5295 build_cfa_aligned_loc (HOST_WIDE_INT offset, HOST_WIDE_INT alignment)
5296 {
5297   struct dw_loc_descr_struct *head;
5298   unsigned int dwarf_fp
5299     = DWARF_FRAME_REGNUM (HARD_FRAME_POINTER_REGNUM);
5300
5301  /* When CFA is defined as FP+OFFSET, emulate stack alignment.  */
5302   if (cfa.reg == HARD_FRAME_POINTER_REGNUM && cfa.indirect == 0)
5303     {
5304       head = new_reg_loc_descr (dwarf_fp, 0);
5305       add_loc_descr (&head, int_loc_descriptor (alignment));
5306       add_loc_descr (&head, new_loc_descr (DW_OP_and, 0, 0));
5307       loc_descr_plus_const (&head, offset);
5308     }
5309   else
5310     head = new_reg_loc_descr (dwarf_fp, offset);
5311   return head;
5312 }
5313
5314 /* This function fills in aa dw_cfa_location structure from a dwarf location
5315    descriptor sequence.  */
5316
5317 static void
5318 get_cfa_from_loc_descr (dw_cfa_location *cfa, struct dw_loc_descr_struct *loc)
5319 {
5320   struct dw_loc_descr_struct *ptr;
5321   cfa->offset = 0;
5322   cfa->base_offset = 0;
5323   cfa->indirect = 0;
5324   cfa->reg = -1;
5325
5326   for (ptr = loc; ptr != NULL; ptr = ptr->dw_loc_next)
5327     {
5328       enum dwarf_location_atom op = ptr->dw_loc_opc;
5329
5330       switch (op)
5331         {
5332         case DW_OP_reg0:
5333         case DW_OP_reg1:
5334         case DW_OP_reg2:
5335         case DW_OP_reg3:
5336         case DW_OP_reg4:
5337         case DW_OP_reg5:
5338         case DW_OP_reg6:
5339         case DW_OP_reg7:
5340         case DW_OP_reg8:
5341         case DW_OP_reg9:
5342         case DW_OP_reg10:
5343         case DW_OP_reg11:
5344         case DW_OP_reg12:
5345         case DW_OP_reg13:
5346         case DW_OP_reg14:
5347         case DW_OP_reg15:
5348         case DW_OP_reg16:
5349         case DW_OP_reg17:
5350         case DW_OP_reg18:
5351         case DW_OP_reg19:
5352         case DW_OP_reg20:
5353         case DW_OP_reg21:
5354         case DW_OP_reg22:
5355         case DW_OP_reg23:
5356         case DW_OP_reg24:
5357         case DW_OP_reg25:
5358         case DW_OP_reg26:
5359         case DW_OP_reg27:
5360         case DW_OP_reg28:
5361         case DW_OP_reg29:
5362         case DW_OP_reg30:
5363         case DW_OP_reg31:
5364           cfa->reg = op - DW_OP_reg0;
5365           break;
5366         case DW_OP_regx:
5367           cfa->reg = ptr->dw_loc_oprnd1.v.val_int;
5368           break;
5369         case DW_OP_breg0:
5370         case DW_OP_breg1:
5371         case DW_OP_breg2:
5372         case DW_OP_breg3:
5373         case DW_OP_breg4:
5374         case DW_OP_breg5:
5375         case DW_OP_breg6:
5376         case DW_OP_breg7:
5377         case DW_OP_breg8:
5378         case DW_OP_breg9:
5379         case DW_OP_breg10:
5380         case DW_OP_breg11:
5381         case DW_OP_breg12:
5382         case DW_OP_breg13:
5383         case DW_OP_breg14:
5384         case DW_OP_breg15:
5385         case DW_OP_breg16:
5386         case DW_OP_breg17:
5387         case DW_OP_breg18:
5388         case DW_OP_breg19:
5389         case DW_OP_breg20:
5390         case DW_OP_breg21:
5391         case DW_OP_breg22:
5392         case DW_OP_breg23:
5393         case DW_OP_breg24:
5394         case DW_OP_breg25:
5395         case DW_OP_breg26:
5396         case DW_OP_breg27:
5397         case DW_OP_breg28:
5398         case DW_OP_breg29:
5399         case DW_OP_breg30:
5400         case DW_OP_breg31:
5401           cfa->reg = op - DW_OP_breg0;
5402           cfa->base_offset = ptr->dw_loc_oprnd1.v.val_int;
5403           break;
5404         case DW_OP_bregx:
5405           cfa->reg = ptr->dw_loc_oprnd1.v.val_int;
5406           cfa->base_offset = ptr->dw_loc_oprnd2.v.val_int;
5407           break;
5408         case DW_OP_deref:
5409           cfa->indirect = 1;
5410           break;
5411         case DW_OP_plus_uconst:
5412           cfa->offset = ptr->dw_loc_oprnd1.v.val_unsigned;
5413           break;
5414         default:
5415           internal_error ("DW_LOC_OP %s not implemented",
5416                           dwarf_stack_op_name (ptr->dw_loc_opc));
5417         }
5418     }
5419 }
5420 #endif /* .debug_frame support */
5421 \f
5422 /* And now, the support for symbolic debugging information.  */
5423 #ifdef DWARF2_DEBUGGING_INFO
5424
5425 /* .debug_str support.  */
5426 static int output_indirect_string (void **, void *);
5427
5428 static void dwarf2out_init (const char *);
5429 static void dwarf2out_finish (const char *);
5430 static void dwarf2out_assembly_start (void);
5431 static void dwarf2out_define (unsigned int, const char *);
5432 static void dwarf2out_undef (unsigned int, const char *);
5433 static void dwarf2out_start_source_file (unsigned, const char *);
5434 static void dwarf2out_end_source_file (unsigned);
5435 static void dwarf2out_function_decl (tree);
5436 static void dwarf2out_begin_block (unsigned, unsigned);
5437 static void dwarf2out_end_block (unsigned, unsigned);
5438 static bool dwarf2out_ignore_block (const_tree);
5439 static void dwarf2out_global_decl (tree);
5440 static void dwarf2out_type_decl (tree, int);
5441 static void dwarf2out_imported_module_or_decl (tree, tree, tree, bool);
5442 static void dwarf2out_imported_module_or_decl_1 (tree, tree, tree,
5443                                                  dw_die_ref);
5444 static void dwarf2out_abstract_function (tree);
5445 static void dwarf2out_var_location (rtx);
5446 static void dwarf2out_direct_call (tree);
5447 static void dwarf2out_virtual_call_token (tree, int);
5448 static void dwarf2out_copy_call_info (rtx, rtx);
5449 static void dwarf2out_virtual_call (int);
5450 static void dwarf2out_begin_function (tree);
5451 static void dwarf2out_set_name (tree, tree);
5452
5453 /* The debug hooks structure.  */
5454
5455 const struct gcc_debug_hooks dwarf2_debug_hooks =
5456 {
5457   dwarf2out_init,
5458   dwarf2out_finish,
5459   dwarf2out_assembly_start,
5460   dwarf2out_define,
5461   dwarf2out_undef,
5462   dwarf2out_start_source_file,
5463   dwarf2out_end_source_file,
5464   dwarf2out_begin_block,
5465   dwarf2out_end_block,
5466   dwarf2out_ignore_block,
5467   dwarf2out_source_line,
5468   dwarf2out_begin_prologue,
5469   debug_nothing_int_charstar,   /* end_prologue */
5470   dwarf2out_end_epilogue,
5471   dwarf2out_begin_function,
5472   debug_nothing_int,            /* end_function */
5473   dwarf2out_function_decl,      /* function_decl */
5474   dwarf2out_global_decl,
5475   dwarf2out_type_decl,          /* type_decl */
5476   dwarf2out_imported_module_or_decl,
5477   debug_nothing_tree,           /* deferred_inline_function */
5478   /* The DWARF 2 backend tries to reduce debugging bloat by not
5479      emitting the abstract description of inline functions until
5480      something tries to reference them.  */
5481   dwarf2out_abstract_function,  /* outlining_inline_function */
5482   debug_nothing_rtx,            /* label */
5483   debug_nothing_int,            /* handle_pch */
5484   dwarf2out_var_location,
5485   dwarf2out_switch_text_section,
5486   dwarf2out_direct_call,
5487   dwarf2out_virtual_call_token,
5488   dwarf2out_copy_call_info,
5489   dwarf2out_virtual_call,
5490   dwarf2out_set_name,
5491   1                             /* start_end_main_source_file */
5492 };
5493 #endif
5494 \f
5495 /* NOTE: In the comments in this file, many references are made to
5496    "Debugging Information Entries".  This term is abbreviated as `DIE'
5497    throughout the remainder of this file.  */
5498
5499 /* An internal representation of the DWARF output is built, and then
5500    walked to generate the DWARF debugging info.  The walk of the internal
5501    representation is done after the entire program has been compiled.
5502    The types below are used to describe the internal representation.  */
5503
5504 /* Various DIE's use offsets relative to the beginning of the
5505    .debug_info section to refer to each other.  */
5506
5507 typedef long int dw_offset;
5508
5509 /* Define typedefs here to avoid circular dependencies.  */
5510
5511 typedef struct dw_attr_struct *dw_attr_ref;
5512 typedef struct dw_line_info_struct *dw_line_info_ref;
5513 typedef struct dw_separate_line_info_struct *dw_separate_line_info_ref;
5514 typedef struct pubname_struct *pubname_ref;
5515 typedef struct dw_ranges_struct *dw_ranges_ref;
5516 typedef struct dw_ranges_by_label_struct *dw_ranges_by_label_ref;
5517 typedef struct comdat_type_struct *comdat_type_node_ref;
5518
5519 /* Each entry in the line_info_table maintains the file and
5520    line number associated with the label generated for that
5521    entry.  The label gives the PC value associated with
5522    the line number entry.  */
5523
5524 typedef struct GTY(()) dw_line_info_struct {
5525   unsigned long dw_file_num;
5526   unsigned long dw_line_num;
5527 }
5528 dw_line_info_entry;
5529
5530 /* Line information for functions in separate sections; each one gets its
5531    own sequence.  */
5532 typedef struct GTY(()) dw_separate_line_info_struct {
5533   unsigned long dw_file_num;
5534   unsigned long dw_line_num;
5535   unsigned long function;
5536 }
5537 dw_separate_line_info_entry;
5538
5539 /* Each DIE attribute has a field specifying the attribute kind,
5540    a link to the next attribute in the chain, and an attribute value.
5541    Attributes are typically linked below the DIE they modify.  */
5542
5543 typedef struct GTY(()) dw_attr_struct {
5544   enum dwarf_attribute dw_attr;
5545   dw_val_node dw_attr_val;
5546 }
5547 dw_attr_node;
5548
5549 DEF_VEC_O(dw_attr_node);
5550 DEF_VEC_ALLOC_O(dw_attr_node,gc);
5551
5552 /* The Debugging Information Entry (DIE) structure.  DIEs form a tree.
5553    The children of each node form a circular list linked by
5554    die_sib.  die_child points to the node *before* the "first" child node.  */
5555
5556 typedef struct GTY((chain_circular ("%h.die_sib"))) die_struct {
5557   enum dwarf_tag die_tag;
5558   union die_symbol_or_type_node
5559     {
5560       char * GTY ((tag ("0"))) die_symbol;
5561       comdat_type_node_ref GTY ((tag ("1"))) die_type_node;
5562     }
5563   GTY ((desc ("dwarf_version >= 4"))) die_id;
5564   VEC(dw_attr_node,gc) * die_attr;
5565   dw_die_ref die_parent;
5566   dw_die_ref die_child;
5567   dw_die_ref die_sib;
5568   dw_die_ref die_definition; /* ref from a specification to its definition */
5569   dw_offset die_offset;
5570   unsigned long die_abbrev;
5571   int die_mark;
5572   /* Die is used and must not be pruned as unused.  */
5573   int die_perennial_p;
5574   unsigned int decl_id;
5575 }
5576 die_node;
5577
5578 /* Evaluate 'expr' while 'c' is set to each child of DIE in order.  */
5579 #define FOR_EACH_CHILD(die, c, expr) do {       \
5580   c = die->die_child;                           \
5581   if (c) do {                                   \
5582     c = c->die_sib;                             \
5583     expr;                                       \
5584   } while (c != die->die_child);                \
5585 } while (0)
5586
5587 /* The pubname structure */
5588
5589 typedef struct GTY(()) pubname_struct {
5590   dw_die_ref die;
5591   const char *name;
5592 }
5593 pubname_entry;
5594
5595 DEF_VEC_O(pubname_entry);
5596 DEF_VEC_ALLOC_O(pubname_entry, gc);
5597
5598 struct GTY(()) dw_ranges_struct {
5599   /* If this is positive, it's a block number, otherwise it's a
5600      bitwise-negated index into dw_ranges_by_label.  */
5601   int num;
5602 };
5603
5604 struct GTY(()) dw_ranges_by_label_struct {
5605   const char *begin;
5606   const char *end;
5607 };
5608
5609 /* The comdat type node structure.  */
5610 typedef struct GTY(()) comdat_type_struct
5611 {
5612   dw_die_ref root_die;
5613   dw_die_ref type_die;
5614   char signature[DWARF_TYPE_SIGNATURE_SIZE];
5615   struct comdat_type_struct *next;
5616 }
5617 comdat_type_node;
5618
5619 /* The limbo die list structure.  */
5620 typedef struct GTY(()) limbo_die_struct {
5621   dw_die_ref die;
5622   tree created_for;
5623   struct limbo_die_struct *next;
5624 }
5625 limbo_die_node;
5626
5627 typedef struct GTY(()) skeleton_chain_struct
5628 {
5629   dw_die_ref old_die;
5630   dw_die_ref new_die;
5631   struct skeleton_chain_struct *parent;
5632 }
5633 skeleton_chain_node;
5634
5635 /* How to start an assembler comment.  */
5636 #ifndef ASM_COMMENT_START
5637 #define ASM_COMMENT_START ";#"
5638 #endif
5639
5640 /* Define a macro which returns nonzero for a TYPE_DECL which was
5641    implicitly generated for a tagged type.
5642
5643    Note that unlike the gcc front end (which generates a NULL named
5644    TYPE_DECL node for each complete tagged type, each array type, and
5645    each function type node created) the g++ front end generates a
5646    _named_ TYPE_DECL node for each tagged type node created.
5647    These TYPE_DECLs have DECL_ARTIFICIAL set, so we know not to
5648    generate a DW_TAG_typedef DIE for them.  */
5649
5650 #define TYPE_DECL_IS_STUB(decl)                         \
5651   (DECL_NAME (decl) == NULL_TREE                        \
5652    || (DECL_ARTIFICIAL (decl)                           \
5653        && is_tagged_type (TREE_TYPE (decl))             \
5654        && ((decl == TYPE_STUB_DECL (TREE_TYPE (decl)))  \
5655            /* This is necessary for stub decls that     \
5656               appear in nested inline functions.  */    \
5657            || (DECL_ABSTRACT_ORIGIN (decl) != NULL_TREE \
5658                && (decl_ultimate_origin (decl)          \
5659                    == TYPE_STUB_DECL (TREE_TYPE (decl)))))))
5660
5661 /* Information concerning the compilation unit's programming
5662    language, and compiler version.  */
5663
5664 /* Fixed size portion of the DWARF compilation unit header.  */
5665 #define DWARF_COMPILE_UNIT_HEADER_SIZE \
5666   (DWARF_INITIAL_LENGTH_SIZE + DWARF_OFFSET_SIZE + 3)
5667
5668 /* Fixed size portion of the DWARF comdat type unit header.  */
5669 #define DWARF_COMDAT_TYPE_UNIT_HEADER_SIZE \
5670   (DWARF_COMPILE_UNIT_HEADER_SIZE + DWARF_TYPE_SIGNATURE_SIZE \
5671    + DWARF_OFFSET_SIZE)
5672
5673 /* Fixed size portion of public names info.  */
5674 #define DWARF_PUBNAMES_HEADER_SIZE (2 * DWARF_OFFSET_SIZE + 2)
5675
5676 /* Fixed size portion of the address range info.  */
5677 #define DWARF_ARANGES_HEADER_SIZE                                       \
5678   (DWARF_ROUND (DWARF_INITIAL_LENGTH_SIZE + DWARF_OFFSET_SIZE + 4,      \
5679                 DWARF2_ADDR_SIZE * 2)                                   \
5680    - DWARF_INITIAL_LENGTH_SIZE)
5681
5682 /* Size of padding portion in the address range info.  It must be
5683    aligned to twice the pointer size.  */
5684 #define DWARF_ARANGES_PAD_SIZE \
5685   (DWARF_ROUND (DWARF_INITIAL_LENGTH_SIZE + DWARF_OFFSET_SIZE + 4, \
5686                 DWARF2_ADDR_SIZE * 2)                              \
5687    - (DWARF_INITIAL_LENGTH_SIZE + DWARF_OFFSET_SIZE + 4))
5688
5689 /* Use assembler line directives if available.  */
5690 #ifndef DWARF2_ASM_LINE_DEBUG_INFO
5691 #ifdef HAVE_AS_DWARF2_DEBUG_LINE
5692 #define DWARF2_ASM_LINE_DEBUG_INFO 1
5693 #else
5694 #define DWARF2_ASM_LINE_DEBUG_INFO 0
5695 #endif
5696 #endif
5697
5698 /* Minimum line offset in a special line info. opcode.
5699    This value was chosen to give a reasonable range of values.  */
5700 #define DWARF_LINE_BASE  -10
5701
5702 /* First special line opcode - leave room for the standard opcodes.  */
5703 #define DWARF_LINE_OPCODE_BASE  10
5704
5705 /* Range of line offsets in a special line info. opcode.  */
5706 #define DWARF_LINE_RANGE  (254-DWARF_LINE_OPCODE_BASE+1)
5707
5708 /* Flag that indicates the initial value of the is_stmt_start flag.
5709    In the present implementation, we do not mark any lines as
5710    the beginning of a source statement, because that information
5711    is not made available by the GCC front-end.  */
5712 #define DWARF_LINE_DEFAULT_IS_STMT_START 1
5713
5714 /* Maximum number of operations per instruction bundle.  */
5715 #ifndef DWARF_LINE_DEFAULT_MAX_OPS_PER_INSN
5716 #define DWARF_LINE_DEFAULT_MAX_OPS_PER_INSN 1
5717 #endif
5718
5719 #ifdef DWARF2_DEBUGGING_INFO
5720 /* This location is used by calc_die_sizes() to keep track
5721    the offset of each DIE within the .debug_info section.  */
5722 static unsigned long next_die_offset;
5723 #endif
5724
5725 /* Record the root of the DIE's built for the current compilation unit.  */
5726 static GTY(()) dw_die_ref comp_unit_die;
5727
5728 /* A list of type DIEs that have been separated into comdat sections.  */
5729 static GTY(()) comdat_type_node *comdat_type_list;
5730
5731 /* A list of DIEs with a NULL parent waiting to be relocated.  */
5732 static GTY(()) limbo_die_node *limbo_die_list;
5733
5734 /* A list of DIEs for which we may have to generate
5735    DW_AT_{,MIPS_}linkage_name once their DECL_ASSEMBLER_NAMEs are set.  */
5736 static GTY(()) limbo_die_node *deferred_asm_name;
5737
5738 /* Filenames referenced by this compilation unit.  */
5739 static GTY((param_is (struct dwarf_file_data))) htab_t file_table;
5740
5741 /* A hash table of references to DIE's that describe declarations.
5742    The key is a DECL_UID() which is a unique number identifying each decl.  */
5743 static GTY ((param_is (struct die_struct))) htab_t decl_die_table;
5744
5745 /* A hash table of references to DIE's that describe COMMON blocks.
5746    The key is DECL_UID() ^ die_parent.  */
5747 static GTY ((param_is (struct die_struct))) htab_t common_block_die_table;
5748
5749 typedef struct GTY(()) die_arg_entry_struct {
5750     dw_die_ref die;
5751     tree arg;
5752 } die_arg_entry;
5753
5754 DEF_VEC_O(die_arg_entry);
5755 DEF_VEC_ALLOC_O(die_arg_entry,gc);
5756
5757 /* Node of the variable location list.  */
5758 struct GTY ((chain_next ("%h.next"))) var_loc_node {
5759   /* Either NOTE_INSN_VAR_LOCATION, or, for SRA optimized variables,
5760      EXPR_LIST chain.  For small bitsizes, bitsize is encoded
5761      in mode of the EXPR_LIST node and first EXPR_LIST operand
5762      is either NOTE_INSN_VAR_LOCATION for a piece with a known
5763      location or NULL for padding.  For larger bitsizes,
5764      mode is 0 and first operand is a CONCAT with bitsize
5765      as first CONCAT operand and NOTE_INSN_VAR_LOCATION resp.
5766      NULL as second operand.  */
5767   rtx GTY (()) loc;
5768   const char * GTY (()) label;
5769   struct var_loc_node * GTY (()) next;
5770 };
5771
5772 /* Variable location list.  */
5773 struct GTY (()) var_loc_list_def {
5774   struct var_loc_node * GTY (()) first;
5775
5776   /* Pointer to the last but one or last element of the
5777      chained list.  If the list is empty, both first and
5778      last are NULL, if the list contains just one node
5779      or the last node certainly is not redundant, it points
5780      to the last node, otherwise points to the last but one.
5781      Do not mark it for GC because it is marked through the chain.  */
5782   struct var_loc_node * GTY ((skip ("%h"))) last;
5783
5784   /* DECL_UID of the variable decl.  */
5785   unsigned int decl_id;
5786 };
5787 typedef struct var_loc_list_def var_loc_list;
5788
5789
5790 /* Table of decl location linked lists.  */
5791 static GTY ((param_is (var_loc_list))) htab_t decl_loc_table;
5792
5793 /* A pointer to the base of a list of references to DIE's that
5794    are uniquely identified by their tag, presence/absence of
5795    children DIE's, and list of attribute/value pairs.  */
5796 static GTY((length ("abbrev_die_table_allocated")))
5797   dw_die_ref *abbrev_die_table;
5798
5799 /* Number of elements currently allocated for abbrev_die_table.  */
5800 static GTY(()) unsigned abbrev_die_table_allocated;
5801
5802 /* Number of elements in type_die_table currently in use.  */
5803 static GTY(()) unsigned abbrev_die_table_in_use;
5804
5805 /* Size (in elements) of increments by which we may expand the
5806    abbrev_die_table.  */
5807 #define ABBREV_DIE_TABLE_INCREMENT 256
5808
5809 /* A pointer to the base of a table that contains line information
5810    for each source code line in .text in the compilation unit.  */
5811 static GTY((length ("line_info_table_allocated")))
5812      dw_line_info_ref line_info_table;
5813
5814 /* Number of elements currently allocated for line_info_table.  */
5815 static GTY(()) unsigned line_info_table_allocated;
5816
5817 /* Number of elements in line_info_table currently in use.  */
5818 static GTY(()) unsigned line_info_table_in_use;
5819
5820 /* A pointer to the base of a table that contains line information
5821    for each source code line outside of .text in the compilation unit.  */
5822 static GTY ((length ("separate_line_info_table_allocated")))
5823      dw_separate_line_info_ref separate_line_info_table;
5824
5825 /* Number of elements currently allocated for separate_line_info_table.  */
5826 static GTY(()) unsigned separate_line_info_table_allocated;
5827
5828 /* Number of elements in separate_line_info_table currently in use.  */
5829 static GTY(()) unsigned separate_line_info_table_in_use;
5830
5831 /* Size (in elements) of increments by which we may expand the
5832    line_info_table.  */
5833 #define LINE_INFO_TABLE_INCREMENT 1024
5834
5835 /* A pointer to the base of a table that contains a list of publicly
5836    accessible names.  */
5837 static GTY (()) VEC (pubname_entry, gc) *  pubname_table;
5838
5839 /* A pointer to the base of a table that contains a list of publicly
5840    accessible types.  */
5841 static GTY (()) VEC (pubname_entry, gc) * pubtype_table;
5842
5843 /* Array of dies for which we should generate .debug_arange info.  */
5844 static GTY((length ("arange_table_allocated"))) dw_die_ref *arange_table;
5845
5846 /* Number of elements currently allocated for arange_table.  */
5847 static GTY(()) unsigned arange_table_allocated;
5848
5849 /* Number of elements in arange_table currently in use.  */
5850 static GTY(()) unsigned arange_table_in_use;
5851
5852 /* Size (in elements) of increments by which we may expand the
5853    arange_table.  */
5854 #define ARANGE_TABLE_INCREMENT 64
5855
5856 /* Array of dies for which we should generate .debug_ranges info.  */
5857 static GTY ((length ("ranges_table_allocated"))) dw_ranges_ref ranges_table;
5858
5859 /* Number of elements currently allocated for ranges_table.  */
5860 static GTY(()) unsigned ranges_table_allocated;
5861
5862 /* Number of elements in ranges_table currently in use.  */
5863 static GTY(()) unsigned ranges_table_in_use;
5864
5865 /* Array of pairs of labels referenced in ranges_table.  */
5866 static GTY ((length ("ranges_by_label_allocated")))
5867      dw_ranges_by_label_ref ranges_by_label;
5868
5869 /* Number of elements currently allocated for ranges_by_label.  */
5870 static GTY(()) unsigned ranges_by_label_allocated;
5871
5872 /* Number of elements in ranges_by_label currently in use.  */
5873 static GTY(()) unsigned ranges_by_label_in_use;
5874
5875 /* Size (in elements) of increments by which we may expand the
5876    ranges_table.  */
5877 #define RANGES_TABLE_INCREMENT 64
5878
5879 /* Whether we have location lists that need outputting */
5880 static GTY(()) bool have_location_lists;
5881
5882 /* Unique label counter.  */
5883 static GTY(()) unsigned int loclabel_num;
5884
5885 /* Unique label counter for point-of-call tables.  */
5886 static GTY(()) unsigned int poc_label_num;
5887
5888 /* The direct call table structure.  */
5889
5890 typedef struct GTY(()) dcall_struct {
5891   unsigned int poc_label_num;
5892   tree poc_decl;
5893   dw_die_ref targ_die;
5894 }
5895 dcall_entry;
5896
5897 DEF_VEC_O(dcall_entry);
5898 DEF_VEC_ALLOC_O(dcall_entry, gc);
5899
5900 /* The virtual call table structure.  */
5901
5902 typedef struct GTY(()) vcall_struct {
5903   unsigned int poc_label_num;
5904   unsigned int vtable_slot;
5905 }
5906 vcall_entry;
5907
5908 DEF_VEC_O(vcall_entry);
5909 DEF_VEC_ALLOC_O(vcall_entry, gc);
5910
5911 /* Pointers to the direct and virtual call tables.  */
5912 static GTY (()) VEC (dcall_entry, gc) * dcall_table = NULL;
5913 static GTY (()) VEC (vcall_entry, gc) * vcall_table = NULL;
5914
5915 /* A hash table to map INSN_UIDs to vtable slot indexes.  */
5916
5917 struct GTY (()) vcall_insn {
5918   int insn_uid;
5919   unsigned int vtable_slot;
5920 };
5921
5922 static GTY ((param_is (struct vcall_insn))) htab_t vcall_insn_table;
5923
5924 #ifdef DWARF2_DEBUGGING_INFO
5925 /* Record whether the function being analyzed contains inlined functions.  */
5926 static int current_function_has_inlines;
5927 #endif
5928 #if 0 && defined (MIPS_DEBUGGING_INFO)
5929 static int comp_unit_has_inlines;
5930 #endif
5931
5932 /* The last file entry emitted by maybe_emit_file().  */
5933 static GTY(()) struct dwarf_file_data * last_emitted_file;
5934
5935 /* Number of internal labels generated by gen_internal_sym().  */
5936 static GTY(()) int label_num;
5937
5938 /* Cached result of previous call to lookup_filename.  */
5939 static GTY(()) struct dwarf_file_data * file_table_last_lookup;
5940
5941 static GTY(()) VEC(die_arg_entry,gc) *tmpl_value_parm_die_table;
5942
5943 #ifdef DWARF2_DEBUGGING_INFO
5944
5945 /* Offset from the "steady-state frame pointer" to the frame base,
5946    within the current function.  */
5947 static HOST_WIDE_INT frame_pointer_fb_offset;
5948
5949 /* Forward declarations for functions defined in this file.  */
5950
5951 static int is_pseudo_reg (const_rtx);
5952 static tree type_main_variant (tree);
5953 static int is_tagged_type (const_tree);
5954 static const char *dwarf_tag_name (unsigned);
5955 static const char *dwarf_attr_name (unsigned);
5956 static const char *dwarf_form_name (unsigned);
5957 static tree decl_ultimate_origin (const_tree);
5958 static tree decl_class_context (tree);
5959 static void add_dwarf_attr (dw_die_ref, dw_attr_ref);
5960 static inline enum dw_val_class AT_class (dw_attr_ref);
5961 static void add_AT_flag (dw_die_ref, enum dwarf_attribute, unsigned);
5962 static inline unsigned AT_flag (dw_attr_ref);
5963 static void add_AT_int (dw_die_ref, enum dwarf_attribute, HOST_WIDE_INT);
5964 static inline HOST_WIDE_INT AT_int (dw_attr_ref);
5965 static void add_AT_unsigned (dw_die_ref, enum dwarf_attribute, unsigned HOST_WIDE_INT);
5966 static inline unsigned HOST_WIDE_INT AT_unsigned (dw_attr_ref);
5967 static void add_AT_double (dw_die_ref, enum dwarf_attribute,
5968                            HOST_WIDE_INT, unsigned HOST_WIDE_INT);
5969 static inline void add_AT_vec (dw_die_ref, enum dwarf_attribute, unsigned int,
5970                                unsigned int, unsigned char *);
5971 static void add_AT_data8 (dw_die_ref, enum dwarf_attribute, unsigned char *);
5972 static hashval_t debug_str_do_hash (const void *);
5973 static int debug_str_eq (const void *, const void *);
5974 static void add_AT_string (dw_die_ref, enum dwarf_attribute, const char *);
5975 static inline const char *AT_string (dw_attr_ref);
5976 static enum dwarf_form AT_string_form (dw_attr_ref);
5977 static void add_AT_die_ref (dw_die_ref, enum dwarf_attribute, dw_die_ref);
5978 static void add_AT_specification (dw_die_ref, dw_die_ref);
5979 static inline dw_die_ref AT_ref (dw_attr_ref);
5980 static inline int AT_ref_external (dw_attr_ref);
5981 static inline void set_AT_ref_external (dw_attr_ref, int);
5982 static void add_AT_fde_ref (dw_die_ref, enum dwarf_attribute, unsigned);
5983 static void add_AT_loc (dw_die_ref, enum dwarf_attribute, dw_loc_descr_ref);
5984 static inline dw_loc_descr_ref AT_loc (dw_attr_ref);
5985 static void add_AT_loc_list (dw_die_ref, enum dwarf_attribute,
5986                              dw_loc_list_ref);
5987 static inline dw_loc_list_ref AT_loc_list (dw_attr_ref);
5988 static void add_AT_addr (dw_die_ref, enum dwarf_attribute, rtx);
5989 static inline rtx AT_addr (dw_attr_ref);
5990 static void add_AT_lbl_id (dw_die_ref, enum dwarf_attribute, const char *);
5991 static void add_AT_lineptr (dw_die_ref, enum dwarf_attribute, const char *);
5992 static void add_AT_macptr (dw_die_ref, enum dwarf_attribute, const char *);
5993 static void add_AT_offset (dw_die_ref, enum dwarf_attribute,
5994                            unsigned HOST_WIDE_INT);
5995 static void add_AT_range_list (dw_die_ref, enum dwarf_attribute,
5996                                unsigned long);
5997 static inline const char *AT_lbl (dw_attr_ref);
5998 static dw_attr_ref get_AT (dw_die_ref, enum dwarf_attribute);
5999 static const char *get_AT_low_pc (dw_die_ref);
6000 static const char *get_AT_hi_pc (dw_die_ref);
6001 static const char *get_AT_string (dw_die_ref, enum dwarf_attribute);
6002 static int get_AT_flag (dw_die_ref, enum dwarf_attribute);
6003 static unsigned get_AT_unsigned (dw_die_ref, enum dwarf_attribute);
6004 static inline dw_die_ref get_AT_ref (dw_die_ref, enum dwarf_attribute);
6005 static bool is_cxx (void);
6006 static bool is_fortran (void);
6007 static bool is_ada (void);
6008 static void remove_AT (dw_die_ref, enum dwarf_attribute);
6009 static void remove_child_TAG (dw_die_ref, enum dwarf_tag);
6010 static void add_child_die (dw_die_ref, dw_die_ref);
6011 static dw_die_ref new_die (enum dwarf_tag, dw_die_ref, tree);
6012 static dw_die_ref lookup_type_die (tree);
6013 static void equate_type_number_to_die (tree, dw_die_ref);
6014 static hashval_t decl_die_table_hash (const void *);
6015 static int decl_die_table_eq (const void *, const void *);
6016 static dw_die_ref lookup_decl_die (tree);
6017 static hashval_t common_block_die_table_hash (const void *);
6018 static int common_block_die_table_eq (const void *, const void *);
6019 static hashval_t decl_loc_table_hash (const void *);
6020 static int decl_loc_table_eq (const void *, const void *);
6021 static var_loc_list *lookup_decl_loc (const_tree);
6022 static void equate_decl_number_to_die (tree, dw_die_ref);
6023 static struct var_loc_node *add_var_loc_to_decl (tree, rtx, const char *);
6024 static void print_spaces (FILE *);
6025 static void print_die (dw_die_ref, FILE *);
6026 static void print_dwarf_line_table (FILE *);
6027 static dw_die_ref push_new_compile_unit (dw_die_ref, dw_die_ref);
6028 static dw_die_ref pop_compile_unit (dw_die_ref);
6029 static void loc_checksum (dw_loc_descr_ref, struct md5_ctx *);
6030 static void attr_checksum (dw_attr_ref, struct md5_ctx *, int *);
6031 static void die_checksum (dw_die_ref, struct md5_ctx *, int *);
6032 static void checksum_sleb128 (HOST_WIDE_INT, struct md5_ctx *);
6033 static void checksum_uleb128 (unsigned HOST_WIDE_INT, struct md5_ctx *);
6034 static void loc_checksum_ordered (dw_loc_descr_ref, struct md5_ctx *);
6035 static void attr_checksum_ordered (enum dwarf_tag, dw_attr_ref,
6036                                    struct md5_ctx *, int *);
6037 struct checksum_attributes;
6038 static void collect_checksum_attributes (struct checksum_attributes *, dw_die_ref);
6039 static void die_checksum_ordered (dw_die_ref, struct md5_ctx *, int *);
6040 static void checksum_die_context (dw_die_ref, struct md5_ctx *);
6041 static void generate_type_signature (dw_die_ref, comdat_type_node *);
6042 static int same_loc_p (dw_loc_descr_ref, dw_loc_descr_ref, int *);
6043 static int same_dw_val_p (const dw_val_node *, const dw_val_node *, int *);
6044 static int same_attr_p (dw_attr_ref, dw_attr_ref, int *);
6045 static int same_die_p (dw_die_ref, dw_die_ref, int *);
6046 static int same_die_p_wrap (dw_die_ref, dw_die_ref);
6047 static void compute_section_prefix (dw_die_ref);
6048 static int is_type_die (dw_die_ref);
6049 static int is_comdat_die (dw_die_ref);
6050 static int is_symbol_die (dw_die_ref);
6051 static void assign_symbol_names (dw_die_ref);
6052 static void break_out_includes (dw_die_ref);
6053 static int is_declaration_die (dw_die_ref);
6054 static int should_move_die_to_comdat (dw_die_ref);
6055 static dw_die_ref clone_as_declaration (dw_die_ref);
6056 static dw_die_ref clone_die (dw_die_ref);
6057 static dw_die_ref clone_tree (dw_die_ref);
6058 static void copy_declaration_context (dw_die_ref, dw_die_ref);
6059 static void generate_skeleton_ancestor_tree (skeleton_chain_node *);
6060 static void generate_skeleton_bottom_up (skeleton_chain_node *);
6061 static dw_die_ref generate_skeleton (dw_die_ref);
6062 static dw_die_ref remove_child_or_replace_with_skeleton (dw_die_ref,
6063                                                          dw_die_ref);
6064 static void break_out_comdat_types (dw_die_ref);
6065 static dw_die_ref copy_ancestor_tree (dw_die_ref, dw_die_ref, htab_t);
6066 static void copy_decls_walk (dw_die_ref, dw_die_ref, htab_t);
6067 static void copy_decls_for_unworthy_types (dw_die_ref);
6068
6069 static hashval_t htab_cu_hash (const void *);
6070 static int htab_cu_eq (const void *, const void *);
6071 static void htab_cu_del (void *);
6072 static int check_duplicate_cu (dw_die_ref, htab_t, unsigned *);
6073 static void record_comdat_symbol_number (dw_die_ref, htab_t, unsigned);
6074 static void add_sibling_attributes (dw_die_ref);
6075 static void build_abbrev_table (dw_die_ref);
6076 static void output_location_lists (dw_die_ref);
6077 static int constant_size (unsigned HOST_WIDE_INT);
6078 static unsigned long size_of_die (dw_die_ref);
6079 static void calc_die_sizes (dw_die_ref);
6080 static void mark_dies (dw_die_ref);
6081 static void unmark_dies (dw_die_ref);
6082 static void unmark_all_dies (dw_die_ref);
6083 static unsigned long size_of_pubnames (VEC (pubname_entry,gc) *);
6084 static unsigned long size_of_aranges (void);
6085 static enum dwarf_form value_format (dw_attr_ref);
6086 static void output_value_format (dw_attr_ref);
6087 static void output_abbrev_section (void);
6088 static void output_die_symbol (dw_die_ref);
6089 static void output_die (dw_die_ref);
6090 static void output_compilation_unit_header (void);
6091 static void output_comp_unit (dw_die_ref, int);
6092 static void output_comdat_type_unit (comdat_type_node *);
6093 static const char *dwarf2_name (tree, int);
6094 static void add_pubname (tree, dw_die_ref);
6095 static void add_pubname_string (const char *, dw_die_ref);
6096 static void add_pubtype (tree, dw_die_ref);
6097 static void output_pubnames (VEC (pubname_entry,gc) *);
6098 static void add_arange (tree, dw_die_ref);
6099 static void output_aranges (void);
6100 static unsigned int add_ranges_num (int);
6101 static unsigned int add_ranges (const_tree);
6102 static void add_ranges_by_labels (dw_die_ref, const char *, const char *,
6103                                   bool *);
6104 static void output_ranges (void);
6105 static void output_line_info (void);
6106 static void output_file_names (void);
6107 static dw_die_ref base_type_die (tree);
6108 static int is_base_type (tree);
6109 static dw_die_ref subrange_type_die (tree, tree, tree, dw_die_ref);
6110 static dw_die_ref modified_type_die (tree, int, int, dw_die_ref);
6111 static dw_die_ref generic_parameter_die (tree, tree, bool, dw_die_ref);
6112 static dw_die_ref template_parameter_pack_die (tree, tree, dw_die_ref);
6113 static int type_is_enum (const_tree);
6114 static unsigned int dbx_reg_number (const_rtx);
6115 static void add_loc_descr_op_piece (dw_loc_descr_ref *, int);
6116 static dw_loc_descr_ref reg_loc_descriptor (rtx, enum var_init_status);
6117 static dw_loc_descr_ref one_reg_loc_descriptor (unsigned int,
6118                                                 enum var_init_status);
6119 static dw_loc_descr_ref multiple_reg_loc_descriptor (rtx, rtx,
6120                                                      enum var_init_status);
6121 static dw_loc_descr_ref based_loc_descr (rtx, HOST_WIDE_INT,
6122                                          enum var_init_status);
6123 static int is_based_loc (const_rtx);
6124 static int resolve_one_addr (rtx *, void *);
6125 static dw_loc_descr_ref mem_loc_descriptor (rtx, enum machine_mode mode,
6126                                             enum var_init_status);
6127 static dw_loc_descr_ref concat_loc_descriptor (rtx, rtx,
6128                                                enum var_init_status);
6129 static dw_loc_descr_ref loc_descriptor (rtx, enum machine_mode mode,
6130                                         enum var_init_status);
6131 static dw_loc_list_ref loc_list_from_tree (tree, int);
6132 static dw_loc_descr_ref loc_descriptor_from_tree (tree, int);
6133 static HOST_WIDE_INT ceiling (HOST_WIDE_INT, unsigned int);
6134 static tree field_type (const_tree);
6135 static unsigned int simple_type_align_in_bits (const_tree);
6136 static unsigned int simple_decl_align_in_bits (const_tree);
6137 static unsigned HOST_WIDE_INT simple_type_size_in_bits (const_tree);
6138 static HOST_WIDE_INT field_byte_offset (const_tree);
6139 static void add_AT_location_description (dw_die_ref, enum dwarf_attribute,
6140                                          dw_loc_list_ref);
6141 static void add_data_member_location_attribute (dw_die_ref, tree);
6142 static bool add_const_value_attribute (dw_die_ref, rtx);
6143 static void insert_int (HOST_WIDE_INT, unsigned, unsigned char *);
6144 static void insert_double (double_int, unsigned char *);
6145 static void insert_float (const_rtx, unsigned char *);
6146 static rtx rtl_for_decl_location (tree);
6147 static bool add_location_or_const_value_attribute (dw_die_ref, tree,
6148                                                    enum dwarf_attribute);
6149 static bool tree_add_const_value_attribute (dw_die_ref, tree);
6150 static bool tree_add_const_value_attribute_for_decl (dw_die_ref, tree);
6151 static void add_name_attribute (dw_die_ref, const char *);
6152 static void add_comp_dir_attribute (dw_die_ref);
6153 static void add_bound_info (dw_die_ref, enum dwarf_attribute, tree);
6154 static void add_subscript_info (dw_die_ref, tree, bool);
6155 static void add_byte_size_attribute (dw_die_ref, tree);
6156 static void add_bit_offset_attribute (dw_die_ref, tree);
6157 static void add_bit_size_attribute (dw_die_ref, tree);
6158 static void add_prototyped_attribute (dw_die_ref, tree);
6159 static dw_die_ref add_abstract_origin_attribute (dw_die_ref, tree);
6160 static void add_pure_or_virtual_attribute (dw_die_ref, tree);
6161 static void add_src_coords_attributes (dw_die_ref, tree);
6162 static void add_name_and_src_coords_attributes (dw_die_ref, tree);
6163 static void push_decl_scope (tree);
6164 static void pop_decl_scope (void);
6165 static dw_die_ref scope_die_for (tree, dw_die_ref);
6166 static inline int local_scope_p (dw_die_ref);
6167 static inline int class_scope_p (dw_die_ref);
6168 static inline int class_or_namespace_scope_p (dw_die_ref);
6169 static void add_type_attribute (dw_die_ref, tree, int, int, dw_die_ref);
6170 static void add_calling_convention_attribute (dw_die_ref, tree);
6171 static const char *type_tag (const_tree);
6172 static tree member_declared_type (const_tree);
6173 #if 0
6174 static const char *decl_start_label (tree);
6175 #endif
6176 static void gen_array_type_die (tree, dw_die_ref);
6177 static void gen_descr_array_type_die (tree, struct array_descr_info *, dw_die_ref);
6178 #if 0
6179 static void gen_entry_point_die (tree, dw_die_ref);
6180 #endif
6181 static dw_die_ref gen_enumeration_type_die (tree, dw_die_ref);
6182 static dw_die_ref gen_formal_parameter_die (tree, tree, bool, dw_die_ref);
6183 static dw_die_ref gen_formal_parameter_pack_die  (tree, tree, dw_die_ref, tree*);
6184 static void gen_unspecified_parameters_die (tree, dw_die_ref);
6185 static void gen_formal_types_die (tree, dw_die_ref);
6186 static void gen_subprogram_die (tree, dw_die_ref);
6187 static void gen_variable_die (tree, tree, dw_die_ref);
6188 static void gen_const_die (tree, dw_die_ref);
6189 static void gen_label_die (tree, dw_die_ref);
6190 static void gen_lexical_block_die (tree, dw_die_ref, int);
6191 static void gen_inlined_subroutine_die (tree, dw_die_ref, int);
6192 static void gen_field_die (tree, dw_die_ref);
6193 static void gen_ptr_to_mbr_type_die (tree, dw_die_ref);
6194 static dw_die_ref gen_compile_unit_die (const char *);
6195 static void gen_inheritance_die (tree, tree, dw_die_ref);
6196 static void gen_member_die (tree, dw_die_ref);
6197 static void gen_struct_or_union_type_die (tree, dw_die_ref,
6198                                                 enum debug_info_usage);
6199 static void gen_subroutine_type_die (tree, dw_die_ref);
6200 static void gen_typedef_die (tree, dw_die_ref);
6201 static void gen_type_die (tree, dw_die_ref);
6202 static void gen_block_die (tree, dw_die_ref, int);
6203 static void decls_for_scope (tree, dw_die_ref, int);
6204 static int is_redundant_typedef (const_tree);
6205 static bool is_naming_typedef_decl (const_tree);
6206 static inline dw_die_ref get_context_die (tree);
6207 static void gen_namespace_die (tree, dw_die_ref);
6208 static void gen_decl_die (tree, tree, dw_die_ref);
6209 static dw_die_ref force_decl_die (tree);
6210 static dw_die_ref force_type_die (tree);
6211 static dw_die_ref setup_namespace_context (tree, dw_die_ref);
6212 static dw_die_ref declare_in_namespace (tree, dw_die_ref);
6213 static struct dwarf_file_data * lookup_filename (const char *);
6214 static void retry_incomplete_types (void);
6215 static void gen_type_die_for_member (tree, tree, dw_die_ref);
6216 static void gen_generic_params_dies (tree);
6217 static void gen_tagged_type_die (tree, dw_die_ref, enum debug_info_usage);
6218 static void gen_type_die_with_usage (tree, dw_die_ref, enum debug_info_usage);
6219 static void splice_child_die (dw_die_ref, dw_die_ref);
6220 static int file_info_cmp (const void *, const void *);
6221 static dw_loc_list_ref new_loc_list (dw_loc_descr_ref, const char *,
6222                                      const char *, const char *);
6223 static void output_loc_list (dw_loc_list_ref);
6224 static char *gen_internal_sym (const char *);
6225
6226 static void prune_unmark_dies (dw_die_ref);
6227 static void prune_unused_types_mark (dw_die_ref, int);
6228 static void prune_unused_types_walk (dw_die_ref);
6229 static void prune_unused_types_walk_attribs (dw_die_ref);
6230 static void prune_unused_types_prune (dw_die_ref);
6231 static void prune_unused_types (void);
6232 static int maybe_emit_file (struct dwarf_file_data *fd);
6233 static void append_entry_to_tmpl_value_parm_die_table (dw_die_ref, tree);
6234 static void gen_remaining_tmpl_value_param_die_attribute (void);
6235
6236 /* Section names used to hold DWARF debugging information.  */
6237 #ifndef DEBUG_INFO_SECTION
6238 #define DEBUG_INFO_SECTION      ".debug_info"
6239 #endif
6240 #ifndef DEBUG_ABBREV_SECTION
6241 #define DEBUG_ABBREV_SECTION    ".debug_abbrev"
6242 #endif
6243 #ifndef DEBUG_ARANGES_SECTION
6244 #define DEBUG_ARANGES_SECTION   ".debug_aranges"
6245 #endif
6246 #ifndef DEBUG_MACINFO_SECTION
6247 #define DEBUG_MACINFO_SECTION   ".debug_macinfo"
6248 #endif
6249 #ifndef DEBUG_LINE_SECTION
6250 #define DEBUG_LINE_SECTION      ".debug_line"
6251 #endif
6252 #ifndef DEBUG_LOC_SECTION
6253 #define DEBUG_LOC_SECTION       ".debug_loc"
6254 #endif
6255 #ifndef DEBUG_PUBNAMES_SECTION
6256 #define DEBUG_PUBNAMES_SECTION  ".debug_pubnames"
6257 #endif
6258 #ifndef DEBUG_PUBTYPES_SECTION
6259 #define DEBUG_PUBTYPES_SECTION  ".debug_pubtypes"
6260 #endif
6261 #ifndef DEBUG_DCALL_SECTION
6262 #define DEBUG_DCALL_SECTION     ".debug_dcall"
6263 #endif
6264 #ifndef DEBUG_VCALL_SECTION
6265 #define DEBUG_VCALL_SECTION     ".debug_vcall"
6266 #endif
6267 #ifndef DEBUG_STR_SECTION
6268 #define DEBUG_STR_SECTION       ".debug_str"
6269 #endif
6270 #ifndef DEBUG_RANGES_SECTION
6271 #define DEBUG_RANGES_SECTION    ".debug_ranges"
6272 #endif
6273
6274 /* Standard ELF section names for compiled code and data.  */
6275 #ifndef TEXT_SECTION_NAME
6276 #define TEXT_SECTION_NAME       ".text"
6277 #endif
6278
6279 /* Section flags for .debug_str section.  */
6280 #define DEBUG_STR_SECTION_FLAGS \
6281   (HAVE_GAS_SHF_MERGE && flag_merge_debug_strings               \
6282    ? SECTION_DEBUG | SECTION_MERGE | SECTION_STRINGS | 1        \
6283    : SECTION_DEBUG)
6284
6285 /* Labels we insert at beginning sections we can reference instead of
6286    the section names themselves.  */
6287
6288 #ifndef TEXT_SECTION_LABEL
6289 #define TEXT_SECTION_LABEL              "Ltext"
6290 #endif
6291 #ifndef COLD_TEXT_SECTION_LABEL
6292 #define COLD_TEXT_SECTION_LABEL         "Ltext_cold"
6293 #endif
6294 #ifndef DEBUG_LINE_SECTION_LABEL
6295 #define DEBUG_LINE_SECTION_LABEL        "Ldebug_line"
6296 #endif
6297 #ifndef DEBUG_INFO_SECTION_LABEL
6298 #define DEBUG_INFO_SECTION_LABEL        "Ldebug_info"
6299 #endif
6300 #ifndef DEBUG_ABBREV_SECTION_LABEL
6301 #define DEBUG_ABBREV_SECTION_LABEL      "Ldebug_abbrev"
6302 #endif
6303 #ifndef DEBUG_LOC_SECTION_LABEL
6304 #define DEBUG_LOC_SECTION_LABEL         "Ldebug_loc"
6305 #endif
6306 #ifndef DEBUG_RANGES_SECTION_LABEL
6307 #define DEBUG_RANGES_SECTION_LABEL      "Ldebug_ranges"
6308 #endif
6309 #ifndef DEBUG_MACINFO_SECTION_LABEL
6310 #define DEBUG_MACINFO_SECTION_LABEL     "Ldebug_macinfo"
6311 #endif
6312
6313 /* Mangled name attribute to use.  This used to be a vendor extension
6314    until DWARF 4 standardized it.  */
6315 #define AT_linkage_name \
6316   (dwarf_version >= 4 ? DW_AT_linkage_name : DW_AT_MIPS_linkage_name)
6317
6318
6319 /* Definitions of defaults for formats and names of various special
6320    (artificial) labels which may be generated within this file (when the -g
6321    options is used and DWARF2_DEBUGGING_INFO is in effect.
6322    If necessary, these may be overridden from within the tm.h file, but
6323    typically, overriding these defaults is unnecessary.  */
6324
6325 static char text_end_label[MAX_ARTIFICIAL_LABEL_BYTES];
6326 static char text_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
6327 static char cold_text_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
6328 static char cold_end_label[MAX_ARTIFICIAL_LABEL_BYTES];
6329 static char abbrev_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
6330 static char debug_info_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
6331 static char debug_line_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
6332 static char macinfo_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
6333 static char loc_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
6334 static char ranges_section_label[2 * MAX_ARTIFICIAL_LABEL_BYTES];
6335
6336 #ifndef TEXT_END_LABEL
6337 #define TEXT_END_LABEL          "Letext"
6338 #endif
6339 #ifndef COLD_END_LABEL
6340 #define COLD_END_LABEL          "Letext_cold"
6341 #endif
6342 #ifndef BLOCK_BEGIN_LABEL
6343 #define BLOCK_BEGIN_LABEL       "LBB"
6344 #endif
6345 #ifndef BLOCK_END_LABEL
6346 #define BLOCK_END_LABEL         "LBE"
6347 #endif
6348 #ifndef LINE_CODE_LABEL
6349 #define LINE_CODE_LABEL         "LM"
6350 #endif
6351 #ifndef SEPARATE_LINE_CODE_LABEL
6352 #define SEPARATE_LINE_CODE_LABEL        "LSM"
6353 #endif
6354
6355 \f
6356 /* We allow a language front-end to designate a function that is to be
6357    called to "demangle" any name before it is put into a DIE.  */
6358
6359 static const char *(*demangle_name_func) (const char *);
6360
6361 void
6362 dwarf2out_set_demangle_name_func (const char *(*func) (const char *))
6363 {
6364   demangle_name_func = func;
6365 }
6366
6367 /* Test if rtl node points to a pseudo register.  */
6368
6369 static inline int
6370 is_pseudo_reg (const_rtx rtl)
6371 {
6372   return ((REG_P (rtl) && REGNO (rtl) >= FIRST_PSEUDO_REGISTER)
6373           || (GET_CODE (rtl) == SUBREG
6374               && REGNO (SUBREG_REG (rtl)) >= FIRST_PSEUDO_REGISTER));
6375 }
6376
6377 /* Return a reference to a type, with its const and volatile qualifiers
6378    removed.  */
6379
6380 static inline tree
6381 type_main_variant (tree type)
6382 {
6383   type = TYPE_MAIN_VARIANT (type);
6384
6385   /* ??? There really should be only one main variant among any group of
6386      variants of a given type (and all of the MAIN_VARIANT values for all
6387      members of the group should point to that one type) but sometimes the C
6388      front-end messes this up for array types, so we work around that bug
6389      here.  */
6390   if (TREE_CODE (type) == ARRAY_TYPE)
6391     while (type != TYPE_MAIN_VARIANT (type))
6392       type = TYPE_MAIN_VARIANT (type);
6393
6394   return type;
6395 }
6396
6397 /* Return nonzero if the given type node represents a tagged type.  */
6398
6399 static inline int
6400 is_tagged_type (const_tree type)
6401 {
6402   enum tree_code code = TREE_CODE (type);
6403
6404   return (code == RECORD_TYPE || code == UNION_TYPE
6405           || code == QUAL_UNION_TYPE || code == ENUMERAL_TYPE);
6406 }
6407
6408 /* Convert a DIE tag into its string name.  */
6409
6410 static const char *
6411 dwarf_tag_name (unsigned int tag)
6412 {
6413   switch (tag)
6414     {
6415     case DW_TAG_padding:
6416       return "DW_TAG_padding";
6417     case DW_TAG_array_type:
6418       return "DW_TAG_array_type";
6419     case DW_TAG_class_type:
6420       return "DW_TAG_class_type";
6421     case DW_TAG_entry_point:
6422       return "DW_TAG_entry_point";
6423     case DW_TAG_enumeration_type:
6424       return "DW_TAG_enumeration_type";
6425     case DW_TAG_formal_parameter:
6426       return "DW_TAG_formal_parameter";
6427     case DW_TAG_imported_declaration:
6428       return "DW_TAG_imported_declaration";
6429     case DW_TAG_label:
6430       return "DW_TAG_label";
6431     case DW_TAG_lexical_block:
6432       return "DW_TAG_lexical_block";
6433     case DW_TAG_member:
6434       return "DW_TAG_member";
6435     case DW_TAG_pointer_type:
6436       return "DW_TAG_pointer_type";
6437     case DW_TAG_reference_type:
6438       return "DW_TAG_reference_type";
6439     case DW_TAG_compile_unit:
6440       return "DW_TAG_compile_unit";
6441     case DW_TAG_string_type:
6442       return "DW_TAG_string_type";
6443     case DW_TAG_structure_type:
6444       return "DW_TAG_structure_type";
6445     case DW_TAG_subroutine_type:
6446       return "DW_TAG_subroutine_type";
6447     case DW_TAG_typedef:
6448       return "DW_TAG_typedef";
6449     case DW_TAG_union_type:
6450       return "DW_TAG_union_type";
6451     case DW_TAG_unspecified_parameters:
6452       return "DW_TAG_unspecified_parameters";
6453     case DW_TAG_variant:
6454       return "DW_TAG_variant";
6455     case DW_TAG_common_block:
6456       return "DW_TAG_common_block";
6457     case DW_TAG_common_inclusion:
6458       return "DW_TAG_common_inclusion";
6459     case DW_TAG_inheritance:
6460       return "DW_TAG_inheritance";
6461     case DW_TAG_inlined_subroutine:
6462       return "DW_TAG_inlined_subroutine";
6463     case DW_TAG_module:
6464       return "DW_TAG_module";
6465     case DW_TAG_ptr_to_member_type:
6466       return "DW_TAG_ptr_to_member_type";
6467     case DW_TAG_set_type:
6468       return "DW_TAG_set_type";
6469     case DW_TAG_subrange_type:
6470       return "DW_TAG_subrange_type";
6471     case DW_TAG_with_stmt:
6472       return "DW_TAG_with_stmt";
6473     case DW_TAG_access_declaration:
6474       return "DW_TAG_access_declaration";
6475     case DW_TAG_base_type:
6476       return "DW_TAG_base_type";
6477     case DW_TAG_catch_block:
6478       return "DW_TAG_catch_block";
6479     case DW_TAG_const_type:
6480       return "DW_TAG_const_type";
6481     case DW_TAG_constant:
6482       return "DW_TAG_constant";
6483     case DW_TAG_enumerator:
6484       return "DW_TAG_enumerator";
6485     case DW_TAG_file_type:
6486       return "DW_TAG_file_type";
6487     case DW_TAG_friend:
6488       return "DW_TAG_friend";
6489     case DW_TAG_namelist:
6490       return "DW_TAG_namelist";
6491     case DW_TAG_namelist_item:
6492       return "DW_TAG_namelist_item";
6493     case DW_TAG_packed_type:
6494       return "DW_TAG_packed_type";
6495     case DW_TAG_subprogram:
6496       return "DW_TAG_subprogram";
6497     case DW_TAG_template_type_param:
6498       return "DW_TAG_template_type_param";
6499     case DW_TAG_template_value_param:
6500       return "DW_TAG_template_value_param";
6501     case DW_TAG_thrown_type:
6502       return "DW_TAG_thrown_type";
6503     case DW_TAG_try_block:
6504       return "DW_TAG_try_block";
6505     case DW_TAG_variant_part:
6506       return "DW_TAG_variant_part";
6507     case DW_TAG_variable:
6508       return "DW_TAG_variable";
6509     case DW_TAG_volatile_type:
6510       return "DW_TAG_volatile_type";
6511     case DW_TAG_dwarf_procedure:
6512       return "DW_TAG_dwarf_procedure";
6513     case DW_TAG_restrict_type:
6514       return "DW_TAG_restrict_type";
6515     case DW_TAG_interface_type:
6516       return "DW_TAG_interface_type";
6517     case DW_TAG_namespace:
6518       return "DW_TAG_namespace";
6519     case DW_TAG_imported_module:
6520       return "DW_TAG_imported_module";
6521     case DW_TAG_unspecified_type:
6522       return "DW_TAG_unspecified_type";
6523     case DW_TAG_partial_unit:
6524       return "DW_TAG_partial_unit";
6525     case DW_TAG_imported_unit:
6526       return "DW_TAG_imported_unit";
6527     case DW_TAG_condition:
6528       return "DW_TAG_condition";
6529     case DW_TAG_shared_type:
6530       return "DW_TAG_shared_type";
6531     case DW_TAG_type_unit:
6532       return "DW_TAG_type_unit";
6533     case DW_TAG_rvalue_reference_type:
6534       return "DW_TAG_rvalue_reference_type";
6535     case DW_TAG_template_alias:
6536       return "DW_TAG_template_alias";
6537     case DW_TAG_GNU_template_parameter_pack:
6538       return "DW_TAG_GNU_template_parameter_pack";
6539     case DW_TAG_GNU_formal_parameter_pack:
6540       return "DW_TAG_GNU_formal_parameter_pack";
6541     case DW_TAG_MIPS_loop:
6542       return "DW_TAG_MIPS_loop";
6543     case DW_TAG_format_label:
6544       return "DW_TAG_format_label";
6545     case DW_TAG_function_template:
6546       return "DW_TAG_function_template";
6547     case DW_TAG_class_template:
6548       return "DW_TAG_class_template";
6549     case DW_TAG_GNU_BINCL:
6550       return "DW_TAG_GNU_BINCL";
6551     case DW_TAG_GNU_EINCL:
6552       return "DW_TAG_GNU_EINCL";
6553     case DW_TAG_GNU_template_template_param:
6554       return "DW_TAG_GNU_template_template_param";
6555     default:
6556       return "DW_TAG_<unknown>";
6557     }
6558 }
6559
6560 /* Convert a DWARF attribute code into its string name.  */
6561
6562 static const char *
6563 dwarf_attr_name (unsigned int attr)
6564 {
6565   switch (attr)
6566     {
6567     case DW_AT_sibling:
6568       return "DW_AT_sibling";
6569     case DW_AT_location:
6570       return "DW_AT_location";
6571     case DW_AT_name:
6572       return "DW_AT_name";
6573     case DW_AT_ordering:
6574       return "DW_AT_ordering";
6575     case DW_AT_subscr_data:
6576       return "DW_AT_subscr_data";
6577     case DW_AT_byte_size:
6578       return "DW_AT_byte_size";
6579     case DW_AT_bit_offset:
6580       return "DW_AT_bit_offset";
6581     case DW_AT_bit_size:
6582       return "DW_AT_bit_size";
6583     case DW_AT_element_list:
6584       return "DW_AT_element_list";
6585     case DW_AT_stmt_list:
6586       return "DW_AT_stmt_list";
6587     case DW_AT_low_pc:
6588       return "DW_AT_low_pc";
6589     case DW_AT_high_pc:
6590       return "DW_AT_high_pc";
6591     case DW_AT_language:
6592       return "DW_AT_language";
6593     case DW_AT_member:
6594       return "DW_AT_member";
6595     case DW_AT_discr:
6596       return "DW_AT_discr";
6597     case DW_AT_discr_value:
6598       return "DW_AT_discr_value";
6599     case DW_AT_visibility:
6600       return "DW_AT_visibility";
6601     case DW_AT_import:
6602       return "DW_AT_import";
6603     case DW_AT_string_length:
6604       return "DW_AT_string_length";
6605     case DW_AT_common_reference:
6606       return "DW_AT_common_reference";
6607     case DW_AT_comp_dir:
6608       return "DW_AT_comp_dir";
6609     case DW_AT_const_value:
6610       return "DW_AT_const_value";
6611     case DW_AT_containing_type:
6612       return "DW_AT_containing_type";
6613     case DW_AT_default_value:
6614       return "DW_AT_default_value";
6615     case DW_AT_inline:
6616       return "DW_AT_inline";
6617     case DW_AT_is_optional:
6618       return "DW_AT_is_optional";
6619     case DW_AT_lower_bound:
6620       return "DW_AT_lower_bound";
6621     case DW_AT_producer:
6622       return "DW_AT_producer";
6623     case DW_AT_prototyped:
6624       return "DW_AT_prototyped";
6625     case DW_AT_return_addr:
6626       return "DW_AT_return_addr";
6627     case DW_AT_start_scope:
6628       return "DW_AT_start_scope";
6629     case DW_AT_bit_stride:
6630       return "DW_AT_bit_stride";
6631     case DW_AT_upper_bound:
6632       return "DW_AT_upper_bound";
6633     case DW_AT_abstract_origin:
6634       return "DW_AT_abstract_origin";
6635     case DW_AT_accessibility:
6636       return "DW_AT_accessibility";
6637     case DW_AT_address_class:
6638       return "DW_AT_address_class";
6639     case DW_AT_artificial:
6640       return "DW_AT_artificial";
6641     case DW_AT_base_types:
6642       return "DW_AT_base_types";
6643     case DW_AT_calling_convention:
6644       return "DW_AT_calling_convention";
6645     case DW_AT_count:
6646       return "DW_AT_count";
6647     case DW_AT_data_member_location:
6648       return "DW_AT_data_member_location";
6649     case DW_AT_decl_column:
6650       return "DW_AT_decl_column";
6651     case DW_AT_decl_file:
6652       return "DW_AT_decl_file";
6653     case DW_AT_decl_line:
6654       return "DW_AT_decl_line";
6655     case DW_AT_declaration:
6656       return "DW_AT_declaration";
6657     case DW_AT_discr_list:
6658       return "DW_AT_discr_list";
6659     case DW_AT_encoding:
6660       return "DW_AT_encoding";
6661     case DW_AT_external:
6662       return "DW_AT_external";
6663     case DW_AT_explicit:
6664       return "DW_AT_explicit";
6665     case DW_AT_frame_base:
6666       return "DW_AT_frame_base";
6667     case DW_AT_friend:
6668       return "DW_AT_friend";
6669     case DW_AT_identifier_case:
6670       return "DW_AT_identifier_case";
6671     case DW_AT_macro_info:
6672       return "DW_AT_macro_info";
6673     case DW_AT_namelist_items:
6674       return "DW_AT_namelist_items";
6675     case DW_AT_priority:
6676       return "DW_AT_priority";
6677     case DW_AT_segment:
6678       return "DW_AT_segment";
6679     case DW_AT_specification:
6680       return "DW_AT_specification";
6681     case DW_AT_static_link:
6682       return "DW_AT_static_link";
6683     case DW_AT_type:
6684       return "DW_AT_type";
6685     case DW_AT_use_location:
6686       return "DW_AT_use_location";
6687     case DW_AT_variable_parameter:
6688       return "DW_AT_variable_parameter";
6689     case DW_AT_virtuality:
6690       return "DW_AT_virtuality";
6691     case DW_AT_vtable_elem_location:
6692       return "DW_AT_vtable_elem_location";
6693
6694     case DW_AT_allocated:
6695       return "DW_AT_allocated";
6696     case DW_AT_associated:
6697       return "DW_AT_associated";
6698     case DW_AT_data_location:
6699       return "DW_AT_data_location";
6700     case DW_AT_byte_stride:
6701       return "DW_AT_byte_stride";
6702     case DW_AT_entry_pc:
6703       return "DW_AT_entry_pc";
6704     case DW_AT_use_UTF8:
6705       return "DW_AT_use_UTF8";
6706     case DW_AT_extension:
6707       return "DW_AT_extension";
6708     case DW_AT_ranges:
6709       return "DW_AT_ranges";
6710     case DW_AT_trampoline:
6711       return "DW_AT_trampoline";
6712     case DW_AT_call_column:
6713       return "DW_AT_call_column";
6714     case DW_AT_call_file:
6715       return "DW_AT_call_file";
6716     case DW_AT_call_line:
6717       return "DW_AT_call_line";
6718
6719     case DW_AT_signature:
6720       return "DW_AT_signature";
6721     case DW_AT_main_subprogram:
6722       return "DW_AT_main_subprogram";
6723     case DW_AT_data_bit_offset:
6724       return "DW_AT_data_bit_offset";
6725     case DW_AT_const_expr:
6726       return "DW_AT_const_expr";
6727     case DW_AT_enum_class:
6728       return "DW_AT_enum_class";
6729     case DW_AT_linkage_name:
6730       return "DW_AT_linkage_name";
6731
6732     case DW_AT_MIPS_fde:
6733       return "DW_AT_MIPS_fde";
6734     case DW_AT_MIPS_loop_begin:
6735       return "DW_AT_MIPS_loop_begin";
6736     case DW_AT_MIPS_tail_loop_begin:
6737       return "DW_AT_MIPS_tail_loop_begin";
6738     case DW_AT_MIPS_epilog_begin:
6739       return "DW_AT_MIPS_epilog_begin";
6740     case DW_AT_MIPS_loop_unroll_factor:
6741       return "DW_AT_MIPS_loop_unroll_factor";
6742     case DW_AT_MIPS_software_pipeline_depth:
6743       return "DW_AT_MIPS_software_pipeline_depth";
6744     case DW_AT_MIPS_linkage_name:
6745       return "DW_AT_MIPS_linkage_name";
6746     case DW_AT_MIPS_stride:
6747       return "DW_AT_MIPS_stride";
6748     case DW_AT_MIPS_abstract_name:
6749       return "DW_AT_MIPS_abstract_name";
6750     case DW_AT_MIPS_clone_origin:
6751       return "DW_AT_MIPS_clone_origin";
6752     case DW_AT_MIPS_has_inlines:
6753       return "DW_AT_MIPS_has_inlines";
6754
6755     case DW_AT_sf_names:
6756       return "DW_AT_sf_names";
6757     case DW_AT_src_info:
6758       return "DW_AT_src_info";
6759     case DW_AT_mac_info:
6760       return "DW_AT_mac_info";
6761     case DW_AT_src_coords:
6762       return "DW_AT_src_coords";
6763     case DW_AT_body_begin:
6764       return "DW_AT_body_begin";
6765     case DW_AT_body_end:
6766       return "DW_AT_body_end";
6767     case DW_AT_GNU_vector:
6768       return "DW_AT_GNU_vector";
6769     case DW_AT_GNU_guarded_by:
6770       return "DW_AT_GNU_guarded_by";
6771     case DW_AT_GNU_pt_guarded_by:
6772       return "DW_AT_GNU_pt_guarded_by";
6773     case DW_AT_GNU_guarded:
6774       return "DW_AT_GNU_guarded";
6775     case DW_AT_GNU_pt_guarded:
6776       return "DW_AT_GNU_pt_guarded";
6777     case DW_AT_GNU_locks_excluded:
6778       return "DW_AT_GNU_locks_excluded";
6779     case DW_AT_GNU_exclusive_locks_required:
6780       return "DW_AT_GNU_exclusive_locks_required";
6781     case DW_AT_GNU_shared_locks_required:
6782       return "DW_AT_GNU_shared_locks_required";
6783     case DW_AT_GNU_odr_signature:
6784       return "DW_AT_GNU_odr_signature";
6785     case DW_AT_GNU_template_name:
6786       return "DW_AT_GNU_template_name";
6787
6788     case DW_AT_VMS_rtnbeg_pd_address:
6789       return "DW_AT_VMS_rtnbeg_pd_address";
6790
6791     default:
6792       return "DW_AT_<unknown>";
6793     }
6794 }
6795
6796 /* Convert a DWARF value form code into its string name.  */
6797
6798 static const char *
6799 dwarf_form_name (unsigned int form)
6800 {
6801   switch (form)
6802     {
6803     case DW_FORM_addr:
6804       return "DW_FORM_addr";
6805     case DW_FORM_block2:
6806       return "DW_FORM_block2";
6807     case DW_FORM_block4:
6808       return "DW_FORM_block4";
6809     case DW_FORM_data2:
6810       return "DW_FORM_data2";
6811     case DW_FORM_data4:
6812       return "DW_FORM_data4";
6813     case DW_FORM_data8:
6814       return "DW_FORM_data8";
6815     case DW_FORM_string:
6816       return "DW_FORM_string";
6817     case DW_FORM_block:
6818       return "DW_FORM_block";
6819     case DW_FORM_block1:
6820       return "DW_FORM_block1";
6821     case DW_FORM_data1:
6822       return "DW_FORM_data1";
6823     case DW_FORM_flag:
6824       return "DW_FORM_flag";
6825     case DW_FORM_sdata:
6826       return "DW_FORM_sdata";
6827     case DW_FORM_strp:
6828       return "DW_FORM_strp";
6829     case DW_FORM_udata:
6830       return "DW_FORM_udata";
6831     case DW_FORM_ref_addr:
6832       return "DW_FORM_ref_addr";
6833     case DW_FORM_ref1:
6834       return "DW_FORM_ref1";
6835     case DW_FORM_ref2:
6836       return "DW_FORM_ref2";
6837     case DW_FORM_ref4:
6838       return "DW_FORM_ref4";
6839     case DW_FORM_ref8:
6840       return "DW_FORM_ref8";
6841     case DW_FORM_ref_udata:
6842       return "DW_FORM_ref_udata";
6843     case DW_FORM_indirect:
6844       return "DW_FORM_indirect";
6845     case DW_FORM_sec_offset:
6846       return "DW_FORM_sec_offset";
6847     case DW_FORM_exprloc:
6848       return "DW_FORM_exprloc";
6849     case DW_FORM_flag_present:
6850       return "DW_FORM_flag_present";
6851     case DW_FORM_ref_sig8:
6852       return "DW_FORM_ref_sig8";
6853     default:
6854       return "DW_FORM_<unknown>";
6855     }
6856 }
6857 \f
6858 /* Determine the "ultimate origin" of a decl.  The decl may be an inlined
6859    instance of an inlined instance of a decl which is local to an inline
6860    function, so we have to trace all of the way back through the origin chain
6861    to find out what sort of node actually served as the original seed for the
6862    given block.  */
6863
6864 static tree
6865 decl_ultimate_origin (const_tree decl)
6866 {
6867   if (!CODE_CONTAINS_STRUCT (TREE_CODE (decl), TS_DECL_COMMON))
6868     return NULL_TREE;
6869
6870   /* output_inline_function sets DECL_ABSTRACT_ORIGIN for all the
6871      nodes in the function to point to themselves; ignore that if
6872      we're trying to output the abstract instance of this function.  */
6873   if (DECL_ABSTRACT (decl) && DECL_ABSTRACT_ORIGIN (decl) == decl)
6874     return NULL_TREE;
6875
6876   /* Since the DECL_ABSTRACT_ORIGIN for a DECL is supposed to be the
6877      most distant ancestor, this should never happen.  */
6878   gcc_assert (!DECL_FROM_INLINE (DECL_ORIGIN (decl)));
6879
6880   return DECL_ABSTRACT_ORIGIN (decl);
6881 }
6882
6883 /* Get the class to which DECL belongs, if any.  In g++, the DECL_CONTEXT
6884    of a virtual function may refer to a base class, so we check the 'this'
6885    parameter.  */
6886
6887 static tree
6888 decl_class_context (tree decl)
6889 {
6890   tree context = NULL_TREE;
6891
6892   if (TREE_CODE (decl) != FUNCTION_DECL || ! DECL_VINDEX (decl))
6893     context = DECL_CONTEXT (decl);
6894   else
6895     context = TYPE_MAIN_VARIANT
6896       (TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (TREE_TYPE (decl)))));
6897
6898   if (context && !TYPE_P (context))
6899     context = NULL_TREE;
6900
6901   return context;
6902 }
6903 \f
6904 /* Add an attribute/value pair to a DIE.  */
6905
6906 static inline void
6907 add_dwarf_attr (dw_die_ref die, dw_attr_ref attr)
6908 {
6909   /* Maybe this should be an assert?  */
6910   if (die == NULL)
6911     return;
6912
6913   if (die->die_attr == NULL)
6914     die->die_attr = VEC_alloc (dw_attr_node, gc, 1);
6915   VEC_safe_push (dw_attr_node, gc, die->die_attr, attr);
6916 }
6917
6918 static inline enum dw_val_class
6919 AT_class (dw_attr_ref a)
6920 {
6921   return a->dw_attr_val.val_class;
6922 }
6923
6924 /* Add a flag value attribute to a DIE.  */
6925
6926 static inline void
6927 add_AT_flag (dw_die_ref die, enum dwarf_attribute attr_kind, unsigned int flag)
6928 {
6929   dw_attr_node attr;
6930
6931   attr.dw_attr = attr_kind;
6932   attr.dw_attr_val.val_class = dw_val_class_flag;
6933   attr.dw_attr_val.v.val_flag = flag;
6934   add_dwarf_attr (die, &attr);
6935 }
6936
6937 static inline unsigned
6938 AT_flag (dw_attr_ref a)
6939 {
6940   gcc_assert (a && AT_class (a) == dw_val_class_flag);
6941   return a->dw_attr_val.v.val_flag;
6942 }
6943
6944 /* Add a signed integer attribute value to a DIE.  */
6945
6946 static inline void
6947 add_AT_int (dw_die_ref die, enum dwarf_attribute attr_kind, HOST_WIDE_INT int_val)
6948 {
6949   dw_attr_node attr;
6950
6951   attr.dw_attr = attr_kind;
6952   attr.dw_attr_val.val_class = dw_val_class_const;
6953   attr.dw_attr_val.v.val_int = int_val;
6954   add_dwarf_attr (die, &attr);
6955 }
6956
6957 static inline HOST_WIDE_INT
6958 AT_int (dw_attr_ref a)
6959 {
6960   gcc_assert (a && AT_class (a) == dw_val_class_const);
6961   return a->dw_attr_val.v.val_int;
6962 }
6963
6964 /* Add an unsigned integer attribute value to a DIE.  */
6965
6966 static inline void
6967 add_AT_unsigned (dw_die_ref die, enum dwarf_attribute attr_kind,
6968                  unsigned HOST_WIDE_INT unsigned_val)
6969 {
6970   dw_attr_node attr;
6971
6972   attr.dw_attr = attr_kind;
6973   attr.dw_attr_val.val_class = dw_val_class_unsigned_const;
6974   attr.dw_attr_val.v.val_unsigned = unsigned_val;
6975   add_dwarf_attr (die, &attr);
6976 }
6977
6978 static inline unsigned HOST_WIDE_INT
6979 AT_unsigned (dw_attr_ref a)
6980 {
6981   gcc_assert (a && AT_class (a) == dw_val_class_unsigned_const);
6982   return a->dw_attr_val.v.val_unsigned;
6983 }
6984
6985 /* Add an unsigned double integer attribute value to a DIE.  */
6986
6987 static inline void
6988 add_AT_double (dw_die_ref die, enum dwarf_attribute attr_kind,
6989                HOST_WIDE_INT high, unsigned HOST_WIDE_INT low)
6990 {
6991   dw_attr_node attr;
6992
6993   attr.dw_attr = attr_kind;
6994   attr.dw_attr_val.val_class = dw_val_class_const_double;
6995   attr.dw_attr_val.v.val_double.high = high;
6996   attr.dw_attr_val.v.val_double.low = low;
6997   add_dwarf_attr (die, &attr);
6998 }
6999
7000 /* Add a floating point attribute value to a DIE and return it.  */
7001
7002 static inline void
7003 add_AT_vec (dw_die_ref die, enum dwarf_attribute attr_kind,
7004             unsigned int length, unsigned int elt_size, unsigned char *array)
7005 {
7006   dw_attr_node attr;
7007
7008   attr.dw_attr = attr_kind;
7009   attr.dw_attr_val.val_class = dw_val_class_vec;
7010   attr.dw_attr_val.v.val_vec.length = length;
7011   attr.dw_attr_val.v.val_vec.elt_size = elt_size;
7012   attr.dw_attr_val.v.val_vec.array = array;
7013   add_dwarf_attr (die, &attr);
7014 }
7015
7016 /* Add an 8-byte data attribute value to a DIE.  */
7017
7018 static inline void
7019 add_AT_data8 (dw_die_ref die, enum dwarf_attribute attr_kind,
7020               unsigned char data8[8])
7021 {
7022   dw_attr_node attr;
7023
7024   attr.dw_attr = attr_kind;
7025   attr.dw_attr_val.val_class = dw_val_class_data8;
7026   memcpy (attr.dw_attr_val.v.val_data8, data8, 8);
7027   add_dwarf_attr (die, &attr);
7028 }
7029
7030 /* Hash and equality functions for debug_str_hash.  */
7031
7032 static hashval_t
7033 debug_str_do_hash (const void *x)
7034 {
7035   return htab_hash_string (((const struct indirect_string_node *)x)->str);
7036 }
7037
7038 static int
7039 debug_str_eq (const void *x1, const void *x2)
7040 {
7041   return strcmp ((((const struct indirect_string_node *)x1)->str),
7042                  (const char *)x2) == 0;
7043 }
7044
7045 /* Add STR to the indirect string hash table.  */
7046
7047 static struct indirect_string_node *
7048 find_AT_string (const char *str)
7049 {
7050   struct indirect_string_node *node;
7051   void **slot;
7052
7053   if (! debug_str_hash)
7054     debug_str_hash = htab_create_ggc (10, debug_str_do_hash,
7055                                       debug_str_eq, NULL);
7056
7057   slot = htab_find_slot_with_hash (debug_str_hash, str,
7058                                    htab_hash_string (str), INSERT);
7059   if (*slot == NULL)
7060     {
7061       node = (struct indirect_string_node *)
7062                ggc_alloc_cleared (sizeof (struct indirect_string_node));
7063       node->str = ggc_strdup (str);
7064       *slot = node;
7065     }
7066   else
7067     node = (struct indirect_string_node *) *slot;
7068
7069   node->refcount++;
7070   return node;
7071 }
7072
7073 /* Add a string attribute value to a DIE.  */
7074
7075 static inline void
7076 add_AT_string (dw_die_ref die, enum dwarf_attribute attr_kind, const char *str)
7077 {
7078   dw_attr_node attr;
7079   struct indirect_string_node *node;
7080
7081   node = find_AT_string (str);
7082
7083   attr.dw_attr = attr_kind;
7084   attr.dw_attr_val.val_class = dw_val_class_str;
7085   attr.dw_attr_val.v.val_str = node;
7086   add_dwarf_attr (die, &attr);
7087 }
7088
7089 /* Create a label for an indirect string node, ensuring it is going to
7090    be output, unless its reference count goes down to zero.  */
7091
7092 static inline void
7093 gen_label_for_indirect_string (struct indirect_string_node *node)
7094 {
7095   char label[32];
7096
7097   if (node->label)
7098     return;
7099
7100   ASM_GENERATE_INTERNAL_LABEL (label, "LASF", dw2_string_counter);
7101   ++dw2_string_counter;
7102   node->label = xstrdup (label);
7103 }
7104
7105 /* Create a SYMBOL_REF rtx whose value is the initial address of a
7106    debug string STR.  */
7107
7108 static inline rtx
7109 get_debug_string_label (const char *str)
7110 {
7111   struct indirect_string_node *node = find_AT_string (str);
7112
7113   debug_str_hash_forced = true;
7114
7115   gen_label_for_indirect_string (node);
7116
7117   return gen_rtx_SYMBOL_REF (Pmode, node->label);
7118 }
7119
7120 static inline const char *
7121 AT_string (dw_attr_ref a)
7122 {
7123   gcc_assert (a && AT_class (a) == dw_val_class_str);
7124   return a->dw_attr_val.v.val_str->str;
7125 }
7126
7127 /* Find out whether a string should be output inline in DIE
7128    or out-of-line in .debug_str section.  */
7129
7130 static enum dwarf_form
7131 AT_string_form (dw_attr_ref a)
7132 {
7133   struct indirect_string_node *node;
7134   unsigned int len;
7135
7136   gcc_assert (a && AT_class (a) == dw_val_class_str);
7137
7138   node = a->dw_attr_val.v.val_str;
7139   if (node->form)
7140     return node->form;
7141
7142   len = strlen (node->str) + 1;
7143
7144   /* If the string is shorter or equal to the size of the reference, it is
7145      always better to put it inline.  */
7146   if (len <= DWARF_OFFSET_SIZE || node->refcount == 0)
7147     return node->form = DW_FORM_string;
7148
7149   /* If we cannot expect the linker to merge strings in .debug_str
7150      section, only put it into .debug_str if it is worth even in this
7151      single module.  */
7152   if (DWARF2_INDIRECT_STRING_SUPPORT_MISSING_ON_TARGET
7153       || ((debug_str_section->common.flags & SECTION_MERGE) == 0
7154       && (len - DWARF_OFFSET_SIZE) * node->refcount <= len))
7155     return node->form = DW_FORM_string;
7156
7157   gen_label_for_indirect_string (node);
7158
7159   return node->form = DW_FORM_strp;
7160 }
7161
7162 /* Add a DIE reference attribute value to a DIE.  */
7163
7164 static inline void
7165 add_AT_die_ref (dw_die_ref die, enum dwarf_attribute attr_kind, dw_die_ref targ_die)
7166 {
7167   dw_attr_node attr;
7168
7169   attr.dw_attr = attr_kind;
7170   attr.dw_attr_val.val_class = dw_val_class_die_ref;
7171   attr.dw_attr_val.v.val_die_ref.die = targ_die;
7172   attr.dw_attr_val.v.val_die_ref.external = 0;
7173   add_dwarf_attr (die, &attr);
7174 }
7175
7176 /* Add an AT_specification attribute to a DIE, and also make the back
7177    pointer from the specification to the definition.  */
7178
7179 static inline void
7180 add_AT_specification (dw_die_ref die, dw_die_ref targ_die)
7181 {
7182   add_AT_die_ref (die, DW_AT_specification, targ_die);
7183   gcc_assert (!targ_die->die_definition);
7184   targ_die->die_definition = die;
7185 }
7186
7187 static inline dw_die_ref
7188 AT_ref (dw_attr_ref a)
7189 {
7190   gcc_assert (a && AT_class (a) == dw_val_class_die_ref);
7191   return a->dw_attr_val.v.val_die_ref.die;
7192 }
7193
7194 static inline int
7195 AT_ref_external (dw_attr_ref a)
7196 {
7197   if (a && AT_class (a) == dw_val_class_die_ref)
7198     return a->dw_attr_val.v.val_die_ref.external;
7199
7200   return 0;
7201 }
7202
7203 static inline void
7204 set_AT_ref_external (dw_attr_ref a, int i)
7205 {
7206   gcc_assert (a && AT_class (a) == dw_val_class_die_ref);
7207   a->dw_attr_val.v.val_die_ref.external = i;
7208 }
7209
7210 /* Add an FDE reference attribute value to a DIE.  */
7211
7212 static inline void
7213 add_AT_fde_ref (dw_die_ref die, enum dwarf_attribute attr_kind, unsigned int targ_fde)
7214 {
7215   dw_attr_node attr;
7216
7217   attr.dw_attr = attr_kind;
7218   attr.dw_attr_val.val_class = dw_val_class_fde_ref;
7219   attr.dw_attr_val.v.val_fde_index = targ_fde;
7220   add_dwarf_attr (die, &attr);
7221 }
7222
7223 /* Add a location description attribute value to a DIE.  */
7224
7225 static inline void
7226 add_AT_loc (dw_die_ref die, enum dwarf_attribute attr_kind, dw_loc_descr_ref loc)
7227 {
7228   dw_attr_node attr;
7229
7230   attr.dw_attr = attr_kind;
7231   attr.dw_attr_val.val_class = dw_val_class_loc;
7232   attr.dw_attr_val.v.val_loc = loc;
7233   add_dwarf_attr (die, &attr);
7234 }
7235
7236 static inline dw_loc_descr_ref
7237 AT_loc (dw_attr_ref a)
7238 {
7239   gcc_assert (a && AT_class (a) == dw_val_class_loc);
7240   return a->dw_attr_val.v.val_loc;
7241 }
7242
7243 static inline void
7244 add_AT_loc_list (dw_die_ref die, enum dwarf_attribute attr_kind, dw_loc_list_ref loc_list)
7245 {
7246   dw_attr_node attr;
7247
7248   attr.dw_attr = attr_kind;
7249   attr.dw_attr_val.val_class = dw_val_class_loc_list;
7250   attr.dw_attr_val.v.val_loc_list = loc_list;
7251   add_dwarf_attr (die, &attr);
7252   have_location_lists = true;
7253 }
7254
7255 static inline dw_loc_list_ref
7256 AT_loc_list (dw_attr_ref a)
7257 {
7258   gcc_assert (a && AT_class (a) == dw_val_class_loc_list);
7259   return a->dw_attr_val.v.val_loc_list;
7260 }
7261
7262 static inline dw_loc_list_ref *
7263 AT_loc_list_ptr (dw_attr_ref a)
7264 {
7265   gcc_assert (a && AT_class (a) == dw_val_class_loc_list);
7266   return &a->dw_attr_val.v.val_loc_list;
7267 }
7268
7269 /* Add an address constant attribute value to a DIE.  */
7270
7271 static inline void
7272 add_AT_addr (dw_die_ref die, enum dwarf_attribute attr_kind, rtx addr)
7273 {
7274   dw_attr_node attr;
7275
7276   attr.dw_attr = attr_kind;
7277   attr.dw_attr_val.val_class = dw_val_class_addr;
7278   attr.dw_attr_val.v.val_addr = addr;
7279   add_dwarf_attr (die, &attr);
7280 }
7281
7282 /* Get the RTX from to an address DIE attribute.  */
7283
7284 static inline rtx
7285 AT_addr (dw_attr_ref a)
7286 {
7287   gcc_assert (a && AT_class (a) == dw_val_class_addr);
7288   return a->dw_attr_val.v.val_addr;
7289 }
7290
7291 /* Add a file attribute value to a DIE.  */
7292
7293 static inline void
7294 add_AT_file (dw_die_ref die, enum dwarf_attribute attr_kind,
7295              struct dwarf_file_data *fd)
7296 {
7297   dw_attr_node attr;
7298
7299   attr.dw_attr = attr_kind;
7300   attr.dw_attr_val.val_class = dw_val_class_file;
7301   attr.dw_attr_val.v.val_file = fd;
7302   add_dwarf_attr (die, &attr);
7303 }
7304
7305 /* Get the dwarf_file_data from a file DIE attribute.  */
7306
7307 static inline struct dwarf_file_data *
7308 AT_file (dw_attr_ref a)
7309 {
7310   gcc_assert (a && AT_class (a) == dw_val_class_file);
7311   return a->dw_attr_val.v.val_file;
7312 }
7313
7314 /* Add a label identifier attribute value to a DIE.  */
7315
7316 static inline void
7317 add_AT_lbl_id (dw_die_ref die, enum dwarf_attribute attr_kind, const char *lbl_id)
7318 {
7319   dw_attr_node attr;
7320
7321   attr.dw_attr = attr_kind;
7322   attr.dw_attr_val.val_class = dw_val_class_lbl_id;
7323   attr.dw_attr_val.v.val_lbl_id = xstrdup (lbl_id);
7324   add_dwarf_attr (die, &attr);
7325 }
7326
7327 /* Add a section offset attribute value to a DIE, an offset into the
7328    debug_line section.  */
7329
7330 static inline void
7331 add_AT_lineptr (dw_die_ref die, enum dwarf_attribute attr_kind,
7332                 const char *label)
7333 {
7334   dw_attr_node attr;
7335
7336   attr.dw_attr = attr_kind;
7337   attr.dw_attr_val.val_class = dw_val_class_lineptr;
7338   attr.dw_attr_val.v.val_lbl_id = xstrdup (label);
7339   add_dwarf_attr (die, &attr);
7340 }
7341
7342 /* Add a section offset attribute value to a DIE, an offset into the
7343    debug_macinfo section.  */
7344
7345 static inline void
7346 add_AT_macptr (dw_die_ref die, enum dwarf_attribute attr_kind,
7347                const char *label)
7348 {
7349   dw_attr_node attr;
7350
7351   attr.dw_attr = attr_kind;
7352   attr.dw_attr_val.val_class = dw_val_class_macptr;
7353   attr.dw_attr_val.v.val_lbl_id = xstrdup (label);
7354   add_dwarf_attr (die, &attr);
7355 }
7356
7357 /* Add an offset attribute value to a DIE.  */
7358
7359 static inline void
7360 add_AT_offset (dw_die_ref die, enum dwarf_attribute attr_kind,
7361                unsigned HOST_WIDE_INT offset)
7362 {
7363   dw_attr_node attr;
7364
7365   attr.dw_attr = attr_kind;
7366   attr.dw_attr_val.val_class = dw_val_class_offset;
7367   attr.dw_attr_val.v.val_offset = offset;
7368   add_dwarf_attr (die, &attr);
7369 }
7370
7371 /* Add an range_list attribute value to a DIE.  */
7372
7373 static void
7374 add_AT_range_list (dw_die_ref die, enum dwarf_attribute attr_kind,
7375                    long unsigned int offset)
7376 {
7377   dw_attr_node attr;
7378
7379   attr.dw_attr = attr_kind;
7380   attr.dw_attr_val.val_class = dw_val_class_range_list;
7381   attr.dw_attr_val.v.val_offset = offset;
7382   add_dwarf_attr (die, &attr);
7383 }
7384
7385 static inline const char *
7386 AT_lbl (dw_attr_ref a)
7387 {
7388   gcc_assert (a && (AT_class (a) == dw_val_class_lbl_id
7389                     || AT_class (a) == dw_val_class_lineptr
7390                     || AT_class (a) == dw_val_class_macptr));
7391   return a->dw_attr_val.v.val_lbl_id;
7392 }
7393
7394 /* Get the attribute of type attr_kind.  */
7395
7396 static dw_attr_ref
7397 get_AT (dw_die_ref die, enum dwarf_attribute attr_kind)
7398 {
7399   dw_attr_ref a;
7400   unsigned ix;
7401   dw_die_ref spec = NULL;
7402
7403   if (! die)
7404     return NULL;
7405
7406   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
7407     if (a->dw_attr == attr_kind)
7408       return a;
7409     else if (a->dw_attr == DW_AT_specification
7410              || a->dw_attr == DW_AT_abstract_origin)
7411       spec = AT_ref (a);
7412
7413   if (spec)
7414     return get_AT (spec, attr_kind);
7415
7416   return NULL;
7417 }
7418
7419 /* Return the "low pc" attribute value, typically associated with a subprogram
7420    DIE.  Return null if the "low pc" attribute is either not present, or if it
7421    cannot be represented as an assembler label identifier.  */
7422
7423 static inline const char *
7424 get_AT_low_pc (dw_die_ref die)
7425 {
7426   dw_attr_ref a = get_AT (die, DW_AT_low_pc);
7427
7428   return a ? AT_lbl (a) : NULL;
7429 }
7430
7431 /* Return the "high pc" attribute value, typically associated with a subprogram
7432    DIE.  Return null if the "high pc" attribute is either not present, or if it
7433    cannot be represented as an assembler label identifier.  */
7434
7435 static inline const char *
7436 get_AT_hi_pc (dw_die_ref die)
7437 {
7438   dw_attr_ref a = get_AT (die, DW_AT_high_pc);
7439
7440   return a ? AT_lbl (a) : NULL;
7441 }
7442
7443 /* Return the value of the string attribute designated by ATTR_KIND, or
7444    NULL if it is not present.  */
7445
7446 static inline const char *
7447 get_AT_string (dw_die_ref die, enum dwarf_attribute attr_kind)
7448 {
7449   dw_attr_ref a = get_AT (die, attr_kind);
7450
7451   return a ? AT_string (a) : NULL;
7452 }
7453
7454 /* Return the value of the flag attribute designated by ATTR_KIND, or -1
7455    if it is not present.  */
7456
7457 static inline int
7458 get_AT_flag (dw_die_ref die, enum dwarf_attribute attr_kind)
7459 {
7460   dw_attr_ref a = get_AT (die, attr_kind);
7461
7462   return a ? AT_flag (a) : 0;
7463 }
7464
7465 /* Return the value of the unsigned attribute designated by ATTR_KIND, or 0
7466    if it is not present.  */
7467
7468 static inline unsigned
7469 get_AT_unsigned (dw_die_ref die, enum dwarf_attribute attr_kind)
7470 {
7471   dw_attr_ref a = get_AT (die, attr_kind);
7472
7473   return a ? AT_unsigned (a) : 0;
7474 }
7475
7476 static inline dw_die_ref
7477 get_AT_ref (dw_die_ref die, enum dwarf_attribute attr_kind)
7478 {
7479   dw_attr_ref a = get_AT (die, attr_kind);
7480
7481   return a ? AT_ref (a) : NULL;
7482 }
7483
7484 static inline struct dwarf_file_data *
7485 get_AT_file (dw_die_ref die, enum dwarf_attribute attr_kind)
7486 {
7487   dw_attr_ref a = get_AT (die, attr_kind);
7488
7489   return a ? AT_file (a) : NULL;
7490 }
7491
7492 /* Return TRUE if the language is C++.  */
7493
7494 static inline bool
7495 is_cxx (void)
7496 {
7497   unsigned int lang = get_AT_unsigned (comp_unit_die, DW_AT_language);
7498
7499   return lang == DW_LANG_C_plus_plus || lang == DW_LANG_ObjC_plus_plus;
7500 }
7501
7502 /* Return TRUE if the language is Fortran.  */
7503
7504 static inline bool
7505 is_fortran (void)
7506 {
7507   unsigned int lang = get_AT_unsigned (comp_unit_die, DW_AT_language);
7508
7509   return (lang == DW_LANG_Fortran77
7510           || lang == DW_LANG_Fortran90
7511           || lang == DW_LANG_Fortran95);
7512 }
7513
7514 /* Return TRUE if the language is Ada.  */
7515
7516 static inline bool
7517 is_ada (void)
7518 {
7519   unsigned int lang = get_AT_unsigned (comp_unit_die, DW_AT_language);
7520
7521   return lang == DW_LANG_Ada95 || lang == DW_LANG_Ada83;
7522 }
7523
7524 /* Remove the specified attribute if present.  */
7525
7526 static void
7527 remove_AT (dw_die_ref die, enum dwarf_attribute attr_kind)
7528 {
7529   dw_attr_ref a;
7530   unsigned ix;
7531
7532   if (! die)
7533     return;
7534
7535   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
7536     if (a->dw_attr == attr_kind)
7537       {
7538         if (AT_class (a) == dw_val_class_str)
7539           if (a->dw_attr_val.v.val_str->refcount)
7540             a->dw_attr_val.v.val_str->refcount--;
7541
7542         /* VEC_ordered_remove should help reduce the number of abbrevs
7543            that are needed.  */
7544         VEC_ordered_remove (dw_attr_node, die->die_attr, ix);
7545         return;
7546       }
7547 }
7548
7549 /* Remove CHILD from its parent.  PREV must have the property that
7550    PREV->DIE_SIB == CHILD.  Does not alter CHILD.  */
7551
7552 static void
7553 remove_child_with_prev (dw_die_ref child, dw_die_ref prev)
7554 {
7555   gcc_assert (child->die_parent == prev->die_parent);
7556   gcc_assert (prev->die_sib == child);
7557   if (prev == child)
7558     {
7559       gcc_assert (child->die_parent->die_child == child);
7560       prev = NULL;
7561     }
7562   else
7563     prev->die_sib = child->die_sib;
7564   if (child->die_parent->die_child == child)
7565     child->die_parent->die_child = prev;
7566 }
7567
7568 /* Replace OLD_CHILD with NEW_CHILD.  PREV must have the property that
7569    PREV->DIE_SIB == OLD_CHILD.  Does not alter OLD_CHILD.  */
7570
7571 static void
7572 replace_child (dw_die_ref old_child, dw_die_ref new_child, dw_die_ref prev)
7573 {
7574   dw_die_ref parent = old_child->die_parent;
7575
7576   gcc_assert (parent == prev->die_parent);
7577   gcc_assert (prev->die_sib == old_child);
7578
7579   new_child->die_parent = parent;
7580   if (prev == old_child)
7581     {
7582       gcc_assert (parent->die_child == old_child);
7583       new_child->die_sib = new_child;
7584     }
7585   else
7586     {
7587       prev->die_sib = new_child;
7588       new_child->die_sib = old_child->die_sib;
7589     }
7590   if (old_child->die_parent->die_child == old_child)
7591     old_child->die_parent->die_child = new_child;
7592 }
7593
7594 /* Move all children from OLD_PARENT to NEW_PARENT.  */
7595
7596 static void
7597 move_all_children (dw_die_ref old_parent, dw_die_ref new_parent)
7598 {
7599   dw_die_ref c;
7600   new_parent->die_child = old_parent->die_child;
7601   old_parent->die_child = NULL;
7602   FOR_EACH_CHILD (new_parent, c, c->die_parent = new_parent);
7603 }
7604
7605 /* Remove child DIE whose die_tag is TAG.  Do nothing if no child
7606    matches TAG.  */
7607
7608 static void
7609 remove_child_TAG (dw_die_ref die, enum dwarf_tag tag)
7610 {
7611   dw_die_ref c;
7612
7613   c = die->die_child;
7614   if (c) do {
7615     dw_die_ref prev = c;
7616     c = c->die_sib;
7617     while (c->die_tag == tag)
7618       {
7619         remove_child_with_prev (c, prev);
7620         /* Might have removed every child.  */
7621         if (c == c->die_sib)
7622           return;
7623         c = c->die_sib;
7624       }
7625   } while (c != die->die_child);
7626 }
7627
7628 /* Add a CHILD_DIE as the last child of DIE.  */
7629
7630 static void
7631 add_child_die (dw_die_ref die, dw_die_ref child_die)
7632 {
7633   /* FIXME this should probably be an assert.  */
7634   if (! die || ! child_die)
7635     return;
7636   gcc_assert (die != child_die);
7637
7638   child_die->die_parent = die;
7639   if (die->die_child)
7640     {
7641       child_die->die_sib = die->die_child->die_sib;
7642       die->die_child->die_sib = child_die;
7643     }
7644   else
7645     child_die->die_sib = child_die;
7646   die->die_child = child_die;
7647 }
7648
7649 /* Move CHILD, which must be a child of PARENT or the DIE for which PARENT
7650    is the specification, to the end of PARENT's list of children.
7651    This is done by removing and re-adding it.  */
7652
7653 static void
7654 splice_child_die (dw_die_ref parent, dw_die_ref child)
7655 {
7656   dw_die_ref p;
7657
7658   /* We want the declaration DIE from inside the class, not the
7659      specification DIE at toplevel.  */
7660   if (child->die_parent != parent)
7661     {
7662       dw_die_ref tmp = get_AT_ref (child, DW_AT_specification);
7663
7664       if (tmp)
7665         child = tmp;
7666     }
7667
7668   gcc_assert (child->die_parent == parent
7669               || (child->die_parent
7670                   == get_AT_ref (parent, DW_AT_specification)));
7671
7672   for (p = child->die_parent->die_child; ; p = p->die_sib)
7673     if (p->die_sib == child)
7674       {
7675         remove_child_with_prev (child, p);
7676         break;
7677       }
7678
7679   add_child_die (parent, child);
7680 }
7681
7682 /* Return a pointer to a newly created DIE node.  */
7683
7684 static inline dw_die_ref
7685 new_die (enum dwarf_tag tag_value, dw_die_ref parent_die, tree t)
7686 {
7687   dw_die_ref die = GGC_CNEW (die_node);
7688
7689   die->die_tag = tag_value;
7690
7691   if (parent_die != NULL)
7692     add_child_die (parent_die, die);
7693   else
7694     {
7695       limbo_die_node *limbo_node;
7696
7697       limbo_node = GGC_CNEW (limbo_die_node);
7698       limbo_node->die = die;
7699       limbo_node->created_for = t;
7700       limbo_node->next = limbo_die_list;
7701       limbo_die_list = limbo_node;
7702     }
7703
7704   return die;
7705 }
7706
7707 /* Return the DIE associated with the given type specifier.  */
7708
7709 static inline dw_die_ref
7710 lookup_type_die (tree type)
7711 {
7712   return TYPE_SYMTAB_DIE (type);
7713 }
7714
7715 /* Equate a DIE to a given type specifier.  */
7716
7717 static inline void
7718 equate_type_number_to_die (tree type, dw_die_ref type_die)
7719 {
7720   TYPE_SYMTAB_DIE (type) = type_die;
7721 }
7722
7723 /* Returns a hash value for X (which really is a die_struct).  */
7724
7725 static hashval_t
7726 decl_die_table_hash (const void *x)
7727 {
7728   return (hashval_t) ((const_dw_die_ref) x)->decl_id;
7729 }
7730
7731 /* Return nonzero if decl_id of die_struct X is the same as UID of decl *Y.  */
7732
7733 static int
7734 decl_die_table_eq (const void *x, const void *y)
7735 {
7736   return (((const_dw_die_ref) x)->decl_id == DECL_UID ((const_tree) y));
7737 }
7738
7739 /* Return the DIE associated with a given declaration.  */
7740
7741 static inline dw_die_ref
7742 lookup_decl_die (tree decl)
7743 {
7744   return (dw_die_ref) htab_find_with_hash (decl_die_table, decl, DECL_UID (decl));
7745 }
7746
7747 /* Returns a hash value for X (which really is a var_loc_list).  */
7748
7749 static hashval_t
7750 decl_loc_table_hash (const void *x)
7751 {
7752   return (hashval_t) ((const var_loc_list *) x)->decl_id;
7753 }
7754
7755 /* Return nonzero if decl_id of var_loc_list X is the same as
7756    UID of decl *Y.  */
7757
7758 static int
7759 decl_loc_table_eq (const void *x, const void *y)
7760 {
7761   return (((const var_loc_list *) x)->decl_id == DECL_UID ((const_tree) y));
7762 }
7763
7764 /* Return the var_loc list associated with a given declaration.  */
7765
7766 static inline var_loc_list *
7767 lookup_decl_loc (const_tree decl)
7768 {
7769   if (!decl_loc_table)
7770     return NULL;
7771   return (var_loc_list *)
7772     htab_find_with_hash (decl_loc_table, decl, DECL_UID (decl));
7773 }
7774
7775 /* Equate a DIE to a particular declaration.  */
7776
7777 static void
7778 equate_decl_number_to_die (tree decl, dw_die_ref decl_die)
7779 {
7780   unsigned int decl_id = DECL_UID (decl);
7781   void **slot;
7782
7783   slot = htab_find_slot_with_hash (decl_die_table, decl, decl_id, INSERT);
7784   *slot = decl_die;
7785   decl_die->decl_id = decl_id;
7786 }
7787
7788 /* Return how many bits covers PIECE EXPR_LIST.  */
7789
7790 static int
7791 decl_piece_bitsize (rtx piece)
7792 {
7793   int ret = (int) GET_MODE (piece);
7794   if (ret)
7795     return ret;
7796   gcc_assert (GET_CODE (XEXP (piece, 0)) == CONCAT
7797               && CONST_INT_P (XEXP (XEXP (piece, 0), 0)));
7798   return INTVAL (XEXP (XEXP (piece, 0), 0));
7799 }
7800
7801 /* Return pointer to the location of location note in PIECE EXPR_LIST.  */
7802
7803 static rtx *
7804 decl_piece_varloc_ptr (rtx piece)
7805 {
7806   if ((int) GET_MODE (piece))
7807     return &XEXP (piece, 0);
7808   else
7809     return &XEXP (XEXP (piece, 0), 1);
7810 }
7811
7812 /* Create an EXPR_LIST for location note LOC_NOTE covering BITSIZE bits.
7813    Next is the chain of following piece nodes.  */
7814
7815 static rtx
7816 decl_piece_node (rtx loc_note, HOST_WIDE_INT bitsize, rtx next)
7817 {
7818   if (bitsize <= (int) MAX_MACHINE_MODE)
7819     return alloc_EXPR_LIST (bitsize, loc_note, next);
7820   else
7821     return alloc_EXPR_LIST (0, gen_rtx_CONCAT (VOIDmode,
7822                                                GEN_INT (bitsize),
7823                                                loc_note), next);
7824 }
7825
7826 /* Return rtx that should be stored into loc field for
7827    LOC_NOTE and BITPOS/BITSIZE.  */
7828
7829 static rtx
7830 construct_piece_list (rtx loc_note, HOST_WIDE_INT bitpos,
7831                       HOST_WIDE_INT bitsize)
7832 {
7833   if (bitsize != -1)
7834     {
7835       loc_note = decl_piece_node (loc_note, bitsize, NULL_RTX);
7836       if (bitpos != 0)
7837         loc_note = decl_piece_node (NULL_RTX, bitpos, loc_note);
7838     }
7839   return loc_note;
7840 }
7841
7842 /* This function either modifies location piece list *DEST in
7843    place (if SRC and INNER is NULL), or copies location piece list
7844    *SRC to *DEST while modifying it.  Location BITPOS is modified
7845    to contain LOC_NOTE, any pieces overlapping it are removed resp.
7846    not copied and if needed some padding around it is added.
7847    When modifying in place, DEST should point to EXPR_LIST where
7848    earlier pieces cover PIECE_BITPOS bits, when copying SRC points
7849    to the start of the whole list and INNER points to the EXPR_LIST
7850    where earlier pieces cover PIECE_BITPOS bits.  */
7851
7852 static void
7853 adjust_piece_list (rtx *dest, rtx *src, rtx *inner,
7854                    HOST_WIDE_INT bitpos, HOST_WIDE_INT piece_bitpos,
7855                    HOST_WIDE_INT bitsize, rtx loc_note)
7856 {
7857   int diff;
7858   bool copy = inner != NULL;
7859
7860   if (copy)
7861     {
7862       /* First copy all nodes preceeding the current bitpos.  */
7863       while (src != inner)
7864         {
7865           *dest = decl_piece_node (*decl_piece_varloc_ptr (*src),
7866                                    decl_piece_bitsize (*src), NULL_RTX);
7867           dest = &XEXP (*dest, 1);
7868           src = &XEXP (*src, 1);
7869         }
7870     }
7871   /* Add padding if needed.  */
7872   if (bitpos != piece_bitpos)
7873     {
7874       *dest = decl_piece_node (NULL_RTX, bitpos - piece_bitpos,
7875                                copy ? NULL_RTX : *dest);
7876       dest = &XEXP (*dest, 1);
7877     }
7878   else if (*dest && decl_piece_bitsize (*dest) == bitsize)
7879     {
7880       gcc_assert (!copy);
7881       /* A piece with correct bitpos and bitsize already exist,
7882          just update the location for it and return.  */
7883       *decl_piece_varloc_ptr (*dest) = loc_note;
7884       return;
7885     }
7886   /* Add the piece that changed.  */
7887   *dest = decl_piece_node (loc_note, bitsize, copy ? NULL_RTX : *dest);
7888   dest = &XEXP (*dest, 1);
7889   /* Skip over pieces that overlap it.  */
7890   diff = bitpos - piece_bitpos + bitsize;
7891   if (!copy)
7892     src = dest;
7893   while (diff > 0 && *src)
7894     {
7895       rtx piece = *src;
7896       diff -= decl_piece_bitsize (piece);
7897       if (copy)
7898         src = &XEXP (piece, 1);
7899       else
7900         {
7901           *src = XEXP (piece, 1);
7902           free_EXPR_LIST_node (piece);
7903         }
7904     }
7905   /* Add padding if needed.  */
7906   if (diff < 0 && *src)
7907     {
7908       if (!copy)
7909         dest = src;
7910       *dest = decl_piece_node (NULL_RTX, -diff, copy ? NULL_RTX : *dest);
7911       dest = &XEXP (*dest, 1);
7912     }
7913   if (!copy)
7914     return;
7915   /* Finally copy all nodes following it.  */
7916   while (*src)
7917     {
7918       *dest = decl_piece_node (*decl_piece_varloc_ptr (*src),
7919                                decl_piece_bitsize (*src), NULL_RTX);
7920       dest = &XEXP (*dest, 1);
7921       src = &XEXP (*src, 1);
7922     }
7923 }
7924
7925 /* Add a variable location node to the linked list for DECL.  */
7926
7927 static struct var_loc_node *
7928 add_var_loc_to_decl (tree decl, rtx loc_note, const char *label)
7929 {
7930   unsigned int decl_id;
7931   var_loc_list *temp;
7932   void **slot;
7933   struct var_loc_node *loc = NULL;
7934   HOST_WIDE_INT bitsize = -1, bitpos = -1;
7935
7936   if (DECL_DEBUG_EXPR_IS_FROM (decl))
7937     {
7938       tree realdecl = DECL_DEBUG_EXPR (decl);
7939       if (realdecl && handled_component_p (realdecl))
7940         {
7941           HOST_WIDE_INT maxsize;
7942           tree innerdecl;
7943           innerdecl
7944             = get_ref_base_and_extent (realdecl, &bitpos, &bitsize, &maxsize);
7945           if (!DECL_P (innerdecl)
7946               || DECL_IGNORED_P (innerdecl)
7947               || TREE_STATIC (innerdecl)
7948               || bitsize <= 0
7949               || bitpos + bitsize > 256
7950               || bitsize != maxsize)
7951             return NULL;
7952           decl = innerdecl;
7953         }
7954     }
7955
7956   decl_id = DECL_UID (decl);
7957   slot = htab_find_slot_with_hash (decl_loc_table, decl, decl_id, INSERT);
7958   if (*slot == NULL)
7959     {
7960       temp = GGC_CNEW (var_loc_list);
7961       temp->decl_id = decl_id;
7962       *slot = temp;
7963     }
7964   else
7965     temp = (var_loc_list *) *slot;
7966
7967   if (temp->last)
7968     {
7969       struct var_loc_node *last = temp->last, *unused = NULL;
7970       rtx *piece_loc = NULL, last_loc_note;
7971       int piece_bitpos = 0;
7972       if (last->next)
7973         {
7974           last = last->next;
7975           gcc_assert (last->next == NULL);
7976         }
7977       if (bitsize != -1 && GET_CODE (last->loc) == EXPR_LIST)
7978         {
7979           piece_loc = &last->loc;
7980           do
7981             {
7982               int cur_bitsize = decl_piece_bitsize (*piece_loc);
7983               if (piece_bitpos + cur_bitsize > bitpos)
7984                 break;
7985               piece_bitpos += cur_bitsize;
7986               piece_loc = &XEXP (*piece_loc, 1);
7987             }
7988           while (*piece_loc);
7989         }
7990       /* TEMP->LAST here is either pointer to the last but one or
7991          last element in the chained list, LAST is pointer to the
7992          last element.  */
7993       if (label && strcmp (last->label, label) == 0)
7994         {
7995           /* For SRA optimized variables if there weren't any real
7996              insns since last note, just modify the last node.  */
7997           if (piece_loc != NULL)
7998             {
7999               adjust_piece_list (piece_loc, NULL, NULL,
8000                                  bitpos, piece_bitpos, bitsize, loc_note);
8001               return NULL;
8002             }
8003           /* If the last note doesn't cover any instructions, remove it.  */
8004           if (temp->last != last)
8005             {
8006               temp->last->next = NULL;
8007               unused = last;
8008               last = temp->last;
8009               gcc_assert (strcmp (last->label, label) != 0);
8010             }
8011           else
8012             {
8013               gcc_assert (temp->first == temp->last);
8014               memset (temp->last, '\0', sizeof (*temp->last));
8015               temp->last->loc = construct_piece_list (loc_note, bitpos, bitsize);
8016               return temp->last;
8017             }
8018         }
8019       if (bitsize == -1 && NOTE_P (last->loc))
8020         last_loc_note = last->loc;
8021       else if (piece_loc != NULL
8022                && *piece_loc != NULL_RTX
8023                && piece_bitpos == bitpos
8024                && decl_piece_bitsize (*piece_loc) == bitsize)
8025         last_loc_note = *decl_piece_varloc_ptr (*piece_loc);
8026       else
8027         last_loc_note = NULL_RTX;
8028       /* If the current location is the same as the end of the list,
8029          and either both or neither of the locations is uninitialized,
8030          we have nothing to do.  */
8031       if (last_loc_note == NULL_RTX
8032           || (!rtx_equal_p (NOTE_VAR_LOCATION_LOC (last_loc_note),
8033                             NOTE_VAR_LOCATION_LOC (loc_note)))
8034           || ((NOTE_VAR_LOCATION_STATUS (last_loc_note)
8035                != NOTE_VAR_LOCATION_STATUS (loc_note))
8036               && ((NOTE_VAR_LOCATION_STATUS (last_loc_note)
8037                    == VAR_INIT_STATUS_UNINITIALIZED)
8038                   || (NOTE_VAR_LOCATION_STATUS (loc_note)
8039                       == VAR_INIT_STATUS_UNINITIALIZED))))
8040         {
8041           /* Add LOC to the end of list and update LAST.  If the last
8042              element of the list has been removed above, reuse its
8043              memory for the new node, otherwise allocate a new one.  */
8044           if (unused)
8045             {
8046               loc = unused;
8047               memset (loc, '\0', sizeof (*loc));
8048             }
8049           else
8050             loc = GGC_CNEW (struct var_loc_node);
8051           if (bitsize == -1 || piece_loc == NULL)
8052             loc->loc = construct_piece_list (loc_note, bitpos, bitsize);
8053           else
8054             adjust_piece_list (&loc->loc, &last->loc, piece_loc,
8055                                bitpos, piece_bitpos, bitsize, loc_note);
8056           last->next = loc;
8057           /* Ensure TEMP->LAST will point either to the new last but one
8058              element of the chain, or to the last element in it.  */
8059           if (last != temp->last)
8060             temp->last = last;
8061         }
8062       else if (unused)
8063         ggc_free (unused);
8064     }
8065   else
8066     {
8067       loc = GGC_CNEW (struct var_loc_node);
8068       temp->first = loc;
8069       temp->last = loc;
8070       loc->loc = construct_piece_list (loc_note, bitpos, bitsize);
8071     }
8072   return loc;
8073 }
8074 \f
8075 /* Keep track of the number of spaces used to indent the
8076    output of the debugging routines that print the structure of
8077    the DIE internal representation.  */
8078 static int print_indent;
8079
8080 /* Indent the line the number of spaces given by print_indent.  */
8081
8082 static inline void
8083 print_spaces (FILE *outfile)
8084 {
8085   fprintf (outfile, "%*s", print_indent, "");
8086 }
8087
8088 /* Print a type signature in hex.  */
8089
8090 static inline void
8091 print_signature (FILE *outfile, char *sig)
8092 {
8093   int i;
8094
8095   for (i = 0; i < DWARF_TYPE_SIGNATURE_SIZE; i++)
8096     fprintf (outfile, "%02x", sig[i] & 0xff);
8097 }
8098
8099 /* Print the information associated with a given DIE, and its children.
8100    This routine is a debugging aid only.  */
8101
8102 static void
8103 print_die (dw_die_ref die, FILE *outfile)
8104 {
8105   dw_attr_ref a;
8106   dw_die_ref c;
8107   unsigned ix;
8108
8109   print_spaces (outfile);
8110   fprintf (outfile, "DIE %4ld: %s\n",
8111            die->die_offset, dwarf_tag_name (die->die_tag));
8112   print_spaces (outfile);
8113   fprintf (outfile, "  abbrev id: %lu", die->die_abbrev);
8114   fprintf (outfile, " offset: %ld\n", die->die_offset);
8115   if (dwarf_version >= 4 && die->die_id.die_type_node)
8116     {
8117       print_spaces (outfile);
8118       fprintf (outfile, "  signature: ");
8119       print_signature (outfile, die->die_id.die_type_node->signature);
8120       fprintf (outfile, "\n");
8121     }
8122
8123   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
8124     {
8125       print_spaces (outfile);
8126       fprintf (outfile, "  %s: ", dwarf_attr_name (a->dw_attr));
8127
8128       switch (AT_class (a))
8129         {
8130         case dw_val_class_addr:
8131           fprintf (outfile, "address");
8132           break;
8133         case dw_val_class_offset:
8134           fprintf (outfile, "offset");
8135           break;
8136         case dw_val_class_loc:
8137           fprintf (outfile, "location descriptor");
8138           break;
8139         case dw_val_class_loc_list:
8140           fprintf (outfile, "location list -> label:%s",
8141                    AT_loc_list (a)->ll_symbol);
8142           break;
8143         case dw_val_class_range_list:
8144           fprintf (outfile, "range list");
8145           break;
8146         case dw_val_class_const:
8147           fprintf (outfile, HOST_WIDE_INT_PRINT_DEC, AT_int (a));
8148           break;
8149         case dw_val_class_unsigned_const:
8150           fprintf (outfile, HOST_WIDE_INT_PRINT_UNSIGNED, AT_unsigned (a));
8151           break;
8152         case dw_val_class_const_double:
8153           fprintf (outfile, "constant ("HOST_WIDE_INT_PRINT_DEC","\
8154                             HOST_WIDE_INT_PRINT_UNSIGNED")",
8155                    a->dw_attr_val.v.val_double.high,
8156                    a->dw_attr_val.v.val_double.low);
8157           break;
8158         case dw_val_class_vec:
8159           fprintf (outfile, "floating-point or vector constant");
8160           break;
8161         case dw_val_class_flag:
8162           fprintf (outfile, "%u", AT_flag (a));
8163           break;
8164         case dw_val_class_die_ref:
8165           if (AT_ref (a) != NULL)
8166             {
8167               if (dwarf_version >= 4 && AT_ref (a)->die_id.die_type_node)
8168                 {
8169                   fprintf (outfile, "die -> signature: ");
8170                   print_signature (outfile,
8171                                    AT_ref (a)->die_id.die_type_node->signature);
8172                 }
8173               else if (dwarf_version < 4 && AT_ref (a)->die_id.die_symbol)
8174                 fprintf (outfile, "die -> label: %s",
8175                          AT_ref (a)->die_id.die_symbol);
8176               else
8177                 fprintf (outfile, "die -> %ld", AT_ref (a)->die_offset);
8178             }
8179           else
8180             fprintf (outfile, "die -> <null>");
8181           break;
8182         case dw_val_class_lbl_id:
8183         case dw_val_class_lineptr:
8184         case dw_val_class_macptr:
8185           fprintf (outfile, "label: %s", AT_lbl (a));
8186           break;
8187         case dw_val_class_str:
8188           if (AT_string (a) != NULL)
8189             fprintf (outfile, "\"%s\"", AT_string (a));
8190           else
8191             fprintf (outfile, "<null>");
8192           break;
8193         case dw_val_class_file:
8194           fprintf (outfile, "\"%s\" (%d)", AT_file (a)->filename,
8195                    AT_file (a)->emitted_number);
8196           break;
8197         case dw_val_class_data8:
8198           {
8199             int i;
8200
8201             for (i = 0; i < 8; i++)
8202               fprintf (outfile, "%02x", a->dw_attr_val.v.val_data8[i]);
8203             break;
8204           }
8205         default:
8206           break;
8207         }
8208
8209       fprintf (outfile, "\n");
8210     }
8211
8212   if (die->die_child != NULL)
8213     {
8214       print_indent += 4;
8215       FOR_EACH_CHILD (die, c, print_die (c, outfile));
8216       print_indent -= 4;
8217     }
8218   if (print_indent == 0)
8219     fprintf (outfile, "\n");
8220 }
8221
8222 /* Print the contents of the source code line number correspondence table.
8223    This routine is a debugging aid only.  */
8224
8225 static void
8226 print_dwarf_line_table (FILE *outfile)
8227 {
8228   unsigned i;
8229   dw_line_info_ref line_info;
8230
8231   fprintf (outfile, "\n\nDWARF source line information\n");
8232   for (i = 1; i < line_info_table_in_use; i++)
8233     {
8234       line_info = &line_info_table[i];
8235       fprintf (outfile, "%5d: %4ld %6ld\n", i,
8236                line_info->dw_file_num,
8237                line_info->dw_line_num);
8238     }
8239
8240   fprintf (outfile, "\n\n");
8241 }
8242
8243 /* Print the information collected for a given DIE.  */
8244
8245 DEBUG_FUNCTION void
8246 debug_dwarf_die (dw_die_ref die)
8247 {
8248   print_die (die, stderr);
8249 }
8250
8251 /* Print all DWARF information collected for the compilation unit.
8252    This routine is a debugging aid only.  */
8253
8254 DEBUG_FUNCTION void
8255 debug_dwarf (void)
8256 {
8257   print_indent = 0;
8258   print_die (comp_unit_die, stderr);
8259   if (! DWARF2_ASM_LINE_DEBUG_INFO)
8260     print_dwarf_line_table (stderr);
8261 }
8262 \f
8263 /* Start a new compilation unit DIE for an include file.  OLD_UNIT is the CU
8264    for the enclosing include file, if any.  BINCL_DIE is the DW_TAG_GNU_BINCL
8265    DIE that marks the start of the DIEs for this include file.  */
8266
8267 static dw_die_ref
8268 push_new_compile_unit (dw_die_ref old_unit, dw_die_ref bincl_die)
8269 {
8270   const char *filename = get_AT_string (bincl_die, DW_AT_name);
8271   dw_die_ref new_unit = gen_compile_unit_die (filename);
8272
8273   new_unit->die_sib = old_unit;
8274   return new_unit;
8275 }
8276
8277 /* Close an include-file CU and reopen the enclosing one.  */
8278
8279 static dw_die_ref
8280 pop_compile_unit (dw_die_ref old_unit)
8281 {
8282   dw_die_ref new_unit = old_unit->die_sib;
8283
8284   old_unit->die_sib = NULL;
8285   return new_unit;
8286 }
8287
8288 #define CHECKSUM(FOO) md5_process_bytes (&(FOO), sizeof (FOO), ctx)
8289 #define CHECKSUM_STRING(FOO) md5_process_bytes ((FOO), strlen (FOO), ctx)
8290
8291 /* Calculate the checksum of a location expression.  */
8292
8293 static inline void
8294 loc_checksum (dw_loc_descr_ref loc, struct md5_ctx *ctx)
8295 {
8296   int tem;
8297
8298   tem = (loc->dtprel << 8) | ((unsigned int) loc->dw_loc_opc);
8299   CHECKSUM (tem);
8300   CHECKSUM (loc->dw_loc_oprnd1);
8301   CHECKSUM (loc->dw_loc_oprnd2);
8302 }
8303
8304 /* Calculate the checksum of an attribute.  */
8305
8306 static void
8307 attr_checksum (dw_attr_ref at, struct md5_ctx *ctx, int *mark)
8308 {
8309   dw_loc_descr_ref loc;
8310   rtx r;
8311
8312   CHECKSUM (at->dw_attr);
8313
8314   /* We don't care that this was compiled with a different compiler
8315      snapshot; if the output is the same, that's what matters.  */
8316   if (at->dw_attr == DW_AT_producer)
8317     return;
8318
8319   switch (AT_class (at))
8320     {
8321     case dw_val_class_const:
8322       CHECKSUM (at->dw_attr_val.v.val_int);
8323       break;
8324     case dw_val_class_unsigned_const:
8325       CHECKSUM (at->dw_attr_val.v.val_unsigned);
8326       break;
8327     case dw_val_class_const_double:
8328       CHECKSUM (at->dw_attr_val.v.val_double);
8329       break;
8330     case dw_val_class_vec:
8331       CHECKSUM (at->dw_attr_val.v.val_vec);
8332       break;
8333     case dw_val_class_flag:
8334       CHECKSUM (at->dw_attr_val.v.val_flag);
8335       break;
8336     case dw_val_class_str:
8337       CHECKSUM_STRING (AT_string (at));
8338       break;
8339
8340     case dw_val_class_addr:
8341       r = AT_addr (at);
8342       gcc_assert (GET_CODE (r) == SYMBOL_REF);
8343       CHECKSUM_STRING (XSTR (r, 0));
8344       break;
8345
8346     case dw_val_class_offset:
8347       CHECKSUM (at->dw_attr_val.v.val_offset);
8348       break;
8349
8350     case dw_val_class_loc:
8351       for (loc = AT_loc (at); loc; loc = loc->dw_loc_next)
8352         loc_checksum (loc, ctx);
8353       break;
8354
8355     case dw_val_class_die_ref:
8356       die_checksum (AT_ref (at), ctx, mark);
8357       break;
8358
8359     case dw_val_class_fde_ref:
8360     case dw_val_class_lbl_id:
8361     case dw_val_class_lineptr:
8362     case dw_val_class_macptr:
8363       break;
8364
8365     case dw_val_class_file:
8366       CHECKSUM_STRING (AT_file (at)->filename);
8367       break;
8368
8369     case dw_val_class_data8:
8370       CHECKSUM (at->dw_attr_val.v.val_data8);
8371       break;
8372
8373     default:
8374       break;
8375     }
8376 }
8377
8378 /* Calculate the checksum of a DIE.  */
8379
8380 static void
8381 die_checksum (dw_die_ref die, struct md5_ctx *ctx, int *mark)
8382 {
8383   dw_die_ref c;
8384   dw_attr_ref a;
8385   unsigned ix;
8386
8387   /* To avoid infinite recursion.  */
8388   if (die->die_mark)
8389     {
8390       CHECKSUM (die->die_mark);
8391       return;
8392     }
8393   die->die_mark = ++(*mark);
8394
8395   CHECKSUM (die->die_tag);
8396
8397   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
8398     attr_checksum (a, ctx, mark);
8399
8400   FOR_EACH_CHILD (die, c, die_checksum (c, ctx, mark));
8401 }
8402
8403 #undef CHECKSUM
8404 #undef CHECKSUM_STRING
8405
8406 /* For DWARF-4 types, include the trailing NULL when checksumming strings.  */
8407 #define CHECKSUM(FOO) md5_process_bytes (&(FOO), sizeof (FOO), ctx)
8408 #define CHECKSUM_STRING(FOO) md5_process_bytes ((FOO), strlen (FOO) + 1, ctx)
8409 #define CHECKSUM_SLEB128(FOO) checksum_sleb128 ((FOO), ctx)
8410 #define CHECKSUM_ULEB128(FOO) checksum_uleb128 ((FOO), ctx)
8411 #define CHECKSUM_ATTR(FOO) \
8412   if (FOO) attr_checksum_ordered (die->die_tag, (FOO), ctx, mark)
8413
8414 /* Calculate the checksum of a number in signed LEB128 format.  */
8415
8416 static void
8417 checksum_sleb128 (HOST_WIDE_INT value, struct md5_ctx *ctx)
8418 {
8419   unsigned char byte;
8420   bool more;
8421
8422   while (1)
8423     {
8424       byte = (value & 0x7f);
8425       value >>= 7;
8426       more = !((value == 0 && (byte & 0x40) == 0)
8427                 || (value == -1 && (byte & 0x40) != 0));
8428       if (more)
8429         byte |= 0x80;
8430       CHECKSUM (byte);
8431       if (!more)
8432         break;
8433     }
8434 }
8435
8436 /* Calculate the checksum of a number in unsigned LEB128 format.  */
8437
8438 static void
8439 checksum_uleb128 (unsigned HOST_WIDE_INT value, struct md5_ctx *ctx)
8440 {
8441   while (1)
8442     {
8443       unsigned char byte = (value & 0x7f);
8444       value >>= 7;
8445       if (value != 0)
8446         /* More bytes to follow.  */
8447         byte |= 0x80;
8448       CHECKSUM (byte);
8449       if (value == 0)
8450         break;
8451     }
8452 }
8453
8454 /* Checksum the context of the DIE.  This adds the names of any
8455    surrounding namespaces or structures to the checksum.  */
8456
8457 static void
8458 checksum_die_context (dw_die_ref die, struct md5_ctx *ctx)
8459 {
8460   const char *name;
8461   dw_die_ref spec;
8462   int tag = die->die_tag;
8463
8464   if (tag != DW_TAG_namespace
8465       && tag != DW_TAG_structure_type
8466       && tag != DW_TAG_class_type)
8467     return;
8468
8469   name = get_AT_string (die, DW_AT_name);
8470
8471   spec = get_AT_ref (die, DW_AT_specification);
8472   if (spec != NULL)
8473     die = spec;
8474
8475   if (die->die_parent != NULL)
8476     checksum_die_context (die->die_parent, ctx);
8477
8478   CHECKSUM_ULEB128 ('C');
8479   CHECKSUM_ULEB128 (tag);
8480   if (name != NULL)
8481     CHECKSUM_STRING (name);
8482 }
8483
8484 /* Calculate the checksum of a location expression.  */
8485
8486 static inline void
8487 loc_checksum_ordered (dw_loc_descr_ref loc, struct md5_ctx *ctx)
8488 {
8489   /* Special case for lone DW_OP_plus_uconst: checksum as if the location
8490      were emitted as a DW_FORM_sdata instead of a location expression.  */
8491   if (loc->dw_loc_opc == DW_OP_plus_uconst && loc->dw_loc_next == NULL)
8492     {
8493       CHECKSUM_ULEB128 (DW_FORM_sdata);
8494       CHECKSUM_SLEB128 ((HOST_WIDE_INT) loc->dw_loc_oprnd1.v.val_unsigned);
8495       return;
8496     }
8497
8498   /* Otherwise, just checksum the raw location expression.  */
8499   while (loc != NULL)
8500     {
8501       CHECKSUM_ULEB128 (loc->dw_loc_opc);
8502       CHECKSUM (loc->dw_loc_oprnd1);
8503       CHECKSUM (loc->dw_loc_oprnd2);
8504       loc = loc->dw_loc_next;
8505     }
8506 }
8507
8508 /* Calculate the checksum of an attribute.  */
8509
8510 static void
8511 attr_checksum_ordered (enum dwarf_tag tag, dw_attr_ref at,
8512                        struct md5_ctx *ctx, int *mark)
8513 {
8514   dw_loc_descr_ref loc;
8515   rtx r;
8516
8517   if (AT_class (at) == dw_val_class_die_ref)
8518     {
8519       dw_die_ref target_die = AT_ref (at);
8520
8521       /* For pointer and reference types, we checksum only the (qualified)
8522          name of the target type (if there is a name).  For friend entries,
8523          we checksum only the (qualified) name of the target type or function.
8524          This allows the checksum to remain the same whether the target type
8525          is complete or not.  */
8526       if ((at->dw_attr == DW_AT_type
8527            && (tag == DW_TAG_pointer_type
8528                || tag == DW_TAG_reference_type
8529                || tag == DW_TAG_rvalue_reference_type
8530                || tag == DW_TAG_ptr_to_member_type))
8531           || (at->dw_attr == DW_AT_friend
8532               && tag == DW_TAG_friend))
8533         {
8534           dw_attr_ref name_attr = get_AT (target_die, DW_AT_name);
8535
8536           if (name_attr != NULL)
8537             {
8538               dw_die_ref decl = get_AT_ref (target_die, DW_AT_specification);
8539
8540               if (decl == NULL)
8541                 decl = target_die;
8542               CHECKSUM_ULEB128 ('N');
8543               CHECKSUM_ULEB128 (at->dw_attr);
8544               if (decl->die_parent != NULL)
8545                 checksum_die_context (decl->die_parent, ctx);
8546               CHECKSUM_ULEB128 ('E');
8547               CHECKSUM_STRING (AT_string (name_attr));
8548               return;
8549             }
8550         }
8551
8552       /* For all other references to another DIE, we check to see if the
8553          target DIE has already been visited.  If it has, we emit a
8554          backward reference; if not, we descend recursively.  */
8555       if (target_die->die_mark > 0)
8556         {
8557           CHECKSUM_ULEB128 ('R');
8558           CHECKSUM_ULEB128 (at->dw_attr);
8559           CHECKSUM_ULEB128 (target_die->die_mark);
8560         }
8561       else
8562         {
8563           dw_die_ref decl = get_AT_ref (target_die, DW_AT_specification);
8564
8565           if (decl == NULL)
8566             decl = target_die;
8567           target_die->die_mark = ++(*mark);
8568           CHECKSUM_ULEB128 ('T');
8569           CHECKSUM_ULEB128 (at->dw_attr);
8570           if (decl->die_parent != NULL)
8571             checksum_die_context (decl->die_parent, ctx);
8572           die_checksum_ordered (target_die, ctx, mark);
8573         }
8574       return;
8575     }
8576
8577   CHECKSUM_ULEB128 ('A');
8578   CHECKSUM_ULEB128 (at->dw_attr);
8579
8580   switch (AT_class (at))
8581     {
8582     case dw_val_class_const:
8583       CHECKSUM_ULEB128 (DW_FORM_sdata);
8584       CHECKSUM_SLEB128 (at->dw_attr_val.v.val_int);
8585       break;
8586
8587     case dw_val_class_unsigned_const:
8588       CHECKSUM_ULEB128 (DW_FORM_sdata);
8589       CHECKSUM_SLEB128 ((int) at->dw_attr_val.v.val_unsigned);
8590       break;
8591
8592     case dw_val_class_const_double:
8593       CHECKSUM_ULEB128 (DW_FORM_block);
8594       CHECKSUM_ULEB128 (sizeof (at->dw_attr_val.v.val_double));
8595       CHECKSUM (at->dw_attr_val.v.val_double);
8596       break;
8597
8598     case dw_val_class_vec:
8599       CHECKSUM_ULEB128 (DW_FORM_block);
8600       CHECKSUM_ULEB128 (sizeof (at->dw_attr_val.v.val_vec));
8601       CHECKSUM (at->dw_attr_val.v.val_vec);
8602       break;
8603
8604     case dw_val_class_flag:
8605       CHECKSUM_ULEB128 (DW_FORM_flag);
8606       CHECKSUM_ULEB128 (at->dw_attr_val.v.val_flag ? 1 : 0);
8607       break;
8608
8609     case dw_val_class_str:
8610       CHECKSUM_ULEB128 (DW_FORM_string);
8611       CHECKSUM_STRING (AT_string (at));
8612       break;
8613
8614     case dw_val_class_addr:
8615       r = AT_addr (at);
8616       gcc_assert (GET_CODE (r) == SYMBOL_REF);
8617       CHECKSUM_ULEB128 (DW_FORM_string);
8618       CHECKSUM_STRING (XSTR (r, 0));
8619       break;
8620
8621     case dw_val_class_offset:
8622       CHECKSUM_ULEB128 (DW_FORM_sdata);
8623       CHECKSUM_ULEB128 (at->dw_attr_val.v.val_offset);
8624       break;
8625
8626     case dw_val_class_loc:
8627       for (loc = AT_loc (at); loc; loc = loc->dw_loc_next)
8628         loc_checksum_ordered (loc, ctx);
8629       break;
8630
8631     case dw_val_class_fde_ref:
8632     case dw_val_class_lbl_id:
8633     case dw_val_class_lineptr:
8634     case dw_val_class_macptr:
8635       break;
8636
8637     case dw_val_class_file:
8638       CHECKSUM_ULEB128 (DW_FORM_string);
8639       CHECKSUM_STRING (AT_file (at)->filename);
8640       break;
8641
8642     case dw_val_class_data8:
8643       CHECKSUM (at->dw_attr_val.v.val_data8);
8644       break;
8645
8646     default:
8647       break;
8648     }
8649 }
8650
8651 struct checksum_attributes
8652 {
8653   dw_attr_ref at_name;
8654   dw_attr_ref at_type;
8655   dw_attr_ref at_friend;
8656   dw_attr_ref at_accessibility;
8657   dw_attr_ref at_address_class;
8658   dw_attr_ref at_allocated;
8659   dw_attr_ref at_artificial;
8660   dw_attr_ref at_associated;
8661   dw_attr_ref at_binary_scale;
8662   dw_attr_ref at_bit_offset;
8663   dw_attr_ref at_bit_size;
8664   dw_attr_ref at_bit_stride;
8665   dw_attr_ref at_byte_size;
8666   dw_attr_ref at_byte_stride;
8667   dw_attr_ref at_const_value;
8668   dw_attr_ref at_containing_type;
8669   dw_attr_ref at_count;
8670   dw_attr_ref at_data_location;
8671   dw_attr_ref at_data_member_location;
8672   dw_attr_ref at_decimal_scale;
8673   dw_attr_ref at_decimal_sign;
8674   dw_attr_ref at_default_value;
8675   dw_attr_ref at_digit_count;
8676   dw_attr_ref at_discr;
8677   dw_attr_ref at_discr_list;
8678   dw_attr_ref at_discr_value;
8679   dw_attr_ref at_encoding;
8680   dw_attr_ref at_endianity;
8681   dw_attr_ref at_explicit;
8682   dw_attr_ref at_is_optional;
8683   dw_attr_ref at_location;
8684   dw_attr_ref at_lower_bound;
8685   dw_attr_ref at_mutable;
8686   dw_attr_ref at_ordering;
8687   dw_attr_ref at_picture_string;
8688   dw_attr_ref at_prototyped;
8689   dw_attr_ref at_small;
8690   dw_attr_ref at_segment;
8691   dw_attr_ref at_string_length;
8692   dw_attr_ref at_threads_scaled;
8693   dw_attr_ref at_upper_bound;
8694   dw_attr_ref at_use_location;
8695   dw_attr_ref at_use_UTF8;
8696   dw_attr_ref at_variable_parameter;
8697   dw_attr_ref at_virtuality;
8698   dw_attr_ref at_visibility;
8699   dw_attr_ref at_vtable_elem_location;
8700 };
8701
8702 /* Collect the attributes that we will want to use for the checksum.  */
8703
8704 static void
8705 collect_checksum_attributes (struct checksum_attributes *attrs, dw_die_ref die)
8706 {
8707   dw_attr_ref a;
8708   unsigned ix;
8709
8710   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
8711     {
8712       switch (a->dw_attr)
8713         {
8714         case DW_AT_name:
8715           attrs->at_name = a;
8716           break;
8717         case DW_AT_type:
8718           attrs->at_type = a;
8719           break;
8720         case DW_AT_friend:
8721           attrs->at_friend = a;
8722           break;
8723         case DW_AT_accessibility:
8724           attrs->at_accessibility = a;
8725           break;
8726         case DW_AT_address_class:
8727           attrs->at_address_class = a;
8728           break;
8729         case DW_AT_allocated:
8730           attrs->at_allocated = a;
8731           break;
8732         case DW_AT_artificial:
8733           attrs->at_artificial = a;
8734           break;
8735         case DW_AT_associated:
8736           attrs->at_associated = a;
8737           break;
8738         case DW_AT_binary_scale:
8739           attrs->at_binary_scale = a;
8740           break;
8741         case DW_AT_bit_offset:
8742           attrs->at_bit_offset = a;
8743           break;
8744         case DW_AT_bit_size:
8745           attrs->at_bit_size = a;
8746           break;
8747         case DW_AT_bit_stride:
8748           attrs->at_bit_stride = a;
8749           break;
8750         case DW_AT_byte_size:
8751           attrs->at_byte_size = a;
8752           break;
8753         case DW_AT_byte_stride:
8754           attrs->at_byte_stride = a;
8755           break;
8756         case DW_AT_const_value:
8757           attrs->at_const_value = a;
8758           break;
8759         case DW_AT_containing_type:
8760           attrs->at_containing_type = a;
8761           break;
8762         case DW_AT_count:
8763           attrs->at_count = a;
8764           break;
8765         case DW_AT_data_location:
8766           attrs->at_data_location = a;
8767           break;
8768         case DW_AT_data_member_location:
8769           attrs->at_data_member_location = a;
8770           break;
8771         case DW_AT_decimal_scale:
8772           attrs->at_decimal_scale = a;
8773           break;
8774         case DW_AT_decimal_sign:
8775           attrs->at_decimal_sign = a;
8776           break;
8777         case DW_AT_default_value:
8778           attrs->at_default_value = a;
8779           break;
8780         case DW_AT_digit_count:
8781           attrs->at_digit_count = a;
8782           break;
8783         case DW_AT_discr:
8784           attrs->at_discr = a;
8785           break;
8786         case DW_AT_discr_list:
8787           attrs->at_discr_list = a;
8788           break;
8789         case DW_AT_discr_value:
8790           attrs->at_discr_value = a;
8791           break;
8792         case DW_AT_encoding:
8793           attrs->at_encoding = a;
8794           break;
8795         case DW_AT_endianity:
8796           attrs->at_endianity = a;
8797           break;
8798         case DW_AT_explicit:
8799           attrs->at_explicit = a;
8800           break;
8801         case DW_AT_is_optional:
8802           attrs->at_is_optional = a;
8803           break;
8804         case DW_AT_location:
8805           attrs->at_location = a;
8806           break;
8807         case DW_AT_lower_bound:
8808           attrs->at_lower_bound = a;
8809           break;
8810         case DW_AT_mutable:
8811           attrs->at_mutable = a;
8812           break;
8813         case DW_AT_ordering:
8814           attrs->at_ordering = a;
8815           break;
8816         case DW_AT_picture_string:
8817           attrs->at_picture_string = a;
8818           break;
8819         case DW_AT_prototyped:
8820           attrs->at_prototyped = a;
8821           break;
8822         case DW_AT_small:
8823           attrs->at_small = a;
8824           break;
8825         case DW_AT_segment:
8826           attrs->at_segment = a;
8827           break;
8828         case DW_AT_string_length:
8829           attrs->at_string_length = a;
8830           break;
8831         case DW_AT_threads_scaled:
8832           attrs->at_threads_scaled = a;
8833           break;
8834         case DW_AT_upper_bound:
8835           attrs->at_upper_bound = a;
8836           break;
8837         case DW_AT_use_location:
8838           attrs->at_use_location = a;
8839           break;
8840         case DW_AT_use_UTF8:
8841           attrs->at_use_UTF8 = a;
8842           break;
8843         case DW_AT_variable_parameter:
8844           attrs->at_variable_parameter = a;
8845           break;
8846         case DW_AT_virtuality:
8847           attrs->at_virtuality = a;
8848           break;
8849         case DW_AT_visibility:
8850           attrs->at_visibility = a;
8851           break;
8852         case DW_AT_vtable_elem_location:
8853           attrs->at_vtable_elem_location = a;
8854           break;
8855         default:
8856           break;
8857         }
8858     }
8859 }
8860
8861 /* Calculate the checksum of a DIE, using an ordered subset of attributes.  */
8862
8863 static void
8864 die_checksum_ordered (dw_die_ref die, struct md5_ctx *ctx, int *mark)
8865 {
8866   dw_die_ref c;
8867   dw_die_ref decl;
8868   struct checksum_attributes attrs;
8869
8870   CHECKSUM_ULEB128 ('D');
8871   CHECKSUM_ULEB128 (die->die_tag);
8872
8873   memset (&attrs, 0, sizeof (attrs));
8874
8875   decl = get_AT_ref (die, DW_AT_specification);
8876   if (decl != NULL)
8877     collect_checksum_attributes (&attrs, decl);
8878   collect_checksum_attributes (&attrs, die);
8879
8880   CHECKSUM_ATTR (attrs.at_name);
8881   CHECKSUM_ATTR (attrs.at_accessibility);
8882   CHECKSUM_ATTR (attrs.at_address_class);
8883   CHECKSUM_ATTR (attrs.at_allocated);
8884   CHECKSUM_ATTR (attrs.at_artificial);
8885   CHECKSUM_ATTR (attrs.at_associated);
8886   CHECKSUM_ATTR (attrs.at_binary_scale);
8887   CHECKSUM_ATTR (attrs.at_bit_offset);
8888   CHECKSUM_ATTR (attrs.at_bit_size);
8889   CHECKSUM_ATTR (attrs.at_bit_stride);
8890   CHECKSUM_ATTR (attrs.at_byte_size);
8891   CHECKSUM_ATTR (attrs.at_byte_stride);
8892   CHECKSUM_ATTR (attrs.at_const_value);
8893   CHECKSUM_ATTR (attrs.at_containing_type);
8894   CHECKSUM_ATTR (attrs.at_count);
8895   CHECKSUM_ATTR (attrs.at_data_location);
8896   CHECKSUM_ATTR (attrs.at_data_member_location);
8897   CHECKSUM_ATTR (attrs.at_decimal_scale);
8898   CHECKSUM_ATTR (attrs.at_decimal_sign);
8899   CHECKSUM_ATTR (attrs.at_default_value);
8900   CHECKSUM_ATTR (attrs.at_digit_count);
8901   CHECKSUM_ATTR (attrs.at_discr);
8902   CHECKSUM_ATTR (attrs.at_discr_list);
8903   CHECKSUM_ATTR (attrs.at_discr_value);
8904   CHECKSUM_ATTR (attrs.at_encoding);
8905   CHECKSUM_ATTR (attrs.at_endianity);
8906   CHECKSUM_ATTR (attrs.at_explicit);
8907   CHECKSUM_ATTR (attrs.at_is_optional);
8908   CHECKSUM_ATTR (attrs.at_location);
8909   CHECKSUM_ATTR (attrs.at_lower_bound);
8910   CHECKSUM_ATTR (attrs.at_mutable);
8911   CHECKSUM_ATTR (attrs.at_ordering);
8912   CHECKSUM_ATTR (attrs.at_picture_string);
8913   CHECKSUM_ATTR (attrs.at_prototyped);
8914   CHECKSUM_ATTR (attrs.at_small);
8915   CHECKSUM_ATTR (attrs.at_segment);
8916   CHECKSUM_ATTR (attrs.at_string_length);
8917   CHECKSUM_ATTR (attrs.at_threads_scaled);
8918   CHECKSUM_ATTR (attrs.at_upper_bound);
8919   CHECKSUM_ATTR (attrs.at_use_location);
8920   CHECKSUM_ATTR (attrs.at_use_UTF8);
8921   CHECKSUM_ATTR (attrs.at_variable_parameter);
8922   CHECKSUM_ATTR (attrs.at_virtuality);
8923   CHECKSUM_ATTR (attrs.at_visibility);
8924   CHECKSUM_ATTR (attrs.at_vtable_elem_location);
8925   CHECKSUM_ATTR (attrs.at_type);
8926   CHECKSUM_ATTR (attrs.at_friend);
8927
8928   /* Checksum the child DIEs, except for nested types and member functions.  */
8929   c = die->die_child;
8930   if (c) do {
8931     dw_attr_ref name_attr;
8932
8933     c = c->die_sib;
8934     name_attr = get_AT (c, DW_AT_name);
8935     if ((is_type_die (c) || c->die_tag == DW_TAG_subprogram)
8936         && name_attr != NULL)
8937       {
8938         CHECKSUM_ULEB128 ('S');
8939         CHECKSUM_ULEB128 (c->die_tag);
8940         CHECKSUM_STRING (AT_string (name_attr));
8941       }
8942     else
8943       {
8944         /* Mark this DIE so it gets processed when unmarking.  */
8945         if (c->die_mark == 0)
8946           c->die_mark = -1;
8947         die_checksum_ordered (c, ctx, mark);
8948       }
8949   } while (c != die->die_child);
8950
8951   CHECKSUM_ULEB128 (0);
8952 }
8953
8954 #undef CHECKSUM
8955 #undef CHECKSUM_STRING
8956 #undef CHECKSUM_ATTR
8957 #undef CHECKSUM_LEB128
8958 #undef CHECKSUM_ULEB128
8959
8960 /* Generate the type signature for DIE.  This is computed by generating an
8961    MD5 checksum over the DIE's tag, its relevant attributes, and its
8962    children.  Attributes that are references to other DIEs are processed
8963    by recursion, using the MARK field to prevent infinite recursion.
8964    If the DIE is nested inside a namespace or another type, we also
8965    need to include that context in the signature.  The lower 64 bits
8966    of the resulting MD5 checksum comprise the signature.  */
8967
8968 static void
8969 generate_type_signature (dw_die_ref die, comdat_type_node *type_node)
8970 {
8971   int mark;
8972   const char *name;
8973   unsigned char checksum[16];
8974   struct md5_ctx ctx;
8975   dw_die_ref decl;
8976
8977   name = get_AT_string (die, DW_AT_name);
8978   decl = get_AT_ref (die, DW_AT_specification);
8979
8980   /* First, compute a signature for just the type name (and its surrounding
8981      context, if any.  This is stored in the type unit DIE for link-time
8982      ODR (one-definition rule) checking.  */
8983
8984   if (is_cxx() && name != NULL)
8985     {
8986       md5_init_ctx (&ctx);
8987
8988       /* Checksum the names of surrounding namespaces and structures.  */
8989       if (decl != NULL && decl->die_parent != NULL)
8990         checksum_die_context (decl->die_parent, &ctx);
8991
8992       md5_process_bytes (&die->die_tag, sizeof (die->die_tag), &ctx);
8993       md5_process_bytes (name, strlen (name) + 1, &ctx);
8994       md5_finish_ctx (&ctx, checksum);
8995
8996       add_AT_data8 (type_node->root_die, DW_AT_GNU_odr_signature, &checksum[8]);
8997     }
8998
8999   /* Next, compute the complete type signature.  */
9000
9001   md5_init_ctx (&ctx);
9002   mark = 1;
9003   die->die_mark = mark;
9004
9005   /* Checksum the names of surrounding namespaces and structures.  */
9006   if (decl != NULL && decl->die_parent != NULL)
9007     checksum_die_context (decl->die_parent, &ctx);
9008
9009   /* Checksum the DIE and its children.  */
9010   die_checksum_ordered (die, &ctx, &mark);
9011   unmark_all_dies (die);
9012   md5_finish_ctx (&ctx, checksum);
9013
9014   /* Store the signature in the type node and link the type DIE and the
9015      type node together.  */
9016   memcpy (type_node->signature, &checksum[16 - DWARF_TYPE_SIGNATURE_SIZE],
9017           DWARF_TYPE_SIGNATURE_SIZE);
9018   die->die_id.die_type_node = type_node;
9019   type_node->type_die = die;
9020
9021   /* If the DIE is a specification, link its declaration to the type node
9022      as well.  */
9023   if (decl != NULL)
9024     decl->die_id.die_type_node = type_node;
9025 }
9026
9027 /* Do the location expressions look same?  */
9028 static inline int
9029 same_loc_p (dw_loc_descr_ref loc1, dw_loc_descr_ref loc2, int *mark)
9030 {
9031   return loc1->dw_loc_opc == loc2->dw_loc_opc
9032          && same_dw_val_p (&loc1->dw_loc_oprnd1, &loc2->dw_loc_oprnd1, mark)
9033          && same_dw_val_p (&loc1->dw_loc_oprnd2, &loc2->dw_loc_oprnd2, mark);
9034 }
9035
9036 /* Do the values look the same?  */
9037 static int
9038 same_dw_val_p (const dw_val_node *v1, const dw_val_node *v2, int *mark)
9039 {
9040   dw_loc_descr_ref loc1, loc2;
9041   rtx r1, r2;
9042
9043   if (v1->val_class != v2->val_class)
9044     return 0;
9045
9046   switch (v1->val_class)
9047     {
9048     case dw_val_class_const:
9049       return v1->v.val_int == v2->v.val_int;
9050     case dw_val_class_unsigned_const:
9051       return v1->v.val_unsigned == v2->v.val_unsigned;
9052     case dw_val_class_const_double:
9053       return v1->v.val_double.high == v2->v.val_double.high
9054              && v1->v.val_double.low == v2->v.val_double.low;
9055     case dw_val_class_vec:
9056       if (v1->v.val_vec.length != v2->v.val_vec.length
9057           || v1->v.val_vec.elt_size != v2->v.val_vec.elt_size)
9058         return 0;
9059       if (memcmp (v1->v.val_vec.array, v2->v.val_vec.array,
9060                   v1->v.val_vec.length * v1->v.val_vec.elt_size))
9061         return 0;
9062       return 1;
9063     case dw_val_class_flag:
9064       return v1->v.val_flag == v2->v.val_flag;
9065     case dw_val_class_str:
9066       return !strcmp(v1->v.val_str->str, v2->v.val_str->str);
9067
9068     case dw_val_class_addr:
9069       r1 = v1->v.val_addr;
9070       r2 = v2->v.val_addr;
9071       if (GET_CODE (r1) != GET_CODE (r2))
9072         return 0;
9073       return !rtx_equal_p (r1, r2);
9074
9075     case dw_val_class_offset:
9076       return v1->v.val_offset == v2->v.val_offset;
9077
9078     case dw_val_class_loc:
9079       for (loc1 = v1->v.val_loc, loc2 = v2->v.val_loc;
9080            loc1 && loc2;
9081            loc1 = loc1->dw_loc_next, loc2 = loc2->dw_loc_next)
9082         if (!same_loc_p (loc1, loc2, mark))
9083           return 0;
9084       return !loc1 && !loc2;
9085
9086     case dw_val_class_die_ref:
9087       return same_die_p (v1->v.val_die_ref.die, v2->v.val_die_ref.die, mark);
9088
9089     case dw_val_class_fde_ref:
9090     case dw_val_class_lbl_id:
9091     case dw_val_class_lineptr:
9092     case dw_val_class_macptr:
9093       return 1;
9094
9095     case dw_val_class_file:
9096       return v1->v.val_file == v2->v.val_file;
9097
9098     case dw_val_class_data8:
9099       return !memcmp (v1->v.val_data8, v2->v.val_data8, 8);
9100
9101     default:
9102       return 1;
9103     }
9104 }
9105
9106 /* Do the attributes look the same?  */
9107
9108 static int
9109 same_attr_p (dw_attr_ref at1, dw_attr_ref at2, int *mark)
9110 {
9111   if (at1->dw_attr != at2->dw_attr)
9112     return 0;
9113
9114   /* We don't care that this was compiled with a different compiler
9115      snapshot; if the output is the same, that's what matters. */
9116   if (at1->dw_attr == DW_AT_producer)
9117     return 1;
9118
9119   return same_dw_val_p (&at1->dw_attr_val, &at2->dw_attr_val, mark);
9120 }
9121
9122 /* Do the dies look the same?  */
9123
9124 static int
9125 same_die_p (dw_die_ref die1, dw_die_ref die2, int *mark)
9126 {
9127   dw_die_ref c1, c2;
9128   dw_attr_ref a1;
9129   unsigned ix;
9130
9131   /* To avoid infinite recursion.  */
9132   if (die1->die_mark)
9133     return die1->die_mark == die2->die_mark;
9134   die1->die_mark = die2->die_mark = ++(*mark);
9135
9136   if (die1->die_tag != die2->die_tag)
9137     return 0;
9138
9139   if (VEC_length (dw_attr_node, die1->die_attr)
9140       != VEC_length (dw_attr_node, die2->die_attr))
9141     return 0;
9142
9143   for (ix = 0; VEC_iterate (dw_attr_node, die1->die_attr, ix, a1); ix++)
9144     if (!same_attr_p (a1, VEC_index (dw_attr_node, die2->die_attr, ix), mark))
9145       return 0;
9146
9147   c1 = die1->die_child;
9148   c2 = die2->die_child;
9149   if (! c1)
9150     {
9151       if (c2)
9152         return 0;
9153     }
9154   else
9155     for (;;)
9156       {
9157         if (!same_die_p (c1, c2, mark))
9158           return 0;
9159         c1 = c1->die_sib;
9160         c2 = c2->die_sib;
9161         if (c1 == die1->die_child)
9162           {
9163             if (c2 == die2->die_child)
9164               break;
9165             else
9166               return 0;
9167           }
9168     }
9169
9170   return 1;
9171 }
9172
9173 /* Do the dies look the same?  Wrapper around same_die_p.  */
9174
9175 static int
9176 same_die_p_wrap (dw_die_ref die1, dw_die_ref die2)
9177 {
9178   int mark = 0;
9179   int ret = same_die_p (die1, die2, &mark);
9180
9181   unmark_all_dies (die1);
9182   unmark_all_dies (die2);
9183
9184   return ret;
9185 }
9186
9187 /* The prefix to attach to symbols on DIEs in the current comdat debug
9188    info section.  */
9189 static char *comdat_symbol_id;
9190
9191 /* The index of the current symbol within the current comdat CU.  */
9192 static unsigned int comdat_symbol_number;
9193
9194 /* Calculate the MD5 checksum of the compilation unit DIE UNIT_DIE and its
9195    children, and set comdat_symbol_id accordingly.  */
9196
9197 static void
9198 compute_section_prefix (dw_die_ref unit_die)
9199 {
9200   const char *die_name = get_AT_string (unit_die, DW_AT_name);
9201   const char *base = die_name ? lbasename (die_name) : "anonymous";
9202   char *name = XALLOCAVEC (char, strlen (base) + 64);
9203   char *p;
9204   int i, mark;
9205   unsigned char checksum[16];
9206   struct md5_ctx ctx;
9207
9208   /* Compute the checksum of the DIE, then append part of it as hex digits to
9209      the name filename of the unit.  */
9210
9211   md5_init_ctx (&ctx);
9212   mark = 0;
9213   die_checksum (unit_die, &ctx, &mark);
9214   unmark_all_dies (unit_die);
9215   md5_finish_ctx (&ctx, checksum);
9216
9217   sprintf (name, "%s.", base);
9218   clean_symbol_name (name);
9219
9220   p = name + strlen (name);
9221   for (i = 0; i < 4; i++)
9222     {
9223       sprintf (p, "%.2x", checksum[i]);
9224       p += 2;
9225     }
9226
9227   comdat_symbol_id = unit_die->die_id.die_symbol = xstrdup (name);
9228   comdat_symbol_number = 0;
9229 }
9230
9231 /* Returns nonzero if DIE represents a type, in the sense of TYPE_P.  */
9232
9233 static int
9234 is_type_die (dw_die_ref die)
9235 {
9236   switch (die->die_tag)
9237     {
9238     case DW_TAG_array_type:
9239     case DW_TAG_class_type:
9240     case DW_TAG_interface_type:
9241     case DW_TAG_enumeration_type:
9242     case DW_TAG_pointer_type:
9243     case DW_TAG_reference_type:
9244     case DW_TAG_rvalue_reference_type:
9245     case DW_TAG_string_type:
9246     case DW_TAG_structure_type:
9247     case DW_TAG_subroutine_type:
9248     case DW_TAG_union_type:
9249     case DW_TAG_ptr_to_member_type:
9250     case DW_TAG_set_type:
9251     case DW_TAG_subrange_type:
9252     case DW_TAG_base_type:
9253     case DW_TAG_const_type:
9254     case DW_TAG_file_type:
9255     case DW_TAG_packed_type:
9256     case DW_TAG_volatile_type:
9257     case DW_TAG_typedef:
9258       return 1;
9259     default:
9260       return 0;
9261     }
9262 }
9263
9264 /* Returns 1 iff C is the sort of DIE that should go into a COMDAT CU.
9265    Basically, we want to choose the bits that are likely to be shared between
9266    compilations (types) and leave out the bits that are specific to individual
9267    compilations (functions).  */
9268
9269 static int
9270 is_comdat_die (dw_die_ref c)
9271 {
9272   /* I think we want to leave base types and __vtbl_ptr_type in the main CU, as
9273      we do for stabs.  The advantage is a greater likelihood of sharing between
9274      objects that don't include headers in the same order (and therefore would
9275      put the base types in a different comdat).  jason 8/28/00 */
9276
9277   if (c->die_tag == DW_TAG_base_type)
9278     return 0;
9279
9280   if (c->die_tag == DW_TAG_pointer_type
9281       || c->die_tag == DW_TAG_reference_type
9282       || c->die_tag == DW_TAG_rvalue_reference_type
9283       || c->die_tag == DW_TAG_const_type
9284       || c->die_tag == DW_TAG_volatile_type)
9285     {
9286       dw_die_ref t = get_AT_ref (c, DW_AT_type);
9287
9288       return t ? is_comdat_die (t) : 0;
9289     }
9290
9291   return is_type_die (c);
9292 }
9293
9294 /* Returns 1 iff C is the sort of DIE that might be referred to from another
9295    compilation unit.  */
9296
9297 static int
9298 is_symbol_die (dw_die_ref c)
9299 {
9300   return (is_type_die (c)
9301           || is_declaration_die (c)
9302           || c->die_tag == DW_TAG_namespace
9303           || c->die_tag == DW_TAG_module);
9304 }
9305
9306 static char *
9307 gen_internal_sym (const char *prefix)
9308 {
9309   char buf[256];
9310
9311   ASM_GENERATE_INTERNAL_LABEL (buf, prefix, label_num++);
9312   return xstrdup (buf);
9313 }
9314
9315 /* Assign symbols to all worthy DIEs under DIE.  */
9316
9317 static void
9318 assign_symbol_names (dw_die_ref die)
9319 {
9320   dw_die_ref c;
9321
9322   if (is_symbol_die (die))
9323     {
9324       if (comdat_symbol_id)
9325         {
9326           char *p = XALLOCAVEC (char, strlen (comdat_symbol_id) + 64);
9327
9328           sprintf (p, "%s.%s.%x", DIE_LABEL_PREFIX,
9329                    comdat_symbol_id, comdat_symbol_number++);
9330           die->die_id.die_symbol = xstrdup (p);
9331         }
9332       else
9333         die->die_id.die_symbol = gen_internal_sym ("LDIE");
9334     }
9335
9336   FOR_EACH_CHILD (die, c, assign_symbol_names (c));
9337 }
9338
9339 struct cu_hash_table_entry
9340 {
9341   dw_die_ref cu;
9342   unsigned min_comdat_num, max_comdat_num;
9343   struct cu_hash_table_entry *next;
9344 };
9345
9346 /* Routines to manipulate hash table of CUs.  */
9347 static hashval_t
9348 htab_cu_hash (const void *of)
9349 {
9350   const struct cu_hash_table_entry *const entry =
9351     (const struct cu_hash_table_entry *) of;
9352
9353   return htab_hash_string (entry->cu->die_id.die_symbol);
9354 }
9355
9356 static int
9357 htab_cu_eq (const void *of1, const void *of2)
9358 {
9359   const struct cu_hash_table_entry *const entry1 =
9360     (const struct cu_hash_table_entry *) of1;
9361   const struct die_struct *const entry2 = (const struct die_struct *) of2;
9362
9363   return !strcmp (entry1->cu->die_id.die_symbol, entry2->die_id.die_symbol);
9364 }
9365
9366 static void
9367 htab_cu_del (void *what)
9368 {
9369   struct cu_hash_table_entry *next,
9370     *entry = (struct cu_hash_table_entry *) what;
9371
9372   while (entry)
9373     {
9374       next = entry->next;
9375       free (entry);
9376       entry = next;
9377     }
9378 }
9379
9380 /* Check whether we have already seen this CU and set up SYM_NUM
9381    accordingly.  */
9382 static int
9383 check_duplicate_cu (dw_die_ref cu, htab_t htable, unsigned int *sym_num)
9384 {
9385   struct cu_hash_table_entry dummy;
9386   struct cu_hash_table_entry **slot, *entry, *last = &dummy;
9387
9388   dummy.max_comdat_num = 0;
9389
9390   slot = (struct cu_hash_table_entry **)
9391     htab_find_slot_with_hash (htable, cu, htab_hash_string (cu->die_id.die_symbol),
9392         INSERT);
9393   entry = *slot;
9394
9395   for (; entry; last = entry, entry = entry->next)
9396     {
9397       if (same_die_p_wrap (cu, entry->cu))
9398         break;
9399     }
9400
9401   if (entry)
9402     {
9403       *sym_num = entry->min_comdat_num;
9404       return 1;
9405     }
9406
9407   entry = XCNEW (struct cu_hash_table_entry);
9408   entry->cu = cu;
9409   entry->min_comdat_num = *sym_num = last->max_comdat_num;
9410   entry->next = *slot;
9411   *slot = entry;
9412
9413   return 0;
9414 }
9415
9416 /* Record SYM_NUM to record of CU in HTABLE.  */
9417 static void
9418 record_comdat_symbol_number (dw_die_ref cu, htab_t htable, unsigned int sym_num)
9419 {
9420   struct cu_hash_table_entry **slot, *entry;
9421
9422   slot = (struct cu_hash_table_entry **)
9423     htab_find_slot_with_hash (htable, cu, htab_hash_string (cu->die_id.die_symbol),
9424         NO_INSERT);
9425   entry = *slot;
9426
9427   entry->max_comdat_num = sym_num;
9428 }
9429
9430 /* Traverse the DIE (which is always comp_unit_die), and set up
9431    additional compilation units for each of the include files we see
9432    bracketed by BINCL/EINCL.  */
9433
9434 static void
9435 break_out_includes (dw_die_ref die)
9436 {
9437   dw_die_ref c;
9438   dw_die_ref unit = NULL;
9439   limbo_die_node *node, **pnode;
9440   htab_t cu_hash_table;
9441
9442   c = die->die_child;
9443   if (c) do {
9444     dw_die_ref prev = c;
9445     c = c->die_sib;
9446     while (c->die_tag == DW_TAG_GNU_BINCL || c->die_tag == DW_TAG_GNU_EINCL
9447            || (unit && is_comdat_die (c)))
9448       {
9449         dw_die_ref next = c->die_sib;
9450
9451         /* This DIE is for a secondary CU; remove it from the main one.  */
9452         remove_child_with_prev (c, prev);
9453
9454         if (c->die_tag == DW_TAG_GNU_BINCL)
9455           unit = push_new_compile_unit (unit, c);
9456         else if (c->die_tag == DW_TAG_GNU_EINCL)
9457           unit = pop_compile_unit (unit);
9458         else
9459           add_child_die (unit, c);
9460         c = next;
9461         if (c == die->die_child)
9462           break;
9463       }
9464   } while (c != die->die_child);
9465
9466 #if 0
9467   /* We can only use this in debugging, since the frontend doesn't check
9468      to make sure that we leave every include file we enter.  */
9469   gcc_assert (!unit);
9470 #endif
9471
9472   assign_symbol_names (die);
9473   cu_hash_table = htab_create (10, htab_cu_hash, htab_cu_eq, htab_cu_del);
9474   for (node = limbo_die_list, pnode = &limbo_die_list;
9475        node;
9476        node = node->next)
9477     {
9478       int is_dupl;
9479
9480       compute_section_prefix (node->die);
9481       is_dupl = check_duplicate_cu (node->die, cu_hash_table,
9482                         &comdat_symbol_number);
9483       assign_symbol_names (node->die);
9484       if (is_dupl)
9485         *pnode = node->next;
9486       else
9487         {
9488           pnode = &node->next;
9489           record_comdat_symbol_number (node->die, cu_hash_table,
9490                 comdat_symbol_number);
9491         }
9492     }
9493   htab_delete (cu_hash_table);
9494 }
9495
9496 /* Return non-zero if this DIE is a declaration.  */
9497
9498 static int
9499 is_declaration_die (dw_die_ref die)
9500 {
9501   dw_attr_ref a;
9502   unsigned ix;
9503
9504   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
9505     if (a->dw_attr == DW_AT_declaration)
9506       return 1;
9507
9508   return 0;
9509 }
9510
9511 /* Return non-zero if this is a type DIE that should be moved to a
9512    COMDAT .debug_types section.  */
9513
9514 static int
9515 should_move_die_to_comdat (dw_die_ref die)
9516 {
9517   switch (die->die_tag)
9518     {
9519     case DW_TAG_class_type:
9520     case DW_TAG_structure_type:
9521     case DW_TAG_enumeration_type:
9522     case DW_TAG_union_type:
9523       /* Don't move declarations or inlined instances.  */
9524       if (is_declaration_die (die) || get_AT (die, DW_AT_abstract_origin))
9525         return 0;
9526       return 1;
9527     case DW_TAG_array_type:
9528     case DW_TAG_interface_type:
9529     case DW_TAG_pointer_type:
9530     case DW_TAG_reference_type:
9531     case DW_TAG_rvalue_reference_type:
9532     case DW_TAG_string_type:
9533     case DW_TAG_subroutine_type:
9534     case DW_TAG_ptr_to_member_type:
9535     case DW_TAG_set_type:
9536     case DW_TAG_subrange_type:
9537     case DW_TAG_base_type:
9538     case DW_TAG_const_type:
9539     case DW_TAG_file_type:
9540     case DW_TAG_packed_type:
9541     case DW_TAG_volatile_type:
9542     case DW_TAG_typedef:
9543     default:
9544       return 0;
9545     }
9546 }
9547
9548 /* Make a clone of DIE.  */
9549
9550 static dw_die_ref
9551 clone_die (dw_die_ref die)
9552 {
9553   dw_die_ref clone;
9554   dw_attr_ref a;
9555   unsigned ix;
9556
9557   clone = GGC_CNEW (die_node);
9558   clone->die_tag = die->die_tag;
9559
9560   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
9561     add_dwarf_attr (clone, a);
9562
9563   return clone;
9564 }
9565
9566 /* Make a clone of the tree rooted at DIE.  */
9567
9568 static dw_die_ref
9569 clone_tree (dw_die_ref die)
9570 {
9571   dw_die_ref c;
9572   dw_die_ref clone = clone_die (die);
9573
9574   FOR_EACH_CHILD (die, c, add_child_die (clone, clone_tree(c)));
9575
9576   return clone;
9577 }
9578
9579 /* Make a clone of DIE as a declaration.  */
9580
9581 static dw_die_ref
9582 clone_as_declaration (dw_die_ref die)
9583 {
9584   dw_die_ref clone;
9585   dw_die_ref decl;
9586   dw_attr_ref a;
9587   unsigned ix;
9588
9589   /* If the DIE is already a declaration, just clone it.  */
9590   if (is_declaration_die (die))
9591     return clone_die (die);
9592
9593   /* If the DIE is a specification, just clone its declaration DIE.  */
9594   decl = get_AT_ref (die, DW_AT_specification);
9595   if (decl != NULL)
9596     return clone_die (decl);
9597
9598   clone = GGC_CNEW (die_node);
9599   clone->die_tag = die->die_tag;
9600
9601   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
9602     {
9603       /* We don't want to copy over all attributes.
9604          For example we don't want DW_AT_byte_size because otherwise we will no
9605          longer have a declaration and GDB will treat it as a definition.  */
9606
9607       switch (a->dw_attr)
9608         {
9609         case DW_AT_artificial:
9610         case DW_AT_containing_type:
9611         case DW_AT_external:
9612         case DW_AT_name:
9613         case DW_AT_type:
9614         case DW_AT_virtuality:
9615         case DW_AT_linkage_name:
9616         case DW_AT_MIPS_linkage_name:
9617           add_dwarf_attr (clone, a);
9618           break;
9619         case DW_AT_byte_size:
9620         default:
9621           break;
9622         }
9623     }
9624
9625   if (die->die_id.die_type_node)
9626     add_AT_die_ref (clone, DW_AT_signature, die);
9627
9628   add_AT_flag (clone, DW_AT_declaration, 1);
9629   return clone;
9630 }
9631
9632 /* Copy the declaration context to the new compile unit DIE.  This includes
9633    any surrounding namespace or type declarations.  If the DIE has an
9634    AT_specification attribute, it also includes attributes and children
9635    attached to the specification.  */
9636
9637 static void
9638 copy_declaration_context (dw_die_ref unit, dw_die_ref die)
9639 {
9640   dw_die_ref decl;
9641   dw_die_ref new_decl;
9642
9643   decl = get_AT_ref (die, DW_AT_specification);
9644   if (decl == NULL)
9645     decl = die;
9646   else
9647     {
9648       unsigned ix;
9649       dw_die_ref c;
9650       dw_attr_ref a;
9651
9652       /* Copy the type node pointer from the new DIE to the original
9653          declaration DIE so we can forward references later.  */
9654       decl->die_id.die_type_node = die->die_id.die_type_node;
9655
9656       remove_AT (die, DW_AT_specification);
9657
9658       for (ix = 0; VEC_iterate (dw_attr_node, decl->die_attr, ix, a); ix++)
9659         {
9660           if (a->dw_attr != DW_AT_name
9661               && a->dw_attr != DW_AT_declaration
9662               && a->dw_attr != DW_AT_external)
9663             add_dwarf_attr (die, a);
9664         }
9665
9666       FOR_EACH_CHILD (decl, c, add_child_die (die, clone_tree(c)));
9667     }
9668
9669   if (decl->die_parent != NULL
9670       && decl->die_parent->die_tag != DW_TAG_compile_unit
9671       && decl->die_parent->die_tag != DW_TAG_type_unit)
9672     {
9673       new_decl = copy_ancestor_tree (unit, decl, NULL);
9674       if (new_decl != NULL)
9675         {
9676           remove_AT (new_decl, DW_AT_signature);
9677           add_AT_specification (die, new_decl);
9678         }
9679     }
9680 }
9681
9682 /* Generate the skeleton ancestor tree for the given NODE, then clone
9683    the DIE and add the clone into the tree.  */
9684
9685 static void
9686 generate_skeleton_ancestor_tree (skeleton_chain_node *node)
9687 {
9688   if (node->new_die != NULL)
9689     return;
9690
9691   node->new_die = clone_as_declaration (node->old_die);
9692
9693   if (node->parent != NULL)
9694     {
9695       generate_skeleton_ancestor_tree (node->parent);
9696       add_child_die (node->parent->new_die, node->new_die);
9697     }
9698 }
9699
9700 /* Generate a skeleton tree of DIEs containing any declarations that are
9701    found in the original tree.  We traverse the tree looking for declaration
9702    DIEs, and construct the skeleton from the bottom up whenever we find one.  */
9703
9704 static void
9705 generate_skeleton_bottom_up (skeleton_chain_node *parent)
9706 {
9707   skeleton_chain_node node;
9708   dw_die_ref c;
9709   dw_die_ref first;
9710   dw_die_ref prev = NULL;
9711   dw_die_ref next = NULL;
9712
9713   node.parent = parent;
9714
9715   first = c = parent->old_die->die_child;
9716   if (c)
9717     next = c->die_sib;
9718   if (c) do {
9719     if (prev == NULL || prev->die_sib == c)
9720       prev = c;
9721     c = next;
9722     next = (c == first ? NULL : c->die_sib);
9723     node.old_die = c;
9724     node.new_die = NULL;
9725     if (is_declaration_die (c))
9726       {
9727         /* Clone the existing DIE, move the original to the skeleton
9728            tree (which is in the main CU), and put the clone, with
9729            all the original's children, where the original came from.  */
9730         dw_die_ref clone = clone_die (c);
9731         move_all_children (c, clone);
9732
9733         replace_child (c, clone, prev);
9734         generate_skeleton_ancestor_tree (parent);
9735         add_child_die (parent->new_die, c);
9736         node.new_die = c;
9737         c = clone;
9738       }
9739     generate_skeleton_bottom_up (&node);
9740   } while (next != NULL);
9741 }
9742
9743 /* Wrapper function for generate_skeleton_bottom_up.  */
9744
9745 static dw_die_ref
9746 generate_skeleton (dw_die_ref die)
9747 {
9748   skeleton_chain_node node;
9749
9750   node.old_die = die;
9751   node.new_die = NULL;
9752   node.parent = NULL;
9753
9754   /* If this type definition is nested inside another type,
9755      always leave at least a declaration in its place.  */
9756   if (die->die_parent != NULL && is_type_die (die->die_parent))
9757     node.new_die = clone_as_declaration (die);
9758
9759   generate_skeleton_bottom_up (&node);
9760   return node.new_die;
9761 }
9762
9763 /* Remove the DIE from its parent, possibly replacing it with a cloned
9764    declaration.  The original DIE will be moved to a new compile unit
9765    so that existing references to it follow it to the new location.  If
9766    any of the original DIE's descendants is a declaration, we need to
9767    replace the original DIE with a skeleton tree and move the
9768    declarations back into the skeleton tree.  */
9769
9770 static dw_die_ref
9771 remove_child_or_replace_with_skeleton (dw_die_ref child, dw_die_ref prev)
9772 {
9773   dw_die_ref skeleton;
9774
9775   skeleton = generate_skeleton (child);
9776   if (skeleton == NULL)
9777     remove_child_with_prev (child, prev);
9778   else
9779     {
9780       skeleton->die_id.die_type_node = child->die_id.die_type_node;
9781       replace_child (child, skeleton, prev);
9782     }
9783
9784   return skeleton;
9785 }
9786
9787 /* Traverse the DIE and set up additional .debug_types sections for each
9788    type worthy of being placed in a COMDAT section.  */
9789
9790 static void
9791 break_out_comdat_types (dw_die_ref die)
9792 {
9793   dw_die_ref c;
9794   dw_die_ref first;
9795   dw_die_ref prev = NULL;
9796   dw_die_ref next = NULL;
9797   dw_die_ref unit = NULL;
9798
9799   first = c = die->die_child;
9800   if (c)
9801     next = c->die_sib;
9802   if (c) do {
9803     if (prev == NULL || prev->die_sib == c)
9804       prev = c;
9805     c = next;
9806     next = (c == first ? NULL : c->die_sib);
9807     if (should_move_die_to_comdat (c))
9808       {
9809         dw_die_ref replacement;
9810         comdat_type_node_ref type_node;
9811
9812         /* Create a new type unit DIE as the root for the new tree, and
9813            add it to the list of comdat types.  */
9814         unit = new_die (DW_TAG_type_unit, NULL, NULL);
9815         add_AT_unsigned (unit, DW_AT_language,
9816                          get_AT_unsigned (comp_unit_die, DW_AT_language));
9817         type_node = GGC_CNEW (comdat_type_node);
9818         type_node->root_die = unit;
9819         type_node->next = comdat_type_list;
9820         comdat_type_list = type_node;
9821
9822         /* Generate the type signature.  */
9823         generate_type_signature (c, type_node);
9824
9825         /* Copy the declaration context, attributes, and children of the
9826            declaration into the new compile unit DIE.  */
9827         copy_declaration_context (unit, c);
9828
9829         /* Remove this DIE from the main CU.  */
9830         replacement = remove_child_or_replace_with_skeleton (c, prev);
9831
9832         /* Break out nested types into their own type units.  */
9833         break_out_comdat_types (c);
9834
9835         /* Add the DIE to the new compunit.  */
9836         add_child_die (unit, c);
9837
9838         if (replacement != NULL)
9839           c = replacement;
9840       }
9841     else if (c->die_tag == DW_TAG_namespace
9842              || c->die_tag == DW_TAG_class_type
9843              || c->die_tag == DW_TAG_structure_type
9844              || c->die_tag == DW_TAG_union_type)
9845       {
9846         /* Look for nested types that can be broken out.  */
9847         break_out_comdat_types (c);
9848       }
9849   } while (next != NULL);
9850 }
9851
9852 /* Structure to map a DIE in one CU to its copy in a comdat type unit.  */
9853
9854 struct decl_table_entry
9855 {
9856   dw_die_ref orig;
9857   dw_die_ref copy;
9858 };
9859
9860 /* Routines to manipulate hash table of copied declarations.  */
9861
9862 static hashval_t
9863 htab_decl_hash (const void *of)
9864 {
9865   const struct decl_table_entry *const entry =
9866     (const struct decl_table_entry *) of;
9867
9868   return htab_hash_pointer (entry->orig);
9869 }
9870
9871 static int
9872 htab_decl_eq (const void *of1, const void *of2)
9873 {
9874   const struct decl_table_entry *const entry1 =
9875     (const struct decl_table_entry *) of1;
9876   const struct die_struct *const entry2 = (const struct die_struct *) of2;
9877
9878   return entry1->orig == entry2;
9879 }
9880
9881 static void
9882 htab_decl_del (void *what)
9883 {
9884   struct decl_table_entry *entry = (struct decl_table_entry *) what;
9885
9886   free (entry);
9887 }
9888
9889 /* Copy DIE and its ancestors, up to, but not including, the compile unit
9890    or type unit entry, to a new tree.  Adds the new tree to UNIT and returns
9891    a pointer to the copy of DIE.  If DECL_TABLE is provided, it is used
9892    to check if the ancestor has already been copied into UNIT.  */
9893
9894 static dw_die_ref
9895 copy_ancestor_tree (dw_die_ref unit, dw_die_ref die, htab_t decl_table)
9896 {
9897   dw_die_ref parent = die->die_parent;
9898   dw_die_ref new_parent = unit;
9899   dw_die_ref copy;
9900   void **slot = NULL;
9901   struct decl_table_entry *entry = NULL;
9902
9903   if (decl_table)
9904     {
9905       /* Check if the entry has already been copied to UNIT.  */
9906       slot = htab_find_slot_with_hash (decl_table, die,
9907                                        htab_hash_pointer (die), INSERT);
9908       if (*slot != HTAB_EMPTY_ENTRY)
9909         {
9910           entry = (struct decl_table_entry *) *slot;
9911           return entry->copy;
9912         }
9913
9914       /* Record in DECL_TABLE that DIE has been copied to UNIT.  */
9915       entry = XCNEW (struct decl_table_entry);
9916       entry->orig = die;
9917       entry->copy = NULL;
9918       *slot = entry;
9919     }
9920
9921   if (parent != NULL)
9922     {
9923       dw_die_ref spec = get_AT_ref (parent, DW_AT_specification);
9924       if (spec != NULL)
9925         parent = spec;
9926       if (parent->die_tag != DW_TAG_compile_unit
9927           && parent->die_tag != DW_TAG_type_unit)
9928         new_parent = copy_ancestor_tree (unit, parent, decl_table);
9929     }
9930
9931   copy = clone_as_declaration (die);
9932   add_child_die (new_parent, copy);
9933
9934   if (decl_table != NULL)
9935     {
9936       /* Make sure the copy is marked as part of the type unit.  */
9937       copy->die_mark = 1;
9938       /* Record the pointer to the copy.  */
9939       entry->copy = copy;
9940     }
9941
9942   return copy;
9943 }
9944
9945 /* Walk the DIE and its children, looking for references to incomplete
9946    or trivial types that are unmarked (i.e., that are not in the current
9947    type_unit).  */
9948
9949 static void
9950 copy_decls_walk (dw_die_ref unit, dw_die_ref die, htab_t decl_table)
9951 {
9952   dw_die_ref c;
9953   dw_attr_ref a;
9954   unsigned ix;
9955
9956   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
9957     {
9958       if (AT_class (a) == dw_val_class_die_ref)
9959         {
9960           dw_die_ref targ = AT_ref (a);
9961           comdat_type_node_ref type_node = targ->die_id.die_type_node;
9962           void **slot;
9963           struct decl_table_entry *entry;
9964
9965           if (targ->die_mark != 0 || type_node != NULL)
9966             continue;
9967
9968           slot = htab_find_slot_with_hash (decl_table, targ,
9969                                            htab_hash_pointer (targ), INSERT);
9970
9971           if (*slot != HTAB_EMPTY_ENTRY)
9972             {
9973               /* TARG has already been copied, so we just need to
9974                  modify the reference to point to the copy.  */
9975               entry = (struct decl_table_entry *) *slot;
9976               a->dw_attr_val.v.val_die_ref.die = entry->copy;
9977             }
9978           else
9979             {
9980               dw_die_ref parent = unit;
9981               dw_die_ref copy = clone_tree (targ);
9982
9983               /* Make sure the cloned tree is marked as part of the
9984                  type unit.  */
9985               mark_dies (copy);
9986
9987               /* Record in DECL_TABLE that TARG has been copied.
9988                  Need to do this now, before the recursive call,
9989                  because DECL_TABLE may be expanded and SLOT
9990                  would no longer be a valid pointer.  */
9991               entry = XCNEW (struct decl_table_entry);
9992               entry->orig = targ;
9993               entry->copy = copy;
9994               *slot = entry;
9995
9996               /* If TARG has surrounding context, copy its ancestor tree
9997                  into the new type unit.  */
9998               if (targ->die_parent != NULL
9999                   && targ->die_parent->die_tag != DW_TAG_compile_unit
10000                   && targ->die_parent->die_tag != DW_TAG_type_unit)
10001                 parent = copy_ancestor_tree (unit, targ->die_parent,
10002                                              decl_table);
10003
10004               add_child_die (parent, copy);
10005               a->dw_attr_val.v.val_die_ref.die = copy;
10006
10007               /* Make sure the newly-copied DIE is walked.  If it was
10008                  installed in a previously-added context, it won't
10009                  get visited otherwise.  */
10010               if (parent != unit)
10011                 copy_decls_walk (unit, parent, decl_table);
10012             }
10013         }
10014     }
10015
10016   FOR_EACH_CHILD (die, c, copy_decls_walk (unit, c, decl_table));
10017 }
10018
10019 /* Copy declarations for "unworthy" types into the new comdat section.
10020    Incomplete types, modified types, and certain other types aren't broken
10021    out into comdat sections of their own, so they don't have a signature,
10022    and we need to copy the declaration into the same section so that we
10023    don't have an external reference.  */
10024
10025 static void
10026 copy_decls_for_unworthy_types (dw_die_ref unit)
10027 {
10028   htab_t decl_table;
10029
10030   mark_dies (unit);
10031   decl_table = htab_create (10, htab_decl_hash, htab_decl_eq, htab_decl_del);
10032   copy_decls_walk (unit, unit, decl_table);
10033   htab_delete (decl_table);
10034   unmark_dies (unit);
10035 }
10036
10037 /* Traverse the DIE and add a sibling attribute if it may have the
10038    effect of speeding up access to siblings.  To save some space,
10039    avoid generating sibling attributes for DIE's without children.  */
10040
10041 static void
10042 add_sibling_attributes (dw_die_ref die)
10043 {
10044   dw_die_ref c;
10045
10046   if (! die->die_child)
10047     return;
10048
10049   if (die->die_parent && die != die->die_parent->die_child)
10050     add_AT_die_ref (die, DW_AT_sibling, die->die_sib);
10051
10052   FOR_EACH_CHILD (die, c, add_sibling_attributes (c));
10053 }
10054
10055 /* Output all location lists for the DIE and its children.  */
10056
10057 static void
10058 output_location_lists (dw_die_ref die)
10059 {
10060   dw_die_ref c;
10061   dw_attr_ref a;
10062   unsigned ix;
10063
10064   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
10065     if (AT_class (a) == dw_val_class_loc_list)
10066       output_loc_list (AT_loc_list (a));
10067
10068   FOR_EACH_CHILD (die, c, output_location_lists (c));
10069 }
10070
10071 /* The format of each DIE (and its attribute value pairs) is encoded in an
10072    abbreviation table.  This routine builds the abbreviation table and assigns
10073    a unique abbreviation id for each abbreviation entry.  The children of each
10074    die are visited recursively.  */
10075
10076 static void
10077 build_abbrev_table (dw_die_ref die)
10078 {
10079   unsigned long abbrev_id;
10080   unsigned int n_alloc;
10081   dw_die_ref c;
10082   dw_attr_ref a;
10083   unsigned ix;
10084
10085   /* Scan the DIE references, and mark as external any that refer to
10086      DIEs from other CUs (i.e. those which are not marked).  */
10087   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
10088     if (AT_class (a) == dw_val_class_die_ref
10089         && AT_ref (a)->die_mark == 0)
10090       {
10091         gcc_assert (dwarf_version >= 4 || AT_ref (a)->die_id.die_symbol);
10092         set_AT_ref_external (a, 1);
10093       }
10094
10095   for (abbrev_id = 1; abbrev_id < abbrev_die_table_in_use; ++abbrev_id)
10096     {
10097       dw_die_ref abbrev = abbrev_die_table[abbrev_id];
10098       dw_attr_ref die_a, abbrev_a;
10099       unsigned ix;
10100       bool ok = true;
10101
10102       if (abbrev->die_tag != die->die_tag)
10103         continue;
10104       if ((abbrev->die_child != NULL) != (die->die_child != NULL))
10105         continue;
10106
10107       if (VEC_length (dw_attr_node, abbrev->die_attr)
10108           != VEC_length (dw_attr_node, die->die_attr))
10109         continue;
10110
10111       for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, die_a); ix++)
10112         {
10113           abbrev_a = VEC_index (dw_attr_node, abbrev->die_attr, ix);
10114           if ((abbrev_a->dw_attr != die_a->dw_attr)
10115               || (value_format (abbrev_a) != value_format (die_a)))
10116             {
10117               ok = false;
10118               break;
10119             }
10120         }
10121       if (ok)
10122         break;
10123     }
10124
10125   if (abbrev_id >= abbrev_die_table_in_use)
10126     {
10127       if (abbrev_die_table_in_use >= abbrev_die_table_allocated)
10128         {
10129           n_alloc = abbrev_die_table_allocated + ABBREV_DIE_TABLE_INCREMENT;
10130           abbrev_die_table = GGC_RESIZEVEC (dw_die_ref, abbrev_die_table,
10131                                             n_alloc);
10132
10133           memset (&abbrev_die_table[abbrev_die_table_allocated], 0,
10134                  (n_alloc - abbrev_die_table_allocated) * sizeof (dw_die_ref));
10135           abbrev_die_table_allocated = n_alloc;
10136         }
10137
10138       ++abbrev_die_table_in_use;
10139       abbrev_die_table[abbrev_id] = die;
10140     }
10141
10142   die->die_abbrev = abbrev_id;
10143   FOR_EACH_CHILD (die, c, build_abbrev_table (c));
10144 }
10145 \f
10146 /* Return the power-of-two number of bytes necessary to represent VALUE.  */
10147
10148 static int
10149 constant_size (unsigned HOST_WIDE_INT value)
10150 {
10151   int log;
10152
10153   if (value == 0)
10154     log = 0;
10155   else
10156     log = floor_log2 (value);
10157
10158   log = log / 8;
10159   log = 1 << (floor_log2 (log) + 1);
10160
10161   return log;
10162 }
10163
10164 /* Return the size of a DIE as it is represented in the
10165    .debug_info section.  */
10166
10167 static unsigned long
10168 size_of_die (dw_die_ref die)
10169 {
10170   unsigned long size = 0;
10171   dw_attr_ref a;
10172   unsigned ix;
10173
10174   size += size_of_uleb128 (die->die_abbrev);
10175   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
10176     {
10177       switch (AT_class (a))
10178         {
10179         case dw_val_class_addr:
10180           size += DWARF2_ADDR_SIZE;
10181           break;
10182         case dw_val_class_offset:
10183           size += DWARF_OFFSET_SIZE;
10184           break;
10185         case dw_val_class_loc:
10186           {
10187             unsigned long lsize = size_of_locs (AT_loc (a));
10188
10189             /* Block length.  */
10190             if (dwarf_version >= 4)
10191               size += size_of_uleb128 (lsize);
10192             else
10193               size += constant_size (lsize);
10194             size += lsize;
10195           }
10196           break;
10197         case dw_val_class_loc_list:
10198           size += DWARF_OFFSET_SIZE;
10199           break;
10200         case dw_val_class_range_list:
10201           size += DWARF_OFFSET_SIZE;
10202           break;
10203         case dw_val_class_const:
10204           size += size_of_sleb128 (AT_int (a));
10205           break;
10206         case dw_val_class_unsigned_const:
10207           size += constant_size (AT_unsigned (a));
10208           break;
10209         case dw_val_class_const_double:
10210           size += 2 * HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR;
10211           if (HOST_BITS_PER_WIDE_INT >= 64)
10212             size++; /* block */
10213           break;
10214         case dw_val_class_vec:
10215           size += constant_size (a->dw_attr_val.v.val_vec.length
10216                                  * a->dw_attr_val.v.val_vec.elt_size)
10217                   + a->dw_attr_val.v.val_vec.length
10218                     * a->dw_attr_val.v.val_vec.elt_size; /* block */
10219           break;
10220         case dw_val_class_flag:
10221           if (dwarf_version >= 4)
10222             /* Currently all add_AT_flag calls pass in 1 as last argument,
10223                so DW_FORM_flag_present can be used.  If that ever changes,
10224                we'll need to use DW_FORM_flag and have some optimization
10225                in build_abbrev_table that will change those to
10226                DW_FORM_flag_present if it is set to 1 in all DIEs using
10227                the same abbrev entry.  */
10228             gcc_assert (a->dw_attr_val.v.val_flag == 1);
10229           else
10230             size += 1;
10231           break;
10232         case dw_val_class_die_ref:
10233           if (AT_ref_external (a))
10234             {
10235               /* In DWARF4, we use DW_FORM_sig8; for earlier versions
10236                  we use DW_FORM_ref_addr.  In DWARF2, DW_FORM_ref_addr
10237                  is sized by target address length, whereas in DWARF3
10238                  it's always sized as an offset.  */
10239               if (dwarf_version >= 4)
10240                 size += DWARF_TYPE_SIGNATURE_SIZE;
10241               else if (dwarf_version == 2)
10242                 size += DWARF2_ADDR_SIZE;
10243               else
10244                 size += DWARF_OFFSET_SIZE;
10245             }
10246           else
10247             size += DWARF_OFFSET_SIZE;
10248           break;
10249         case dw_val_class_fde_ref:
10250           size += DWARF_OFFSET_SIZE;
10251           break;
10252         case dw_val_class_lbl_id:
10253           size += DWARF2_ADDR_SIZE;
10254           break;
10255         case dw_val_class_lineptr:
10256         case dw_val_class_macptr:
10257           size += DWARF_OFFSET_SIZE;
10258           break;
10259         case dw_val_class_str:
10260           if (AT_string_form (a) == DW_FORM_strp)
10261             size += DWARF_OFFSET_SIZE;
10262           else
10263             size += strlen (a->dw_attr_val.v.val_str->str) + 1;
10264           break;
10265         case dw_val_class_file:
10266           size += constant_size (maybe_emit_file (a->dw_attr_val.v.val_file));
10267           break;
10268         case dw_val_class_data8:
10269           size += 8;
10270           break;
10271         default:
10272           gcc_unreachable ();
10273         }
10274     }
10275
10276   return size;
10277 }
10278
10279 /* Size the debugging information associated with a given DIE.  Visits the
10280    DIE's children recursively.  Updates the global variable next_die_offset, on
10281    each time through.  Uses the current value of next_die_offset to update the
10282    die_offset field in each DIE.  */
10283
10284 static void
10285 calc_die_sizes (dw_die_ref die)
10286 {
10287   dw_die_ref c;
10288
10289   die->die_offset = next_die_offset;
10290   next_die_offset += size_of_die (die);
10291
10292   FOR_EACH_CHILD (die, c, calc_die_sizes (c));
10293
10294   if (die->die_child != NULL)
10295     /* Count the null byte used to terminate sibling lists.  */
10296     next_die_offset += 1;
10297 }
10298
10299 /* Set the marks for a die and its children.  We do this so
10300    that we know whether or not a reference needs to use FORM_ref_addr; only
10301    DIEs in the same CU will be marked.  We used to clear out the offset
10302    and use that as the flag, but ran into ordering problems.  */
10303
10304 static void
10305 mark_dies (dw_die_ref die)
10306 {
10307   dw_die_ref c;
10308
10309   gcc_assert (!die->die_mark);
10310
10311   die->die_mark = 1;
10312   FOR_EACH_CHILD (die, c, mark_dies (c));
10313 }
10314
10315 /* Clear the marks for a die and its children.  */
10316
10317 static void
10318 unmark_dies (dw_die_ref die)
10319 {
10320   dw_die_ref c;
10321
10322   if (dwarf_version < 4)
10323     gcc_assert (die->die_mark);
10324
10325   die->die_mark = 0;
10326   FOR_EACH_CHILD (die, c, unmark_dies (c));
10327 }
10328
10329 /* Clear the marks for a die, its children and referred dies.  */
10330
10331 static void
10332 unmark_all_dies (dw_die_ref die)
10333 {
10334   dw_die_ref c;
10335   dw_attr_ref a;
10336   unsigned ix;
10337
10338   if (!die->die_mark)
10339     return;
10340   die->die_mark = 0;
10341
10342   FOR_EACH_CHILD (die, c, unmark_all_dies (c));
10343
10344   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
10345     if (AT_class (a) == dw_val_class_die_ref)
10346       unmark_all_dies (AT_ref (a));
10347 }
10348
10349 /* Return the size of the .debug_pubnames or .debug_pubtypes table
10350    generated for the compilation unit.  */
10351
10352 static unsigned long
10353 size_of_pubnames (VEC (pubname_entry, gc) * names)
10354 {
10355   unsigned long size;
10356   unsigned i;
10357   pubname_ref p;
10358
10359   size = DWARF_PUBNAMES_HEADER_SIZE;
10360   for (i = 0; VEC_iterate (pubname_entry, names, i, p); i++)
10361     if (names != pubtype_table
10362         || p->die->die_offset != 0
10363         || !flag_eliminate_unused_debug_types)
10364       size += strlen (p->name) + DWARF_OFFSET_SIZE + 1;
10365
10366   size += DWARF_OFFSET_SIZE;
10367   return size;
10368 }
10369
10370 /* Return the size of the information in the .debug_aranges section.  */
10371
10372 static unsigned long
10373 size_of_aranges (void)
10374 {
10375   unsigned long size;
10376
10377   size = DWARF_ARANGES_HEADER_SIZE;
10378
10379   /* Count the address/length pair for this compilation unit.  */
10380   if (text_section_used)
10381     size += 2 * DWARF2_ADDR_SIZE;
10382   if (cold_text_section_used)
10383     size += 2 * DWARF2_ADDR_SIZE;
10384   size += 2 * DWARF2_ADDR_SIZE * arange_table_in_use;
10385
10386   /* Count the two zero words used to terminated the address range table.  */
10387   size += 2 * DWARF2_ADDR_SIZE;
10388   return size;
10389 }
10390 \f
10391 /* Select the encoding of an attribute value.  */
10392
10393 static enum dwarf_form
10394 value_format (dw_attr_ref a)
10395 {
10396   switch (a->dw_attr_val.val_class)
10397     {
10398     case dw_val_class_addr:
10399       /* Only very few attributes allow DW_FORM_addr.  */
10400       switch (a->dw_attr)
10401         {
10402         case DW_AT_low_pc:
10403         case DW_AT_high_pc:
10404         case DW_AT_entry_pc:
10405         case DW_AT_trampoline:
10406           return DW_FORM_addr;
10407         default:
10408           break;
10409         }
10410       switch (DWARF2_ADDR_SIZE)
10411         {
10412         case 1:
10413           return DW_FORM_data1;
10414         case 2:
10415           return DW_FORM_data2;
10416         case 4:
10417           return DW_FORM_data4;
10418         case 8:
10419           return DW_FORM_data8;
10420         default:
10421           gcc_unreachable ();
10422         }
10423     case dw_val_class_range_list:
10424     case dw_val_class_loc_list:
10425       if (dwarf_version >= 4)
10426         return DW_FORM_sec_offset;
10427       /* FALLTHRU */
10428     case dw_val_class_offset:
10429       switch (DWARF_OFFSET_SIZE)
10430         {
10431         case 4:
10432           return DW_FORM_data4;
10433         case 8:
10434           return DW_FORM_data8;
10435         default:
10436           gcc_unreachable ();
10437         }
10438     case dw_val_class_loc:
10439       if (dwarf_version >= 4)
10440         return DW_FORM_exprloc;
10441       switch (constant_size (size_of_locs (AT_loc (a))))
10442         {
10443         case 1:
10444           return DW_FORM_block1;
10445         case 2:
10446           return DW_FORM_block2;
10447         default:
10448           gcc_unreachable ();
10449         }
10450     case dw_val_class_const:
10451       return DW_FORM_sdata;
10452     case dw_val_class_unsigned_const:
10453       switch (constant_size (AT_unsigned (a)))
10454         {
10455         case 1:
10456           return DW_FORM_data1;
10457         case 2:
10458           return DW_FORM_data2;
10459         case 4:
10460           return DW_FORM_data4;
10461         case 8:
10462           return DW_FORM_data8;
10463         default:
10464           gcc_unreachable ();
10465         }
10466     case dw_val_class_const_double:
10467       switch (HOST_BITS_PER_WIDE_INT)
10468         {
10469         case 8:
10470           return DW_FORM_data2;
10471         case 16:
10472           return DW_FORM_data4;
10473         case 32:
10474           return DW_FORM_data8;
10475         case 64:
10476         default:
10477           return DW_FORM_block1;
10478         }
10479     case dw_val_class_vec:
10480       switch (constant_size (a->dw_attr_val.v.val_vec.length
10481                              * a->dw_attr_val.v.val_vec.elt_size))
10482         {
10483         case 1:
10484           return DW_FORM_block1;
10485         case 2:
10486           return DW_FORM_block2;
10487         case 4:
10488           return DW_FORM_block4;
10489         default:
10490           gcc_unreachable ();
10491         }
10492     case dw_val_class_flag:
10493       if (dwarf_version >= 4)
10494         {
10495           /* Currently all add_AT_flag calls pass in 1 as last argument,
10496              so DW_FORM_flag_present can be used.  If that ever changes,
10497              we'll need to use DW_FORM_flag and have some optimization
10498              in build_abbrev_table that will change those to
10499              DW_FORM_flag_present if it is set to 1 in all DIEs using
10500              the same abbrev entry.  */
10501           gcc_assert (a->dw_attr_val.v.val_flag == 1);
10502           return DW_FORM_flag_present;
10503         }
10504       return DW_FORM_flag;
10505     case dw_val_class_die_ref:
10506       if (AT_ref_external (a))
10507         return dwarf_version >= 4 ? DW_FORM_sig8 : DW_FORM_ref_addr;
10508       else
10509         return DW_FORM_ref;
10510     case dw_val_class_fde_ref:
10511       return DW_FORM_data;
10512     case dw_val_class_lbl_id:
10513       return DW_FORM_addr;
10514     case dw_val_class_lineptr:
10515     case dw_val_class_macptr:
10516       return dwarf_version >= 4 ? DW_FORM_sec_offset : DW_FORM_data;
10517     case dw_val_class_str:
10518       return AT_string_form (a);
10519     case dw_val_class_file:
10520       switch (constant_size (maybe_emit_file (a->dw_attr_val.v.val_file)))
10521         {
10522         case 1:
10523           return DW_FORM_data1;
10524         case 2:
10525           return DW_FORM_data2;
10526         case 4:
10527           return DW_FORM_data4;
10528         default:
10529           gcc_unreachable ();
10530         }
10531
10532     case dw_val_class_data8:
10533       return DW_FORM_data8;
10534
10535     default:
10536       gcc_unreachable ();
10537     }
10538 }
10539
10540 /* Output the encoding of an attribute value.  */
10541
10542 static void
10543 output_value_format (dw_attr_ref a)
10544 {
10545   enum dwarf_form form = value_format (a);
10546
10547   dw2_asm_output_data_uleb128 (form, "(%s)", dwarf_form_name (form));
10548 }
10549
10550 /* Output the .debug_abbrev section which defines the DIE abbreviation
10551    table.  */
10552
10553 static void
10554 output_abbrev_section (void)
10555 {
10556   unsigned long abbrev_id;
10557
10558   for (abbrev_id = 1; abbrev_id < abbrev_die_table_in_use; ++abbrev_id)
10559     {
10560       dw_die_ref abbrev = abbrev_die_table[abbrev_id];
10561       unsigned ix;
10562       dw_attr_ref a_attr;
10563
10564       dw2_asm_output_data_uleb128 (abbrev_id, "(abbrev code)");
10565       dw2_asm_output_data_uleb128 (abbrev->die_tag, "(TAG: %s)",
10566                                    dwarf_tag_name (abbrev->die_tag));
10567
10568       if (abbrev->die_child != NULL)
10569         dw2_asm_output_data (1, DW_children_yes, "DW_children_yes");
10570       else
10571         dw2_asm_output_data (1, DW_children_no, "DW_children_no");
10572
10573       for (ix = 0; VEC_iterate (dw_attr_node, abbrev->die_attr, ix, a_attr);
10574            ix++)
10575         {
10576           dw2_asm_output_data_uleb128 (a_attr->dw_attr, "(%s)",
10577                                        dwarf_attr_name (a_attr->dw_attr));
10578           output_value_format (a_attr);
10579         }
10580
10581       dw2_asm_output_data (1, 0, NULL);
10582       dw2_asm_output_data (1, 0, NULL);
10583     }
10584
10585   /* Terminate the table.  */
10586   dw2_asm_output_data (1, 0, NULL);
10587 }
10588
10589 /* Output a symbol we can use to refer to this DIE from another CU.  */
10590
10591 static inline void
10592 output_die_symbol (dw_die_ref die)
10593 {
10594   char *sym = die->die_id.die_symbol;
10595
10596   if (sym == 0)
10597     return;
10598
10599   if (strncmp (sym, DIE_LABEL_PREFIX, sizeof (DIE_LABEL_PREFIX) - 1) == 0)
10600     /* We make these global, not weak; if the target doesn't support
10601        .linkonce, it doesn't support combining the sections, so debugging
10602        will break.  */
10603     targetm.asm_out.globalize_label (asm_out_file, sym);
10604
10605   ASM_OUTPUT_LABEL (asm_out_file, sym);
10606 }
10607
10608 /* Return a new location list, given the begin and end range, and the
10609    expression.  */
10610
10611 static inline dw_loc_list_ref
10612 new_loc_list (dw_loc_descr_ref expr, const char *begin, const char *end,
10613               const char *section)
10614 {
10615   dw_loc_list_ref retlist = GGC_CNEW (dw_loc_list_node);
10616
10617   retlist->begin = begin;
10618   retlist->end = end;
10619   retlist->expr = expr;
10620   retlist->section = section;
10621
10622   return retlist;
10623 }
10624
10625 /* Generate a new internal symbol for this location list node, if it
10626    hasn't got one yet.  */
10627
10628 static inline void
10629 gen_llsym (dw_loc_list_ref list)
10630 {
10631   gcc_assert (!list->ll_symbol);
10632   list->ll_symbol = gen_internal_sym ("LLST");
10633 }
10634
10635 /* Output the location list given to us.  */
10636
10637 static void
10638 output_loc_list (dw_loc_list_ref list_head)
10639 {
10640   dw_loc_list_ref curr = list_head;
10641
10642   ASM_OUTPUT_LABEL (asm_out_file, list_head->ll_symbol);
10643
10644   /* Walk the location list, and output each range + expression.  */
10645   for (curr = list_head; curr != NULL; curr = curr->dw_loc_next)
10646     {
10647       unsigned long size;
10648       /* Don't output an entry that starts and ends at the same address.  */
10649       if (strcmp (curr->begin, curr->end) == 0)
10650         continue;
10651       if (!have_multiple_function_sections)
10652         {
10653           dw2_asm_output_delta (DWARF2_ADDR_SIZE, curr->begin, curr->section,
10654                                 "Location list begin address (%s)",
10655                                 list_head->ll_symbol);
10656           dw2_asm_output_delta (DWARF2_ADDR_SIZE, curr->end, curr->section,
10657                                 "Location list end address (%s)",
10658                                 list_head->ll_symbol);
10659         }
10660       else
10661         {
10662           dw2_asm_output_addr (DWARF2_ADDR_SIZE, curr->begin,
10663                                "Location list begin address (%s)",
10664                                list_head->ll_symbol);
10665           dw2_asm_output_addr (DWARF2_ADDR_SIZE, curr->end,
10666                                "Location list end address (%s)",
10667                                list_head->ll_symbol);
10668         }
10669       size = size_of_locs (curr->expr);
10670
10671       /* Output the block length for this list of location operations.  */
10672       gcc_assert (size <= 0xffff);
10673       dw2_asm_output_data (2, size, "%s", "Location expression size");
10674
10675       output_loc_sequence (curr->expr);
10676     }
10677
10678   dw2_asm_output_data (DWARF2_ADDR_SIZE, 0,
10679                        "Location list terminator begin (%s)",
10680                        list_head->ll_symbol);
10681   dw2_asm_output_data (DWARF2_ADDR_SIZE, 0,
10682                        "Location list terminator end (%s)",
10683                        list_head->ll_symbol);
10684 }
10685
10686 /* Output a type signature.  */
10687
10688 static inline void
10689 output_signature (const char *sig, const char *name)
10690 {
10691   int i;
10692
10693   for (i = 0; i < DWARF_TYPE_SIGNATURE_SIZE; i++)
10694     dw2_asm_output_data (1, sig[i], i == 0 ? "%s" : NULL, name);
10695 }
10696
10697 /* Output the DIE and its attributes.  Called recursively to generate
10698    the definitions of each child DIE.  */
10699
10700 static void
10701 output_die (dw_die_ref die)
10702 {
10703   dw_attr_ref a;
10704   dw_die_ref c;
10705   unsigned long size;
10706   unsigned ix;
10707
10708   /* If someone in another CU might refer to us, set up a symbol for
10709      them to point to.  */
10710   if (dwarf_version < 4 && die->die_id.die_symbol)
10711     output_die_symbol (die);
10712
10713   dw2_asm_output_data_uleb128 (die->die_abbrev, "(DIE (%#lx) %s)",
10714                                (unsigned long)die->die_offset,
10715                                dwarf_tag_name (die->die_tag));
10716
10717   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
10718     {
10719       const char *name = dwarf_attr_name (a->dw_attr);
10720
10721       switch (AT_class (a))
10722         {
10723         case dw_val_class_addr:
10724           dw2_asm_output_addr_rtx (DWARF2_ADDR_SIZE, AT_addr (a), "%s", name);
10725           break;
10726
10727         case dw_val_class_offset:
10728           dw2_asm_output_data (DWARF_OFFSET_SIZE, a->dw_attr_val.v.val_offset,
10729                                "%s", name);
10730           break;
10731
10732         case dw_val_class_range_list:
10733           {
10734             char *p = strchr (ranges_section_label, '\0');
10735
10736             sprintf (p, "+" HOST_WIDE_INT_PRINT_HEX,
10737                      a->dw_attr_val.v.val_offset);
10738             dw2_asm_output_offset (DWARF_OFFSET_SIZE, ranges_section_label,
10739                                    debug_ranges_section, "%s", name);
10740             *p = '\0';
10741           }
10742           break;
10743
10744         case dw_val_class_loc:
10745           size = size_of_locs (AT_loc (a));
10746
10747           /* Output the block length for this list of location operations.  */
10748           if (dwarf_version >= 4)
10749             dw2_asm_output_data_uleb128 (size, "%s", name);
10750           else
10751             dw2_asm_output_data (constant_size (size), size, "%s", name);
10752
10753           output_loc_sequence (AT_loc (a));
10754           break;
10755
10756         case dw_val_class_const:
10757           /* ??? It would be slightly more efficient to use a scheme like is
10758              used for unsigned constants below, but gdb 4.x does not sign
10759              extend.  Gdb 5.x does sign extend.  */
10760           dw2_asm_output_data_sleb128 (AT_int (a), "%s", name);
10761           break;
10762
10763         case dw_val_class_unsigned_const:
10764           dw2_asm_output_data (constant_size (AT_unsigned (a)),
10765                                AT_unsigned (a), "%s", name);
10766           break;
10767
10768         case dw_val_class_const_double:
10769           {
10770             unsigned HOST_WIDE_INT first, second;
10771
10772             if (HOST_BITS_PER_WIDE_INT >= 64)
10773               dw2_asm_output_data (1,
10774                                    2 * HOST_BITS_PER_WIDE_INT
10775                                    / HOST_BITS_PER_CHAR,
10776                                    NULL);
10777
10778             if (WORDS_BIG_ENDIAN)
10779               {
10780                 first = a->dw_attr_val.v.val_double.high;
10781                 second = a->dw_attr_val.v.val_double.low;
10782               }
10783             else
10784               {
10785                 first = a->dw_attr_val.v.val_double.low;
10786                 second = a->dw_attr_val.v.val_double.high;
10787               }
10788
10789             dw2_asm_output_data (HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR,
10790                                  first, name);
10791             dw2_asm_output_data (HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR,
10792                                  second, NULL);
10793           }
10794           break;
10795
10796         case dw_val_class_vec:
10797           {
10798             unsigned int elt_size = a->dw_attr_val.v.val_vec.elt_size;
10799             unsigned int len = a->dw_attr_val.v.val_vec.length;
10800             unsigned int i;
10801             unsigned char *p;
10802
10803             dw2_asm_output_data (constant_size (len * elt_size),
10804                                  len * elt_size, "%s", name);
10805             if (elt_size > sizeof (HOST_WIDE_INT))
10806               {
10807                 elt_size /= 2;
10808                 len *= 2;
10809               }
10810             for (i = 0, p = a->dw_attr_val.v.val_vec.array;
10811                  i < len;
10812                  i++, p += elt_size)
10813               dw2_asm_output_data (elt_size, extract_int (p, elt_size),
10814                                    "fp or vector constant word %u", i);
10815             break;
10816           }
10817
10818         case dw_val_class_flag:
10819           if (dwarf_version >= 4)
10820             {
10821               /* Currently all add_AT_flag calls pass in 1 as last argument,
10822                  so DW_FORM_flag_present can be used.  If that ever changes,
10823                  we'll need to use DW_FORM_flag and have some optimization
10824                  in build_abbrev_table that will change those to
10825                  DW_FORM_flag_present if it is set to 1 in all DIEs using
10826                  the same abbrev entry.  */
10827               gcc_assert (AT_flag (a) == 1);
10828               if (flag_debug_asm)
10829                 fprintf (asm_out_file, "\t\t\t%s %s\n",
10830                          ASM_COMMENT_START, name);
10831               break;
10832             }
10833           dw2_asm_output_data (1, AT_flag (a), "%s", name);
10834           break;
10835
10836         case dw_val_class_loc_list:
10837           {
10838             char *sym = AT_loc_list (a)->ll_symbol;
10839
10840             gcc_assert (sym);
10841             dw2_asm_output_offset (DWARF_OFFSET_SIZE, sym, debug_loc_section,
10842                                    "%s", name);
10843           }
10844           break;
10845
10846         case dw_val_class_die_ref:
10847           if (AT_ref_external (a))
10848             {
10849               if (dwarf_version >= 4)
10850                 {
10851                   comdat_type_node_ref type_node =
10852                     AT_ref (a)->die_id.die_type_node;
10853
10854                   gcc_assert (type_node);
10855                   output_signature (type_node->signature, name);
10856                 }
10857               else
10858                 {
10859                   char *sym = AT_ref (a)->die_id.die_symbol;
10860                   int size;
10861
10862                   gcc_assert (sym);
10863                   /* In DWARF2, DW_FORM_ref_addr is sized by target address
10864                      length, whereas in DWARF3 it's always sized as an
10865                      offset.  */
10866                   if (dwarf_version == 2)
10867                     size = DWARF2_ADDR_SIZE;
10868                   else
10869                     size = DWARF_OFFSET_SIZE;
10870                   dw2_asm_output_offset (size, sym, debug_info_section, "%s",
10871                                          name);
10872                 }
10873             }
10874           else
10875             {
10876               gcc_assert (AT_ref (a)->die_offset);
10877               dw2_asm_output_data (DWARF_OFFSET_SIZE, AT_ref (a)->die_offset,
10878                                    "%s", name);
10879             }
10880           break;
10881
10882         case dw_val_class_fde_ref:
10883           {
10884             char l1[20];
10885
10886             ASM_GENERATE_INTERNAL_LABEL (l1, FDE_LABEL,
10887                                          a->dw_attr_val.v.val_fde_index * 2);
10888             dw2_asm_output_offset (DWARF_OFFSET_SIZE, l1, debug_frame_section,
10889                                    "%s", name);
10890           }
10891           break;
10892
10893         case dw_val_class_lbl_id:
10894           dw2_asm_output_addr (DWARF2_ADDR_SIZE, AT_lbl (a), "%s", name);
10895           break;
10896
10897         case dw_val_class_lineptr:
10898           dw2_asm_output_offset (DWARF_OFFSET_SIZE, AT_lbl (a),
10899                                  debug_line_section, "%s", name);
10900           break;
10901
10902         case dw_val_class_macptr:
10903           dw2_asm_output_offset (DWARF_OFFSET_SIZE, AT_lbl (a),
10904                                  debug_macinfo_section, "%s", name);
10905           break;
10906
10907         case dw_val_class_str:
10908           if (AT_string_form (a) == DW_FORM_strp)
10909             dw2_asm_output_offset (DWARF_OFFSET_SIZE,
10910                                    a->dw_attr_val.v.val_str->label,
10911                                    debug_str_section,
10912                                    "%s: \"%s\"", name, AT_string (a));
10913           else
10914             dw2_asm_output_nstring (AT_string (a), -1, "%s", name);
10915           break;
10916
10917         case dw_val_class_file:
10918           {
10919             int f = maybe_emit_file (a->dw_attr_val.v.val_file);
10920
10921             dw2_asm_output_data (constant_size (f), f, "%s (%s)", name,
10922                                  a->dw_attr_val.v.val_file->filename);
10923             break;
10924           }
10925
10926         case dw_val_class_data8:
10927           {
10928             int i;
10929
10930             for (i = 0; i < 8; i++)
10931               dw2_asm_output_data (1, a->dw_attr_val.v.val_data8[i],
10932                                    i == 0 ? "%s" : NULL, name);
10933             break;
10934           }
10935
10936         default:
10937           gcc_unreachable ();
10938         }
10939     }
10940
10941   FOR_EACH_CHILD (die, c, output_die (c));
10942
10943   /* Add null byte to terminate sibling list.  */
10944   if (die->die_child != NULL)
10945     dw2_asm_output_data (1, 0, "end of children of DIE %#lx",
10946                          (unsigned long) die->die_offset);
10947 }
10948
10949 /* Output the compilation unit that appears at the beginning of the
10950    .debug_info section, and precedes the DIE descriptions.  */
10951
10952 static void
10953 output_compilation_unit_header (void)
10954 {
10955   int ver = dwarf_version;
10956
10957   if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
10958     dw2_asm_output_data (4, 0xffffffff,
10959       "Initial length escape value indicating 64-bit DWARF extension");
10960   dw2_asm_output_data (DWARF_OFFSET_SIZE,
10961                        next_die_offset - DWARF_INITIAL_LENGTH_SIZE,
10962                        "Length of Compilation Unit Info");
10963   dw2_asm_output_data (2, ver, "DWARF version number");
10964   dw2_asm_output_offset (DWARF_OFFSET_SIZE, abbrev_section_label,
10965                          debug_abbrev_section,
10966                          "Offset Into Abbrev. Section");
10967   dw2_asm_output_data (1, DWARF2_ADDR_SIZE, "Pointer Size (in bytes)");
10968 }
10969
10970 /* Output the compilation unit DIE and its children.  */
10971
10972 static void
10973 output_comp_unit (dw_die_ref die, int output_if_empty)
10974 {
10975   const char *secname;
10976   char *oldsym, *tmp;
10977
10978   /* Unless we are outputting main CU, we may throw away empty ones.  */
10979   if (!output_if_empty && die->die_child == NULL)
10980     return;
10981
10982   /* Even if there are no children of this DIE, we must output the information
10983      about the compilation unit.  Otherwise, on an empty translation unit, we
10984      will generate a present, but empty, .debug_info section.  IRIX 6.5 `nm'
10985      will then complain when examining the file.  First mark all the DIEs in
10986      this CU so we know which get local refs.  */
10987   mark_dies (die);
10988
10989   build_abbrev_table (die);
10990
10991   /* Initialize the beginning DIE offset - and calculate sizes/offsets.  */
10992   next_die_offset = DWARF_COMPILE_UNIT_HEADER_SIZE;
10993   calc_die_sizes (die);
10994
10995   oldsym = die->die_id.die_symbol;
10996   if (oldsym)
10997     {
10998       tmp = XALLOCAVEC (char, strlen (oldsym) + 24);
10999
11000       sprintf (tmp, ".gnu.linkonce.wi.%s", oldsym);
11001       secname = tmp;
11002       die->die_id.die_symbol = NULL;
11003       switch_to_section (get_section (secname, SECTION_DEBUG, NULL));
11004     }
11005   else
11006     switch_to_section (debug_info_section);
11007
11008   /* Output debugging information.  */
11009   output_compilation_unit_header ();
11010   output_die (die);
11011
11012   /* Leave the marks on the main CU, so we can check them in
11013      output_pubnames.  */
11014   if (oldsym)
11015     {
11016       unmark_dies (die);
11017       die->die_id.die_symbol = oldsym;
11018     }
11019 }
11020
11021 /* Output a comdat type unit DIE and its children.  */
11022
11023 static void
11024 output_comdat_type_unit (comdat_type_node *node)
11025 {
11026   const char *secname;
11027   char *tmp;
11028   int i;
11029 #if defined (OBJECT_FORMAT_ELF)
11030   tree comdat_key;
11031 #endif
11032
11033   /* First mark all the DIEs in this CU so we know which get local refs.  */
11034   mark_dies (node->root_die);
11035
11036   build_abbrev_table (node->root_die);
11037
11038   /* Initialize the beginning DIE offset - and calculate sizes/offsets.  */
11039   next_die_offset = DWARF_COMDAT_TYPE_UNIT_HEADER_SIZE;
11040   calc_die_sizes (node->root_die);
11041
11042 #if defined (OBJECT_FORMAT_ELF)
11043   secname = ".debug_types";
11044   tmp = XALLOCAVEC (char, 4 + DWARF_TYPE_SIGNATURE_SIZE * 2);
11045   sprintf (tmp, "wt.");
11046   for (i = 0; i < DWARF_TYPE_SIGNATURE_SIZE; i++)
11047     sprintf (tmp + 3 + i * 2, "%02x", node->signature[i] & 0xff);
11048   comdat_key = get_identifier (tmp);
11049   targetm.asm_out.named_section (secname,
11050                                  SECTION_DEBUG | SECTION_LINKONCE,
11051                                  comdat_key);
11052 #else
11053   tmp = XALLOCAVEC (char, 18 + DWARF_TYPE_SIGNATURE_SIZE * 2);
11054   sprintf (tmp, ".gnu.linkonce.wt.");
11055   for (i = 0; i < DWARF_TYPE_SIGNATURE_SIZE; i++)
11056     sprintf (tmp + 17 + i * 2, "%02x", node->signature[i] & 0xff);
11057   secname = tmp;
11058   switch_to_section (get_section (secname, SECTION_DEBUG, NULL));
11059 #endif
11060
11061   /* Output debugging information.  */
11062   output_compilation_unit_header ();
11063   output_signature (node->signature, "Type Signature");
11064   dw2_asm_output_data (DWARF_OFFSET_SIZE, node->type_die->die_offset,
11065                        "Offset to Type DIE");
11066   output_die (node->root_die);
11067
11068   unmark_dies (node->root_die);
11069 }
11070
11071 /* Return the DWARF2/3 pubname associated with a decl.  */
11072
11073 static const char *
11074 dwarf2_name (tree decl, int scope)
11075 {
11076   return lang_hooks.dwarf_name (decl, scope ? 1 : 0);
11077 }
11078
11079 /* Add a new entry to .debug_pubnames if appropriate.  */
11080
11081 static void
11082 add_pubname_string (const char *str, dw_die_ref die)
11083 {
11084   pubname_entry e;
11085
11086   e.die = die;
11087   e.name = xstrdup (str);
11088   VEC_safe_push (pubname_entry, gc, pubname_table, &e);
11089 }
11090
11091 static void
11092 add_pubname (tree decl, dw_die_ref die)
11093 {
11094   if (TREE_PUBLIC (decl))
11095     {
11096       const char *name = dwarf2_name (decl, 1);
11097       if (name)
11098         add_pubname_string (name, die);
11099     }
11100 }
11101
11102 /* Add a new entry to .debug_pubtypes if appropriate.  */
11103
11104 static void
11105 add_pubtype (tree decl, dw_die_ref die)
11106 {
11107   pubname_entry e;
11108
11109   e.name = NULL;
11110   if ((TREE_PUBLIC (decl)
11111        || die->die_parent == comp_unit_die)
11112       && (die->die_tag == DW_TAG_typedef || COMPLETE_TYPE_P (decl)))
11113     {
11114       e.die = die;
11115       if (TYPE_P (decl))
11116         {
11117           if (TYPE_NAME (decl))
11118             {
11119               if (TREE_CODE (TYPE_NAME (decl)) == IDENTIFIER_NODE)
11120                 e.name = IDENTIFIER_POINTER (TYPE_NAME (decl));
11121               else if (TREE_CODE (TYPE_NAME (decl)) == TYPE_DECL
11122                        && DECL_NAME (TYPE_NAME (decl)))
11123                 e.name = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (decl)));
11124               else
11125                e.name = xstrdup ((const char *) get_AT_string (die, DW_AT_name));
11126             }
11127         }
11128       else
11129         {
11130           e.name = dwarf2_name (decl, 1);
11131           if (e.name)
11132             e.name = xstrdup (e.name);
11133         }
11134
11135       /* If we don't have a name for the type, there's no point in adding
11136          it to the table.  */
11137       if (e.name && e.name[0] != '\0')
11138         VEC_safe_push (pubname_entry, gc, pubtype_table, &e);
11139     }
11140 }
11141
11142 /* Output the public names table used to speed up access to externally
11143    visible names; or the public types table used to find type definitions.  */
11144
11145 static void
11146 output_pubnames (VEC (pubname_entry, gc) * names)
11147 {
11148   unsigned i;
11149   unsigned long pubnames_length = size_of_pubnames (names);
11150   pubname_ref pub;
11151
11152   if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
11153     dw2_asm_output_data (4, 0xffffffff,
11154       "Initial length escape value indicating 64-bit DWARF extension");
11155   if (names == pubname_table)
11156     dw2_asm_output_data (DWARF_OFFSET_SIZE, pubnames_length,
11157                          "Length of Public Names Info");
11158   else
11159     dw2_asm_output_data (DWARF_OFFSET_SIZE, pubnames_length,
11160                          "Length of Public Type Names Info");
11161   /* Version number for pubnames/pubtypes is still 2, even in DWARF3.  */
11162   dw2_asm_output_data (2, 2, "DWARF Version");
11163   dw2_asm_output_offset (DWARF_OFFSET_SIZE, debug_info_section_label,
11164                          debug_info_section,
11165                          "Offset of Compilation Unit Info");
11166   dw2_asm_output_data (DWARF_OFFSET_SIZE, next_die_offset,
11167                        "Compilation Unit Length");
11168
11169   for (i = 0; VEC_iterate (pubname_entry, names, i, pub); i++)
11170     {
11171       /* We shouldn't see pubnames for DIEs outside of the main CU.  */
11172       if (names == pubname_table)
11173         gcc_assert (pub->die->die_mark);
11174
11175       if (names != pubtype_table
11176           || pub->die->die_offset != 0
11177           || !flag_eliminate_unused_debug_types)
11178         {
11179           dw2_asm_output_data (DWARF_OFFSET_SIZE, pub->die->die_offset,
11180                                "DIE offset");
11181
11182           dw2_asm_output_nstring (pub->name, -1, "external name");
11183         }
11184     }
11185
11186   dw2_asm_output_data (DWARF_OFFSET_SIZE, 0, NULL);
11187 }
11188
11189 /* Add a new entry to .debug_aranges if appropriate.  */
11190
11191 static void
11192 add_arange (tree decl, dw_die_ref die)
11193 {
11194   if (! DECL_SECTION_NAME (decl))
11195     return;
11196
11197   if (arange_table_in_use == arange_table_allocated)
11198     {
11199       arange_table_allocated += ARANGE_TABLE_INCREMENT;
11200       arange_table = GGC_RESIZEVEC (dw_die_ref, arange_table,
11201                                     arange_table_allocated);
11202       memset (arange_table + arange_table_in_use, 0,
11203               ARANGE_TABLE_INCREMENT * sizeof (dw_die_ref));
11204     }
11205
11206   arange_table[arange_table_in_use++] = die;
11207 }
11208
11209 /* Output the information that goes into the .debug_aranges table.
11210    Namely, define the beginning and ending address range of the
11211    text section generated for this compilation unit.  */
11212
11213 static void
11214 output_aranges (void)
11215 {
11216   unsigned i;
11217   unsigned long aranges_length = size_of_aranges ();
11218
11219   if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
11220     dw2_asm_output_data (4, 0xffffffff,
11221       "Initial length escape value indicating 64-bit DWARF extension");
11222   dw2_asm_output_data (DWARF_OFFSET_SIZE, aranges_length,
11223                        "Length of Address Ranges Info");
11224   /* Version number for aranges is still 2, even in DWARF3.  */
11225   dw2_asm_output_data (2, 2, "DWARF Version");
11226   dw2_asm_output_offset (DWARF_OFFSET_SIZE, debug_info_section_label,
11227                          debug_info_section,
11228                          "Offset of Compilation Unit Info");
11229   dw2_asm_output_data (1, DWARF2_ADDR_SIZE, "Size of Address");
11230   dw2_asm_output_data (1, 0, "Size of Segment Descriptor");
11231
11232   /* We need to align to twice the pointer size here.  */
11233   if (DWARF_ARANGES_PAD_SIZE)
11234     {
11235       /* Pad using a 2 byte words so that padding is correct for any
11236          pointer size.  */
11237       dw2_asm_output_data (2, 0, "Pad to %d byte boundary",
11238                            2 * DWARF2_ADDR_SIZE);
11239       for (i = 2; i < (unsigned) DWARF_ARANGES_PAD_SIZE; i += 2)
11240         dw2_asm_output_data (2, 0, NULL);
11241     }
11242
11243   /* It is necessary not to output these entries if the sections were
11244      not used; if the sections were not used, the length will be 0 and
11245      the address may end up as 0 if the section is discarded by ld
11246      --gc-sections, leaving an invalid (0, 0) entry that can be
11247      confused with the terminator.  */
11248   if (text_section_used)
11249     {
11250       dw2_asm_output_addr (DWARF2_ADDR_SIZE, text_section_label, "Address");
11251       dw2_asm_output_delta (DWARF2_ADDR_SIZE, text_end_label,
11252                             text_section_label, "Length");
11253     }
11254   if (cold_text_section_used)
11255     {
11256       dw2_asm_output_addr (DWARF2_ADDR_SIZE, cold_text_section_label,
11257                            "Address");
11258       dw2_asm_output_delta (DWARF2_ADDR_SIZE, cold_end_label,
11259                             cold_text_section_label, "Length");
11260     }
11261
11262   for (i = 0; i < arange_table_in_use; i++)
11263     {
11264       dw_die_ref die = arange_table[i];
11265
11266       /* We shouldn't see aranges for DIEs outside of the main CU.  */
11267       gcc_assert (die->die_mark);
11268
11269       if (die->die_tag == DW_TAG_subprogram)
11270         {
11271           dw2_asm_output_addr (DWARF2_ADDR_SIZE, get_AT_low_pc (die),
11272                                "Address");
11273           dw2_asm_output_delta (DWARF2_ADDR_SIZE, get_AT_hi_pc (die),
11274                                 get_AT_low_pc (die), "Length");
11275         }
11276       else
11277         {
11278           /* A static variable; extract the symbol from DW_AT_location.
11279              Note that this code isn't currently hit, as we only emit
11280              aranges for functions (jason 9/23/99).  */
11281           dw_attr_ref a = get_AT (die, DW_AT_location);
11282           dw_loc_descr_ref loc;
11283
11284           gcc_assert (a && AT_class (a) == dw_val_class_loc);
11285
11286           loc = AT_loc (a);
11287           gcc_assert (loc->dw_loc_opc == DW_OP_addr);
11288
11289           dw2_asm_output_addr_rtx (DWARF2_ADDR_SIZE,
11290                                    loc->dw_loc_oprnd1.v.val_addr, "Address");
11291           dw2_asm_output_data (DWARF2_ADDR_SIZE,
11292                                get_AT_unsigned (die, DW_AT_byte_size),
11293                                "Length");
11294         }
11295     }
11296
11297   /* Output the terminator words.  */
11298   dw2_asm_output_data (DWARF2_ADDR_SIZE, 0, NULL);
11299   dw2_asm_output_data (DWARF2_ADDR_SIZE, 0, NULL);
11300 }
11301
11302 /* Add a new entry to .debug_ranges.  Return the offset at which it
11303    was placed.  */
11304
11305 static unsigned int
11306 add_ranges_num (int num)
11307 {
11308   unsigned int in_use = ranges_table_in_use;
11309
11310   if (in_use == ranges_table_allocated)
11311     {
11312       ranges_table_allocated += RANGES_TABLE_INCREMENT;
11313       ranges_table = GGC_RESIZEVEC (struct dw_ranges_struct, ranges_table,
11314                                     ranges_table_allocated);
11315       memset (ranges_table + ranges_table_in_use, 0,
11316               RANGES_TABLE_INCREMENT * sizeof (struct dw_ranges_struct));
11317     }
11318
11319   ranges_table[in_use].num = num;
11320   ranges_table_in_use = in_use + 1;
11321
11322   return in_use * 2 * DWARF2_ADDR_SIZE;
11323 }
11324
11325 /* Add a new entry to .debug_ranges corresponding to a block, or a
11326    range terminator if BLOCK is NULL.  */
11327
11328 static unsigned int
11329 add_ranges (const_tree block)
11330 {
11331   return add_ranges_num (block ? BLOCK_NUMBER (block) : 0);
11332 }
11333
11334 /* Add a new entry to .debug_ranges corresponding to a pair of
11335    labels.  */
11336
11337 static void
11338 add_ranges_by_labels (dw_die_ref die, const char *begin, const char *end,
11339                       bool *added)
11340 {
11341   unsigned int in_use = ranges_by_label_in_use;
11342   unsigned int offset;
11343
11344   if (in_use == ranges_by_label_allocated)
11345     {
11346       ranges_by_label_allocated += RANGES_TABLE_INCREMENT;
11347       ranges_by_label = GGC_RESIZEVEC (struct dw_ranges_by_label_struct,
11348                                        ranges_by_label,
11349                                        ranges_by_label_allocated);
11350       memset (ranges_by_label + ranges_by_label_in_use, 0,
11351               RANGES_TABLE_INCREMENT
11352               * sizeof (struct dw_ranges_by_label_struct));
11353     }
11354
11355   ranges_by_label[in_use].begin = begin;
11356   ranges_by_label[in_use].end = end;
11357   ranges_by_label_in_use = in_use + 1;
11358
11359   offset = add_ranges_num (-(int)in_use - 1);
11360   if (!*added)
11361     {
11362       add_AT_range_list (die, DW_AT_ranges, offset);
11363       *added = true;
11364     }
11365 }
11366
11367 static void
11368 output_ranges (void)
11369 {
11370   unsigned i;
11371   static const char *const start_fmt = "Offset %#x";
11372   const char *fmt = start_fmt;
11373
11374   for (i = 0; i < ranges_table_in_use; i++)
11375     {
11376       int block_num = ranges_table[i].num;
11377
11378       if (block_num > 0)
11379         {
11380           char blabel[MAX_ARTIFICIAL_LABEL_BYTES];
11381           char elabel[MAX_ARTIFICIAL_LABEL_BYTES];
11382
11383           ASM_GENERATE_INTERNAL_LABEL (blabel, BLOCK_BEGIN_LABEL, block_num);
11384           ASM_GENERATE_INTERNAL_LABEL (elabel, BLOCK_END_LABEL, block_num);
11385
11386           /* If all code is in the text section, then the compilation
11387              unit base address defaults to DW_AT_low_pc, which is the
11388              base of the text section.  */
11389           if (!have_multiple_function_sections)
11390             {
11391               dw2_asm_output_delta (DWARF2_ADDR_SIZE, blabel,
11392                                     text_section_label,
11393                                     fmt, i * 2 * DWARF2_ADDR_SIZE);
11394               dw2_asm_output_delta (DWARF2_ADDR_SIZE, elabel,
11395                                     text_section_label, NULL);
11396             }
11397
11398           /* Otherwise, the compilation unit base address is zero,
11399              which allows us to use absolute addresses, and not worry
11400              about whether the target supports cross-section
11401              arithmetic.  */
11402           else
11403             {
11404               dw2_asm_output_addr (DWARF2_ADDR_SIZE, blabel,
11405                                    fmt, i * 2 * DWARF2_ADDR_SIZE);
11406               dw2_asm_output_addr (DWARF2_ADDR_SIZE, elabel, NULL);
11407             }
11408
11409           fmt = NULL;
11410         }
11411
11412       /* Negative block_num stands for an index into ranges_by_label.  */
11413       else if (block_num < 0)
11414         {
11415           int lab_idx = - block_num - 1;
11416
11417           if (!have_multiple_function_sections)
11418             {
11419               gcc_unreachable ();
11420 #if 0
11421               /* If we ever use add_ranges_by_labels () for a single
11422                  function section, all we have to do is to take out
11423                  the #if 0 above.  */
11424               dw2_asm_output_delta (DWARF2_ADDR_SIZE,
11425                                     ranges_by_label[lab_idx].begin,
11426                                     text_section_label,
11427                                     fmt, i * 2 * DWARF2_ADDR_SIZE);
11428               dw2_asm_output_delta (DWARF2_ADDR_SIZE,
11429                                     ranges_by_label[lab_idx].end,
11430                                     text_section_label, NULL);
11431 #endif
11432             }
11433           else
11434             {
11435               dw2_asm_output_addr (DWARF2_ADDR_SIZE,
11436                                    ranges_by_label[lab_idx].begin,
11437                                    fmt, i * 2 * DWARF2_ADDR_SIZE);
11438               dw2_asm_output_addr (DWARF2_ADDR_SIZE,
11439                                    ranges_by_label[lab_idx].end,
11440                                    NULL);
11441             }
11442         }
11443       else
11444         {
11445           dw2_asm_output_data (DWARF2_ADDR_SIZE, 0, NULL);
11446           dw2_asm_output_data (DWARF2_ADDR_SIZE, 0, NULL);
11447           fmt = start_fmt;
11448         }
11449     }
11450 }
11451
11452 /* Data structure containing information about input files.  */
11453 struct file_info
11454 {
11455   const char *path;     /* Complete file name.  */
11456   const char *fname;    /* File name part.  */
11457   int length;           /* Length of entire string.  */
11458   struct dwarf_file_data * file_idx;    /* Index in input file table.  */
11459   int dir_idx;          /* Index in directory table.  */
11460 };
11461
11462 /* Data structure containing information about directories with source
11463    files.  */
11464 struct dir_info
11465 {
11466   const char *path;     /* Path including directory name.  */
11467   int length;           /* Path length.  */
11468   int prefix;           /* Index of directory entry which is a prefix.  */
11469   int count;            /* Number of files in this directory.  */
11470   int dir_idx;          /* Index of directory used as base.  */
11471 };
11472
11473 /* Callback function for file_info comparison.  We sort by looking at
11474    the directories in the path.  */
11475
11476 static int
11477 file_info_cmp (const void *p1, const void *p2)
11478 {
11479   const struct file_info *const s1 = (const struct file_info *) p1;
11480   const struct file_info *const s2 = (const struct file_info *) p2;
11481   const unsigned char *cp1;
11482   const unsigned char *cp2;
11483
11484   /* Take care of file names without directories.  We need to make sure that
11485      we return consistent values to qsort since some will get confused if
11486      we return the same value when identical operands are passed in opposite
11487      orders.  So if neither has a directory, return 0 and otherwise return
11488      1 or -1 depending on which one has the directory.  */
11489   if ((s1->path == s1->fname || s2->path == s2->fname))
11490     return (s2->path == s2->fname) - (s1->path == s1->fname);
11491
11492   cp1 = (const unsigned char *) s1->path;
11493   cp2 = (const unsigned char *) s2->path;
11494
11495   while (1)
11496     {
11497       ++cp1;
11498       ++cp2;
11499       /* Reached the end of the first path?  If so, handle like above.  */
11500       if ((cp1 == (const unsigned char *) s1->fname)
11501           || (cp2 == (const unsigned char *) s2->fname))
11502         return ((cp2 == (const unsigned char *) s2->fname)
11503                 - (cp1 == (const unsigned char *) s1->fname));
11504
11505       /* Character of current path component the same?  */
11506       else if (*cp1 != *cp2)
11507         return *cp1 - *cp2;
11508     }
11509 }
11510
11511 struct file_name_acquire_data
11512 {
11513   struct file_info *files;
11514   int used_files;
11515   int max_files;
11516 };
11517
11518 /* Traversal function for the hash table.  */
11519
11520 static int
11521 file_name_acquire (void ** slot, void *data)
11522 {
11523   struct file_name_acquire_data *fnad = (struct file_name_acquire_data *) data;
11524   struct dwarf_file_data *d = (struct dwarf_file_data *) *slot;
11525   struct file_info *fi;
11526   const char *f;
11527
11528   gcc_assert (fnad->max_files >= d->emitted_number);
11529
11530   if (! d->emitted_number)
11531     return 1;
11532
11533   gcc_assert (fnad->max_files != fnad->used_files);
11534
11535   fi = fnad->files + fnad->used_files++;
11536
11537   /* Skip all leading "./".  */
11538   f = d->filename;
11539   while (f[0] == '.' && IS_DIR_SEPARATOR (f[1]))
11540     f += 2;
11541
11542   /* Create a new array entry.  */
11543   fi->path = f;
11544   fi->length = strlen (f);
11545   fi->file_idx = d;
11546
11547   /* Search for the file name part.  */
11548   f = strrchr (f, DIR_SEPARATOR);
11549 #if defined (DIR_SEPARATOR_2)
11550   {
11551     char *g = strrchr (fi->path, DIR_SEPARATOR_2);
11552
11553     if (g != NULL)
11554       {
11555         if (f == NULL || f < g)
11556           f = g;
11557       }
11558   }
11559 #endif
11560
11561   fi->fname = f == NULL ? fi->path : f + 1;
11562   return 1;
11563 }
11564
11565 /* Output the directory table and the file name table.  We try to minimize
11566    the total amount of memory needed.  A heuristic is used to avoid large
11567    slowdowns with many input files.  */
11568
11569 static void
11570 output_file_names (void)
11571 {
11572   struct file_name_acquire_data fnad;
11573   int numfiles;
11574   struct file_info *files;
11575   struct dir_info *dirs;
11576   int *saved;
11577   int *savehere;
11578   int *backmap;
11579   int ndirs;
11580   int idx_offset;
11581   int i;
11582
11583   if (!last_emitted_file)
11584     {
11585       dw2_asm_output_data (1, 0, "End directory table");
11586       dw2_asm_output_data (1, 0, "End file name table");
11587       return;
11588     }
11589
11590   numfiles = last_emitted_file->emitted_number;
11591
11592   /* Allocate the various arrays we need.  */
11593   files = XALLOCAVEC (struct file_info, numfiles);
11594   dirs = XALLOCAVEC (struct dir_info, numfiles);
11595
11596   fnad.files = files;
11597   fnad.used_files = 0;
11598   fnad.max_files = numfiles;
11599   htab_traverse (file_table, file_name_acquire, &fnad);
11600   gcc_assert (fnad.used_files == fnad.max_files);
11601
11602   qsort (files, numfiles, sizeof (files[0]), file_info_cmp);
11603
11604   /* Find all the different directories used.  */
11605   dirs[0].path = files[0].path;
11606   dirs[0].length = files[0].fname - files[0].path;
11607   dirs[0].prefix = -1;
11608   dirs[0].count = 1;
11609   dirs[0].dir_idx = 0;
11610   files[0].dir_idx = 0;
11611   ndirs = 1;
11612
11613   for (i = 1; i < numfiles; i++)
11614     if (files[i].fname - files[i].path == dirs[ndirs - 1].length
11615         && memcmp (dirs[ndirs - 1].path, files[i].path,
11616                    dirs[ndirs - 1].length) == 0)
11617       {
11618         /* Same directory as last entry.  */
11619         files[i].dir_idx = ndirs - 1;
11620         ++dirs[ndirs - 1].count;
11621       }
11622     else
11623       {
11624         int j;
11625
11626         /* This is a new directory.  */
11627         dirs[ndirs].path = files[i].path;
11628         dirs[ndirs].length = files[i].fname - files[i].path;
11629         dirs[ndirs].count = 1;
11630         dirs[ndirs].dir_idx = ndirs;
11631         files[i].dir_idx = ndirs;
11632
11633         /* Search for a prefix.  */
11634         dirs[ndirs].prefix = -1;
11635         for (j = 0; j < ndirs; j++)
11636           if (dirs[j].length < dirs[ndirs].length
11637               && dirs[j].length > 1
11638               && (dirs[ndirs].prefix == -1
11639                   || dirs[j].length > dirs[dirs[ndirs].prefix].length)
11640               && memcmp (dirs[j].path, dirs[ndirs].path, dirs[j].length) == 0)
11641             dirs[ndirs].prefix = j;
11642
11643         ++ndirs;
11644       }
11645
11646   /* Now to the actual work.  We have to find a subset of the directories which
11647      allow expressing the file name using references to the directory table
11648      with the least amount of characters.  We do not do an exhaustive search
11649      where we would have to check out every combination of every single
11650      possible prefix.  Instead we use a heuristic which provides nearly optimal
11651      results in most cases and never is much off.  */
11652   saved = XALLOCAVEC (int, ndirs);
11653   savehere = XALLOCAVEC (int, ndirs);
11654
11655   memset (saved, '\0', ndirs * sizeof (saved[0]));
11656   for (i = 0; i < ndirs; i++)
11657     {
11658       int j;
11659       int total;
11660
11661       /* We can always save some space for the current directory.  But this
11662          does not mean it will be enough to justify adding the directory.  */
11663       savehere[i] = dirs[i].length;
11664       total = (savehere[i] - saved[i]) * dirs[i].count;
11665
11666       for (j = i + 1; j < ndirs; j++)
11667         {
11668           savehere[j] = 0;
11669           if (saved[j] < dirs[i].length)
11670             {
11671               /* Determine whether the dirs[i] path is a prefix of the
11672                  dirs[j] path.  */
11673               int k;
11674
11675               k = dirs[j].prefix;
11676               while (k != -1 && k != (int) i)
11677                 k = dirs[k].prefix;
11678
11679               if (k == (int) i)
11680                 {
11681                   /* Yes it is.  We can possibly save some memory by
11682                      writing the filenames in dirs[j] relative to
11683                      dirs[i].  */
11684                   savehere[j] = dirs[i].length;
11685                   total += (savehere[j] - saved[j]) * dirs[j].count;
11686                 }
11687             }
11688         }
11689
11690       /* Check whether we can save enough to justify adding the dirs[i]
11691          directory.  */
11692       if (total > dirs[i].length + 1)
11693         {
11694           /* It's worthwhile adding.  */
11695           for (j = i; j < ndirs; j++)
11696             if (savehere[j] > 0)
11697               {
11698                 /* Remember how much we saved for this directory so far.  */
11699                 saved[j] = savehere[j];
11700
11701                 /* Remember the prefix directory.  */
11702                 dirs[j].dir_idx = i;
11703               }
11704         }
11705     }
11706
11707   /* Emit the directory name table.  */
11708   idx_offset = dirs[0].length > 0 ? 1 : 0;
11709   for (i = 1 - idx_offset; i < ndirs; i++)
11710     dw2_asm_output_nstring (dirs[i].path,
11711                             dirs[i].length
11712                              - !DWARF2_DIR_SHOULD_END_WITH_SEPARATOR,
11713                             "Directory Entry: %#x", i + idx_offset);
11714
11715   dw2_asm_output_data (1, 0, "End directory table");
11716
11717   /* We have to emit them in the order of emitted_number since that's
11718      used in the debug info generation.  To do this efficiently we
11719      generate a back-mapping of the indices first.  */
11720   backmap = XALLOCAVEC (int, numfiles);
11721   for (i = 0; i < numfiles; i++)
11722     backmap[files[i].file_idx->emitted_number - 1] = i;
11723
11724   /* Now write all the file names.  */
11725   for (i = 0; i < numfiles; i++)
11726     {
11727       int file_idx = backmap[i];
11728       int dir_idx = dirs[files[file_idx].dir_idx].dir_idx;
11729
11730 #ifdef VMS_DEBUGGING_INFO
11731 #define MAX_VMS_VERSION_LEN 6 /* ";32768" */
11732
11733       /* Setting these fields can lead to debugger miscomparisons,
11734          but VMS Debug requires them to be set correctly.  */
11735
11736       int ver;
11737       long long cdt;
11738       long siz;
11739       int maxfilelen = strlen (files[file_idx].path)
11740                                + dirs[dir_idx].length
11741                                + MAX_VMS_VERSION_LEN + 1;
11742       char *filebuf = XALLOCAVEC (char, maxfilelen);
11743
11744       vms_file_stats_name (files[file_idx].path, 0, 0, 0, &ver);
11745       snprintf (filebuf, maxfilelen, "%s;%d",
11746                 files[file_idx].path + dirs[dir_idx].length, ver);
11747
11748       dw2_asm_output_nstring
11749         (filebuf, -1, "File Entry: %#x", (unsigned) i + 1);
11750
11751       /* Include directory index.  */
11752       dw2_asm_output_data_uleb128 (dir_idx + idx_offset, NULL);
11753
11754       /* Modification time.  */
11755       dw2_asm_output_data_uleb128
11756         ((vms_file_stats_name (files[file_idx].path, &cdt, 0, 0, 0) == 0)
11757           ? cdt : 0,
11758          NULL);
11759
11760       /* File length in bytes.  */
11761       dw2_asm_output_data_uleb128
11762         ((vms_file_stats_name (files[file_idx].path, 0, &siz, 0, 0) == 0)
11763           ? siz : 0,
11764          NULL);
11765 #else
11766       dw2_asm_output_nstring (files[file_idx].path + dirs[dir_idx].length, -1,
11767                               "File Entry: %#x", (unsigned) i + 1);
11768
11769       /* Include directory index.  */
11770       dw2_asm_output_data_uleb128 (dir_idx + idx_offset, NULL);
11771
11772       /* Modification time.  */
11773       dw2_asm_output_data_uleb128 (0, NULL);
11774
11775       /* File length in bytes.  */
11776       dw2_asm_output_data_uleb128 (0, NULL);
11777 #endif
11778     }
11779
11780   dw2_asm_output_data (1, 0, "End file name table");
11781 }
11782
11783
11784 /* Output the source line number correspondence information.  This
11785    information goes into the .debug_line section.  */
11786
11787 static void
11788 output_line_info (void)
11789 {
11790   char l1[20], l2[20], p1[20], p2[20];
11791   char line_label[MAX_ARTIFICIAL_LABEL_BYTES];
11792   char prev_line_label[MAX_ARTIFICIAL_LABEL_BYTES];
11793   unsigned opc;
11794   unsigned n_op_args;
11795   unsigned long lt_index;
11796   unsigned long current_line;
11797   long line_offset;
11798   long line_delta;
11799   unsigned long current_file;
11800   unsigned long function;
11801   int ver = dwarf_version;
11802
11803   ASM_GENERATE_INTERNAL_LABEL (l1, LINE_NUMBER_BEGIN_LABEL, 0);
11804   ASM_GENERATE_INTERNAL_LABEL (l2, LINE_NUMBER_END_LABEL, 0);
11805   ASM_GENERATE_INTERNAL_LABEL (p1, LN_PROLOG_AS_LABEL, 0);
11806   ASM_GENERATE_INTERNAL_LABEL (p2, LN_PROLOG_END_LABEL, 0);
11807
11808   if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
11809     dw2_asm_output_data (4, 0xffffffff,
11810       "Initial length escape value indicating 64-bit DWARF extension");
11811   dw2_asm_output_delta (DWARF_OFFSET_SIZE, l2, l1,
11812                         "Length of Source Line Info");
11813   ASM_OUTPUT_LABEL (asm_out_file, l1);
11814
11815   dw2_asm_output_data (2, ver, "DWARF Version");
11816   dw2_asm_output_delta (DWARF_OFFSET_SIZE, p2, p1, "Prolog Length");
11817   ASM_OUTPUT_LABEL (asm_out_file, p1);
11818
11819   /* Define the architecture-dependent minimum instruction length (in
11820    bytes).  In this implementation of DWARF, this field is used for
11821    information purposes only.  Since GCC generates assembly language,
11822    we have no a priori knowledge of how many instruction bytes are
11823    generated for each source line, and therefore can use only the
11824    DW_LNE_set_address and DW_LNS_fixed_advance_pc line information
11825    commands.  Accordingly, we fix this as `1', which is "correct
11826    enough" for all architectures, and don't let the target override.  */
11827   dw2_asm_output_data (1, 1,
11828                        "Minimum Instruction Length");
11829
11830   if (ver >= 4)
11831     dw2_asm_output_data (1, DWARF_LINE_DEFAULT_MAX_OPS_PER_INSN,
11832                          "Maximum Operations Per Instruction");
11833   dw2_asm_output_data (1, DWARF_LINE_DEFAULT_IS_STMT_START,
11834                        "Default is_stmt_start flag");
11835   dw2_asm_output_data (1, DWARF_LINE_BASE,
11836                        "Line Base Value (Special Opcodes)");
11837   dw2_asm_output_data (1, DWARF_LINE_RANGE,
11838                        "Line Range Value (Special Opcodes)");
11839   dw2_asm_output_data (1, DWARF_LINE_OPCODE_BASE,
11840                        "Special Opcode Base");
11841
11842   for (opc = 1; opc < DWARF_LINE_OPCODE_BASE; opc++)
11843     {
11844       switch (opc)
11845         {
11846         case DW_LNS_advance_pc:
11847         case DW_LNS_advance_line:
11848         case DW_LNS_set_file:
11849         case DW_LNS_set_column:
11850         case DW_LNS_fixed_advance_pc:
11851           n_op_args = 1;
11852           break;
11853         default:
11854           n_op_args = 0;
11855           break;
11856         }
11857
11858       dw2_asm_output_data (1, n_op_args, "opcode: %#x has %d args",
11859                            opc, n_op_args);
11860     }
11861
11862   /* Write out the information about the files we use.  */
11863   output_file_names ();
11864   ASM_OUTPUT_LABEL (asm_out_file, p2);
11865
11866   /* We used to set the address register to the first location in the text
11867      section here, but that didn't accomplish anything since we already
11868      have a line note for the opening brace of the first function.  */
11869
11870   /* Generate the line number to PC correspondence table, encoded as
11871      a series of state machine operations.  */
11872   current_file = 1;
11873   current_line = 1;
11874
11875   if (cfun && in_cold_section_p)
11876     strcpy (prev_line_label, crtl->subsections.cold_section_label);
11877   else
11878     strcpy (prev_line_label, text_section_label);
11879   for (lt_index = 1; lt_index < line_info_table_in_use; ++lt_index)
11880     {
11881       dw_line_info_ref line_info = &line_info_table[lt_index];
11882
11883 #if 0
11884       /* Disable this optimization for now; GDB wants to see two line notes
11885          at the beginning of a function so it can find the end of the
11886          prologue.  */
11887
11888       /* Don't emit anything for redundant notes.  Just updating the
11889          address doesn't accomplish anything, because we already assume
11890          that anything after the last address is this line.  */
11891       if (line_info->dw_line_num == current_line
11892           && line_info->dw_file_num == current_file)
11893         continue;
11894 #endif
11895
11896       /* Emit debug info for the address of the current line.
11897
11898          Unfortunately, we have little choice here currently, and must always
11899          use the most general form.  GCC does not know the address delta
11900          itself, so we can't use DW_LNS_advance_pc.  Many ports do have length
11901          attributes which will give an upper bound on the address range.  We
11902          could perhaps use length attributes to determine when it is safe to
11903          use DW_LNS_fixed_advance_pc.  */
11904
11905       ASM_GENERATE_INTERNAL_LABEL (line_label, LINE_CODE_LABEL, lt_index);
11906       if (0)
11907         {
11908           /* This can handle deltas up to 0xffff.  This takes 3 bytes.  */
11909           dw2_asm_output_data (1, DW_LNS_fixed_advance_pc,
11910                                "DW_LNS_fixed_advance_pc");
11911           dw2_asm_output_delta (2, line_label, prev_line_label, NULL);
11912         }
11913       else
11914         {
11915           /* This can handle any delta.  This takes
11916              4+DWARF2_ADDR_SIZE bytes.  */
11917           dw2_asm_output_data (1, 0, "DW_LNE_set_address");
11918           dw2_asm_output_data_uleb128 (1 + DWARF2_ADDR_SIZE, NULL);
11919           dw2_asm_output_data (1, DW_LNE_set_address, NULL);
11920           dw2_asm_output_addr (DWARF2_ADDR_SIZE, line_label, NULL);
11921         }
11922
11923       strcpy (prev_line_label, line_label);
11924
11925       /* Emit debug info for the source file of the current line, if
11926          different from the previous line.  */
11927       if (line_info->dw_file_num != current_file)
11928         {
11929           current_file = line_info->dw_file_num;
11930           dw2_asm_output_data (1, DW_LNS_set_file, "DW_LNS_set_file");
11931           dw2_asm_output_data_uleb128 (current_file, "%lu", current_file);
11932         }
11933
11934       /* Emit debug info for the current line number, choosing the encoding
11935          that uses the least amount of space.  */
11936       if (line_info->dw_line_num != current_line)
11937         {
11938           line_offset = line_info->dw_line_num - current_line;
11939           line_delta = line_offset - DWARF_LINE_BASE;
11940           current_line = line_info->dw_line_num;
11941           if (line_delta >= 0 && line_delta < (DWARF_LINE_RANGE - 1))
11942             /* This can handle deltas from -10 to 234, using the current
11943                definitions of DWARF_LINE_BASE and DWARF_LINE_RANGE.  This
11944                takes 1 byte.  */
11945             dw2_asm_output_data (1, DWARF_LINE_OPCODE_BASE + line_delta,
11946                                  "line %lu", current_line);
11947           else
11948             {
11949               /* This can handle any delta.  This takes at least 4 bytes,
11950                  depending on the value being encoded.  */
11951               dw2_asm_output_data (1, DW_LNS_advance_line,
11952                                    "advance to line %lu", current_line);
11953               dw2_asm_output_data_sleb128 (line_offset, NULL);
11954               dw2_asm_output_data (1, DW_LNS_copy, "DW_LNS_copy");
11955             }
11956         }
11957       else
11958         /* We still need to start a new row, so output a copy insn.  */
11959         dw2_asm_output_data (1, DW_LNS_copy, "DW_LNS_copy");
11960     }
11961
11962   /* Emit debug info for the address of the end of the function.  */
11963   if (0)
11964     {
11965       dw2_asm_output_data (1, DW_LNS_fixed_advance_pc,
11966                            "DW_LNS_fixed_advance_pc");
11967       dw2_asm_output_delta (2, text_end_label, prev_line_label, NULL);
11968     }
11969   else
11970     {
11971       dw2_asm_output_data (1, 0, "DW_LNE_set_address");
11972       dw2_asm_output_data_uleb128 (1 + DWARF2_ADDR_SIZE, NULL);
11973       dw2_asm_output_data (1, DW_LNE_set_address, NULL);
11974       dw2_asm_output_addr (DWARF2_ADDR_SIZE, text_end_label, NULL);
11975     }
11976
11977   dw2_asm_output_data (1, 0, "DW_LNE_end_sequence");
11978   dw2_asm_output_data_uleb128 (1, NULL);
11979   dw2_asm_output_data (1, DW_LNE_end_sequence, NULL);
11980
11981   function = 0;
11982   current_file = 1;
11983   current_line = 1;
11984   for (lt_index = 0; lt_index < separate_line_info_table_in_use;)
11985     {
11986       dw_separate_line_info_ref line_info
11987         = &separate_line_info_table[lt_index];
11988
11989 #if 0
11990       /* Don't emit anything for redundant notes.  */
11991       if (line_info->dw_line_num == current_line
11992           && line_info->dw_file_num == current_file
11993           && line_info->function == function)
11994         goto cont;
11995 #endif
11996
11997       /* Emit debug info for the address of the current line.  If this is
11998          a new function, or the first line of a function, then we need
11999          to handle it differently.  */
12000       ASM_GENERATE_INTERNAL_LABEL (line_label, SEPARATE_LINE_CODE_LABEL,
12001                                    lt_index);
12002       if (function != line_info->function)
12003         {
12004           function = line_info->function;
12005
12006           /* Set the address register to the first line in the function.  */
12007           dw2_asm_output_data (1, 0, "DW_LNE_set_address");
12008           dw2_asm_output_data_uleb128 (1 + DWARF2_ADDR_SIZE, NULL);
12009           dw2_asm_output_data (1, DW_LNE_set_address, NULL);
12010           dw2_asm_output_addr (DWARF2_ADDR_SIZE, line_label, NULL);
12011         }
12012       else
12013         {
12014           /* ??? See the DW_LNS_advance_pc comment above.  */
12015           if (0)
12016             {
12017               dw2_asm_output_data (1, DW_LNS_fixed_advance_pc,
12018                                    "DW_LNS_fixed_advance_pc");
12019               dw2_asm_output_delta (2, line_label, prev_line_label, NULL);
12020             }
12021           else
12022             {
12023               dw2_asm_output_data (1, 0, "DW_LNE_set_address");
12024               dw2_asm_output_data_uleb128 (1 + DWARF2_ADDR_SIZE, NULL);
12025               dw2_asm_output_data (1, DW_LNE_set_address, NULL);
12026               dw2_asm_output_addr (DWARF2_ADDR_SIZE, line_label, NULL);
12027             }
12028         }
12029
12030       strcpy (prev_line_label, line_label);
12031
12032       /* Emit debug info for the source file of the current line, if
12033          different from the previous line.  */
12034       if (line_info->dw_file_num != current_file)
12035         {
12036           current_file = line_info->dw_file_num;
12037           dw2_asm_output_data (1, DW_LNS_set_file, "DW_LNS_set_file");
12038           dw2_asm_output_data_uleb128 (current_file, "%lu", current_file);
12039         }
12040
12041       /* Emit debug info for the current line number, choosing the encoding
12042          that uses the least amount of space.  */
12043       if (line_info->dw_line_num != current_line)
12044         {
12045           line_offset = line_info->dw_line_num - current_line;
12046           line_delta = line_offset - DWARF_LINE_BASE;
12047           current_line = line_info->dw_line_num;
12048           if (line_delta >= 0 && line_delta < (DWARF_LINE_RANGE - 1))
12049             dw2_asm_output_data (1, DWARF_LINE_OPCODE_BASE + line_delta,
12050                                  "line %lu", current_line);
12051           else
12052             {
12053               dw2_asm_output_data (1, DW_LNS_advance_line,
12054                                    "advance to line %lu", current_line);
12055               dw2_asm_output_data_sleb128 (line_offset, NULL);
12056               dw2_asm_output_data (1, DW_LNS_copy, "DW_LNS_copy");
12057             }
12058         }
12059       else
12060         dw2_asm_output_data (1, DW_LNS_copy, "DW_LNS_copy");
12061
12062 #if 0
12063     cont:
12064 #endif
12065
12066       lt_index++;
12067
12068       /* If we're done with a function, end its sequence.  */
12069       if (lt_index == separate_line_info_table_in_use
12070           || separate_line_info_table[lt_index].function != function)
12071         {
12072           current_file = 1;
12073           current_line = 1;
12074
12075           /* Emit debug info for the address of the end of the function.  */
12076           ASM_GENERATE_INTERNAL_LABEL (line_label, FUNC_END_LABEL, function);
12077           if (0)
12078             {
12079               dw2_asm_output_data (1, DW_LNS_fixed_advance_pc,
12080                                    "DW_LNS_fixed_advance_pc");
12081               dw2_asm_output_delta (2, line_label, prev_line_label, NULL);
12082             }
12083           else
12084             {
12085               dw2_asm_output_data (1, 0, "DW_LNE_set_address");
12086               dw2_asm_output_data_uleb128 (1 + DWARF2_ADDR_SIZE, NULL);
12087               dw2_asm_output_data (1, DW_LNE_set_address, NULL);
12088               dw2_asm_output_addr (DWARF2_ADDR_SIZE, line_label, NULL);
12089             }
12090
12091           /* Output the marker for the end of this sequence.  */
12092           dw2_asm_output_data (1, 0, "DW_LNE_end_sequence");
12093           dw2_asm_output_data_uleb128 (1, NULL);
12094           dw2_asm_output_data (1, DW_LNE_end_sequence, NULL);
12095         }
12096     }
12097
12098   /* Output the marker for the end of the line number info.  */
12099   ASM_OUTPUT_LABEL (asm_out_file, l2);
12100 }
12101
12102 /* Return the size of the .debug_dcall table for the compilation unit.  */
12103
12104 static unsigned long
12105 size_of_dcall_table (void)
12106 {
12107   unsigned long size;
12108   unsigned int i;
12109   dcall_entry *p;
12110   tree last_poc_decl = NULL;
12111
12112   /* Header:  version + debug info section pointer + pointer size.  */
12113   size = 2 + DWARF_OFFSET_SIZE + 1;
12114
12115   /* Each entry:  code label + DIE offset.  */
12116   for (i = 0; VEC_iterate (dcall_entry, dcall_table, i, p); i++)
12117     {
12118       gcc_assert (p->targ_die != NULL);
12119       /* Insert a "from" entry when the point-of-call DIE offset changes.  */
12120       if (p->poc_decl != last_poc_decl)
12121         {
12122           dw_die_ref poc_die = lookup_decl_die (p->poc_decl);
12123           gcc_assert (poc_die);
12124           last_poc_decl = p->poc_decl;
12125           if (poc_die)
12126             size += (DWARF_OFFSET_SIZE
12127                      + size_of_uleb128 (poc_die->die_offset));
12128         }
12129       size += DWARF_OFFSET_SIZE + size_of_uleb128 (p->targ_die->die_offset);
12130     }
12131
12132   return size;
12133 }
12134
12135 /* Output the direct call table used to disambiguate PC values when
12136    identical function have been merged.  */
12137
12138 static void
12139 output_dcall_table (void)
12140 {
12141   unsigned i;
12142   unsigned long dcall_length = size_of_dcall_table ();
12143   dcall_entry *p;
12144   char poc_label[MAX_ARTIFICIAL_LABEL_BYTES];
12145   tree last_poc_decl = NULL;
12146
12147   if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
12148     dw2_asm_output_data (4, 0xffffffff,
12149       "Initial length escape value indicating 64-bit DWARF extension");
12150   dw2_asm_output_data (DWARF_OFFSET_SIZE, dcall_length,
12151                        "Length of Direct Call Table");
12152   dw2_asm_output_data (2, 4, "Version number");
12153   dw2_asm_output_offset (DWARF_OFFSET_SIZE, debug_info_section_label,
12154                          debug_info_section,
12155                          "Offset of Compilation Unit Info");
12156   dw2_asm_output_data (1, DWARF2_ADDR_SIZE, "Pointer Size (in bytes)");
12157
12158   for (i = 0; VEC_iterate (dcall_entry, dcall_table, i, p); i++)
12159     {
12160       /* Insert a "from" entry when the point-of-call DIE offset changes.  */
12161       if (p->poc_decl != last_poc_decl)
12162         {
12163           dw_die_ref poc_die = lookup_decl_die (p->poc_decl);
12164           last_poc_decl = p->poc_decl;
12165           if (poc_die)
12166             {
12167               dw2_asm_output_data (DWARF_OFFSET_SIZE, 0, "New caller");
12168               dw2_asm_output_data_uleb128 (poc_die->die_offset,
12169                                            "Caller DIE offset");
12170             }
12171         }
12172       ASM_GENERATE_INTERNAL_LABEL (poc_label, "LPOC", p->poc_label_num);
12173       dw2_asm_output_addr (DWARF_OFFSET_SIZE, poc_label, "Point of call");
12174       dw2_asm_output_data_uleb128 (p->targ_die->die_offset,
12175                                    "Callee DIE offset");
12176     }
12177 }
12178 \f
12179 /* Return the size of the .debug_vcall table for the compilation unit.  */
12180
12181 static unsigned long
12182 size_of_vcall_table (void)
12183 {
12184   unsigned long size;
12185   unsigned int i;
12186   vcall_entry *p;
12187
12188   /* Header:  version + pointer size.  */
12189   size = 2 + 1;
12190
12191   /* Each entry:  code label + vtable slot index.  */
12192   for (i = 0; VEC_iterate (vcall_entry, vcall_table, i, p); i++)
12193     size += DWARF_OFFSET_SIZE + size_of_uleb128 (p->vtable_slot);
12194
12195   return size;
12196 }
12197
12198 /* Output the virtual call table used to disambiguate PC values when
12199    identical function have been merged.  */
12200
12201 static void
12202 output_vcall_table (void)
12203 {
12204   unsigned i;
12205   unsigned long vcall_length = size_of_vcall_table ();
12206   vcall_entry *p;
12207   char poc_label[MAX_ARTIFICIAL_LABEL_BYTES];
12208
12209   if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
12210     dw2_asm_output_data (4, 0xffffffff,
12211       "Initial length escape value indicating 64-bit DWARF extension");
12212   dw2_asm_output_data (DWARF_OFFSET_SIZE, vcall_length,
12213                        "Length of Virtual Call Table");
12214   dw2_asm_output_data (2, 4, "Version number");
12215   dw2_asm_output_data (1, DWARF2_ADDR_SIZE, "Pointer Size (in bytes)");
12216
12217   for (i = 0; VEC_iterate (vcall_entry, vcall_table, i, p); i++)
12218     {
12219       ASM_GENERATE_INTERNAL_LABEL (poc_label, "LPOC", p->poc_label_num);
12220       dw2_asm_output_addr (DWARF_OFFSET_SIZE, poc_label, "Point of call");
12221       dw2_asm_output_data_uleb128 (p->vtable_slot, "Vtable slot");
12222     }
12223 }
12224 \f
12225 /* Given a pointer to a tree node for some base type, return a pointer to
12226    a DIE that describes the given type.
12227
12228    This routine must only be called for GCC type nodes that correspond to
12229    Dwarf base (fundamental) types.  */
12230
12231 static dw_die_ref
12232 base_type_die (tree type)
12233 {
12234   dw_die_ref base_type_result;
12235   enum dwarf_type encoding;
12236
12237   if (TREE_CODE (type) == ERROR_MARK || TREE_CODE (type) == VOID_TYPE)
12238     return 0;
12239
12240   /* If this is a subtype that should not be emitted as a subrange type,
12241      use the base type.  See subrange_type_for_debug_p.  */
12242   if (TREE_CODE (type) == INTEGER_TYPE && TREE_TYPE (type) != NULL_TREE)
12243     type = TREE_TYPE (type);
12244
12245   switch (TREE_CODE (type))
12246     {
12247     case INTEGER_TYPE:
12248       if (TYPE_STRING_FLAG (type))
12249         {
12250           if (TYPE_UNSIGNED (type))
12251             encoding = DW_ATE_unsigned_char;
12252           else
12253             encoding = DW_ATE_signed_char;
12254         }
12255       else if (TYPE_UNSIGNED (type))
12256         encoding = DW_ATE_unsigned;
12257       else
12258         encoding = DW_ATE_signed;
12259       break;
12260
12261     case REAL_TYPE:
12262       if (DECIMAL_FLOAT_MODE_P (TYPE_MODE (type)))
12263         {
12264           if (dwarf_version >= 3 || !dwarf_strict)
12265             encoding = DW_ATE_decimal_float;
12266           else
12267             encoding = DW_ATE_lo_user;
12268         }
12269       else
12270         encoding = DW_ATE_float;
12271       break;
12272
12273     case FIXED_POINT_TYPE:
12274       if (!(dwarf_version >= 3 || !dwarf_strict))
12275         encoding = DW_ATE_lo_user;
12276       else if (TYPE_UNSIGNED (type))
12277         encoding = DW_ATE_unsigned_fixed;
12278       else
12279         encoding = DW_ATE_signed_fixed;
12280       break;
12281
12282       /* Dwarf2 doesn't know anything about complex ints, so use
12283          a user defined type for it.  */
12284     case COMPLEX_TYPE:
12285       if (TREE_CODE (TREE_TYPE (type)) == REAL_TYPE)
12286         encoding = DW_ATE_complex_float;
12287       else
12288         encoding = DW_ATE_lo_user;
12289       break;
12290
12291     case BOOLEAN_TYPE:
12292       /* GNU FORTRAN/Ada/C++ BOOLEAN type.  */
12293       encoding = DW_ATE_boolean;
12294       break;
12295
12296     default:
12297       /* No other TREE_CODEs are Dwarf fundamental types.  */
12298       gcc_unreachable ();
12299     }
12300
12301   base_type_result = new_die (DW_TAG_base_type, comp_unit_die, type);
12302
12303   add_AT_unsigned (base_type_result, DW_AT_byte_size,
12304                    int_size_in_bytes (type));
12305   add_AT_unsigned (base_type_result, DW_AT_encoding, encoding);
12306
12307   return base_type_result;
12308 }
12309
12310 /* Given a pointer to an arbitrary ..._TYPE tree node, return nonzero if the
12311    given input type is a Dwarf "fundamental" type.  Otherwise return null.  */
12312
12313 static inline int
12314 is_base_type (tree type)
12315 {
12316   switch (TREE_CODE (type))
12317     {
12318     case ERROR_MARK:
12319     case VOID_TYPE:
12320     case INTEGER_TYPE:
12321     case REAL_TYPE:
12322     case FIXED_POINT_TYPE:
12323     case COMPLEX_TYPE:
12324     case BOOLEAN_TYPE:
12325       return 1;
12326
12327     case ARRAY_TYPE:
12328     case RECORD_TYPE:
12329     case UNION_TYPE:
12330     case QUAL_UNION_TYPE:
12331     case ENUMERAL_TYPE:
12332     case FUNCTION_TYPE:
12333     case METHOD_TYPE:
12334     case POINTER_TYPE:
12335     case REFERENCE_TYPE:
12336     case OFFSET_TYPE:
12337     case LANG_TYPE:
12338     case VECTOR_TYPE:
12339       return 0;
12340
12341     default:
12342       gcc_unreachable ();
12343     }
12344
12345   return 0;
12346 }
12347
12348 /* Given a pointer to a tree node, assumed to be some kind of a ..._TYPE
12349    node, return the size in bits for the type if it is a constant, or else
12350    return the alignment for the type if the type's size is not constant, or
12351    else return BITS_PER_WORD if the type actually turns out to be an
12352    ERROR_MARK node.  */
12353
12354 static inline unsigned HOST_WIDE_INT
12355 simple_type_size_in_bits (const_tree type)
12356 {
12357   if (TREE_CODE (type) == ERROR_MARK)
12358     return BITS_PER_WORD;
12359   else if (TYPE_SIZE (type) == NULL_TREE)
12360     return 0;
12361   else if (host_integerp (TYPE_SIZE (type), 1))
12362     return tree_low_cst (TYPE_SIZE (type), 1);
12363   else
12364     return TYPE_ALIGN (type);
12365 }
12366
12367 /* Similarly, but return a double_int instead of UHWI.  */
12368
12369 static inline double_int
12370 double_int_type_size_in_bits (const_tree type)
12371 {
12372   if (TREE_CODE (type) == ERROR_MARK)
12373     return uhwi_to_double_int (BITS_PER_WORD);
12374   else if (TYPE_SIZE (type) == NULL_TREE)
12375     return double_int_zero;
12376   else if (TREE_CODE (TYPE_SIZE (type)) == INTEGER_CST)
12377     return tree_to_double_int (TYPE_SIZE (type));
12378   else
12379     return uhwi_to_double_int (TYPE_ALIGN (type));
12380 }
12381
12382 /*  Given a pointer to a tree node for a subrange type, return a pointer
12383     to a DIE that describes the given type.  */
12384
12385 static dw_die_ref
12386 subrange_type_die (tree type, tree low, tree high, dw_die_ref context_die)
12387 {
12388   dw_die_ref subrange_die;
12389   const HOST_WIDE_INT size_in_bytes = int_size_in_bytes (type);
12390
12391   if (context_die == NULL)
12392     context_die = comp_unit_die;
12393
12394   subrange_die = new_die (DW_TAG_subrange_type, context_die, type);
12395
12396   if (int_size_in_bytes (TREE_TYPE (type)) != size_in_bytes)
12397     {
12398       /* The size of the subrange type and its base type do not match,
12399          so we need to generate a size attribute for the subrange type.  */
12400       add_AT_unsigned (subrange_die, DW_AT_byte_size, size_in_bytes);
12401     }
12402
12403   if (low)
12404     add_bound_info (subrange_die, DW_AT_lower_bound, low);
12405   if (high)
12406     add_bound_info (subrange_die, DW_AT_upper_bound, high);
12407
12408   return subrange_die;
12409 }
12410
12411 /* Given a pointer to an arbitrary ..._TYPE tree node, return a debugging
12412    entry that chains various modifiers in front of the given type.  */
12413
12414 static dw_die_ref
12415 modified_type_die (tree type, int is_const_type, int is_volatile_type,
12416                    dw_die_ref context_die)
12417 {
12418   enum tree_code code = TREE_CODE (type);
12419   dw_die_ref mod_type_die;
12420   dw_die_ref sub_die = NULL;
12421   tree item_type = NULL;
12422   tree qualified_type;
12423   tree name, low, high;
12424
12425   if (code == ERROR_MARK)
12426     return NULL;
12427
12428   /* See if we already have the appropriately qualified variant of
12429      this type.  */
12430   qualified_type
12431     = get_qualified_type (type,
12432                           ((is_const_type ? TYPE_QUAL_CONST : 0)
12433                            | (is_volatile_type ? TYPE_QUAL_VOLATILE : 0)));
12434
12435   if (qualified_type == sizetype
12436       && TYPE_NAME (qualified_type)
12437       && TREE_CODE (TYPE_NAME (qualified_type)) == TYPE_DECL)
12438     {
12439 #ifdef ENABLE_CHECKING
12440       gcc_assert (TREE_CODE (TREE_TYPE (TYPE_NAME (qualified_type)))
12441                   == INTEGER_TYPE
12442                   && TYPE_PRECISION (TREE_TYPE (TYPE_NAME (qualified_type)))
12443                      == TYPE_PRECISION (qualified_type)
12444                   && TYPE_UNSIGNED (TREE_TYPE (TYPE_NAME (qualified_type)))
12445                      == TYPE_UNSIGNED (qualified_type));
12446 #endif
12447       qualified_type = TREE_TYPE (TYPE_NAME (qualified_type));
12448     }
12449
12450   /* If we do, then we can just use its DIE, if it exists.  */
12451   if (qualified_type)
12452     {
12453       mod_type_die = lookup_type_die (qualified_type);
12454       if (mod_type_die)
12455         return mod_type_die;
12456     }
12457
12458   name = qualified_type ? TYPE_NAME (qualified_type) : NULL;
12459
12460   /* Handle C typedef types.  */
12461   if (name && TREE_CODE (name) == TYPE_DECL && DECL_ORIGINAL_TYPE (name)
12462       && !DECL_ARTIFICIAL (name))
12463     {
12464       tree dtype = TREE_TYPE (name);
12465
12466       if (qualified_type == dtype)
12467         {
12468           /* For a named type, use the typedef.  */
12469           gen_type_die (qualified_type, context_die);
12470           return lookup_type_die (qualified_type);
12471         }
12472       else if (is_const_type < TYPE_READONLY (dtype)
12473                || is_volatile_type < TYPE_VOLATILE (dtype)
12474                || (is_const_type <= TYPE_READONLY (dtype)
12475                    && is_volatile_type <= TYPE_VOLATILE (dtype)
12476                    && DECL_ORIGINAL_TYPE (name) != type))
12477         /* cv-unqualified version of named type.  Just use the unnamed
12478            type to which it refers.  */
12479         return modified_type_die (DECL_ORIGINAL_TYPE (name),
12480                                   is_const_type, is_volatile_type,
12481                                   context_die);
12482       /* Else cv-qualified version of named type; fall through.  */
12483     }
12484
12485   if (is_const_type)
12486     {
12487       mod_type_die = new_die (DW_TAG_const_type, comp_unit_die, type);
12488       sub_die = modified_type_die (type, 0, is_volatile_type, context_die);
12489     }
12490   else if (is_volatile_type)
12491     {
12492       mod_type_die = new_die (DW_TAG_volatile_type, comp_unit_die, type);
12493       sub_die = modified_type_die (type, 0, 0, context_die);
12494     }
12495   else if (code == POINTER_TYPE)
12496     {
12497       mod_type_die = new_die (DW_TAG_pointer_type, comp_unit_die, type);
12498       add_AT_unsigned (mod_type_die, DW_AT_byte_size,
12499                        simple_type_size_in_bits (type) / BITS_PER_UNIT);
12500       item_type = TREE_TYPE (type);
12501       if (!ADDR_SPACE_GENERIC_P (TYPE_ADDR_SPACE (item_type)))
12502         add_AT_unsigned (mod_type_die, DW_AT_address_class,
12503                          TYPE_ADDR_SPACE (item_type));
12504     }
12505   else if (code == REFERENCE_TYPE)
12506     {
12507       if (TYPE_REF_IS_RVALUE (type) && dwarf_version >= 4)
12508         mod_type_die = new_die (DW_TAG_rvalue_reference_type, comp_unit_die,
12509                                 type);
12510       else
12511         mod_type_die = new_die (DW_TAG_reference_type, comp_unit_die, type);
12512       add_AT_unsigned (mod_type_die, DW_AT_byte_size,
12513                        simple_type_size_in_bits (type) / BITS_PER_UNIT);
12514       item_type = TREE_TYPE (type);
12515       if (!ADDR_SPACE_GENERIC_P (TYPE_ADDR_SPACE (item_type)))
12516         add_AT_unsigned (mod_type_die, DW_AT_address_class,
12517                          TYPE_ADDR_SPACE (item_type));
12518     }
12519   else if (code == INTEGER_TYPE
12520            && TREE_TYPE (type) != NULL_TREE
12521            && subrange_type_for_debug_p (type, &low, &high))
12522     {
12523       mod_type_die = subrange_type_die (type, low, high, context_die);
12524       item_type = TREE_TYPE (type);
12525     }
12526   else if (is_base_type (type))
12527     mod_type_die = base_type_die (type);
12528   else
12529     {
12530       gen_type_die (type, context_die);
12531
12532       /* We have to get the type_main_variant here (and pass that to the
12533          `lookup_type_die' routine) because the ..._TYPE node we have
12534          might simply be a *copy* of some original type node (where the
12535          copy was created to help us keep track of typedef names) and
12536          that copy might have a different TYPE_UID from the original
12537          ..._TYPE node.  */
12538       if (TREE_CODE (type) != VECTOR_TYPE)
12539         return lookup_type_die (type_main_variant (type));
12540       else
12541         /* Vectors have the debugging information in the type,
12542            not the main variant.  */
12543         return lookup_type_die (type);
12544     }
12545
12546   /* Builtin types don't have a DECL_ORIGINAL_TYPE.  For those,
12547      don't output a DW_TAG_typedef, since there isn't one in the
12548      user's program; just attach a DW_AT_name to the type.
12549      Don't attach a DW_AT_name to DW_TAG_const_type or DW_TAG_volatile_type
12550      if the base type already has the same name.  */
12551   if (name
12552       && ((TREE_CODE (name) != TYPE_DECL
12553            && (qualified_type == TYPE_MAIN_VARIANT (type)
12554                || (!is_const_type && !is_volatile_type)))
12555           || (TREE_CODE (name) == TYPE_DECL
12556               && TREE_TYPE (name) == qualified_type
12557               && DECL_NAME (name))))
12558     {
12559       if (TREE_CODE (name) == TYPE_DECL)
12560         /* Could just call add_name_and_src_coords_attributes here,
12561            but since this is a builtin type it doesn't have any
12562            useful source coordinates anyway.  */
12563         name = DECL_NAME (name);
12564       add_name_attribute (mod_type_die, IDENTIFIER_POINTER (name));
12565     }
12566   /* This probably indicates a bug.  */
12567   else if (mod_type_die && mod_type_die->die_tag == DW_TAG_base_type)
12568     add_name_attribute (mod_type_die, "__unknown__");
12569
12570   if (qualified_type)
12571     equate_type_number_to_die (qualified_type, mod_type_die);
12572
12573   if (item_type)
12574     /* We must do this after the equate_type_number_to_die call, in case
12575        this is a recursive type.  This ensures that the modified_type_die
12576        recursion will terminate even if the type is recursive.  Recursive
12577        types are possible in Ada.  */
12578     sub_die = modified_type_die (item_type,
12579                                  TYPE_READONLY (item_type),
12580                                  TYPE_VOLATILE (item_type),
12581                                  context_die);
12582
12583   if (sub_die != NULL)
12584     add_AT_die_ref (mod_type_die, DW_AT_type, sub_die);
12585
12586   return mod_type_die;
12587 }
12588
12589 /* Generate DIEs for the generic parameters of T.
12590    T must be either a generic type or a generic function.
12591    See http://gcc.gnu.org/wiki/TemplateParmsDwarf for more.  */
12592
12593 static void
12594 gen_generic_params_dies (tree t)
12595 {
12596   tree parms, args;
12597   int parms_num, i;
12598   dw_die_ref die = NULL;
12599
12600   if (!t || (TYPE_P (t) && !COMPLETE_TYPE_P (t)))
12601     return;
12602
12603   if (TYPE_P (t))
12604     die = lookup_type_die (t);
12605   else if (DECL_P (t))
12606     die = lookup_decl_die (t);
12607
12608   gcc_assert (die);
12609
12610   parms = lang_hooks.get_innermost_generic_parms (t);
12611   if (!parms)
12612     /* T has no generic parameter. It means T is neither a generic type
12613        or function. End of story.  */
12614     return;
12615
12616   parms_num = TREE_VEC_LENGTH (parms);
12617   args = lang_hooks.get_innermost_generic_args (t);
12618   for (i = 0; i < parms_num; i++)
12619     {
12620       tree parm, arg, arg_pack_elems;
12621
12622       parm = TREE_VEC_ELT (parms, i);
12623       arg = TREE_VEC_ELT (args, i);
12624       arg_pack_elems = lang_hooks.types.get_argument_pack_elems (arg);
12625       gcc_assert (parm && TREE_VALUE (parm) && arg);
12626
12627       if (parm && TREE_VALUE (parm) && arg)
12628         {
12629           /* If PARM represents a template parameter pack,
12630              emit a DW_TAG_GNU_template_parameter_pack DIE, followed
12631              by DW_TAG_template_*_parameter DIEs for the argument
12632              pack elements of ARG. Note that ARG would then be
12633              an argument pack.  */
12634           if (arg_pack_elems)
12635             template_parameter_pack_die (TREE_VALUE (parm),
12636                                          arg_pack_elems,
12637                                          die);
12638           else
12639             generic_parameter_die (TREE_VALUE (parm), arg,
12640                                    true /* Emit DW_AT_name */, die);
12641         }
12642     }
12643 }
12644
12645 /* Create and return a DIE for PARM which should be
12646    the representation of a generic type parameter.
12647    For instance, in the C++ front end, PARM would be a template parameter.
12648    ARG is the argument to PARM.
12649    EMIT_NAME_P if tree, the DIE will have DW_AT_name attribute set to the
12650    name of the PARM.
12651    PARENT_DIE is the parent DIE which the new created DIE should be added to,
12652    as a child node.  */
12653
12654 static dw_die_ref
12655 generic_parameter_die (tree parm, tree arg,
12656                        bool emit_name_p,
12657                        dw_die_ref parent_die)
12658 {
12659   dw_die_ref tmpl_die = NULL;
12660   const char *name = NULL;
12661
12662   if (!parm || !DECL_NAME (parm) || !arg)
12663     return NULL;
12664
12665   /* We support non-type generic parameters and arguments,
12666      type generic parameters and arguments, as well as
12667      generic generic parameters (a.k.a. template template parameters in C++)
12668      and arguments.  */
12669   if (TREE_CODE (parm) == PARM_DECL)
12670     /* PARM is a nontype generic parameter  */
12671     tmpl_die = new_die (DW_TAG_template_value_param, parent_die, parm);
12672   else if (TREE_CODE (parm) == TYPE_DECL)
12673     /* PARM is a type generic parameter.  */
12674     tmpl_die = new_die (DW_TAG_template_type_param, parent_die, parm);
12675   else if (lang_hooks.decls.generic_generic_parameter_decl_p (parm))
12676     /* PARM is a generic generic parameter.
12677        Its DIE is a GNU extension. It shall have a
12678        DW_AT_name attribute to represent the name of the template template
12679        parameter, and a DW_AT_GNU_template_name attribute to represent the
12680        name of the template template argument.  */
12681     tmpl_die = new_die (DW_TAG_GNU_template_template_param,
12682                         parent_die, parm);
12683   else
12684     gcc_unreachable ();
12685
12686   if (tmpl_die)
12687     {
12688       tree tmpl_type;
12689
12690       /* If PARM is a generic parameter pack, it means we are
12691          emitting debug info for a template argument pack element.
12692          In other terms, ARG is a template argument pack element.
12693          In that case, we don't emit any DW_AT_name attribute for
12694          the die.  */
12695       if (emit_name_p)
12696         {
12697           name = IDENTIFIER_POINTER (DECL_NAME (parm));
12698           gcc_assert (name);
12699           add_AT_string (tmpl_die, DW_AT_name, name);
12700         }
12701
12702       if (!lang_hooks.decls.generic_generic_parameter_decl_p (parm))
12703         {
12704           /* DWARF3, 5.6.8 says if PARM is a non-type generic parameter
12705              TMPL_DIE should have a child DW_AT_type attribute that is set
12706              to the type of the argument to PARM, which is ARG.
12707              If PARM is a type generic parameter, TMPL_DIE should have a
12708              child DW_AT_type that is set to ARG.  */
12709           tmpl_type = TYPE_P (arg) ? arg : TREE_TYPE (arg);
12710           add_type_attribute (tmpl_die, tmpl_type, 0,
12711                               TREE_THIS_VOLATILE (tmpl_type),
12712                               parent_die);
12713         }
12714       else
12715         {
12716           /* So TMPL_DIE is a DIE representing a
12717              a generic generic template parameter, a.k.a template template
12718              parameter in C++ and arg is a template.  */
12719
12720           /* The DW_AT_GNU_template_name attribute of the DIE must be set
12721              to the name of the argument.  */
12722           name = dwarf2_name (TYPE_P (arg) ? TYPE_NAME (arg) : arg, 1);
12723           if (name)
12724             add_AT_string (tmpl_die, DW_AT_GNU_template_name, name);
12725         }
12726
12727       if (TREE_CODE (parm) == PARM_DECL)
12728         /* So PARM is a non-type generic parameter.
12729            DWARF3 5.6.8 says we must set a DW_AT_const_value child
12730            attribute of TMPL_DIE which value represents the value
12731            of ARG.
12732            We must be careful here:
12733            The value of ARG might reference some function decls.
12734            We might currently be emitting debug info for a generic
12735            type and types are emitted before function decls, we don't
12736            know if the function decls referenced by ARG will actually be
12737            emitted after cgraph computations.
12738            So must defer the generation of the DW_AT_const_value to
12739            after cgraph is ready.  */
12740         append_entry_to_tmpl_value_parm_die_table (tmpl_die, arg);
12741     }
12742
12743   return tmpl_die;
12744 }
12745
12746 /* Generate and return a  DW_TAG_GNU_template_parameter_pack DIE representing.
12747    PARM_PACK must be a template parameter pack. The returned DIE
12748    will be child DIE of PARENT_DIE.  */
12749
12750 static dw_die_ref
12751 template_parameter_pack_die (tree parm_pack,
12752                              tree parm_pack_args,
12753                              dw_die_ref parent_die)
12754 {
12755   dw_die_ref die;
12756   int j;
12757
12758   gcc_assert (parent_die && parm_pack);
12759
12760   die = new_die (DW_TAG_GNU_template_parameter_pack, parent_die, parm_pack);
12761   add_name_and_src_coords_attributes (die, parm_pack);
12762   for (j = 0; j < TREE_VEC_LENGTH (parm_pack_args); j++)
12763     generic_parameter_die (parm_pack,
12764                            TREE_VEC_ELT (parm_pack_args, j),
12765                            false /* Don't emit DW_AT_name */,
12766                            die);
12767   return die;
12768 }
12769
12770 /* Given a pointer to an arbitrary ..._TYPE tree node, return true if it is
12771    an enumerated type.  */
12772
12773 static inline int
12774 type_is_enum (const_tree type)
12775 {
12776   return TREE_CODE (type) == ENUMERAL_TYPE;
12777 }
12778
12779 /* Return the DBX register number described by a given RTL node.  */
12780
12781 static unsigned int
12782 dbx_reg_number (const_rtx rtl)
12783 {
12784   unsigned regno = REGNO (rtl);
12785
12786   gcc_assert (regno < FIRST_PSEUDO_REGISTER);
12787
12788 #ifdef LEAF_REG_REMAP
12789   if (current_function_uses_only_leaf_regs)
12790     {
12791       int leaf_reg = LEAF_REG_REMAP (regno);
12792       if (leaf_reg != -1)
12793         regno = (unsigned) leaf_reg;
12794     }
12795 #endif
12796
12797   return DBX_REGISTER_NUMBER (regno);
12798 }
12799
12800 /* Optionally add a DW_OP_piece term to a location description expression.
12801    DW_OP_piece is only added if the location description expression already
12802    doesn't end with DW_OP_piece.  */
12803
12804 static void
12805 add_loc_descr_op_piece (dw_loc_descr_ref *list_head, int size)
12806 {
12807   dw_loc_descr_ref loc;
12808
12809   if (*list_head != NULL)
12810     {
12811       /* Find the end of the chain.  */
12812       for (loc = *list_head; loc->dw_loc_next != NULL; loc = loc->dw_loc_next)
12813         ;
12814
12815       if (loc->dw_loc_opc != DW_OP_piece)
12816         loc->dw_loc_next = new_loc_descr (DW_OP_piece, size, 0);
12817     }
12818 }
12819
12820 /* Return a location descriptor that designates a machine register or
12821    zero if there is none.  */
12822
12823 static dw_loc_descr_ref
12824 reg_loc_descriptor (rtx rtl, enum var_init_status initialized)
12825 {
12826   rtx regs;
12827
12828   if (REGNO (rtl) >= FIRST_PSEUDO_REGISTER)
12829     return 0;
12830
12831   regs = targetm.dwarf_register_span (rtl);
12832
12833   if (hard_regno_nregs[REGNO (rtl)][GET_MODE (rtl)] > 1 || regs)
12834     return multiple_reg_loc_descriptor (rtl, regs, initialized);
12835   else
12836     return one_reg_loc_descriptor (dbx_reg_number (rtl), initialized);
12837 }
12838
12839 /* Return a location descriptor that designates a machine register for
12840    a given hard register number.  */
12841
12842 static dw_loc_descr_ref
12843 one_reg_loc_descriptor (unsigned int regno, enum var_init_status initialized)
12844 {
12845   dw_loc_descr_ref reg_loc_descr;
12846
12847   if (regno <= 31)
12848     reg_loc_descr
12849       = new_loc_descr ((enum dwarf_location_atom) (DW_OP_reg0 + regno), 0, 0);
12850   else
12851     reg_loc_descr = new_loc_descr (DW_OP_regx, regno, 0);
12852
12853   if (initialized == VAR_INIT_STATUS_UNINITIALIZED)
12854     add_loc_descr (&reg_loc_descr, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
12855
12856   return reg_loc_descr;
12857 }
12858
12859 /* Given an RTL of a register, return a location descriptor that
12860    designates a value that spans more than one register.  */
12861
12862 static dw_loc_descr_ref
12863 multiple_reg_loc_descriptor (rtx rtl, rtx regs,
12864                              enum var_init_status initialized)
12865 {
12866   int nregs, size, i;
12867   unsigned reg;
12868   dw_loc_descr_ref loc_result = NULL;
12869
12870   reg = REGNO (rtl);
12871 #ifdef LEAF_REG_REMAP
12872   if (current_function_uses_only_leaf_regs)
12873     {
12874       int leaf_reg = LEAF_REG_REMAP (reg);
12875       if (leaf_reg != -1)
12876         reg = (unsigned) leaf_reg;
12877     }
12878 #endif
12879   gcc_assert ((unsigned) DBX_REGISTER_NUMBER (reg) == dbx_reg_number (rtl));
12880   nregs = hard_regno_nregs[REGNO (rtl)][GET_MODE (rtl)];
12881
12882   /* Simple, contiguous registers.  */
12883   if (regs == NULL_RTX)
12884     {
12885       size = GET_MODE_SIZE (GET_MODE (rtl)) / nregs;
12886
12887       loc_result = NULL;
12888       while (nregs--)
12889         {
12890           dw_loc_descr_ref t;
12891
12892           t = one_reg_loc_descriptor (DBX_REGISTER_NUMBER (reg),
12893                                       VAR_INIT_STATUS_INITIALIZED);
12894           add_loc_descr (&loc_result, t);
12895           add_loc_descr_op_piece (&loc_result, size);
12896           ++reg;
12897         }
12898       return loc_result;
12899     }
12900
12901   /* Now onto stupid register sets in non contiguous locations.  */
12902
12903   gcc_assert (GET_CODE (regs) == PARALLEL);
12904
12905   size = GET_MODE_SIZE (GET_MODE (XVECEXP (regs, 0, 0)));
12906   loc_result = NULL;
12907
12908   for (i = 0; i < XVECLEN (regs, 0); ++i)
12909     {
12910       dw_loc_descr_ref t;
12911
12912       t = one_reg_loc_descriptor (REGNO (XVECEXP (regs, 0, i)),
12913                                   VAR_INIT_STATUS_INITIALIZED);
12914       add_loc_descr (&loc_result, t);
12915       size = GET_MODE_SIZE (GET_MODE (XVECEXP (regs, 0, 0)));
12916       add_loc_descr_op_piece (&loc_result, size);
12917     }
12918
12919   if (loc_result && initialized == VAR_INIT_STATUS_UNINITIALIZED)
12920     add_loc_descr (&loc_result, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
12921   return loc_result;
12922 }
12923
12924 #endif /* DWARF2_DEBUGGING_INFO */
12925
12926 #if defined (DWARF2_DEBUGGING_INFO) || defined (DWARF2_UNWIND_INFO)
12927
12928 /* Return a location descriptor that designates a constant.  */
12929
12930 static dw_loc_descr_ref
12931 int_loc_descriptor (HOST_WIDE_INT i)
12932 {
12933   enum dwarf_location_atom op;
12934
12935   /* Pick the smallest representation of a constant, rather than just
12936      defaulting to the LEB encoding.  */
12937   if (i >= 0)
12938     {
12939       if (i <= 31)
12940         op = (enum dwarf_location_atom) (DW_OP_lit0 + i);
12941       else if (i <= 0xff)
12942         op = DW_OP_const1u;
12943       else if (i <= 0xffff)
12944         op = DW_OP_const2u;
12945       else if (HOST_BITS_PER_WIDE_INT == 32
12946                || i <= 0xffffffff)
12947         op = DW_OP_const4u;
12948       else
12949         op = DW_OP_constu;
12950     }
12951   else
12952     {
12953       if (i >= -0x80)
12954         op = DW_OP_const1s;
12955       else if (i >= -0x8000)
12956         op = DW_OP_const2s;
12957       else if (HOST_BITS_PER_WIDE_INT == 32
12958                || i >= -0x80000000)
12959         op = DW_OP_const4s;
12960       else
12961         op = DW_OP_consts;
12962     }
12963
12964   return new_loc_descr (op, i, 0);
12965 }
12966 #endif
12967
12968 #ifdef DWARF2_DEBUGGING_INFO
12969 /* Return loc description representing "address" of integer value.
12970    This can appear only as toplevel expression.  */
12971
12972 static dw_loc_descr_ref
12973 address_of_int_loc_descriptor (int size, HOST_WIDE_INT i)
12974 {
12975   int litsize;
12976   dw_loc_descr_ref loc_result = NULL;
12977
12978   if (!(dwarf_version >= 4 || !dwarf_strict))
12979     return NULL;
12980
12981   if (i >= 0)
12982     {
12983       if (i <= 31)
12984         litsize = 1;
12985       else if (i <= 0xff)
12986         litsize = 2;
12987       else if (i <= 0xffff)
12988         litsize = 3;
12989       else if (HOST_BITS_PER_WIDE_INT == 32
12990                || i <= 0xffffffff)
12991         litsize = 5;
12992       else
12993         litsize = 1 + size_of_uleb128 ((unsigned HOST_WIDE_INT) i);
12994     }
12995   else
12996     {
12997       if (i >= -0x80)
12998         litsize = 2;
12999       else if (i >= -0x8000)
13000         litsize = 3;
13001       else if (HOST_BITS_PER_WIDE_INT == 32
13002                || i >= -0x80000000)
13003         litsize = 5;
13004       else
13005         litsize = 1 + size_of_sleb128 (i);
13006     }
13007   /* Determine if DW_OP_stack_value or DW_OP_implicit_value
13008      is more compact.  For DW_OP_stack_value we need:
13009      litsize + 1 (DW_OP_stack_value)
13010      and for DW_OP_implicit_value:
13011      1 (DW_OP_implicit_value) + 1 (length) + size.  */
13012   if ((int) DWARF2_ADDR_SIZE >= size && litsize + 1 <= 1 + 1 + size)
13013     {
13014       loc_result = int_loc_descriptor (i);
13015       add_loc_descr (&loc_result,
13016                      new_loc_descr (DW_OP_stack_value, 0, 0));
13017       return loc_result;
13018     }
13019
13020   loc_result = new_loc_descr (DW_OP_implicit_value,
13021                               size, 0);
13022   loc_result->dw_loc_oprnd2.val_class = dw_val_class_const;
13023   loc_result->dw_loc_oprnd2.v.val_int = i;
13024   return loc_result;
13025 }
13026
13027 /* Return a location descriptor that designates a base+offset location.  */
13028
13029 static dw_loc_descr_ref
13030 based_loc_descr (rtx reg, HOST_WIDE_INT offset,
13031                  enum var_init_status initialized)
13032 {
13033   unsigned int regno;
13034   dw_loc_descr_ref result;
13035   dw_fde_ref fde = current_fde ();
13036
13037   /* We only use "frame base" when we're sure we're talking about the
13038      post-prologue local stack frame.  We do this by *not* running
13039      register elimination until this point, and recognizing the special
13040      argument pointer and soft frame pointer rtx's.  */
13041   if (reg == arg_pointer_rtx || reg == frame_pointer_rtx)
13042     {
13043       rtx elim = eliminate_regs (reg, VOIDmode, NULL_RTX);
13044
13045       if (elim != reg)
13046         {
13047           if (GET_CODE (elim) == PLUS)
13048             {
13049               offset += INTVAL (XEXP (elim, 1));
13050               elim = XEXP (elim, 0);
13051             }
13052           gcc_assert ((SUPPORTS_STACK_ALIGNMENT
13053                        && (elim == hard_frame_pointer_rtx
13054                            || elim == stack_pointer_rtx))
13055                       || elim == (frame_pointer_needed
13056                                   ? hard_frame_pointer_rtx
13057                                   : stack_pointer_rtx));
13058
13059           /* If drap register is used to align stack, use frame
13060              pointer + offset to access stack variables.  If stack
13061              is aligned without drap, use stack pointer + offset to
13062              access stack variables.  */
13063           if (crtl->stack_realign_tried
13064               && reg == frame_pointer_rtx)
13065             {
13066               int base_reg
13067                 = DWARF_FRAME_REGNUM ((fde && fde->drap_reg != INVALID_REGNUM)
13068                                       ? HARD_FRAME_POINTER_REGNUM
13069                                       : STACK_POINTER_REGNUM);
13070               return new_reg_loc_descr (base_reg, offset);
13071             }
13072
13073           offset += frame_pointer_fb_offset;
13074           return new_loc_descr (DW_OP_fbreg, offset, 0);
13075         }
13076     }
13077   else if (!optimize
13078            && fde
13079            && (fde->drap_reg == REGNO (reg)
13080                || fde->vdrap_reg == REGNO (reg)))
13081     {
13082       /* Use cfa+offset to represent the location of arguments passed
13083          on the stack when drap is used to align stack.
13084          Only do this when not optimizing, for optimized code var-tracking
13085          is supposed to track where the arguments live and the register
13086          used as vdrap or drap in some spot might be used for something
13087          else in other part of the routine.  */
13088       return new_loc_descr (DW_OP_fbreg, offset, 0);
13089     }
13090
13091   regno = dbx_reg_number (reg);
13092   if (regno <= 31)
13093     result = new_loc_descr ((enum dwarf_location_atom) (DW_OP_breg0 + regno),
13094                             offset, 0);
13095   else
13096     result = new_loc_descr (DW_OP_bregx, regno, offset);
13097
13098   if (initialized == VAR_INIT_STATUS_UNINITIALIZED)
13099     add_loc_descr (&result, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
13100
13101   return result;
13102 }
13103
13104 /* Return true if this RTL expression describes a base+offset calculation.  */
13105
13106 static inline int
13107 is_based_loc (const_rtx rtl)
13108 {
13109   return (GET_CODE (rtl) == PLUS
13110           && ((REG_P (XEXP (rtl, 0))
13111                && REGNO (XEXP (rtl, 0)) < FIRST_PSEUDO_REGISTER
13112                && CONST_INT_P (XEXP (rtl, 1)))));
13113 }
13114
13115 /* Try to handle TLS MEMs, for which mem_loc_descriptor on XEXP (mem, 0)
13116    failed.  */
13117
13118 static dw_loc_descr_ref
13119 tls_mem_loc_descriptor (rtx mem)
13120 {
13121   tree base;
13122   dw_loc_descr_ref loc_result;
13123
13124   if (MEM_EXPR (mem) == NULL_TREE || MEM_OFFSET (mem) == NULL_RTX)
13125     return NULL;
13126
13127   base = get_base_address (MEM_EXPR (mem));
13128   if (base == NULL
13129       || TREE_CODE (base) != VAR_DECL
13130       || !DECL_THREAD_LOCAL_P (base))
13131     return NULL;
13132
13133   loc_result = loc_descriptor_from_tree (MEM_EXPR (mem), 1);
13134   if (loc_result == NULL)
13135     return NULL;
13136
13137   if (INTVAL (MEM_OFFSET (mem)))
13138     loc_descr_plus_const (&loc_result, INTVAL (MEM_OFFSET (mem)));
13139
13140   return loc_result;
13141 }
13142
13143 /* Output debug info about reason why we failed to expand expression as dwarf
13144    expression.  */
13145
13146 static void
13147 expansion_failed (tree expr, rtx rtl, char const *reason)
13148 {
13149   if (dump_file && (dump_flags & TDF_DETAILS))
13150     {
13151       fprintf (dump_file, "Failed to expand as dwarf: ");
13152       if (expr)
13153         print_generic_expr (dump_file, expr, dump_flags);
13154       if (rtl)
13155         {
13156           fprintf (dump_file, "\n");
13157           print_rtl (dump_file, rtl);
13158         }
13159       fprintf (dump_file, "\nReason: %s\n", reason);
13160     }
13161 }
13162
13163 /* Helper function for const_ok_for_output, called either directly
13164    or via for_each_rtx.  */
13165
13166 static int
13167 const_ok_for_output_1 (rtx *rtlp, void *data ATTRIBUTE_UNUSED)
13168 {
13169   rtx rtl = *rtlp;
13170
13171   if (GET_CODE (rtl) == UNSPEC)
13172     {
13173       /* If delegitimize_address couldn't do anything with the UNSPEC, assume
13174          we can't express it in the debug info.  */
13175 #ifdef ENABLE_CHECKING
13176       inform (current_function_decl
13177               ? DECL_SOURCE_LOCATION (current_function_decl)
13178               : UNKNOWN_LOCATION,
13179               "non-delegitimized UNSPEC %d found in variable location",
13180               XINT (rtl, 1));
13181 #endif
13182       expansion_failed (NULL_TREE, rtl,
13183                         "UNSPEC hasn't been delegitimized.\n");
13184       return 1;
13185     }
13186
13187   if (GET_CODE (rtl) != SYMBOL_REF)
13188     return 0;
13189
13190   if (CONSTANT_POOL_ADDRESS_P (rtl))
13191     {
13192       bool marked;
13193       get_pool_constant_mark (rtl, &marked);
13194       /* If all references to this pool constant were optimized away,
13195          it was not output and thus we can't represent it.  */
13196       if (!marked)
13197         {
13198           expansion_failed (NULL_TREE, rtl,
13199                             "Constant was removed from constant pool.\n");
13200           return 1;
13201         }
13202     }
13203
13204   if (SYMBOL_REF_TLS_MODEL (rtl) != TLS_MODEL_NONE)
13205     return 1;
13206
13207   /* Avoid references to external symbols in debug info, on several targets
13208      the linker might even refuse to link when linking a shared library,
13209      and in many other cases the relocations for .debug_info/.debug_loc are
13210      dropped, so the address becomes zero anyway.  Hidden symbols, guaranteed
13211      to be defined within the same shared library or executable are fine.  */
13212   if (SYMBOL_REF_EXTERNAL_P (rtl))
13213     {
13214       tree decl = SYMBOL_REF_DECL (rtl);
13215
13216       if (decl == NULL || !targetm.binds_local_p (decl))
13217         {
13218           expansion_failed (NULL_TREE, rtl,
13219                             "Symbol not defined in current TU.\n");
13220           return 1;
13221         }
13222     }
13223
13224   return 0;
13225 }
13226
13227 /* Return true if constant RTL can be emitted in DW_OP_addr or
13228    DW_AT_const_value.  TLS SYMBOL_REFs, external SYMBOL_REFs or
13229    non-marked constant pool SYMBOL_REFs can't be referenced in it.  */
13230
13231 static bool
13232 const_ok_for_output (rtx rtl)
13233 {
13234   if (GET_CODE (rtl) == SYMBOL_REF)
13235     return const_ok_for_output_1 (&rtl, NULL) == 0;
13236
13237   if (GET_CODE (rtl) == CONST)
13238     return for_each_rtx (&XEXP (rtl, 0), const_ok_for_output_1, NULL) == 0;
13239
13240   return true;
13241 }
13242
13243 /* The following routine converts the RTL for a variable or parameter
13244    (resident in memory) into an equivalent Dwarf representation of a
13245    mechanism for getting the address of that same variable onto the top of a
13246    hypothetical "address evaluation" stack.
13247
13248    When creating memory location descriptors, we are effectively transforming
13249    the RTL for a memory-resident object into its Dwarf postfix expression
13250    equivalent.  This routine recursively descends an RTL tree, turning
13251    it into Dwarf postfix code as it goes.
13252
13253    MODE is the mode of the memory reference, needed to handle some
13254    autoincrement addressing modes.
13255
13256    CAN_USE_FBREG is a flag whether we can use DW_AT_frame_base in the
13257    location list for RTL.
13258
13259    Return 0 if we can't represent the location.  */
13260
13261 static dw_loc_descr_ref
13262 mem_loc_descriptor (rtx rtl, enum machine_mode mode,
13263                     enum var_init_status initialized)
13264 {
13265   dw_loc_descr_ref mem_loc_result = NULL;
13266   enum dwarf_location_atom op;
13267   dw_loc_descr_ref op0, op1;
13268
13269   /* Note that for a dynamically sized array, the location we will generate a
13270      description of here will be the lowest numbered location which is
13271      actually within the array.  That's *not* necessarily the same as the
13272      zeroth element of the array.  */
13273
13274   rtl = targetm.delegitimize_address (rtl);
13275
13276   switch (GET_CODE (rtl))
13277     {
13278     case POST_INC:
13279     case POST_DEC:
13280     case POST_MODIFY:
13281       return mem_loc_descriptor (XEXP (rtl, 0), mode, initialized);
13282
13283     case SUBREG:
13284       /* The case of a subreg may arise when we have a local (register)
13285          variable or a formal (register) parameter which doesn't quite fill
13286          up an entire register.  For now, just assume that it is
13287          legitimate to make the Dwarf info refer to the whole register which
13288          contains the given subreg.  */
13289       if (!subreg_lowpart_p (rtl))
13290         break;
13291       rtl = SUBREG_REG (rtl);
13292       if (GET_MODE_SIZE (GET_MODE (rtl)) > DWARF2_ADDR_SIZE)
13293         break;
13294       if (GET_MODE_CLASS (GET_MODE (rtl)) != MODE_INT)
13295         break;
13296       mem_loc_result = mem_loc_descriptor (rtl, mode, initialized);
13297       break;
13298
13299     case REG:
13300       /* Whenever a register number forms a part of the description of the
13301          method for calculating the (dynamic) address of a memory resident
13302          object, DWARF rules require the register number be referred to as
13303          a "base register".  This distinction is not based in any way upon
13304          what category of register the hardware believes the given register
13305          belongs to.  This is strictly DWARF terminology we're dealing with
13306          here. Note that in cases where the location of a memory-resident
13307          data object could be expressed as: OP_ADD (OP_BASEREG (basereg),
13308          OP_CONST (0)) the actual DWARF location descriptor that we generate
13309          may just be OP_BASEREG (basereg).  This may look deceptively like
13310          the object in question was allocated to a register (rather than in
13311          memory) so DWARF consumers need to be aware of the subtle
13312          distinction between OP_REG and OP_BASEREG.  */
13313       if (REGNO (rtl) < FIRST_PSEUDO_REGISTER)
13314         mem_loc_result = based_loc_descr (rtl, 0, VAR_INIT_STATUS_INITIALIZED);
13315       else if (stack_realign_drap
13316                && crtl->drap_reg
13317                && crtl->args.internal_arg_pointer == rtl
13318                && REGNO (crtl->drap_reg) < FIRST_PSEUDO_REGISTER)
13319         {
13320           /* If RTL is internal_arg_pointer, which has been optimized
13321              out, use DRAP instead.  */
13322           mem_loc_result = based_loc_descr (crtl->drap_reg, 0,
13323                                             VAR_INIT_STATUS_INITIALIZED);
13324         }
13325       break;
13326
13327     case SIGN_EXTEND:
13328     case ZERO_EXTEND:
13329       op0 = mem_loc_descriptor (XEXP (rtl, 0), mode,
13330                                 VAR_INIT_STATUS_INITIALIZED);
13331       if (op0 == 0)
13332         break;
13333       else
13334         {
13335           int shift = DWARF2_ADDR_SIZE
13336                       - GET_MODE_SIZE (GET_MODE (XEXP (rtl, 0)));
13337           shift *= BITS_PER_UNIT;
13338           if (GET_CODE (rtl) == SIGN_EXTEND)
13339             op = DW_OP_shra;
13340           else
13341             op = DW_OP_shr;
13342           mem_loc_result = op0;
13343           add_loc_descr (&mem_loc_result, int_loc_descriptor (shift));
13344           add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_shl, 0, 0));
13345           add_loc_descr (&mem_loc_result, int_loc_descriptor (shift));
13346           add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0));
13347         }
13348       break;
13349
13350     case MEM:
13351       mem_loc_result = mem_loc_descriptor (XEXP (rtl, 0), GET_MODE (rtl),
13352                                            VAR_INIT_STATUS_INITIALIZED);
13353       if (mem_loc_result == NULL)
13354         mem_loc_result = tls_mem_loc_descriptor (rtl);
13355       if (mem_loc_result != 0)
13356         {
13357           if (GET_MODE_SIZE (GET_MODE (rtl)) > DWARF2_ADDR_SIZE)
13358             {
13359               expansion_failed (NULL_TREE, rtl, "DWARF address size mismatch");
13360               return 0;
13361             }
13362           else if (GET_MODE_SIZE (GET_MODE (rtl)) == DWARF2_ADDR_SIZE)
13363             add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_deref, 0, 0));
13364           else
13365             add_loc_descr (&mem_loc_result,
13366                            new_loc_descr (DW_OP_deref_size,
13367                                           GET_MODE_SIZE (GET_MODE (rtl)), 0));
13368         }
13369       else
13370         {
13371           rtx new_rtl = avoid_constant_pool_reference (rtl);
13372           if (new_rtl != rtl)
13373             return mem_loc_descriptor (new_rtl, mode, initialized);
13374         }
13375       break;
13376
13377     case LO_SUM:
13378          rtl = XEXP (rtl, 1);
13379
13380       /* ... fall through ...  */
13381
13382     case LABEL_REF:
13383       /* Some ports can transform a symbol ref into a label ref, because
13384          the symbol ref is too far away and has to be dumped into a constant
13385          pool.  */
13386     case CONST:
13387     case SYMBOL_REF:
13388       if (GET_CODE (rtl) == SYMBOL_REF
13389           && SYMBOL_REF_TLS_MODEL (rtl) != TLS_MODEL_NONE)
13390         {
13391           dw_loc_descr_ref temp;
13392
13393           /* If this is not defined, we have no way to emit the data.  */
13394           if (!targetm.have_tls || !targetm.asm_out.output_dwarf_dtprel)
13395             break;
13396
13397           temp = new_loc_descr (DW_OP_addr, 0, 0);
13398           temp->dw_loc_oprnd1.val_class = dw_val_class_addr;
13399           temp->dw_loc_oprnd1.v.val_addr = rtl;
13400           temp->dtprel = true;
13401
13402           mem_loc_result = new_loc_descr (DW_OP_GNU_push_tls_address, 0, 0);
13403           add_loc_descr (&mem_loc_result, temp);
13404
13405           break;
13406         }
13407
13408       if (!const_ok_for_output (rtl))
13409         break;
13410
13411     symref:
13412       mem_loc_result = new_loc_descr (DW_OP_addr, 0, 0);
13413       mem_loc_result->dw_loc_oprnd1.val_class = dw_val_class_addr;
13414       mem_loc_result->dw_loc_oprnd1.v.val_addr = rtl;
13415       VEC_safe_push (rtx, gc, used_rtx_array, rtl);
13416       break;
13417
13418     case CONCAT:
13419     case CONCATN:
13420     case VAR_LOCATION:
13421       expansion_failed (NULL_TREE, rtl,
13422                         "CONCAT/CONCATN/VAR_LOCATION is handled only by loc_descriptor");
13423       return 0;
13424
13425     case PRE_MODIFY:
13426       /* Extract the PLUS expression nested inside and fall into
13427          PLUS code below.  */
13428       rtl = XEXP (rtl, 1);
13429       goto plus;
13430
13431     case PRE_INC:
13432     case PRE_DEC:
13433       /* Turn these into a PLUS expression and fall into the PLUS code
13434          below.  */
13435       rtl = gen_rtx_PLUS (word_mode, XEXP (rtl, 0),
13436                           GEN_INT (GET_CODE (rtl) == PRE_INC
13437                                    ? GET_MODE_UNIT_SIZE (mode)
13438                                    : -GET_MODE_UNIT_SIZE (mode)));
13439
13440       /* ... fall through ...  */
13441
13442     case PLUS:
13443     plus:
13444       if (is_based_loc (rtl))
13445         mem_loc_result = based_loc_descr (XEXP (rtl, 0),
13446                                           INTVAL (XEXP (rtl, 1)),
13447                                           VAR_INIT_STATUS_INITIALIZED);
13448       else
13449         {
13450           mem_loc_result = mem_loc_descriptor (XEXP (rtl, 0), mode,
13451                                                VAR_INIT_STATUS_INITIALIZED);
13452           if (mem_loc_result == 0)
13453             break;
13454
13455           if (CONST_INT_P (XEXP (rtl, 1)))
13456             loc_descr_plus_const (&mem_loc_result, INTVAL (XEXP (rtl, 1)));
13457           else
13458             {
13459               dw_loc_descr_ref mem_loc_result2
13460                 = mem_loc_descriptor (XEXP (rtl, 1), mode,
13461                                       VAR_INIT_STATUS_INITIALIZED);
13462               if (mem_loc_result2 == 0)
13463                 break;
13464               add_loc_descr (&mem_loc_result, mem_loc_result2);
13465               add_loc_descr (&mem_loc_result,
13466                              new_loc_descr (DW_OP_plus, 0, 0));
13467             }
13468         }
13469       break;
13470
13471     /* If a pseudo-reg is optimized away, it is possible for it to
13472        be replaced with a MEM containing a multiply or shift.  */
13473     case MINUS:
13474       op = DW_OP_minus;
13475       goto do_binop;
13476
13477     case MULT:
13478       op = DW_OP_mul;
13479       goto do_binop;
13480
13481     case DIV:
13482       op = DW_OP_div;
13483       goto do_binop;
13484
13485     case UMOD:
13486       op = DW_OP_mod;
13487       goto do_binop;
13488
13489     case ASHIFT:
13490       op = DW_OP_shl;
13491       goto do_binop;
13492
13493     case ASHIFTRT:
13494       op = DW_OP_shra;
13495       goto do_binop;
13496
13497     case LSHIFTRT:
13498       op = DW_OP_shr;
13499       goto do_binop;
13500
13501     case AND:
13502       op = DW_OP_and;
13503       goto do_binop;
13504
13505     case IOR:
13506       op = DW_OP_or;
13507       goto do_binop;
13508
13509     case XOR:
13510       op = DW_OP_xor;
13511       goto do_binop;
13512
13513     do_binop:
13514       op0 = mem_loc_descriptor (XEXP (rtl, 0), mode,
13515                                 VAR_INIT_STATUS_INITIALIZED);
13516       op1 = mem_loc_descriptor (XEXP (rtl, 1), mode,
13517                                 VAR_INIT_STATUS_INITIALIZED);
13518
13519       if (op0 == 0 || op1 == 0)
13520         break;
13521
13522       mem_loc_result = op0;
13523       add_loc_descr (&mem_loc_result, op1);
13524       add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0));
13525       break;
13526
13527     case MOD:
13528       op0 = mem_loc_descriptor (XEXP (rtl, 0), mode,
13529                                 VAR_INIT_STATUS_INITIALIZED);
13530       op1 = mem_loc_descriptor (XEXP (rtl, 1), mode,
13531                                 VAR_INIT_STATUS_INITIALIZED);
13532
13533       if (op0 == 0 || op1 == 0)
13534         break;
13535
13536       mem_loc_result = op0;
13537       add_loc_descr (&mem_loc_result, op1);
13538       add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_over, 0, 0));
13539       add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_over, 0, 0));
13540       add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_div, 0, 0));
13541       add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_mul, 0, 0));
13542       add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_minus, 0, 0));
13543       break;
13544
13545     case NOT:
13546       op = DW_OP_not;
13547       goto do_unop;
13548
13549     case ABS:
13550       op = DW_OP_abs;
13551       goto do_unop;
13552
13553     case NEG:
13554       op = DW_OP_neg;
13555       goto do_unop;
13556
13557     do_unop:
13558       op0 = mem_loc_descriptor (XEXP (rtl, 0), mode,
13559                                 VAR_INIT_STATUS_INITIALIZED);
13560
13561       if (op0 == 0)
13562         break;
13563
13564       mem_loc_result = op0;
13565       add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0));
13566       break;
13567
13568     case CONST_INT:
13569       mem_loc_result = int_loc_descriptor (INTVAL (rtl));
13570       break;
13571
13572     case EQ:
13573       op = DW_OP_eq;
13574       goto do_scompare;
13575
13576     case GE:
13577       op = DW_OP_ge;
13578       goto do_scompare;
13579
13580     case GT:
13581       op = DW_OP_gt;
13582       goto do_scompare;
13583
13584     case LE:
13585       op = DW_OP_le;
13586       goto do_scompare;
13587
13588     case LT:
13589       op = DW_OP_lt;
13590       goto do_scompare;
13591
13592     case NE:
13593       op = DW_OP_ne;
13594       goto do_scompare;
13595
13596     do_scompare:
13597       if (GET_MODE_SIZE (GET_MODE (XEXP (rtl, 0))) > DWARF2_ADDR_SIZE
13598           || GET_MODE_SIZE (GET_MODE (XEXP (rtl, 1))) > DWARF2_ADDR_SIZE)
13599         break;
13600       else
13601         {
13602           enum machine_mode op_mode = GET_MODE (XEXP (rtl, 0));
13603
13604           if (op_mode == VOIDmode)
13605             op_mode = GET_MODE (XEXP (rtl, 1));
13606           if (op_mode != VOIDmode && GET_MODE_CLASS (op_mode) != MODE_INT)
13607             break;
13608
13609           op0 = mem_loc_descriptor (XEXP (rtl, 0), mode,
13610                                     VAR_INIT_STATUS_INITIALIZED);
13611           op1 = mem_loc_descriptor (XEXP (rtl, 1), mode,
13612                                     VAR_INIT_STATUS_INITIALIZED);
13613
13614           if (op0 == 0 || op1 == 0)
13615             break;
13616
13617           if (op_mode != VOIDmode
13618               && GET_MODE_SIZE (op_mode) < DWARF2_ADDR_SIZE)
13619             {
13620               int shift = DWARF2_ADDR_SIZE - GET_MODE_SIZE (op_mode);
13621               shift *= BITS_PER_UNIT;
13622               /* For eq/ne, if the operands are known to be zero-extended,
13623                  there is no need to do the fancy shifting up.  */
13624               if (op == DW_OP_eq || op == DW_OP_ne)
13625                 {
13626                   dw_loc_descr_ref last0, last1;
13627                   for (last0 = op0;
13628                        last0->dw_loc_next != NULL;
13629                        last0 = last0->dw_loc_next)
13630                     ;
13631                   for (last1 = op1;
13632                        last1->dw_loc_next != NULL;
13633                        last1 = last1->dw_loc_next)
13634                     ;
13635                   /* deref_size zero extends, and for constants we can check
13636                      whether they are zero extended or not.  */
13637                   if (((last0->dw_loc_opc == DW_OP_deref_size
13638                         && last0->dw_loc_oprnd1.v.val_int
13639                            <= GET_MODE_SIZE (op_mode))
13640                        || (CONST_INT_P (XEXP (rtl, 0))
13641                             && (unsigned HOST_WIDE_INT) INTVAL (XEXP (rtl, 0))
13642                                == (INTVAL (XEXP (rtl, 0))
13643                                    & GET_MODE_MASK (op_mode))))
13644                       && ((last1->dw_loc_opc == DW_OP_deref_size
13645                            && last1->dw_loc_oprnd1.v.val_int
13646                               <= GET_MODE_SIZE (op_mode))
13647                           || (CONST_INT_P (XEXP (rtl, 1))
13648                               && (unsigned HOST_WIDE_INT)
13649                                  INTVAL (XEXP (rtl, 1))
13650                                  == (INTVAL (XEXP (rtl, 1))
13651                                      & GET_MODE_MASK (op_mode)))))
13652                     goto do_compare;
13653                 }
13654               add_loc_descr (&op0, int_loc_descriptor (shift));
13655               add_loc_descr (&op0, new_loc_descr (DW_OP_shl, 0, 0));
13656               if (CONST_INT_P (XEXP (rtl, 1)))
13657                 op1 = int_loc_descriptor (INTVAL (XEXP (rtl, 1)) << shift);
13658               else
13659                 {
13660                   add_loc_descr (&op1, int_loc_descriptor (shift));
13661                   add_loc_descr (&op1, new_loc_descr (DW_OP_shl, 0, 0));
13662                 }
13663             }
13664         }
13665
13666     do_compare:
13667       mem_loc_result = op0;
13668       add_loc_descr (&mem_loc_result, op1);
13669       add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0));
13670       if (STORE_FLAG_VALUE != 1)
13671         {
13672           add_loc_descr (&mem_loc_result,
13673                          int_loc_descriptor (STORE_FLAG_VALUE));
13674           add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_mul, 0, 0));
13675         }
13676       break;
13677
13678     case GEU:
13679       op = DW_OP_ge;
13680       goto do_ucompare;
13681
13682     case GTU:
13683       op = DW_OP_gt;
13684       goto do_ucompare;
13685
13686     case LEU:
13687       op = DW_OP_le;
13688       goto do_ucompare;
13689
13690     case LTU:
13691       op = DW_OP_lt;
13692       goto do_ucompare;
13693
13694     do_ucompare:
13695       if (GET_MODE_SIZE (GET_MODE (XEXP (rtl, 0))) > DWARF2_ADDR_SIZE
13696           || GET_MODE_SIZE (GET_MODE (XEXP (rtl, 1))) > DWARF2_ADDR_SIZE)
13697         break;
13698       else
13699         {
13700           enum machine_mode op_mode = GET_MODE (XEXP (rtl, 0));
13701
13702           if (op_mode == VOIDmode)
13703             op_mode = GET_MODE (XEXP (rtl, 1));
13704           if (op_mode != VOIDmode && GET_MODE_CLASS (op_mode) != MODE_INT)
13705             break;
13706
13707           op0 = mem_loc_descriptor (XEXP (rtl, 0), mode,
13708                                     VAR_INIT_STATUS_INITIALIZED);
13709           op1 = mem_loc_descriptor (XEXP (rtl, 1), mode,
13710                                     VAR_INIT_STATUS_INITIALIZED);
13711
13712           if (op0 == 0 || op1 == 0)
13713             break;
13714
13715           if (op_mode != VOIDmode
13716               && GET_MODE_SIZE (op_mode) < DWARF2_ADDR_SIZE)
13717             {
13718               HOST_WIDE_INT mask = GET_MODE_MASK (op_mode);
13719               dw_loc_descr_ref last0, last1;
13720               for (last0 = op0;
13721                    last0->dw_loc_next != NULL;
13722                    last0 = last0->dw_loc_next)
13723                 ;
13724               for (last1 = op1;
13725                    last1->dw_loc_next != NULL;
13726                    last1 = last1->dw_loc_next)
13727                 ;
13728               if (CONST_INT_P (XEXP (rtl, 0)))
13729                 op0 = int_loc_descriptor (INTVAL (XEXP (rtl, 0)) & mask);
13730               /* deref_size zero extends, so no need to mask it again.  */
13731               else if (last0->dw_loc_opc != DW_OP_deref_size
13732                        || last0->dw_loc_oprnd1.v.val_int
13733                           > GET_MODE_SIZE (op_mode))
13734                 {
13735                   add_loc_descr (&op0, int_loc_descriptor (mask));
13736                   add_loc_descr (&op0, new_loc_descr (DW_OP_and, 0, 0));
13737                 }
13738               if (CONST_INT_P (XEXP (rtl, 1)))
13739                 op1 = int_loc_descriptor (INTVAL (XEXP (rtl, 1)) & mask);
13740               /* deref_size zero extends, so no need to mask it again.  */
13741               else if (last1->dw_loc_opc != DW_OP_deref_size
13742                        || last1->dw_loc_oprnd1.v.val_int
13743                           > GET_MODE_SIZE (op_mode))
13744                 {
13745                   add_loc_descr (&op1, int_loc_descriptor (mask));
13746                   add_loc_descr (&op1, new_loc_descr (DW_OP_and, 0, 0));
13747                 }
13748             }
13749           else
13750             {
13751               HOST_WIDE_INT bias = 1;
13752               bias <<= (DWARF2_ADDR_SIZE * BITS_PER_UNIT - 1);
13753               add_loc_descr (&op0, new_loc_descr (DW_OP_plus_uconst, bias, 0));
13754               if (CONST_INT_P (XEXP (rtl, 1)))
13755                 op1 = int_loc_descriptor ((unsigned HOST_WIDE_INT) bias
13756                                           + INTVAL (XEXP (rtl, 1)));
13757               else
13758                 add_loc_descr (&op1, new_loc_descr (DW_OP_plus_uconst,
13759                                                     bias, 0));
13760             }
13761         }
13762       goto do_compare;
13763
13764     case SMIN:
13765     case SMAX:
13766     case UMIN:
13767     case UMAX:
13768       if (GET_MODE_CLASS (GET_MODE (XEXP (rtl, 0))) != MODE_INT
13769           || GET_MODE_SIZE (GET_MODE (XEXP (rtl, 0))) > DWARF2_ADDR_SIZE
13770           || GET_MODE (XEXP (rtl, 0)) != GET_MODE (XEXP (rtl, 1)))
13771         break;
13772
13773       op0 = mem_loc_descriptor (XEXP (rtl, 0), mode,
13774                                 VAR_INIT_STATUS_INITIALIZED);
13775       op1 = mem_loc_descriptor (XEXP (rtl, 1), mode,
13776                                 VAR_INIT_STATUS_INITIALIZED);
13777
13778       if (op0 == 0 || op1 == 0)
13779         break;
13780
13781       add_loc_descr (&op0, new_loc_descr (DW_OP_dup, 0, 0));
13782       add_loc_descr (&op1, new_loc_descr (DW_OP_swap, 0, 0));
13783       add_loc_descr (&op1, new_loc_descr (DW_OP_over, 0, 0));
13784       if (GET_CODE (rtl) == UMIN || GET_CODE (rtl) == UMAX)
13785         {
13786           if (GET_MODE_SIZE (GET_MODE (XEXP (rtl, 0))) < DWARF2_ADDR_SIZE)
13787             {
13788               HOST_WIDE_INT mask = GET_MODE_MASK (GET_MODE (XEXP (rtl, 0)));
13789               add_loc_descr (&op0, int_loc_descriptor (mask));
13790               add_loc_descr (&op0, new_loc_descr (DW_OP_and, 0, 0));
13791               add_loc_descr (&op1, int_loc_descriptor (mask));
13792               add_loc_descr (&op1, new_loc_descr (DW_OP_and, 0, 0));
13793             }
13794           else
13795             {
13796               HOST_WIDE_INT bias = 1;
13797               bias <<= (DWARF2_ADDR_SIZE * BITS_PER_UNIT - 1);
13798               add_loc_descr (&op0, new_loc_descr (DW_OP_plus_uconst, bias, 0));
13799               add_loc_descr (&op1, new_loc_descr (DW_OP_plus_uconst, bias, 0));
13800             }
13801         }
13802       else if (GET_MODE_SIZE (GET_MODE (XEXP (rtl, 0))) < DWARF2_ADDR_SIZE)
13803         {
13804           int shift = DWARF2_ADDR_SIZE
13805                       - GET_MODE_SIZE (GET_MODE (XEXP (rtl, 0)));
13806           shift *= BITS_PER_UNIT;
13807           add_loc_descr (&op0, int_loc_descriptor (shift));
13808           add_loc_descr (&op0, new_loc_descr (DW_OP_shl, 0, 0));
13809           add_loc_descr (&op1, int_loc_descriptor (shift));
13810           add_loc_descr (&op1, new_loc_descr (DW_OP_shl, 0, 0));
13811         }
13812
13813       if (GET_CODE (rtl) == SMIN || GET_CODE (rtl) == UMIN)
13814         op = DW_OP_lt;
13815       else
13816         op = DW_OP_gt;
13817       mem_loc_result = op0;
13818       add_loc_descr (&mem_loc_result, op1);
13819       add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0));
13820       {
13821         dw_loc_descr_ref bra_node, drop_node;
13822
13823         bra_node = new_loc_descr (DW_OP_bra, 0, 0);
13824         add_loc_descr (&mem_loc_result, bra_node);
13825         add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_swap, 0, 0));
13826         drop_node = new_loc_descr (DW_OP_drop, 0, 0);
13827         add_loc_descr (&mem_loc_result, drop_node);
13828         bra_node->dw_loc_oprnd1.val_class = dw_val_class_loc;
13829         bra_node->dw_loc_oprnd1.v.val_loc = drop_node;
13830       }
13831       break;
13832
13833     case ZERO_EXTRACT:
13834     case SIGN_EXTRACT:
13835       if (CONST_INT_P (XEXP (rtl, 1))
13836           && CONST_INT_P (XEXP (rtl, 2))
13837           && ((unsigned) INTVAL (XEXP (rtl, 1))
13838               + (unsigned) INTVAL (XEXP (rtl, 2))
13839               <= GET_MODE_BITSIZE (GET_MODE (rtl)))
13840           && GET_MODE_BITSIZE (GET_MODE (rtl)) <= DWARF2_ADDR_SIZE
13841           && GET_MODE_BITSIZE (GET_MODE (XEXP (rtl, 0))) <= DWARF2_ADDR_SIZE)
13842         {
13843           int shift, size;
13844           op0 = mem_loc_descriptor (XEXP (rtl, 0), mode,
13845                                     VAR_INIT_STATUS_INITIALIZED);
13846           if (op0 == 0)
13847             break;
13848           if (GET_CODE (rtl) == SIGN_EXTRACT)
13849             op = DW_OP_shra;
13850           else
13851             op = DW_OP_shr;
13852           mem_loc_result = op0;
13853           size = INTVAL (XEXP (rtl, 1));
13854           shift = INTVAL (XEXP (rtl, 2));
13855           if (BITS_BIG_ENDIAN)
13856             shift = GET_MODE_BITSIZE (GET_MODE (XEXP (rtl, 0)))
13857                     - shift - size;
13858           if (shift + size != (int) DWARF2_ADDR_SIZE)
13859             {
13860               add_loc_descr (&mem_loc_result,
13861                              int_loc_descriptor (DWARF2_ADDR_SIZE
13862                                                  - shift - size));
13863               add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_shl, 0, 0));
13864             }
13865           if (size != (int) DWARF2_ADDR_SIZE)
13866             {
13867               add_loc_descr (&mem_loc_result,
13868                              int_loc_descriptor (DWARF2_ADDR_SIZE - size));
13869               add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0));
13870             }
13871         }
13872       break;
13873
13874     case COMPARE:
13875     case IF_THEN_ELSE:
13876     case ROTATE:
13877     case ROTATERT:
13878     case TRUNCATE:
13879       /* In theory, we could implement the above.  */
13880       /* DWARF cannot represent the unsigned compare operations
13881          natively.  */
13882     case SS_MULT:
13883     case US_MULT:
13884     case SS_DIV:
13885     case US_DIV:
13886     case SS_PLUS:
13887     case US_PLUS:
13888     case SS_MINUS:
13889     case US_MINUS:
13890     case SS_NEG:
13891     case US_NEG:
13892     case SS_ABS:
13893     case SS_ASHIFT:
13894     case US_ASHIFT:
13895     case SS_TRUNCATE:
13896     case US_TRUNCATE:
13897     case UDIV:
13898     case UNORDERED:
13899     case ORDERED:
13900     case UNEQ:
13901     case UNGE:
13902     case UNGT:
13903     case UNLE:
13904     case UNLT:
13905     case LTGT:
13906     case FLOAT_EXTEND:
13907     case FLOAT_TRUNCATE:
13908     case FLOAT:
13909     case UNSIGNED_FLOAT:
13910     case FIX:
13911     case UNSIGNED_FIX:
13912     case FRACT_CONVERT:
13913     case UNSIGNED_FRACT_CONVERT:
13914     case SAT_FRACT:
13915     case UNSIGNED_SAT_FRACT:
13916     case SQRT:
13917     case BSWAP:
13918     case FFS:
13919     case CLZ:
13920     case CTZ:
13921     case POPCOUNT:
13922     case PARITY:
13923     case ASM_OPERANDS:
13924     case VEC_MERGE:
13925     case VEC_SELECT:
13926     case VEC_CONCAT:
13927     case VEC_DUPLICATE:
13928     case UNSPEC:
13929     case HIGH:
13930       /* If delegitimize_address couldn't do anything with the UNSPEC, we
13931          can't express it in the debug info.  This can happen e.g. with some
13932          TLS UNSPECs.  */
13933       break;
13934
13935     case CONST_STRING:
13936       resolve_one_addr (&rtl, NULL);
13937       goto symref;
13938
13939     default:
13940 #ifdef ENABLE_CHECKING
13941       print_rtl (stderr, rtl);
13942       gcc_unreachable ();
13943 #else
13944       break;
13945 #endif
13946     }
13947
13948   if (mem_loc_result && initialized == VAR_INIT_STATUS_UNINITIALIZED)
13949     add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
13950
13951   return mem_loc_result;
13952 }
13953
13954 /* Return a descriptor that describes the concatenation of two locations.
13955    This is typically a complex variable.  */
13956
13957 static dw_loc_descr_ref
13958 concat_loc_descriptor (rtx x0, rtx x1, enum var_init_status initialized)
13959 {
13960   dw_loc_descr_ref cc_loc_result = NULL;
13961   dw_loc_descr_ref x0_ref
13962     = loc_descriptor (x0, VOIDmode, VAR_INIT_STATUS_INITIALIZED);
13963   dw_loc_descr_ref x1_ref
13964     = loc_descriptor (x1, VOIDmode, VAR_INIT_STATUS_INITIALIZED);
13965
13966   if (x0_ref == 0 || x1_ref == 0)
13967     return 0;
13968
13969   cc_loc_result = x0_ref;
13970   add_loc_descr_op_piece (&cc_loc_result, GET_MODE_SIZE (GET_MODE (x0)));
13971
13972   add_loc_descr (&cc_loc_result, x1_ref);
13973   add_loc_descr_op_piece (&cc_loc_result, GET_MODE_SIZE (GET_MODE (x1)));
13974
13975   if (initialized == VAR_INIT_STATUS_UNINITIALIZED)
13976     add_loc_descr (&cc_loc_result, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
13977
13978   return cc_loc_result;
13979 }
13980
13981 /* Return a descriptor that describes the concatenation of N
13982    locations.  */
13983
13984 static dw_loc_descr_ref
13985 concatn_loc_descriptor (rtx concatn, enum var_init_status initialized)
13986 {
13987   unsigned int i;
13988   dw_loc_descr_ref cc_loc_result = NULL;
13989   unsigned int n = XVECLEN (concatn, 0);
13990
13991   for (i = 0; i < n; ++i)
13992     {
13993       dw_loc_descr_ref ref;
13994       rtx x = XVECEXP (concatn, 0, i);
13995
13996       ref = loc_descriptor (x, VOIDmode, VAR_INIT_STATUS_INITIALIZED);
13997       if (ref == NULL)
13998         return NULL;
13999
14000       add_loc_descr (&cc_loc_result, ref);
14001       add_loc_descr_op_piece (&cc_loc_result, GET_MODE_SIZE (GET_MODE (x)));
14002     }
14003
14004   if (cc_loc_result && initialized == VAR_INIT_STATUS_UNINITIALIZED)
14005     add_loc_descr (&cc_loc_result, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
14006
14007   return cc_loc_result;
14008 }
14009
14010 /* Output a proper Dwarf location descriptor for a variable or parameter
14011    which is either allocated in a register or in a memory location.  For a
14012    register, we just generate an OP_REG and the register number.  For a
14013    memory location we provide a Dwarf postfix expression describing how to
14014    generate the (dynamic) address of the object onto the address stack.
14015
14016    MODE is mode of the decl if this loc_descriptor is going to be used in
14017    .debug_loc section where DW_OP_stack_value and DW_OP_implicit_value are
14018    allowed, VOIDmode otherwise.
14019
14020    If we don't know how to describe it, return 0.  */
14021
14022 static dw_loc_descr_ref
14023 loc_descriptor (rtx rtl, enum machine_mode mode,
14024                 enum var_init_status initialized)
14025 {
14026   dw_loc_descr_ref loc_result = NULL;
14027
14028   switch (GET_CODE (rtl))
14029     {
14030     case SUBREG:
14031       /* The case of a subreg may arise when we have a local (register)
14032          variable or a formal (register) parameter which doesn't quite fill
14033          up an entire register.  For now, just assume that it is
14034          legitimate to make the Dwarf info refer to the whole register which
14035          contains the given subreg.  */
14036       loc_result = loc_descriptor (SUBREG_REG (rtl), mode, initialized);
14037       break;
14038
14039     case REG:
14040       loc_result = reg_loc_descriptor (rtl, initialized);
14041       break;
14042
14043     case SIGN_EXTEND:
14044     case ZERO_EXTEND:
14045       loc_result = loc_descriptor (XEXP (rtl, 0), mode, initialized);
14046       break;
14047
14048     case MEM:
14049       loc_result = mem_loc_descriptor (XEXP (rtl, 0), GET_MODE (rtl),
14050                                        initialized);
14051       if (loc_result == NULL)
14052         loc_result = tls_mem_loc_descriptor (rtl);
14053       if (loc_result == NULL)
14054         {
14055           rtx new_rtl = avoid_constant_pool_reference (rtl);
14056           if (new_rtl != rtl)
14057             loc_result = loc_descriptor (new_rtl, mode, initialized);
14058         }
14059       break;
14060
14061     case CONCAT:
14062       loc_result = concat_loc_descriptor (XEXP (rtl, 0), XEXP (rtl, 1),
14063                                           initialized);
14064       break;
14065
14066     case CONCATN:
14067       loc_result = concatn_loc_descriptor (rtl, initialized);
14068       break;
14069
14070     case VAR_LOCATION:
14071       /* Single part.  */
14072       if (GET_CODE (PAT_VAR_LOCATION_LOC (rtl)) != PARALLEL)
14073         {
14074           rtx loc = PAT_VAR_LOCATION_LOC (rtl);
14075           if (GET_CODE (loc) == EXPR_LIST)
14076             loc = XEXP (loc, 0);
14077           loc_result = loc_descriptor (loc, mode, initialized);
14078           break;
14079         }
14080
14081       rtl = XEXP (rtl, 1);
14082       /* FALLTHRU */
14083
14084     case PARALLEL:
14085       {
14086         rtvec par_elems = XVEC (rtl, 0);
14087         int num_elem = GET_NUM_ELEM (par_elems);
14088         enum machine_mode mode;
14089         int i;
14090
14091         /* Create the first one, so we have something to add to.  */
14092         loc_result = loc_descriptor (XEXP (RTVEC_ELT (par_elems, 0), 0),
14093                                      VOIDmode, initialized);
14094         if (loc_result == NULL)
14095           return NULL;
14096         mode = GET_MODE (XEXP (RTVEC_ELT (par_elems, 0), 0));
14097         add_loc_descr_op_piece (&loc_result, GET_MODE_SIZE (mode));
14098         for (i = 1; i < num_elem; i++)
14099           {
14100             dw_loc_descr_ref temp;
14101
14102             temp = loc_descriptor (XEXP (RTVEC_ELT (par_elems, i), 0),
14103                                    VOIDmode, initialized);
14104             if (temp == NULL)
14105               return NULL;
14106             add_loc_descr (&loc_result, temp);
14107             mode = GET_MODE (XEXP (RTVEC_ELT (par_elems, i), 0));
14108             add_loc_descr_op_piece (&loc_result, GET_MODE_SIZE (mode));
14109           }
14110       }
14111       break;
14112
14113     case CONST_INT:
14114       if (mode != VOIDmode && mode != BLKmode)
14115         loc_result = address_of_int_loc_descriptor (GET_MODE_SIZE (mode),
14116                                                     INTVAL (rtl));
14117       break;
14118
14119     case CONST_DOUBLE:
14120       if (mode == VOIDmode)
14121         mode = GET_MODE (rtl);
14122
14123       if (mode != VOIDmode && (dwarf_version >= 4 || !dwarf_strict))
14124         {
14125           gcc_assert (mode == GET_MODE (rtl) || VOIDmode == GET_MODE (rtl));
14126
14127           /* Note that a CONST_DOUBLE rtx could represent either an integer
14128              or a floating-point constant.  A CONST_DOUBLE is used whenever
14129              the constant requires more than one word in order to be
14130              adequately represented.  We output CONST_DOUBLEs as blocks.  */
14131           loc_result = new_loc_descr (DW_OP_implicit_value,
14132                                       GET_MODE_SIZE (mode), 0);
14133           if (SCALAR_FLOAT_MODE_P (mode))
14134             {
14135               unsigned int length = GET_MODE_SIZE (mode);
14136               unsigned char *array = GGC_NEWVEC (unsigned char, length);
14137
14138               insert_float (rtl, array);
14139               loc_result->dw_loc_oprnd2.val_class = dw_val_class_vec;
14140               loc_result->dw_loc_oprnd2.v.val_vec.length = length / 4;
14141               loc_result->dw_loc_oprnd2.v.val_vec.elt_size = 4;
14142               loc_result->dw_loc_oprnd2.v.val_vec.array = array;
14143             }
14144           else
14145             {
14146               loc_result->dw_loc_oprnd2.val_class = dw_val_class_const_double;
14147               loc_result->dw_loc_oprnd2.v.val_double
14148                 = rtx_to_double_int (rtl);
14149             }
14150         }
14151       break;
14152
14153     case CONST_VECTOR:
14154       if (mode == VOIDmode)
14155         mode = GET_MODE (rtl);
14156
14157       if (mode != VOIDmode && (dwarf_version >= 4 || !dwarf_strict))
14158         {
14159           unsigned int elt_size = GET_MODE_UNIT_SIZE (GET_MODE (rtl));
14160           unsigned int length = CONST_VECTOR_NUNITS (rtl);
14161           unsigned char *array = GGC_NEWVEC (unsigned char, length * elt_size);
14162           unsigned int i;
14163           unsigned char *p;
14164
14165           gcc_assert (mode == GET_MODE (rtl) || VOIDmode == GET_MODE (rtl));
14166           switch (GET_MODE_CLASS (mode))
14167             {
14168             case MODE_VECTOR_INT:
14169               for (i = 0, p = array; i < length; i++, p += elt_size)
14170                 {
14171                   rtx elt = CONST_VECTOR_ELT (rtl, i);
14172                   double_int val = rtx_to_double_int (elt);
14173
14174                   if (elt_size <= sizeof (HOST_WIDE_INT))
14175                     insert_int (double_int_to_shwi (val), elt_size, p);
14176                   else
14177                     {
14178                       gcc_assert (elt_size == 2 * sizeof (HOST_WIDE_INT));
14179                       insert_double (val, p);
14180                     }
14181                 }
14182               break;
14183
14184             case MODE_VECTOR_FLOAT:
14185               for (i = 0, p = array; i < length; i++, p += elt_size)
14186                 {
14187                   rtx elt = CONST_VECTOR_ELT (rtl, i);
14188                   insert_float (elt, p);
14189                 }
14190               break;
14191
14192             default:
14193               gcc_unreachable ();
14194             }
14195
14196           loc_result = new_loc_descr (DW_OP_implicit_value,
14197                                       length * elt_size, 0);
14198           loc_result->dw_loc_oprnd2.val_class = dw_val_class_vec;
14199           loc_result->dw_loc_oprnd2.v.val_vec.length = length;
14200           loc_result->dw_loc_oprnd2.v.val_vec.elt_size = elt_size;
14201           loc_result->dw_loc_oprnd2.v.val_vec.array = array;
14202         }
14203       break;
14204
14205     case CONST:
14206       if (mode == VOIDmode
14207           || GET_CODE (XEXP (rtl, 0)) == CONST_INT
14208           || GET_CODE (XEXP (rtl, 0)) == CONST_DOUBLE
14209           || GET_CODE (XEXP (rtl, 0)) == CONST_VECTOR)
14210         {
14211           loc_result = loc_descriptor (XEXP (rtl, 0), mode, initialized);
14212           break;
14213         }
14214       /* FALLTHROUGH */
14215     case SYMBOL_REF:
14216       if (!const_ok_for_output (rtl))
14217         break;
14218     case LABEL_REF:
14219       if (mode != VOIDmode && GET_MODE_SIZE (mode) == DWARF2_ADDR_SIZE
14220           && (dwarf_version >= 4 || !dwarf_strict))
14221         {
14222           loc_result = new_loc_descr (DW_OP_addr, 0, 0);
14223           loc_result->dw_loc_oprnd1.val_class = dw_val_class_addr;
14224           loc_result->dw_loc_oprnd1.v.val_addr = rtl;
14225           add_loc_descr (&loc_result, new_loc_descr (DW_OP_stack_value, 0, 0));
14226           VEC_safe_push (rtx, gc, used_rtx_array, rtl);
14227         }
14228       break;
14229
14230     default:
14231       if (GET_MODE_CLASS (mode) == MODE_INT && GET_MODE (rtl) == mode
14232           && GET_MODE_SIZE (GET_MODE (rtl)) <= DWARF2_ADDR_SIZE
14233           && (dwarf_version >= 4 || !dwarf_strict))
14234         {
14235           /* Value expression.  */
14236           loc_result = mem_loc_descriptor (rtl, VOIDmode, initialized);
14237           if (loc_result)
14238             add_loc_descr (&loc_result,
14239                            new_loc_descr (DW_OP_stack_value, 0, 0));
14240         }
14241       break;
14242     }
14243
14244   return loc_result;
14245 }
14246
14247 /* We need to figure out what section we should use as the base for the
14248    address ranges where a given location is valid.
14249    1. If this particular DECL has a section associated with it, use that.
14250    2. If this function has a section associated with it, use that.
14251    3. Otherwise, use the text section.
14252    XXX: If you split a variable across multiple sections, we won't notice.  */
14253
14254 static const char *
14255 secname_for_decl (const_tree decl)
14256 {
14257   const char *secname;
14258
14259   if (VAR_OR_FUNCTION_DECL_P (decl) && DECL_SECTION_NAME (decl))
14260     {
14261       tree sectree = DECL_SECTION_NAME (decl);
14262       secname = TREE_STRING_POINTER (sectree);
14263     }
14264   else if (current_function_decl && DECL_SECTION_NAME (current_function_decl))
14265     {
14266       tree sectree = DECL_SECTION_NAME (current_function_decl);
14267       secname = TREE_STRING_POINTER (sectree);
14268     }
14269   else if (cfun && in_cold_section_p)
14270     secname = crtl->subsections.cold_section_label;
14271   else
14272     secname = text_section_label;
14273
14274   return secname;
14275 }
14276
14277 /* Return true when DECL_BY_REFERENCE is defined and set for DECL.  */
14278
14279 static bool
14280 decl_by_reference_p (tree decl)
14281 {
14282   return ((TREE_CODE (decl) == PARM_DECL || TREE_CODE (decl) == RESULT_DECL
14283            || TREE_CODE (decl) == VAR_DECL)
14284           && DECL_BY_REFERENCE (decl));
14285 }
14286
14287 /* Helper function for dw_loc_list.  Compute proper Dwarf location descriptor
14288    for VARLOC.  */
14289
14290 static dw_loc_descr_ref
14291 dw_loc_list_1 (tree loc, rtx varloc, int want_address,
14292                enum var_init_status initialized)
14293 {
14294   int have_address = 0;
14295   dw_loc_descr_ref descr;
14296   enum machine_mode mode;
14297
14298   if (want_address != 2)
14299     {
14300       gcc_assert (GET_CODE (varloc) == VAR_LOCATION);
14301       /* Single part.  */
14302       if (GET_CODE (PAT_VAR_LOCATION_LOC (varloc)) != PARALLEL)
14303         {
14304           varloc = PAT_VAR_LOCATION_LOC (varloc);
14305           if (GET_CODE (varloc) == EXPR_LIST)
14306             varloc = XEXP (varloc, 0);
14307           mode = GET_MODE (varloc);
14308           if (MEM_P (varloc))
14309             {
14310               rtx addr = XEXP (varloc, 0);
14311               descr = mem_loc_descriptor (addr, mode, initialized);
14312               if (descr)
14313                 have_address = 1;
14314               else
14315                 {
14316                   rtx x = avoid_constant_pool_reference (varloc);
14317                   if (x != varloc)
14318                     descr = mem_loc_descriptor (x, mode, initialized);
14319                 }
14320             }
14321           else
14322             descr = mem_loc_descriptor (varloc, mode, initialized);
14323         }
14324       else
14325         return 0;
14326     }
14327   else
14328     {
14329       if (GET_CODE (varloc) == VAR_LOCATION)
14330         mode = DECL_MODE (PAT_VAR_LOCATION_DECL (varloc));
14331       else
14332         mode = DECL_MODE (loc);
14333       descr = loc_descriptor (varloc, mode, initialized);
14334       have_address = 1;
14335     }
14336
14337   if (!descr)
14338     return 0;
14339
14340   if (want_address == 2 && !have_address
14341       && (dwarf_version >= 4 || !dwarf_strict))
14342     {
14343       if (int_size_in_bytes (TREE_TYPE (loc)) > DWARF2_ADDR_SIZE)
14344         {
14345           expansion_failed (loc, NULL_RTX,
14346                             "DWARF address size mismatch");
14347           return 0;
14348         }
14349       add_loc_descr (&descr, new_loc_descr (DW_OP_stack_value, 0, 0));
14350       have_address = 1;
14351     }
14352   /* Show if we can't fill the request for an address.  */
14353   if (want_address && !have_address)
14354     {
14355       expansion_failed (loc, NULL_RTX,
14356                         "Want address and only have value");
14357       return 0;
14358     }
14359
14360   /* If we've got an address and don't want one, dereference.  */
14361   if (!want_address && have_address)
14362     {
14363       HOST_WIDE_INT size = int_size_in_bytes (TREE_TYPE (loc));
14364       enum dwarf_location_atom op;
14365
14366       if (size > DWARF2_ADDR_SIZE || size == -1)
14367         {
14368           expansion_failed (loc, NULL_RTX,
14369                             "DWARF address size mismatch");
14370           return 0;
14371         }
14372       else if (size == DWARF2_ADDR_SIZE)
14373         op = DW_OP_deref;
14374       else
14375         op = DW_OP_deref_size;
14376
14377       add_loc_descr (&descr, new_loc_descr (op, size, 0));
14378     }
14379
14380   return descr;
14381 }
14382
14383 /* Create a DW_OP_piece or DW_OP_bit_piece for bitsize, or return NULL
14384    if it is not possible.  */
14385
14386 static dw_loc_descr_ref
14387 new_loc_descr_op_bit_piece (HOST_WIDE_INT bitsize, HOST_WIDE_INT offset)
14388 {
14389   if ((bitsize % BITS_PER_UNIT) == 0 && offset == 0)
14390     return new_loc_descr (DW_OP_piece, bitsize / BITS_PER_UNIT, 0);
14391   else if (dwarf_version >= 3 || !dwarf_strict)
14392     return new_loc_descr (DW_OP_bit_piece, bitsize, offset);
14393   else
14394     return NULL;
14395 }
14396
14397 /* Helper function for dw_loc_list.  Compute proper Dwarf location descriptor
14398    for VAR_LOC_NOTE for variable DECL that has been optimized by SRA.  */
14399
14400 static dw_loc_descr_ref
14401 dw_sra_loc_expr (tree decl, rtx loc)
14402 {
14403   rtx p;
14404   unsigned int padsize = 0;
14405   dw_loc_descr_ref descr, *descr_tail;
14406   unsigned HOST_WIDE_INT decl_size;
14407   rtx varloc;
14408   enum var_init_status initialized;
14409
14410   if (DECL_SIZE (decl) == NULL
14411       || !host_integerp (DECL_SIZE (decl), 1))
14412     return NULL;
14413
14414   decl_size = tree_low_cst (DECL_SIZE (decl), 1);
14415   descr = NULL;
14416   descr_tail = &descr;
14417
14418   for (p = loc; p; p = XEXP (p, 1))
14419     {
14420       unsigned int bitsize = decl_piece_bitsize (p);
14421       rtx loc_note = *decl_piece_varloc_ptr (p);
14422       dw_loc_descr_ref cur_descr;
14423       dw_loc_descr_ref *tail, last = NULL;
14424       unsigned int opsize = 0;
14425
14426       if (loc_note == NULL_RTX
14427           || NOTE_VAR_LOCATION_LOC (loc_note) == NULL_RTX)
14428         {
14429           padsize += bitsize;
14430           continue;
14431         }
14432       initialized = NOTE_VAR_LOCATION_STATUS (loc_note);
14433       varloc = NOTE_VAR_LOCATION (loc_note);
14434       cur_descr = dw_loc_list_1 (decl, varloc, 2, initialized);
14435       if (cur_descr == NULL)
14436         {
14437           padsize += bitsize;
14438           continue;
14439         }
14440
14441       /* Check that cur_descr either doesn't use
14442          DW_OP_*piece operations, or their sum is equal
14443          to bitsize.  Otherwise we can't embed it.  */
14444       for (tail = &cur_descr; *tail != NULL;
14445            tail = &(*tail)->dw_loc_next)
14446         if ((*tail)->dw_loc_opc == DW_OP_piece)
14447           {
14448             opsize += (*tail)->dw_loc_oprnd1.v.val_unsigned
14449                       * BITS_PER_UNIT;
14450             last = *tail;
14451           }
14452         else if ((*tail)->dw_loc_opc == DW_OP_bit_piece)
14453           {
14454             opsize += (*tail)->dw_loc_oprnd1.v.val_unsigned;
14455             last = *tail;
14456           }
14457
14458       if (last != NULL && opsize != bitsize)
14459         {
14460           padsize += bitsize;
14461           continue;
14462         }
14463
14464       /* If there is a hole, add DW_OP_*piece after empty DWARF
14465          expression, which means that those bits are optimized out.  */
14466       if (padsize)
14467         {
14468           if (padsize > decl_size)
14469             return NULL;
14470           decl_size -= padsize;
14471           *descr_tail = new_loc_descr_op_bit_piece (padsize, 0);
14472           if (*descr_tail == NULL)
14473             return NULL;
14474           descr_tail = &(*descr_tail)->dw_loc_next;
14475           padsize = 0;
14476         }
14477       *descr_tail = cur_descr;
14478       descr_tail = tail;
14479       if (bitsize > decl_size)
14480         return NULL;
14481       decl_size -= bitsize;
14482       if (last == NULL)
14483         {
14484           HOST_WIDE_INT offset = 0;
14485           if (GET_CODE (varloc) == VAR_LOCATION
14486               && GET_CODE (PAT_VAR_LOCATION_LOC (varloc)) != PARALLEL)
14487             {
14488               varloc = PAT_VAR_LOCATION_LOC (varloc);
14489               if (GET_CODE (varloc) == EXPR_LIST)
14490                 varloc = XEXP (varloc, 0);
14491             }
14492           do 
14493             {
14494               if (GET_CODE (varloc) == CONST
14495                   || GET_CODE (varloc) == SIGN_EXTEND
14496                   || GET_CODE (varloc) == ZERO_EXTEND)
14497                 varloc = XEXP (varloc, 0);
14498               else if (GET_CODE (varloc) == SUBREG)
14499                 varloc = SUBREG_REG (varloc);
14500               else
14501                 break;
14502             }
14503           while (1);
14504           /* DW_OP_bit_size offset should be zero for register
14505              or implicit location descriptions and empty location
14506              descriptions, but for memory addresses needs big endian
14507              adjustment.  */
14508           if (MEM_P (varloc))
14509             {
14510               unsigned HOST_WIDE_INT memsize
14511                 = INTVAL (MEM_SIZE (varloc)) * BITS_PER_UNIT;
14512               if (memsize != bitsize)
14513                 {
14514                   if (BYTES_BIG_ENDIAN != WORDS_BIG_ENDIAN
14515                       && (memsize > BITS_PER_WORD || bitsize > BITS_PER_WORD))
14516                     return NULL;
14517                   if (memsize < bitsize)
14518                     return NULL;
14519                   if (BITS_BIG_ENDIAN)
14520                     offset = memsize - bitsize;
14521                 }
14522             }
14523
14524           *descr_tail = new_loc_descr_op_bit_piece (bitsize, offset);
14525           if (*descr_tail == NULL)
14526             return NULL;
14527           descr_tail = &(*descr_tail)->dw_loc_next;
14528         }
14529     }
14530
14531   /* If there were any non-empty expressions, add padding till the end of
14532      the decl.  */
14533   if (descr != NULL && decl_size != 0)
14534     {
14535       *descr_tail = new_loc_descr_op_bit_piece (decl_size, 0);
14536       if (*descr_tail == NULL)
14537         return NULL;
14538     }
14539   return descr;
14540 }
14541
14542 /* Return the dwarf representation of the location list LOC_LIST of
14543    DECL.  WANT_ADDRESS has the same meaning as in loc_list_from_tree
14544    function.  */
14545
14546 static dw_loc_list_ref
14547 dw_loc_list (var_loc_list *loc_list, tree decl, int want_address)
14548 {
14549   const char *endname, *secname;
14550   rtx varloc;
14551   enum var_init_status initialized;
14552   struct var_loc_node *node;
14553   dw_loc_descr_ref descr;
14554   char label_id[MAX_ARTIFICIAL_LABEL_BYTES];
14555   dw_loc_list_ref list = NULL;
14556   dw_loc_list_ref *listp = &list;
14557
14558   /* Now that we know what section we are using for a base,
14559      actually construct the list of locations.
14560      The first location information is what is passed to the
14561      function that creates the location list, and the remaining
14562      locations just get added on to that list.
14563      Note that we only know the start address for a location
14564      (IE location changes), so to build the range, we use
14565      the range [current location start, next location start].
14566      This means we have to special case the last node, and generate
14567      a range of [last location start, end of function label].  */
14568
14569   secname = secname_for_decl (decl);
14570
14571   for (node = loc_list->first; node; node = node->next)
14572     if (GET_CODE (node->loc) == EXPR_LIST
14573         || NOTE_VAR_LOCATION_LOC (node->loc) != NULL_RTX)
14574       {
14575         if (GET_CODE (node->loc) == EXPR_LIST)
14576           {
14577             /* This requires DW_OP_{,bit_}piece, which is not usable
14578                inside DWARF expressions.  */
14579             if (want_address != 2)
14580               continue;
14581             descr = dw_sra_loc_expr (decl, node->loc);
14582             if (descr == NULL)
14583               continue;
14584           }
14585         else
14586           {
14587             initialized = NOTE_VAR_LOCATION_STATUS (node->loc);
14588             varloc = NOTE_VAR_LOCATION (node->loc);
14589             descr = dw_loc_list_1 (decl, varloc, want_address, initialized);
14590           }
14591         if (descr)
14592           {
14593             /* The variable has a location between NODE->LABEL and
14594                NODE->NEXT->LABEL.  */
14595             if (node->next)
14596               endname = node->next->label;
14597             /* If the variable has a location at the last label
14598                it keeps its location until the end of function.  */
14599             else if (!current_function_decl)
14600               endname = text_end_label;
14601             else
14602               {
14603                 ASM_GENERATE_INTERNAL_LABEL (label_id, FUNC_END_LABEL,
14604                                              current_function_funcdef_no);
14605                 endname = ggc_strdup (label_id);
14606               }
14607
14608             *listp = new_loc_list (descr, node->label, endname, secname);
14609             listp = &(*listp)->dw_loc_next;
14610           }
14611       }
14612
14613   /* Try to avoid the overhead of a location list emitting a location
14614      expression instead, but only if we didn't have more than one
14615      location entry in the first place.  If some entries were not
14616      representable, we don't want to pretend a single entry that was
14617      applies to the entire scope in which the variable is
14618      available.  */
14619   if (list && loc_list->first->next)
14620     gen_llsym (list);
14621
14622   return list;
14623 }
14624
14625 /* Return if the loc_list has only single element and thus can be represented
14626    as location description.   */
14627
14628 static bool
14629 single_element_loc_list_p (dw_loc_list_ref list)
14630 {
14631   gcc_assert (!list->dw_loc_next || list->ll_symbol);
14632   return !list->ll_symbol;
14633 }
14634
14635 /* To each location in list LIST add loc descr REF.  */
14636
14637 static void
14638 add_loc_descr_to_each (dw_loc_list_ref list, dw_loc_descr_ref ref)
14639 {
14640   dw_loc_descr_ref copy;
14641   add_loc_descr (&list->expr, ref);
14642   list = list->dw_loc_next;
14643   while (list)
14644     {
14645       copy = GGC_CNEW (dw_loc_descr_node);
14646       memcpy (copy, ref, sizeof (dw_loc_descr_node));
14647       add_loc_descr (&list->expr, copy);
14648       while (copy->dw_loc_next)
14649         {
14650           dw_loc_descr_ref new_copy = GGC_CNEW (dw_loc_descr_node);
14651           memcpy (new_copy, copy->dw_loc_next, sizeof (dw_loc_descr_node));
14652           copy->dw_loc_next = new_copy;
14653           copy = new_copy;
14654         }
14655       list = list->dw_loc_next;
14656     }
14657 }
14658
14659 /* Given two lists RET and LIST
14660    produce location list that is result of adding expression in LIST
14661    to expression in RET on each possition in program.
14662    Might be destructive on both RET and LIST.
14663
14664    TODO: We handle only simple cases of RET or LIST having at most one
14665    element. General case would inolve sorting the lists in program order
14666    and merging them that will need some additional work.
14667    Adding that will improve quality of debug info especially for SRA-ed
14668    structures.  */
14669
14670 static void
14671 add_loc_list (dw_loc_list_ref *ret, dw_loc_list_ref list)
14672 {
14673   if (!list)
14674     return;
14675   if (!*ret)
14676     {
14677       *ret = list;
14678       return;
14679     }
14680   if (!list->dw_loc_next)
14681     {
14682       add_loc_descr_to_each (*ret, list->expr);
14683       return;
14684     }
14685   if (!(*ret)->dw_loc_next)
14686     {
14687       add_loc_descr_to_each (list, (*ret)->expr);
14688       *ret = list;
14689       return;
14690     }
14691   expansion_failed (NULL_TREE, NULL_RTX,
14692                     "Don't know how to merge two non-trivial"
14693                     " location lists.\n");
14694   *ret = NULL;
14695   return;
14696 }
14697
14698 /* LOC is constant expression.  Try a luck, look it up in constant
14699    pool and return its loc_descr of its address.  */
14700
14701 static dw_loc_descr_ref
14702 cst_pool_loc_descr (tree loc)
14703 {
14704   /* Get an RTL for this, if something has been emitted.  */
14705   rtx rtl = lookup_constant_def (loc);
14706   enum machine_mode mode;
14707
14708   if (!rtl || !MEM_P (rtl))
14709     {
14710       gcc_assert (!rtl);
14711       return 0;
14712     }
14713   gcc_assert (GET_CODE (XEXP (rtl, 0)) == SYMBOL_REF);
14714
14715   /* TODO: We might get more coverage if we was actually delaying expansion
14716      of all expressions till end of compilation when constant pools are fully
14717      populated.  */
14718   if (!TREE_ASM_WRITTEN (SYMBOL_REF_DECL (XEXP (rtl, 0))))
14719     {
14720       expansion_failed (loc, NULL_RTX,
14721                         "CST value in contant pool but not marked.");
14722       return 0;
14723     }
14724   mode = GET_MODE (rtl);
14725   rtl = XEXP (rtl, 0);
14726   return mem_loc_descriptor (rtl, mode, VAR_INIT_STATUS_INITIALIZED);
14727 }
14728
14729 /* Return dw_loc_list representing address of addr_expr LOC
14730    by looking for innder INDIRECT_REF expression and turing it
14731    into simple arithmetics.  */
14732
14733 static dw_loc_list_ref
14734 loc_list_for_address_of_addr_expr_of_indirect_ref (tree loc, bool toplev)
14735 {
14736   tree obj, offset;
14737   HOST_WIDE_INT bitsize, bitpos, bytepos;
14738   enum machine_mode mode;
14739   int volatilep;
14740   int unsignedp = TYPE_UNSIGNED (TREE_TYPE (loc));
14741   dw_loc_list_ref list_ret = NULL, list_ret1 = NULL;
14742
14743   obj = get_inner_reference (TREE_OPERAND (loc, 0),
14744                              &bitsize, &bitpos, &offset, &mode,
14745                              &unsignedp, &volatilep, false);
14746   STRIP_NOPS (obj);
14747   if (bitpos % BITS_PER_UNIT)
14748     {
14749       expansion_failed (loc, NULL_RTX, "bitfield access");
14750       return 0;
14751     }
14752   if (!INDIRECT_REF_P (obj))
14753     {
14754       expansion_failed (obj,
14755                         NULL_RTX, "no indirect ref in inner refrence");
14756       return 0;
14757     }
14758   if (!offset && !bitpos)
14759     list_ret = loc_list_from_tree (TREE_OPERAND (obj, 0), toplev ? 2 : 1);
14760   else if (toplev
14761            && int_size_in_bytes (TREE_TYPE (loc)) <= DWARF2_ADDR_SIZE
14762            && (dwarf_version >= 4 || !dwarf_strict))
14763     {
14764       list_ret = loc_list_from_tree (TREE_OPERAND (obj, 0), 0);
14765       if (!list_ret)
14766         return 0;
14767       if (offset)
14768         {
14769           /* Variable offset.  */
14770           list_ret1 = loc_list_from_tree (offset, 0);
14771           if (list_ret1 == 0)
14772             return 0;
14773           add_loc_list (&list_ret, list_ret1);
14774           if (!list_ret)
14775             return 0;
14776           add_loc_descr_to_each (list_ret,
14777                                  new_loc_descr (DW_OP_plus, 0, 0));
14778         }
14779       bytepos = bitpos / BITS_PER_UNIT;
14780       if (bytepos > 0)
14781         add_loc_descr_to_each (list_ret,
14782                                new_loc_descr (DW_OP_plus_uconst,
14783                                               bytepos, 0));
14784       else if (bytepos < 0)
14785         loc_list_plus_const (list_ret, bytepos);
14786       add_loc_descr_to_each (list_ret,
14787                              new_loc_descr (DW_OP_stack_value, 0, 0));
14788     }
14789   return list_ret;
14790 }
14791
14792
14793 /* Generate Dwarf location list representing LOC.
14794    If WANT_ADDRESS is false, expression computing LOC will be computed
14795    If WANT_ADDRESS is 1, expression computing address of LOC will be returned
14796    if WANT_ADDRESS is 2, expression computing address useable in location
14797      will be returned (i.e. DW_OP_reg can be used
14798      to refer to register values).  */
14799
14800 static dw_loc_list_ref
14801 loc_list_from_tree (tree loc, int want_address)
14802 {
14803   dw_loc_descr_ref ret = NULL, ret1 = NULL;
14804   dw_loc_list_ref list_ret = NULL, list_ret1 = NULL;
14805   int have_address = 0;
14806   enum dwarf_location_atom op;
14807
14808   /* ??? Most of the time we do not take proper care for sign/zero
14809      extending the values properly.  Hopefully this won't be a real
14810      problem...  */
14811
14812   switch (TREE_CODE (loc))
14813     {
14814     case ERROR_MARK:
14815       expansion_failed (loc, NULL_RTX, "ERROR_MARK");
14816       return 0;
14817
14818     case PLACEHOLDER_EXPR:
14819       /* This case involves extracting fields from an object to determine the
14820          position of other fields.  We don't try to encode this here.  The
14821          only user of this is Ada, which encodes the needed information using
14822          the names of types.  */
14823       expansion_failed (loc, NULL_RTX, "PLACEHOLDER_EXPR");
14824       return 0;
14825
14826     case CALL_EXPR:
14827       expansion_failed (loc, NULL_RTX, "CALL_EXPR");
14828       /* There are no opcodes for these operations.  */
14829       return 0;
14830
14831     case PREINCREMENT_EXPR:
14832     case PREDECREMENT_EXPR:
14833     case POSTINCREMENT_EXPR:
14834     case POSTDECREMENT_EXPR:
14835       expansion_failed (loc, NULL_RTX, "PRE/POST INDCREMENT/DECREMENT");
14836       /* There are no opcodes for these operations.  */
14837       return 0;
14838
14839     case ADDR_EXPR:
14840       /* If we already want an address, see if there is INDIRECT_REF inside
14841          e.g. for &this->field.  */
14842       if (want_address)
14843         {
14844           list_ret = loc_list_for_address_of_addr_expr_of_indirect_ref
14845                        (loc, want_address == 2);
14846           if (list_ret)
14847             have_address = 1;
14848           else if (decl_address_ip_invariant_p (TREE_OPERAND (loc, 0))
14849                    && (ret = cst_pool_loc_descr (loc)))
14850             have_address = 1;
14851         }
14852         /* Otherwise, process the argument and look for the address.  */
14853       if (!list_ret && !ret)
14854         list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 1);
14855       else
14856         {
14857           if (want_address)
14858             expansion_failed (loc, NULL_RTX, "need address of ADDR_EXPR");
14859           return NULL;
14860         }
14861       break;
14862
14863     case VAR_DECL:
14864       if (DECL_THREAD_LOCAL_P (loc))
14865         {
14866           rtx rtl;
14867           enum dwarf_location_atom first_op;
14868           enum dwarf_location_atom second_op;
14869           bool dtprel = false;
14870
14871           if (targetm.have_tls)
14872             {
14873               /* If this is not defined, we have no way to emit the
14874                  data.  */
14875               if (!targetm.asm_out.output_dwarf_dtprel)
14876                 return 0;
14877
14878                /* The way DW_OP_GNU_push_tls_address is specified, we
14879                   can only look up addresses of objects in the current
14880                   module.  */
14881               if (DECL_EXTERNAL (loc) && !targetm.binds_local_p (loc))
14882                 return 0;
14883               first_op = DW_OP_addr;
14884               dtprel = true;
14885               second_op = DW_OP_GNU_push_tls_address;
14886             }
14887           else
14888             {
14889               if (!targetm.emutls.debug_form_tls_address
14890                   || !(dwarf_version >= 3 || !dwarf_strict))
14891                 return 0;
14892               loc = emutls_decl (loc);
14893               first_op = DW_OP_addr;
14894               second_op = DW_OP_form_tls_address;
14895             }
14896
14897           rtl = rtl_for_decl_location (loc);
14898           if (rtl == NULL_RTX)
14899             return 0;
14900
14901           if (!MEM_P (rtl))
14902             return 0;
14903           rtl = XEXP (rtl, 0);
14904           if (! CONSTANT_P (rtl))
14905             return 0;
14906
14907           ret = new_loc_descr (first_op, 0, 0);
14908           ret->dw_loc_oprnd1.val_class = dw_val_class_addr;
14909           ret->dw_loc_oprnd1.v.val_addr = rtl;
14910           ret->dtprel = dtprel;
14911
14912           ret1 = new_loc_descr (second_op, 0, 0);
14913           add_loc_descr (&ret, ret1);
14914
14915           have_address = 1;
14916           break;
14917         }
14918       /* FALLTHRU */
14919
14920     case PARM_DECL:
14921       if (DECL_HAS_VALUE_EXPR_P (loc))
14922         return loc_list_from_tree (DECL_VALUE_EXPR (loc),
14923                                    want_address);
14924       /* FALLTHRU */
14925
14926     case RESULT_DECL:
14927     case FUNCTION_DECL:
14928       {
14929         rtx rtl;
14930         var_loc_list *loc_list = lookup_decl_loc (loc);
14931
14932         if (loc_list && loc_list->first)
14933           {
14934             list_ret = dw_loc_list (loc_list, loc, want_address);
14935             have_address = want_address != 0;
14936             break;
14937           }
14938         rtl = rtl_for_decl_location (loc);
14939         if (rtl == NULL_RTX)
14940           {
14941             expansion_failed (loc, NULL_RTX, "DECL has no RTL");
14942             return 0;
14943           }
14944         else if (CONST_INT_P (rtl))
14945           {
14946             HOST_WIDE_INT val = INTVAL (rtl);
14947             if (TYPE_UNSIGNED (TREE_TYPE (loc)))
14948               val &= GET_MODE_MASK (DECL_MODE (loc));
14949             ret = int_loc_descriptor (val);
14950           }
14951         else if (GET_CODE (rtl) == CONST_STRING)
14952           {
14953             expansion_failed (loc, NULL_RTX, "CONST_STRING");
14954             return 0;
14955           }
14956         else if (CONSTANT_P (rtl) && const_ok_for_output (rtl))
14957           {
14958             ret = new_loc_descr (DW_OP_addr, 0, 0);
14959             ret->dw_loc_oprnd1.val_class = dw_val_class_addr;
14960             ret->dw_loc_oprnd1.v.val_addr = rtl;
14961           }
14962         else
14963           {
14964             enum machine_mode mode;
14965
14966             /* Certain constructs can only be represented at top-level.  */
14967             if (want_address == 2)
14968               {
14969                 ret = loc_descriptor (rtl, VOIDmode,
14970                                       VAR_INIT_STATUS_INITIALIZED);
14971                 have_address = 1;
14972               }
14973             else
14974               {
14975                 mode = GET_MODE (rtl);
14976                 if (MEM_P (rtl))
14977                   {
14978                     rtl = XEXP (rtl, 0);
14979                     have_address = 1;
14980                   }
14981                 ret = mem_loc_descriptor (rtl, mode, VAR_INIT_STATUS_INITIALIZED);
14982               }
14983             if (!ret)
14984               expansion_failed (loc, rtl,
14985                                 "failed to produce loc descriptor for rtl");
14986           }
14987       }
14988       break;
14989
14990     case INDIRECT_REF:
14991     case ALIGN_INDIRECT_REF:
14992     case MISALIGNED_INDIRECT_REF:
14993       list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 0);
14994       have_address = 1;
14995       break;
14996
14997     case COMPOUND_EXPR:
14998       return loc_list_from_tree (TREE_OPERAND (loc, 1), want_address);
14999
15000     CASE_CONVERT:
15001     case VIEW_CONVERT_EXPR:
15002     case SAVE_EXPR:
15003     case MODIFY_EXPR:
15004       return loc_list_from_tree (TREE_OPERAND (loc, 0), want_address);
15005
15006     case COMPONENT_REF:
15007     case BIT_FIELD_REF:
15008     case ARRAY_REF:
15009     case ARRAY_RANGE_REF:
15010     case REALPART_EXPR:
15011     case IMAGPART_EXPR:
15012       {
15013         tree obj, offset;
15014         HOST_WIDE_INT bitsize, bitpos, bytepos;
15015         enum machine_mode mode;
15016         int volatilep;
15017         int unsignedp = TYPE_UNSIGNED (TREE_TYPE (loc));
15018
15019         obj = get_inner_reference (loc, &bitsize, &bitpos, &offset, &mode,
15020                                    &unsignedp, &volatilep, false);
15021
15022         gcc_assert (obj != loc);
15023
15024         list_ret = loc_list_from_tree (obj,
15025                                        want_address == 2
15026                                        && !bitpos && !offset ? 2 : 1);
15027         /* TODO: We can extract value of the small expression via shifting even
15028            for nonzero bitpos.  */
15029         if (list_ret == 0)
15030           return 0;
15031         if (bitpos % BITS_PER_UNIT != 0 || bitsize % BITS_PER_UNIT != 0)
15032           {
15033             expansion_failed (loc, NULL_RTX,
15034                               "bitfield access");
15035             return 0;
15036           }
15037
15038         if (offset != NULL_TREE)
15039           {
15040             /* Variable offset.  */
15041             list_ret1 = loc_list_from_tree (offset, 0);
15042             if (list_ret1 == 0)
15043               return 0;
15044             add_loc_list (&list_ret, list_ret1);
15045             if (!list_ret)
15046               return 0;
15047             add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_plus, 0, 0));
15048           }
15049
15050         bytepos = bitpos / BITS_PER_UNIT;
15051         if (bytepos > 0)
15052           add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_plus_uconst, bytepos, 0));
15053         else if (bytepos < 0)
15054           loc_list_plus_const (list_ret, bytepos);
15055
15056         have_address = 1;
15057         break;
15058       }
15059
15060     case INTEGER_CST:
15061       if ((want_address || !host_integerp (loc, 0))
15062           && (ret = cst_pool_loc_descr (loc)))
15063         have_address = 1;
15064       else if (want_address == 2
15065                && host_integerp (loc, 0)
15066                && (ret = address_of_int_loc_descriptor
15067                            (int_size_in_bytes (TREE_TYPE (loc)),
15068                             tree_low_cst (loc, 0))))
15069         have_address = 1;
15070       else if (host_integerp (loc, 0))
15071         ret = int_loc_descriptor (tree_low_cst (loc, 0));
15072       else
15073         {
15074           expansion_failed (loc, NULL_RTX,
15075                             "Integer operand is not host integer");
15076           return 0;
15077         }
15078       break;
15079
15080     case CONSTRUCTOR:
15081     case REAL_CST:
15082     case STRING_CST:
15083     case COMPLEX_CST:
15084       if ((ret = cst_pool_loc_descr (loc)))
15085         have_address = 1;
15086       else
15087       /* We can construct small constants here using int_loc_descriptor.  */
15088         expansion_failed (loc, NULL_RTX,
15089                           "constructor or constant not in constant pool");
15090       break;
15091
15092     case TRUTH_AND_EXPR:
15093     case TRUTH_ANDIF_EXPR:
15094     case BIT_AND_EXPR:
15095       op = DW_OP_and;
15096       goto do_binop;
15097
15098     case TRUTH_XOR_EXPR:
15099     case BIT_XOR_EXPR:
15100       op = DW_OP_xor;
15101       goto do_binop;
15102
15103     case TRUTH_OR_EXPR:
15104     case TRUTH_ORIF_EXPR:
15105     case BIT_IOR_EXPR:
15106       op = DW_OP_or;
15107       goto do_binop;
15108
15109     case FLOOR_DIV_EXPR:
15110     case CEIL_DIV_EXPR:
15111     case ROUND_DIV_EXPR:
15112     case TRUNC_DIV_EXPR:
15113       if (TYPE_UNSIGNED (TREE_TYPE (loc)))
15114         return 0;
15115       op = DW_OP_div;
15116       goto do_binop;
15117
15118     case MINUS_EXPR:
15119       op = DW_OP_minus;
15120       goto do_binop;
15121
15122     case FLOOR_MOD_EXPR:
15123     case CEIL_MOD_EXPR:
15124     case ROUND_MOD_EXPR:
15125     case TRUNC_MOD_EXPR:
15126       if (TYPE_UNSIGNED (TREE_TYPE (loc)))
15127         {
15128           op = DW_OP_mod;
15129           goto do_binop;
15130         }
15131       list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 0);
15132       list_ret1 = loc_list_from_tree (TREE_OPERAND (loc, 1), 0);
15133       if (list_ret == 0 || list_ret1 == 0)
15134         return 0;
15135
15136       add_loc_list (&list_ret, list_ret1);
15137       if (list_ret == 0)
15138         return 0;
15139       add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_over, 0, 0));
15140       add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_over, 0, 0));
15141       add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_div, 0, 0));
15142       add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_mul, 0, 0));
15143       add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_minus, 0, 0));
15144       break;
15145
15146     case MULT_EXPR:
15147       op = DW_OP_mul;
15148       goto do_binop;
15149
15150     case LSHIFT_EXPR:
15151       op = DW_OP_shl;
15152       goto do_binop;
15153
15154     case RSHIFT_EXPR:
15155       op = (TYPE_UNSIGNED (TREE_TYPE (loc)) ? DW_OP_shr : DW_OP_shra);
15156       goto do_binop;
15157
15158     case POINTER_PLUS_EXPR:
15159     case PLUS_EXPR:
15160       if (host_integerp (TREE_OPERAND (loc, 1), 0))
15161         {
15162           list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 0);
15163           if (list_ret == 0)
15164             return 0;
15165
15166           loc_list_plus_const (list_ret, tree_low_cst (TREE_OPERAND (loc, 1), 0));
15167           break;
15168         }
15169
15170       op = DW_OP_plus;
15171       goto do_binop;
15172
15173     case LE_EXPR:
15174       if (TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (loc, 0))))
15175         return 0;
15176
15177       op = DW_OP_le;
15178       goto do_binop;
15179
15180     case GE_EXPR:
15181       if (TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (loc, 0))))
15182         return 0;
15183
15184       op = DW_OP_ge;
15185       goto do_binop;
15186
15187     case LT_EXPR:
15188       if (TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (loc, 0))))
15189         return 0;
15190
15191       op = DW_OP_lt;
15192       goto do_binop;
15193
15194     case GT_EXPR:
15195       if (TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (loc, 0))))
15196         return 0;
15197
15198       op = DW_OP_gt;
15199       goto do_binop;
15200
15201     case EQ_EXPR:
15202       op = DW_OP_eq;
15203       goto do_binop;
15204
15205     case NE_EXPR:
15206       op = DW_OP_ne;
15207       goto do_binop;
15208
15209     do_binop:
15210       list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 0);
15211       list_ret1 = loc_list_from_tree (TREE_OPERAND (loc, 1), 0);
15212       if (list_ret == 0 || list_ret1 == 0)
15213         return 0;
15214
15215       add_loc_list (&list_ret, list_ret1);
15216       if (list_ret == 0)
15217         return 0;
15218       add_loc_descr_to_each (list_ret, new_loc_descr (op, 0, 0));
15219       break;
15220
15221     case TRUTH_NOT_EXPR:
15222     case BIT_NOT_EXPR:
15223       op = DW_OP_not;
15224       goto do_unop;
15225
15226     case ABS_EXPR:
15227       op = DW_OP_abs;
15228       goto do_unop;
15229
15230     case NEGATE_EXPR:
15231       op = DW_OP_neg;
15232       goto do_unop;
15233
15234     do_unop:
15235       list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 0);
15236       if (list_ret == 0)
15237         return 0;
15238
15239       add_loc_descr_to_each (list_ret, new_loc_descr (op, 0, 0));
15240       break;
15241
15242     case MIN_EXPR:
15243     case MAX_EXPR:
15244       {
15245         const enum tree_code code =
15246           TREE_CODE (loc) == MIN_EXPR ? GT_EXPR : LT_EXPR;
15247
15248         loc = build3 (COND_EXPR, TREE_TYPE (loc),
15249                       build2 (code, integer_type_node,
15250                               TREE_OPERAND (loc, 0), TREE_OPERAND (loc, 1)),
15251                       TREE_OPERAND (loc, 1), TREE_OPERAND (loc, 0));
15252       }
15253
15254       /* ... fall through ...  */
15255
15256     case COND_EXPR:
15257       {
15258         dw_loc_descr_ref lhs
15259           = loc_descriptor_from_tree (TREE_OPERAND (loc, 1), 0);
15260         dw_loc_list_ref rhs
15261           = loc_list_from_tree (TREE_OPERAND (loc, 2), 0);
15262         dw_loc_descr_ref bra_node, jump_node, tmp;
15263
15264         list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 0);
15265         if (list_ret == 0 || lhs == 0 || rhs == 0)
15266           return 0;
15267
15268         bra_node = new_loc_descr (DW_OP_bra, 0, 0);
15269         add_loc_descr_to_each (list_ret, bra_node);
15270
15271         add_loc_list (&list_ret, rhs);
15272         jump_node = new_loc_descr (DW_OP_skip, 0, 0);
15273         add_loc_descr_to_each (list_ret, jump_node);
15274
15275         add_loc_descr_to_each (list_ret, lhs);
15276         bra_node->dw_loc_oprnd1.val_class = dw_val_class_loc;
15277         bra_node->dw_loc_oprnd1.v.val_loc = lhs;
15278
15279         /* ??? Need a node to point the skip at.  Use a nop.  */
15280         tmp = new_loc_descr (DW_OP_nop, 0, 0);
15281         add_loc_descr_to_each (list_ret, tmp);
15282         jump_node->dw_loc_oprnd1.val_class = dw_val_class_loc;
15283         jump_node->dw_loc_oprnd1.v.val_loc = tmp;
15284       }
15285       break;
15286
15287     case FIX_TRUNC_EXPR:
15288       return 0;
15289
15290     default:
15291       /* Leave front-end specific codes as simply unknown.  This comes
15292          up, for instance, with the C STMT_EXPR.  */
15293       if ((unsigned int) TREE_CODE (loc)
15294           >= (unsigned int) LAST_AND_UNUSED_TREE_CODE)
15295         {
15296           expansion_failed (loc, NULL_RTX,
15297                             "language specific tree node");
15298           return 0;
15299         }
15300
15301 #ifdef ENABLE_CHECKING
15302       /* Otherwise this is a generic code; we should just lists all of
15303          these explicitly.  We forgot one.  */
15304       gcc_unreachable ();
15305 #else
15306       /* In a release build, we want to degrade gracefully: better to
15307          generate incomplete debugging information than to crash.  */
15308       return NULL;
15309 #endif
15310     }
15311
15312   if (!ret && !list_ret)
15313     return 0;
15314
15315   if (want_address == 2 && !have_address
15316       && (dwarf_version >= 4 || !dwarf_strict))
15317     {
15318       if (int_size_in_bytes (TREE_TYPE (loc)) > DWARF2_ADDR_SIZE)
15319         {
15320           expansion_failed (loc, NULL_RTX,
15321                             "DWARF address size mismatch");
15322           return 0;
15323         }
15324       if (ret)
15325         add_loc_descr (&ret, new_loc_descr (DW_OP_stack_value, 0, 0));
15326       else
15327         add_loc_descr_to_each (list_ret,
15328                                new_loc_descr (DW_OP_stack_value, 0, 0));
15329       have_address = 1;
15330     }
15331   /* Show if we can't fill the request for an address.  */
15332   if (want_address && !have_address)
15333     {
15334       expansion_failed (loc, NULL_RTX,
15335                         "Want address and only have value");
15336       return 0;
15337     }
15338
15339   gcc_assert (!ret || !list_ret);
15340
15341   /* If we've got an address and don't want one, dereference.  */
15342   if (!want_address && have_address)
15343     {
15344       HOST_WIDE_INT size = int_size_in_bytes (TREE_TYPE (loc));
15345
15346       if (size > DWARF2_ADDR_SIZE || size == -1)
15347         {
15348           expansion_failed (loc, NULL_RTX,
15349                             "DWARF address size mismatch");
15350           return 0;
15351         }
15352       else if (size == DWARF2_ADDR_SIZE)
15353         op = DW_OP_deref;
15354       else
15355         op = DW_OP_deref_size;
15356
15357       if (ret)
15358         add_loc_descr (&ret, new_loc_descr (op, size, 0));
15359       else
15360         add_loc_descr_to_each (list_ret, new_loc_descr (op, size, 0));
15361     }
15362   if (ret)
15363     list_ret = new_loc_list (ret, NULL, NULL, NULL);
15364
15365   return list_ret;
15366 }
15367
15368 /* Same as above but return only single location expression.  */
15369 static dw_loc_descr_ref
15370 loc_descriptor_from_tree (tree loc, int want_address)
15371 {
15372   dw_loc_list_ref ret = loc_list_from_tree (loc, want_address);
15373   if (!ret)
15374     return NULL;
15375   if (ret->dw_loc_next)
15376     {
15377       expansion_failed (loc, NULL_RTX,
15378                         "Location list where only loc descriptor needed");
15379       return NULL;
15380     }
15381   return ret->expr;
15382 }
15383
15384 /* Given a value, round it up to the lowest multiple of `boundary'
15385    which is not less than the value itself.  */
15386
15387 static inline HOST_WIDE_INT
15388 ceiling (HOST_WIDE_INT value, unsigned int boundary)
15389 {
15390   return (((value + boundary - 1) / boundary) * boundary);
15391 }
15392
15393 /* Given a pointer to what is assumed to be a FIELD_DECL node, return a
15394    pointer to the declared type for the relevant field variable, or return
15395    `integer_type_node' if the given node turns out to be an
15396    ERROR_MARK node.  */
15397
15398 static inline tree
15399 field_type (const_tree decl)
15400 {
15401   tree type;
15402
15403   if (TREE_CODE (decl) == ERROR_MARK)
15404     return integer_type_node;
15405
15406   type = DECL_BIT_FIELD_TYPE (decl);
15407   if (type == NULL_TREE)
15408     type = TREE_TYPE (decl);
15409
15410   return type;
15411 }
15412
15413 /* Given a pointer to a tree node, return the alignment in bits for
15414    it, or else return BITS_PER_WORD if the node actually turns out to
15415    be an ERROR_MARK node.  */
15416
15417 static inline unsigned
15418 simple_type_align_in_bits (const_tree type)
15419 {
15420   return (TREE_CODE (type) != ERROR_MARK) ? TYPE_ALIGN (type) : BITS_PER_WORD;
15421 }
15422
15423 static inline unsigned
15424 simple_decl_align_in_bits (const_tree decl)
15425 {
15426   return (TREE_CODE (decl) != ERROR_MARK) ? DECL_ALIGN (decl) : BITS_PER_WORD;
15427 }
15428
15429 /* Return the result of rounding T up to ALIGN.  */
15430
15431 static inline double_int
15432 round_up_to_align (double_int t, unsigned int align)
15433 {
15434   double_int alignd = uhwi_to_double_int (align);
15435   t = double_int_add (t, alignd);
15436   t = double_int_add (t, double_int_minus_one);
15437   t = double_int_div (t, alignd, true, TRUNC_DIV_EXPR);
15438   t = double_int_mul (t, alignd);
15439   return t;
15440 }
15441
15442 /* Given a pointer to a FIELD_DECL, compute and return the byte offset of the
15443    lowest addressed byte of the "containing object" for the given FIELD_DECL,
15444    or return 0 if we are unable to determine what that offset is, either
15445    because the argument turns out to be a pointer to an ERROR_MARK node, or
15446    because the offset is actually variable.  (We can't handle the latter case
15447    just yet).  */
15448
15449 static HOST_WIDE_INT
15450 field_byte_offset (const_tree decl)
15451 {
15452   double_int object_offset_in_bits;
15453   double_int object_offset_in_bytes;
15454   double_int bitpos_int;
15455
15456   if (TREE_CODE (decl) == ERROR_MARK)
15457     return 0;
15458
15459   gcc_assert (TREE_CODE (decl) == FIELD_DECL);
15460
15461   /* We cannot yet cope with fields whose positions are variable, so
15462      for now, when we see such things, we simply return 0.  Someday, we may
15463      be able to handle such cases, but it will be damn difficult.  */
15464   if (TREE_CODE (bit_position (decl)) != INTEGER_CST)
15465     return 0;
15466
15467   bitpos_int = tree_to_double_int (bit_position (decl));
15468
15469 #ifdef PCC_BITFIELD_TYPE_MATTERS
15470   if (PCC_BITFIELD_TYPE_MATTERS)
15471     {
15472       tree type;
15473       tree field_size_tree;
15474       double_int deepest_bitpos;
15475       double_int field_size_in_bits;
15476       unsigned int type_align_in_bits;
15477       unsigned int decl_align_in_bits;
15478       double_int type_size_in_bits;
15479
15480       type = field_type (decl);
15481       type_size_in_bits = double_int_type_size_in_bits (type);
15482       type_align_in_bits = simple_type_align_in_bits (type);
15483
15484       field_size_tree = DECL_SIZE (decl);
15485
15486       /* The size could be unspecified if there was an error, or for
15487          a flexible array member.  */
15488       if (!field_size_tree)
15489         field_size_tree = bitsize_zero_node;
15490
15491       /* If the size of the field is not constant, use the type size.  */
15492       if (TREE_CODE (field_size_tree) == INTEGER_CST)
15493         field_size_in_bits = tree_to_double_int (field_size_tree);
15494       else
15495         field_size_in_bits = type_size_in_bits;
15496
15497       decl_align_in_bits = simple_decl_align_in_bits (decl);
15498
15499       /* The GCC front-end doesn't make any attempt to keep track of the
15500          starting bit offset (relative to the start of the containing
15501          structure type) of the hypothetical "containing object" for a
15502          bit-field.  Thus, when computing the byte offset value for the
15503          start of the "containing object" of a bit-field, we must deduce
15504          this information on our own. This can be rather tricky to do in
15505          some cases.  For example, handling the following structure type
15506          definition when compiling for an i386/i486 target (which only
15507          aligns long long's to 32-bit boundaries) can be very tricky:
15508
15509          struct S { int field1; long long field2:31; };
15510
15511          Fortunately, there is a simple rule-of-thumb which can be used
15512          in such cases.  When compiling for an i386/i486, GCC will
15513          allocate 8 bytes for the structure shown above.  It decides to
15514          do this based upon one simple rule for bit-field allocation.
15515          GCC allocates each "containing object" for each bit-field at
15516          the first (i.e. lowest addressed) legitimate alignment boundary
15517          (based upon the required minimum alignment for the declared
15518          type of the field) which it can possibly use, subject to the
15519          condition that there is still enough available space remaining
15520          in the containing object (when allocated at the selected point)
15521          to fully accommodate all of the bits of the bit-field itself.
15522
15523          This simple rule makes it obvious why GCC allocates 8 bytes for
15524          each object of the structure type shown above.  When looking
15525          for a place to allocate the "containing object" for `field2',
15526          the compiler simply tries to allocate a 64-bit "containing
15527          object" at each successive 32-bit boundary (starting at zero)
15528          until it finds a place to allocate that 64- bit field such that
15529          at least 31 contiguous (and previously unallocated) bits remain
15530          within that selected 64 bit field.  (As it turns out, for the
15531          example above, the compiler finds it is OK to allocate the
15532          "containing object" 64-bit field at bit-offset zero within the
15533          structure type.)
15534
15535          Here we attempt to work backwards from the limited set of facts
15536          we're given, and we try to deduce from those facts, where GCC
15537          must have believed that the containing object started (within
15538          the structure type). The value we deduce is then used (by the
15539          callers of this routine) to generate DW_AT_location and
15540          DW_AT_bit_offset attributes for fields (both bit-fields and, in
15541          the case of DW_AT_location, regular fields as well).  */
15542
15543       /* Figure out the bit-distance from the start of the structure to
15544          the "deepest" bit of the bit-field.  */
15545       deepest_bitpos = double_int_add (bitpos_int, field_size_in_bits);
15546
15547       /* This is the tricky part.  Use some fancy footwork to deduce
15548          where the lowest addressed bit of the containing object must
15549          be.  */
15550       object_offset_in_bits
15551         = double_int_add (deepest_bitpos, double_int_neg (type_size_in_bits));
15552
15553       /* Round up to type_align by default.  This works best for
15554          bitfields.  */
15555       object_offset_in_bits
15556         = round_up_to_align (object_offset_in_bits, type_align_in_bits);
15557
15558       if (double_int_ucmp (object_offset_in_bits, bitpos_int) > 0)
15559         {
15560           object_offset_in_bits
15561             = double_int_add (deepest_bitpos,
15562                               double_int_neg (type_size_in_bits));
15563
15564           /* Round up to decl_align instead.  */
15565           object_offset_in_bits
15566             = round_up_to_align (object_offset_in_bits, decl_align_in_bits);
15567         }
15568     }
15569   else
15570 #endif
15571     object_offset_in_bits = bitpos_int;
15572
15573   object_offset_in_bytes
15574     = double_int_div (object_offset_in_bits,
15575                       uhwi_to_double_int (BITS_PER_UNIT), true,
15576                       TRUNC_DIV_EXPR);
15577   return double_int_to_shwi (object_offset_in_bytes);
15578 }
15579 \f
15580 /* The following routines define various Dwarf attributes and any data
15581    associated with them.  */
15582
15583 /* Add a location description attribute value to a DIE.
15584
15585    This emits location attributes suitable for whole variables and
15586    whole parameters.  Note that the location attributes for struct fields are
15587    generated by the routine `data_member_location_attribute' below.  */
15588
15589 static inline void
15590 add_AT_location_description (dw_die_ref die, enum dwarf_attribute attr_kind,
15591                              dw_loc_list_ref descr)
15592 {
15593   if (descr == 0)
15594     return;
15595   if (single_element_loc_list_p (descr))
15596     add_AT_loc (die, attr_kind, descr->expr);
15597   else
15598     add_AT_loc_list (die, attr_kind, descr);
15599 }
15600
15601 /* Attach the specialized form of location attribute used for data members of
15602    struct and union types.  In the special case of a FIELD_DECL node which
15603    represents a bit-field, the "offset" part of this special location
15604    descriptor must indicate the distance in bytes from the lowest-addressed
15605    byte of the containing struct or union type to the lowest-addressed byte of
15606    the "containing object" for the bit-field.  (See the `field_byte_offset'
15607    function above).
15608
15609    For any given bit-field, the "containing object" is a hypothetical object
15610    (of some integral or enum type) within which the given bit-field lives.  The
15611    type of this hypothetical "containing object" is always the same as the
15612    declared type of the individual bit-field itself (for GCC anyway... the
15613    DWARF spec doesn't actually mandate this).  Note that it is the size (in
15614    bytes) of the hypothetical "containing object" which will be given in the
15615    DW_AT_byte_size attribute for this bit-field.  (See the
15616    `byte_size_attribute' function below.)  It is also used when calculating the
15617    value of the DW_AT_bit_offset attribute.  (See the `bit_offset_attribute'
15618    function below.)  */
15619
15620 static void
15621 add_data_member_location_attribute (dw_die_ref die, tree decl)
15622 {
15623   HOST_WIDE_INT offset;
15624   dw_loc_descr_ref loc_descr = 0;
15625
15626   if (TREE_CODE (decl) == TREE_BINFO)
15627     {
15628       /* We're working on the TAG_inheritance for a base class.  */
15629       if (BINFO_VIRTUAL_P (decl) && is_cxx ())
15630         {
15631           /* For C++ virtual bases we can't just use BINFO_OFFSET, as they
15632              aren't at a fixed offset from all (sub)objects of the same
15633              type.  We need to extract the appropriate offset from our
15634              vtable.  The following dwarf expression means
15635
15636                BaseAddr = ObAddr + *((*ObAddr) - Offset)
15637
15638              This is specific to the V3 ABI, of course.  */
15639
15640           dw_loc_descr_ref tmp;
15641
15642           /* Make a copy of the object address.  */
15643           tmp = new_loc_descr (DW_OP_dup, 0, 0);
15644           add_loc_descr (&loc_descr, tmp);
15645
15646           /* Extract the vtable address.  */
15647           tmp = new_loc_descr (DW_OP_deref, 0, 0);
15648           add_loc_descr (&loc_descr, tmp);
15649
15650           /* Calculate the address of the offset.  */
15651           offset = tree_low_cst (BINFO_VPTR_FIELD (decl), 0);
15652           gcc_assert (offset < 0);
15653
15654           tmp = int_loc_descriptor (-offset);
15655           add_loc_descr (&loc_descr, tmp);
15656           tmp = new_loc_descr (DW_OP_minus, 0, 0);
15657           add_loc_descr (&loc_descr, tmp);
15658
15659           /* Extract the offset.  */
15660           tmp = new_loc_descr (DW_OP_deref, 0, 0);
15661           add_loc_descr (&loc_descr, tmp);
15662
15663           /* Add it to the object address.  */
15664           tmp = new_loc_descr (DW_OP_plus, 0, 0);
15665           add_loc_descr (&loc_descr, tmp);
15666         }
15667       else
15668         offset = tree_low_cst (BINFO_OFFSET (decl), 0);
15669     }
15670   else
15671     offset = field_byte_offset (decl);
15672
15673   if (! loc_descr)
15674     {
15675       if (dwarf_version > 2)
15676         {
15677           /* Don't need to output a location expression, just the constant. */
15678           add_AT_int (die, DW_AT_data_member_location, offset);
15679           return;
15680         }
15681       else
15682         {
15683           enum dwarf_location_atom op;
15684
15685           /* The DWARF2 standard says that we should assume that the structure
15686              address is already on the stack, so we can specify a structure
15687              field address by using DW_OP_plus_uconst.  */
15688
15689 #ifdef MIPS_DEBUGGING_INFO
15690           /* ??? The SGI dwarf reader does not handle the DW_OP_plus_uconst
15691              operator correctly.  It works only if we leave the offset on the
15692              stack.  */
15693           op = DW_OP_constu;
15694 #else
15695           op = DW_OP_plus_uconst;
15696 #endif
15697
15698           loc_descr = new_loc_descr (op, offset, 0);
15699         }
15700     }
15701
15702   add_AT_loc (die, DW_AT_data_member_location, loc_descr);
15703 }
15704
15705 /* Writes integer values to dw_vec_const array.  */
15706
15707 static void
15708 insert_int (HOST_WIDE_INT val, unsigned int size, unsigned char *dest)
15709 {
15710   while (size != 0)
15711     {
15712       *dest++ = val & 0xff;
15713       val >>= 8;
15714       --size;
15715     }
15716 }
15717
15718 /* Reads integers from dw_vec_const array.  Inverse of insert_int.  */
15719
15720 static HOST_WIDE_INT
15721 extract_int (const unsigned char *src, unsigned int size)
15722 {
15723   HOST_WIDE_INT val = 0;
15724
15725   src += size;
15726   while (size != 0)
15727     {
15728       val <<= 8;
15729       val |= *--src & 0xff;
15730       --size;
15731     }
15732   return val;
15733 }
15734
15735 /* Writes double_int values to dw_vec_const array.  */
15736
15737 static void
15738 insert_double (double_int val, unsigned char *dest)
15739 {
15740   unsigned char *p0 = dest;
15741   unsigned char *p1 = dest + sizeof (HOST_WIDE_INT);
15742
15743   if (WORDS_BIG_ENDIAN)
15744     {
15745       p0 = p1;
15746       p1 = dest;
15747     }
15748
15749   insert_int ((HOST_WIDE_INT) val.low, sizeof (HOST_WIDE_INT), p0);
15750   insert_int ((HOST_WIDE_INT) val.high, sizeof (HOST_WIDE_INT), p1);
15751 }
15752
15753 /* Writes floating point values to dw_vec_const array.  */
15754
15755 static void
15756 insert_float (const_rtx rtl, unsigned char *array)
15757 {
15758   REAL_VALUE_TYPE rv;
15759   long val[4];
15760   int i;
15761
15762   REAL_VALUE_FROM_CONST_DOUBLE (rv, rtl);
15763   real_to_target (val, &rv, GET_MODE (rtl));
15764
15765   /* real_to_target puts 32-bit pieces in each long.  Pack them.  */
15766   for (i = 0; i < GET_MODE_SIZE (GET_MODE (rtl)) / 4; i++)
15767     {
15768       insert_int (val[i], 4, array);
15769       array += 4;
15770     }
15771 }
15772
15773 /* Attach a DW_AT_const_value attribute for a variable or a parameter which
15774    does not have a "location" either in memory or in a register.  These
15775    things can arise in GNU C when a constant is passed as an actual parameter
15776    to an inlined function.  They can also arise in C++ where declared
15777    constants do not necessarily get memory "homes".  */
15778
15779 static bool
15780 add_const_value_attribute (dw_die_ref die, rtx rtl)
15781 {
15782   switch (GET_CODE (rtl))
15783     {
15784     case CONST_INT:
15785       {
15786         HOST_WIDE_INT val = INTVAL (rtl);
15787
15788         if (val < 0)
15789           add_AT_int (die, DW_AT_const_value, val);
15790         else
15791           add_AT_unsigned (die, DW_AT_const_value, (unsigned HOST_WIDE_INT) val);
15792       }
15793       return true;
15794
15795     case CONST_DOUBLE:
15796       /* Note that a CONST_DOUBLE rtx could represent either an integer or a
15797          floating-point constant.  A CONST_DOUBLE is used whenever the
15798          constant requires more than one word in order to be adequately
15799          represented.  */
15800       {
15801         enum machine_mode mode = GET_MODE (rtl);
15802
15803         if (SCALAR_FLOAT_MODE_P (mode))
15804           {
15805             unsigned int length = GET_MODE_SIZE (mode);
15806             unsigned char *array = GGC_NEWVEC (unsigned char, length);
15807
15808             insert_float (rtl, array);
15809             add_AT_vec (die, DW_AT_const_value, length / 4, 4, array);
15810           }
15811         else
15812           add_AT_double (die, DW_AT_const_value,
15813                          CONST_DOUBLE_HIGH (rtl), CONST_DOUBLE_LOW (rtl));
15814       }
15815       return true;
15816
15817     case CONST_VECTOR:
15818       {
15819         enum machine_mode mode = GET_MODE (rtl);
15820         unsigned int elt_size = GET_MODE_UNIT_SIZE (mode);
15821         unsigned int length = CONST_VECTOR_NUNITS (rtl);
15822         unsigned char *array = GGC_NEWVEC (unsigned char, length * elt_size);
15823         unsigned int i;
15824         unsigned char *p;
15825
15826         switch (GET_MODE_CLASS (mode))
15827           {
15828           case MODE_VECTOR_INT:
15829             for (i = 0, p = array; i < length; i++, p += elt_size)
15830               {
15831                 rtx elt = CONST_VECTOR_ELT (rtl, i);
15832                 double_int val = rtx_to_double_int (elt);
15833
15834                 if (elt_size <= sizeof (HOST_WIDE_INT))
15835                   insert_int (double_int_to_shwi (val), elt_size, p);
15836                 else
15837                   {
15838                     gcc_assert (elt_size == 2 * sizeof (HOST_WIDE_INT));
15839                     insert_double (val, p);
15840                   }
15841               }
15842             break;
15843
15844           case MODE_VECTOR_FLOAT:
15845             for (i = 0, p = array; i < length; i++, p += elt_size)
15846               {
15847                 rtx elt = CONST_VECTOR_ELT (rtl, i);
15848                 insert_float (elt, p);
15849               }
15850             break;
15851
15852           default:
15853             gcc_unreachable ();
15854           }
15855
15856         add_AT_vec (die, DW_AT_const_value, length, elt_size, array);
15857       }
15858       return true;
15859
15860     case CONST_STRING:
15861       if (dwarf_version >= 4 || !dwarf_strict)
15862         {
15863           dw_loc_descr_ref loc_result;
15864           resolve_one_addr (&rtl, NULL);
15865         rtl_addr:
15866           loc_result = new_loc_descr (DW_OP_addr, 0, 0);
15867           loc_result->dw_loc_oprnd1.val_class = dw_val_class_addr;
15868           loc_result->dw_loc_oprnd1.v.val_addr = rtl;
15869           add_loc_descr (&loc_result, new_loc_descr (DW_OP_stack_value, 0, 0));
15870           add_AT_loc (die, DW_AT_location, loc_result);
15871           VEC_safe_push (rtx, gc, used_rtx_array, rtl);
15872           return true;
15873         }
15874       return false;
15875
15876     case CONST:
15877       if (CONSTANT_P (XEXP (rtl, 0)))
15878         return add_const_value_attribute (die, XEXP (rtl, 0));
15879       /* FALLTHROUGH */
15880     case SYMBOL_REF:
15881       if (!const_ok_for_output (rtl))
15882         return false;
15883     case LABEL_REF:
15884       if (dwarf_version >= 4 || !dwarf_strict)
15885         goto rtl_addr;
15886       return false;
15887
15888     case PLUS:
15889       /* In cases where an inlined instance of an inline function is passed
15890          the address of an `auto' variable (which is local to the caller) we
15891          can get a situation where the DECL_RTL of the artificial local
15892          variable (for the inlining) which acts as a stand-in for the
15893          corresponding formal parameter (of the inline function) will look
15894          like (plus:SI (reg:SI FRAME_PTR) (const_int ...)).  This is not
15895          exactly a compile-time constant expression, but it isn't the address
15896          of the (artificial) local variable either.  Rather, it represents the
15897          *value* which the artificial local variable always has during its
15898          lifetime.  We currently have no way to represent such quasi-constant
15899          values in Dwarf, so for now we just punt and generate nothing.  */
15900       return false;
15901
15902     case HIGH:
15903     case CONST_FIXED:
15904       return false;
15905
15906     case MEM:
15907       if (GET_CODE (XEXP (rtl, 0)) == CONST_STRING
15908           && MEM_READONLY_P (rtl)
15909           && GET_MODE (rtl) == BLKmode)
15910         {
15911           add_AT_string (die, DW_AT_const_value, XSTR (XEXP (rtl, 0), 0));
15912           return true;
15913         }
15914       return false;
15915
15916     default:
15917       /* No other kinds of rtx should be possible here.  */
15918       gcc_unreachable ();
15919     }
15920   return false;
15921 }
15922
15923 /* Determine whether the evaluation of EXPR references any variables
15924    or functions which aren't otherwise used (and therefore may not be
15925    output).  */
15926 static tree
15927 reference_to_unused (tree * tp, int * walk_subtrees,
15928                      void * data ATTRIBUTE_UNUSED)
15929 {
15930   if (! EXPR_P (*tp) && ! CONSTANT_CLASS_P (*tp))
15931     *walk_subtrees = 0;
15932
15933   if (DECL_P (*tp) && ! TREE_PUBLIC (*tp) && ! TREE_USED (*tp)
15934       && ! TREE_ASM_WRITTEN (*tp))
15935     return *tp;
15936   /* ???  The C++ FE emits debug information for using decls, so
15937      putting gcc_unreachable here falls over.  See PR31899.  For now
15938      be conservative.  */
15939   else if (!cgraph_global_info_ready
15940            && (TREE_CODE (*tp) == VAR_DECL || TREE_CODE (*tp) == FUNCTION_DECL))
15941     return *tp;
15942   else if (TREE_CODE (*tp) == VAR_DECL)
15943     {
15944       struct varpool_node *node = varpool_get_node (*tp);
15945       if (!node || !node->needed)
15946         return *tp;
15947     }
15948   else if (TREE_CODE (*tp) == FUNCTION_DECL
15949            && (!DECL_EXTERNAL (*tp) || DECL_DECLARED_INLINE_P (*tp)))
15950     {
15951       /* The call graph machinery must have finished analyzing,
15952          optimizing and gimplifying the CU by now.
15953          So if *TP has no call graph node associated
15954          to it, it means *TP will not be emitted.  */
15955       if (!cgraph_get_node (*tp))
15956         return *tp;
15957     }
15958   else if (TREE_CODE (*tp) == STRING_CST && !TREE_ASM_WRITTEN (*tp))
15959     return *tp;
15960
15961   return NULL_TREE;
15962 }
15963
15964 /* Generate an RTL constant from a decl initializer INIT with decl type TYPE,
15965    for use in a later add_const_value_attribute call.  */
15966
15967 static rtx
15968 rtl_for_decl_init (tree init, tree type)
15969 {
15970   rtx rtl = NULL_RTX;
15971
15972   /* If a variable is initialized with a string constant without embedded
15973      zeros, build CONST_STRING.  */
15974   if (TREE_CODE (init) == STRING_CST && TREE_CODE (type) == ARRAY_TYPE)
15975     {
15976       tree enttype = TREE_TYPE (type);
15977       tree domain = TYPE_DOMAIN (type);
15978       enum machine_mode mode = TYPE_MODE (enttype);
15979
15980       if (GET_MODE_CLASS (mode) == MODE_INT && GET_MODE_SIZE (mode) == 1
15981           && domain
15982           && integer_zerop (TYPE_MIN_VALUE (domain))
15983           && compare_tree_int (TYPE_MAX_VALUE (domain),
15984                                TREE_STRING_LENGTH (init) - 1) == 0
15985           && ((size_t) TREE_STRING_LENGTH (init)
15986               == strlen (TREE_STRING_POINTER (init)) + 1))
15987         {
15988           rtl = gen_rtx_CONST_STRING (VOIDmode,
15989                                       ggc_strdup (TREE_STRING_POINTER (init)));
15990           rtl = gen_rtx_MEM (BLKmode, rtl);
15991           MEM_READONLY_P (rtl) = 1;
15992         }
15993     }
15994   /* Other aggregates, and complex values, could be represented using
15995      CONCAT: FIXME!  */
15996   else if (AGGREGATE_TYPE_P (type) || TREE_CODE (type) == COMPLEX_TYPE)
15997     ;
15998   /* Vectors only work if their mode is supported by the target.
15999      FIXME: generic vectors ought to work too.  */
16000   else if (TREE_CODE (type) == VECTOR_TYPE && TYPE_MODE (type) == BLKmode)
16001     ;
16002   /* If the initializer is something that we know will expand into an
16003      immediate RTL constant, expand it now.  We must be careful not to
16004      reference variables which won't be output.  */
16005   else if (initializer_constant_valid_p (init, type)
16006            && ! walk_tree (&init, reference_to_unused, NULL, NULL))
16007     {
16008       /* Convert vector CONSTRUCTOR initializers to VECTOR_CST if
16009          possible.  */
16010       if (TREE_CODE (type) == VECTOR_TYPE)
16011         switch (TREE_CODE (init))
16012           {
16013           case VECTOR_CST:
16014             break;
16015           case CONSTRUCTOR:
16016             if (TREE_CONSTANT (init))
16017               {
16018                 VEC(constructor_elt,gc) *elts = CONSTRUCTOR_ELTS (init);
16019                 bool constant_p = true;
16020                 tree value;
16021                 unsigned HOST_WIDE_INT ix;
16022
16023                 /* Even when ctor is constant, it might contain non-*_CST
16024                    elements (e.g. { 1.0/0.0 - 1.0/0.0, 0.0 }) and those don't
16025                    belong into VECTOR_CST nodes.  */
16026                 FOR_EACH_CONSTRUCTOR_VALUE (elts, ix, value)
16027                   if (!CONSTANT_CLASS_P (value))
16028                     {
16029                       constant_p = false;
16030                       break;
16031                     }
16032
16033                 if (constant_p)
16034                   {
16035                     init = build_vector_from_ctor (type, elts);
16036                     break;
16037                   }
16038               }
16039             /* FALLTHRU */
16040
16041           default:
16042             return NULL;
16043           }
16044
16045       rtl = expand_expr (init, NULL_RTX, VOIDmode, EXPAND_INITIALIZER);
16046
16047       /* If expand_expr returns a MEM, it wasn't immediate.  */
16048       gcc_assert (!rtl || !MEM_P (rtl));
16049     }
16050
16051   return rtl;
16052 }
16053
16054 /* Generate RTL for the variable DECL to represent its location.  */
16055
16056 static rtx
16057 rtl_for_decl_location (tree decl)
16058 {
16059   rtx rtl;
16060
16061   /* Here we have to decide where we are going to say the parameter "lives"
16062      (as far as the debugger is concerned).  We only have a couple of
16063      choices.  GCC provides us with DECL_RTL and with DECL_INCOMING_RTL.
16064
16065      DECL_RTL normally indicates where the parameter lives during most of the
16066      activation of the function.  If optimization is enabled however, this
16067      could be either NULL or else a pseudo-reg.  Both of those cases indicate
16068      that the parameter doesn't really live anywhere (as far as the code
16069      generation parts of GCC are concerned) during most of the function's
16070      activation.  That will happen (for example) if the parameter is never
16071      referenced within the function.
16072
16073      We could just generate a location descriptor here for all non-NULL
16074      non-pseudo values of DECL_RTL and ignore all of the rest, but we can be
16075      a little nicer than that if we also consider DECL_INCOMING_RTL in cases
16076      where DECL_RTL is NULL or is a pseudo-reg.
16077
16078      Note however that we can only get away with using DECL_INCOMING_RTL as
16079      a backup substitute for DECL_RTL in certain limited cases.  In cases
16080      where DECL_ARG_TYPE (decl) indicates the same type as TREE_TYPE (decl),
16081      we can be sure that the parameter was passed using the same type as it is
16082      declared to have within the function, and that its DECL_INCOMING_RTL
16083      points us to a place where a value of that type is passed.
16084
16085      In cases where DECL_ARG_TYPE (decl) and TREE_TYPE (decl) are different,
16086      we cannot (in general) use DECL_INCOMING_RTL as a substitute for DECL_RTL
16087      because in these cases DECL_INCOMING_RTL points us to a value of some
16088      type which is *different* from the type of the parameter itself.  Thus,
16089      if we tried to use DECL_INCOMING_RTL to generate a location attribute in
16090      such cases, the debugger would end up (for example) trying to fetch a
16091      `float' from a place which actually contains the first part of a
16092      `double'.  That would lead to really incorrect and confusing
16093      output at debug-time.
16094
16095      So, in general, we *do not* use DECL_INCOMING_RTL as a backup for DECL_RTL
16096      in cases where DECL_ARG_TYPE (decl) != TREE_TYPE (decl).  There
16097      are a couple of exceptions however.  On little-endian machines we can
16098      get away with using DECL_INCOMING_RTL even when DECL_ARG_TYPE (decl) is
16099      not the same as TREE_TYPE (decl), but only when DECL_ARG_TYPE (decl) is
16100      an integral type that is smaller than TREE_TYPE (decl). These cases arise
16101      when (on a little-endian machine) a non-prototyped function has a
16102      parameter declared to be of type `short' or `char'.  In such cases,
16103      TREE_TYPE (decl) will be `short' or `char', DECL_ARG_TYPE (decl) will
16104      be `int', and DECL_INCOMING_RTL will point to the lowest-order byte of the
16105      passed `int' value.  If the debugger then uses that address to fetch
16106      a `short' or a `char' (on a little-endian machine) the result will be
16107      the correct data, so we allow for such exceptional cases below.
16108
16109      Note that our goal here is to describe the place where the given formal
16110      parameter lives during most of the function's activation (i.e. between the
16111      end of the prologue and the start of the epilogue).  We'll do that as best
16112      as we can. Note however that if the given formal parameter is modified
16113      sometime during the execution of the function, then a stack backtrace (at
16114      debug-time) will show the function as having been called with the *new*
16115      value rather than the value which was originally passed in.  This happens
16116      rarely enough that it is not a major problem, but it *is* a problem, and
16117      I'd like to fix it.
16118
16119      A future version of dwarf2out.c may generate two additional attributes for
16120      any given DW_TAG_formal_parameter DIE which will describe the "passed
16121      type" and the "passed location" for the given formal parameter in addition
16122      to the attributes we now generate to indicate the "declared type" and the
16123      "active location" for each parameter.  This additional set of attributes
16124      could be used by debuggers for stack backtraces. Separately, note that
16125      sometimes DECL_RTL can be NULL and DECL_INCOMING_RTL can be NULL also.
16126      This happens (for example) for inlined-instances of inline function formal
16127      parameters which are never referenced.  This really shouldn't be
16128      happening.  All PARM_DECL nodes should get valid non-NULL
16129      DECL_INCOMING_RTL values.  FIXME.  */
16130
16131   /* Use DECL_RTL as the "location" unless we find something better.  */
16132   rtl = DECL_RTL_IF_SET (decl);
16133
16134   /* When generating abstract instances, ignore everything except
16135      constants, symbols living in memory, and symbols living in
16136      fixed registers.  */
16137   if (! reload_completed)
16138     {
16139       if (rtl
16140           && (CONSTANT_P (rtl)
16141               || (MEM_P (rtl)
16142                   && CONSTANT_P (XEXP (rtl, 0)))
16143               || (REG_P (rtl)
16144                   && TREE_CODE (decl) == VAR_DECL
16145                   && TREE_STATIC (decl))))
16146         {
16147           rtl = targetm.delegitimize_address (rtl);
16148           return rtl;
16149         }
16150       rtl = NULL_RTX;
16151     }
16152   else if (TREE_CODE (decl) == PARM_DECL)
16153     {
16154       if (rtl == NULL_RTX || is_pseudo_reg (rtl))
16155         {
16156           tree declared_type = TREE_TYPE (decl);
16157           tree passed_type = DECL_ARG_TYPE (decl);
16158           enum machine_mode dmode = TYPE_MODE (declared_type);
16159           enum machine_mode pmode = TYPE_MODE (passed_type);
16160
16161           /* This decl represents a formal parameter which was optimized out.
16162              Note that DECL_INCOMING_RTL may be NULL in here, but we handle
16163              all cases where (rtl == NULL_RTX) just below.  */
16164           if (dmode == pmode)
16165             rtl = DECL_INCOMING_RTL (decl);
16166           else if (SCALAR_INT_MODE_P (dmode)
16167                    && GET_MODE_SIZE (dmode) <= GET_MODE_SIZE (pmode)
16168                    && DECL_INCOMING_RTL (decl))
16169             {
16170               rtx inc = DECL_INCOMING_RTL (decl);
16171               if (REG_P (inc))
16172                 rtl = inc;
16173               else if (MEM_P (inc))
16174                 {
16175                   if (BYTES_BIG_ENDIAN)
16176                     rtl = adjust_address_nv (inc, dmode,
16177                                              GET_MODE_SIZE (pmode)
16178                                              - GET_MODE_SIZE (dmode));
16179                   else
16180                     rtl = inc;
16181                 }
16182             }
16183         }
16184
16185       /* If the parm was passed in registers, but lives on the stack, then
16186          make a big endian correction if the mode of the type of the
16187          parameter is not the same as the mode of the rtl.  */
16188       /* ??? This is the same series of checks that are made in dbxout.c before
16189          we reach the big endian correction code there.  It isn't clear if all
16190          of these checks are necessary here, but keeping them all is the safe
16191          thing to do.  */
16192       else if (MEM_P (rtl)
16193                && XEXP (rtl, 0) != const0_rtx
16194                && ! CONSTANT_P (XEXP (rtl, 0))
16195                /* Not passed in memory.  */
16196                && !MEM_P (DECL_INCOMING_RTL (decl))
16197                /* Not passed by invisible reference.  */
16198                && (!REG_P (XEXP (rtl, 0))
16199                    || REGNO (XEXP (rtl, 0)) == HARD_FRAME_POINTER_REGNUM
16200                    || REGNO (XEXP (rtl, 0)) == STACK_POINTER_REGNUM
16201 #if ARG_POINTER_REGNUM != HARD_FRAME_POINTER_REGNUM
16202                    || REGNO (XEXP (rtl, 0)) == ARG_POINTER_REGNUM
16203 #endif
16204                      )
16205                /* Big endian correction check.  */
16206                && BYTES_BIG_ENDIAN
16207                && TYPE_MODE (TREE_TYPE (decl)) != GET_MODE (rtl)
16208                && (GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (decl)))
16209                    < UNITS_PER_WORD))
16210         {
16211           int offset = (UNITS_PER_WORD
16212                         - GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (decl))));
16213
16214           rtl = gen_rtx_MEM (TYPE_MODE (TREE_TYPE (decl)),
16215                              plus_constant (XEXP (rtl, 0), offset));
16216         }
16217     }
16218   else if (TREE_CODE (decl) == VAR_DECL
16219            && rtl
16220            && MEM_P (rtl)
16221            && GET_MODE (rtl) != TYPE_MODE (TREE_TYPE (decl))
16222            && BYTES_BIG_ENDIAN)
16223     {
16224       int rsize = GET_MODE_SIZE (GET_MODE (rtl));
16225       int dsize = GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (decl)));
16226
16227       /* If a variable is declared "register" yet is smaller than
16228          a register, then if we store the variable to memory, it
16229          looks like we're storing a register-sized value, when in
16230          fact we are not.  We need to adjust the offset of the
16231          storage location to reflect the actual value's bytes,
16232          else gdb will not be able to display it.  */
16233       if (rsize > dsize)
16234         rtl = gen_rtx_MEM (TYPE_MODE (TREE_TYPE (decl)),
16235                            plus_constant (XEXP (rtl, 0), rsize-dsize));
16236     }
16237
16238   /* A variable with no DECL_RTL but a DECL_INITIAL is a compile-time constant,
16239      and will have been substituted directly into all expressions that use it.
16240      C does not have such a concept, but C++ and other languages do.  */
16241   if (!rtl && TREE_CODE (decl) == VAR_DECL && DECL_INITIAL (decl))
16242     rtl = rtl_for_decl_init (DECL_INITIAL (decl), TREE_TYPE (decl));
16243
16244   if (rtl)
16245     rtl = targetm.delegitimize_address (rtl);
16246
16247   /* If we don't look past the constant pool, we risk emitting a
16248      reference to a constant pool entry that isn't referenced from
16249      code, and thus is not emitted.  */
16250   if (rtl)
16251     rtl = avoid_constant_pool_reference (rtl);
16252
16253   /* Try harder to get a rtl.  If this symbol ends up not being emitted
16254      in the current CU, resolve_addr will remove the expression referencing
16255      it.  */
16256   if (rtl == NULL_RTX
16257       && TREE_CODE (decl) == VAR_DECL
16258       && !DECL_EXTERNAL (decl)
16259       && TREE_STATIC (decl)
16260       && DECL_NAME (decl)
16261       && !DECL_HARD_REGISTER (decl)
16262       && DECL_MODE (decl) != VOIDmode)
16263     {
16264       rtl = make_decl_rtl_for_debug (decl);
16265       if (!MEM_P (rtl)
16266           || GET_CODE (XEXP (rtl, 0)) != SYMBOL_REF
16267           || SYMBOL_REF_DECL (XEXP (rtl, 0)) != decl)
16268         rtl = NULL_RTX;
16269     }
16270
16271   return rtl;
16272 }
16273
16274 /* Check whether decl is a Fortran COMMON symbol.  If not, NULL_TREE is
16275    returned.  If so, the decl for the COMMON block is returned, and the
16276    value is the offset into the common block for the symbol.  */
16277
16278 static tree
16279 fortran_common (tree decl, HOST_WIDE_INT *value)
16280 {
16281   tree val_expr, cvar;
16282   enum machine_mode mode;
16283   HOST_WIDE_INT bitsize, bitpos;
16284   tree offset;
16285   int volatilep = 0, unsignedp = 0;
16286
16287   /* If the decl isn't a VAR_DECL, or if it isn't static, or if
16288      it does not have a value (the offset into the common area), or if it
16289      is thread local (as opposed to global) then it isn't common, and shouldn't
16290      be handled as such.  */
16291   if (TREE_CODE (decl) != VAR_DECL
16292       || !TREE_STATIC (decl)
16293       || !DECL_HAS_VALUE_EXPR_P (decl)
16294       || !is_fortran ())
16295     return NULL_TREE;
16296
16297   val_expr = DECL_VALUE_EXPR (decl);
16298   if (TREE_CODE (val_expr) != COMPONENT_REF)
16299     return NULL_TREE;
16300
16301   cvar = get_inner_reference (val_expr, &bitsize, &bitpos, &offset,
16302                               &mode, &unsignedp, &volatilep, true);
16303
16304   if (cvar == NULL_TREE
16305       || TREE_CODE (cvar) != VAR_DECL
16306       || DECL_ARTIFICIAL (cvar)
16307       || !TREE_PUBLIC (cvar))
16308     return NULL_TREE;
16309
16310   *value = 0;
16311   if (offset != NULL)
16312     {
16313       if (!host_integerp (offset, 0))
16314         return NULL_TREE;
16315       *value = tree_low_cst (offset, 0);
16316     }
16317   if (bitpos != 0)
16318     *value += bitpos / BITS_PER_UNIT;
16319
16320   return cvar;
16321 }
16322
16323 /* Generate *either* a DW_AT_location attribute or else a DW_AT_const_value
16324    data attribute for a variable or a parameter.  We generate the
16325    DW_AT_const_value attribute only in those cases where the given variable
16326    or parameter does not have a true "location" either in memory or in a
16327    register.  This can happen (for example) when a constant is passed as an
16328    actual argument in a call to an inline function.  (It's possible that
16329    these things can crop up in other ways also.)  Note that one type of
16330    constant value which can be passed into an inlined function is a constant
16331    pointer.  This can happen for example if an actual argument in an inlined
16332    function call evaluates to a compile-time constant address.  */
16333
16334 static bool
16335 add_location_or_const_value_attribute (dw_die_ref die, tree decl,
16336                                        enum dwarf_attribute attr)
16337 {
16338   rtx rtl;
16339   dw_loc_list_ref list;
16340   var_loc_list *loc_list;
16341
16342   if (TREE_CODE (decl) == ERROR_MARK)
16343     return false;
16344
16345   gcc_assert (TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == PARM_DECL
16346               || TREE_CODE (decl) == RESULT_DECL);
16347
16348   /* Try to get some constant RTL for this decl, and use that as the value of
16349      the location.  */
16350
16351   rtl = rtl_for_decl_location (decl);
16352   if (rtl && (CONSTANT_P (rtl) || GET_CODE (rtl) == CONST_STRING)
16353       && add_const_value_attribute (die, rtl))
16354     return true;
16355
16356   /* See if we have single element location list that is equivalent to
16357      a constant value.  That way we are better to use add_const_value_attribute
16358      rather than expanding constant value equivalent.  */
16359   loc_list = lookup_decl_loc (decl);
16360   if (loc_list
16361       && loc_list->first
16362       && loc_list->first->next == NULL
16363       && NOTE_P (loc_list->first->loc)
16364       && NOTE_VAR_LOCATION (loc_list->first->loc)
16365       && NOTE_VAR_LOCATION_LOC (loc_list->first->loc))
16366     {
16367       struct var_loc_node *node;
16368
16369       node = loc_list->first;
16370       rtl = NOTE_VAR_LOCATION_LOC (node->loc);
16371       if (GET_CODE (rtl) == EXPR_LIST)
16372         rtl = XEXP (rtl, 0);
16373       if ((CONSTANT_P (rtl) || GET_CODE (rtl) == CONST_STRING)
16374           && add_const_value_attribute (die, rtl))
16375          return true;
16376     }
16377   list = loc_list_from_tree (decl, decl_by_reference_p (decl) ? 0 : 2);
16378   if (list)
16379     {
16380       add_AT_location_description (die, attr, list);
16381       return true;
16382     }
16383   /* None of that worked, so it must not really have a location;
16384      try adding a constant value attribute from the DECL_INITIAL.  */
16385   return tree_add_const_value_attribute_for_decl (die, decl);
16386 }
16387
16388 /* Add VARIABLE and DIE into deferred locations list.  */
16389
16390 static void
16391 defer_location (tree variable, dw_die_ref die)
16392 {
16393   deferred_locations entry;
16394   entry.variable = variable;
16395   entry.die = die;
16396   VEC_safe_push (deferred_locations, gc, deferred_locations_list, &entry);
16397 }
16398
16399 /* Helper function for tree_add_const_value_attribute.  Natively encode
16400    initializer INIT into an array.  Return true if successful.  */
16401
16402 static bool
16403 native_encode_initializer (tree init, unsigned char *array, int size)
16404 {
16405   tree type;
16406
16407   if (init == NULL_TREE)
16408     return false;
16409
16410   STRIP_NOPS (init);
16411   switch (TREE_CODE (init))
16412     {
16413     case STRING_CST:
16414       type = TREE_TYPE (init);
16415       if (TREE_CODE (type) == ARRAY_TYPE)
16416         {
16417           tree enttype = TREE_TYPE (type);
16418           enum machine_mode mode = TYPE_MODE (enttype);
16419
16420           if (GET_MODE_CLASS (mode) != MODE_INT || GET_MODE_SIZE (mode) != 1)
16421             return false;
16422           if (int_size_in_bytes (type) != size)
16423             return false;
16424           if (size > TREE_STRING_LENGTH (init))
16425             {
16426               memcpy (array, TREE_STRING_POINTER (init),
16427                       TREE_STRING_LENGTH (init));
16428               memset (array + TREE_STRING_LENGTH (init),
16429                       '\0', size - TREE_STRING_LENGTH (init));
16430             }
16431           else
16432             memcpy (array, TREE_STRING_POINTER (init), size);
16433           return true;
16434         }
16435       return false;
16436     case CONSTRUCTOR:
16437       type = TREE_TYPE (init);
16438       if (int_size_in_bytes (type) != size)
16439         return false;
16440       if (TREE_CODE (type) == ARRAY_TYPE)
16441         {
16442           HOST_WIDE_INT min_index;
16443           unsigned HOST_WIDE_INT cnt;
16444           int curpos = 0, fieldsize;
16445           constructor_elt *ce;
16446
16447           if (TYPE_DOMAIN (type) == NULL_TREE
16448               || !host_integerp (TYPE_MIN_VALUE (TYPE_DOMAIN (type)), 0))
16449             return false;
16450
16451           fieldsize = int_size_in_bytes (TREE_TYPE (type));
16452           if (fieldsize <= 0)
16453             return false;
16454
16455           min_index = tree_low_cst (TYPE_MIN_VALUE (TYPE_DOMAIN (type)), 0);
16456           memset (array, '\0', size);
16457           for (cnt = 0;
16458                VEC_iterate (constructor_elt, CONSTRUCTOR_ELTS (init), cnt, ce);
16459                cnt++)
16460             {
16461               tree val = ce->value;
16462               tree index = ce->index;
16463               int pos = curpos;
16464               if (index && TREE_CODE (index) == RANGE_EXPR)
16465                 pos = (tree_low_cst (TREE_OPERAND (index, 0), 0) - min_index)
16466                       * fieldsize;
16467               else if (index)
16468                 pos = (tree_low_cst (index, 0) - min_index) * fieldsize;
16469
16470               if (val)
16471                 {
16472                   STRIP_NOPS (val);
16473                   if (!native_encode_initializer (val, array + pos, fieldsize))
16474                     return false;
16475                 }
16476               curpos = pos + fieldsize;
16477               if (index && TREE_CODE (index) == RANGE_EXPR)
16478                 {
16479                   int count = tree_low_cst (TREE_OPERAND (index, 1), 0)
16480                               - tree_low_cst (TREE_OPERAND (index, 0), 0);
16481                   while (count > 0)
16482                     {
16483                       if (val)
16484                         memcpy (array + curpos, array + pos, fieldsize);
16485                       curpos += fieldsize;
16486                     }
16487                 }
16488               gcc_assert (curpos <= size);
16489             }
16490           return true;
16491         }
16492       else if (TREE_CODE (type) == RECORD_TYPE
16493                || TREE_CODE (type) == UNION_TYPE)
16494         {
16495           tree field = NULL_TREE;
16496           unsigned HOST_WIDE_INT cnt;
16497           constructor_elt *ce;
16498
16499           if (int_size_in_bytes (type) != size)
16500             return false;
16501
16502           if (TREE_CODE (type) == RECORD_TYPE)
16503             field = TYPE_FIELDS (type);
16504
16505           for (cnt = 0;
16506                VEC_iterate (constructor_elt, CONSTRUCTOR_ELTS (init), cnt, ce);
16507                cnt++, field = field ? TREE_CHAIN (field) : 0)
16508             {
16509               tree val = ce->value;
16510               int pos, fieldsize;
16511
16512               if (ce->index != 0)
16513                 field = ce->index;
16514
16515               if (val)
16516                 STRIP_NOPS (val);
16517
16518               if (field == NULL_TREE || DECL_BIT_FIELD (field))
16519                 return false;
16520
16521               if (TREE_CODE (TREE_TYPE (field)) == ARRAY_TYPE
16522                   && TYPE_DOMAIN (TREE_TYPE (field))
16523                   && ! TYPE_MAX_VALUE (TYPE_DOMAIN (TREE_TYPE (field))))
16524                 return false;
16525               else if (DECL_SIZE_UNIT (field) == NULL_TREE
16526                        || !host_integerp (DECL_SIZE_UNIT (field), 0))
16527                 return false;
16528               fieldsize = tree_low_cst (DECL_SIZE_UNIT (field), 0);
16529               pos = int_byte_position (field);
16530               gcc_assert (pos + fieldsize <= size);
16531               if (val
16532                   && !native_encode_initializer (val, array + pos, fieldsize))
16533                 return false;
16534             }
16535           return true;
16536         }
16537       return false;
16538     case VIEW_CONVERT_EXPR:
16539     case NON_LVALUE_EXPR:
16540       return native_encode_initializer (TREE_OPERAND (init, 0), array, size);
16541     default:
16542       return native_encode_expr (init, array, size) == size;
16543     }
16544 }
16545
16546 /* Attach a DW_AT_const_value attribute to DIE. The value of the
16547    attribute is the const value T.  */
16548
16549 static bool
16550 tree_add_const_value_attribute (dw_die_ref die, tree t)
16551 {
16552   tree init;
16553   tree type = TREE_TYPE (t);
16554   rtx rtl;
16555
16556   if (!t || !TREE_TYPE (t) || TREE_TYPE (t) == error_mark_node)
16557     return false;
16558
16559   init = t;
16560   gcc_assert (!DECL_P (init));
16561
16562   rtl = rtl_for_decl_init (init, type);
16563   if (rtl)
16564     return add_const_value_attribute (die, rtl);
16565   /* If the host and target are sane, try harder.  */
16566   else if (CHAR_BIT == 8 && BITS_PER_UNIT == 8
16567            && initializer_constant_valid_p (init, type))
16568     {
16569       HOST_WIDE_INT size = int_size_in_bytes (TREE_TYPE (init));
16570       if (size > 0 && (int) size == size)
16571         {
16572           unsigned char *array = GGC_CNEWVEC (unsigned char, size);
16573
16574           if (native_encode_initializer (init, array, size))
16575             {
16576               add_AT_vec (die, DW_AT_const_value, size, 1, array);
16577               return true;
16578             }
16579         }
16580     }
16581   return false;
16582 }
16583
16584 /* Attach a DW_AT_const_value attribute to VAR_DIE. The value of the
16585    attribute is the const value of T, where T is an integral constant
16586    variable with static storage duration
16587    (so it can't be a PARM_DECL or a RESULT_DECL).  */
16588
16589 static bool
16590 tree_add_const_value_attribute_for_decl (dw_die_ref var_die, tree decl)
16591 {
16592
16593   if (!decl
16594       || (TREE_CODE (decl) != VAR_DECL
16595           && TREE_CODE (decl) != CONST_DECL))
16596     return false;
16597
16598     if (TREE_READONLY (decl)
16599         && ! TREE_THIS_VOLATILE (decl)
16600         && DECL_INITIAL (decl))
16601       /* OK */;
16602     else
16603       return false;
16604
16605   /* Don't add DW_AT_const_value if abstract origin already has one.  */
16606   if (get_AT (var_die, DW_AT_const_value))
16607     return false;
16608
16609   return tree_add_const_value_attribute (var_die, DECL_INITIAL (decl));
16610 }
16611
16612 /* Convert the CFI instructions for the current function into a
16613    location list.  This is used for DW_AT_frame_base when we targeting
16614    a dwarf2 consumer that does not support the dwarf3
16615    DW_OP_call_frame_cfa.  OFFSET is a constant to be added to all CFA
16616    expressions.  */
16617
16618 static dw_loc_list_ref
16619 convert_cfa_to_fb_loc_list (HOST_WIDE_INT offset)
16620 {
16621   dw_fde_ref fde;
16622   dw_loc_list_ref list, *list_tail;
16623   dw_cfi_ref cfi;
16624   dw_cfa_location last_cfa, next_cfa;
16625   const char *start_label, *last_label, *section;
16626   dw_cfa_location remember;
16627
16628   fde = current_fde ();
16629   gcc_assert (fde != NULL);
16630
16631   section = secname_for_decl (current_function_decl);
16632   list_tail = &list;
16633   list = NULL;
16634
16635   memset (&next_cfa, 0, sizeof (next_cfa));
16636   next_cfa.reg = INVALID_REGNUM;
16637   remember = next_cfa;
16638
16639   start_label = fde->dw_fde_begin;
16640
16641   /* ??? Bald assumption that the CIE opcode list does not contain
16642      advance opcodes.  */
16643   for (cfi = cie_cfi_head; cfi; cfi = cfi->dw_cfi_next)
16644     lookup_cfa_1 (cfi, &next_cfa, &remember);
16645
16646   last_cfa = next_cfa;
16647   last_label = start_label;
16648
16649   for (cfi = fde->dw_fde_cfi; cfi; cfi = cfi->dw_cfi_next)
16650     switch (cfi->dw_cfi_opc)
16651       {
16652       case DW_CFA_set_loc:
16653       case DW_CFA_advance_loc1:
16654       case DW_CFA_advance_loc2:
16655       case DW_CFA_advance_loc4:
16656         if (!cfa_equal_p (&last_cfa, &next_cfa))
16657           {
16658             *list_tail = new_loc_list (build_cfa_loc (&last_cfa, offset),
16659                                        start_label, last_label, section);
16660
16661             list_tail = &(*list_tail)->dw_loc_next;
16662             last_cfa = next_cfa;
16663             start_label = last_label;
16664           }
16665         last_label = cfi->dw_cfi_oprnd1.dw_cfi_addr;
16666         break;
16667
16668       case DW_CFA_advance_loc:
16669         /* The encoding is complex enough that we should never emit this.  */
16670         gcc_unreachable ();
16671
16672       default:
16673         lookup_cfa_1 (cfi, &next_cfa, &remember);
16674         break;
16675       }
16676
16677   if (!cfa_equal_p (&last_cfa, &next_cfa))
16678     {
16679       *list_tail = new_loc_list (build_cfa_loc (&last_cfa, offset),
16680                                  start_label, last_label, section);
16681       list_tail = &(*list_tail)->dw_loc_next;
16682       start_label = last_label;
16683     }
16684
16685   *list_tail = new_loc_list (build_cfa_loc (&next_cfa, offset),
16686                              start_label, fde->dw_fde_end, section);
16687
16688   if (list && list->dw_loc_next)
16689     gen_llsym (list);
16690
16691   return list;
16692 }
16693
16694 /* Compute a displacement from the "steady-state frame pointer" to the
16695    frame base (often the same as the CFA), and store it in
16696    frame_pointer_fb_offset.  OFFSET is added to the displacement
16697    before the latter is negated.  */
16698
16699 static void
16700 compute_frame_pointer_to_fb_displacement (HOST_WIDE_INT offset)
16701 {
16702   rtx reg, elim;
16703
16704 #ifdef FRAME_POINTER_CFA_OFFSET
16705   reg = frame_pointer_rtx;
16706   offset += FRAME_POINTER_CFA_OFFSET (current_function_decl);
16707 #else
16708   reg = arg_pointer_rtx;
16709   offset += ARG_POINTER_CFA_OFFSET (current_function_decl);
16710 #endif
16711
16712   elim = eliminate_regs (reg, VOIDmode, NULL_RTX);
16713   if (GET_CODE (elim) == PLUS)
16714     {
16715       offset += INTVAL (XEXP (elim, 1));
16716       elim = XEXP (elim, 0);
16717     }
16718
16719   gcc_assert ((SUPPORTS_STACK_ALIGNMENT
16720                && (elim == hard_frame_pointer_rtx
16721                    || elim == stack_pointer_rtx))
16722               || elim == (frame_pointer_needed
16723                           ? hard_frame_pointer_rtx
16724                           : stack_pointer_rtx));
16725
16726   frame_pointer_fb_offset = -offset;
16727 }
16728
16729 /* Generate a DW_AT_name attribute given some string value to be included as
16730    the value of the attribute.  */
16731
16732 static void
16733 add_name_attribute (dw_die_ref die, const char *name_string)
16734 {
16735   if (name_string != NULL && *name_string != 0)
16736     {
16737       if (demangle_name_func)
16738         name_string = (*demangle_name_func) (name_string);
16739
16740       add_AT_string (die, DW_AT_name, name_string);
16741     }
16742 }
16743
16744 /* Generate a DW_AT_comp_dir attribute for DIE.  */
16745
16746 static void
16747 add_comp_dir_attribute (dw_die_ref die)
16748 {
16749   const char *wd = get_src_pwd ();
16750   char *wd1;
16751
16752   if (wd == NULL)
16753     return;
16754
16755   if (DWARF2_DIR_SHOULD_END_WITH_SEPARATOR)
16756     {
16757       int wdlen;
16758
16759       wdlen = strlen (wd);
16760       wd1 = GGC_NEWVEC (char, wdlen + 2);
16761       strcpy (wd1, wd);
16762       wd1 [wdlen] = DIR_SEPARATOR;
16763       wd1 [wdlen + 1] = 0;
16764       wd = wd1;
16765     }
16766
16767     add_AT_string (die, DW_AT_comp_dir, remap_debug_filename (wd));
16768 }
16769
16770 /* Return the default for DW_AT_lower_bound, or -1 if there is not any
16771    default.  */
16772
16773 static int
16774 lower_bound_default (void)
16775 {
16776   switch (get_AT_unsigned (comp_unit_die, DW_AT_language))
16777     {
16778     case DW_LANG_C:
16779     case DW_LANG_C89:
16780     case DW_LANG_C99:
16781     case DW_LANG_C_plus_plus:
16782     case DW_LANG_ObjC:
16783     case DW_LANG_ObjC_plus_plus:
16784     case DW_LANG_Java:
16785       return 0;
16786     case DW_LANG_Fortran77:
16787     case DW_LANG_Fortran90:
16788     case DW_LANG_Fortran95:
16789       return 1;
16790     case DW_LANG_UPC:
16791     case DW_LANG_D:
16792     case DW_LANG_Python:
16793       return dwarf_version >= 4 ? 0 : -1;
16794     case DW_LANG_Ada95:
16795     case DW_LANG_Ada83:
16796     case DW_LANG_Cobol74:
16797     case DW_LANG_Cobol85:
16798     case DW_LANG_Pascal83:
16799     case DW_LANG_Modula2:
16800     case DW_LANG_PLI:
16801       return dwarf_version >= 4 ? 1 : -1;
16802     default:
16803       return -1;
16804     }
16805 }
16806
16807 /* Given a tree node describing an array bound (either lower or upper) output
16808    a representation for that bound.  */
16809
16810 static void
16811 add_bound_info (dw_die_ref subrange_die, enum dwarf_attribute bound_attr, tree bound)
16812 {
16813   switch (TREE_CODE (bound))
16814     {
16815     case ERROR_MARK:
16816       return;
16817
16818     /* All fixed-bounds are represented by INTEGER_CST nodes.  */
16819     case INTEGER_CST:
16820       {
16821         unsigned int prec = simple_type_size_in_bits (TREE_TYPE (bound));
16822         int dflt;
16823
16824         /* Use the default if possible.  */
16825         if (bound_attr == DW_AT_lower_bound
16826             && host_integerp (bound, 0)
16827             && (dflt = lower_bound_default ()) != -1
16828             && tree_low_cst (bound, 0) == dflt)
16829           ;
16830
16831         /* Otherwise represent the bound as an unsigned value with the
16832            precision of its type.  The precision and signedness of the
16833            type will be necessary to re-interpret it unambiguously.  */
16834         else if (prec < HOST_BITS_PER_WIDE_INT)
16835           {
16836             unsigned HOST_WIDE_INT mask
16837               = ((unsigned HOST_WIDE_INT) 1 << prec) - 1;
16838             add_AT_unsigned (subrange_die, bound_attr,
16839                              TREE_INT_CST_LOW (bound) & mask);
16840           }
16841         else if (prec == HOST_BITS_PER_WIDE_INT
16842                  || TREE_INT_CST_HIGH (bound) == 0)
16843           add_AT_unsigned (subrange_die, bound_attr,
16844                            TREE_INT_CST_LOW (bound));
16845         else
16846           add_AT_double (subrange_die, bound_attr, TREE_INT_CST_HIGH (bound),
16847                          TREE_INT_CST_LOW (bound));
16848       }
16849       break;
16850
16851     CASE_CONVERT:
16852     case VIEW_CONVERT_EXPR:
16853       add_bound_info (subrange_die, bound_attr, TREE_OPERAND (bound, 0));
16854       break;
16855
16856     case SAVE_EXPR:
16857       break;
16858
16859     case VAR_DECL:
16860     case PARM_DECL:
16861     case RESULT_DECL:
16862       {
16863         dw_die_ref decl_die = lookup_decl_die (bound);
16864
16865         /* ??? Can this happen, or should the variable have been bound
16866            first?  Probably it can, since I imagine that we try to create
16867            the types of parameters in the order in which they exist in
16868            the list, and won't have created a forward reference to a
16869            later parameter.  */
16870         if (decl_die != NULL)
16871           {
16872             add_AT_die_ref (subrange_die, bound_attr, decl_die);
16873             break;
16874           }
16875       }
16876       /* FALLTHRU */
16877
16878     default:
16879       {
16880         /* Otherwise try to create a stack operation procedure to
16881            evaluate the value of the array bound.  */
16882
16883         dw_die_ref ctx, decl_die;
16884         dw_loc_list_ref list;
16885
16886         list = loc_list_from_tree (bound, 2);
16887         if (list == NULL || single_element_loc_list_p (list))
16888           {
16889             /* If DW_AT_*bound is not a reference nor constant, it is
16890                a DWARF expression rather than location description.
16891                For that loc_list_from_tree (bound, 0) is needed.
16892                If that fails to give a single element list,
16893                fall back to outputting this as a reference anyway.  */
16894             dw_loc_list_ref list2 = loc_list_from_tree (bound, 0);
16895             if (list2 && single_element_loc_list_p (list2))
16896               {
16897                 add_AT_loc (subrange_die, bound_attr, list2->expr);
16898                 break;
16899               }
16900           }
16901         if (list == NULL)
16902           break;
16903
16904         if (current_function_decl == 0)
16905           ctx = comp_unit_die;
16906         else
16907           ctx = lookup_decl_die (current_function_decl);
16908
16909         decl_die = new_die (DW_TAG_variable, ctx, bound);
16910         add_AT_flag (decl_die, DW_AT_artificial, 1);
16911         add_type_attribute (decl_die, TREE_TYPE (bound), 1, 0, ctx);
16912         add_AT_location_description (decl_die, DW_AT_location, list);
16913         add_AT_die_ref (subrange_die, bound_attr, decl_die);
16914         break;
16915       }
16916     }
16917 }
16918
16919 /* Add subscript info to TYPE_DIE, describing an array TYPE, collapsing
16920    possibly nested array subscripts in a flat sequence if COLLAPSE_P is true.
16921    Note that the block of subscript information for an array type also
16922    includes information about the element type of the given array type.  */
16923
16924 static void
16925 add_subscript_info (dw_die_ref type_die, tree type, bool collapse_p)
16926 {
16927   unsigned dimension_number;
16928   tree lower, upper;
16929   dw_die_ref subrange_die;
16930
16931   for (dimension_number = 0;
16932        TREE_CODE (type) == ARRAY_TYPE && (dimension_number == 0 || collapse_p);
16933        type = TREE_TYPE (type), dimension_number++)
16934     {
16935       tree domain = TYPE_DOMAIN (type);
16936
16937       if (TYPE_STRING_FLAG (type) && is_fortran () && dimension_number > 0)
16938         break;
16939
16940       /* Arrays come in three flavors: Unspecified bounds, fixed bounds,
16941          and (in GNU C only) variable bounds.  Handle all three forms
16942          here.  */
16943       subrange_die = new_die (DW_TAG_subrange_type, type_die, NULL);
16944       if (domain)
16945         {
16946           /* We have an array type with specified bounds.  */
16947           lower = TYPE_MIN_VALUE (domain);
16948           upper = TYPE_MAX_VALUE (domain);
16949
16950           /* Define the index type.  */
16951           if (TREE_TYPE (domain))
16952             {
16953               /* ??? This is probably an Ada unnamed subrange type.  Ignore the
16954                  TREE_TYPE field.  We can't emit debug info for this
16955                  because it is an unnamed integral type.  */
16956               if (TREE_CODE (domain) == INTEGER_TYPE
16957                   && TYPE_NAME (domain) == NULL_TREE
16958                   && TREE_CODE (TREE_TYPE (domain)) == INTEGER_TYPE
16959                   && TYPE_NAME (TREE_TYPE (domain)) == NULL_TREE)
16960                 ;
16961               else
16962                 add_type_attribute (subrange_die, TREE_TYPE (domain), 0, 0,
16963                                     type_die);
16964             }
16965
16966           /* ??? If upper is NULL, the array has unspecified length,
16967              but it does have a lower bound.  This happens with Fortran
16968                dimension arr(N:*)
16969              Since the debugger is definitely going to need to know N
16970              to produce useful results, go ahead and output the lower
16971              bound solo, and hope the debugger can cope.  */
16972
16973           add_bound_info (subrange_die, DW_AT_lower_bound, lower);
16974           if (upper)
16975             add_bound_info (subrange_die, DW_AT_upper_bound, upper);
16976         }
16977
16978       /* Otherwise we have an array type with an unspecified length.  The
16979          DWARF-2 spec does not say how to handle this; let's just leave out the
16980          bounds.  */
16981     }
16982 }
16983
16984 static void
16985 add_byte_size_attribute (dw_die_ref die, tree tree_node)
16986 {
16987   unsigned size;
16988
16989   switch (TREE_CODE (tree_node))
16990     {
16991     case ERROR_MARK:
16992       size = 0;
16993       break;
16994     case ENUMERAL_TYPE:
16995     case RECORD_TYPE:
16996     case UNION_TYPE:
16997     case QUAL_UNION_TYPE:
16998       size = int_size_in_bytes (tree_node);
16999       break;
17000     case FIELD_DECL:
17001       /* For a data member of a struct or union, the DW_AT_byte_size is
17002          generally given as the number of bytes normally allocated for an
17003          object of the *declared* type of the member itself.  This is true
17004          even for bit-fields.  */
17005       size = simple_type_size_in_bits (field_type (tree_node)) / BITS_PER_UNIT;
17006       break;
17007     default:
17008       gcc_unreachable ();
17009     }
17010
17011   /* Note that `size' might be -1 when we get to this point.  If it is, that
17012      indicates that the byte size of the entity in question is variable.  We
17013      have no good way of expressing this fact in Dwarf at the present time,
17014      so just let the -1 pass on through.  */
17015   add_AT_unsigned (die, DW_AT_byte_size, size);
17016 }
17017
17018 /* For a FIELD_DECL node which represents a bit-field, output an attribute
17019    which specifies the distance in bits from the highest order bit of the
17020    "containing object" for the bit-field to the highest order bit of the
17021    bit-field itself.
17022
17023    For any given bit-field, the "containing object" is a hypothetical object
17024    (of some integral or enum type) within which the given bit-field lives.  The
17025    type of this hypothetical "containing object" is always the same as the
17026    declared type of the individual bit-field itself.  The determination of the
17027    exact location of the "containing object" for a bit-field is rather
17028    complicated.  It's handled by the `field_byte_offset' function (above).
17029
17030    Note that it is the size (in bytes) of the hypothetical "containing object"
17031    which will be given in the DW_AT_byte_size attribute for this bit-field.
17032    (See `byte_size_attribute' above).  */
17033
17034 static inline void
17035 add_bit_offset_attribute (dw_die_ref die, tree decl)
17036 {
17037   HOST_WIDE_INT object_offset_in_bytes = field_byte_offset (decl);
17038   tree type = DECL_BIT_FIELD_TYPE (decl);
17039   HOST_WIDE_INT bitpos_int;
17040   HOST_WIDE_INT highest_order_object_bit_offset;
17041   HOST_WIDE_INT highest_order_field_bit_offset;
17042   HOST_WIDE_INT unsigned bit_offset;
17043
17044   /* Must be a field and a bit field.  */
17045   gcc_assert (type && TREE_CODE (decl) == FIELD_DECL);
17046
17047   /* We can't yet handle bit-fields whose offsets are variable, so if we
17048      encounter such things, just return without generating any attribute
17049      whatsoever.  Likewise for variable or too large size.  */
17050   if (! host_integerp (bit_position (decl), 0)
17051       || ! host_integerp (DECL_SIZE (decl), 1))
17052     return;
17053
17054   bitpos_int = int_bit_position (decl);
17055
17056   /* Note that the bit offset is always the distance (in bits) from the
17057      highest-order bit of the "containing object" to the highest-order bit of
17058      the bit-field itself.  Since the "high-order end" of any object or field
17059      is different on big-endian and little-endian machines, the computation
17060      below must take account of these differences.  */
17061   highest_order_object_bit_offset = object_offset_in_bytes * BITS_PER_UNIT;
17062   highest_order_field_bit_offset = bitpos_int;
17063
17064   if (! BYTES_BIG_ENDIAN)
17065     {
17066       highest_order_field_bit_offset += tree_low_cst (DECL_SIZE (decl), 0);
17067       highest_order_object_bit_offset += simple_type_size_in_bits (type);
17068     }
17069
17070   bit_offset
17071     = (! BYTES_BIG_ENDIAN
17072        ? highest_order_object_bit_offset - highest_order_field_bit_offset
17073        : highest_order_field_bit_offset - highest_order_object_bit_offset);
17074
17075   add_AT_unsigned (die, DW_AT_bit_offset, bit_offset);
17076 }
17077
17078 /* For a FIELD_DECL node which represents a bit field, output an attribute
17079    which specifies the length in bits of the given field.  */
17080
17081 static inline void
17082 add_bit_size_attribute (dw_die_ref die, tree decl)
17083 {
17084   /* Must be a field and a bit field.  */
17085   gcc_assert (TREE_CODE (decl) == FIELD_DECL
17086               && DECL_BIT_FIELD_TYPE (decl));
17087
17088   if (host_integerp (DECL_SIZE (decl), 1))
17089     add_AT_unsigned (die, DW_AT_bit_size, tree_low_cst (DECL_SIZE (decl), 1));
17090 }
17091
17092 /* If the compiled language is ANSI C, then add a 'prototyped'
17093    attribute, if arg types are given for the parameters of a function.  */
17094
17095 static inline void
17096 add_prototyped_attribute (dw_die_ref die, tree func_type)
17097 {
17098   if (get_AT_unsigned (comp_unit_die, DW_AT_language) == DW_LANG_C89
17099       && TYPE_ARG_TYPES (func_type) != NULL)
17100     add_AT_flag (die, DW_AT_prototyped, 1);
17101 }
17102
17103 /* Add an 'abstract_origin' attribute below a given DIE.  The DIE is found
17104    by looking in either the type declaration or object declaration
17105    equate table.  */
17106
17107 static inline dw_die_ref
17108 add_abstract_origin_attribute (dw_die_ref die, tree origin)
17109 {
17110   dw_die_ref origin_die = NULL;
17111
17112   if (TREE_CODE (origin) != FUNCTION_DECL)
17113     {
17114       /* We may have gotten separated from the block for the inlined
17115          function, if we're in an exception handler or some such; make
17116          sure that the abstract function has been written out.
17117
17118          Doing this for nested functions is wrong, however; functions are
17119          distinct units, and our context might not even be inline.  */
17120       tree fn = origin;
17121
17122       if (TYPE_P (fn))
17123         fn = TYPE_STUB_DECL (fn);
17124
17125       fn = decl_function_context (fn);
17126       if (fn)
17127         dwarf2out_abstract_function (fn);
17128     }
17129
17130   if (DECL_P (origin))
17131     origin_die = lookup_decl_die (origin);
17132   else if (TYPE_P (origin))
17133     origin_die = lookup_type_die (origin);
17134
17135   /* XXX: Functions that are never lowered don't always have correct block
17136      trees (in the case of java, they simply have no block tree, in some other
17137      languages).  For these functions, there is nothing we can really do to
17138      output correct debug info for inlined functions in all cases.  Rather
17139      than die, we'll just produce deficient debug info now, in that we will
17140      have variables without a proper abstract origin.  In the future, when all
17141      functions are lowered, we should re-add a gcc_assert (origin_die)
17142      here.  */
17143
17144   if (origin_die)
17145     add_AT_die_ref (die, DW_AT_abstract_origin, origin_die);
17146   return origin_die;
17147 }
17148
17149 /* We do not currently support the pure_virtual attribute.  */
17150
17151 static inline void
17152 add_pure_or_virtual_attribute (dw_die_ref die, tree func_decl)
17153 {
17154   if (DECL_VINDEX (func_decl))
17155     {
17156       add_AT_unsigned (die, DW_AT_virtuality, DW_VIRTUALITY_virtual);
17157
17158       if (host_integerp (DECL_VINDEX (func_decl), 0))
17159         add_AT_loc (die, DW_AT_vtable_elem_location,
17160                     new_loc_descr (DW_OP_constu,
17161                                    tree_low_cst (DECL_VINDEX (func_decl), 0),
17162                                    0));
17163
17164       /* GNU extension: Record what type this method came from originally.  */
17165       if (debug_info_level > DINFO_LEVEL_TERSE
17166           && DECL_CONTEXT (func_decl))
17167         add_AT_die_ref (die, DW_AT_containing_type,
17168                         lookup_type_die (DECL_CONTEXT (func_decl)));
17169     }
17170 }
17171 \f
17172 /* Add source coordinate attributes for the given decl.  */
17173
17174 static void
17175 add_src_coords_attributes (dw_die_ref die, tree decl)
17176 {
17177   expanded_location s = expand_location (DECL_SOURCE_LOCATION (decl));
17178
17179   add_AT_file (die, DW_AT_decl_file, lookup_filename (s.file));
17180   add_AT_unsigned (die, DW_AT_decl_line, s.line);
17181 }
17182
17183 /* Add a DW_AT_name attribute and source coordinate attribute for the
17184    given decl, but only if it actually has a name.  */
17185
17186 static void
17187 add_name_and_src_coords_attributes (dw_die_ref die, tree decl)
17188 {
17189   tree decl_name;
17190
17191   decl_name = DECL_NAME (decl);
17192   if (decl_name != NULL && IDENTIFIER_POINTER (decl_name) != NULL)
17193     {
17194       const char *name = dwarf2_name (decl, 0);
17195       if (name)
17196         add_name_attribute (die, name);
17197       if (! DECL_ARTIFICIAL (decl))
17198         add_src_coords_attributes (die, decl);
17199
17200       if ((TREE_CODE (decl) == FUNCTION_DECL || TREE_CODE (decl) == VAR_DECL)
17201           && TREE_PUBLIC (decl)
17202           && !DECL_ABSTRACT (decl)
17203           && !(TREE_CODE (decl) == VAR_DECL && DECL_REGISTER (decl)))
17204         {
17205           /* Defer until we have an assembler name set.  */
17206           if (!DECL_ASSEMBLER_NAME_SET_P (decl))
17207             {
17208               limbo_die_node *asm_name;
17209
17210               asm_name = GGC_CNEW (limbo_die_node);
17211               asm_name->die = die;
17212               asm_name->created_for = decl;
17213               asm_name->next = deferred_asm_name;
17214               deferred_asm_name = asm_name;
17215             }
17216           else if (DECL_ASSEMBLER_NAME (decl) != DECL_NAME (decl))
17217             add_AT_string (die, AT_linkage_name,
17218                            IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl)));
17219         }
17220     }
17221
17222 #ifdef VMS_DEBUGGING_INFO
17223   /* Get the function's name, as described by its RTL.  This may be different
17224      from the DECL_NAME name used in the source file.  */
17225   if (TREE_CODE (decl) == FUNCTION_DECL && TREE_ASM_WRITTEN (decl))
17226     {
17227       add_AT_addr (die, DW_AT_VMS_rtnbeg_pd_address,
17228                    XEXP (DECL_RTL (decl), 0));
17229       VEC_safe_push (rtx, gc, used_rtx_array, XEXP (DECL_RTL (decl), 0));
17230     }
17231 #endif
17232 }
17233
17234 /* Push a new declaration scope.  */
17235
17236 static void
17237 push_decl_scope (tree scope)
17238 {
17239   VEC_safe_push (tree, gc, decl_scope_table, scope);
17240 }
17241
17242 /* Pop a declaration scope.  */
17243
17244 static inline void
17245 pop_decl_scope (void)
17246 {
17247   VEC_pop (tree, decl_scope_table);
17248 }
17249
17250 /* Return the DIE for the scope that immediately contains this type.
17251    Non-named types get global scope.  Named types nested in other
17252    types get their containing scope if it's open, or global scope
17253    otherwise.  All other types (i.e. function-local named types) get
17254    the current active scope.  */
17255
17256 static dw_die_ref
17257 scope_die_for (tree t, dw_die_ref context_die)
17258 {
17259   dw_die_ref scope_die = NULL;
17260   tree containing_scope;
17261   int i;
17262
17263   /* Non-types always go in the current scope.  */
17264   gcc_assert (TYPE_P (t));
17265
17266   containing_scope = TYPE_CONTEXT (t);
17267
17268   /* Use the containing namespace if it was passed in (for a declaration).  */
17269   if (containing_scope && TREE_CODE (containing_scope) == NAMESPACE_DECL)
17270     {
17271       if (context_die == lookup_decl_die (containing_scope))
17272         /* OK */;
17273       else
17274         containing_scope = NULL_TREE;
17275     }
17276
17277   /* Ignore function type "scopes" from the C frontend.  They mean that
17278      a tagged type is local to a parmlist of a function declarator, but
17279      that isn't useful to DWARF.  */
17280   if (containing_scope && TREE_CODE (containing_scope) == FUNCTION_TYPE)
17281     containing_scope = NULL_TREE;
17282
17283   if (containing_scope == NULL_TREE)
17284     scope_die = comp_unit_die;
17285   else if (TYPE_P (containing_scope))
17286     {
17287       /* For types, we can just look up the appropriate DIE.  But
17288          first we check to see if we're in the middle of emitting it
17289          so we know where the new DIE should go.  */
17290       for (i = VEC_length (tree, decl_scope_table) - 1; i >= 0; --i)
17291         if (VEC_index (tree, decl_scope_table, i) == containing_scope)
17292           break;
17293
17294       if (i < 0)
17295         {
17296           gcc_assert (debug_info_level <= DINFO_LEVEL_TERSE
17297                       || TREE_ASM_WRITTEN (containing_scope));
17298
17299           /* If none of the current dies are suitable, we get file scope.  */
17300           scope_die = comp_unit_die;
17301         }
17302       else
17303         scope_die = lookup_type_die (containing_scope);
17304     }
17305   else
17306     scope_die = context_die;
17307
17308   return scope_die;
17309 }
17310
17311 /* Returns nonzero if CONTEXT_DIE is internal to a function.  */
17312
17313 static inline int
17314 local_scope_p (dw_die_ref context_die)
17315 {
17316   for (; context_die; context_die = context_die->die_parent)
17317     if (context_die->die_tag == DW_TAG_inlined_subroutine
17318         || context_die->die_tag == DW_TAG_subprogram)
17319       return 1;
17320
17321   return 0;
17322 }
17323
17324 /* Returns nonzero if CONTEXT_DIE is a class.  */
17325
17326 static inline int
17327 class_scope_p (dw_die_ref context_die)
17328 {
17329   return (context_die
17330           && (context_die->die_tag == DW_TAG_structure_type
17331               || context_die->die_tag == DW_TAG_class_type
17332               || context_die->die_tag == DW_TAG_interface_type
17333               || context_die->die_tag == DW_TAG_union_type));
17334 }
17335
17336 /* Returns nonzero if CONTEXT_DIE is a class or namespace, for deciding
17337    whether or not to treat a DIE in this context as a declaration.  */
17338
17339 static inline int
17340 class_or_namespace_scope_p (dw_die_ref context_die)
17341 {
17342   return (class_scope_p (context_die)
17343           || (context_die && context_die->die_tag == DW_TAG_namespace));
17344 }
17345
17346 /* Many forms of DIEs require a "type description" attribute.  This
17347    routine locates the proper "type descriptor" die for the type given
17348    by 'type', and adds a DW_AT_type attribute below the given die.  */
17349
17350 static void
17351 add_type_attribute (dw_die_ref object_die, tree type, int decl_const,
17352                     int decl_volatile, dw_die_ref context_die)
17353 {
17354   enum tree_code code  = TREE_CODE (type);
17355   dw_die_ref type_die  = NULL;
17356
17357   /* ??? If this type is an unnamed subrange type of an integral, floating-point
17358      or fixed-point type, use the inner type.  This is because we have no
17359      support for unnamed types in base_type_die.  This can happen if this is
17360      an Ada subrange type.  Correct solution is emit a subrange type die.  */
17361   if ((code == INTEGER_TYPE || code == REAL_TYPE || code == FIXED_POINT_TYPE)
17362       && TREE_TYPE (type) != 0 && TYPE_NAME (type) == 0)
17363     type = TREE_TYPE (type), code = TREE_CODE (type);
17364
17365   if (code == ERROR_MARK
17366       /* Handle a special case.  For functions whose return type is void, we
17367          generate *no* type attribute.  (Note that no object may have type
17368          `void', so this only applies to function return types).  */
17369       || code == VOID_TYPE)
17370     return;
17371
17372   type_die = modified_type_die (type,
17373                                 decl_const || TYPE_READONLY (type),
17374                                 decl_volatile || TYPE_VOLATILE (type),
17375                                 context_die);
17376
17377   if (type_die != NULL)
17378     add_AT_die_ref (object_die, DW_AT_type, type_die);
17379 }
17380
17381 /* Given an object die, add the calling convention attribute for the
17382    function call type.  */
17383 static void
17384 add_calling_convention_attribute (dw_die_ref subr_die, tree decl)
17385 {
17386   enum dwarf_calling_convention value = DW_CC_normal;
17387
17388   value = ((enum dwarf_calling_convention)
17389            targetm.dwarf_calling_convention (TREE_TYPE (decl)));
17390
17391   /* DWARF doesn't provide a way to identify a program's source-level
17392      entry point.  DW_AT_calling_convention attributes are only meant
17393      to describe functions' calling conventions.  However, lacking a
17394      better way to signal the Fortran main program, we use this for the
17395      time being, following existing custom.  */
17396   if (is_fortran ()
17397       && !strcmp (IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl)), "MAIN__"))
17398     value = DW_CC_program;
17399
17400   /* Only add the attribute if the backend requests it, and
17401      is not DW_CC_normal.  */
17402   if (value && (value != DW_CC_normal))
17403     add_AT_unsigned (subr_die, DW_AT_calling_convention, value);
17404 }
17405
17406 /* Given a tree pointer to a struct, class, union, or enum type node, return
17407    a pointer to the (string) tag name for the given type, or zero if the type
17408    was declared without a tag.  */
17409
17410 static const char *
17411 type_tag (const_tree type)
17412 {
17413   const char *name = 0;
17414
17415   if (TYPE_NAME (type) != 0)
17416     {
17417       tree t = 0;
17418
17419       /* Find the IDENTIFIER_NODE for the type name.  */
17420       if (TREE_CODE (TYPE_NAME (type)) == IDENTIFIER_NODE)
17421         t = TYPE_NAME (type);
17422
17423       /* The g++ front end makes the TYPE_NAME of *each* tagged type point to
17424          a TYPE_DECL node, regardless of whether or not a `typedef' was
17425          involved.  */
17426       else if (TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
17427                && ! DECL_IGNORED_P (TYPE_NAME (type)))
17428         {
17429           /* We want to be extra verbose.  Don't call dwarf_name if
17430              DECL_NAME isn't set.  The default hook for decl_printable_name
17431              doesn't like that, and in this context it's correct to return
17432              0, instead of "<anonymous>" or the like.  */
17433           if (DECL_NAME (TYPE_NAME (type)))
17434             name = lang_hooks.dwarf_name (TYPE_NAME (type), 2);
17435         }
17436
17437       /* Now get the name as a string, or invent one.  */
17438       if (!name && t != 0)
17439         name = IDENTIFIER_POINTER (t);
17440     }
17441
17442   return (name == 0 || *name == '\0') ? 0 : name;
17443 }
17444
17445 /* Return the type associated with a data member, make a special check
17446    for bit field types.  */
17447
17448 static inline tree
17449 member_declared_type (const_tree member)
17450 {
17451   return (DECL_BIT_FIELD_TYPE (member)
17452           ? DECL_BIT_FIELD_TYPE (member) : TREE_TYPE (member));
17453 }
17454
17455 /* Get the decl's label, as described by its RTL. This may be different
17456    from the DECL_NAME name used in the source file.  */
17457
17458 #if 0
17459 static const char *
17460 decl_start_label (tree decl)
17461 {
17462   rtx x;
17463   const char *fnname;
17464
17465   x = DECL_RTL (decl);
17466   gcc_assert (MEM_P (x));
17467
17468   x = XEXP (x, 0);
17469   gcc_assert (GET_CODE (x) == SYMBOL_REF);
17470
17471   fnname = XSTR (x, 0);
17472   return fnname;
17473 }
17474 #endif
17475 \f
17476 /* These routines generate the internal representation of the DIE's for
17477    the compilation unit.  Debugging information is collected by walking
17478    the declaration trees passed in from dwarf2out_decl().  */
17479
17480 static void
17481 gen_array_type_die (tree type, dw_die_ref context_die)
17482 {
17483   dw_die_ref scope_die = scope_die_for (type, context_die);
17484   dw_die_ref array_die;
17485
17486   /* GNU compilers represent multidimensional array types as sequences of one
17487      dimensional array types whose element types are themselves array types.
17488      We sometimes squish that down to a single array_type DIE with multiple
17489      subscripts in the Dwarf debugging info.  The draft Dwarf specification
17490      say that we are allowed to do this kind of compression in C, because
17491      there is no difference between an array of arrays and a multidimensional
17492      array.  We don't do this for Ada to remain as close as possible to the
17493      actual representation, which is especially important against the language
17494      flexibilty wrt arrays of variable size.  */
17495
17496   bool collapse_nested_arrays = !is_ada ();
17497   tree element_type;
17498
17499   /* Emit DW_TAG_string_type for Fortran character types (with kind 1 only, as
17500      DW_TAG_string_type doesn't have DW_AT_type attribute).  */
17501   if (TYPE_STRING_FLAG (type)
17502       && TREE_CODE (type) == ARRAY_TYPE
17503       && is_fortran ()
17504       && TYPE_MODE (TREE_TYPE (type)) == TYPE_MODE (char_type_node))
17505     {
17506       HOST_WIDE_INT size;
17507
17508       array_die = new_die (DW_TAG_string_type, scope_die, type);
17509       add_name_attribute (array_die, type_tag (type));
17510       equate_type_number_to_die (type, array_die);
17511       size = int_size_in_bytes (type);
17512       if (size >= 0)
17513         add_AT_unsigned (array_die, DW_AT_byte_size, size);
17514       else if (TYPE_DOMAIN (type) != NULL_TREE
17515                && TYPE_MAX_VALUE (TYPE_DOMAIN (type)) != NULL_TREE
17516                && DECL_P (TYPE_MAX_VALUE (TYPE_DOMAIN (type))))
17517         {
17518           tree szdecl = TYPE_MAX_VALUE (TYPE_DOMAIN (type));
17519           dw_loc_list_ref loc = loc_list_from_tree (szdecl, 2);
17520
17521           size = int_size_in_bytes (TREE_TYPE (szdecl));
17522           if (loc && size > 0)
17523             {
17524               add_AT_location_description (array_die, DW_AT_string_length, loc);
17525               if (size != DWARF2_ADDR_SIZE)
17526                 add_AT_unsigned (array_die, DW_AT_byte_size, size);
17527             }
17528         }
17529       return;
17530     }
17531
17532   /* ??? The SGI dwarf reader fails for array of array of enum types
17533      (e.g. const enum machine_mode insn_operand_mode[2][10]) unless the inner
17534      array type comes before the outer array type.  We thus call gen_type_die
17535      before we new_die and must prevent nested array types collapsing for this
17536      target.  */
17537
17538 #ifdef MIPS_DEBUGGING_INFO
17539   gen_type_die (TREE_TYPE (type), context_die);
17540   collapse_nested_arrays = false;
17541 #endif
17542
17543   array_die = new_die (DW_TAG_array_type, scope_die, type);
17544   add_name_attribute (array_die, type_tag (type));
17545   equate_type_number_to_die (type, array_die);
17546
17547   if (TREE_CODE (type) == VECTOR_TYPE)
17548     {
17549       /* The frontend feeds us a representation for the vector as a struct
17550          containing an array.  Pull out the array type.  */
17551       type = TREE_TYPE (TYPE_FIELDS (TYPE_DEBUG_REPRESENTATION_TYPE (type)));
17552       add_AT_flag (array_die, DW_AT_GNU_vector, 1);
17553     }
17554
17555   /* For Fortran multidimensional arrays use DW_ORD_col_major ordering.  */
17556   if (is_fortran ()
17557       && TREE_CODE (type) == ARRAY_TYPE
17558       && TREE_CODE (TREE_TYPE (type)) == ARRAY_TYPE
17559       && !TYPE_STRING_FLAG (TREE_TYPE (type)))
17560     add_AT_unsigned (array_die, DW_AT_ordering, DW_ORD_col_major);
17561
17562 #if 0
17563   /* We default the array ordering.  SDB will probably do
17564      the right things even if DW_AT_ordering is not present.  It's not even
17565      an issue until we start to get into multidimensional arrays anyway.  If
17566      SDB is ever caught doing the Wrong Thing for multi-dimensional arrays,
17567      then we'll have to put the DW_AT_ordering attribute back in.  (But if
17568      and when we find out that we need to put these in, we will only do so
17569      for multidimensional arrays.  */
17570   add_AT_unsigned (array_die, DW_AT_ordering, DW_ORD_row_major);
17571 #endif
17572
17573 #ifdef MIPS_DEBUGGING_INFO
17574   /* The SGI compilers handle arrays of unknown bound by setting
17575      AT_declaration and not emitting any subrange DIEs.  */
17576   if (! TYPE_DOMAIN (type))
17577     add_AT_flag (array_die, DW_AT_declaration, 1);
17578   else
17579 #endif
17580     add_subscript_info (array_die, type, collapse_nested_arrays);
17581
17582   /* Add representation of the type of the elements of this array type and
17583      emit the corresponding DIE if we haven't done it already.  */
17584   element_type = TREE_TYPE (type);
17585   if (collapse_nested_arrays)
17586     while (TREE_CODE (element_type) == ARRAY_TYPE)
17587       {
17588         if (TYPE_STRING_FLAG (element_type) && is_fortran ())
17589           break;
17590         element_type = TREE_TYPE (element_type);
17591       }
17592
17593 #ifndef MIPS_DEBUGGING_INFO
17594   gen_type_die (element_type, context_die);
17595 #endif
17596
17597   add_type_attribute (array_die, element_type, 0, 0, context_die);
17598
17599   if (get_AT (array_die, DW_AT_name))
17600     add_pubtype (type, array_die);
17601 }
17602
17603 static dw_loc_descr_ref
17604 descr_info_loc (tree val, tree base_decl)
17605 {
17606   HOST_WIDE_INT size;
17607   dw_loc_descr_ref loc, loc2;
17608   enum dwarf_location_atom op;
17609
17610   if (val == base_decl)
17611     return new_loc_descr (DW_OP_push_object_address, 0, 0);
17612
17613   switch (TREE_CODE (val))
17614     {
17615     CASE_CONVERT:
17616       return descr_info_loc (TREE_OPERAND (val, 0), base_decl);
17617     case VAR_DECL:
17618       return loc_descriptor_from_tree (val, 0);
17619     case INTEGER_CST:
17620       if (host_integerp (val, 0))
17621         return int_loc_descriptor (tree_low_cst (val, 0));
17622       break;
17623     case INDIRECT_REF:
17624       size = int_size_in_bytes (TREE_TYPE (val));
17625       if (size < 0)
17626         break;
17627       loc = descr_info_loc (TREE_OPERAND (val, 0), base_decl);
17628       if (!loc)
17629         break;
17630       if (size == DWARF2_ADDR_SIZE)
17631         add_loc_descr (&loc, new_loc_descr (DW_OP_deref, 0, 0));
17632       else
17633         add_loc_descr (&loc, new_loc_descr (DW_OP_deref_size, size, 0));
17634       return loc;
17635     case POINTER_PLUS_EXPR:
17636     case PLUS_EXPR:
17637       if (host_integerp (TREE_OPERAND (val, 1), 1)
17638           && (unsigned HOST_WIDE_INT) tree_low_cst (TREE_OPERAND (val, 1), 1)
17639              < 16384)
17640         {
17641           loc = descr_info_loc (TREE_OPERAND (val, 0), base_decl);
17642           if (!loc)
17643             break;
17644           loc_descr_plus_const (&loc, tree_low_cst (TREE_OPERAND (val, 1), 0));
17645         }
17646       else
17647         {
17648           op = DW_OP_plus;
17649         do_binop:
17650           loc = descr_info_loc (TREE_OPERAND (val, 0), base_decl);
17651           if (!loc)
17652             break;
17653           loc2 = descr_info_loc (TREE_OPERAND (val, 1), base_decl);
17654           if (!loc2)
17655             break;
17656           add_loc_descr (&loc, loc2);
17657           add_loc_descr (&loc2, new_loc_descr (op, 0, 0));
17658         }
17659       return loc;
17660     case MINUS_EXPR:
17661       op = DW_OP_minus;
17662       goto do_binop;
17663     case MULT_EXPR:
17664       op = DW_OP_mul;
17665       goto do_binop;
17666     case EQ_EXPR:
17667       op = DW_OP_eq;
17668       goto do_binop;
17669     case NE_EXPR:
17670       op = DW_OP_ne;
17671       goto do_binop;
17672     default:
17673       break;
17674     }
17675   return NULL;
17676 }
17677
17678 static void
17679 add_descr_info_field (dw_die_ref die, enum dwarf_attribute attr,
17680                       tree val, tree base_decl)
17681 {
17682   dw_loc_descr_ref loc;
17683
17684   if (host_integerp (val, 0))
17685     {
17686       add_AT_unsigned (die, attr, tree_low_cst (val, 0));
17687       return;
17688     }
17689
17690   loc = descr_info_loc (val, base_decl);
17691   if (!loc)
17692     return;
17693
17694   add_AT_loc (die, attr, loc);
17695 }
17696
17697 /* This routine generates DIE for array with hidden descriptor, details
17698    are filled into *info by a langhook.  */
17699
17700 static void
17701 gen_descr_array_type_die (tree type, struct array_descr_info *info,
17702                           dw_die_ref context_die)
17703 {
17704   dw_die_ref scope_die = scope_die_for (type, context_die);
17705   dw_die_ref array_die;
17706   int dim;
17707
17708   array_die = new_die (DW_TAG_array_type, scope_die, type);
17709   add_name_attribute (array_die, type_tag (type));
17710   equate_type_number_to_die (type, array_die);
17711
17712   /* For Fortran multidimensional arrays use DW_ORD_col_major ordering.  */
17713   if (is_fortran ()
17714       && info->ndimensions >= 2)
17715     add_AT_unsigned (array_die, DW_AT_ordering, DW_ORD_col_major);
17716
17717   if (info->data_location)
17718     add_descr_info_field (array_die, DW_AT_data_location, info->data_location,
17719                           info->base_decl);
17720   if (info->associated)
17721     add_descr_info_field (array_die, DW_AT_associated, info->associated,
17722                           info->base_decl);
17723   if (info->allocated)
17724     add_descr_info_field (array_die, DW_AT_allocated, info->allocated,
17725                           info->base_decl);
17726
17727   for (dim = 0; dim < info->ndimensions; dim++)
17728     {
17729       dw_die_ref subrange_die
17730         = new_die (DW_TAG_subrange_type, array_die, NULL);
17731
17732       if (info->dimen[dim].lower_bound)
17733         {
17734           /* If it is the default value, omit it.  */
17735           int dflt;
17736
17737           if (host_integerp (info->dimen[dim].lower_bound, 0)
17738               && (dflt = lower_bound_default ()) != -1
17739               && tree_low_cst (info->dimen[dim].lower_bound, 0) == dflt)
17740             ;
17741           else
17742             add_descr_info_field (subrange_die, DW_AT_lower_bound,
17743                                   info->dimen[dim].lower_bound,
17744                                   info->base_decl);
17745         }
17746       if (info->dimen[dim].upper_bound)
17747         add_descr_info_field (subrange_die, DW_AT_upper_bound,
17748                               info->dimen[dim].upper_bound,
17749                               info->base_decl);
17750       if (info->dimen[dim].stride)
17751         add_descr_info_field (subrange_die, DW_AT_byte_stride,
17752                               info->dimen[dim].stride,
17753                               info->base_decl);
17754     }
17755
17756   gen_type_die (info->element_type, context_die);
17757   add_type_attribute (array_die, info->element_type, 0, 0, context_die);
17758
17759   if (get_AT (array_die, DW_AT_name))
17760     add_pubtype (type, array_die);
17761 }
17762
17763 #if 0
17764 static void
17765 gen_entry_point_die (tree decl, dw_die_ref context_die)
17766 {
17767   tree origin = decl_ultimate_origin (decl);
17768   dw_die_ref decl_die = new_die (DW_TAG_entry_point, context_die, decl);
17769
17770   if (origin != NULL)
17771     add_abstract_origin_attribute (decl_die, origin);
17772   else
17773     {
17774       add_name_and_src_coords_attributes (decl_die, decl);
17775       add_type_attribute (decl_die, TREE_TYPE (TREE_TYPE (decl)),
17776                           0, 0, context_die);
17777     }
17778
17779   if (DECL_ABSTRACT (decl))
17780     equate_decl_number_to_die (decl, decl_die);
17781   else
17782     add_AT_lbl_id (decl_die, DW_AT_low_pc, decl_start_label (decl));
17783 }
17784 #endif
17785
17786 /* Walk through the list of incomplete types again, trying once more to
17787    emit full debugging info for them.  */
17788
17789 static void
17790 retry_incomplete_types (void)
17791 {
17792   int i;
17793
17794   for (i = VEC_length (tree, incomplete_types) - 1; i >= 0; i--)
17795     if (should_emit_struct_debug (VEC_index (tree, incomplete_types, i),
17796                                   DINFO_USAGE_DIR_USE))
17797       gen_type_die (VEC_index (tree, incomplete_types, i), comp_unit_die);
17798 }
17799
17800 /* Determine what tag to use for a record type.  */
17801
17802 static enum dwarf_tag
17803 record_type_tag (tree type)
17804 {
17805   if (! lang_hooks.types.classify_record)
17806     return DW_TAG_structure_type;
17807
17808   switch (lang_hooks.types.classify_record (type))
17809     {
17810     case RECORD_IS_STRUCT:
17811       return DW_TAG_structure_type;
17812
17813     case RECORD_IS_CLASS:
17814       return DW_TAG_class_type;
17815
17816     case RECORD_IS_INTERFACE:
17817       if (dwarf_version >= 3 || !dwarf_strict)
17818         return DW_TAG_interface_type;
17819       return DW_TAG_structure_type;
17820
17821     default:
17822       gcc_unreachable ();
17823     }
17824 }
17825
17826 /* Generate a DIE to represent an enumeration type.  Note that these DIEs
17827    include all of the information about the enumeration values also. Each
17828    enumerated type name/value is listed as a child of the enumerated type
17829    DIE.  */
17830
17831 static dw_die_ref
17832 gen_enumeration_type_die (tree type, dw_die_ref context_die)
17833 {
17834   dw_die_ref type_die = lookup_type_die (type);
17835
17836   if (type_die == NULL)
17837     {
17838       type_die = new_die (DW_TAG_enumeration_type,
17839                           scope_die_for (type, context_die), type);
17840       equate_type_number_to_die (type, type_die);
17841       add_name_attribute (type_die, type_tag (type));
17842       if ((dwarf_version >= 4 || !dwarf_strict)
17843           && ENUM_IS_SCOPED (type))
17844         add_AT_flag (type_die, DW_AT_enum_class, 1);
17845     }
17846   else if (! TYPE_SIZE (type))
17847     return type_die;
17848   else
17849     remove_AT (type_die, DW_AT_declaration);
17850
17851   /* Handle a GNU C/C++ extension, i.e. incomplete enum types.  If the
17852      given enum type is incomplete, do not generate the DW_AT_byte_size
17853      attribute or the DW_AT_element_list attribute.  */
17854   if (TYPE_SIZE (type))
17855     {
17856       tree link;
17857
17858       TREE_ASM_WRITTEN (type) = 1;
17859       add_byte_size_attribute (type_die, type);
17860       if (TYPE_STUB_DECL (type) != NULL_TREE)
17861         add_src_coords_attributes (type_die, TYPE_STUB_DECL (type));
17862
17863       /* If the first reference to this type was as the return type of an
17864          inline function, then it may not have a parent.  Fix this now.  */
17865       if (type_die->die_parent == NULL)
17866         add_child_die (scope_die_for (type, context_die), type_die);
17867
17868       for (link = TYPE_VALUES (type);
17869            link != NULL; link = TREE_CHAIN (link))
17870         {
17871           dw_die_ref enum_die = new_die (DW_TAG_enumerator, type_die, link);
17872           tree value = TREE_VALUE (link);
17873
17874           add_name_attribute (enum_die,
17875                               IDENTIFIER_POINTER (TREE_PURPOSE (link)));
17876
17877           if (TREE_CODE (value) == CONST_DECL)
17878             value = DECL_INITIAL (value);
17879
17880           if (host_integerp (value, TYPE_UNSIGNED (TREE_TYPE (value))))
17881             /* DWARF2 does not provide a way of indicating whether or
17882                not enumeration constants are signed or unsigned.  GDB
17883                always assumes the values are signed, so we output all
17884                values as if they were signed.  That means that
17885                enumeration constants with very large unsigned values
17886                will appear to have negative values in the debugger.  */
17887             add_AT_int (enum_die, DW_AT_const_value,
17888                         tree_low_cst (value, tree_int_cst_sgn (value) > 0));
17889         }
17890     }
17891   else
17892     add_AT_flag (type_die, DW_AT_declaration, 1);
17893
17894   if (get_AT (type_die, DW_AT_name))
17895     add_pubtype (type, type_die);
17896
17897   return type_die;
17898 }
17899
17900 /* Generate a DIE to represent either a real live formal parameter decl or to
17901    represent just the type of some formal parameter position in some function
17902    type.
17903
17904    Note that this routine is a bit unusual because its argument may be a
17905    ..._DECL node (i.e. either a PARM_DECL or perhaps a VAR_DECL which
17906    represents an inlining of some PARM_DECL) or else some sort of a ..._TYPE
17907    node.  If it's the former then this function is being called to output a
17908    DIE to represent a formal parameter object (or some inlining thereof).  If
17909    it's the latter, then this function is only being called to output a
17910    DW_TAG_formal_parameter DIE to stand as a placeholder for some formal
17911    argument type of some subprogram type.
17912    If EMIT_NAME_P is true, name and source coordinate attributes
17913    are emitted.  */
17914
17915 static dw_die_ref
17916 gen_formal_parameter_die (tree node, tree origin, bool emit_name_p,
17917                           dw_die_ref context_die)
17918 {
17919   tree node_or_origin = node ? node : origin;
17920   tree ultimate_origin;
17921   dw_die_ref parm_die
17922     = new_die (DW_TAG_formal_parameter, context_die, node);
17923
17924   switch (TREE_CODE_CLASS (TREE_CODE (node_or_origin)))
17925     {
17926     case tcc_declaration:
17927       ultimate_origin = decl_ultimate_origin (node_or_origin);
17928       if (node || ultimate_origin)
17929         origin = ultimate_origin;
17930       if (origin != NULL)
17931         add_abstract_origin_attribute (parm_die, origin);
17932       else if (emit_name_p)
17933         add_name_and_src_coords_attributes (parm_die, node);
17934       if (origin == NULL
17935           || (! DECL_ABSTRACT (node_or_origin)
17936               && variably_modified_type_p (TREE_TYPE (node_or_origin),
17937                                            decl_function_context
17938                                                             (node_or_origin))))
17939         {
17940           tree type = TREE_TYPE (node_or_origin);
17941           if (decl_by_reference_p (node_or_origin))
17942             add_type_attribute (parm_die, TREE_TYPE (type), 0, 0,
17943                                 context_die);
17944           else
17945             add_type_attribute (parm_die, type,
17946                                 TREE_READONLY (node_or_origin),
17947                                 TREE_THIS_VOLATILE (node_or_origin),
17948                                 context_die);
17949         }
17950       if (origin == NULL && DECL_ARTIFICIAL (node))
17951         add_AT_flag (parm_die, DW_AT_artificial, 1);
17952
17953       if (node && node != origin)
17954         equate_decl_number_to_die (node, parm_die);
17955       if (! DECL_ABSTRACT (node_or_origin))
17956         add_location_or_const_value_attribute (parm_die, node_or_origin,
17957                                                DW_AT_location);
17958
17959       break;
17960
17961     case tcc_type:
17962       /* We were called with some kind of a ..._TYPE node.  */
17963       add_type_attribute (parm_die, node_or_origin, 0, 0, context_die);
17964       break;
17965
17966     default:
17967       gcc_unreachable ();
17968     }
17969
17970   return parm_die;
17971 }
17972
17973 /* Generate and return a DW_TAG_GNU_formal_parameter_pack. Also generate
17974    children DW_TAG_formal_parameter DIEs representing the arguments of the
17975    parameter pack.
17976
17977    PARM_PACK must be a function parameter pack.
17978    PACK_ARG is the first argument of the parameter pack. Its TREE_CHAIN
17979    must point to the subsequent arguments of the function PACK_ARG belongs to.
17980    SUBR_DIE is the DIE of the function PACK_ARG belongs to.
17981    If NEXT_ARG is non NULL, *NEXT_ARG is set to the function argument
17982    following the last one for which a DIE was generated.  */
17983
17984 static dw_die_ref
17985 gen_formal_parameter_pack_die  (tree parm_pack,
17986                                 tree pack_arg,
17987                                 dw_die_ref subr_die,
17988                                 tree *next_arg)
17989 {
17990   tree arg;
17991   dw_die_ref parm_pack_die;
17992
17993   gcc_assert (parm_pack
17994               && lang_hooks.function_parameter_pack_p (parm_pack)
17995               && subr_die);
17996
17997   parm_pack_die = new_die (DW_TAG_GNU_formal_parameter_pack, subr_die, parm_pack);
17998   add_src_coords_attributes (parm_pack_die, parm_pack);
17999
18000   for (arg = pack_arg; arg; arg = TREE_CHAIN (arg))
18001     {
18002       if (! lang_hooks.decls.function_parm_expanded_from_pack_p (arg,
18003                                                                  parm_pack))
18004         break;
18005       gen_formal_parameter_die (arg, NULL,
18006                                 false /* Don't emit name attribute.  */,
18007                                 parm_pack_die);
18008     }
18009   if (next_arg)
18010     *next_arg = arg;
18011   return parm_pack_die;
18012 }
18013
18014 /* Generate a special type of DIE used as a stand-in for a trailing ellipsis
18015    at the end of an (ANSI prototyped) formal parameters list.  */
18016
18017 static void
18018 gen_unspecified_parameters_die (tree decl_or_type, dw_die_ref context_die)
18019 {
18020   new_die (DW_TAG_unspecified_parameters, context_die, decl_or_type);
18021 }
18022
18023 /* Generate a list of nameless DW_TAG_formal_parameter DIEs (and perhaps a
18024    DW_TAG_unspecified_parameters DIE) to represent the types of the formal
18025    parameters as specified in some function type specification (except for
18026    those which appear as part of a function *definition*).  */
18027
18028 static void
18029 gen_formal_types_die (tree function_or_method_type, dw_die_ref context_die)
18030 {
18031   tree link;
18032   tree formal_type = NULL;
18033   tree first_parm_type;
18034   tree arg;
18035
18036   if (TREE_CODE (function_or_method_type) == FUNCTION_DECL)
18037     {
18038       arg = DECL_ARGUMENTS (function_or_method_type);
18039       function_or_method_type = TREE_TYPE (function_or_method_type);
18040     }
18041   else
18042     arg = NULL_TREE;
18043
18044   first_parm_type = TYPE_ARG_TYPES (function_or_method_type);
18045
18046   /* Make our first pass over the list of formal parameter types and output a
18047      DW_TAG_formal_parameter DIE for each one.  */
18048   for (link = first_parm_type; link; )
18049     {
18050       dw_die_ref parm_die;
18051
18052       formal_type = TREE_VALUE (link);
18053       if (formal_type == void_type_node)
18054         break;
18055
18056       /* Output a (nameless) DIE to represent the formal parameter itself.  */
18057       parm_die = gen_formal_parameter_die (formal_type, NULL,
18058                                            true /* Emit name attribute.  */,
18059                                            context_die);
18060       if ((TREE_CODE (function_or_method_type) == METHOD_TYPE
18061            && link == first_parm_type)
18062           || (arg && DECL_ARTIFICIAL (arg)))
18063         add_AT_flag (parm_die, DW_AT_artificial, 1);
18064
18065       link = TREE_CHAIN (link);
18066       if (arg)
18067         arg = TREE_CHAIN (arg);
18068     }
18069
18070   /* If this function type has an ellipsis, add a
18071      DW_TAG_unspecified_parameters DIE to the end of the parameter list.  */
18072   if (formal_type != void_type_node)
18073     gen_unspecified_parameters_die (function_or_method_type, context_die);
18074
18075   /* Make our second (and final) pass over the list of formal parameter types
18076      and output DIEs to represent those types (as necessary).  */
18077   for (link = TYPE_ARG_TYPES (function_or_method_type);
18078        link && TREE_VALUE (link);
18079        link = TREE_CHAIN (link))
18080     gen_type_die (TREE_VALUE (link), context_die);
18081 }
18082
18083 /* We want to generate the DIE for TYPE so that we can generate the
18084    die for MEMBER, which has been defined; we will need to refer back
18085    to the member declaration nested within TYPE.  If we're trying to
18086    generate minimal debug info for TYPE, processing TYPE won't do the
18087    trick; we need to attach the member declaration by hand.  */
18088
18089 static void
18090 gen_type_die_for_member (tree type, tree member, dw_die_ref context_die)
18091 {
18092   gen_type_die (type, context_die);
18093
18094   /* If we're trying to avoid duplicate debug info, we may not have
18095      emitted the member decl for this function.  Emit it now.  */
18096   if (TYPE_STUB_DECL (type)
18097       && TYPE_DECL_SUPPRESS_DEBUG (TYPE_STUB_DECL (type))
18098       && ! lookup_decl_die (member))
18099     {
18100       dw_die_ref type_die;
18101       gcc_assert (!decl_ultimate_origin (member));
18102
18103       push_decl_scope (type);
18104       type_die = lookup_type_die (type);
18105       if (TREE_CODE (member) == FUNCTION_DECL)
18106         gen_subprogram_die (member, type_die);
18107       else if (TREE_CODE (member) == FIELD_DECL)
18108         {
18109           /* Ignore the nameless fields that are used to skip bits but handle
18110              C++ anonymous unions and structs.  */
18111           if (DECL_NAME (member) != NULL_TREE
18112               || TREE_CODE (TREE_TYPE (member)) == UNION_TYPE
18113               || TREE_CODE (TREE_TYPE (member)) == RECORD_TYPE)
18114             {
18115               gen_type_die (member_declared_type (member), type_die);
18116               gen_field_die (member, type_die);
18117             }
18118         }
18119       else
18120         gen_variable_die (member, NULL_TREE, type_die);
18121
18122       pop_decl_scope ();
18123     }
18124 }
18125
18126 /* Generate the DWARF2 info for the "abstract" instance of a function which we
18127    may later generate inlined and/or out-of-line instances of.  */
18128
18129 static void
18130 dwarf2out_abstract_function (tree decl)
18131 {
18132   dw_die_ref old_die;
18133   tree save_fn;
18134   tree context;
18135   int was_abstract;
18136   htab_t old_decl_loc_table;
18137
18138   /* Make sure we have the actual abstract inline, not a clone.  */
18139   decl = DECL_ORIGIN (decl);
18140
18141   old_die = lookup_decl_die (decl);
18142   if (old_die && get_AT (old_die, DW_AT_inline))
18143     /* We've already generated the abstract instance.  */
18144     return;
18145
18146   /* We can be called while recursively when seeing block defining inlined subroutine
18147      DIE.  Be sure to not clobber the outer location table nor use it or we would
18148      get locations in abstract instantces.  */
18149   old_decl_loc_table = decl_loc_table;
18150   decl_loc_table = NULL;
18151
18152   /* Be sure we've emitted the in-class declaration DIE (if any) first, so
18153      we don't get confused by DECL_ABSTRACT.  */
18154   if (debug_info_level > DINFO_LEVEL_TERSE)
18155     {
18156       context = decl_class_context (decl);
18157       if (context)
18158         gen_type_die_for_member
18159           (context, decl, decl_function_context (decl) ? NULL : comp_unit_die);
18160     }
18161
18162   /* Pretend we've just finished compiling this function.  */
18163   save_fn = current_function_decl;
18164   current_function_decl = decl;
18165   push_cfun (DECL_STRUCT_FUNCTION (decl));
18166
18167   was_abstract = DECL_ABSTRACT (decl);
18168   set_decl_abstract_flags (decl, 1);
18169   dwarf2out_decl (decl);
18170   if (! was_abstract)
18171     set_decl_abstract_flags (decl, 0);
18172
18173   current_function_decl = save_fn;
18174   decl_loc_table = old_decl_loc_table;
18175   pop_cfun ();
18176 }
18177
18178 /* Helper function of premark_used_types() which gets called through
18179    htab_traverse.
18180
18181    Marks the DIE of a given type in *SLOT as perennial, so it never gets
18182    marked as unused by prune_unused_types.  */
18183
18184 static int
18185 premark_used_types_helper (void **slot, void *data ATTRIBUTE_UNUSED)
18186 {
18187   tree type;
18188   dw_die_ref die;
18189
18190   type = (tree) *slot;
18191   die = lookup_type_die (type);
18192   if (die != NULL)
18193     die->die_perennial_p = 1;
18194   return 1;
18195 }
18196
18197 /* Helper function of premark_types_used_by_global_vars which gets called
18198    through htab_traverse.
18199
18200    Marks the DIE of a given type in *SLOT as perennial, so it never gets
18201    marked as unused by prune_unused_types. The DIE of the type is marked
18202    only if the global variable using the type will actually be emitted.  */
18203
18204 static int
18205 premark_types_used_by_global_vars_helper (void **slot,
18206                                           void *data ATTRIBUTE_UNUSED)
18207 {
18208   struct types_used_by_vars_entry *entry;
18209   dw_die_ref die;
18210
18211   entry = (struct types_used_by_vars_entry *) *slot;
18212   gcc_assert (entry->type != NULL
18213               && entry->var_decl != NULL);
18214   die = lookup_type_die (entry->type);
18215   if (die)
18216     {
18217       /* Ask cgraph if the global variable really is to be emitted.
18218          If yes, then we'll keep the DIE of ENTRY->TYPE.  */
18219       struct varpool_node *node = varpool_get_node (entry->var_decl);
18220       if (node && node->needed)
18221         {
18222           die->die_perennial_p = 1;
18223           /* Keep the parent DIEs as well.  */
18224           while ((die = die->die_parent) && die->die_perennial_p == 0)
18225             die->die_perennial_p = 1;
18226         }
18227     }
18228   return 1;
18229 }
18230
18231 /* Mark all members of used_types_hash as perennial.  */
18232
18233 static void
18234 premark_used_types (void)
18235 {
18236   if (cfun && cfun->used_types_hash)
18237     htab_traverse (cfun->used_types_hash, premark_used_types_helper, NULL);
18238 }
18239
18240 /* Mark all members of types_used_by_vars_entry as perennial.  */
18241
18242 static void
18243 premark_types_used_by_global_vars (void)
18244 {
18245   if (types_used_by_vars_hash)
18246     htab_traverse (types_used_by_vars_hash,
18247                    premark_types_used_by_global_vars_helper, NULL);
18248 }
18249
18250 /* Generate a DIE to represent a declared function (either file-scope or
18251    block-local).  */
18252
18253 static void
18254 gen_subprogram_die (tree decl, dw_die_ref context_die)
18255 {
18256   char label_id[MAX_ARTIFICIAL_LABEL_BYTES];
18257   tree origin = decl_ultimate_origin (decl);
18258   dw_die_ref subr_die;
18259   tree fn_arg_types;
18260   tree outer_scope;
18261   dw_die_ref old_die = lookup_decl_die (decl);
18262   int declaration = (current_function_decl != decl
18263                      || class_or_namespace_scope_p (context_die));
18264
18265   premark_used_types ();
18266
18267   /* It is possible to have both DECL_ABSTRACT and DECLARATION be true if we
18268      started to generate the abstract instance of an inline, decided to output
18269      its containing class, and proceeded to emit the declaration of the inline
18270      from the member list for the class.  If so, DECLARATION takes priority;
18271      we'll get back to the abstract instance when done with the class.  */
18272
18273   /* The class-scope declaration DIE must be the primary DIE.  */
18274   if (origin && declaration && class_or_namespace_scope_p (context_die))
18275     {
18276       origin = NULL;
18277       gcc_assert (!old_die);
18278     }
18279
18280   /* Now that the C++ front end lazily declares artificial member fns, we
18281      might need to retrofit the declaration into its class.  */
18282   if (!declaration && !origin && !old_die
18283       && DECL_CONTEXT (decl) && TYPE_P (DECL_CONTEXT (decl))
18284       && !class_or_namespace_scope_p (context_die)
18285       && debug_info_level > DINFO_LEVEL_TERSE)
18286     old_die = force_decl_die (decl);
18287
18288   if (origin != NULL)
18289     {
18290       gcc_assert (!declaration || local_scope_p (context_die));
18291
18292       /* Fixup die_parent for the abstract instance of a nested
18293          inline function.  */
18294       if (old_die && old_die->die_parent == NULL)
18295         add_child_die (context_die, old_die);
18296
18297       subr_die = new_die (DW_TAG_subprogram, context_die, decl);
18298       add_abstract_origin_attribute (subr_die, origin);
18299     }
18300   else if (old_die)
18301     {
18302       expanded_location s = expand_location (DECL_SOURCE_LOCATION (decl));
18303       struct dwarf_file_data * file_index = lookup_filename (s.file);
18304
18305       if (!get_AT_flag (old_die, DW_AT_declaration)
18306           /* We can have a normal definition following an inline one in the
18307              case of redefinition of GNU C extern inlines.
18308              It seems reasonable to use AT_specification in this case.  */
18309           && !get_AT (old_die, DW_AT_inline))
18310         {
18311           /* Detect and ignore this case, where we are trying to output
18312              something we have already output.  */
18313           return;
18314         }
18315
18316       /* If the definition comes from the same place as the declaration,
18317          maybe use the old DIE.  We always want the DIE for this function
18318          that has the *_pc attributes to be under comp_unit_die so the
18319          debugger can find it.  We also need to do this for abstract
18320          instances of inlines, since the spec requires the out-of-line copy
18321          to have the same parent.  For local class methods, this doesn't
18322          apply; we just use the old DIE.  */
18323       if ((old_die->die_parent == comp_unit_die || context_die == NULL)
18324           && (DECL_ARTIFICIAL (decl)
18325               || (get_AT_file (old_die, DW_AT_decl_file) == file_index
18326                   && (get_AT_unsigned (old_die, DW_AT_decl_line)
18327                       == (unsigned) s.line))))
18328         {
18329           subr_die = old_die;
18330
18331           /* Clear out the declaration attribute and the formal parameters.
18332              Do not remove all children, because it is possible that this
18333              declaration die was forced using force_decl_die(). In such
18334              cases die that forced declaration die (e.g. TAG_imported_module)
18335              is one of the children that we do not want to remove.  */
18336           remove_AT (subr_die, DW_AT_declaration);
18337           remove_child_TAG (subr_die, DW_TAG_formal_parameter);
18338         }
18339       else
18340         {
18341           subr_die = new_die (DW_TAG_subprogram, context_die, decl);
18342           add_AT_specification (subr_die, old_die);
18343           if (get_AT_file (old_die, DW_AT_decl_file) != file_index)
18344             add_AT_file (subr_die, DW_AT_decl_file, file_index);
18345           if (get_AT_unsigned (old_die, DW_AT_decl_line) != (unsigned) s.line)
18346             add_AT_unsigned (subr_die, DW_AT_decl_line, s.line);
18347         }
18348     }
18349   else
18350     {
18351       subr_die = new_die (DW_TAG_subprogram, context_die, decl);
18352
18353       if (TREE_PUBLIC (decl))
18354         add_AT_flag (subr_die, DW_AT_external, 1);
18355
18356       add_name_and_src_coords_attributes (subr_die, decl);
18357       if (debug_info_level > DINFO_LEVEL_TERSE)
18358         {
18359           add_prototyped_attribute (subr_die, TREE_TYPE (decl));
18360           add_type_attribute (subr_die, TREE_TYPE (TREE_TYPE (decl)),
18361                               0, 0, context_die);
18362         }
18363
18364       add_pure_or_virtual_attribute (subr_die, decl);
18365       if (DECL_ARTIFICIAL (decl))
18366         add_AT_flag (subr_die, DW_AT_artificial, 1);
18367
18368       if (TREE_PROTECTED (decl))
18369         add_AT_unsigned (subr_die, DW_AT_accessibility, DW_ACCESS_protected);
18370       else if (TREE_PRIVATE (decl))
18371         add_AT_unsigned (subr_die, DW_AT_accessibility, DW_ACCESS_private);
18372     }
18373
18374   if (declaration)
18375     {
18376       if (!old_die || !get_AT (old_die, DW_AT_inline))
18377         {
18378           add_AT_flag (subr_die, DW_AT_declaration, 1);
18379
18380           /* If this is an explicit function declaration then generate
18381              a DW_AT_explicit attribute.  */
18382           if (lang_hooks.decls.function_decl_explicit_p (decl)
18383               && (dwarf_version >= 3 || !dwarf_strict))
18384             add_AT_flag (subr_die, DW_AT_explicit, 1);
18385
18386           /* The first time we see a member function, it is in the context of
18387              the class to which it belongs.  We make sure of this by emitting
18388              the class first.  The next time is the definition, which is
18389              handled above.  The two may come from the same source text.
18390
18391              Note that force_decl_die() forces function declaration die. It is
18392              later reused to represent definition.  */
18393           equate_decl_number_to_die (decl, subr_die);
18394         }
18395     }
18396   else if (DECL_ABSTRACT (decl))
18397     {
18398       if (DECL_DECLARED_INLINE_P (decl))
18399         {
18400           if (cgraph_function_possibly_inlined_p (decl))
18401             add_AT_unsigned (subr_die, DW_AT_inline, DW_INL_declared_inlined);
18402           else
18403             add_AT_unsigned (subr_die, DW_AT_inline, DW_INL_declared_not_inlined);
18404         }
18405       else
18406         {
18407           if (cgraph_function_possibly_inlined_p (decl))
18408             add_AT_unsigned (subr_die, DW_AT_inline, DW_INL_inlined);
18409           else
18410             add_AT_unsigned (subr_die, DW_AT_inline, DW_INL_not_inlined);
18411         }
18412
18413       if (DECL_DECLARED_INLINE_P (decl)
18414           && lookup_attribute ("artificial", DECL_ATTRIBUTES (decl)))
18415         add_AT_flag (subr_die, DW_AT_artificial, 1);
18416
18417       equate_decl_number_to_die (decl, subr_die);
18418     }
18419   else if (!DECL_EXTERNAL (decl))
18420     {
18421       HOST_WIDE_INT cfa_fb_offset;
18422
18423       if (!old_die || !get_AT (old_die, DW_AT_inline))
18424         equate_decl_number_to_die (decl, subr_die);
18425
18426       if (!flag_reorder_blocks_and_partition)
18427         {
18428           ASM_GENERATE_INTERNAL_LABEL (label_id, FUNC_BEGIN_LABEL,
18429                                        current_function_funcdef_no);
18430           add_AT_lbl_id (subr_die, DW_AT_low_pc, label_id);
18431           ASM_GENERATE_INTERNAL_LABEL (label_id, FUNC_END_LABEL,
18432                                        current_function_funcdef_no);
18433           add_AT_lbl_id (subr_die, DW_AT_high_pc, label_id);
18434
18435           add_pubname (decl, subr_die);
18436           add_arange (decl, subr_die);
18437         }
18438       else
18439         {  /* Do nothing for now; maybe need to duplicate die, one for
18440               hot section and one for cold section, then use the hot/cold
18441               section begin/end labels to generate the aranges...  */
18442           /*
18443             add_AT_lbl_id (subr_die, DW_AT_low_pc, hot_section_label);
18444             add_AT_lbl_id (subr_die, DW_AT_high_pc, hot_section_end_label);
18445             add_AT_lbl_id (subr_die, DW_AT_lo_user, unlikely_section_label);
18446             add_AT_lbl_id (subr_die, DW_AT_hi_user, cold_section_end_label);
18447
18448             add_pubname (decl, subr_die);
18449             add_arange (decl, subr_die);
18450             add_arange (decl, subr_die);
18451            */
18452         }
18453
18454 #ifdef MIPS_DEBUGGING_INFO
18455       /* Add a reference to the FDE for this routine.  */
18456       add_AT_fde_ref (subr_die, DW_AT_MIPS_fde, current_funcdef_fde);
18457 #endif
18458
18459       cfa_fb_offset = CFA_FRAME_BASE_OFFSET (decl);
18460
18461       /* We define the "frame base" as the function's CFA.  This is more
18462          convenient for several reasons: (1) It's stable across the prologue
18463          and epilogue, which makes it better than just a frame pointer,
18464          (2) With dwarf3, there exists a one-byte encoding that allows us
18465          to reference the .debug_frame data by proxy, but failing that,
18466          (3) We can at least reuse the code inspection and interpretation
18467          code that determines the CFA position at various points in the
18468          function.  */
18469       if (dwarf_version >= 3)
18470         {
18471           dw_loc_descr_ref op = new_loc_descr (DW_OP_call_frame_cfa, 0, 0);
18472           add_AT_loc (subr_die, DW_AT_frame_base, op);
18473         }
18474       else
18475         {
18476           dw_loc_list_ref list = convert_cfa_to_fb_loc_list (cfa_fb_offset);
18477           if (list->dw_loc_next)
18478             add_AT_loc_list (subr_die, DW_AT_frame_base, list);
18479           else
18480             add_AT_loc (subr_die, DW_AT_frame_base, list->expr);
18481         }
18482
18483       /* Compute a displacement from the "steady-state frame pointer" to
18484          the CFA.  The former is what all stack slots and argument slots
18485          will reference in the rtl; the later is what we've told the
18486          debugger about.  We'll need to adjust all frame_base references
18487          by this displacement.  */
18488       compute_frame_pointer_to_fb_displacement (cfa_fb_offset);
18489
18490       if (cfun->static_chain_decl)
18491         add_AT_location_description (subr_die, DW_AT_static_link,
18492                  loc_list_from_tree (cfun->static_chain_decl, 2));
18493     }
18494
18495   /* Generate child dies for template paramaters.  */
18496   if (debug_info_level > DINFO_LEVEL_TERSE)
18497     gen_generic_params_dies (decl);
18498
18499   /* Now output descriptions of the arguments for this function. This gets
18500      (unnecessarily?) complex because of the fact that the DECL_ARGUMENT list
18501      for a FUNCTION_DECL doesn't indicate cases where there was a trailing
18502      `...' at the end of the formal parameter list.  In order to find out if
18503      there was a trailing ellipsis or not, we must instead look at the type
18504      associated with the FUNCTION_DECL.  This will be a node of type
18505      FUNCTION_TYPE. If the chain of type nodes hanging off of this
18506      FUNCTION_TYPE node ends with a void_type_node then there should *not* be
18507      an ellipsis at the end.  */
18508
18509   /* In the case where we are describing a mere function declaration, all we
18510      need to do here (and all we *can* do here) is to describe the *types* of
18511      its formal parameters.  */
18512   if (debug_info_level <= DINFO_LEVEL_TERSE)
18513     ;
18514   else if (declaration)
18515     gen_formal_types_die (decl, subr_die);
18516   else
18517     {
18518       /* Generate DIEs to represent all known formal parameters.  */
18519       tree parm = DECL_ARGUMENTS (decl);
18520       tree generic_decl = lang_hooks.decls.get_generic_function_decl (decl);
18521       tree generic_decl_parm = generic_decl
18522                                 ? DECL_ARGUMENTS (generic_decl)
18523                                 : NULL;
18524
18525       /* Now we want to walk the list of parameters of the function and
18526          emit their relevant DIEs.
18527
18528          We consider the case of DECL being an instance of a generic function
18529          as well as it being a normal function.
18530
18531          If DECL is an instance of a generic function we walk the
18532          parameters of the generic function declaration _and_ the parameters of
18533          DECL itself. This is useful because we want to emit specific DIEs for
18534          function parameter packs and those are declared as part of the
18535          generic function declaration. In that particular case,
18536          the parameter pack yields a DW_TAG_GNU_formal_parameter_pack DIE.
18537          That DIE has children DIEs representing the set of arguments
18538          of the pack. Note that the set of pack arguments can be empty.
18539          In that case, the DW_TAG_GNU_formal_parameter_pack DIE will not have any
18540          children DIE.
18541
18542          Otherwise, we just consider the parameters of DECL.  */
18543       while (generic_decl_parm || parm)
18544         {
18545           if (generic_decl_parm
18546               && lang_hooks.function_parameter_pack_p (generic_decl_parm))
18547             gen_formal_parameter_pack_die (generic_decl_parm,
18548                                            parm, subr_die,
18549                                            &parm);
18550           else if (parm)
18551             {
18552               gen_decl_die (parm, NULL, subr_die);
18553               parm = TREE_CHAIN (parm);
18554             }
18555
18556           if (generic_decl_parm)
18557             generic_decl_parm = TREE_CHAIN (generic_decl_parm);
18558         }
18559
18560       /* Decide whether we need an unspecified_parameters DIE at the end.
18561          There are 2 more cases to do this for: 1) the ansi ... declaration -
18562          this is detectable when the end of the arg list is not a
18563          void_type_node 2) an unprototyped function declaration (not a
18564          definition).  This just means that we have no info about the
18565          parameters at all.  */
18566       fn_arg_types = TYPE_ARG_TYPES (TREE_TYPE (decl));
18567       if (fn_arg_types != NULL)
18568         {
18569           /* This is the prototyped case, check for....  */
18570           if (TREE_VALUE (tree_last (fn_arg_types)) != void_type_node)
18571             gen_unspecified_parameters_die (decl, subr_die);
18572         }
18573       else if (DECL_INITIAL (decl) == NULL_TREE)
18574         gen_unspecified_parameters_die (decl, subr_die);
18575     }
18576
18577   /* Output Dwarf info for all of the stuff within the body of the function
18578      (if it has one - it may be just a declaration).  */
18579   outer_scope = DECL_INITIAL (decl);
18580
18581   /* OUTER_SCOPE is a pointer to the outermost BLOCK node created to represent
18582      a function.  This BLOCK actually represents the outermost binding contour
18583      for the function, i.e. the contour in which the function's formal
18584      parameters and labels get declared. Curiously, it appears that the front
18585      end doesn't actually put the PARM_DECL nodes for the current function onto
18586      the BLOCK_VARS list for this outer scope, but are strung off of the
18587      DECL_ARGUMENTS list for the function instead.
18588
18589      The BLOCK_VARS list for the `outer_scope' does provide us with a list of
18590      the LABEL_DECL nodes for the function however, and we output DWARF info
18591      for those in decls_for_scope.  Just within the `outer_scope' there will be
18592      a BLOCK node representing the function's outermost pair of curly braces,
18593      and any blocks used for the base and member initializers of a C++
18594      constructor function.  */
18595   if (! declaration && TREE_CODE (outer_scope) != ERROR_MARK)
18596     {
18597       /* Emit a DW_TAG_variable DIE for a named return value.  */
18598       if (DECL_NAME (DECL_RESULT (decl)))
18599         gen_decl_die (DECL_RESULT (decl), NULL, subr_die);
18600
18601       current_function_has_inlines = 0;
18602       decls_for_scope (outer_scope, subr_die, 0);
18603
18604 #if 0 && defined (MIPS_DEBUGGING_INFO)
18605       if (current_function_has_inlines)
18606         {
18607           add_AT_flag (subr_die, DW_AT_MIPS_has_inlines, 1);
18608           if (! comp_unit_has_inlines)
18609             {
18610               add_AT_flag (comp_unit_die, DW_AT_MIPS_has_inlines, 1);
18611               comp_unit_has_inlines = 1;
18612             }
18613         }
18614 #endif
18615     }
18616   /* Add the calling convention attribute if requested.  */
18617   add_calling_convention_attribute (subr_die, decl);
18618
18619 }
18620
18621 /* Returns a hash value for X (which really is a die_struct).  */
18622
18623 static hashval_t
18624 common_block_die_table_hash (const void *x)
18625 {
18626   const_dw_die_ref d = (const_dw_die_ref) x;
18627   return (hashval_t) d->decl_id ^ htab_hash_pointer (d->die_parent);
18628 }
18629
18630 /* Return nonzero if decl_id and die_parent of die_struct X is the same
18631    as decl_id and die_parent of die_struct Y.  */
18632
18633 static int
18634 common_block_die_table_eq (const void *x, const void *y)
18635 {
18636   const_dw_die_ref d = (const_dw_die_ref) x;
18637   const_dw_die_ref e = (const_dw_die_ref) y;
18638   return d->decl_id == e->decl_id && d->die_parent == e->die_parent;
18639 }
18640
18641 /* Generate a DIE to represent a declared data object.
18642    Either DECL or ORIGIN must be non-null.  */
18643
18644 static void
18645 gen_variable_die (tree decl, tree origin, dw_die_ref context_die)
18646 {
18647   HOST_WIDE_INT off;
18648   tree com_decl;
18649   tree decl_or_origin = decl ? decl : origin;
18650   tree ultimate_origin;
18651   dw_die_ref var_die;
18652   dw_die_ref old_die = decl ? lookup_decl_die (decl) : NULL;
18653   dw_die_ref origin_die;
18654   bool declaration = (DECL_EXTERNAL (decl_or_origin)
18655                       || class_or_namespace_scope_p (context_die));
18656   bool specialization_p = false;
18657
18658   ultimate_origin = decl_ultimate_origin (decl_or_origin);
18659   if (decl || ultimate_origin)
18660     origin = ultimate_origin;
18661   com_decl = fortran_common (decl_or_origin, &off);
18662
18663   /* Symbol in common gets emitted as a child of the common block, in the form
18664      of a data member.  */
18665   if (com_decl)
18666     {
18667       dw_die_ref com_die;
18668       dw_loc_list_ref loc;
18669       die_node com_die_arg;
18670
18671       var_die = lookup_decl_die (decl_or_origin);
18672       if (var_die)
18673         {
18674           if (get_AT (var_die, DW_AT_location) == NULL)
18675             {
18676               loc = loc_list_from_tree (com_decl, off ? 1 : 2);
18677               if (loc)
18678                 {
18679                   if (off)
18680                     {
18681                       /* Optimize the common case.  */
18682                       if (single_element_loc_list_p (loc)
18683                           && loc->expr->dw_loc_opc == DW_OP_addr
18684                           && loc->expr->dw_loc_next == NULL
18685                           && GET_CODE (loc->expr->dw_loc_oprnd1.v.val_addr)
18686                              == SYMBOL_REF)
18687                         loc->expr->dw_loc_oprnd1.v.val_addr
18688                           = plus_constant (loc->expr->dw_loc_oprnd1.v.val_addr, off);
18689                         else
18690                           loc_list_plus_const (loc, off);
18691                     }
18692                   add_AT_location_description (var_die, DW_AT_location, loc);
18693                   remove_AT (var_die, DW_AT_declaration);
18694                 }
18695             }
18696           return;
18697         }
18698
18699       if (common_block_die_table == NULL)
18700         common_block_die_table
18701           = htab_create_ggc (10, common_block_die_table_hash,
18702                              common_block_die_table_eq, NULL);
18703
18704       com_die_arg.decl_id = DECL_UID (com_decl);
18705       com_die_arg.die_parent = context_die;
18706       com_die = (dw_die_ref) htab_find (common_block_die_table, &com_die_arg);
18707       loc = loc_list_from_tree (com_decl, 2);
18708       if (com_die == NULL)
18709         {
18710           const char *cnam
18711             = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (com_decl));
18712           void **slot;
18713
18714           com_die = new_die (DW_TAG_common_block, context_die, decl);
18715           add_name_and_src_coords_attributes (com_die, com_decl);
18716           if (loc)
18717             {
18718               add_AT_location_description (com_die, DW_AT_location, loc);
18719               /* Avoid sharing the same loc descriptor between
18720                  DW_TAG_common_block and DW_TAG_variable.  */
18721               loc = loc_list_from_tree (com_decl, 2);
18722             }
18723           else if (DECL_EXTERNAL (decl))
18724             add_AT_flag (com_die, DW_AT_declaration, 1);
18725           add_pubname_string (cnam, com_die); /* ??? needed? */
18726           com_die->decl_id = DECL_UID (com_decl);
18727           slot = htab_find_slot (common_block_die_table, com_die, INSERT);
18728           *slot = (void *) com_die;
18729         }
18730       else if (get_AT (com_die, DW_AT_location) == NULL && loc)
18731         {
18732           add_AT_location_description (com_die, DW_AT_location, loc);
18733           loc = loc_list_from_tree (com_decl, 2);
18734           remove_AT (com_die, DW_AT_declaration);
18735         }
18736       var_die = new_die (DW_TAG_variable, com_die, decl);
18737       add_name_and_src_coords_attributes (var_die, decl);
18738       add_type_attribute (var_die, TREE_TYPE (decl), TREE_READONLY (decl),
18739                           TREE_THIS_VOLATILE (decl), context_die);
18740       add_AT_flag (var_die, DW_AT_external, 1);
18741       if (loc)
18742         {
18743           if (off)
18744             {
18745               /* Optimize the common case.  */
18746               if (single_element_loc_list_p (loc)
18747                   && loc->expr->dw_loc_opc == DW_OP_addr
18748                   && loc->expr->dw_loc_next == NULL
18749                   && GET_CODE (loc->expr->dw_loc_oprnd1.v.val_addr) == SYMBOL_REF)
18750                 loc->expr->dw_loc_oprnd1.v.val_addr
18751                   = plus_constant (loc->expr->dw_loc_oprnd1.v.val_addr, off);
18752               else
18753                 loc_list_plus_const (loc, off);
18754             }
18755           add_AT_location_description (var_die, DW_AT_location, loc);
18756         }
18757       else if (DECL_EXTERNAL (decl))
18758         add_AT_flag (var_die, DW_AT_declaration, 1);
18759       equate_decl_number_to_die (decl, var_die);
18760       return;
18761     }
18762
18763   /* If the compiler emitted a definition for the DECL declaration
18764      and if we already emitted a DIE for it, don't emit a second
18765      DIE for it again. Allow re-declarations of DECLs that are
18766      inside functions, though.  */
18767   if (old_die && declaration && !local_scope_p (context_die))
18768     return;
18769
18770   /* For static data members, the declaration in the class is supposed
18771      to have DW_TAG_member tag; the specification should still be
18772      DW_TAG_variable referencing the DW_TAG_member DIE.  */
18773   if (declaration && class_scope_p (context_die))
18774     var_die = new_die (DW_TAG_member, context_die, decl);
18775   else
18776     var_die = new_die (DW_TAG_variable, context_die, decl);
18777
18778   origin_die = NULL;
18779   if (origin != NULL)
18780     origin_die = add_abstract_origin_attribute (var_die, origin);
18781
18782   /* Loop unrolling can create multiple blocks that refer to the same
18783      static variable, so we must test for the DW_AT_declaration flag.
18784
18785      ??? Loop unrolling/reorder_blocks should perhaps be rewritten to
18786      copy decls and set the DECL_ABSTRACT flag on them instead of
18787      sharing them.
18788
18789      ??? Duplicated blocks have been rewritten to use .debug_ranges.
18790
18791      ??? The declare_in_namespace support causes us to get two DIEs for one
18792      variable, both of which are declarations.  We want to avoid considering
18793      one to be a specification, so we must test that this DIE is not a
18794      declaration.  */
18795   else if (old_die && TREE_STATIC (decl) && ! declaration
18796            && get_AT_flag (old_die, DW_AT_declaration) == 1)
18797     {
18798       /* This is a definition of a C++ class level static.  */
18799       add_AT_specification (var_die, old_die);
18800       specialization_p = true;
18801       if (DECL_NAME (decl))
18802         {
18803           expanded_location s = expand_location (DECL_SOURCE_LOCATION (decl));
18804           struct dwarf_file_data * file_index = lookup_filename (s.file);
18805
18806           if (get_AT_file (old_die, DW_AT_decl_file) != file_index)
18807             add_AT_file (var_die, DW_AT_decl_file, file_index);
18808
18809           if (get_AT_unsigned (old_die, DW_AT_decl_line) != (unsigned) s.line)
18810             add_AT_unsigned (var_die, DW_AT_decl_line, s.line);
18811         }
18812     }
18813   else
18814     add_name_and_src_coords_attributes (var_die, decl);
18815
18816   if ((origin == NULL && !specialization_p)
18817       || (origin != NULL
18818           && !DECL_ABSTRACT (decl_or_origin)
18819           && variably_modified_type_p (TREE_TYPE (decl_or_origin),
18820                                        decl_function_context
18821                                                         (decl_or_origin))))
18822     {
18823       tree type = TREE_TYPE (decl_or_origin);
18824
18825       if (decl_by_reference_p (decl_or_origin))
18826         add_type_attribute (var_die, TREE_TYPE (type), 0, 0, context_die);
18827       else
18828         add_type_attribute (var_die, type, TREE_READONLY (decl_or_origin),
18829                             TREE_THIS_VOLATILE (decl_or_origin), context_die);
18830     }
18831
18832   if (origin == NULL && !specialization_p)
18833     {
18834       if (TREE_PUBLIC (decl))
18835         add_AT_flag (var_die, DW_AT_external, 1);
18836
18837       if (DECL_ARTIFICIAL (decl))
18838         add_AT_flag (var_die, DW_AT_artificial, 1);
18839
18840       if (TREE_PROTECTED (decl))
18841         add_AT_unsigned (var_die, DW_AT_accessibility, DW_ACCESS_protected);
18842       else if (TREE_PRIVATE (decl))
18843         add_AT_unsigned (var_die, DW_AT_accessibility, DW_ACCESS_private);
18844     }
18845
18846   if (declaration)
18847     add_AT_flag (var_die, DW_AT_declaration, 1);
18848
18849   if (decl && (DECL_ABSTRACT (decl) || declaration))
18850     equate_decl_number_to_die (decl, var_die);
18851
18852   if (! declaration
18853       && (! DECL_ABSTRACT (decl_or_origin)
18854           /* Local static vars are shared between all clones/inlines,
18855              so emit DW_AT_location on the abstract DIE if DECL_RTL is
18856              already set.  */
18857           || (TREE_CODE (decl_or_origin) == VAR_DECL
18858               && TREE_STATIC (decl_or_origin)
18859               && DECL_RTL_SET_P (decl_or_origin)))
18860       /* When abstract origin already has DW_AT_location attribute, no need
18861          to add it again.  */
18862       && (origin_die == NULL || get_AT (origin_die, DW_AT_location) == NULL))
18863     {
18864       if (TREE_CODE (decl_or_origin) == VAR_DECL && TREE_STATIC (decl_or_origin)
18865           && !TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (decl_or_origin)))
18866         defer_location (decl_or_origin, var_die);
18867       else
18868         add_location_or_const_value_attribute (var_die,
18869                                                decl_or_origin,
18870                                                DW_AT_location);
18871       add_pubname (decl_or_origin, var_die);
18872     }
18873   else
18874     tree_add_const_value_attribute_for_decl (var_die, decl_or_origin);
18875 }
18876
18877 /* Generate a DIE to represent a named constant.  */
18878
18879 static void
18880 gen_const_die (tree decl, dw_die_ref context_die)
18881 {
18882   dw_die_ref const_die;
18883   tree type = TREE_TYPE (decl);
18884
18885   const_die = new_die (DW_TAG_constant, context_die, decl);
18886   add_name_and_src_coords_attributes (const_die, decl);
18887   add_type_attribute (const_die, type, 1, 0, context_die);
18888   if (TREE_PUBLIC (decl))
18889     add_AT_flag (const_die, DW_AT_external, 1);
18890   if (DECL_ARTIFICIAL (decl))
18891     add_AT_flag (const_die, DW_AT_artificial, 1);
18892   tree_add_const_value_attribute_for_decl (const_die, decl);
18893 }
18894
18895 /* Generate a DIE to represent a label identifier.  */
18896
18897 static void
18898 gen_label_die (tree decl, dw_die_ref context_die)
18899 {
18900   tree origin = decl_ultimate_origin (decl);
18901   dw_die_ref lbl_die = new_die (DW_TAG_label, context_die, decl);
18902   rtx insn;
18903   char label[MAX_ARTIFICIAL_LABEL_BYTES];
18904
18905   if (origin != NULL)
18906     add_abstract_origin_attribute (lbl_die, origin);
18907   else
18908     add_name_and_src_coords_attributes (lbl_die, decl);
18909
18910   if (DECL_ABSTRACT (decl))
18911     equate_decl_number_to_die (decl, lbl_die);
18912   else
18913     {
18914       insn = DECL_RTL_IF_SET (decl);
18915
18916       /* Deleted labels are programmer specified labels which have been
18917          eliminated because of various optimizations.  We still emit them
18918          here so that it is possible to put breakpoints on them.  */
18919       if (insn
18920           && (LABEL_P (insn)
18921               || ((NOTE_P (insn)
18922                    && NOTE_KIND (insn) == NOTE_INSN_DELETED_LABEL))))
18923         {
18924           /* When optimization is enabled (via -O) some parts of the compiler
18925              (e.g. jump.c and cse.c) may try to delete CODE_LABEL insns which
18926              represent source-level labels which were explicitly declared by
18927              the user.  This really shouldn't be happening though, so catch
18928              it if it ever does happen.  */
18929           gcc_assert (!INSN_DELETED_P (insn));
18930
18931           ASM_GENERATE_INTERNAL_LABEL (label, "L", CODE_LABEL_NUMBER (insn));
18932           add_AT_lbl_id (lbl_die, DW_AT_low_pc, label);
18933         }
18934     }
18935 }
18936
18937 /* A helper function for gen_inlined_subroutine_die.  Add source coordinate
18938    attributes to the DIE for a block STMT, to describe where the inlined
18939    function was called from.  This is similar to add_src_coords_attributes.  */
18940
18941 static inline void
18942 add_call_src_coords_attributes (tree stmt, dw_die_ref die)
18943 {
18944   expanded_location s = expand_location (BLOCK_SOURCE_LOCATION (stmt));
18945
18946   if (dwarf_version >= 3 || !dwarf_strict)
18947     {
18948       add_AT_file (die, DW_AT_call_file, lookup_filename (s.file));
18949       add_AT_unsigned (die, DW_AT_call_line, s.line);
18950     }
18951 }
18952
18953
18954 /* A helper function for gen_lexical_block_die and gen_inlined_subroutine_die.
18955    Add low_pc and high_pc attributes to the DIE for a block STMT.  */
18956
18957 static inline void
18958 add_high_low_attributes (tree stmt, dw_die_ref die)
18959 {
18960   char label[MAX_ARTIFICIAL_LABEL_BYTES];
18961
18962   if (BLOCK_FRAGMENT_CHAIN (stmt)
18963       && (dwarf_version >= 3 || !dwarf_strict))
18964     {
18965       tree chain;
18966
18967       if (inlined_function_outer_scope_p (stmt))
18968         {
18969           ASM_GENERATE_INTERNAL_LABEL (label, BLOCK_BEGIN_LABEL,
18970                                        BLOCK_NUMBER (stmt));
18971           add_AT_lbl_id (die, DW_AT_entry_pc, label);
18972         }
18973
18974       add_AT_range_list (die, DW_AT_ranges, add_ranges (stmt));
18975
18976       chain = BLOCK_FRAGMENT_CHAIN (stmt);
18977       do
18978         {
18979           add_ranges (chain);
18980           chain = BLOCK_FRAGMENT_CHAIN (chain);
18981         }
18982       while (chain);
18983       add_ranges (NULL);
18984     }
18985   else
18986     {
18987       ASM_GENERATE_INTERNAL_LABEL (label, BLOCK_BEGIN_LABEL,
18988                                    BLOCK_NUMBER (stmt));
18989       add_AT_lbl_id (die, DW_AT_low_pc, label);
18990       ASM_GENERATE_INTERNAL_LABEL (label, BLOCK_END_LABEL,
18991                                    BLOCK_NUMBER (stmt));
18992       add_AT_lbl_id (die, DW_AT_high_pc, label);
18993     }
18994 }
18995
18996 /* Generate a DIE for a lexical block.  */
18997
18998 static void
18999 gen_lexical_block_die (tree stmt, dw_die_ref context_die, int depth)
19000 {
19001   dw_die_ref stmt_die = new_die (DW_TAG_lexical_block, context_die, stmt);
19002
19003   if (! BLOCK_ABSTRACT (stmt) && TREE_ASM_WRITTEN (stmt))
19004     add_high_low_attributes (stmt, stmt_die);
19005
19006   decls_for_scope (stmt, stmt_die, depth);
19007 }
19008
19009 /* Generate a DIE for an inlined subprogram.  */
19010
19011 static void
19012 gen_inlined_subroutine_die (tree stmt, dw_die_ref context_die, int depth)
19013 {
19014   tree decl;
19015
19016   /* The instance of function that is effectively being inlined shall not
19017      be abstract.  */
19018   gcc_assert (! BLOCK_ABSTRACT (stmt));
19019
19020   decl = block_ultimate_origin (stmt);
19021
19022   /* Emit info for the abstract instance first, if we haven't yet.  We
19023      must emit this even if the block is abstract, otherwise when we
19024      emit the block below (or elsewhere), we may end up trying to emit
19025      a die whose origin die hasn't been emitted, and crashing.  */
19026   dwarf2out_abstract_function (decl);
19027
19028   if (! BLOCK_ABSTRACT (stmt))
19029     {
19030       dw_die_ref subr_die
19031         = new_die (DW_TAG_inlined_subroutine, context_die, stmt);
19032
19033       add_abstract_origin_attribute (subr_die, decl);
19034       if (TREE_ASM_WRITTEN (stmt))
19035         add_high_low_attributes (stmt, subr_die);
19036       add_call_src_coords_attributes (stmt, subr_die);
19037
19038       decls_for_scope (stmt, subr_die, depth);
19039       current_function_has_inlines = 1;
19040     }
19041 }
19042
19043 /* Generate a DIE for a field in a record, or structure.  */
19044
19045 static void
19046 gen_field_die (tree decl, dw_die_ref context_die)
19047 {
19048   dw_die_ref decl_die;
19049
19050   if (TREE_TYPE (decl) == error_mark_node)
19051     return;
19052
19053   decl_die = new_die (DW_TAG_member, context_die, decl);
19054   add_name_and_src_coords_attributes (decl_die, decl);
19055   add_type_attribute (decl_die, member_declared_type (decl),
19056                       TREE_READONLY (decl), TREE_THIS_VOLATILE (decl),
19057                       context_die);
19058
19059   if (DECL_BIT_FIELD_TYPE (decl))
19060     {
19061       add_byte_size_attribute (decl_die, decl);
19062       add_bit_size_attribute (decl_die, decl);
19063       add_bit_offset_attribute (decl_die, decl);
19064     }
19065
19066   if (TREE_CODE (DECL_FIELD_CONTEXT (decl)) != UNION_TYPE)
19067     add_data_member_location_attribute (decl_die, decl);
19068
19069   if (DECL_ARTIFICIAL (decl))
19070     add_AT_flag (decl_die, DW_AT_artificial, 1);
19071
19072   if (TREE_PROTECTED (decl))
19073     add_AT_unsigned (decl_die, DW_AT_accessibility, DW_ACCESS_protected);
19074   else if (TREE_PRIVATE (decl))
19075     add_AT_unsigned (decl_die, DW_AT_accessibility, DW_ACCESS_private);
19076
19077   /* Equate decl number to die, so that we can look up this decl later on.  */
19078   equate_decl_number_to_die (decl, decl_die);
19079 }
19080
19081 #if 0
19082 /* Don't generate either pointer_type DIEs or reference_type DIEs here.
19083    Use modified_type_die instead.
19084    We keep this code here just in case these types of DIEs may be needed to
19085    represent certain things in other languages (e.g. Pascal) someday.  */
19086
19087 static void
19088 gen_pointer_type_die (tree type, dw_die_ref context_die)
19089 {
19090   dw_die_ref ptr_die
19091     = new_die (DW_TAG_pointer_type, scope_die_for (type, context_die), type);
19092
19093   equate_type_number_to_die (type, ptr_die);
19094   add_type_attribute (ptr_die, TREE_TYPE (type), 0, 0, context_die);
19095   add_AT_unsigned (mod_type_die, DW_AT_byte_size, PTR_SIZE);
19096 }
19097
19098 /* Don't generate either pointer_type DIEs or reference_type DIEs here.
19099    Use modified_type_die instead.
19100    We keep this code here just in case these types of DIEs may be needed to
19101    represent certain things in other languages (e.g. Pascal) someday.  */
19102
19103 static void
19104 gen_reference_type_die (tree type, dw_die_ref context_die)
19105 {
19106   dw_die_ref ref_die, scope_die = scope_die_for (type, context_die);
19107
19108   if (TYPE_REF_IS_RVALUE (type) && dwarf_version >= 4)
19109     ref_die = new_die (DW_TAG_rvalue_reference_type, scope_die, type);
19110   else
19111     ref_die = new_die (DW_TAG_reference_type, scope_die, type);
19112
19113   equate_type_number_to_die (type, ref_die);
19114   add_type_attribute (ref_die, TREE_TYPE (type), 0, 0, context_die);
19115   add_AT_unsigned (mod_type_die, DW_AT_byte_size, PTR_SIZE);
19116 }
19117 #endif
19118
19119 /* Generate a DIE for a pointer to a member type.  */
19120
19121 static void
19122 gen_ptr_to_mbr_type_die (tree type, dw_die_ref context_die)
19123 {
19124   dw_die_ref ptr_die
19125     = new_die (DW_TAG_ptr_to_member_type,
19126                scope_die_for (type, context_die), type);
19127
19128   equate_type_number_to_die (type, ptr_die);
19129   add_AT_die_ref (ptr_die, DW_AT_containing_type,
19130                   lookup_type_die (TYPE_OFFSET_BASETYPE (type)));
19131   add_type_attribute (ptr_die, TREE_TYPE (type), 0, 0, context_die);
19132 }
19133
19134 /* Generate the DIE for the compilation unit.  */
19135
19136 static dw_die_ref
19137 gen_compile_unit_die (const char *filename)
19138 {
19139   dw_die_ref die;
19140   char producer[250];
19141   const char *language_string = lang_hooks.name;
19142   int language;
19143
19144   die = new_die (DW_TAG_compile_unit, NULL, NULL);
19145
19146   if (filename)
19147     {
19148       add_name_attribute (die, filename);
19149       /* Don't add cwd for <built-in>.  */
19150       if (!IS_ABSOLUTE_PATH (filename) && filename[0] != '<')
19151         add_comp_dir_attribute (die);
19152     }
19153
19154   sprintf (producer, "%s %s", language_string, version_string);
19155
19156 #ifdef MIPS_DEBUGGING_INFO
19157   /* The MIPS/SGI compilers place the 'cc' command line options in the producer
19158      string.  The SGI debugger looks for -g, -g1, -g2, or -g3; if they do
19159      not appear in the producer string, the debugger reaches the conclusion
19160      that the object file is stripped and has no debugging information.
19161      To get the MIPS/SGI debugger to believe that there is debugging
19162      information in the object file, we add a -g to the producer string.  */
19163   if (debug_info_level > DINFO_LEVEL_TERSE)
19164     strcat (producer, " -g");
19165 #endif
19166
19167   add_AT_string (die, DW_AT_producer, producer);
19168
19169   language = DW_LANG_C89;
19170   if (strcmp (language_string, "GNU C++") == 0)
19171     language = DW_LANG_C_plus_plus;
19172   else if (strcmp (language_string, "GNU F77") == 0)
19173     language = DW_LANG_Fortran77;
19174   else if (strcmp (language_string, "GNU Pascal") == 0)
19175     language = DW_LANG_Pascal83;
19176   else if (dwarf_version >= 3 || !dwarf_strict)
19177     {
19178       if (strcmp (language_string, "GNU Ada") == 0)
19179         language = DW_LANG_Ada95;
19180       else if (strcmp (language_string, "GNU Fortran") == 0)
19181         language = DW_LANG_Fortran95;
19182       else if (strcmp (language_string, "GNU Java") == 0)
19183         language = DW_LANG_Java;
19184       else if (strcmp (language_string, "GNU Objective-C") == 0)
19185         language = DW_LANG_ObjC;
19186       else if (strcmp (language_string, "GNU Objective-C++") == 0)
19187         language = DW_LANG_ObjC_plus_plus;
19188     }
19189
19190   add_AT_unsigned (die, DW_AT_language, language);
19191
19192   switch (language)
19193     {
19194     case DW_LANG_Fortran77:
19195     case DW_LANG_Fortran90:
19196     case DW_LANG_Fortran95:
19197       /* Fortran has case insensitive identifiers and the front-end
19198          lowercases everything.  */
19199       add_AT_unsigned (die, DW_AT_identifier_case, DW_ID_down_case);
19200       break;
19201     default:
19202       /* The default DW_ID_case_sensitive doesn't need to be specified.  */
19203       break;
19204     }
19205   return die;
19206 }
19207
19208 /* Generate the DIE for a base class.  */
19209
19210 static void
19211 gen_inheritance_die (tree binfo, tree access, dw_die_ref context_die)
19212 {
19213   dw_die_ref die = new_die (DW_TAG_inheritance, context_die, binfo);
19214
19215   add_type_attribute (die, BINFO_TYPE (binfo), 0, 0, context_die);
19216   add_data_member_location_attribute (die, binfo);
19217
19218   if (BINFO_VIRTUAL_P (binfo))
19219     add_AT_unsigned (die, DW_AT_virtuality, DW_VIRTUALITY_virtual);
19220
19221   if (access == access_public_node)
19222     add_AT_unsigned (die, DW_AT_accessibility, DW_ACCESS_public);
19223   else if (access == access_protected_node)
19224     add_AT_unsigned (die, DW_AT_accessibility, DW_ACCESS_protected);
19225 }
19226
19227 /* Generate a DIE for a class member.  */
19228
19229 static void
19230 gen_member_die (tree type, dw_die_ref context_die)
19231 {
19232   tree member;
19233   tree binfo = TYPE_BINFO (type);
19234   dw_die_ref child;
19235
19236   /* If this is not an incomplete type, output descriptions of each of its
19237      members. Note that as we output the DIEs necessary to represent the
19238      members of this record or union type, we will also be trying to output
19239      DIEs to represent the *types* of those members. However the `type'
19240      function (above) will specifically avoid generating type DIEs for member
19241      types *within* the list of member DIEs for this (containing) type except
19242      for those types (of members) which are explicitly marked as also being
19243      members of this (containing) type themselves.  The g++ front- end can
19244      force any given type to be treated as a member of some other (containing)
19245      type by setting the TYPE_CONTEXT of the given (member) type to point to
19246      the TREE node representing the appropriate (containing) type.  */
19247
19248   /* First output info about the base classes.  */
19249   if (binfo)
19250     {
19251       VEC(tree,gc) *accesses = BINFO_BASE_ACCESSES (binfo);
19252       int i;
19253       tree base;
19254
19255       for (i = 0; BINFO_BASE_ITERATE (binfo, i, base); i++)
19256         gen_inheritance_die (base,
19257                              (accesses ? VEC_index (tree, accesses, i)
19258                               : access_public_node), context_die);
19259     }
19260
19261   /* Now output info about the data members and type members.  */
19262   for (member = TYPE_FIELDS (type); member; member = TREE_CHAIN (member))
19263     {
19264       /* If we thought we were generating minimal debug info for TYPE
19265          and then changed our minds, some of the member declarations
19266          may have already been defined.  Don't define them again, but
19267          do put them in the right order.  */
19268
19269       child = lookup_decl_die (member);
19270       if (child)
19271         splice_child_die (context_die, child);
19272       else
19273         gen_decl_die (member, NULL, context_die);
19274     }
19275
19276   /* Now output info about the function members (if any).  */
19277   for (member = TYPE_METHODS (type); member; member = TREE_CHAIN (member))
19278     {
19279       /* Don't include clones in the member list.  */
19280       if (DECL_ABSTRACT_ORIGIN (member))
19281         continue;
19282
19283       child = lookup_decl_die (member);
19284       if (child)
19285         splice_child_die (context_die, child);
19286       else
19287         gen_decl_die (member, NULL, context_die);
19288     }
19289 }
19290
19291 /* Generate a DIE for a structure or union type.  If TYPE_DECL_SUPPRESS_DEBUG
19292    is set, we pretend that the type was never defined, so we only get the
19293    member DIEs needed by later specification DIEs.  */
19294
19295 static void
19296 gen_struct_or_union_type_die (tree type, dw_die_ref context_die,
19297                                 enum debug_info_usage usage)
19298 {
19299   dw_die_ref type_die = lookup_type_die (type);
19300   dw_die_ref scope_die = 0;
19301   int nested = 0;
19302   int complete = (TYPE_SIZE (type)
19303                   && (! TYPE_STUB_DECL (type)
19304                       || ! TYPE_DECL_SUPPRESS_DEBUG (TYPE_STUB_DECL (type))));
19305   int ns_decl = (context_die && context_die->die_tag == DW_TAG_namespace);
19306   complete = complete && should_emit_struct_debug (type, usage);
19307
19308   if (type_die && ! complete)
19309     return;
19310
19311   if (TYPE_CONTEXT (type) != NULL_TREE
19312       && (AGGREGATE_TYPE_P (TYPE_CONTEXT (type))
19313           || TREE_CODE (TYPE_CONTEXT (type)) == NAMESPACE_DECL))
19314     nested = 1;
19315
19316   scope_die = scope_die_for (type, context_die);
19317
19318   if (! type_die || (nested && scope_die == comp_unit_die))
19319     /* First occurrence of type or toplevel definition of nested class.  */
19320     {
19321       dw_die_ref old_die = type_die;
19322
19323       type_die = new_die (TREE_CODE (type) == RECORD_TYPE
19324                           ? record_type_tag (type) : DW_TAG_union_type,
19325                           scope_die, type);
19326       equate_type_number_to_die (type, type_die);
19327       if (old_die)
19328         add_AT_specification (type_die, old_die);
19329       else
19330         add_name_attribute (type_die, type_tag (type));
19331     }
19332   else
19333     remove_AT (type_die, DW_AT_declaration);
19334
19335   /* Generate child dies for template paramaters.  */
19336   if (debug_info_level > DINFO_LEVEL_TERSE
19337       && COMPLETE_TYPE_P (type))
19338     gen_generic_params_dies (type);
19339
19340   /* If this type has been completed, then give it a byte_size attribute and
19341      then give a list of members.  */
19342   if (complete && !ns_decl)
19343     {
19344       /* Prevent infinite recursion in cases where the type of some member of
19345          this type is expressed in terms of this type itself.  */
19346       TREE_ASM_WRITTEN (type) = 1;
19347       add_byte_size_attribute (type_die, type);
19348       if (TYPE_STUB_DECL (type) != NULL_TREE)
19349         add_src_coords_attributes (type_die, TYPE_STUB_DECL (type));
19350
19351       /* If the first reference to this type was as the return type of an
19352          inline function, then it may not have a parent.  Fix this now.  */
19353       if (type_die->die_parent == NULL)
19354         add_child_die (scope_die, type_die);
19355
19356       push_decl_scope (type);
19357       gen_member_die (type, type_die);
19358       pop_decl_scope ();
19359
19360       /* GNU extension: Record what type our vtable lives in.  */
19361       if (TYPE_VFIELD (type))
19362         {
19363           tree vtype = DECL_FCONTEXT (TYPE_VFIELD (type));
19364
19365           gen_type_die (vtype, context_die);
19366           add_AT_die_ref (type_die, DW_AT_containing_type,
19367                           lookup_type_die (vtype));
19368         }
19369     }
19370   else
19371     {
19372       add_AT_flag (type_die, DW_AT_declaration, 1);
19373
19374       /* We don't need to do this for function-local types.  */
19375       if (TYPE_STUB_DECL (type)
19376           && ! decl_function_context (TYPE_STUB_DECL (type)))
19377         VEC_safe_push (tree, gc, incomplete_types, type);
19378     }
19379
19380   if (get_AT (type_die, DW_AT_name))
19381     add_pubtype (type, type_die);
19382 }
19383
19384 /* Generate a DIE for a subroutine _type_.  */
19385
19386 static void
19387 gen_subroutine_type_die (tree type, dw_die_ref context_die)
19388 {
19389   tree return_type = TREE_TYPE (type);
19390   dw_die_ref subr_die
19391     = new_die (DW_TAG_subroutine_type,
19392                scope_die_for (type, context_die), type);
19393
19394   equate_type_number_to_die (type, subr_die);
19395   add_prototyped_attribute (subr_die, type);
19396   add_type_attribute (subr_die, return_type, 0, 0, context_die);
19397   gen_formal_types_die (type, subr_die);
19398
19399   if (get_AT (subr_die, DW_AT_name))
19400     add_pubtype (type, subr_die);
19401 }
19402
19403 /* Generate a DIE for a type definition.  */
19404
19405 static void
19406 gen_typedef_die (tree decl, dw_die_ref context_die)
19407 {
19408   dw_die_ref type_die;
19409   tree origin;
19410
19411   if (TREE_ASM_WRITTEN (decl))
19412     return;
19413
19414   TREE_ASM_WRITTEN (decl) = 1;
19415   type_die = new_die (DW_TAG_typedef, context_die, decl);
19416   origin = decl_ultimate_origin (decl);
19417   if (origin != NULL)
19418     add_abstract_origin_attribute (type_die, origin);
19419   else
19420     {
19421       tree type;
19422
19423       add_name_and_src_coords_attributes (type_die, decl);
19424       if (DECL_ORIGINAL_TYPE (decl))
19425         {
19426           type = DECL_ORIGINAL_TYPE (decl);
19427
19428           gcc_assert (type != TREE_TYPE (decl));
19429           equate_type_number_to_die (TREE_TYPE (decl), type_die);
19430         }
19431       else
19432         {
19433           type = TREE_TYPE (decl);
19434
19435           if (is_naming_typedef_decl (TYPE_NAME (type)))
19436             /* 
19437                Here, we are in the case of decl being a typedef naming
19438                an anonymous type, e.g:
19439                      typedef struct {...} foo;
19440                In that case TREE_TYPE (decl) is not a typedef variant
19441                type and TYPE_NAME of the anonymous type is set to the
19442                TYPE_DECL of the typedef. This construct is emitted by
19443                the C++ FE.
19444
19445                TYPE is the anonymous struct named by the typedef
19446                DECL. As we need the DW_AT_type attribute of the
19447                DW_TAG_typedef to point to the DIE of TYPE, let's
19448                generate that DIE right away. add_type_attribute
19449                called below will then pick (via lookup_type_die) that
19450                anonymous struct DIE.  */
19451             gen_tagged_type_die (type, context_die, DINFO_USAGE_DIR_USE);
19452         }
19453
19454       add_type_attribute (type_die, type, TREE_READONLY (decl),
19455                           TREE_THIS_VOLATILE (decl), context_die);
19456
19457       if (is_naming_typedef_decl (decl))
19458         /* We want that all subsequent calls to lookup_type_die with
19459            TYPE in argument yield the DW_TAG_typedef we have just
19460            created.  */
19461         equate_type_number_to_die (type, type_die);
19462     }
19463
19464   if (DECL_ABSTRACT (decl))
19465     equate_decl_number_to_die (decl, type_die);
19466
19467   if (get_AT (type_die, DW_AT_name))
19468     add_pubtype (decl, type_die);
19469 }
19470
19471 /* Generate a DIE for a struct, class, enum or union type.  */
19472
19473 static void
19474 gen_tagged_type_die (tree type,
19475                      dw_die_ref context_die,
19476                      enum debug_info_usage usage)
19477 {
19478   int need_pop;
19479
19480   if (type == NULL_TREE
19481       || !is_tagged_type (type))
19482     return;
19483
19484   /* If this is a nested type whose containing class hasn't been written
19485      out yet, writing it out will cover this one, too.  This does not apply
19486      to instantiations of member class templates; they need to be added to
19487      the containing class as they are generated.  FIXME: This hurts the
19488      idea of combining type decls from multiple TUs, since we can't predict
19489      what set of template instantiations we'll get.  */
19490   if (TYPE_CONTEXT (type)
19491       && AGGREGATE_TYPE_P (TYPE_CONTEXT (type))
19492       && ! TREE_ASM_WRITTEN (TYPE_CONTEXT (type)))
19493     {
19494       gen_type_die_with_usage (TYPE_CONTEXT (type), context_die, usage);
19495
19496       if (TREE_ASM_WRITTEN (type))
19497         return;
19498
19499       /* If that failed, attach ourselves to the stub.  */
19500       push_decl_scope (TYPE_CONTEXT (type));
19501       context_die = lookup_type_die (TYPE_CONTEXT (type));
19502       need_pop = 1;
19503     }
19504   else if (TYPE_CONTEXT (type) != NULL_TREE
19505            && (TREE_CODE (TYPE_CONTEXT (type)) == FUNCTION_DECL))
19506     {
19507       /* If this type is local to a function that hasn't been written
19508          out yet, use a NULL context for now; it will be fixed up in
19509          decls_for_scope.  */
19510       context_die = lookup_decl_die (TYPE_CONTEXT (type));
19511       need_pop = 0;
19512     }
19513   else
19514     {
19515       context_die = declare_in_namespace (type, context_die);
19516       need_pop = 0;
19517     }
19518
19519   if (TREE_CODE (type) == ENUMERAL_TYPE)
19520     {
19521       /* This might have been written out by the call to
19522          declare_in_namespace.  */
19523       if (!TREE_ASM_WRITTEN (type))
19524         gen_enumeration_type_die (type, context_die);
19525     }
19526   else
19527     gen_struct_or_union_type_die (type, context_die, usage);
19528
19529   if (need_pop)
19530     pop_decl_scope ();
19531
19532   /* Don't set TREE_ASM_WRITTEN on an incomplete struct; we want to fix
19533      it up if it is ever completed.  gen_*_type_die will set it for us
19534      when appropriate.  */
19535 }
19536
19537 /* Generate a type description DIE.  */
19538
19539 static void
19540 gen_type_die_with_usage (tree type, dw_die_ref context_die,
19541                                 enum debug_info_usage usage)
19542 {
19543   struct array_descr_info info;
19544
19545   if (type == NULL_TREE || type == error_mark_node)
19546     return;
19547
19548   /* If TYPE is a typedef type variant, let's generate debug info
19549      for the parent typedef which TYPE is a type of.  */
19550   if (typedef_variant_p (type))
19551     {
19552       if (TREE_ASM_WRITTEN (type))
19553         return;
19554
19555       /* Prevent broken recursion; we can't hand off to the same type.  */
19556       gcc_assert (DECL_ORIGINAL_TYPE (TYPE_NAME (type)) != type);
19557
19558       /* Use the DIE of the containing namespace as the parent DIE of
19559          the type description DIE we want to generate.  */
19560       if (DECL_CONTEXT (TYPE_NAME (type))
19561           && TREE_CODE (DECL_CONTEXT (TYPE_NAME (type))) == NAMESPACE_DECL)
19562         context_die = get_context_die (DECL_CONTEXT (TYPE_NAME (type)));
19563
19564       TREE_ASM_WRITTEN (type) = 1;
19565
19566       gen_decl_die (TYPE_NAME (type), NULL, context_die);
19567       return;
19568     }
19569
19570   /* If type is an anonymous tagged type named by a typedef, let's
19571      generate debug info for the typedef.  */
19572   if (is_naming_typedef_decl (TYPE_NAME (type)))
19573     {
19574       /* Use the DIE of the containing namespace as the parent DIE of
19575          the type description DIE we want to generate.  */
19576       if (DECL_CONTEXT (TYPE_NAME (type))
19577           && TREE_CODE (DECL_CONTEXT (TYPE_NAME (type))) == NAMESPACE_DECL)
19578         context_die = get_context_die (DECL_CONTEXT (TYPE_NAME (type)));
19579       
19580       gen_decl_die (TYPE_NAME (type), NULL, context_die);
19581       return;
19582     }
19583
19584   /* If this is an array type with hidden descriptor, handle it first.  */
19585   if (!TREE_ASM_WRITTEN (type)
19586       && lang_hooks.types.get_array_descr_info
19587       && lang_hooks.types.get_array_descr_info (type, &info)
19588       && (dwarf_version >= 3 || !dwarf_strict))
19589     {
19590       gen_descr_array_type_die (type, &info, context_die);
19591       TREE_ASM_WRITTEN (type) = 1;
19592       return;
19593     }
19594
19595   /* We are going to output a DIE to represent the unqualified version
19596      of this type (i.e. without any const or volatile qualifiers) so
19597      get the main variant (i.e. the unqualified version) of this type
19598      now.  (Vectors are special because the debugging info is in the
19599      cloned type itself).  */
19600   if (TREE_CODE (type) != VECTOR_TYPE)
19601     type = type_main_variant (type);
19602
19603   if (TREE_ASM_WRITTEN (type))
19604     return;
19605
19606   switch (TREE_CODE (type))
19607     {
19608     case ERROR_MARK:
19609       break;
19610
19611     case POINTER_TYPE:
19612     case REFERENCE_TYPE:
19613       /* We must set TREE_ASM_WRITTEN in case this is a recursive type.  This
19614          ensures that the gen_type_die recursion will terminate even if the
19615          type is recursive.  Recursive types are possible in Ada.  */
19616       /* ??? We could perhaps do this for all types before the switch
19617          statement.  */
19618       TREE_ASM_WRITTEN (type) = 1;
19619
19620       /* For these types, all that is required is that we output a DIE (or a
19621          set of DIEs) to represent the "basis" type.  */
19622       gen_type_die_with_usage (TREE_TYPE (type), context_die,
19623                                 DINFO_USAGE_IND_USE);
19624       break;
19625
19626     case OFFSET_TYPE:
19627       /* This code is used for C++ pointer-to-data-member types.
19628          Output a description of the relevant class type.  */
19629       gen_type_die_with_usage (TYPE_OFFSET_BASETYPE (type), context_die,
19630                                         DINFO_USAGE_IND_USE);
19631
19632       /* Output a description of the type of the object pointed to.  */
19633       gen_type_die_with_usage (TREE_TYPE (type), context_die,
19634                                         DINFO_USAGE_IND_USE);
19635
19636       /* Now output a DIE to represent this pointer-to-data-member type
19637          itself.  */
19638       gen_ptr_to_mbr_type_die (type, context_die);
19639       break;
19640
19641     case FUNCTION_TYPE:
19642       /* Force out return type (in case it wasn't forced out already).  */
19643       gen_type_die_with_usage (TREE_TYPE (type), context_die,
19644                                         DINFO_USAGE_DIR_USE);
19645       gen_subroutine_type_die (type, context_die);
19646       break;
19647
19648     case METHOD_TYPE:
19649       /* Force out return type (in case it wasn't forced out already).  */
19650       gen_type_die_with_usage (TREE_TYPE (type), context_die,
19651                                         DINFO_USAGE_DIR_USE);
19652       gen_subroutine_type_die (type, context_die);
19653       break;
19654
19655     case ARRAY_TYPE:
19656       gen_array_type_die (type, context_die);
19657       break;
19658
19659     case VECTOR_TYPE:
19660       gen_array_type_die (type, context_die);
19661       break;
19662
19663     case ENUMERAL_TYPE:
19664     case RECORD_TYPE:
19665     case UNION_TYPE:
19666     case QUAL_UNION_TYPE:
19667       gen_tagged_type_die (type, context_die, usage);
19668       return;
19669
19670     case VOID_TYPE:
19671     case INTEGER_TYPE:
19672     case REAL_TYPE:
19673     case FIXED_POINT_TYPE:
19674     case COMPLEX_TYPE:
19675     case BOOLEAN_TYPE:
19676       /* No DIEs needed for fundamental types.  */
19677       break;
19678
19679     case LANG_TYPE:
19680       /* Just use DW_TAG_unspecified_type.  */
19681       {
19682         dw_die_ref type_die = lookup_type_die (type);
19683         if (type_die == NULL)
19684           {
19685             tree name = TYPE_NAME (type);
19686             if (TREE_CODE (name) == TYPE_DECL)
19687               name = DECL_NAME (name);
19688             type_die = new_die (DW_TAG_unspecified_type, comp_unit_die, type);
19689             add_name_attribute (type_die, IDENTIFIER_POINTER (name));
19690             equate_type_number_to_die (type, type_die);
19691           }
19692       }
19693       break;
19694
19695     default:
19696       gcc_unreachable ();
19697     }
19698
19699   TREE_ASM_WRITTEN (type) = 1;
19700 }
19701
19702 static void
19703 gen_type_die (tree type, dw_die_ref context_die)
19704 {
19705   gen_type_die_with_usage (type, context_die, DINFO_USAGE_DIR_USE);
19706 }
19707
19708 /* Generate a DW_TAG_lexical_block DIE followed by DIEs to represent all of the
19709    things which are local to the given block.  */
19710
19711 static void
19712 gen_block_die (tree stmt, dw_die_ref context_die, int depth)
19713 {
19714   int must_output_die = 0;
19715   bool inlined_func;
19716
19717   /* Ignore blocks that are NULL.  */
19718   if (stmt == NULL_TREE)
19719     return;
19720
19721   inlined_func = inlined_function_outer_scope_p (stmt);
19722
19723   /* If the block is one fragment of a non-contiguous block, do not
19724      process the variables, since they will have been done by the
19725      origin block.  Do process subblocks.  */
19726   if (BLOCK_FRAGMENT_ORIGIN (stmt))
19727     {
19728       tree sub;
19729
19730       for (sub = BLOCK_SUBBLOCKS (stmt); sub; sub = BLOCK_CHAIN (sub))
19731         gen_block_die (sub, context_die, depth + 1);
19732
19733       return;
19734     }
19735
19736   /* Determine if we need to output any Dwarf DIEs at all to represent this
19737      block.  */
19738   if (inlined_func)
19739     /* The outer scopes for inlinings *must* always be represented.  We
19740        generate DW_TAG_inlined_subroutine DIEs for them.  (See below.) */
19741     must_output_die = 1;
19742   else
19743     {
19744       /* Determine if this block directly contains any "significant"
19745          local declarations which we will need to output DIEs for.  */
19746       if (debug_info_level > DINFO_LEVEL_TERSE)
19747         /* We are not in terse mode so *any* local declaration counts
19748            as being a "significant" one.  */
19749         must_output_die = ((BLOCK_VARS (stmt) != NULL
19750                             || BLOCK_NUM_NONLOCALIZED_VARS (stmt))
19751                            && (TREE_USED (stmt)
19752                                || TREE_ASM_WRITTEN (stmt)
19753                                || BLOCK_ABSTRACT (stmt)));
19754       else if ((TREE_USED (stmt)
19755                 || TREE_ASM_WRITTEN (stmt)
19756                 || BLOCK_ABSTRACT (stmt))
19757                && !dwarf2out_ignore_block (stmt))
19758         must_output_die = 1;
19759     }
19760
19761   /* It would be a waste of space to generate a Dwarf DW_TAG_lexical_block
19762      DIE for any block which contains no significant local declarations at
19763      all.  Rather, in such cases we just call `decls_for_scope' so that any
19764      needed Dwarf info for any sub-blocks will get properly generated. Note
19765      that in terse mode, our definition of what constitutes a "significant"
19766      local declaration gets restricted to include only inlined function
19767      instances and local (nested) function definitions.  */
19768   if (must_output_die)
19769     {
19770       if (inlined_func)
19771         {
19772           /* If STMT block is abstract, that means we have been called
19773              indirectly from dwarf2out_abstract_function.
19774              That function rightfully marks the descendent blocks (of
19775              the abstract function it is dealing with) as being abstract,
19776              precisely to prevent us from emitting any
19777              DW_TAG_inlined_subroutine DIE as a descendent
19778              of an abstract function instance. So in that case, we should
19779              not call gen_inlined_subroutine_die.
19780
19781              Later though, when cgraph asks dwarf2out to emit info
19782              for the concrete instance of the function decl into which
19783              the concrete instance of STMT got inlined, the later will lead
19784              to the generation of a DW_TAG_inlined_subroutine DIE.  */
19785           if (! BLOCK_ABSTRACT (stmt))
19786             gen_inlined_subroutine_die (stmt, context_die, depth);
19787         }
19788       else
19789         gen_lexical_block_die (stmt, context_die, depth);
19790     }
19791   else
19792     decls_for_scope (stmt, context_die, depth);
19793 }
19794
19795 /* Process variable DECL (or variable with origin ORIGIN) within
19796    block STMT and add it to CONTEXT_DIE.  */
19797 static void
19798 process_scope_var (tree stmt, tree decl, tree origin, dw_die_ref context_die)
19799 {
19800   dw_die_ref die;
19801   tree decl_or_origin = decl ? decl : origin;
19802
19803   if (TREE_CODE (decl_or_origin) == FUNCTION_DECL)
19804     die = lookup_decl_die (decl_or_origin);
19805   else if (TREE_CODE (decl_or_origin) == TYPE_DECL
19806            && TYPE_DECL_IS_STUB (decl_or_origin))
19807     die = lookup_type_die (TREE_TYPE (decl_or_origin));
19808   else
19809     die = NULL;
19810
19811   if (die != NULL && die->die_parent == NULL)
19812     add_child_die (context_die, die);
19813   else if (TREE_CODE (decl_or_origin) == IMPORTED_DECL)
19814     dwarf2out_imported_module_or_decl_1 (decl_or_origin, DECL_NAME (decl_or_origin),
19815                                          stmt, context_die);
19816   else
19817     gen_decl_die (decl, origin, context_die);
19818 }
19819
19820 /* Generate all of the decls declared within a given scope and (recursively)
19821    all of its sub-blocks.  */
19822
19823 static void
19824 decls_for_scope (tree stmt, dw_die_ref context_die, int depth)
19825 {
19826   tree decl;
19827   unsigned int i;
19828   tree subblocks;
19829
19830   /* Ignore NULL blocks.  */
19831   if (stmt == NULL_TREE)
19832     return;
19833
19834   /* Output the DIEs to represent all of the data objects and typedefs
19835      declared directly within this block but not within any nested
19836      sub-blocks.  Also, nested function and tag DIEs have been
19837      generated with a parent of NULL; fix that up now.  */
19838   for (decl = BLOCK_VARS (stmt); decl != NULL; decl = TREE_CHAIN (decl))
19839     process_scope_var (stmt, decl, NULL_TREE, context_die);
19840   for (i = 0; i < BLOCK_NUM_NONLOCALIZED_VARS (stmt); i++)
19841     process_scope_var (stmt, NULL, BLOCK_NONLOCALIZED_VAR (stmt, i),
19842                        context_die);
19843
19844   /* If we're at -g1, we're not interested in subblocks.  */
19845   if (debug_info_level <= DINFO_LEVEL_TERSE)
19846     return;
19847
19848   /* Output the DIEs to represent all sub-blocks (and the items declared
19849      therein) of this block.  */
19850   for (subblocks = BLOCK_SUBBLOCKS (stmt);
19851        subblocks != NULL;
19852        subblocks = BLOCK_CHAIN (subblocks))
19853     gen_block_die (subblocks, context_die, depth + 1);
19854 }
19855
19856 /* Is this a typedef we can avoid emitting?  */
19857
19858 static inline int
19859 is_redundant_typedef (const_tree decl)
19860 {
19861   if (TYPE_DECL_IS_STUB (decl))
19862     return 1;
19863
19864   if (DECL_ARTIFICIAL (decl)
19865       && DECL_CONTEXT (decl)
19866       && is_tagged_type (DECL_CONTEXT (decl))
19867       && TREE_CODE (TYPE_NAME (DECL_CONTEXT (decl))) == TYPE_DECL
19868       && DECL_NAME (decl) == DECL_NAME (TYPE_NAME (DECL_CONTEXT (decl))))
19869     /* Also ignore the artificial member typedef for the class name.  */
19870     return 1;
19871
19872   return 0;
19873 }
19874
19875 /* Return TRUE if TYPE is a typedef that names a type for linkage
19876    purposes. This kind of typedefs is produced by the C++ FE for
19877    constructs like:
19878
19879    typedef struct {...} foo;
19880
19881    In that case, there is no typedef variant type produced for foo.
19882    Rather, the TREE_TYPE of the TYPE_DECL of foo is the anonymous
19883    struct type.  */
19884
19885 static bool
19886 is_naming_typedef_decl (const_tree decl)
19887 {
19888   if (decl == NULL_TREE
19889       || TREE_CODE (decl) != TYPE_DECL
19890       || !is_tagged_type (TREE_TYPE (decl))
19891       || is_redundant_typedef (decl)
19892       /* It looks like Ada produces TYPE_DECLs that are very similar
19893          to C++ naming typedefs but that have different
19894          semantics. Let's be specific to c++ for now.  */
19895       || !is_cxx ())
19896     return FALSE;
19897
19898   return (DECL_ORIGINAL_TYPE (decl) == NULL_TREE
19899           && TYPE_NAME (TREE_TYPE (decl)) == decl
19900           && (TYPE_STUB_DECL (TREE_TYPE (decl))
19901               != TYPE_NAME (TREE_TYPE (decl))));
19902 }
19903
19904 /* Returns the DIE for a context.  */
19905
19906 static inline dw_die_ref
19907 get_context_die (tree context)
19908 {
19909   if (context)
19910     {
19911       /* Find die that represents this context.  */
19912       if (TYPE_P (context))
19913         return force_type_die (TYPE_MAIN_VARIANT (context));
19914       else
19915         return force_decl_die (context);
19916     }
19917   return comp_unit_die;
19918 }
19919
19920 /* Returns the DIE for decl.  A DIE will always be returned.  */
19921
19922 static dw_die_ref
19923 force_decl_die (tree decl)
19924 {
19925   dw_die_ref decl_die;
19926   unsigned saved_external_flag;
19927   tree save_fn = NULL_TREE;
19928   decl_die = lookup_decl_die (decl);
19929   if (!decl_die)
19930     {
19931       dw_die_ref context_die = get_context_die (DECL_CONTEXT (decl));
19932
19933       decl_die = lookup_decl_die (decl);
19934       if (decl_die)
19935         return decl_die;
19936
19937       switch (TREE_CODE (decl))
19938         {
19939         case FUNCTION_DECL:
19940           /* Clear current_function_decl, so that gen_subprogram_die thinks
19941              that this is a declaration. At this point, we just want to force
19942              declaration die.  */
19943           save_fn = current_function_decl;
19944           current_function_decl = NULL_TREE;
19945           gen_subprogram_die (decl, context_die);
19946           current_function_decl = save_fn;
19947           break;
19948
19949         case VAR_DECL:
19950           /* Set external flag to force declaration die. Restore it after
19951            gen_decl_die() call.  */
19952           saved_external_flag = DECL_EXTERNAL (decl);
19953           DECL_EXTERNAL (decl) = 1;
19954           gen_decl_die (decl, NULL, context_die);
19955           DECL_EXTERNAL (decl) = saved_external_flag;
19956           break;
19957
19958         case NAMESPACE_DECL:
19959           if (dwarf_version >= 3 || !dwarf_strict)
19960             dwarf2out_decl (decl);
19961           else
19962             /* DWARF2 has neither DW_TAG_module, nor DW_TAG_namespace.  */
19963             decl_die = comp_unit_die;
19964           break;
19965
19966         default:
19967           gcc_unreachable ();
19968         }
19969
19970       /* We should be able to find the DIE now.  */
19971       if (!decl_die)
19972         decl_die = lookup_decl_die (decl);
19973       gcc_assert (decl_die);
19974     }
19975
19976   return decl_die;
19977 }
19978
19979 /* Returns the DIE for TYPE, that must not be a base type.  A DIE is
19980    always returned.  */
19981
19982 static dw_die_ref
19983 force_type_die (tree type)
19984 {
19985   dw_die_ref type_die;
19986
19987   type_die = lookup_type_die (type);
19988   if (!type_die)
19989     {
19990       dw_die_ref context_die = get_context_die (TYPE_CONTEXT (type));
19991
19992       type_die = modified_type_die (type, TYPE_READONLY (type),
19993                                     TYPE_VOLATILE (type), context_die);
19994       gcc_assert (type_die);
19995     }
19996   return type_die;
19997 }
19998
19999 /* Force out any required namespaces to be able to output DECL,
20000    and return the new context_die for it, if it's changed.  */
20001
20002 static dw_die_ref
20003 setup_namespace_context (tree thing, dw_die_ref context_die)
20004 {
20005   tree context = (DECL_P (thing)
20006                   ? DECL_CONTEXT (thing) : TYPE_CONTEXT (thing));
20007   if (context && TREE_CODE (context) == NAMESPACE_DECL)
20008     /* Force out the namespace.  */
20009     context_die = force_decl_die (context);
20010
20011   return context_die;
20012 }
20013
20014 /* Emit a declaration DIE for THING (which is either a DECL or a tagged
20015    type) within its namespace, if appropriate.
20016
20017    For compatibility with older debuggers, namespace DIEs only contain
20018    declarations; all definitions are emitted at CU scope.  */
20019
20020 static dw_die_ref
20021 declare_in_namespace (tree thing, dw_die_ref context_die)
20022 {
20023   dw_die_ref ns_context;
20024
20025   if (debug_info_level <= DINFO_LEVEL_TERSE)
20026     return context_die;
20027
20028   /* If this decl is from an inlined function, then don't try to emit it in its
20029      namespace, as we will get confused.  It would have already been emitted
20030      when the abstract instance of the inline function was emitted anyways.  */
20031   if (DECL_P (thing) && DECL_ABSTRACT_ORIGIN (thing))
20032     return context_die;
20033
20034   ns_context = setup_namespace_context (thing, context_die);
20035
20036   if (ns_context != context_die)
20037     {
20038       if (is_fortran ())
20039         return ns_context;
20040       if (DECL_P (thing))
20041         gen_decl_die (thing, NULL, ns_context);
20042       else
20043         gen_type_die (thing, ns_context);
20044     }
20045   return context_die;
20046 }
20047
20048 /* Generate a DIE for a namespace or namespace alias.  */
20049
20050 static void
20051 gen_namespace_die (tree decl, dw_die_ref context_die)
20052 {
20053   dw_die_ref namespace_die;
20054
20055   /* Namespace aliases have a DECL_ABSTRACT_ORIGIN of the namespace
20056      they are an alias of.  */
20057   if (DECL_ABSTRACT_ORIGIN (decl) == NULL)
20058     {
20059       /* Output a real namespace or module.  */
20060       context_die = setup_namespace_context (decl, comp_unit_die);
20061       namespace_die = new_die (is_fortran ()
20062                                ? DW_TAG_module : DW_TAG_namespace,
20063                                context_die, decl);
20064       /* For Fortran modules defined in different CU don't add src coords.  */
20065       if (namespace_die->die_tag == DW_TAG_module && DECL_EXTERNAL (decl))
20066         {
20067           const char *name = dwarf2_name (decl, 0);
20068           if (name)
20069             add_name_attribute (namespace_die, name);
20070         }
20071       else
20072         add_name_and_src_coords_attributes (namespace_die, decl);
20073       if (DECL_EXTERNAL (decl))
20074         add_AT_flag (namespace_die, DW_AT_declaration, 1);
20075       equate_decl_number_to_die (decl, namespace_die);
20076     }
20077   else
20078     {
20079       /* Output a namespace alias.  */
20080
20081       /* Force out the namespace we are an alias of, if necessary.  */
20082       dw_die_ref origin_die
20083         = force_decl_die (DECL_ABSTRACT_ORIGIN (decl));
20084
20085       if (DECL_CONTEXT (decl) == NULL_TREE
20086           || TREE_CODE (DECL_CONTEXT (decl)) == NAMESPACE_DECL)
20087         context_die = setup_namespace_context (decl, comp_unit_die);
20088       /* Now create the namespace alias DIE.  */
20089       namespace_die = new_die (DW_TAG_imported_declaration, context_die, decl);
20090       add_name_and_src_coords_attributes (namespace_die, decl);
20091       add_AT_die_ref (namespace_die, DW_AT_import, origin_die);
20092       equate_decl_number_to_die (decl, namespace_die);
20093     }
20094 }
20095
20096 /* Generate Dwarf debug information for a decl described by DECL.  */
20097
20098 static void
20099 gen_decl_die (tree decl, tree origin, dw_die_ref context_die)
20100 {
20101   tree decl_or_origin = decl ? decl : origin;
20102   tree class_origin = NULL, ultimate_origin;
20103
20104   if (DECL_P (decl_or_origin) && DECL_IGNORED_P (decl_or_origin))
20105     return;
20106
20107   switch (TREE_CODE (decl_or_origin))
20108     {
20109     case ERROR_MARK:
20110       break;
20111
20112     case CONST_DECL:
20113       if (!is_fortran ())
20114         {
20115           /* The individual enumerators of an enum type get output when we output
20116              the Dwarf representation of the relevant enum type itself.  */
20117           break;
20118         }
20119
20120       /* Emit its type.  */
20121       gen_type_die (TREE_TYPE (decl), context_die);
20122
20123       /* And its containing namespace.  */
20124       context_die = declare_in_namespace (decl, context_die);
20125
20126       gen_const_die (decl, context_die);
20127       break;
20128
20129     case FUNCTION_DECL:
20130       /* Don't output any DIEs to represent mere function declarations,
20131          unless they are class members or explicit block externs.  */
20132       if (DECL_INITIAL (decl_or_origin) == NULL_TREE
20133           && DECL_CONTEXT (decl_or_origin) == NULL_TREE
20134           && (current_function_decl == NULL_TREE
20135               || DECL_ARTIFICIAL (decl_or_origin)))
20136         break;
20137
20138 #if 0
20139       /* FIXME */
20140       /* This doesn't work because the C frontend sets DECL_ABSTRACT_ORIGIN
20141          on local redeclarations of global functions.  That seems broken.  */
20142       if (current_function_decl != decl)
20143         /* This is only a declaration.  */;
20144 #endif
20145
20146       /* If we're emitting a clone, emit info for the abstract instance.  */
20147       if (origin || DECL_ORIGIN (decl) != decl)
20148         dwarf2out_abstract_function (origin
20149                                      ? DECL_ORIGIN (origin)
20150                                      : DECL_ABSTRACT_ORIGIN (decl));
20151
20152       /* If we're emitting an out-of-line copy of an inline function,
20153          emit info for the abstract instance and set up to refer to it.  */
20154       else if (cgraph_function_possibly_inlined_p (decl)
20155                && ! DECL_ABSTRACT (decl)
20156                && ! class_or_namespace_scope_p (context_die)
20157                /* dwarf2out_abstract_function won't emit a die if this is just
20158                   a declaration.  We must avoid setting DECL_ABSTRACT_ORIGIN in
20159                   that case, because that works only if we have a die.  */
20160                && DECL_INITIAL (decl) != NULL_TREE)
20161         {
20162           dwarf2out_abstract_function (decl);
20163           set_decl_origin_self (decl);
20164         }
20165
20166       /* Otherwise we're emitting the primary DIE for this decl.  */
20167       else if (debug_info_level > DINFO_LEVEL_TERSE)
20168         {
20169           /* Before we describe the FUNCTION_DECL itself, make sure that we
20170              have described its return type.  */
20171           gen_type_die (TREE_TYPE (TREE_TYPE (decl)), context_die);
20172
20173           /* And its virtual context.  */
20174           if (DECL_VINDEX (decl) != NULL_TREE)
20175             gen_type_die (DECL_CONTEXT (decl), context_die);
20176
20177           /* And its containing type.  */
20178           if (!origin)
20179             origin = decl_class_context (decl);
20180           if (origin != NULL_TREE)
20181             gen_type_die_for_member (origin, decl, context_die);
20182
20183           /* And its containing namespace.  */
20184           context_die = declare_in_namespace (decl, context_die);
20185         }
20186
20187       /* Now output a DIE to represent the function itself.  */
20188       if (decl)
20189         gen_subprogram_die (decl, context_die);
20190       break;
20191
20192     case TYPE_DECL:
20193       /* If we are in terse mode, don't generate any DIEs to represent any
20194          actual typedefs.  */
20195       if (debug_info_level <= DINFO_LEVEL_TERSE)
20196         break;
20197
20198       /* In the special case of a TYPE_DECL node representing the declaration
20199          of some type tag, if the given TYPE_DECL is marked as having been
20200          instantiated from some other (original) TYPE_DECL node (e.g. one which
20201          was generated within the original definition of an inline function) we
20202          used to generate a special (abbreviated) DW_TAG_structure_type,
20203          DW_TAG_union_type, or DW_TAG_enumeration_type DIE here.  But nothing
20204          should be actually referencing those DIEs, as variable DIEs with that
20205          type would be emitted already in the abstract origin, so it was always
20206          removed during unused type prunning.  Don't add anything in this
20207          case.  */
20208       if (TYPE_DECL_IS_STUB (decl) && decl_ultimate_origin (decl) != NULL_TREE)
20209         break;
20210
20211       if (is_redundant_typedef (decl))
20212         gen_type_die (TREE_TYPE (decl), context_die);
20213       else
20214         /* Output a DIE to represent the typedef itself.  */
20215         gen_typedef_die (decl, context_die);
20216       break;
20217
20218     case LABEL_DECL:
20219       if (debug_info_level >= DINFO_LEVEL_NORMAL)
20220         gen_label_die (decl, context_die);
20221       break;
20222
20223     case VAR_DECL:
20224     case RESULT_DECL:
20225       /* If we are in terse mode, don't generate any DIEs to represent any
20226          variable declarations or definitions.  */
20227       if (debug_info_level <= DINFO_LEVEL_TERSE)
20228         break;
20229
20230       /* Output any DIEs that are needed to specify the type of this data
20231          object.  */
20232       if (decl_by_reference_p (decl_or_origin))
20233         gen_type_die (TREE_TYPE (TREE_TYPE (decl_or_origin)), context_die);
20234       else
20235         gen_type_die (TREE_TYPE (decl_or_origin), context_die);
20236
20237       /* And its containing type.  */
20238       class_origin = decl_class_context (decl_or_origin);
20239       if (class_origin != NULL_TREE)
20240         gen_type_die_for_member (class_origin, decl_or_origin, context_die);
20241
20242       /* And its containing namespace.  */
20243       context_die = declare_in_namespace (decl_or_origin, context_die);
20244
20245       /* Now output the DIE to represent the data object itself.  This gets
20246          complicated because of the possibility that the VAR_DECL really
20247          represents an inlined instance of a formal parameter for an inline
20248          function.  */
20249       ultimate_origin = decl_ultimate_origin (decl_or_origin);
20250       if (ultimate_origin != NULL_TREE
20251           && TREE_CODE (ultimate_origin) == PARM_DECL)
20252         gen_formal_parameter_die (decl, origin,
20253                                   true /* Emit name attribute.  */,
20254                                   context_die);
20255       else
20256         gen_variable_die (decl, origin, context_die);
20257       break;
20258
20259     case FIELD_DECL:
20260       /* Ignore the nameless fields that are used to skip bits but handle C++
20261          anonymous unions and structs.  */
20262       if (DECL_NAME (decl) != NULL_TREE
20263           || TREE_CODE (TREE_TYPE (decl)) == UNION_TYPE
20264           || TREE_CODE (TREE_TYPE (decl)) == RECORD_TYPE)
20265         {
20266           gen_type_die (member_declared_type (decl), context_die);
20267           gen_field_die (decl, context_die);
20268         }
20269       break;
20270
20271     case PARM_DECL:
20272       if (DECL_BY_REFERENCE (decl_or_origin))
20273         gen_type_die (TREE_TYPE (TREE_TYPE (decl_or_origin)), context_die);
20274       else
20275         gen_type_die (TREE_TYPE (decl_or_origin), context_die);
20276       gen_formal_parameter_die (decl, origin,
20277                                 true /* Emit name attribute.  */,
20278                                 context_die);
20279       break;
20280
20281     case NAMESPACE_DECL:
20282     case IMPORTED_DECL:
20283       if (dwarf_version >= 3 || !dwarf_strict)
20284         gen_namespace_die (decl, context_die);
20285       break;
20286
20287     default:
20288       /* Probably some frontend-internal decl.  Assume we don't care.  */
20289       gcc_assert ((int)TREE_CODE (decl) > NUM_TREE_CODES);
20290       break;
20291     }
20292 }
20293 \f
20294 /* Output debug information for global decl DECL.  Called from toplev.c after
20295    compilation proper has finished.  */
20296
20297 static void
20298 dwarf2out_global_decl (tree decl)
20299 {
20300   /* Output DWARF2 information for file-scope tentative data object
20301      declarations, file-scope (extern) function declarations (which
20302      had no corresponding body) and file-scope tagged type declarations
20303      and definitions which have not yet been forced out.  */
20304   if (TREE_CODE (decl) != FUNCTION_DECL || !DECL_INITIAL (decl))
20305     dwarf2out_decl (decl);
20306 }
20307
20308 /* Output debug information for type decl DECL.  Called from toplev.c
20309    and from language front ends (to record built-in types).  */
20310 static void
20311 dwarf2out_type_decl (tree decl, int local)
20312 {
20313   if (!local)
20314     dwarf2out_decl (decl);
20315 }
20316
20317 /* Output debug information for imported module or decl DECL.
20318    NAME is non-NULL name in the lexical block if the decl has been renamed.
20319    LEXICAL_BLOCK is the lexical block (which TREE_CODE is a BLOCK)
20320    that DECL belongs to.
20321    LEXICAL_BLOCK_DIE is the DIE of LEXICAL_BLOCK.  */
20322 static void
20323 dwarf2out_imported_module_or_decl_1 (tree decl,
20324                                      tree name,
20325                                      tree lexical_block,
20326                                      dw_die_ref lexical_block_die)
20327 {
20328   expanded_location xloc;
20329   dw_die_ref imported_die = NULL;
20330   dw_die_ref at_import_die;
20331
20332   if (TREE_CODE (decl) == IMPORTED_DECL)
20333     {
20334       xloc = expand_location (DECL_SOURCE_LOCATION (decl));
20335       decl = IMPORTED_DECL_ASSOCIATED_DECL (decl);
20336       gcc_assert (decl);
20337     }
20338   else
20339     xloc = expand_location (input_location);
20340
20341   if (TREE_CODE (decl) == TYPE_DECL || TREE_CODE (decl) == CONST_DECL)
20342     {
20343       at_import_die = force_type_die (TREE_TYPE (decl));
20344       /* For namespace N { typedef void T; } using N::T; base_type_die
20345          returns NULL, but DW_TAG_imported_declaration requires
20346          the DW_AT_import tag.  Force creation of DW_TAG_typedef.  */
20347       if (!at_import_die)
20348         {
20349           gcc_assert (TREE_CODE (decl) == TYPE_DECL);
20350           gen_typedef_die (decl, get_context_die (DECL_CONTEXT (decl)));
20351           at_import_die = lookup_type_die (TREE_TYPE (decl));
20352           gcc_assert (at_import_die);
20353         }
20354     }
20355   else
20356     {
20357       at_import_die = lookup_decl_die (decl);
20358       if (!at_import_die)
20359         {
20360           /* If we're trying to avoid duplicate debug info, we may not have
20361              emitted the member decl for this field.  Emit it now.  */
20362           if (TREE_CODE (decl) == FIELD_DECL)
20363             {
20364               tree type = DECL_CONTEXT (decl);
20365
20366               if (TYPE_CONTEXT (type)
20367                   && TYPE_P (TYPE_CONTEXT (type))
20368                   && !should_emit_struct_debug (TYPE_CONTEXT (type),
20369                                                 DINFO_USAGE_DIR_USE))
20370                 return;
20371               gen_type_die_for_member (type, decl,
20372                                        get_context_die (TYPE_CONTEXT (type)));
20373             }
20374           at_import_die = force_decl_die (decl);
20375         }
20376     }
20377
20378   if (TREE_CODE (decl) == NAMESPACE_DECL)
20379     {
20380       if (dwarf_version >= 3 || !dwarf_strict)
20381         imported_die = new_die (DW_TAG_imported_module,
20382                                 lexical_block_die,
20383                                 lexical_block);
20384       else
20385         return;
20386     }
20387   else
20388     imported_die = new_die (DW_TAG_imported_declaration,
20389                             lexical_block_die,
20390                             lexical_block);
20391
20392   add_AT_file (imported_die, DW_AT_decl_file, lookup_filename (xloc.file));
20393   add_AT_unsigned (imported_die, DW_AT_decl_line, xloc.line);
20394   if (name)
20395     add_AT_string (imported_die, DW_AT_name,
20396                    IDENTIFIER_POINTER (name));
20397   add_AT_die_ref (imported_die, DW_AT_import, at_import_die);
20398 }
20399
20400 /* Output debug information for imported module or decl DECL.
20401    NAME is non-NULL name in context if the decl has been renamed.
20402    CHILD is true if decl is one of the renamed decls as part of
20403    importing whole module.  */
20404
20405 static void
20406 dwarf2out_imported_module_or_decl (tree decl, tree name, tree context,
20407                                    bool child)
20408 {
20409   /* dw_die_ref at_import_die;  */
20410   dw_die_ref scope_die;
20411
20412   if (debug_info_level <= DINFO_LEVEL_TERSE)
20413     return;
20414
20415   gcc_assert (decl);
20416
20417   /* To emit DW_TAG_imported_module or DW_TAG_imported_decl, we need two DIEs.
20418      We need decl DIE for reference and scope die. First, get DIE for the decl
20419      itself.  */
20420
20421   /* Get the scope die for decl context. Use comp_unit_die for global module
20422      or decl. If die is not found for non globals, force new die.  */
20423   if (context
20424       && TYPE_P (context)
20425       && !should_emit_struct_debug (context, DINFO_USAGE_DIR_USE))
20426     return;
20427
20428   if (!(dwarf_version >= 3 || !dwarf_strict))
20429     return;
20430
20431   scope_die = get_context_die (context);
20432
20433   if (child)
20434     {
20435       gcc_assert (scope_die->die_child);
20436       gcc_assert (scope_die->die_child->die_tag == DW_TAG_imported_module);
20437       gcc_assert (TREE_CODE (decl) != NAMESPACE_DECL);
20438       scope_die = scope_die->die_child;
20439     }
20440
20441   /* OK, now we have DIEs for decl as well as scope. Emit imported die.  */
20442   dwarf2out_imported_module_or_decl_1 (decl, name, context, scope_die);
20443
20444 }
20445
20446 /* Write the debugging output for DECL.  */
20447
20448 void
20449 dwarf2out_decl (tree decl)
20450 {
20451   dw_die_ref context_die = comp_unit_die;
20452
20453   switch (TREE_CODE (decl))
20454     {
20455     case ERROR_MARK:
20456       return;
20457
20458     case FUNCTION_DECL:
20459       /* What we would really like to do here is to filter out all mere
20460          file-scope declarations of file-scope functions which are never
20461          referenced later within this translation unit (and keep all of ones
20462          that *are* referenced later on) but we aren't clairvoyant, so we have
20463          no idea which functions will be referenced in the future (i.e. later
20464          on within the current translation unit). So here we just ignore all
20465          file-scope function declarations which are not also definitions.  If
20466          and when the debugger needs to know something about these functions,
20467          it will have to hunt around and find the DWARF information associated
20468          with the definition of the function.
20469
20470          We can't just check DECL_EXTERNAL to find out which FUNCTION_DECL
20471          nodes represent definitions and which ones represent mere
20472          declarations.  We have to check DECL_INITIAL instead. That's because
20473          the C front-end supports some weird semantics for "extern inline"
20474          function definitions.  These can get inlined within the current
20475          translation unit (and thus, we need to generate Dwarf info for their
20476          abstract instances so that the Dwarf info for the concrete inlined
20477          instances can have something to refer to) but the compiler never
20478          generates any out-of-lines instances of such things (despite the fact
20479          that they *are* definitions).
20480
20481          The important point is that the C front-end marks these "extern
20482          inline" functions as DECL_EXTERNAL, but we need to generate DWARF for
20483          them anyway. Note that the C++ front-end also plays some similar games
20484          for inline function definitions appearing within include files which
20485          also contain `#pragma interface' pragmas.  */
20486       if (DECL_INITIAL (decl) == NULL_TREE)
20487         return;
20488
20489       /* If we're a nested function, initially use a parent of NULL; if we're
20490          a plain function, this will be fixed up in decls_for_scope.  If
20491          we're a method, it will be ignored, since we already have a DIE.  */
20492       if (decl_function_context (decl)
20493           /* But if we're in terse mode, we don't care about scope.  */
20494           && debug_info_level > DINFO_LEVEL_TERSE)
20495         context_die = NULL;
20496       break;
20497
20498     case VAR_DECL:
20499       /* Ignore this VAR_DECL if it refers to a file-scope extern data object
20500          declaration and if the declaration was never even referenced from
20501          within this entire compilation unit.  We suppress these DIEs in
20502          order to save space in the .debug section (by eliminating entries
20503          which are probably useless).  Note that we must not suppress
20504          block-local extern declarations (whether used or not) because that
20505          would screw-up the debugger's name lookup mechanism and cause it to
20506          miss things which really ought to be in scope at a given point.  */
20507       if (DECL_EXTERNAL (decl) && !TREE_USED (decl))
20508         return;
20509
20510       /* For local statics lookup proper context die.  */
20511       if (TREE_STATIC (decl) && decl_function_context (decl))
20512         context_die = lookup_decl_die (DECL_CONTEXT (decl));
20513
20514       /* If we are in terse mode, don't generate any DIEs to represent any
20515          variable declarations or definitions.  */
20516       if (debug_info_level <= DINFO_LEVEL_TERSE)
20517         return;
20518       break;
20519
20520     case CONST_DECL:
20521       if (debug_info_level <= DINFO_LEVEL_TERSE)
20522         return;
20523       if (!is_fortran ())
20524         return;
20525       if (TREE_STATIC (decl) && decl_function_context (decl))
20526         context_die = lookup_decl_die (DECL_CONTEXT (decl));
20527       break;
20528
20529     case NAMESPACE_DECL:
20530     case IMPORTED_DECL:
20531       if (debug_info_level <= DINFO_LEVEL_TERSE)
20532         return;
20533       if (lookup_decl_die (decl) != NULL)
20534         return;
20535       break;
20536
20537     case TYPE_DECL:
20538       /* Don't emit stubs for types unless they are needed by other DIEs.  */
20539       if (TYPE_DECL_SUPPRESS_DEBUG (decl))
20540         return;
20541
20542       /* Don't bother trying to generate any DIEs to represent any of the
20543          normal built-in types for the language we are compiling.  */
20544       if (DECL_IS_BUILTIN (decl))
20545         {
20546           /* OK, we need to generate one for `bool' so GDB knows what type
20547              comparisons have.  */
20548           if (is_cxx ()
20549               && TREE_CODE (TREE_TYPE (decl)) == BOOLEAN_TYPE
20550               && ! DECL_IGNORED_P (decl))
20551             modified_type_die (TREE_TYPE (decl), 0, 0, NULL);
20552
20553           return;
20554         }
20555
20556       /* If we are in terse mode, don't generate any DIEs for types.  */
20557       if (debug_info_level <= DINFO_LEVEL_TERSE)
20558         return;
20559
20560       /* If we're a function-scope tag, initially use a parent of NULL;
20561          this will be fixed up in decls_for_scope.  */
20562       if (decl_function_context (decl))
20563         context_die = NULL;
20564
20565       break;
20566
20567     default:
20568       return;
20569     }
20570
20571   gen_decl_die (decl, NULL, context_die);
20572 }
20573
20574 /* Write the debugging output for DECL.  */
20575
20576 static void
20577 dwarf2out_function_decl (tree decl)
20578 {
20579   dwarf2out_decl (decl);
20580
20581   htab_empty (decl_loc_table);
20582 }
20583
20584 /* Output a marker (i.e. a label) for the beginning of the generated code for
20585    a lexical block.  */
20586
20587 static void
20588 dwarf2out_begin_block (unsigned int line ATTRIBUTE_UNUSED,
20589                        unsigned int blocknum)
20590 {
20591   switch_to_section (current_function_section ());
20592   ASM_OUTPUT_DEBUG_LABEL (asm_out_file, BLOCK_BEGIN_LABEL, blocknum);
20593 }
20594
20595 /* Output a marker (i.e. a label) for the end of the generated code for a
20596    lexical block.  */
20597
20598 static void
20599 dwarf2out_end_block (unsigned int line ATTRIBUTE_UNUSED, unsigned int blocknum)
20600 {
20601   switch_to_section (current_function_section ());
20602   ASM_OUTPUT_DEBUG_LABEL (asm_out_file, BLOCK_END_LABEL, blocknum);
20603 }
20604
20605 /* Returns nonzero if it is appropriate not to emit any debugging
20606    information for BLOCK, because it doesn't contain any instructions.
20607
20608    Don't allow this for blocks with nested functions or local classes
20609    as we would end up with orphans, and in the presence of scheduling
20610    we may end up calling them anyway.  */
20611
20612 static bool
20613 dwarf2out_ignore_block (const_tree block)
20614 {
20615   tree decl;
20616   unsigned int i;
20617
20618   for (decl = BLOCK_VARS (block); decl; decl = TREE_CHAIN (decl))
20619     if (TREE_CODE (decl) == FUNCTION_DECL
20620         || (TREE_CODE (decl) == TYPE_DECL && TYPE_DECL_IS_STUB (decl)))
20621       return 0;
20622   for (i = 0; i < BLOCK_NUM_NONLOCALIZED_VARS (block); i++)
20623     {
20624       decl = BLOCK_NONLOCALIZED_VAR (block, i);
20625       if (TREE_CODE (decl) == FUNCTION_DECL
20626           || (TREE_CODE (decl) == TYPE_DECL && TYPE_DECL_IS_STUB (decl)))
20627       return 0;
20628     }
20629
20630   return 1;
20631 }
20632
20633 /* Hash table routines for file_hash.  */
20634
20635 static int
20636 file_table_eq (const void *p1_p, const void *p2_p)
20637 {
20638   const struct dwarf_file_data *const p1 =
20639     (const struct dwarf_file_data *) p1_p;
20640   const char *const p2 = (const char *) p2_p;
20641   return strcmp (p1->filename, p2) == 0;
20642 }
20643
20644 static hashval_t
20645 file_table_hash (const void *p_p)
20646 {
20647   const struct dwarf_file_data *const p = (const struct dwarf_file_data *) p_p;
20648   return htab_hash_string (p->filename);
20649 }
20650
20651 /* Lookup FILE_NAME (in the list of filenames that we know about here in
20652    dwarf2out.c) and return its "index".  The index of each (known) filename is
20653    just a unique number which is associated with only that one filename.  We
20654    need such numbers for the sake of generating labels (in the .debug_sfnames
20655    section) and references to those files numbers (in the .debug_srcinfo
20656    and.debug_macinfo sections).  If the filename given as an argument is not
20657    found in our current list, add it to the list and assign it the next
20658    available unique index number.  In order to speed up searches, we remember
20659    the index of the filename was looked up last.  This handles the majority of
20660    all searches.  */
20661
20662 static struct dwarf_file_data *
20663 lookup_filename (const char *file_name)
20664 {
20665   void ** slot;
20666   struct dwarf_file_data * created;
20667
20668   /* Check to see if the file name that was searched on the previous
20669      call matches this file name.  If so, return the index.  */
20670   if (file_table_last_lookup
20671       && (file_name == file_table_last_lookup->filename
20672           || strcmp (file_table_last_lookup->filename, file_name) == 0))
20673     return file_table_last_lookup;
20674
20675   /* Didn't match the previous lookup, search the table.  */
20676   slot = htab_find_slot_with_hash (file_table, file_name,
20677                                    htab_hash_string (file_name), INSERT);
20678   if (*slot)
20679     return (struct dwarf_file_data *) *slot;
20680
20681   created = GGC_NEW (struct dwarf_file_data);
20682   created->filename = file_name;
20683   created->emitted_number = 0;
20684   *slot = created;
20685   return created;
20686 }
20687
20688 /* If the assembler will construct the file table, then translate the compiler
20689    internal file table number into the assembler file table number, and emit
20690    a .file directive if we haven't already emitted one yet.  The file table
20691    numbers are different because we prune debug info for unused variables and
20692    types, which may include filenames.  */
20693
20694 static int
20695 maybe_emit_file (struct dwarf_file_data * fd)
20696 {
20697   if (! fd->emitted_number)
20698     {
20699       if (last_emitted_file)
20700         fd->emitted_number = last_emitted_file->emitted_number + 1;
20701       else
20702         fd->emitted_number = 1;
20703       last_emitted_file = fd;
20704
20705       if (DWARF2_ASM_LINE_DEBUG_INFO)
20706         {
20707           fprintf (asm_out_file, "\t.file %u ", fd->emitted_number);
20708           output_quoted_string (asm_out_file,
20709                                 remap_debug_filename (fd->filename));
20710           fputc ('\n', asm_out_file);
20711         }
20712     }
20713
20714   return fd->emitted_number;
20715 }
20716
20717 /* Schedule generation of a DW_AT_const_value attribute to DIE.
20718    That generation should happen after function debug info has been
20719    generated. The value of the attribute is the constant value of ARG.  */
20720
20721 static void
20722 append_entry_to_tmpl_value_parm_die_table (dw_die_ref die, tree arg)
20723 {
20724   die_arg_entry entry;
20725
20726   if (!die || !arg)
20727     return;
20728
20729   if (!tmpl_value_parm_die_table)
20730     tmpl_value_parm_die_table
20731       = VEC_alloc (die_arg_entry, gc, 32);
20732
20733   entry.die = die;
20734   entry.arg = arg;
20735   VEC_safe_push (die_arg_entry, gc,
20736                  tmpl_value_parm_die_table,
20737                  &entry);
20738 }
20739
20740 /* Add a DW_AT_const_value attribute to DIEs that were scheduled
20741    by append_entry_to_tmpl_value_parm_die_table. This function must
20742    be called after function DIEs have been generated.  */
20743
20744 static void
20745 gen_remaining_tmpl_value_param_die_attribute (void)
20746 {
20747   if (tmpl_value_parm_die_table)
20748     {
20749       unsigned i;
20750       die_arg_entry *e;
20751
20752       for (i = 0;
20753            VEC_iterate (die_arg_entry, tmpl_value_parm_die_table, i, e);
20754            i++)
20755         tree_add_const_value_attribute (e->die, e->arg);
20756     }
20757 }
20758
20759
20760 /* Replace DW_AT_name for the decl with name.  */
20761
20762 static void
20763 dwarf2out_set_name (tree decl, tree name)
20764 {
20765   dw_die_ref die;
20766   dw_attr_ref attr;
20767   const char *dname;
20768
20769   die = TYPE_SYMTAB_DIE (decl);
20770   if (!die)
20771     return;
20772
20773   dname = dwarf2_name (name, 0);
20774   if (!dname)
20775     return;
20776
20777   attr = get_AT (die, DW_AT_name);
20778   if (attr)
20779     {
20780       struct indirect_string_node *node;
20781
20782       node = find_AT_string (dname);
20783       /* replace the string.  */
20784       attr->dw_attr_val.v.val_str = node;
20785     }
20786
20787   else
20788     add_name_attribute (die, dname);
20789 }
20790
20791 /* Called by the final INSN scan whenever we see a direct function call.
20792    Make an entry into the direct call table, recording the point of call
20793    and a reference to the target function's debug entry.  */
20794
20795 static void
20796 dwarf2out_direct_call (tree targ)
20797 {
20798   dcall_entry e;
20799   tree origin = decl_ultimate_origin (targ);
20800
20801   /* If this is a clone, use the abstract origin as the target.  */
20802   if (origin)
20803     targ = origin;
20804
20805   e.poc_label_num = poc_label_num++;
20806   e.poc_decl = current_function_decl;
20807   e.targ_die = force_decl_die (targ);
20808   VEC_safe_push (dcall_entry, gc, dcall_table, &e);
20809
20810   /* Drop a label at the return point to mark the point of call.  */
20811   ASM_OUTPUT_DEBUG_LABEL (asm_out_file, "LPOC", e.poc_label_num);
20812 }
20813
20814 /* Returns a hash value for X (which really is a struct vcall_insn).  */
20815
20816 static hashval_t
20817 vcall_insn_table_hash (const void *x)
20818 {
20819   return (hashval_t) ((const struct vcall_insn *) x)->insn_uid;
20820 }
20821
20822 /* Return nonzero if insn_uid of struct vcall_insn *X is the same as
20823    insnd_uid of *Y.  */
20824
20825 static int
20826 vcall_insn_table_eq (const void *x, const void *y)
20827 {
20828   return (((const struct vcall_insn *) x)->insn_uid
20829           == ((const struct vcall_insn *) y)->insn_uid);
20830 }
20831
20832 /* Associate VTABLE_SLOT with INSN_UID in the VCALL_INSN_TABLE.  */
20833
20834 static void
20835 store_vcall_insn (unsigned int vtable_slot, int insn_uid)
20836 {
20837   struct vcall_insn *item = GGC_NEW (struct vcall_insn);
20838   struct vcall_insn **slot;
20839
20840   gcc_assert (item);
20841   item->insn_uid = insn_uid;
20842   item->vtable_slot = vtable_slot;
20843   slot = (struct vcall_insn **)
20844       htab_find_slot_with_hash (vcall_insn_table, &item,
20845                                 (hashval_t) insn_uid, INSERT);
20846   *slot = item;
20847 }
20848
20849 /* Return the VTABLE_SLOT associated with INSN_UID.  */
20850
20851 static unsigned int
20852 lookup_vcall_insn (unsigned int insn_uid)
20853 {
20854   struct vcall_insn item;
20855   struct vcall_insn *p;
20856
20857   item.insn_uid = insn_uid;
20858   item.vtable_slot = 0;
20859   p = (struct vcall_insn *) htab_find_with_hash (vcall_insn_table,
20860                                                  (void *) &item,
20861                                                  (hashval_t) insn_uid);
20862   if (p == NULL)
20863     return (unsigned int) -1;
20864   return p->vtable_slot;
20865 }
20866
20867
20868 /* Called when lowering indirect calls to RTL.  We make a note of INSN_UID
20869    and the OBJ_TYPE_REF_TOKEN from ADDR.  For C++ virtual calls, the token
20870    is the vtable slot index that we will need to put in the virtual call
20871    table later.  */
20872
20873 static void
20874 dwarf2out_virtual_call_token (tree addr, int insn_uid)
20875 {
20876   if (is_cxx() && TREE_CODE (addr) == OBJ_TYPE_REF)
20877     {
20878       tree token = OBJ_TYPE_REF_TOKEN (addr);
20879       if (TREE_CODE (token) == INTEGER_CST)
20880         store_vcall_insn (TREE_INT_CST_LOW (token), insn_uid);
20881     }
20882 }
20883
20884 /* Called when scheduling RTL, when a CALL_INSN is split.  Copies the
20885    OBJ_TYPE_REF_TOKEN previously associated with OLD_INSN and associates it
20886    with NEW_INSN.  */
20887
20888 static void
20889 dwarf2out_copy_call_info (rtx old_insn, rtx new_insn)
20890 {
20891   unsigned int vtable_slot = lookup_vcall_insn (INSN_UID (old_insn));
20892
20893   if (vtable_slot != (unsigned int) -1)
20894     store_vcall_insn (vtable_slot, INSN_UID (new_insn));
20895 }
20896
20897 /* Called by the final INSN scan whenever we see a virtual function call.
20898    Make an entry into the virtual call table, recording the point of call
20899    and the slot index of the vtable entry used to call the virtual member
20900    function.  The slot index was associated with the INSN_UID during the
20901    lowering to RTL.  */
20902
20903 static void
20904 dwarf2out_virtual_call (int insn_uid)
20905 {
20906   unsigned int vtable_slot = lookup_vcall_insn (insn_uid);
20907   vcall_entry e;
20908
20909   if (vtable_slot == (unsigned int) -1)
20910     return;
20911
20912   e.poc_label_num = poc_label_num++;
20913   e.vtable_slot = vtable_slot;
20914   VEC_safe_push (vcall_entry, gc, vcall_table, &e);
20915
20916   /* Drop a label at the return point to mark the point of call.  */
20917   ASM_OUTPUT_DEBUG_LABEL (asm_out_file, "LPOC", e.poc_label_num);
20918 }
20919
20920 /* Called by the final INSN scan whenever we see a var location.  We
20921    use it to drop labels in the right places, and throw the location in
20922    our lookup table.  */
20923
20924 static void
20925 dwarf2out_var_location (rtx loc_note)
20926 {
20927   char loclabel[MAX_ARTIFICIAL_LABEL_BYTES + 2];
20928   struct var_loc_node *newloc;
20929   rtx next_real;
20930   static const char *last_label;
20931   static const char *last_postcall_label;
20932   static bool last_in_cold_section_p;
20933   tree decl;
20934
20935   if (!DECL_P (NOTE_VAR_LOCATION_DECL (loc_note)))
20936     return;
20937
20938   next_real = next_real_insn (loc_note);
20939   /* If there are no instructions which would be affected by this note,
20940      don't do anything.  */
20941   if (next_real == NULL_RTX)
20942     return;
20943
20944   /* If there were any real insns between note we processed last time
20945      and this note (or if it is the first note), clear
20946      last_{,postcall_}label so that they are not reused this time.  */
20947   if (last_var_location_insn == NULL_RTX
20948       || last_var_location_insn != next_real
20949       || last_in_cold_section_p != in_cold_section_p)
20950     {
20951       last_label = NULL;
20952       last_postcall_label = NULL;
20953     }
20954
20955   decl = NOTE_VAR_LOCATION_DECL (loc_note);
20956   newloc = add_var_loc_to_decl (decl, loc_note,
20957                                 NOTE_DURING_CALL_P (loc_note)
20958                                 ? last_postcall_label : last_label);
20959   if (newloc == NULL)
20960     return;
20961
20962   /* If there were no real insns between note we processed last time
20963      and this note, use the label we emitted last time.  Otherwise
20964      create a new label and emit it.  */
20965   if (last_label == NULL)
20966     {
20967       ASM_GENERATE_INTERNAL_LABEL (loclabel, "LVL", loclabel_num);
20968       ASM_OUTPUT_DEBUG_LABEL (asm_out_file, "LVL", loclabel_num);
20969       loclabel_num++;
20970       last_label = ggc_strdup (loclabel);
20971     }
20972
20973   if (!NOTE_DURING_CALL_P (loc_note))
20974     newloc->label = last_label;
20975   else
20976     {
20977       if (!last_postcall_label)
20978         {
20979           sprintf (loclabel, "%s-1", last_label);
20980           last_postcall_label = ggc_strdup (loclabel);
20981         }
20982       newloc->label = last_postcall_label;
20983     }
20984
20985   last_var_location_insn = next_real;
20986   last_in_cold_section_p = in_cold_section_p;
20987 }
20988
20989 /* We need to reset the locations at the beginning of each
20990    function. We can't do this in the end_function hook, because the
20991    declarations that use the locations won't have been output when
20992    that hook is called.  Also compute have_multiple_function_sections here.  */
20993
20994 static void
20995 dwarf2out_begin_function (tree fun)
20996 {
20997   if (function_section (fun) != text_section)
20998     have_multiple_function_sections = true;
20999
21000   dwarf2out_note_section_used ();
21001 }
21002
21003 /* Output a label to mark the beginning of a source code line entry
21004    and record information relating to this source line, in
21005    'line_info_table' for later output of the .debug_line section.  */
21006
21007 static void
21008 dwarf2out_source_line (unsigned int line, const char *filename,
21009                        int discriminator, bool is_stmt)
21010 {
21011   static bool last_is_stmt = true;
21012
21013   if (debug_info_level >= DINFO_LEVEL_NORMAL
21014       && line != 0)
21015     {
21016       int file_num = maybe_emit_file (lookup_filename (filename));
21017
21018       switch_to_section (current_function_section ());
21019
21020       /* If requested, emit something human-readable.  */
21021       if (flag_debug_asm)
21022         fprintf (asm_out_file, "\t%s %s:%d\n", ASM_COMMENT_START,
21023                  filename, line);
21024
21025       if (DWARF2_ASM_LINE_DEBUG_INFO)
21026         {
21027           /* Emit the .loc directive understood by GNU as.  */
21028           fprintf (asm_out_file, "\t.loc %d %d 0", file_num, line);
21029           if (is_stmt != last_is_stmt)
21030             {
21031               fprintf (asm_out_file, " is_stmt %d", is_stmt ? 1 : 0);
21032               last_is_stmt = is_stmt;
21033             }
21034           if (SUPPORTS_DISCRIMINATOR && discriminator != 0)
21035             fprintf (asm_out_file, " discriminator %d", discriminator);
21036           fputc ('\n', asm_out_file);
21037
21038           /* Indicate that line number info exists.  */
21039           line_info_table_in_use++;
21040         }
21041       else if (function_section (current_function_decl) != text_section)
21042         {
21043           dw_separate_line_info_ref line_info;
21044           targetm.asm_out.internal_label (asm_out_file,
21045                                           SEPARATE_LINE_CODE_LABEL,
21046                                           separate_line_info_table_in_use);
21047
21048           /* Expand the line info table if necessary.  */
21049           if (separate_line_info_table_in_use
21050               == separate_line_info_table_allocated)
21051             {
21052               separate_line_info_table_allocated += LINE_INFO_TABLE_INCREMENT;
21053               separate_line_info_table
21054                 = GGC_RESIZEVEC (dw_separate_line_info_entry,
21055                                  separate_line_info_table,
21056                                  separate_line_info_table_allocated);
21057               memset (separate_line_info_table
21058                        + separate_line_info_table_in_use,
21059                       0,
21060                       (LINE_INFO_TABLE_INCREMENT
21061                        * sizeof (dw_separate_line_info_entry)));
21062             }
21063
21064           /* Add the new entry at the end of the line_info_table.  */
21065           line_info
21066             = &separate_line_info_table[separate_line_info_table_in_use++];
21067           line_info->dw_file_num = file_num;
21068           line_info->dw_line_num = line;
21069           line_info->function = current_function_funcdef_no;
21070         }
21071       else
21072         {
21073           dw_line_info_ref line_info;
21074
21075           targetm.asm_out.internal_label (asm_out_file, LINE_CODE_LABEL,
21076                                      line_info_table_in_use);
21077
21078           /* Expand the line info table if necessary.  */
21079           if (line_info_table_in_use == line_info_table_allocated)
21080             {
21081               line_info_table_allocated += LINE_INFO_TABLE_INCREMENT;
21082               line_info_table
21083                 = GGC_RESIZEVEC (dw_line_info_entry, line_info_table,
21084                                  line_info_table_allocated);
21085               memset (line_info_table + line_info_table_in_use, 0,
21086                       LINE_INFO_TABLE_INCREMENT * sizeof (dw_line_info_entry));
21087             }
21088
21089           /* Add the new entry at the end of the line_info_table.  */
21090           line_info = &line_info_table[line_info_table_in_use++];
21091           line_info->dw_file_num = file_num;
21092           line_info->dw_line_num = line;
21093         }
21094     }
21095 }
21096
21097 /* Record the beginning of a new source file.  */
21098
21099 static void
21100 dwarf2out_start_source_file (unsigned int lineno, const char *filename)
21101 {
21102   if (flag_eliminate_dwarf2_dups && dwarf_version < 4)
21103     {
21104       /* Record the beginning of the file for break_out_includes.  */
21105       dw_die_ref bincl_die;
21106
21107       bincl_die = new_die (DW_TAG_GNU_BINCL, comp_unit_die, NULL);
21108       add_AT_string (bincl_die, DW_AT_name, remap_debug_filename (filename));
21109     }
21110
21111   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
21112     {
21113       int file_num = maybe_emit_file (lookup_filename (filename));
21114
21115       switch_to_section (debug_macinfo_section);
21116       dw2_asm_output_data (1, DW_MACINFO_start_file, "Start new file");
21117       dw2_asm_output_data_uleb128 (lineno, "Included from line number %d",
21118                                    lineno);
21119
21120       dw2_asm_output_data_uleb128 (file_num, "file %s", filename);
21121     }
21122 }
21123
21124 /* Record the end of a source file.  */
21125
21126 static void
21127 dwarf2out_end_source_file (unsigned int lineno ATTRIBUTE_UNUSED)
21128 {
21129   if (flag_eliminate_dwarf2_dups && dwarf_version < 4)
21130     /* Record the end of the file for break_out_includes.  */
21131     new_die (DW_TAG_GNU_EINCL, comp_unit_die, NULL);
21132
21133   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
21134     {
21135       switch_to_section (debug_macinfo_section);
21136       dw2_asm_output_data (1, DW_MACINFO_end_file, "End file");
21137     }
21138 }
21139
21140 /* Called from debug_define in toplev.c.  The `buffer' parameter contains
21141    the tail part of the directive line, i.e. the part which is past the
21142    initial whitespace, #, whitespace, directive-name, whitespace part.  */
21143
21144 static void
21145 dwarf2out_define (unsigned int lineno ATTRIBUTE_UNUSED,
21146                   const char *buffer ATTRIBUTE_UNUSED)
21147 {
21148   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
21149     {
21150       switch_to_section (debug_macinfo_section);
21151       dw2_asm_output_data (1, DW_MACINFO_define, "Define macro");
21152       dw2_asm_output_data_uleb128 (lineno, "At line number %d", lineno);
21153       dw2_asm_output_nstring (buffer, -1, "The macro");
21154     }
21155 }
21156
21157 /* Called from debug_undef in toplev.c.  The `buffer' parameter contains
21158    the tail part of the directive line, i.e. the part which is past the
21159    initial whitespace, #, whitespace, directive-name, whitespace part.  */
21160
21161 static void
21162 dwarf2out_undef (unsigned int lineno ATTRIBUTE_UNUSED,
21163                  const char *buffer ATTRIBUTE_UNUSED)
21164 {
21165   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
21166     {
21167       switch_to_section (debug_macinfo_section);
21168       dw2_asm_output_data (1, DW_MACINFO_undef, "Undefine macro");
21169       dw2_asm_output_data_uleb128 (lineno, "At line number %d", lineno);
21170       dw2_asm_output_nstring (buffer, -1, "The macro");
21171     }
21172 }
21173
21174 /* Set up for Dwarf output at the start of compilation.  */
21175
21176 static void
21177 dwarf2out_init (const char *filename ATTRIBUTE_UNUSED)
21178 {
21179   /* Allocate the file_table.  */
21180   file_table = htab_create_ggc (50, file_table_hash,
21181                                 file_table_eq, NULL);
21182
21183   /* Allocate the decl_die_table.  */
21184   decl_die_table = htab_create_ggc (10, decl_die_table_hash,
21185                                     decl_die_table_eq, NULL);
21186
21187   /* Allocate the decl_loc_table.  */
21188   decl_loc_table = htab_create_ggc (10, decl_loc_table_hash,
21189                                     decl_loc_table_eq, NULL);
21190
21191   /* Allocate the initial hunk of the decl_scope_table.  */
21192   decl_scope_table = VEC_alloc (tree, gc, 256);
21193
21194   /* Allocate the initial hunk of the abbrev_die_table.  */
21195   abbrev_die_table = GGC_CNEWVEC (dw_die_ref, ABBREV_DIE_TABLE_INCREMENT);
21196   abbrev_die_table_allocated = ABBREV_DIE_TABLE_INCREMENT;
21197   /* Zero-th entry is allocated, but unused.  */
21198   abbrev_die_table_in_use = 1;
21199
21200   /* Allocate the initial hunk of the line_info_table.  */
21201   line_info_table = GGC_CNEWVEC (dw_line_info_entry, LINE_INFO_TABLE_INCREMENT);
21202   line_info_table_allocated = LINE_INFO_TABLE_INCREMENT;
21203
21204   /* Zero-th entry is allocated, but unused.  */
21205   line_info_table_in_use = 1;
21206
21207   /* Allocate the pubtypes and pubnames vectors.  */
21208   pubname_table = VEC_alloc (pubname_entry, gc, 32);
21209   pubtype_table = VEC_alloc (pubname_entry, gc, 32);
21210
21211   /* Allocate the table that maps insn UIDs to vtable slot indexes.  */
21212   vcall_insn_table = htab_create_ggc (10, vcall_insn_table_hash,
21213                                       vcall_insn_table_eq, NULL);
21214
21215   /* Generate the initial DIE for the .debug section.  Note that the (string)
21216      value given in the DW_AT_name attribute of the DW_TAG_compile_unit DIE
21217      will (typically) be a relative pathname and that this pathname should be
21218      taken as being relative to the directory from which the compiler was
21219      invoked when the given (base) source file was compiled.  We will fill
21220      in this value in dwarf2out_finish.  */
21221   comp_unit_die = gen_compile_unit_die (NULL);
21222
21223   incomplete_types = VEC_alloc (tree, gc, 64);
21224
21225   used_rtx_array = VEC_alloc (rtx, gc, 32);
21226
21227   debug_info_section = get_section (DEBUG_INFO_SECTION,
21228                                     SECTION_DEBUG, NULL);
21229   debug_abbrev_section = get_section (DEBUG_ABBREV_SECTION,
21230                                       SECTION_DEBUG, NULL);
21231   debug_aranges_section = get_section (DEBUG_ARANGES_SECTION,
21232                                        SECTION_DEBUG, NULL);
21233   debug_macinfo_section = get_section (DEBUG_MACINFO_SECTION,
21234                                        SECTION_DEBUG, NULL);
21235   debug_line_section = get_section (DEBUG_LINE_SECTION,
21236                                     SECTION_DEBUG, NULL);
21237   debug_loc_section = get_section (DEBUG_LOC_SECTION,
21238                                    SECTION_DEBUG, NULL);
21239   debug_pubnames_section = get_section (DEBUG_PUBNAMES_SECTION,
21240                                         SECTION_DEBUG, NULL);
21241   debug_pubtypes_section = get_section (DEBUG_PUBTYPES_SECTION,
21242                                         SECTION_DEBUG, NULL);
21243   debug_dcall_section = get_section (DEBUG_DCALL_SECTION,
21244                                      SECTION_DEBUG, NULL);
21245   debug_vcall_section = get_section (DEBUG_VCALL_SECTION,
21246                                      SECTION_DEBUG, NULL);
21247   debug_str_section = get_section (DEBUG_STR_SECTION,
21248                                    DEBUG_STR_SECTION_FLAGS, NULL);
21249   debug_ranges_section = get_section (DEBUG_RANGES_SECTION,
21250                                       SECTION_DEBUG, NULL);
21251   debug_frame_section = get_section (DEBUG_FRAME_SECTION,
21252                                      SECTION_DEBUG, NULL);
21253
21254   ASM_GENERATE_INTERNAL_LABEL (text_end_label, TEXT_END_LABEL, 0);
21255   ASM_GENERATE_INTERNAL_LABEL (abbrev_section_label,
21256                                DEBUG_ABBREV_SECTION_LABEL, 0);
21257   ASM_GENERATE_INTERNAL_LABEL (text_section_label, TEXT_SECTION_LABEL, 0);
21258   ASM_GENERATE_INTERNAL_LABEL (cold_text_section_label,
21259                                COLD_TEXT_SECTION_LABEL, 0);
21260   ASM_GENERATE_INTERNAL_LABEL (cold_end_label, COLD_END_LABEL, 0);
21261
21262   ASM_GENERATE_INTERNAL_LABEL (debug_info_section_label,
21263                                DEBUG_INFO_SECTION_LABEL, 0);
21264   ASM_GENERATE_INTERNAL_LABEL (debug_line_section_label,
21265                                DEBUG_LINE_SECTION_LABEL, 0);
21266   ASM_GENERATE_INTERNAL_LABEL (ranges_section_label,
21267                                DEBUG_RANGES_SECTION_LABEL, 0);
21268   switch_to_section (debug_abbrev_section);
21269   ASM_OUTPUT_LABEL (asm_out_file, abbrev_section_label);
21270   switch_to_section (debug_info_section);
21271   ASM_OUTPUT_LABEL (asm_out_file, debug_info_section_label);
21272   switch_to_section (debug_line_section);
21273   ASM_OUTPUT_LABEL (asm_out_file, debug_line_section_label);
21274
21275   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
21276     {
21277       switch_to_section (debug_macinfo_section);
21278       ASM_GENERATE_INTERNAL_LABEL (macinfo_section_label,
21279                                    DEBUG_MACINFO_SECTION_LABEL, 0);
21280       ASM_OUTPUT_LABEL (asm_out_file, macinfo_section_label);
21281     }
21282
21283   switch_to_section (text_section);
21284   ASM_OUTPUT_LABEL (asm_out_file, text_section_label);
21285   if (flag_reorder_blocks_and_partition)
21286     {
21287       cold_text_section = unlikely_text_section ();
21288       switch_to_section (cold_text_section);
21289       ASM_OUTPUT_LABEL (asm_out_file, cold_text_section_label);
21290     }
21291
21292 }
21293
21294 /* Called before cgraph_optimize starts outputtting functions, variables
21295    and toplevel asms into assembly.  */
21296
21297 static void
21298 dwarf2out_assembly_start (void)
21299 {
21300   if (HAVE_GAS_CFI_SECTIONS_DIRECTIVE && dwarf2out_do_cfi_asm ())
21301     {
21302 #ifndef TARGET_UNWIND_INFO
21303       if (USING_SJLJ_EXCEPTIONS || (!flag_unwind_tables && !flag_exceptions))
21304 #endif
21305         fprintf (asm_out_file, "\t.cfi_sections\t.debug_frame\n");
21306     }
21307 }
21308
21309 /* A helper function for dwarf2out_finish called through
21310    htab_traverse.  Emit one queued .debug_str string.  */
21311
21312 static int
21313 output_indirect_string (void **h, void *v ATTRIBUTE_UNUSED)
21314 {
21315   struct indirect_string_node *node = (struct indirect_string_node *) *h;
21316
21317   if (node->label && node->refcount)
21318     {
21319       switch_to_section (debug_str_section);
21320       ASM_OUTPUT_LABEL (asm_out_file, node->label);
21321       assemble_string (node->str, strlen (node->str) + 1);
21322     }
21323
21324   return 1;
21325 }
21326
21327 #if ENABLE_ASSERT_CHECKING
21328 /* Verify that all marks are clear.  */
21329
21330 static void
21331 verify_marks_clear (dw_die_ref die)
21332 {
21333   dw_die_ref c;
21334
21335   gcc_assert (! die->die_mark);
21336   FOR_EACH_CHILD (die, c, verify_marks_clear (c));
21337 }
21338 #endif /* ENABLE_ASSERT_CHECKING */
21339
21340 /* Clear the marks for a die and its children.
21341    Be cool if the mark isn't set.  */
21342
21343 static void
21344 prune_unmark_dies (dw_die_ref die)
21345 {
21346   dw_die_ref c;
21347
21348   if (die->die_mark)
21349     die->die_mark = 0;
21350   FOR_EACH_CHILD (die, c, prune_unmark_dies (c));
21351 }
21352
21353 /* Given DIE that we're marking as used, find any other dies
21354    it references as attributes and mark them as used.  */
21355
21356 static void
21357 prune_unused_types_walk_attribs (dw_die_ref die)
21358 {
21359   dw_attr_ref a;
21360   unsigned ix;
21361
21362   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
21363     {
21364       if (a->dw_attr_val.val_class == dw_val_class_die_ref)
21365         {
21366           /* A reference to another DIE.
21367              Make sure that it will get emitted.
21368              If it was broken out into a comdat group, don't follow it.  */
21369           if (dwarf_version < 4
21370               || a->dw_attr == DW_AT_specification
21371               || a->dw_attr_val.v.val_die_ref.die->die_id.die_type_node == NULL)
21372             prune_unused_types_mark (a->dw_attr_val.v.val_die_ref.die, 1);
21373         }
21374       /* Set the string's refcount to 0 so that prune_unused_types_mark
21375          accounts properly for it.  */
21376       if (AT_class (a) == dw_val_class_str)
21377         a->dw_attr_val.v.val_str->refcount = 0;
21378     }
21379 }
21380
21381
21382 /* Mark DIE as being used.  If DOKIDS is true, then walk down
21383    to DIE's children.  */
21384
21385 static void
21386 prune_unused_types_mark (dw_die_ref die, int dokids)
21387 {
21388   dw_die_ref c;
21389
21390   if (die->die_mark == 0)
21391     {
21392       /* We haven't done this node yet.  Mark it as used.  */
21393       die->die_mark = 1;
21394
21395       /* We also have to mark its parents as used.
21396          (But we don't want to mark our parents' kids due to this.)  */
21397       if (die->die_parent)
21398         prune_unused_types_mark (die->die_parent, 0);
21399
21400       /* Mark any referenced nodes.  */
21401       prune_unused_types_walk_attribs (die);
21402
21403       /* If this node is a specification,
21404          also mark the definition, if it exists.  */
21405       if (get_AT_flag (die, DW_AT_declaration) && die->die_definition)
21406         prune_unused_types_mark (die->die_definition, 1);
21407     }
21408
21409   if (dokids && die->die_mark != 2)
21410     {
21411       /* We need to walk the children, but haven't done so yet.
21412          Remember that we've walked the kids.  */
21413       die->die_mark = 2;
21414
21415       /* If this is an array type, we need to make sure our
21416          kids get marked, even if they're types.  If we're
21417          breaking out types into comdat sections, do this
21418          for all type definitions.  */
21419       if (die->die_tag == DW_TAG_array_type
21420           || (dwarf_version >= 4
21421               && is_type_die (die) && ! is_declaration_die (die)))
21422         FOR_EACH_CHILD (die, c, prune_unused_types_mark (c, 1));
21423       else
21424         FOR_EACH_CHILD (die, c, prune_unused_types_walk (c));
21425     }
21426 }
21427
21428 /* For local classes, look if any static member functions were emitted
21429    and if so, mark them.  */
21430
21431 static void
21432 prune_unused_types_walk_local_classes (dw_die_ref die)
21433 {
21434   dw_die_ref c;
21435
21436   if (die->die_mark == 2)
21437     return;
21438
21439   switch (die->die_tag)
21440     {
21441     case DW_TAG_structure_type:
21442     case DW_TAG_union_type:
21443     case DW_TAG_class_type:
21444       break;
21445
21446     case DW_TAG_subprogram:
21447       if (!get_AT_flag (die, DW_AT_declaration)
21448           || die->die_definition != NULL)
21449         prune_unused_types_mark (die, 1);
21450       return;
21451
21452     default:
21453       return;
21454     }
21455
21456   /* Mark children.  */
21457   FOR_EACH_CHILD (die, c, prune_unused_types_walk_local_classes (c));
21458 }
21459
21460 /* Walk the tree DIE and mark types that we actually use.  */
21461
21462 static void
21463 prune_unused_types_walk (dw_die_ref die)
21464 {
21465   dw_die_ref c;
21466
21467   /* Don't do anything if this node is already marked and
21468      children have been marked as well.  */
21469   if (die->die_mark == 2)
21470     return;
21471
21472   switch (die->die_tag)
21473     {
21474     case DW_TAG_structure_type:
21475     case DW_TAG_union_type:
21476     case DW_TAG_class_type:
21477       if (die->die_perennial_p)
21478         break;
21479
21480       for (c = die->die_parent; c; c = c->die_parent)
21481         if (c->die_tag == DW_TAG_subprogram)
21482           break;
21483
21484       /* Finding used static member functions inside of classes
21485          is needed just for local classes, because for other classes
21486          static member function DIEs with DW_AT_specification
21487          are emitted outside of the DW_TAG_*_type.  If we ever change
21488          it, we'd need to call this even for non-local classes.  */
21489       if (c)
21490         prune_unused_types_walk_local_classes (die);
21491
21492       /* It's a type node --- don't mark it.  */
21493       return;
21494
21495     case DW_TAG_const_type:
21496     case DW_TAG_packed_type:
21497     case DW_TAG_pointer_type:
21498     case DW_TAG_reference_type:
21499     case DW_TAG_rvalue_reference_type:
21500     case DW_TAG_volatile_type:
21501     case DW_TAG_typedef:
21502     case DW_TAG_array_type:
21503     case DW_TAG_interface_type:
21504     case DW_TAG_friend:
21505     case DW_TAG_variant_part:
21506     case DW_TAG_enumeration_type:
21507     case DW_TAG_subroutine_type:
21508     case DW_TAG_string_type:
21509     case DW_TAG_set_type:
21510     case DW_TAG_subrange_type:
21511     case DW_TAG_ptr_to_member_type:
21512     case DW_TAG_file_type:
21513       if (die->die_perennial_p)
21514         break;
21515
21516       /* It's a type node --- don't mark it.  */
21517       return;
21518
21519     default:
21520       /* Mark everything else.  */
21521       break;
21522   }
21523
21524   if (die->die_mark == 0)
21525     {
21526       die->die_mark = 1;
21527
21528       /* Now, mark any dies referenced from here.  */
21529       prune_unused_types_walk_attribs (die);
21530     }
21531
21532   die->die_mark = 2;
21533
21534   /* Mark children.  */
21535   FOR_EACH_CHILD (die, c, prune_unused_types_walk (c));
21536 }
21537
21538 /* Increment the string counts on strings referred to from DIE's
21539    attributes.  */
21540
21541 static void
21542 prune_unused_types_update_strings (dw_die_ref die)
21543 {
21544   dw_attr_ref a;
21545   unsigned ix;
21546
21547   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
21548     if (AT_class (a) == dw_val_class_str)
21549       {
21550         struct indirect_string_node *s = a->dw_attr_val.v.val_str;
21551         s->refcount++;
21552         /* Avoid unnecessarily putting strings that are used less than
21553            twice in the hash table.  */
21554         if (s->refcount
21555             == ((DEBUG_STR_SECTION_FLAGS & SECTION_MERGE) ? 1 : 2))
21556           {
21557             void ** slot;
21558             slot = htab_find_slot_with_hash (debug_str_hash, s->str,
21559                                              htab_hash_string (s->str),
21560                                              INSERT);
21561             gcc_assert (*slot == NULL);
21562             *slot = s;
21563           }
21564       }
21565 }
21566
21567 /* Remove from the tree DIE any dies that aren't marked.  */
21568
21569 static void
21570 prune_unused_types_prune (dw_die_ref die)
21571 {
21572   dw_die_ref c;
21573
21574   gcc_assert (die->die_mark);
21575   prune_unused_types_update_strings (die);
21576
21577   if (! die->die_child)
21578     return;
21579
21580   c = die->die_child;
21581   do {
21582     dw_die_ref prev = c;
21583     for (c = c->die_sib; ! c->die_mark; c = c->die_sib)
21584       if (c == die->die_child)
21585         {
21586           /* No marked children between 'prev' and the end of the list.  */
21587           if (prev == c)
21588             /* No marked children at all.  */
21589             die->die_child = NULL;
21590           else
21591             {
21592               prev->die_sib = c->die_sib;
21593               die->die_child = prev;
21594             }
21595           return;
21596         }
21597
21598     if (c != prev->die_sib)
21599       prev->die_sib = c;
21600     prune_unused_types_prune (c);
21601   } while (c != die->die_child);
21602 }
21603
21604 /* A helper function for dwarf2out_finish called through
21605    htab_traverse.  Clear .debug_str strings that we haven't already
21606    decided to emit.  */
21607
21608 static int
21609 prune_indirect_string (void **h, void *v ATTRIBUTE_UNUSED)
21610 {
21611   struct indirect_string_node *node = (struct indirect_string_node *) *h;
21612
21613   if (!node->label || !node->refcount)
21614     htab_clear_slot (debug_str_hash, h);
21615
21616   return 1;
21617 }
21618
21619 /* Remove dies representing declarations that we never use.  */
21620
21621 static void
21622 prune_unused_types (void)
21623 {
21624   unsigned int i;
21625   limbo_die_node *node;
21626   comdat_type_node *ctnode;
21627   pubname_ref pub;
21628   dcall_entry *dcall;
21629
21630 #if ENABLE_ASSERT_CHECKING
21631   /* All the marks should already be clear.  */
21632   verify_marks_clear (comp_unit_die);
21633   for (node = limbo_die_list; node; node = node->next)
21634     verify_marks_clear (node->die);
21635   for (ctnode = comdat_type_list; ctnode; ctnode = ctnode->next)
21636     verify_marks_clear (ctnode->root_die);
21637 #endif /* ENABLE_ASSERT_CHECKING */
21638
21639   /* Mark types that are used in global variables.  */
21640   premark_types_used_by_global_vars ();
21641
21642   /* Set the mark on nodes that are actually used.  */
21643   prune_unused_types_walk (comp_unit_die);
21644   for (node = limbo_die_list; node; node = node->next)
21645     prune_unused_types_walk (node->die);
21646   for (ctnode = comdat_type_list; ctnode; ctnode = ctnode->next)
21647     {
21648       prune_unused_types_walk (ctnode->root_die);
21649       prune_unused_types_mark (ctnode->type_die, 1);
21650     }
21651
21652   /* Also set the mark on nodes referenced from the
21653      pubname_table or arange_table.  */
21654   for (i = 0; VEC_iterate (pubname_entry, pubname_table, i, pub); i++)
21655     prune_unused_types_mark (pub->die, 1);
21656   for (i = 0; i < arange_table_in_use; i++)
21657     prune_unused_types_mark (arange_table[i], 1);
21658
21659   /* Mark nodes referenced from the direct call table.  */
21660   for (i = 0; VEC_iterate (dcall_entry, dcall_table, i, dcall); i++)
21661     prune_unused_types_mark (dcall->targ_die, 1);
21662
21663   /* Get rid of nodes that aren't marked; and update the string counts.  */
21664   if (debug_str_hash && debug_str_hash_forced)
21665     htab_traverse (debug_str_hash, prune_indirect_string, NULL);
21666   else if (debug_str_hash)
21667     htab_empty (debug_str_hash);
21668   prune_unused_types_prune (comp_unit_die);
21669   for (node = limbo_die_list; node; node = node->next)
21670     prune_unused_types_prune (node->die);
21671   for (ctnode = comdat_type_list; ctnode; ctnode = ctnode->next)
21672     prune_unused_types_prune (ctnode->root_die);
21673
21674   /* Leave the marks clear.  */
21675   prune_unmark_dies (comp_unit_die);
21676   for (node = limbo_die_list; node; node = node->next)
21677     prune_unmark_dies (node->die);
21678   for (ctnode = comdat_type_list; ctnode; ctnode = ctnode->next)
21679     prune_unmark_dies (ctnode->root_die);
21680 }
21681
21682 /* Set the parameter to true if there are any relative pathnames in
21683    the file table.  */
21684 static int
21685 file_table_relative_p (void ** slot, void *param)
21686 {
21687   bool *p = (bool *) param;
21688   struct dwarf_file_data *d = (struct dwarf_file_data *) *slot;
21689   if (!IS_ABSOLUTE_PATH (d->filename))
21690     {
21691       *p = true;
21692       return 0;
21693     }
21694   return 1;
21695 }
21696
21697 /* Routines to manipulate hash table of comdat type units.  */
21698
21699 static hashval_t
21700 htab_ct_hash (const void *of)
21701 {
21702   hashval_t h;
21703   const comdat_type_node *const type_node = (const comdat_type_node *) of;
21704
21705   memcpy (&h, type_node->signature, sizeof (h));
21706   return h;
21707 }
21708
21709 static int
21710 htab_ct_eq (const void *of1, const void *of2)
21711 {
21712   const comdat_type_node *const type_node_1 = (const comdat_type_node *) of1;
21713   const comdat_type_node *const type_node_2 = (const comdat_type_node *) of2;
21714
21715   return (! memcmp (type_node_1->signature, type_node_2->signature,
21716                     DWARF_TYPE_SIGNATURE_SIZE));
21717 }
21718
21719 /* Move a DW_AT_{,MIPS_}linkage_name attribute just added to dw_die_ref
21720    to the location it would have been added, should we know its
21721    DECL_ASSEMBLER_NAME when we added other attributes.  This will
21722    probably improve compactness of debug info, removing equivalent
21723    abbrevs, and hide any differences caused by deferring the
21724    computation of the assembler name, triggered by e.g. PCH.  */
21725
21726 static inline void
21727 move_linkage_attr (dw_die_ref die)
21728 {
21729   unsigned ix = VEC_length (dw_attr_node, die->die_attr);
21730   dw_attr_node linkage = *VEC_index (dw_attr_node, die->die_attr, ix - 1);
21731
21732   gcc_assert (linkage.dw_attr == AT_linkage_name);
21733
21734   while (--ix > 0)
21735     {
21736       dw_attr_node *prev = VEC_index (dw_attr_node, die->die_attr, ix - 1);
21737
21738       if (prev->dw_attr == DW_AT_decl_line || prev->dw_attr == DW_AT_name)
21739         break;
21740     }
21741
21742   if (ix != VEC_length (dw_attr_node, die->die_attr) - 1)
21743     {
21744       VEC_pop (dw_attr_node, die->die_attr);
21745       VEC_quick_insert (dw_attr_node, die->die_attr, ix, &linkage);
21746     }
21747 }
21748
21749 /* Helper function for resolve_addr, attempt to resolve
21750    one CONST_STRING, return non-zero if not successful.  Similarly verify that
21751    SYMBOL_REFs refer to variables emitted in the current CU.  */
21752
21753 static int
21754 resolve_one_addr (rtx *addr, void *data ATTRIBUTE_UNUSED)
21755 {
21756   rtx rtl = *addr;
21757
21758   if (GET_CODE (rtl) == CONST_STRING)
21759     {
21760       size_t len = strlen (XSTR (rtl, 0)) + 1;
21761       tree t = build_string (len, XSTR (rtl, 0));
21762       tree tlen = build_int_cst (NULL_TREE, len - 1);
21763       TREE_TYPE (t)
21764         = build_array_type (char_type_node, build_index_type (tlen));
21765       rtl = lookup_constant_def (t);
21766       if (!rtl || !MEM_P (rtl))
21767         return 1;
21768       rtl = XEXP (rtl, 0);
21769       VEC_safe_push (rtx, gc, used_rtx_array, rtl);
21770       *addr = rtl;
21771       return 0;
21772     }
21773
21774   if (GET_CODE (rtl) == SYMBOL_REF
21775       && SYMBOL_REF_DECL (rtl)
21776       && !TREE_ASM_WRITTEN (SYMBOL_REF_DECL (rtl)))
21777     return 1;
21778
21779   if (GET_CODE (rtl) == CONST
21780       && for_each_rtx (&XEXP (rtl, 0), resolve_one_addr, NULL))
21781     return 1;
21782
21783   return 0;
21784 }
21785
21786 /* Helper function for resolve_addr, handle one location
21787    expression, return false if at least one CONST_STRING or SYMBOL_REF in
21788    the location list couldn't be resolved.  */
21789
21790 static bool
21791 resolve_addr_in_expr (dw_loc_descr_ref loc)
21792 {
21793   for (; loc; loc = loc->dw_loc_next)
21794     if ((loc->dw_loc_opc == DW_OP_addr
21795          && resolve_one_addr (&loc->dw_loc_oprnd1.v.val_addr, NULL))
21796         || (loc->dw_loc_opc == DW_OP_implicit_value
21797             && loc->dw_loc_oprnd2.val_class == dw_val_class_addr
21798             && resolve_one_addr (&loc->dw_loc_oprnd2.v.val_addr, NULL)))
21799       return false;
21800   return true;
21801 }
21802
21803 /* Resolve DW_OP_addr and DW_AT_const_value CONST_STRING arguments to
21804    an address in .rodata section if the string literal is emitted there,
21805    or remove the containing location list or replace DW_AT_const_value
21806    with DW_AT_location and empty location expression, if it isn't found
21807    in .rodata.  Similarly for SYMBOL_REFs, keep only those that refer
21808    to something that has been emitted in the current CU.  */
21809
21810 static void
21811 resolve_addr (dw_die_ref die)
21812 {
21813   dw_die_ref c;
21814   dw_attr_ref a;
21815   dw_loc_list_ref *curr;
21816   unsigned ix;
21817
21818   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
21819     switch (AT_class (a))
21820       {
21821       case dw_val_class_loc_list:
21822         curr = AT_loc_list_ptr (a);
21823         while (*curr)
21824           {
21825             if (!resolve_addr_in_expr ((*curr)->expr))
21826               {
21827                 dw_loc_list_ref next = (*curr)->dw_loc_next;
21828                 if (next && (*curr)->ll_symbol)
21829                   {
21830                     gcc_assert (!next->ll_symbol);
21831                     next->ll_symbol = (*curr)->ll_symbol;
21832                   }
21833                 *curr = next;
21834               }
21835             else
21836               curr = &(*curr)->dw_loc_next;
21837           }
21838         if (!AT_loc_list (a))
21839           {
21840             remove_AT (die, a->dw_attr);
21841             ix--;
21842           }
21843         break;
21844       case dw_val_class_loc:
21845         if (!resolve_addr_in_expr (AT_loc (a)))
21846           {
21847             remove_AT (die, a->dw_attr);
21848             ix--;
21849           }
21850         break;
21851       case dw_val_class_addr:
21852         if (a->dw_attr == DW_AT_const_value
21853             && resolve_one_addr (&a->dw_attr_val.v.val_addr, NULL))
21854           {
21855             remove_AT (die, a->dw_attr);
21856             ix--;
21857           }
21858         break;
21859       default:
21860         break;
21861       }
21862
21863   FOR_EACH_CHILD (die, c, resolve_addr (c));
21864 }
21865
21866 /* Output stuff that dwarf requires at the end of every file,
21867    and generate the DWARF-2 debugging info.  */
21868
21869 static void
21870 dwarf2out_finish (const char *filename)
21871 {
21872   limbo_die_node *node, *next_node;
21873   comdat_type_node *ctnode;
21874   htab_t comdat_type_table;
21875   dw_die_ref die = 0;
21876   unsigned int i;
21877
21878   gen_remaining_tmpl_value_param_die_attribute ();
21879
21880   /* Add the name for the main input file now.  We delayed this from
21881      dwarf2out_init to avoid complications with PCH.  */
21882   add_name_attribute (comp_unit_die, remap_debug_filename (filename));
21883   if (!IS_ABSOLUTE_PATH (filename))
21884     add_comp_dir_attribute (comp_unit_die);
21885   else if (get_AT (comp_unit_die, DW_AT_comp_dir) == NULL)
21886     {
21887       bool p = false;
21888       htab_traverse (file_table, file_table_relative_p, &p);
21889       if (p)
21890         add_comp_dir_attribute (comp_unit_die);
21891     }
21892
21893   for (i = 0; i < VEC_length (deferred_locations, deferred_locations_list); i++)
21894     {
21895       add_location_or_const_value_attribute (
21896         VEC_index (deferred_locations, deferred_locations_list, i)->die,
21897         VEC_index (deferred_locations, deferred_locations_list, i)->variable,
21898         DW_AT_location);
21899     }
21900
21901   /* Traverse the limbo die list, and add parent/child links.  The only
21902      dies without parents that should be here are concrete instances of
21903      inline functions, and the comp_unit_die.  We can ignore the comp_unit_die.
21904      For concrete instances, we can get the parent die from the abstract
21905      instance.  */
21906   for (node = limbo_die_list; node; node = next_node)
21907     {
21908       next_node = node->next;
21909       die = node->die;
21910
21911       if (die->die_parent == NULL)
21912         {
21913           dw_die_ref origin = get_AT_ref (die, DW_AT_abstract_origin);
21914
21915           if (origin)
21916             add_child_die (origin->die_parent, die);
21917           else if (die == comp_unit_die)
21918             ;
21919           else if (seen_error ())
21920             /* It's OK to be confused by errors in the input.  */
21921             add_child_die (comp_unit_die, die);
21922           else
21923             {
21924               /* In certain situations, the lexical block containing a
21925                  nested function can be optimized away, which results
21926                  in the nested function die being orphaned.  Likewise
21927                  with the return type of that nested function.  Force
21928                  this to be a child of the containing function.
21929
21930                  It may happen that even the containing function got fully
21931                  inlined and optimized out.  In that case we are lost and
21932                  assign the empty child.  This should not be big issue as
21933                  the function is likely unreachable too.  */
21934               tree context = NULL_TREE;
21935
21936               gcc_assert (node->created_for);
21937
21938               if (DECL_P (node->created_for))
21939                 context = DECL_CONTEXT (node->created_for);
21940               else if (TYPE_P (node->created_for))
21941                 context = TYPE_CONTEXT (node->created_for);
21942
21943               gcc_assert (context
21944                           && (TREE_CODE (context) == FUNCTION_DECL
21945                               || TREE_CODE (context) == NAMESPACE_DECL));
21946
21947               origin = lookup_decl_die (context);
21948               if (origin)
21949                 add_child_die (origin, die);
21950               else
21951                 add_child_die (comp_unit_die, die);
21952             }
21953         }
21954     }
21955
21956   limbo_die_list = NULL;
21957
21958   resolve_addr (comp_unit_die);
21959
21960   for (node = deferred_asm_name; node; node = node->next)
21961     {
21962       tree decl = node->created_for;
21963       if (DECL_ASSEMBLER_NAME (decl) != DECL_NAME (decl))
21964         {
21965           add_AT_string (node->die, AT_linkage_name,
21966                          IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl)));
21967           move_linkage_attr (node->die);
21968         }
21969     }
21970
21971   deferred_asm_name = NULL;
21972
21973   /* Walk through the list of incomplete types again, trying once more to
21974      emit full debugging info for them.  */
21975   retry_incomplete_types ();
21976
21977   if (flag_eliminate_unused_debug_types)
21978     prune_unused_types ();
21979
21980   /* Generate separate CUs for each of the include files we've seen.
21981      They will go into limbo_die_list.  */
21982   if (flag_eliminate_dwarf2_dups && dwarf_version < 4)
21983     break_out_includes (comp_unit_die);
21984
21985   /* Generate separate COMDAT sections for type DIEs. */
21986   if (dwarf_version >= 4)
21987     {
21988       break_out_comdat_types (comp_unit_die);
21989
21990       /* Each new type_unit DIE was added to the limbo die list when created.
21991          Since these have all been added to comdat_type_list, clear the
21992          limbo die list.  */
21993       limbo_die_list = NULL;
21994
21995       /* For each new comdat type unit, copy declarations for incomplete
21996          types to make the new unit self-contained (i.e., no direct
21997          references to the main compile unit).  */
21998       for (ctnode = comdat_type_list; ctnode != NULL; ctnode = ctnode->next)
21999         copy_decls_for_unworthy_types (ctnode->root_die);
22000       copy_decls_for_unworthy_types (comp_unit_die);
22001
22002       /* In the process of copying declarations from one unit to another,
22003          we may have left some declarations behind that are no longer
22004          referenced.  Prune them.  */
22005       prune_unused_types ();
22006     }
22007
22008   /* Traverse the DIE's and add add sibling attributes to those DIE's
22009      that have children.  */
22010   add_sibling_attributes (comp_unit_die);
22011   for (node = limbo_die_list; node; node = node->next)
22012     add_sibling_attributes (node->die);
22013   for (ctnode = comdat_type_list; ctnode != NULL; ctnode = ctnode->next)
22014     add_sibling_attributes (ctnode->root_die);
22015
22016   /* Output a terminator label for the .text section.  */
22017   switch_to_section (text_section);
22018   targetm.asm_out.internal_label (asm_out_file, TEXT_END_LABEL, 0);
22019   if (flag_reorder_blocks_and_partition)
22020     {
22021       switch_to_section (unlikely_text_section ());
22022       targetm.asm_out.internal_label (asm_out_file, COLD_END_LABEL, 0);
22023     }
22024
22025   /* We can only use the low/high_pc attributes if all of the code was
22026      in .text.  */
22027   if (!have_multiple_function_sections
22028       || !(dwarf_version >= 3 || !dwarf_strict))
22029     {
22030       add_AT_lbl_id (comp_unit_die, DW_AT_low_pc, text_section_label);
22031       add_AT_lbl_id (comp_unit_die, DW_AT_high_pc, text_end_label);
22032     }
22033
22034   else
22035     {
22036       unsigned fde_idx = 0;
22037       bool range_list_added = false;
22038
22039       /* We need to give .debug_loc and .debug_ranges an appropriate
22040          "base address".  Use zero so that these addresses become
22041          absolute.  Historically, we've emitted the unexpected
22042          DW_AT_entry_pc instead of DW_AT_low_pc for this purpose.
22043          Emit both to give time for other tools to adapt.  */
22044       add_AT_addr (comp_unit_die, DW_AT_low_pc, const0_rtx);
22045       add_AT_addr (comp_unit_die, DW_AT_entry_pc, const0_rtx);
22046
22047       if (text_section_used)
22048         add_ranges_by_labels (comp_unit_die, text_section_label,
22049                               text_end_label, &range_list_added);
22050       if (flag_reorder_blocks_and_partition && cold_text_section_used)
22051         add_ranges_by_labels (comp_unit_die, cold_text_section_label,
22052                               cold_end_label, &range_list_added);
22053
22054       for (fde_idx = 0; fde_idx < fde_table_in_use; fde_idx++)
22055         {
22056           dw_fde_ref fde = &fde_table[fde_idx];
22057
22058           if (fde->dw_fde_switched_sections)
22059             {
22060               if (!fde->in_std_section)
22061                 add_ranges_by_labels (comp_unit_die,
22062                                       fde->dw_fde_hot_section_label,
22063                                       fde->dw_fde_hot_section_end_label,
22064                                       &range_list_added);
22065               if (!fde->cold_in_std_section)
22066                 add_ranges_by_labels (comp_unit_die,
22067                                       fde->dw_fde_unlikely_section_label,
22068                                       fde->dw_fde_unlikely_section_end_label,
22069                                       &range_list_added);
22070             }
22071           else if (!fde->in_std_section)
22072             add_ranges_by_labels (comp_unit_die, fde->dw_fde_begin,
22073                                   fde->dw_fde_end, &range_list_added);
22074         }
22075
22076       if (range_list_added)
22077         add_ranges (NULL);
22078     }
22079
22080   /* Output location list section if necessary.  */
22081   if (have_location_lists)
22082     {
22083       /* Output the location lists info.  */
22084       switch_to_section (debug_loc_section);
22085       ASM_GENERATE_INTERNAL_LABEL (loc_section_label,
22086                                    DEBUG_LOC_SECTION_LABEL, 0);
22087       ASM_OUTPUT_LABEL (asm_out_file, loc_section_label);
22088       output_location_lists (die);
22089     }
22090
22091   if (debug_info_level >= DINFO_LEVEL_NORMAL)
22092     add_AT_lineptr (comp_unit_die, DW_AT_stmt_list,
22093                     debug_line_section_label);
22094
22095   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
22096     add_AT_macptr (comp_unit_die, DW_AT_macro_info, macinfo_section_label);
22097
22098   /* Output all of the compilation units.  We put the main one last so that
22099      the offsets are available to output_pubnames.  */
22100   for (node = limbo_die_list; node; node = node->next)
22101     output_comp_unit (node->die, 0);
22102
22103   comdat_type_table = htab_create (100, htab_ct_hash, htab_ct_eq, NULL);
22104   for (ctnode = comdat_type_list; ctnode != NULL; ctnode = ctnode->next)
22105     {
22106       void **slot = htab_find_slot (comdat_type_table, ctnode, INSERT);
22107
22108       /* Don't output duplicate types.  */
22109       if (*slot != HTAB_EMPTY_ENTRY)
22110         continue;
22111
22112       /* Add a pointer to the line table for the main compilation unit
22113          so that the debugger can make sense of DW_AT_decl_file
22114          attributes.  */
22115       if (debug_info_level >= DINFO_LEVEL_NORMAL)
22116         add_AT_lineptr (ctnode->root_die, DW_AT_stmt_list,
22117                         debug_line_section_label);
22118
22119       output_comdat_type_unit (ctnode);
22120       *slot = ctnode;
22121     }
22122   htab_delete (comdat_type_table);
22123
22124   /* Output the main compilation unit if non-empty or if .debug_macinfo
22125      has been emitted.  */
22126   output_comp_unit (comp_unit_die, debug_info_level >= DINFO_LEVEL_VERBOSE);
22127
22128   /* Output the abbreviation table.  */
22129   switch_to_section (debug_abbrev_section);
22130   output_abbrev_section ();
22131
22132   /* Output public names table if necessary.  */
22133   if (!VEC_empty (pubname_entry, pubname_table))
22134     {
22135       switch_to_section (debug_pubnames_section);
22136       output_pubnames (pubname_table);
22137     }
22138
22139   /* Output public types table if necessary.  */
22140   /* ??? Only defined by DWARF3, but emitted by Darwin for DWARF2.
22141      It shouldn't hurt to emit it always, since pure DWARF2 consumers
22142      simply won't look for the section.  */
22143   if (!VEC_empty (pubname_entry, pubtype_table))
22144     {
22145       switch_to_section (debug_pubtypes_section);
22146       output_pubnames (pubtype_table);
22147     }
22148
22149   /* Output direct and virtual call tables if necessary.  */
22150   if (!VEC_empty (dcall_entry, dcall_table))
22151     {
22152       switch_to_section (debug_dcall_section);
22153       output_dcall_table ();
22154     }
22155   if (!VEC_empty (vcall_entry, vcall_table))
22156     {
22157       switch_to_section (debug_vcall_section);
22158       output_vcall_table ();
22159     }
22160
22161   /* Output the address range information.  We only put functions in the arange
22162      table, so don't write it out if we don't have any.  */
22163   if (fde_table_in_use)
22164     {
22165       switch_to_section (debug_aranges_section);
22166       output_aranges ();
22167     }
22168
22169   /* Output ranges section if necessary.  */
22170   if (ranges_table_in_use)
22171     {
22172       switch_to_section (debug_ranges_section);
22173       ASM_OUTPUT_LABEL (asm_out_file, ranges_section_label);
22174       output_ranges ();
22175     }
22176
22177   /* Output the source line correspondence table.  We must do this
22178      even if there is no line information.  Otherwise, on an empty
22179      translation unit, we will generate a present, but empty,
22180      .debug_info section.  IRIX 6.5 `nm' will then complain when
22181      examining the file.  This is done late so that any filenames
22182      used by the debug_info section are marked as 'used'.  */
22183   if (! DWARF2_ASM_LINE_DEBUG_INFO)
22184     {
22185       switch_to_section (debug_line_section);
22186       output_line_info ();
22187     }
22188
22189   /* Have to end the macro section.  */
22190   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
22191     {
22192       switch_to_section (debug_macinfo_section);
22193       dw2_asm_output_data (1, 0, "End compilation unit");
22194     }
22195
22196   /* If we emitted any DW_FORM_strp form attribute, output the string
22197      table too.  */
22198   if (debug_str_hash)
22199     htab_traverse (debug_str_hash, output_indirect_string, NULL);
22200 }
22201 #else
22202
22203 /* This should never be used, but its address is needed for comparisons.  */
22204 const struct gcc_debug_hooks dwarf2_debug_hooks =
22205 {
22206   0,            /* init */
22207   0,            /* finish */
22208   0,            /* assembly_start */
22209   0,            /* define */
22210   0,            /* undef */
22211   0,            /* start_source_file */
22212   0,            /* end_source_file */
22213   0,            /* begin_block */
22214   0,            /* end_block */
22215   0,            /* ignore_block */
22216   0,            /* source_line */
22217   0,            /* begin_prologue */
22218   0,            /* end_prologue */
22219   0,            /* end_epilogue */
22220   0,            /* begin_function */
22221   0,            /* end_function */
22222   0,            /* function_decl */
22223   0,            /* global_decl */
22224   0,            /* type_decl */
22225   0,            /* imported_module_or_decl */
22226   0,            /* deferred_inline_function */
22227   0,            /* outlining_inline_function */
22228   0,            /* label */
22229   0,            /* handle_pch */
22230   0,            /* var_location */
22231   0,            /* switch_text_section */
22232   0,            /* direct_call */
22233   0,            /* virtual_call_token */
22234   0,            /* copy_call_info */
22235   0,            /* virtual_call */
22236   0,            /* set_name */
22237   0             /* start_end_main_source_file */
22238 };
22239
22240 #endif /* DWARF2_DEBUGGING_INFO */
22241
22242 #include "gt-dwarf2out.h"