xref: /dflybsd-src/contrib/gcc-4.7/gcc/dwarf2out.c (revision 9ed293e071aa5626e1e68861be45f0002c7b0d8c)
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, 2011, 2012
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 "common/common-target.h"
89 #include "langhooks.h"
90 #include "hashtab.h"
91 #include "cgraph.h"
92 #include "input.h"
93 #include "gimple.h"
94 #include "tree-pass.h"
95 #include "tree-flow.h"
96 #include "cfglayout.h"
97 #include "opts.h"
98 
99 static void dwarf2out_source_line (unsigned int, const char *, int, bool);
100 static rtx last_var_location_insn;
101 static rtx cached_next_real_insn;
102 
103 #ifdef VMS_DEBUGGING_INFO
104 int vms_file_stats_name (const char *, long long *, long *, char *, int *);
105 
106 /* Define this macro to be a nonzero value if the directory specifications
107     which are output in the debug info should end with a separator.  */
108 #define DWARF2_DIR_SHOULD_END_WITH_SEPARATOR 1
109 /* Define this macro to evaluate to a nonzero value if GCC should refrain
110    from generating indirect strings in DWARF2 debug information, for instance
111    if your target is stuck with an old version of GDB that is unable to
112    process them properly or uses VMS Debug.  */
113 #define DWARF2_INDIRECT_STRING_SUPPORT_MISSING_ON_TARGET 1
114 #else
115 #define DWARF2_DIR_SHOULD_END_WITH_SEPARATOR 0
116 #define DWARF2_INDIRECT_STRING_SUPPORT_MISSING_ON_TARGET 0
117 #endif
118 
119 /* ??? Poison these here until it can be done generically.  They've been
120    totally replaced in this file; make sure it stays that way.  */
121 #undef DWARF2_UNWIND_INFO
122 #undef DWARF2_FRAME_INFO
123 #if (GCC_VERSION >= 3000)
124  #pragma GCC poison DWARF2_UNWIND_INFO DWARF2_FRAME_INFO
125 #endif
126 
127 /* The size of the target's pointer type.  */
128 #ifndef PTR_SIZE
129 #define PTR_SIZE (POINTER_SIZE / BITS_PER_UNIT)
130 #endif
131 
132 /* Array of RTXes referenced by the debugging information, which therefore
133    must be kept around forever.  */
134 static GTY(()) VEC(rtx,gc) *used_rtx_array;
135 
136 /* A pointer to the base of a list of incomplete types which might be
137    completed at some later time.  incomplete_types_list needs to be a
138    VEC(tree,gc) because we want to tell the garbage collector about
139    it.  */
140 static GTY(()) VEC(tree,gc) *incomplete_types;
141 
142 /* A pointer to the base of a table of references to declaration
143    scopes.  This table is a display which tracks the nesting
144    of declaration scopes at the current scope and containing
145    scopes.  This table is used to find the proper place to
146    define type declaration DIE's.  */
147 static GTY(()) VEC(tree,gc) *decl_scope_table;
148 
149 /* Pointers to various DWARF2 sections.  */
150 static GTY(()) section *debug_info_section;
151 static GTY(()) section *debug_abbrev_section;
152 static GTY(()) section *debug_aranges_section;
153 static GTY(()) section *debug_macinfo_section;
154 static GTY(()) section *debug_line_section;
155 static GTY(()) section *debug_loc_section;
156 static GTY(()) section *debug_pubnames_section;
157 static GTY(()) section *debug_pubtypes_section;
158 static GTY(()) section *debug_str_section;
159 static GTY(()) section *debug_ranges_section;
160 static GTY(()) section *debug_frame_section;
161 
162 /* Maximum size (in bytes) of an artificially generated label.  */
163 #define MAX_ARTIFICIAL_LABEL_BYTES	30
164 
165 /* According to the (draft) DWARF 3 specification, the initial length
166    should either be 4 or 12 bytes.  When it's 12 bytes, the first 4
167    bytes are 0xffffffff, followed by the length stored in the next 8
168    bytes.
169 
170    However, the SGI/MIPS ABI uses an initial length which is equal to
171    DWARF_OFFSET_SIZE.  It is defined (elsewhere) accordingly.  */
172 
173 #ifndef DWARF_INITIAL_LENGTH_SIZE
174 #define DWARF_INITIAL_LENGTH_SIZE (DWARF_OFFSET_SIZE == 4 ? 4 : 12)
175 #endif
176 
177 /* Round SIZE up to the nearest BOUNDARY.  */
178 #define DWARF_ROUND(SIZE,BOUNDARY) \
179   ((((SIZE) + (BOUNDARY) - 1) / (BOUNDARY)) * (BOUNDARY))
180 
181 /* CIE identifier.  */
182 #if HOST_BITS_PER_WIDE_INT >= 64
183 #define DWARF_CIE_ID \
184   (unsigned HOST_WIDE_INT) (DWARF_OFFSET_SIZE == 4 ? DW_CIE_ID : DW64_CIE_ID)
185 #else
186 #define DWARF_CIE_ID DW_CIE_ID
187 #endif
188 
189 DEF_VEC_P (dw_fde_ref);
190 DEF_VEC_ALLOC_P (dw_fde_ref, gc);
191 
192 /* A vector for a table that contains frame description
193    information for each routine.  */
194 static GTY(()) VEC(dw_fde_ref, gc) *fde_vec;
195 
196 struct GTY(()) indirect_string_node {
197   const char *str;
198   unsigned int refcount;
199   enum dwarf_form form;
200   char *label;
201 };
202 
203 static GTY ((param_is (struct indirect_string_node))) htab_t debug_str_hash;
204 
205 static GTY(()) int dw2_string_counter;
206 
207 /* True if the compilation unit places functions in more than one section.  */
208 static GTY(()) bool have_multiple_function_sections = false;
209 
210 /* Whether the default text and cold text sections have been used at all.  */
211 
212 static GTY(()) bool text_section_used = false;
213 static GTY(()) bool cold_text_section_used = false;
214 
215 /* The default cold text section.  */
216 static GTY(()) section *cold_text_section;
217 
218 /* Forward declarations for functions defined in this file.  */
219 
220 static char *stripattributes (const char *);
221 static void output_call_frame_info (int);
222 static void dwarf2out_note_section_used (void);
223 
224 /* Personality decl of current unit.  Used only when assembler does not support
225    personality CFI.  */
226 static GTY(()) rtx current_unit_personality;
227 
228 /* Data and reference forms for relocatable data.  */
229 #define DW_FORM_data (DWARF_OFFSET_SIZE == 8 ? DW_FORM_data8 : DW_FORM_data4)
230 #define DW_FORM_ref (DWARF_OFFSET_SIZE == 8 ? DW_FORM_ref8 : DW_FORM_ref4)
231 
232 #ifndef DEBUG_FRAME_SECTION
233 #define DEBUG_FRAME_SECTION	".debug_frame"
234 #endif
235 
236 #ifndef FUNC_BEGIN_LABEL
237 #define FUNC_BEGIN_LABEL	"LFB"
238 #endif
239 
240 #ifndef FUNC_END_LABEL
241 #define FUNC_END_LABEL		"LFE"
242 #endif
243 
244 #ifndef PROLOGUE_END_LABEL
245 #define PROLOGUE_END_LABEL	"LPE"
246 #endif
247 
248 #ifndef EPILOGUE_BEGIN_LABEL
249 #define EPILOGUE_BEGIN_LABEL	"LEB"
250 #endif
251 
252 #ifndef FRAME_BEGIN_LABEL
253 #define FRAME_BEGIN_LABEL	"Lframe"
254 #endif
255 #define CIE_AFTER_SIZE_LABEL	"LSCIE"
256 #define CIE_END_LABEL		"LECIE"
257 #define FDE_LABEL		"LSFDE"
258 #define FDE_AFTER_SIZE_LABEL	"LASFDE"
259 #define FDE_END_LABEL		"LEFDE"
260 #define LINE_NUMBER_BEGIN_LABEL	"LSLT"
261 #define LINE_NUMBER_END_LABEL	"LELT"
262 #define LN_PROLOG_AS_LABEL	"LASLTP"
263 #define LN_PROLOG_END_LABEL	"LELTP"
264 #define DIE_LABEL_PREFIX	"DW"
265 
266 /* Match the base name of a file to the base name of a compilation unit. */
267 
268 static int
269 matches_main_base (const char *path)
270 {
271   /* Cache the last query. */
272   static const char *last_path = NULL;
273   static int last_match = 0;
274   if (path != last_path)
275     {
276       const char *base;
277       int length = base_of_path (path, &base);
278       last_path = path;
279       last_match = (length == main_input_baselength
280                     && memcmp (base, main_input_basename, length) == 0);
281     }
282   return last_match;
283 }
284 
285 #ifdef DEBUG_DEBUG_STRUCT
286 
287 static int
288 dump_struct_debug (tree type, enum debug_info_usage usage,
289 		   enum debug_struct_file criterion, int generic,
290 		   int matches, int result)
291 {
292   /* Find the type name. */
293   tree type_decl = TYPE_STUB_DECL (type);
294   tree t = type_decl;
295   const char *name = 0;
296   if (TREE_CODE (t) == TYPE_DECL)
297     t = DECL_NAME (t);
298   if (t)
299     name = IDENTIFIER_POINTER (t);
300 
301   fprintf (stderr, "	struct %d %s %s %s %s %d %p %s\n",
302 	   criterion,
303            DECL_IN_SYSTEM_HEADER (type_decl) ? "sys" : "usr",
304            matches ? "bas" : "hdr",
305            generic ? "gen" : "ord",
306            usage == DINFO_USAGE_DFN ? ";" :
307              usage == DINFO_USAGE_DIR_USE ? "." : "*",
308            result,
309            (void*) type_decl, name);
310   return result;
311 }
312 #define DUMP_GSTRUCT(type, usage, criterion, generic, matches, result) \
313   dump_struct_debug (type, usage, criterion, generic, matches, result)
314 
315 #else
316 
317 #define DUMP_GSTRUCT(type, usage, criterion, generic, matches, result) \
318   (result)
319 
320 #endif
321 
322 static bool
323 should_emit_struct_debug (tree type, enum debug_info_usage usage)
324 {
325   enum debug_struct_file criterion;
326   tree type_decl;
327   bool generic = lang_hooks.types.generic_p (type);
328 
329   if (generic)
330     criterion = debug_struct_generic[usage];
331   else
332     criterion = debug_struct_ordinary[usage];
333 
334   if (criterion == DINFO_STRUCT_FILE_NONE)
335     return DUMP_GSTRUCT (type, usage, criterion, generic, false, false);
336   if (criterion == DINFO_STRUCT_FILE_ANY)
337     return DUMP_GSTRUCT (type, usage, criterion, generic, false, true);
338 
339   type_decl = TYPE_STUB_DECL (TYPE_MAIN_VARIANT (type));
340 
341   if (criterion == DINFO_STRUCT_FILE_SYS && DECL_IN_SYSTEM_HEADER (type_decl))
342     return DUMP_GSTRUCT (type, usage, criterion, generic, false, true);
343 
344   if (matches_main_base (DECL_SOURCE_FILE (type_decl)))
345     return DUMP_GSTRUCT (type, usage, criterion, generic, true, true);
346   return DUMP_GSTRUCT (type, usage, criterion, generic, false, false);
347 }
348 
349 /* Return a pointer to a copy of the section string name S with all
350    attributes stripped off, and an asterisk prepended (for assemble_name).  */
351 
352 static inline char *
353 stripattributes (const char *s)
354 {
355   char *stripped = XNEWVEC (char, strlen (s) + 2);
356   char *p = stripped;
357 
358   *p++ = '*';
359 
360   while (*s && *s != ',')
361     *p++ = *s++;
362 
363   *p = '\0';
364   return stripped;
365 }
366 
367 /* Switch [BACK] to eh_frame_section.  If we don't have an eh_frame_section,
368    switch to the data section instead, and write out a synthetic start label
369    for collect2 the first time around.  */
370 
371 static void
372 switch_to_eh_frame_section (bool back)
373 {
374   tree label;
375 
376 #ifdef EH_FRAME_SECTION_NAME
377   if (eh_frame_section == 0)
378     {
379       int flags;
380 
381       if (EH_TABLES_CAN_BE_READ_ONLY)
382 	{
383 	  int fde_encoding;
384 	  int per_encoding;
385 	  int lsda_encoding;
386 
387 	  fde_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/1,
388 						       /*global=*/0);
389 	  per_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/2,
390 						       /*global=*/1);
391 	  lsda_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/0,
392 							/*global=*/0);
393 	  flags = ((! flag_pic
394 		    || ((fde_encoding & 0x70) != DW_EH_PE_absptr
395 			&& (fde_encoding & 0x70) != DW_EH_PE_aligned
396 			&& (per_encoding & 0x70) != DW_EH_PE_absptr
397 			&& (per_encoding & 0x70) != DW_EH_PE_aligned
398 			&& (lsda_encoding & 0x70) != DW_EH_PE_absptr
399 			&& (lsda_encoding & 0x70) != DW_EH_PE_aligned))
400 		   ? 0 : SECTION_WRITE);
401 	}
402       else
403 	flags = SECTION_WRITE;
404       eh_frame_section = get_section (EH_FRAME_SECTION_NAME, flags, NULL);
405     }
406 #endif /* EH_FRAME_SECTION_NAME */
407 
408   if (eh_frame_section)
409     switch_to_section (eh_frame_section);
410   else
411     {
412       /* We have no special eh_frame section.  Put the information in
413 	 the data section and emit special labels to guide collect2.  */
414       switch_to_section (data_section);
415 
416       if (!back)
417 	{
418 	  label = get_file_function_name ("F");
419 	  ASM_OUTPUT_ALIGN (asm_out_file, floor_log2 (PTR_SIZE));
420 	  targetm.asm_out.globalize_label (asm_out_file,
421 					   IDENTIFIER_POINTER (label));
422 	  ASM_OUTPUT_LABEL (asm_out_file, IDENTIFIER_POINTER (label));
423 	}
424     }
425 }
426 
427 /* Switch [BACK] to the eh or debug frame table section, depending on
428    FOR_EH.  */
429 
430 static void
431 switch_to_frame_table_section (int for_eh, bool back)
432 {
433   if (for_eh)
434     switch_to_eh_frame_section (back);
435   else
436     {
437       if (!debug_frame_section)
438 	debug_frame_section = get_section (DEBUG_FRAME_SECTION,
439 					   SECTION_DEBUG, NULL);
440       switch_to_section (debug_frame_section);
441     }
442 }
443 
444 /* Describe for the GTY machinery what parts of dw_cfi_oprnd1 are used.  */
445 
446 enum dw_cfi_oprnd_type
447 dw_cfi_oprnd1_desc (enum dwarf_call_frame_info cfi)
448 {
449   switch (cfi)
450     {
451     case DW_CFA_nop:
452     case DW_CFA_GNU_window_save:
453     case DW_CFA_remember_state:
454     case DW_CFA_restore_state:
455       return dw_cfi_oprnd_unused;
456 
457     case DW_CFA_set_loc:
458     case DW_CFA_advance_loc1:
459     case DW_CFA_advance_loc2:
460     case DW_CFA_advance_loc4:
461     case DW_CFA_MIPS_advance_loc8:
462       return dw_cfi_oprnd_addr;
463 
464     case DW_CFA_offset:
465     case DW_CFA_offset_extended:
466     case DW_CFA_def_cfa:
467     case DW_CFA_offset_extended_sf:
468     case DW_CFA_def_cfa_sf:
469     case DW_CFA_restore:
470     case DW_CFA_restore_extended:
471     case DW_CFA_undefined:
472     case DW_CFA_same_value:
473     case DW_CFA_def_cfa_register:
474     case DW_CFA_register:
475     case DW_CFA_expression:
476       return dw_cfi_oprnd_reg_num;
477 
478     case DW_CFA_def_cfa_offset:
479     case DW_CFA_GNU_args_size:
480     case DW_CFA_def_cfa_offset_sf:
481       return dw_cfi_oprnd_offset;
482 
483     case DW_CFA_def_cfa_expression:
484       return dw_cfi_oprnd_loc;
485 
486     default:
487       gcc_unreachable ();
488     }
489 }
490 
491 /* Describe for the GTY machinery what parts of dw_cfi_oprnd2 are used.  */
492 
493 enum dw_cfi_oprnd_type
494 dw_cfi_oprnd2_desc (enum dwarf_call_frame_info cfi)
495 {
496   switch (cfi)
497     {
498     case DW_CFA_def_cfa:
499     case DW_CFA_def_cfa_sf:
500     case DW_CFA_offset:
501     case DW_CFA_offset_extended_sf:
502     case DW_CFA_offset_extended:
503       return dw_cfi_oprnd_offset;
504 
505     case DW_CFA_register:
506       return dw_cfi_oprnd_reg_num;
507 
508     case DW_CFA_expression:
509       return dw_cfi_oprnd_loc;
510 
511     default:
512       return dw_cfi_oprnd_unused;
513     }
514 }
515 
516 /* Output one FDE.  */
517 
518 static void
519 output_fde (dw_fde_ref fde, bool for_eh, bool second,
520 	    char *section_start_label, int fde_encoding, char *augmentation,
521 	    bool any_lsda_needed, int lsda_encoding)
522 {
523   const char *begin, *end;
524   static unsigned int j;
525   char l1[20], l2[20];
526 
527   targetm.asm_out.emit_unwind_label (asm_out_file, fde->decl, for_eh,
528 				     /* empty */ 0);
529   targetm.asm_out.internal_label (asm_out_file, FDE_LABEL,
530 				  for_eh + j);
531   ASM_GENERATE_INTERNAL_LABEL (l1, FDE_AFTER_SIZE_LABEL, for_eh + j);
532   ASM_GENERATE_INTERNAL_LABEL (l2, FDE_END_LABEL, for_eh + j);
533   if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4 && !for_eh)
534     dw2_asm_output_data (4, 0xffffffff, "Initial length escape value"
535 			 " indicating 64-bit DWARF extension");
536   dw2_asm_output_delta (for_eh ? 4 : DWARF_OFFSET_SIZE, l2, l1,
537 			"FDE Length");
538   ASM_OUTPUT_LABEL (asm_out_file, l1);
539 
540   if (for_eh)
541     dw2_asm_output_delta (4, l1, section_start_label, "FDE CIE offset");
542   else
543     dw2_asm_output_offset (DWARF_OFFSET_SIZE, section_start_label,
544 			   debug_frame_section, "FDE CIE offset");
545 
546   begin = second ? fde->dw_fde_second_begin : fde->dw_fde_begin;
547   end = second ? fde->dw_fde_second_end : fde->dw_fde_end;
548 
549   if (for_eh)
550     {
551       rtx sym_ref = gen_rtx_SYMBOL_REF (Pmode, begin);
552       SYMBOL_REF_FLAGS (sym_ref) |= SYMBOL_FLAG_LOCAL;
553       dw2_asm_output_encoded_addr_rtx (fde_encoding, sym_ref, false,
554 				       "FDE initial location");
555       dw2_asm_output_delta (size_of_encoded_value (fde_encoding),
556 			    end, begin, "FDE address range");
557     }
558   else
559     {
560       dw2_asm_output_addr (DWARF2_ADDR_SIZE, begin, "FDE initial location");
561       dw2_asm_output_delta (DWARF2_ADDR_SIZE, end, begin, "FDE address range");
562     }
563 
564   if (augmentation[0])
565     {
566       if (any_lsda_needed)
567 	{
568 	  int size = size_of_encoded_value (lsda_encoding);
569 
570 	  if (lsda_encoding == DW_EH_PE_aligned)
571 	    {
572 	      int offset = (  4		/* Length */
573 			    + 4		/* CIE offset */
574 			    + 2 * size_of_encoded_value (fde_encoding)
575 			    + 1		/* Augmentation size */ );
576 	      int pad = -offset & (PTR_SIZE - 1);
577 
578 	      size += pad;
579 	      gcc_assert (size_of_uleb128 (size) == 1);
580 	    }
581 
582 	  dw2_asm_output_data_uleb128 (size, "Augmentation size");
583 
584 	  if (fde->uses_eh_lsda)
585 	    {
586 	      ASM_GENERATE_INTERNAL_LABEL (l1, second ? "LLSDAC" : "LLSDA",
587 					   fde->funcdef_number);
588 	      dw2_asm_output_encoded_addr_rtx (lsda_encoding,
589 					       gen_rtx_SYMBOL_REF (Pmode, l1),
590 					       false,
591 					       "Language Specific Data Area");
592 	    }
593 	  else
594 	    {
595 	      if (lsda_encoding == DW_EH_PE_aligned)
596 		ASM_OUTPUT_ALIGN (asm_out_file, floor_log2 (PTR_SIZE));
597 	      dw2_asm_output_data (size_of_encoded_value (lsda_encoding), 0,
598 				   "Language Specific Data Area (none)");
599 	    }
600 	}
601       else
602 	dw2_asm_output_data_uleb128 (0, "Augmentation size");
603     }
604 
605   /* Loop through the Call Frame Instructions associated with this FDE.  */
606   fde->dw_fde_current_label = begin;
607   {
608     size_t from, until, i;
609 
610     from = 0;
611     until = VEC_length (dw_cfi_ref, fde->dw_fde_cfi);
612 
613     if (fde->dw_fde_second_begin == NULL)
614       ;
615     else if (!second)
616       until = fde->dw_fde_switch_cfi_index;
617     else
618       from = fde->dw_fde_switch_cfi_index;
619 
620     for (i = from; i < until; i++)
621       output_cfi (VEC_index (dw_cfi_ref, fde->dw_fde_cfi, i), fde, for_eh);
622   }
623 
624   /* If we are to emit a ref/link from function bodies to their frame tables,
625      do it now.  This is typically performed to make sure that tables
626      associated with functions are dragged with them and not discarded in
627      garbage collecting links. We need to do this on a per function basis to
628      cope with -ffunction-sections.  */
629 
630 #ifdef ASM_OUTPUT_DWARF_TABLE_REF
631   /* Switch to the function section, emit the ref to the tables, and
632      switch *back* into the table section.  */
633   switch_to_section (function_section (fde->decl));
634   ASM_OUTPUT_DWARF_TABLE_REF (section_start_label);
635   switch_to_frame_table_section (for_eh, true);
636 #endif
637 
638   /* Pad the FDE out to an address sized boundary.  */
639   ASM_OUTPUT_ALIGN (asm_out_file,
640 		    floor_log2 ((for_eh ? PTR_SIZE : DWARF2_ADDR_SIZE)));
641   ASM_OUTPUT_LABEL (asm_out_file, l2);
642 
643   j += 2;
644 }
645 
646 /* Return true if frame description entry FDE is needed for EH.  */
647 
648 static bool
649 fde_needed_for_eh_p (dw_fde_ref fde)
650 {
651   if (flag_asynchronous_unwind_tables)
652     return true;
653 
654   if (TARGET_USES_WEAK_UNWIND_INFO && DECL_WEAK (fde->decl))
655     return true;
656 
657   if (fde->uses_eh_lsda)
658     return true;
659 
660   /* If exceptions are enabled, we have collected nothrow info.  */
661   if (flag_exceptions && (fde->all_throwers_are_sibcalls || fde->nothrow))
662     return false;
663 
664   return true;
665 }
666 
667 /* Output the call frame information used to record information
668    that relates to calculating the frame pointer, and records the
669    location of saved registers.  */
670 
671 static void
672 output_call_frame_info (int for_eh)
673 {
674   unsigned int i;
675   dw_fde_ref fde;
676   dw_cfi_ref cfi;
677   char l1[20], l2[20], section_start_label[20];
678   bool any_lsda_needed = false;
679   char augmentation[6];
680   int augmentation_size;
681   int fde_encoding = DW_EH_PE_absptr;
682   int per_encoding = DW_EH_PE_absptr;
683   int lsda_encoding = DW_EH_PE_absptr;
684   int return_reg;
685   rtx personality = NULL;
686   int dw_cie_version;
687 
688   /* Don't emit a CIE if there won't be any FDEs.  */
689   if (fde_vec == NULL)
690     return;
691 
692   /* Nothing to do if the assembler's doing it all.  */
693   if (dwarf2out_do_cfi_asm ())
694     return;
695 
696   /* If we don't have any functions we'll want to unwind out of, don't emit
697      any EH unwind information.  If we make FDEs linkonce, we may have to
698      emit an empty label for an FDE that wouldn't otherwise be emitted.  We
699      want to avoid having an FDE kept around when the function it refers to
700      is discarded.  Example where this matters: a primary function template
701      in C++ requires EH information, an explicit specialization doesn't.  */
702   if (for_eh)
703     {
704       bool any_eh_needed = false;
705 
706       FOR_EACH_VEC_ELT (dw_fde_ref, fde_vec, i, fde)
707 	{
708 	  if (fde->uses_eh_lsda)
709 	    any_eh_needed = any_lsda_needed = true;
710 	  else if (fde_needed_for_eh_p (fde))
711 	    any_eh_needed = true;
712 	  else if (TARGET_USES_WEAK_UNWIND_INFO)
713 	    targetm.asm_out.emit_unwind_label (asm_out_file, fde->decl, 1, 1);
714 	}
715 
716       if (!any_eh_needed)
717 	return;
718     }
719 
720   /* We're going to be generating comments, so turn on app.  */
721   if (flag_debug_asm)
722     app_enable ();
723 
724   /* Switch to the proper frame section, first time.  */
725   switch_to_frame_table_section (for_eh, false);
726 
727   ASM_GENERATE_INTERNAL_LABEL (section_start_label, FRAME_BEGIN_LABEL, for_eh);
728   ASM_OUTPUT_LABEL (asm_out_file, section_start_label);
729 
730   /* Output the CIE.  */
731   ASM_GENERATE_INTERNAL_LABEL (l1, CIE_AFTER_SIZE_LABEL, for_eh);
732   ASM_GENERATE_INTERNAL_LABEL (l2, CIE_END_LABEL, for_eh);
733   if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4 && !for_eh)
734     dw2_asm_output_data (4, 0xffffffff,
735       "Initial length escape value indicating 64-bit DWARF extension");
736   dw2_asm_output_delta (for_eh ? 4 : DWARF_OFFSET_SIZE, l2, l1,
737 			"Length of Common Information Entry");
738   ASM_OUTPUT_LABEL (asm_out_file, l1);
739 
740   /* Now that the CIE pointer is PC-relative for EH,
741      use 0 to identify the CIE.  */
742   dw2_asm_output_data ((for_eh ? 4 : DWARF_OFFSET_SIZE),
743 		       (for_eh ? 0 : DWARF_CIE_ID),
744 		       "CIE Identifier Tag");
745 
746   /* Use the CIE version 3 for DWARF3; allow DWARF2 to continue to
747      use CIE version 1, unless that would produce incorrect results
748      due to overflowing the return register column.  */
749   return_reg = DWARF2_FRAME_REG_OUT (DWARF_FRAME_RETURN_COLUMN, for_eh);
750   dw_cie_version = 1;
751   if (return_reg >= 256 || dwarf_version > 2)
752     dw_cie_version = 3;
753   dw2_asm_output_data (1, dw_cie_version, "CIE Version");
754 
755   augmentation[0] = 0;
756   augmentation_size = 0;
757 
758   personality = current_unit_personality;
759   if (for_eh)
760     {
761       char *p;
762 
763       /* Augmentation:
764 	 z	Indicates that a uleb128 is present to size the
765 		augmentation section.
766 	 L	Indicates the encoding (and thus presence) of
767 		an LSDA pointer in the FDE augmentation.
768 	 R	Indicates a non-default pointer encoding for
769 		FDE code pointers.
770 	 P	Indicates the presence of an encoding + language
771 		personality routine in the CIE augmentation.  */
772 
773       fde_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/1, /*global=*/0);
774       per_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/2, /*global=*/1);
775       lsda_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/0, /*global=*/0);
776 
777       p = augmentation + 1;
778       if (personality)
779 	{
780 	  *p++ = 'P';
781 	  augmentation_size += 1 + size_of_encoded_value (per_encoding);
782 	  assemble_external_libcall (personality);
783 	}
784       if (any_lsda_needed)
785 	{
786 	  *p++ = 'L';
787 	  augmentation_size += 1;
788 	}
789       if (fde_encoding != DW_EH_PE_absptr)
790 	{
791 	  *p++ = 'R';
792 	  augmentation_size += 1;
793 	}
794       if (p > augmentation + 1)
795 	{
796 	  augmentation[0] = 'z';
797 	  *p = '\0';
798 	}
799 
800       /* Ug.  Some platforms can't do unaligned dynamic relocations at all.  */
801       if (personality && per_encoding == DW_EH_PE_aligned)
802 	{
803 	  int offset = (  4		/* Length */
804 			+ 4		/* CIE Id */
805 			+ 1		/* CIE version */
806 			+ strlen (augmentation) + 1	/* Augmentation */
807 			+ size_of_uleb128 (1)		/* Code alignment */
808 			+ size_of_sleb128 (DWARF_CIE_DATA_ALIGNMENT)
809 			+ 1		/* RA column */
810 			+ 1		/* Augmentation size */
811 			+ 1		/* Personality encoding */ );
812 	  int pad = -offset & (PTR_SIZE - 1);
813 
814 	  augmentation_size += pad;
815 
816 	  /* Augmentations should be small, so there's scarce need to
817 	     iterate for a solution.  Die if we exceed one uleb128 byte.  */
818 	  gcc_assert (size_of_uleb128 (augmentation_size) == 1);
819 	}
820     }
821 
822   dw2_asm_output_nstring (augmentation, -1, "CIE Augmentation");
823   if (dw_cie_version >= 4)
824     {
825       dw2_asm_output_data (1, DWARF2_ADDR_SIZE, "CIE Address Size");
826       dw2_asm_output_data (1, 0, "CIE Segment Size");
827     }
828   dw2_asm_output_data_uleb128 (1, "CIE Code Alignment Factor");
829   dw2_asm_output_data_sleb128 (DWARF_CIE_DATA_ALIGNMENT,
830 			       "CIE Data Alignment Factor");
831 
832   if (dw_cie_version == 1)
833     dw2_asm_output_data (1, return_reg, "CIE RA Column");
834   else
835     dw2_asm_output_data_uleb128 (return_reg, "CIE RA Column");
836 
837   if (augmentation[0])
838     {
839       dw2_asm_output_data_uleb128 (augmentation_size, "Augmentation size");
840       if (personality)
841 	{
842 	  dw2_asm_output_data (1, per_encoding, "Personality (%s)",
843 			       eh_data_format_name (per_encoding));
844 	  dw2_asm_output_encoded_addr_rtx (per_encoding,
845 					   personality,
846 					   true, NULL);
847 	}
848 
849       if (any_lsda_needed)
850 	dw2_asm_output_data (1, lsda_encoding, "LSDA Encoding (%s)",
851 			     eh_data_format_name (lsda_encoding));
852 
853       if (fde_encoding != DW_EH_PE_absptr)
854 	dw2_asm_output_data (1, fde_encoding, "FDE Encoding (%s)",
855 			     eh_data_format_name (fde_encoding));
856     }
857 
858   FOR_EACH_VEC_ELT (dw_cfi_ref, cie_cfi_vec, i, cfi)
859     output_cfi (cfi, NULL, for_eh);
860 
861   /* Pad the CIE out to an address sized boundary.  */
862   ASM_OUTPUT_ALIGN (asm_out_file,
863 		    floor_log2 (for_eh ? PTR_SIZE : DWARF2_ADDR_SIZE));
864   ASM_OUTPUT_LABEL (asm_out_file, l2);
865 
866   /* Loop through all of the FDE's.  */
867   FOR_EACH_VEC_ELT (dw_fde_ref, fde_vec, i, fde)
868     {
869       unsigned int k;
870 
871       /* Don't emit EH unwind info for leaf functions that don't need it.  */
872       if (for_eh && !fde_needed_for_eh_p (fde))
873 	continue;
874 
875       for (k = 0; k < (fde->dw_fde_second_begin ? 2 : 1); k++)
876 	output_fde (fde, for_eh, k, section_start_label, fde_encoding,
877 		    augmentation, any_lsda_needed, lsda_encoding);
878     }
879 
880   if (for_eh && targetm.terminate_dw2_eh_frame_info)
881     dw2_asm_output_data (4, 0, "End of Table");
882 #ifdef MIPS_DEBUGGING_INFO
883   /* Work around Irix 6 assembler bug whereby labels at the end of a section
884      get a value of 0.  Putting .align 0 after the label fixes it.  */
885   ASM_OUTPUT_ALIGN (asm_out_file, 0);
886 #endif
887 
888   /* Turn off app to make assembly quicker.  */
889   if (flag_debug_asm)
890     app_disable ();
891 }
892 
893 /* Emit .cfi_startproc and .cfi_personality/.cfi_lsda if needed.  */
894 
895 static void
896 dwarf2out_do_cfi_startproc (bool second)
897 {
898   int enc;
899   rtx ref;
900   rtx personality = get_personality_function (current_function_decl);
901 
902   fprintf (asm_out_file, "\t.cfi_startproc\n");
903 
904   if (personality)
905     {
906       enc = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/2, /*global=*/1);
907       ref = personality;
908 
909       /* ??? The GAS support isn't entirely consistent.  We have to
910 	 handle indirect support ourselves, but PC-relative is done
911 	 in the assembler.  Further, the assembler can't handle any
912 	 of the weirder relocation types.  */
913       if (enc & DW_EH_PE_indirect)
914 	ref = dw2_force_const_mem (ref, true);
915 
916       fprintf (asm_out_file, "\t.cfi_personality %#x,", enc);
917       output_addr_const (asm_out_file, ref);
918       fputc ('\n', asm_out_file);
919     }
920 
921   if (crtl->uses_eh_lsda)
922     {
923       char lab[20];
924 
925       enc = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/0, /*global=*/0);
926       ASM_GENERATE_INTERNAL_LABEL (lab, second ? "LLSDAC" : "LLSDA",
927 				   current_function_funcdef_no);
928       ref = gen_rtx_SYMBOL_REF (Pmode, lab);
929       SYMBOL_REF_FLAGS (ref) = SYMBOL_FLAG_LOCAL;
930 
931       if (enc & DW_EH_PE_indirect)
932 	ref = dw2_force_const_mem (ref, true);
933 
934       fprintf (asm_out_file, "\t.cfi_lsda %#x,", enc);
935       output_addr_const (asm_out_file, ref);
936       fputc ('\n', asm_out_file);
937     }
938 }
939 
940 /* Allocate CURRENT_FDE.  Immediately initialize all we can, noting that
941    this allocation may be done before pass_final.  */
942 
943 dw_fde_ref
944 dwarf2out_alloc_current_fde (void)
945 {
946   dw_fde_ref fde;
947 
948   fde = ggc_alloc_cleared_dw_fde_node ();
949   fde->decl = current_function_decl;
950   fde->funcdef_number = current_function_funcdef_no;
951   fde->fde_index = VEC_length (dw_fde_ref, fde_vec);
952   fde->all_throwers_are_sibcalls = crtl->all_throwers_are_sibcalls;
953   fde->uses_eh_lsda = crtl->uses_eh_lsda;
954   fde->nothrow = crtl->nothrow;
955   fde->drap_reg = INVALID_REGNUM;
956   fde->vdrap_reg = INVALID_REGNUM;
957 
958   /* Record the FDE associated with this function.  */
959   cfun->fde = fde;
960   VEC_safe_push (dw_fde_ref, gc, fde_vec, fde);
961 
962   return fde;
963 }
964 
965 /* Output a marker (i.e. a label) for the beginning of a function, before
966    the prologue.  */
967 
968 void
969 dwarf2out_begin_prologue (unsigned int line ATTRIBUTE_UNUSED,
970 			  const char *file ATTRIBUTE_UNUSED)
971 {
972   char label[MAX_ARTIFICIAL_LABEL_BYTES];
973   char * dup_label;
974   dw_fde_ref fde;
975   section *fnsec;
976   bool do_frame;
977 
978   current_function_func_begin_label = NULL;
979 
980   do_frame = dwarf2out_do_frame ();
981 
982   /* ??? current_function_func_begin_label is also used by except.c for
983      call-site information.  We must emit this label if it might be used.  */
984   if (!do_frame
985       && (!flag_exceptions
986 	  || targetm_common.except_unwind_info (&global_options) != UI_TARGET))
987     return;
988 
989   fnsec = function_section (current_function_decl);
990   switch_to_section (fnsec);
991   ASM_GENERATE_INTERNAL_LABEL (label, FUNC_BEGIN_LABEL,
992 			       current_function_funcdef_no);
993   ASM_OUTPUT_DEBUG_LABEL (asm_out_file, FUNC_BEGIN_LABEL,
994 			  current_function_funcdef_no);
995   dup_label = xstrdup (label);
996   current_function_func_begin_label = dup_label;
997 
998   /* We can elide the fde allocation if we're not emitting debug info.  */
999   if (!do_frame)
1000     return;
1001 
1002   /* Cater to the various TARGET_ASM_OUTPUT_MI_THUNK implementations that
1003      emit insns as rtx but bypass the bulk of rest_of_compilation, which
1004      would include pass_dwarf2_frame.  If we've not created the FDE yet,
1005      do so now.  */
1006   fde = cfun->fde;
1007   if (fde == NULL)
1008     fde = dwarf2out_alloc_current_fde ();
1009 
1010   /* Initialize the bits of CURRENT_FDE that were not available earlier.  */
1011   fde->dw_fde_begin = dup_label;
1012   fde->dw_fde_current_label = dup_label;
1013   fde->in_std_section = (fnsec == text_section
1014 			 || (cold_text_section && fnsec == cold_text_section));
1015 
1016   /* We only want to output line number information for the genuine dwarf2
1017      prologue case, not the eh frame case.  */
1018 #ifdef DWARF2_DEBUGGING_INFO
1019   if (file)
1020     dwarf2out_source_line (line, file, 0, true);
1021 #endif
1022 
1023   if (dwarf2out_do_cfi_asm ())
1024     dwarf2out_do_cfi_startproc (false);
1025   else
1026     {
1027       rtx personality = get_personality_function (current_function_decl);
1028       if (!current_unit_personality)
1029         current_unit_personality = personality;
1030 
1031       /* We cannot keep a current personality per function as without CFI
1032 	 asm, at the point where we emit the CFI data, there is no current
1033 	 function anymore.  */
1034       if (personality && current_unit_personality != personality)
1035 	sorry ("multiple EH personalities are supported only with assemblers "
1036 	       "supporting .cfi_personality directive");
1037     }
1038 }
1039 
1040 /* Output a marker (i.e. a label) for the end of the generated code
1041    for a function prologue.  This gets called *after* the prologue code has
1042    been generated.  */
1043 
1044 void
1045 dwarf2out_vms_end_prologue (unsigned int line ATTRIBUTE_UNUSED,
1046 			const char *file ATTRIBUTE_UNUSED)
1047 {
1048   char label[MAX_ARTIFICIAL_LABEL_BYTES];
1049 
1050   /* Output a label to mark the endpoint of the code generated for this
1051      function.  */
1052   ASM_GENERATE_INTERNAL_LABEL (label, PROLOGUE_END_LABEL,
1053 			       current_function_funcdef_no);
1054   ASM_OUTPUT_DEBUG_LABEL (asm_out_file, PROLOGUE_END_LABEL,
1055 			  current_function_funcdef_no);
1056   cfun->fde->dw_fde_vms_end_prologue = xstrdup (label);
1057 }
1058 
1059 /* Output a marker (i.e. a label) for the beginning of the generated code
1060    for a function epilogue.  This gets called *before* the prologue code has
1061    been generated.  */
1062 
1063 void
1064 dwarf2out_vms_begin_epilogue (unsigned int line ATTRIBUTE_UNUSED,
1065 			  const char *file ATTRIBUTE_UNUSED)
1066 {
1067   dw_fde_ref fde = cfun->fde;
1068   char label[MAX_ARTIFICIAL_LABEL_BYTES];
1069 
1070   if (fde->dw_fde_vms_begin_epilogue)
1071     return;
1072 
1073   /* Output a label to mark the endpoint of the code generated for this
1074      function.  */
1075   ASM_GENERATE_INTERNAL_LABEL (label, EPILOGUE_BEGIN_LABEL,
1076 			       current_function_funcdef_no);
1077   ASM_OUTPUT_DEBUG_LABEL (asm_out_file, EPILOGUE_BEGIN_LABEL,
1078 			  current_function_funcdef_no);
1079   fde->dw_fde_vms_begin_epilogue = xstrdup (label);
1080 }
1081 
1082 /* Output a marker (i.e. a label) for the absolute end of the generated code
1083    for a function definition.  This gets called *after* the epilogue code has
1084    been generated.  */
1085 
1086 void
1087 dwarf2out_end_epilogue (unsigned int line ATTRIBUTE_UNUSED,
1088 			const char *file ATTRIBUTE_UNUSED)
1089 {
1090   dw_fde_ref fde;
1091   char label[MAX_ARTIFICIAL_LABEL_BYTES];
1092 
1093   last_var_location_insn = NULL_RTX;
1094   cached_next_real_insn = NULL_RTX;
1095 
1096   if (dwarf2out_do_cfi_asm ())
1097     fprintf (asm_out_file, "\t.cfi_endproc\n");
1098 
1099   /* Output a label to mark the endpoint of the code generated for this
1100      function.  */
1101   ASM_GENERATE_INTERNAL_LABEL (label, FUNC_END_LABEL,
1102 			       current_function_funcdef_no);
1103   ASM_OUTPUT_LABEL (asm_out_file, label);
1104   fde = cfun->fde;
1105   gcc_assert (fde != NULL);
1106   if (fde->dw_fde_second_begin == NULL)
1107     fde->dw_fde_end = xstrdup (label);
1108 }
1109 
1110 void
1111 dwarf2out_frame_finish (void)
1112 {
1113   /* Output call frame information.  */
1114   if (targetm.debug_unwind_info () == UI_DWARF2)
1115     output_call_frame_info (0);
1116 
1117   /* Output another copy for the unwinder.  */
1118   if ((flag_unwind_tables || flag_exceptions)
1119       && targetm_common.except_unwind_info (&global_options) == UI_DWARF2)
1120     output_call_frame_info (1);
1121 }
1122 
1123 /* Note that the current function section is being used for code.  */
1124 
1125 static void
1126 dwarf2out_note_section_used (void)
1127 {
1128   section *sec = current_function_section ();
1129   if (sec == text_section)
1130     text_section_used = true;
1131   else if (sec == cold_text_section)
1132     cold_text_section_used = true;
1133 }
1134 
1135 static void var_location_switch_text_section (void);
1136 static void set_cur_line_info_table (section *);
1137 
1138 void
1139 dwarf2out_switch_text_section (void)
1140 {
1141   section *sect;
1142   dw_fde_ref fde = cfun->fde;
1143 
1144   gcc_assert (cfun && fde && fde->dw_fde_second_begin == NULL);
1145 
1146   if (!in_cold_section_p)
1147     {
1148       fde->dw_fde_end = crtl->subsections.cold_section_end_label;
1149       fde->dw_fde_second_begin = crtl->subsections.hot_section_label;
1150       fde->dw_fde_second_end = crtl->subsections.hot_section_end_label;
1151     }
1152   else
1153     {
1154       fde->dw_fde_end = crtl->subsections.hot_section_end_label;
1155       fde->dw_fde_second_begin = crtl->subsections.cold_section_label;
1156       fde->dw_fde_second_end = crtl->subsections.cold_section_end_label;
1157     }
1158   have_multiple_function_sections = true;
1159 
1160   /* There is no need to mark used sections when not debugging.  */
1161   if (cold_text_section != NULL)
1162     dwarf2out_note_section_used ();
1163 
1164   if (dwarf2out_do_cfi_asm ())
1165     fprintf (asm_out_file, "\t.cfi_endproc\n");
1166 
1167   /* Now do the real section switch.  */
1168   sect = current_function_section ();
1169   switch_to_section (sect);
1170 
1171   fde->second_in_std_section
1172     = (sect == text_section
1173        || (cold_text_section && sect == cold_text_section));
1174 
1175   if (dwarf2out_do_cfi_asm ())
1176     dwarf2out_do_cfi_startproc (true);
1177 
1178   var_location_switch_text_section ();
1179 
1180   if (cold_text_section != NULL)
1181     set_cur_line_info_table (sect);
1182 }
1183 
1184 /* And now, the subset of the debugging information support code necessary
1185    for emitting location expressions.  */
1186 
1187 /* Data about a single source file.  */
1188 struct GTY(()) dwarf_file_data {
1189   const char * filename;
1190   int emitted_number;
1191 };
1192 
1193 typedef struct GTY(()) deferred_locations_struct
1194 {
1195   tree variable;
1196   dw_die_ref die;
1197 } deferred_locations;
1198 
1199 DEF_VEC_O(deferred_locations);
1200 DEF_VEC_ALLOC_O(deferred_locations,gc);
1201 
1202 static GTY(()) VEC(deferred_locations, gc) *deferred_locations_list;
1203 
1204 DEF_VEC_P(dw_die_ref);
1205 DEF_VEC_ALLOC_P(dw_die_ref,heap);
1206 
1207 /* Location lists are ranges + location descriptions for that range,
1208    so you can track variables that are in different places over
1209    their entire life.  */
1210 typedef struct GTY(()) dw_loc_list_struct {
1211   dw_loc_list_ref dw_loc_next;
1212   const char *begin; /* Label for begin address of range */
1213   const char *end;  /* Label for end address of range */
1214   char *ll_symbol; /* Label for beginning of location list.
1215 		      Only on head of list */
1216   const char *section; /* Section this loclist is relative to */
1217   dw_loc_descr_ref expr;
1218   hashval_t hash;
1219   /* True if all addresses in this and subsequent lists are known to be
1220      resolved.  */
1221   bool resolved_addr;
1222   /* True if this list has been replaced by dw_loc_next.  */
1223   bool replaced;
1224   bool emitted;
1225   /* True if the range should be emitted even if begin and end
1226      are the same.  */
1227   bool force;
1228 } dw_loc_list_node;
1229 
1230 static dw_loc_descr_ref int_loc_descriptor (HOST_WIDE_INT);
1231 
1232 /* Convert a DWARF stack opcode into its string name.  */
1233 
1234 static const char *
1235 dwarf_stack_op_name (unsigned int op)
1236 {
1237   switch (op)
1238     {
1239     case DW_OP_addr:
1240       return "DW_OP_addr";
1241     case DW_OP_deref:
1242       return "DW_OP_deref";
1243     case DW_OP_const1u:
1244       return "DW_OP_const1u";
1245     case DW_OP_const1s:
1246       return "DW_OP_const1s";
1247     case DW_OP_const2u:
1248       return "DW_OP_const2u";
1249     case DW_OP_const2s:
1250       return "DW_OP_const2s";
1251     case DW_OP_const4u:
1252       return "DW_OP_const4u";
1253     case DW_OP_const4s:
1254       return "DW_OP_const4s";
1255     case DW_OP_const8u:
1256       return "DW_OP_const8u";
1257     case DW_OP_const8s:
1258       return "DW_OP_const8s";
1259     case DW_OP_constu:
1260       return "DW_OP_constu";
1261     case DW_OP_consts:
1262       return "DW_OP_consts";
1263     case DW_OP_dup:
1264       return "DW_OP_dup";
1265     case DW_OP_drop:
1266       return "DW_OP_drop";
1267     case DW_OP_over:
1268       return "DW_OP_over";
1269     case DW_OP_pick:
1270       return "DW_OP_pick";
1271     case DW_OP_swap:
1272       return "DW_OP_swap";
1273     case DW_OP_rot:
1274       return "DW_OP_rot";
1275     case DW_OP_xderef:
1276       return "DW_OP_xderef";
1277     case DW_OP_abs:
1278       return "DW_OP_abs";
1279     case DW_OP_and:
1280       return "DW_OP_and";
1281     case DW_OP_div:
1282       return "DW_OP_div";
1283     case DW_OP_minus:
1284       return "DW_OP_minus";
1285     case DW_OP_mod:
1286       return "DW_OP_mod";
1287     case DW_OP_mul:
1288       return "DW_OP_mul";
1289     case DW_OP_neg:
1290       return "DW_OP_neg";
1291     case DW_OP_not:
1292       return "DW_OP_not";
1293     case DW_OP_or:
1294       return "DW_OP_or";
1295     case DW_OP_plus:
1296       return "DW_OP_plus";
1297     case DW_OP_plus_uconst:
1298       return "DW_OP_plus_uconst";
1299     case DW_OP_shl:
1300       return "DW_OP_shl";
1301     case DW_OP_shr:
1302       return "DW_OP_shr";
1303     case DW_OP_shra:
1304       return "DW_OP_shra";
1305     case DW_OP_xor:
1306       return "DW_OP_xor";
1307     case DW_OP_bra:
1308       return "DW_OP_bra";
1309     case DW_OP_eq:
1310       return "DW_OP_eq";
1311     case DW_OP_ge:
1312       return "DW_OP_ge";
1313     case DW_OP_gt:
1314       return "DW_OP_gt";
1315     case DW_OP_le:
1316       return "DW_OP_le";
1317     case DW_OP_lt:
1318       return "DW_OP_lt";
1319     case DW_OP_ne:
1320       return "DW_OP_ne";
1321     case DW_OP_skip:
1322       return "DW_OP_skip";
1323     case DW_OP_lit0:
1324       return "DW_OP_lit0";
1325     case DW_OP_lit1:
1326       return "DW_OP_lit1";
1327     case DW_OP_lit2:
1328       return "DW_OP_lit2";
1329     case DW_OP_lit3:
1330       return "DW_OP_lit3";
1331     case DW_OP_lit4:
1332       return "DW_OP_lit4";
1333     case DW_OP_lit5:
1334       return "DW_OP_lit5";
1335     case DW_OP_lit6:
1336       return "DW_OP_lit6";
1337     case DW_OP_lit7:
1338       return "DW_OP_lit7";
1339     case DW_OP_lit8:
1340       return "DW_OP_lit8";
1341     case DW_OP_lit9:
1342       return "DW_OP_lit9";
1343     case DW_OP_lit10:
1344       return "DW_OP_lit10";
1345     case DW_OP_lit11:
1346       return "DW_OP_lit11";
1347     case DW_OP_lit12:
1348       return "DW_OP_lit12";
1349     case DW_OP_lit13:
1350       return "DW_OP_lit13";
1351     case DW_OP_lit14:
1352       return "DW_OP_lit14";
1353     case DW_OP_lit15:
1354       return "DW_OP_lit15";
1355     case DW_OP_lit16:
1356       return "DW_OP_lit16";
1357     case DW_OP_lit17:
1358       return "DW_OP_lit17";
1359     case DW_OP_lit18:
1360       return "DW_OP_lit18";
1361     case DW_OP_lit19:
1362       return "DW_OP_lit19";
1363     case DW_OP_lit20:
1364       return "DW_OP_lit20";
1365     case DW_OP_lit21:
1366       return "DW_OP_lit21";
1367     case DW_OP_lit22:
1368       return "DW_OP_lit22";
1369     case DW_OP_lit23:
1370       return "DW_OP_lit23";
1371     case DW_OP_lit24:
1372       return "DW_OP_lit24";
1373     case DW_OP_lit25:
1374       return "DW_OP_lit25";
1375     case DW_OP_lit26:
1376       return "DW_OP_lit26";
1377     case DW_OP_lit27:
1378       return "DW_OP_lit27";
1379     case DW_OP_lit28:
1380       return "DW_OP_lit28";
1381     case DW_OP_lit29:
1382       return "DW_OP_lit29";
1383     case DW_OP_lit30:
1384       return "DW_OP_lit30";
1385     case DW_OP_lit31:
1386       return "DW_OP_lit31";
1387     case DW_OP_reg0:
1388       return "DW_OP_reg0";
1389     case DW_OP_reg1:
1390       return "DW_OP_reg1";
1391     case DW_OP_reg2:
1392       return "DW_OP_reg2";
1393     case DW_OP_reg3:
1394       return "DW_OP_reg3";
1395     case DW_OP_reg4:
1396       return "DW_OP_reg4";
1397     case DW_OP_reg5:
1398       return "DW_OP_reg5";
1399     case DW_OP_reg6:
1400       return "DW_OP_reg6";
1401     case DW_OP_reg7:
1402       return "DW_OP_reg7";
1403     case DW_OP_reg8:
1404       return "DW_OP_reg8";
1405     case DW_OP_reg9:
1406       return "DW_OP_reg9";
1407     case DW_OP_reg10:
1408       return "DW_OP_reg10";
1409     case DW_OP_reg11:
1410       return "DW_OP_reg11";
1411     case DW_OP_reg12:
1412       return "DW_OP_reg12";
1413     case DW_OP_reg13:
1414       return "DW_OP_reg13";
1415     case DW_OP_reg14:
1416       return "DW_OP_reg14";
1417     case DW_OP_reg15:
1418       return "DW_OP_reg15";
1419     case DW_OP_reg16:
1420       return "DW_OP_reg16";
1421     case DW_OP_reg17:
1422       return "DW_OP_reg17";
1423     case DW_OP_reg18:
1424       return "DW_OP_reg18";
1425     case DW_OP_reg19:
1426       return "DW_OP_reg19";
1427     case DW_OP_reg20:
1428       return "DW_OP_reg20";
1429     case DW_OP_reg21:
1430       return "DW_OP_reg21";
1431     case DW_OP_reg22:
1432       return "DW_OP_reg22";
1433     case DW_OP_reg23:
1434       return "DW_OP_reg23";
1435     case DW_OP_reg24:
1436       return "DW_OP_reg24";
1437     case DW_OP_reg25:
1438       return "DW_OP_reg25";
1439     case DW_OP_reg26:
1440       return "DW_OP_reg26";
1441     case DW_OP_reg27:
1442       return "DW_OP_reg27";
1443     case DW_OP_reg28:
1444       return "DW_OP_reg28";
1445     case DW_OP_reg29:
1446       return "DW_OP_reg29";
1447     case DW_OP_reg30:
1448       return "DW_OP_reg30";
1449     case DW_OP_reg31:
1450       return "DW_OP_reg31";
1451     case DW_OP_breg0:
1452       return "DW_OP_breg0";
1453     case DW_OP_breg1:
1454       return "DW_OP_breg1";
1455     case DW_OP_breg2:
1456       return "DW_OP_breg2";
1457     case DW_OP_breg3:
1458       return "DW_OP_breg3";
1459     case DW_OP_breg4:
1460       return "DW_OP_breg4";
1461     case DW_OP_breg5:
1462       return "DW_OP_breg5";
1463     case DW_OP_breg6:
1464       return "DW_OP_breg6";
1465     case DW_OP_breg7:
1466       return "DW_OP_breg7";
1467     case DW_OP_breg8:
1468       return "DW_OP_breg8";
1469     case DW_OP_breg9:
1470       return "DW_OP_breg9";
1471     case DW_OP_breg10:
1472       return "DW_OP_breg10";
1473     case DW_OP_breg11:
1474       return "DW_OP_breg11";
1475     case DW_OP_breg12:
1476       return "DW_OP_breg12";
1477     case DW_OP_breg13:
1478       return "DW_OP_breg13";
1479     case DW_OP_breg14:
1480       return "DW_OP_breg14";
1481     case DW_OP_breg15:
1482       return "DW_OP_breg15";
1483     case DW_OP_breg16:
1484       return "DW_OP_breg16";
1485     case DW_OP_breg17:
1486       return "DW_OP_breg17";
1487     case DW_OP_breg18:
1488       return "DW_OP_breg18";
1489     case DW_OP_breg19:
1490       return "DW_OP_breg19";
1491     case DW_OP_breg20:
1492       return "DW_OP_breg20";
1493     case DW_OP_breg21:
1494       return "DW_OP_breg21";
1495     case DW_OP_breg22:
1496       return "DW_OP_breg22";
1497     case DW_OP_breg23:
1498       return "DW_OP_breg23";
1499     case DW_OP_breg24:
1500       return "DW_OP_breg24";
1501     case DW_OP_breg25:
1502       return "DW_OP_breg25";
1503     case DW_OP_breg26:
1504       return "DW_OP_breg26";
1505     case DW_OP_breg27:
1506       return "DW_OP_breg27";
1507     case DW_OP_breg28:
1508       return "DW_OP_breg28";
1509     case DW_OP_breg29:
1510       return "DW_OP_breg29";
1511     case DW_OP_breg30:
1512       return "DW_OP_breg30";
1513     case DW_OP_breg31:
1514       return "DW_OP_breg31";
1515     case DW_OP_regx:
1516       return "DW_OP_regx";
1517     case DW_OP_fbreg:
1518       return "DW_OP_fbreg";
1519     case DW_OP_bregx:
1520       return "DW_OP_bregx";
1521     case DW_OP_piece:
1522       return "DW_OP_piece";
1523     case DW_OP_deref_size:
1524       return "DW_OP_deref_size";
1525     case DW_OP_xderef_size:
1526       return "DW_OP_xderef_size";
1527     case DW_OP_nop:
1528       return "DW_OP_nop";
1529 
1530     case DW_OP_push_object_address:
1531       return "DW_OP_push_object_address";
1532     case DW_OP_call2:
1533       return "DW_OP_call2";
1534     case DW_OP_call4:
1535       return "DW_OP_call4";
1536     case DW_OP_call_ref:
1537       return "DW_OP_call_ref";
1538     case DW_OP_implicit_value:
1539       return "DW_OP_implicit_value";
1540     case DW_OP_stack_value:
1541       return "DW_OP_stack_value";
1542     case DW_OP_form_tls_address:
1543       return "DW_OP_form_tls_address";
1544     case DW_OP_call_frame_cfa:
1545       return "DW_OP_call_frame_cfa";
1546     case DW_OP_bit_piece:
1547       return "DW_OP_bit_piece";
1548 
1549     case DW_OP_GNU_push_tls_address:
1550       return "DW_OP_GNU_push_tls_address";
1551     case DW_OP_GNU_uninit:
1552       return "DW_OP_GNU_uninit";
1553     case DW_OP_GNU_encoded_addr:
1554       return "DW_OP_GNU_encoded_addr";
1555     case DW_OP_GNU_implicit_pointer:
1556       return "DW_OP_GNU_implicit_pointer";
1557     case DW_OP_GNU_entry_value:
1558       return "DW_OP_GNU_entry_value";
1559     case DW_OP_GNU_const_type:
1560       return "DW_OP_GNU_const_type";
1561     case DW_OP_GNU_regval_type:
1562       return "DW_OP_GNU_regval_type";
1563     case DW_OP_GNU_deref_type:
1564       return "DW_OP_GNU_deref_type";
1565     case DW_OP_GNU_convert:
1566       return "DW_OP_GNU_convert";
1567     case DW_OP_GNU_reinterpret:
1568       return "DW_OP_GNU_reinterpret";
1569     case DW_OP_GNU_parameter_ref:
1570       return "DW_OP_GNU_parameter_ref";
1571 
1572     default:
1573       return "OP_<unknown>";
1574     }
1575 }
1576 
1577 /* Return a pointer to a newly allocated location description.  Location
1578    descriptions are simple expression terms that can be strung
1579    together to form more complicated location (address) descriptions.  */
1580 
1581 static inline dw_loc_descr_ref
1582 new_loc_descr (enum dwarf_location_atom op, unsigned HOST_WIDE_INT oprnd1,
1583 	       unsigned HOST_WIDE_INT oprnd2)
1584 {
1585   dw_loc_descr_ref descr = ggc_alloc_cleared_dw_loc_descr_node ();
1586 
1587   descr->dw_loc_opc = op;
1588   descr->dw_loc_oprnd1.val_class = dw_val_class_unsigned_const;
1589   descr->dw_loc_oprnd1.v.val_unsigned = oprnd1;
1590   descr->dw_loc_oprnd2.val_class = dw_val_class_unsigned_const;
1591   descr->dw_loc_oprnd2.v.val_unsigned = oprnd2;
1592 
1593   return descr;
1594 }
1595 
1596 /* Return a pointer to a newly allocated location description for
1597    REG and OFFSET.  */
1598 
1599 static inline dw_loc_descr_ref
1600 new_reg_loc_descr (unsigned int reg,  unsigned HOST_WIDE_INT offset)
1601 {
1602   if (reg <= 31)
1603     return new_loc_descr ((enum dwarf_location_atom) (DW_OP_breg0 + reg),
1604 			  offset, 0);
1605   else
1606     return new_loc_descr (DW_OP_bregx, reg, offset);
1607 }
1608 
1609 /* Add a location description term to a location description expression.  */
1610 
1611 static inline void
1612 add_loc_descr (dw_loc_descr_ref *list_head, dw_loc_descr_ref descr)
1613 {
1614   dw_loc_descr_ref *d;
1615 
1616   /* Find the end of the chain.  */
1617   for (d = list_head; (*d) != NULL; d = &(*d)->dw_loc_next)
1618     ;
1619 
1620   *d = descr;
1621 }
1622 
1623 /* Compare two location operands for exact equality.  */
1624 
1625 static bool
1626 dw_val_equal_p (dw_val_node *a, dw_val_node *b)
1627 {
1628   if (a->val_class != b->val_class)
1629     return false;
1630   switch (a->val_class)
1631     {
1632     case dw_val_class_none:
1633       return true;
1634     case dw_val_class_addr:
1635       return rtx_equal_p (a->v.val_addr, b->v.val_addr);
1636 
1637     case dw_val_class_offset:
1638     case dw_val_class_unsigned_const:
1639     case dw_val_class_const:
1640     case dw_val_class_range_list:
1641     case dw_val_class_lineptr:
1642     case dw_val_class_macptr:
1643       /* These are all HOST_WIDE_INT, signed or unsigned.  */
1644       return a->v.val_unsigned == b->v.val_unsigned;
1645 
1646     case dw_val_class_loc:
1647       return a->v.val_loc == b->v.val_loc;
1648     case dw_val_class_loc_list:
1649       return a->v.val_loc_list == b->v.val_loc_list;
1650     case dw_val_class_die_ref:
1651       return a->v.val_die_ref.die == b->v.val_die_ref.die;
1652     case dw_val_class_fde_ref:
1653       return a->v.val_fde_index == b->v.val_fde_index;
1654     case dw_val_class_lbl_id:
1655       return strcmp (a->v.val_lbl_id, b->v.val_lbl_id) == 0;
1656     case dw_val_class_str:
1657       return a->v.val_str == b->v.val_str;
1658     case dw_val_class_flag:
1659       return a->v.val_flag == b->v.val_flag;
1660     case dw_val_class_file:
1661       return a->v.val_file == b->v.val_file;
1662     case dw_val_class_decl_ref:
1663       return a->v.val_decl_ref == b->v.val_decl_ref;
1664 
1665     case dw_val_class_const_double:
1666       return (a->v.val_double.high == b->v.val_double.high
1667 	      && a->v.val_double.low == b->v.val_double.low);
1668 
1669     case dw_val_class_vec:
1670       {
1671 	size_t a_len = a->v.val_vec.elt_size * a->v.val_vec.length;
1672 	size_t b_len = b->v.val_vec.elt_size * b->v.val_vec.length;
1673 
1674 	return (a_len == b_len
1675 		&& !memcmp (a->v.val_vec.array, b->v.val_vec.array, a_len));
1676       }
1677 
1678     case dw_val_class_data8:
1679       return memcmp (a->v.val_data8, b->v.val_data8, 8) == 0;
1680 
1681     case dw_val_class_vms_delta:
1682       return (!strcmp (a->v.val_vms_delta.lbl1, b->v.val_vms_delta.lbl1)
1683               && !strcmp (a->v.val_vms_delta.lbl1, b->v.val_vms_delta.lbl1));
1684     }
1685   gcc_unreachable ();
1686 }
1687 
1688 /* Compare two location atoms for exact equality.  */
1689 
1690 static bool
1691 loc_descr_equal_p_1 (dw_loc_descr_ref a, dw_loc_descr_ref b)
1692 {
1693   if (a->dw_loc_opc != b->dw_loc_opc)
1694     return false;
1695 
1696   /* ??? This is only ever set for DW_OP_constNu, for N equal to the
1697      address size, but since we always allocate cleared storage it
1698      should be zero for other types of locations.  */
1699   if (a->dtprel != b->dtprel)
1700     return false;
1701 
1702   return (dw_val_equal_p (&a->dw_loc_oprnd1, &b->dw_loc_oprnd1)
1703 	  && dw_val_equal_p (&a->dw_loc_oprnd2, &b->dw_loc_oprnd2));
1704 }
1705 
1706 /* Compare two complete location expressions for exact equality.  */
1707 
1708 bool
1709 loc_descr_equal_p (dw_loc_descr_ref a, dw_loc_descr_ref b)
1710 {
1711   while (1)
1712     {
1713       if (a == b)
1714 	return true;
1715       if (a == NULL || b == NULL)
1716 	return false;
1717       if (!loc_descr_equal_p_1 (a, b))
1718 	return false;
1719 
1720       a = a->dw_loc_next;
1721       b = b->dw_loc_next;
1722     }
1723 }
1724 
1725 
1726 /* Add a constant OFFSET to a location expression.  */
1727 
1728 static void
1729 loc_descr_plus_const (dw_loc_descr_ref *list_head, HOST_WIDE_INT offset)
1730 {
1731   dw_loc_descr_ref loc;
1732   HOST_WIDE_INT *p;
1733 
1734   gcc_assert (*list_head != NULL);
1735 
1736   if (!offset)
1737     return;
1738 
1739   /* Find the end of the chain.  */
1740   for (loc = *list_head; loc->dw_loc_next != NULL; loc = loc->dw_loc_next)
1741     ;
1742 
1743   p = NULL;
1744   if (loc->dw_loc_opc == DW_OP_fbreg
1745       || (loc->dw_loc_opc >= DW_OP_breg0 && loc->dw_loc_opc <= DW_OP_breg31))
1746     p = &loc->dw_loc_oprnd1.v.val_int;
1747   else if (loc->dw_loc_opc == DW_OP_bregx)
1748     p = &loc->dw_loc_oprnd2.v.val_int;
1749 
1750   /* If the last operation is fbreg, breg{0..31,x}, optimize by adjusting its
1751      offset.  Don't optimize if an signed integer overflow would happen.  */
1752   if (p != NULL
1753       && ((offset > 0 && *p <= INTTYPE_MAXIMUM (HOST_WIDE_INT) - offset)
1754 	  || (offset < 0 && *p >= INTTYPE_MINIMUM (HOST_WIDE_INT) - offset)))
1755     *p += offset;
1756 
1757   else if (offset > 0)
1758     loc->dw_loc_next = new_loc_descr (DW_OP_plus_uconst, offset, 0);
1759 
1760   else
1761     {
1762       loc->dw_loc_next = int_loc_descriptor (-offset);
1763       add_loc_descr (&loc->dw_loc_next, new_loc_descr (DW_OP_minus, 0, 0));
1764     }
1765 }
1766 
1767 /* Add a constant OFFSET to a location list.  */
1768 
1769 static void
1770 loc_list_plus_const (dw_loc_list_ref list_head, HOST_WIDE_INT offset)
1771 {
1772   dw_loc_list_ref d;
1773   for (d = list_head; d != NULL; d = d->dw_loc_next)
1774     loc_descr_plus_const (&d->expr, offset);
1775 }
1776 
1777 #define DWARF_REF_SIZE	\
1778   (dwarf_version == 2 ? DWARF2_ADDR_SIZE : DWARF_OFFSET_SIZE)
1779 
1780 static unsigned long int get_base_type_offset (dw_die_ref);
1781 
1782 /* Return the size of a location descriptor.  */
1783 
1784 static unsigned long
1785 size_of_loc_descr (dw_loc_descr_ref loc)
1786 {
1787   unsigned long size = 1;
1788 
1789   switch (loc->dw_loc_opc)
1790     {
1791     case DW_OP_addr:
1792       size += DWARF2_ADDR_SIZE;
1793       break;
1794     case DW_OP_const1u:
1795     case DW_OP_const1s:
1796       size += 1;
1797       break;
1798     case DW_OP_const2u:
1799     case DW_OP_const2s:
1800       size += 2;
1801       break;
1802     case DW_OP_const4u:
1803     case DW_OP_const4s:
1804       size += 4;
1805       break;
1806     case DW_OP_const8u:
1807     case DW_OP_const8s:
1808       size += 8;
1809       break;
1810     case DW_OP_constu:
1811       size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
1812       break;
1813     case DW_OP_consts:
1814       size += size_of_sleb128 (loc->dw_loc_oprnd1.v.val_int);
1815       break;
1816     case DW_OP_pick:
1817       size += 1;
1818       break;
1819     case DW_OP_plus_uconst:
1820       size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
1821       break;
1822     case DW_OP_skip:
1823     case DW_OP_bra:
1824       size += 2;
1825       break;
1826     case DW_OP_breg0:
1827     case DW_OP_breg1:
1828     case DW_OP_breg2:
1829     case DW_OP_breg3:
1830     case DW_OP_breg4:
1831     case DW_OP_breg5:
1832     case DW_OP_breg6:
1833     case DW_OP_breg7:
1834     case DW_OP_breg8:
1835     case DW_OP_breg9:
1836     case DW_OP_breg10:
1837     case DW_OP_breg11:
1838     case DW_OP_breg12:
1839     case DW_OP_breg13:
1840     case DW_OP_breg14:
1841     case DW_OP_breg15:
1842     case DW_OP_breg16:
1843     case DW_OP_breg17:
1844     case DW_OP_breg18:
1845     case DW_OP_breg19:
1846     case DW_OP_breg20:
1847     case DW_OP_breg21:
1848     case DW_OP_breg22:
1849     case DW_OP_breg23:
1850     case DW_OP_breg24:
1851     case DW_OP_breg25:
1852     case DW_OP_breg26:
1853     case DW_OP_breg27:
1854     case DW_OP_breg28:
1855     case DW_OP_breg29:
1856     case DW_OP_breg30:
1857     case DW_OP_breg31:
1858       size += size_of_sleb128 (loc->dw_loc_oprnd1.v.val_int);
1859       break;
1860     case DW_OP_regx:
1861       size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
1862       break;
1863     case DW_OP_fbreg:
1864       size += size_of_sleb128 (loc->dw_loc_oprnd1.v.val_int);
1865       break;
1866     case DW_OP_bregx:
1867       size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
1868       size += size_of_sleb128 (loc->dw_loc_oprnd2.v.val_int);
1869       break;
1870     case DW_OP_piece:
1871       size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
1872       break;
1873     case DW_OP_bit_piece:
1874       size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
1875       size += size_of_uleb128 (loc->dw_loc_oprnd2.v.val_unsigned);
1876       break;
1877     case DW_OP_deref_size:
1878     case DW_OP_xderef_size:
1879       size += 1;
1880       break;
1881     case DW_OP_call2:
1882       size += 2;
1883       break;
1884     case DW_OP_call4:
1885       size += 4;
1886       break;
1887     case DW_OP_call_ref:
1888       size += DWARF_REF_SIZE;
1889       break;
1890     case DW_OP_implicit_value:
1891       size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned)
1892 	      + loc->dw_loc_oprnd1.v.val_unsigned;
1893       break;
1894     case DW_OP_GNU_implicit_pointer:
1895       size += DWARF_REF_SIZE + size_of_sleb128 (loc->dw_loc_oprnd2.v.val_int);
1896       break;
1897     case DW_OP_GNU_entry_value:
1898       {
1899 	unsigned long op_size = size_of_locs (loc->dw_loc_oprnd1.v.val_loc);
1900 	size += size_of_uleb128 (op_size) + op_size;
1901 	break;
1902       }
1903     case DW_OP_GNU_const_type:
1904       {
1905 	unsigned long o
1906 	  = get_base_type_offset (loc->dw_loc_oprnd1.v.val_die_ref.die);
1907 	size += size_of_uleb128 (o) + 1;
1908 	switch (loc->dw_loc_oprnd2.val_class)
1909 	  {
1910 	  case dw_val_class_vec:
1911 	    size += loc->dw_loc_oprnd2.v.val_vec.length
1912 		    * loc->dw_loc_oprnd2.v.val_vec.elt_size;
1913 	    break;
1914 	  case dw_val_class_const:
1915 	    size += HOST_BITS_PER_WIDE_INT / BITS_PER_UNIT;
1916 	    break;
1917 	  case dw_val_class_const_double:
1918 	    size += 2 * HOST_BITS_PER_WIDE_INT / BITS_PER_UNIT;
1919 	    break;
1920 	  default:
1921 	    gcc_unreachable ();
1922 	  }
1923 	break;
1924       }
1925     case DW_OP_GNU_regval_type:
1926       {
1927 	unsigned long o
1928 	  = get_base_type_offset (loc->dw_loc_oprnd2.v.val_die_ref.die);
1929 	size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned)
1930 		+ size_of_uleb128 (o);
1931       }
1932       break;
1933     case DW_OP_GNU_deref_type:
1934       {
1935 	unsigned long o
1936 	  = get_base_type_offset (loc->dw_loc_oprnd2.v.val_die_ref.die);
1937 	size += 1 + size_of_uleb128 (o);
1938       }
1939       break;
1940     case DW_OP_GNU_convert:
1941     case DW_OP_GNU_reinterpret:
1942       if (loc->dw_loc_oprnd1.val_class == dw_val_class_unsigned_const)
1943 	size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
1944       else
1945 	{
1946 	  unsigned long o
1947 	    = get_base_type_offset (loc->dw_loc_oprnd1.v.val_die_ref.die);
1948 	  size += size_of_uleb128 (o);
1949 	}
1950       break;
1951     case DW_OP_GNU_parameter_ref:
1952       size += 4;
1953       break;
1954     default:
1955       break;
1956     }
1957 
1958   return size;
1959 }
1960 
1961 /* Return the size of a series of location descriptors.  */
1962 
1963 unsigned long
1964 size_of_locs (dw_loc_descr_ref loc)
1965 {
1966   dw_loc_descr_ref l;
1967   unsigned long size;
1968 
1969   /* If there are no skip or bra opcodes, don't fill in the dw_loc_addr
1970      field, to avoid writing to a PCH file.  */
1971   for (size = 0, l = loc; l != NULL; l = l->dw_loc_next)
1972     {
1973       if (l->dw_loc_opc == DW_OP_skip || l->dw_loc_opc == DW_OP_bra)
1974 	break;
1975       size += size_of_loc_descr (l);
1976     }
1977   if (! l)
1978     return size;
1979 
1980   for (size = 0, l = loc; l != NULL; l = l->dw_loc_next)
1981     {
1982       l->dw_loc_addr = size;
1983       size += size_of_loc_descr (l);
1984     }
1985 
1986   return size;
1987 }
1988 
1989 static HOST_WIDE_INT extract_int (const unsigned char *, unsigned);
1990 static void get_ref_die_offset_label (char *, dw_die_ref);
1991 static unsigned long int get_ref_die_offset (dw_die_ref);
1992 
1993 /* Output location description stack opcode's operands (if any).
1994    The for_eh_or_skip parameter controls whether register numbers are
1995    converted using DWARF2_FRAME_REG_OUT, which is needed in the case that
1996    hard reg numbers have been processed via DWARF_FRAME_REGNUM (i.e. for unwind
1997    info).  This should be suppressed for the cases that have not been converted
1998    (i.e. symbolic debug info), by setting the parameter < 0.  See PR47324.  */
1999 
2000 static void
2001 output_loc_operands (dw_loc_descr_ref loc, int for_eh_or_skip)
2002 {
2003   dw_val_ref val1 = &loc->dw_loc_oprnd1;
2004   dw_val_ref val2 = &loc->dw_loc_oprnd2;
2005 
2006   switch (loc->dw_loc_opc)
2007     {
2008 #ifdef DWARF2_DEBUGGING_INFO
2009     case DW_OP_const2u:
2010     case DW_OP_const2s:
2011       dw2_asm_output_data (2, val1->v.val_int, NULL);
2012       break;
2013     case DW_OP_const4u:
2014       if (loc->dtprel)
2015 	{
2016 	  gcc_assert (targetm.asm_out.output_dwarf_dtprel);
2017 	  targetm.asm_out.output_dwarf_dtprel (asm_out_file, 4,
2018 					       val1->v.val_addr);
2019 	  fputc ('\n', asm_out_file);
2020 	  break;
2021 	}
2022       /* FALLTHRU */
2023     case DW_OP_const4s:
2024       dw2_asm_output_data (4, val1->v.val_int, NULL);
2025       break;
2026     case DW_OP_const8u:
2027       if (loc->dtprel)
2028 	{
2029 	  gcc_assert (targetm.asm_out.output_dwarf_dtprel);
2030 	  targetm.asm_out.output_dwarf_dtprel (asm_out_file, 8,
2031 					       val1->v.val_addr);
2032 	  fputc ('\n', asm_out_file);
2033 	  break;
2034 	}
2035       /* FALLTHRU */
2036     case DW_OP_const8s:
2037       gcc_assert (HOST_BITS_PER_WIDE_INT >= 64);
2038       dw2_asm_output_data (8, val1->v.val_int, NULL);
2039       break;
2040     case DW_OP_skip:
2041     case DW_OP_bra:
2042       {
2043 	int offset;
2044 
2045 	gcc_assert (val1->val_class == dw_val_class_loc);
2046 	offset = val1->v.val_loc->dw_loc_addr - (loc->dw_loc_addr + 3);
2047 
2048 	dw2_asm_output_data (2, offset, NULL);
2049       }
2050       break;
2051     case DW_OP_implicit_value:
2052       dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
2053       switch (val2->val_class)
2054 	{
2055 	case dw_val_class_const:
2056 	  dw2_asm_output_data (val1->v.val_unsigned, val2->v.val_int, NULL);
2057 	  break;
2058 	case dw_val_class_vec:
2059 	  {
2060 	    unsigned int elt_size = val2->v.val_vec.elt_size;
2061 	    unsigned int len = val2->v.val_vec.length;
2062 	    unsigned int i;
2063 	    unsigned char *p;
2064 
2065 	    if (elt_size > sizeof (HOST_WIDE_INT))
2066 	      {
2067 		elt_size /= 2;
2068 		len *= 2;
2069 	      }
2070 	    for (i = 0, p = val2->v.val_vec.array;
2071 		 i < len;
2072 		 i++, p += elt_size)
2073 	      dw2_asm_output_data (elt_size, extract_int (p, elt_size),
2074 				   "fp or vector constant word %u", i);
2075 	  }
2076 	  break;
2077 	case dw_val_class_const_double:
2078 	  {
2079 	    unsigned HOST_WIDE_INT first, second;
2080 
2081 	    if (WORDS_BIG_ENDIAN)
2082 	      {
2083 		first = val2->v.val_double.high;
2084 		second = val2->v.val_double.low;
2085 	      }
2086 	    else
2087 	      {
2088 		first = val2->v.val_double.low;
2089 		second = val2->v.val_double.high;
2090 	      }
2091 	    dw2_asm_output_data (HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR,
2092 				 first, NULL);
2093 	    dw2_asm_output_data (HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR,
2094 				 second, NULL);
2095 	  }
2096 	  break;
2097 	case dw_val_class_addr:
2098 	  gcc_assert (val1->v.val_unsigned == DWARF2_ADDR_SIZE);
2099 	  dw2_asm_output_addr_rtx (DWARF2_ADDR_SIZE, val2->v.val_addr, NULL);
2100 	  break;
2101 	default:
2102 	  gcc_unreachable ();
2103 	}
2104       break;
2105 #else
2106     case DW_OP_const2u:
2107     case DW_OP_const2s:
2108     case DW_OP_const4u:
2109     case DW_OP_const4s:
2110     case DW_OP_const8u:
2111     case DW_OP_const8s:
2112     case DW_OP_skip:
2113     case DW_OP_bra:
2114     case DW_OP_implicit_value:
2115       /* We currently don't make any attempt to make sure these are
2116 	 aligned properly like we do for the main unwind info, so
2117 	 don't support emitting things larger than a byte if we're
2118 	 only doing unwinding.  */
2119       gcc_unreachable ();
2120 #endif
2121     case DW_OP_const1u:
2122     case DW_OP_const1s:
2123       dw2_asm_output_data (1, val1->v.val_int, NULL);
2124       break;
2125     case DW_OP_constu:
2126       dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
2127       break;
2128     case DW_OP_consts:
2129       dw2_asm_output_data_sleb128 (val1->v.val_int, NULL);
2130       break;
2131     case DW_OP_pick:
2132       dw2_asm_output_data (1, val1->v.val_int, NULL);
2133       break;
2134     case DW_OP_plus_uconst:
2135       dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
2136       break;
2137     case DW_OP_breg0:
2138     case DW_OP_breg1:
2139     case DW_OP_breg2:
2140     case DW_OP_breg3:
2141     case DW_OP_breg4:
2142     case DW_OP_breg5:
2143     case DW_OP_breg6:
2144     case DW_OP_breg7:
2145     case DW_OP_breg8:
2146     case DW_OP_breg9:
2147     case DW_OP_breg10:
2148     case DW_OP_breg11:
2149     case DW_OP_breg12:
2150     case DW_OP_breg13:
2151     case DW_OP_breg14:
2152     case DW_OP_breg15:
2153     case DW_OP_breg16:
2154     case DW_OP_breg17:
2155     case DW_OP_breg18:
2156     case DW_OP_breg19:
2157     case DW_OP_breg20:
2158     case DW_OP_breg21:
2159     case DW_OP_breg22:
2160     case DW_OP_breg23:
2161     case DW_OP_breg24:
2162     case DW_OP_breg25:
2163     case DW_OP_breg26:
2164     case DW_OP_breg27:
2165     case DW_OP_breg28:
2166     case DW_OP_breg29:
2167     case DW_OP_breg30:
2168     case DW_OP_breg31:
2169       dw2_asm_output_data_sleb128 (val1->v.val_int, NULL);
2170       break;
2171     case DW_OP_regx:
2172       {
2173 	unsigned r = val1->v.val_unsigned;
2174 	if (for_eh_or_skip >= 0)
2175 	  r = DWARF2_FRAME_REG_OUT (r, for_eh_or_skip);
2176 	gcc_assert (size_of_uleb128 (r)
2177 		    == size_of_uleb128 (val1->v.val_unsigned));
2178 	dw2_asm_output_data_uleb128 (r, NULL);
2179       }
2180       break;
2181     case DW_OP_fbreg:
2182       dw2_asm_output_data_sleb128 (val1->v.val_int, NULL);
2183       break;
2184     case DW_OP_bregx:
2185       {
2186 	unsigned r = val1->v.val_unsigned;
2187 	if (for_eh_or_skip >= 0)
2188 	  r = DWARF2_FRAME_REG_OUT (r, for_eh_or_skip);
2189 	gcc_assert (size_of_uleb128 (r)
2190 		    == size_of_uleb128 (val1->v.val_unsigned));
2191 	dw2_asm_output_data_uleb128 (r, NULL);
2192 	dw2_asm_output_data_sleb128 (val2->v.val_int, NULL);
2193       }
2194       break;
2195     case DW_OP_piece:
2196       dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
2197       break;
2198     case DW_OP_bit_piece:
2199       dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
2200       dw2_asm_output_data_uleb128 (val2->v.val_unsigned, NULL);
2201       break;
2202     case DW_OP_deref_size:
2203     case DW_OP_xderef_size:
2204       dw2_asm_output_data (1, val1->v.val_int, NULL);
2205       break;
2206 
2207     case DW_OP_addr:
2208       if (loc->dtprel)
2209 	{
2210 	  if (targetm.asm_out.output_dwarf_dtprel)
2211 	    {
2212 	      targetm.asm_out.output_dwarf_dtprel (asm_out_file,
2213 						   DWARF2_ADDR_SIZE,
2214 						   val1->v.val_addr);
2215 	      fputc ('\n', asm_out_file);
2216 	    }
2217 	  else
2218 	    gcc_unreachable ();
2219 	}
2220       else
2221 	{
2222 #ifdef DWARF2_DEBUGGING_INFO
2223 	  dw2_asm_output_addr_rtx (DWARF2_ADDR_SIZE, val1->v.val_addr, NULL);
2224 #else
2225 	  gcc_unreachable ();
2226 #endif
2227 	}
2228       break;
2229 
2230     case DW_OP_GNU_implicit_pointer:
2231       {
2232 	char label[MAX_ARTIFICIAL_LABEL_BYTES
2233 		   + HOST_BITS_PER_WIDE_INT / 2 + 2];
2234 	gcc_assert (val1->val_class == dw_val_class_die_ref);
2235 	get_ref_die_offset_label (label, val1->v.val_die_ref.die);
2236 	dw2_asm_output_offset (DWARF_REF_SIZE, label, debug_info_section, NULL);
2237 	dw2_asm_output_data_sleb128 (val2->v.val_int, NULL);
2238       }
2239       break;
2240 
2241     case DW_OP_GNU_entry_value:
2242       dw2_asm_output_data_uleb128 (size_of_locs (val1->v.val_loc), NULL);
2243       output_loc_sequence (val1->v.val_loc, for_eh_or_skip);
2244       break;
2245 
2246     case DW_OP_GNU_const_type:
2247       {
2248 	unsigned long o = get_base_type_offset (val1->v.val_die_ref.die), l;
2249 	gcc_assert (o);
2250 	dw2_asm_output_data_uleb128 (o, NULL);
2251 	switch (val2->val_class)
2252 	  {
2253 	  case dw_val_class_const:
2254 	    l = HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR;
2255 	    dw2_asm_output_data (1, l, NULL);
2256 	    dw2_asm_output_data (l, val2->v.val_int, NULL);
2257 	    break;
2258 	  case dw_val_class_vec:
2259 	    {
2260 	      unsigned int elt_size = val2->v.val_vec.elt_size;
2261 	      unsigned int len = val2->v.val_vec.length;
2262 	      unsigned int i;
2263 	      unsigned char *p;
2264 
2265 	      l = len * elt_size;
2266 	      dw2_asm_output_data (1, l, NULL);
2267 	      if (elt_size > sizeof (HOST_WIDE_INT))
2268 		{
2269 		  elt_size /= 2;
2270 		  len *= 2;
2271 		}
2272 	      for (i = 0, p = val2->v.val_vec.array;
2273 		   i < len;
2274 		   i++, p += elt_size)
2275 		dw2_asm_output_data (elt_size, extract_int (p, elt_size),
2276 				     "fp or vector constant word %u", i);
2277 	    }
2278 	    break;
2279 	  case dw_val_class_const_double:
2280 	    {
2281 	      unsigned HOST_WIDE_INT first, second;
2282 	      l = HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR;
2283 
2284 	      dw2_asm_output_data (1, 2 * l, NULL);
2285 	      if (WORDS_BIG_ENDIAN)
2286 		{
2287 		  first = val2->v.val_double.high;
2288 		  second = val2->v.val_double.low;
2289 		}
2290 	      else
2291 		{
2292 		  first = val2->v.val_double.low;
2293 		  second = val2->v.val_double.high;
2294 		}
2295 	      dw2_asm_output_data (l, first, NULL);
2296 	      dw2_asm_output_data (l, second, NULL);
2297 	    }
2298 	    break;
2299 	  default:
2300 	    gcc_unreachable ();
2301 	  }
2302       }
2303       break;
2304     case DW_OP_GNU_regval_type:
2305       {
2306 	unsigned r = val1->v.val_unsigned;
2307 	unsigned long o = get_base_type_offset (val2->v.val_die_ref.die);
2308 	gcc_assert (o);
2309 	if (for_eh_or_skip >= 0)
2310 	  {
2311 	    r = DWARF2_FRAME_REG_OUT (r, for_eh_or_skip);
2312 	    gcc_assert (size_of_uleb128 (r)
2313 			== size_of_uleb128 (val1->v.val_unsigned));
2314 	  }
2315 	dw2_asm_output_data_uleb128 (r, NULL);
2316 	dw2_asm_output_data_uleb128 (o, NULL);
2317       }
2318       break;
2319     case DW_OP_GNU_deref_type:
2320       {
2321 	unsigned long o = get_base_type_offset (val2->v.val_die_ref.die);
2322 	gcc_assert (o);
2323 	dw2_asm_output_data (1, val1->v.val_int, NULL);
2324 	dw2_asm_output_data_uleb128 (o, NULL);
2325       }
2326       break;
2327     case DW_OP_GNU_convert:
2328     case DW_OP_GNU_reinterpret:
2329       if (loc->dw_loc_oprnd1.val_class == dw_val_class_unsigned_const)
2330 	dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
2331       else
2332 	{
2333 	  unsigned long o = get_base_type_offset (val1->v.val_die_ref.die);
2334 	  gcc_assert (o);
2335 	  dw2_asm_output_data_uleb128 (o, NULL);
2336 	}
2337       break;
2338 
2339     case DW_OP_GNU_parameter_ref:
2340       {
2341 	unsigned long o;
2342 	gcc_assert (val1->val_class == dw_val_class_die_ref);
2343 	o = get_ref_die_offset (val1->v.val_die_ref.die);
2344 	dw2_asm_output_data (4, o, NULL);
2345       }
2346       break;
2347 
2348     default:
2349       /* Other codes have no operands.  */
2350       break;
2351     }
2352 }
2353 
2354 /* Output a sequence of location operations.
2355    The for_eh_or_skip parameter controls whether register numbers are
2356    converted using DWARF2_FRAME_REG_OUT, which is needed in the case that
2357    hard reg numbers have been processed via DWARF_FRAME_REGNUM (i.e. for unwind
2358    info).  This should be suppressed for the cases that have not been converted
2359    (i.e. symbolic debug info), by setting the parameter < 0.  See PR47324.  */
2360 
2361 void
2362 output_loc_sequence (dw_loc_descr_ref loc, int for_eh_or_skip)
2363 {
2364   for (; loc != NULL; loc = loc->dw_loc_next)
2365     {
2366       enum dwarf_location_atom opc = loc->dw_loc_opc;
2367       /* Output the opcode.  */
2368       if (for_eh_or_skip >= 0
2369           && opc >= DW_OP_breg0 && opc <= DW_OP_breg31)
2370 	{
2371 	  unsigned r = (opc - DW_OP_breg0);
2372 	  r = DWARF2_FRAME_REG_OUT (r, for_eh_or_skip);
2373 	  gcc_assert (r <= 31);
2374 	  opc = (enum dwarf_location_atom) (DW_OP_breg0 + r);
2375 	}
2376       else if (for_eh_or_skip >= 0
2377 	       && opc >= DW_OP_reg0 && opc <= DW_OP_reg31)
2378 	{
2379 	  unsigned r = (opc - DW_OP_reg0);
2380 	  r = DWARF2_FRAME_REG_OUT (r, for_eh_or_skip);
2381 	  gcc_assert (r <= 31);
2382 	  opc = (enum dwarf_location_atom) (DW_OP_reg0 + r);
2383 	}
2384 
2385       dw2_asm_output_data (1, opc,
2386 			     "%s", dwarf_stack_op_name (opc));
2387 
2388       /* Output the operand(s) (if any).  */
2389       output_loc_operands (loc, for_eh_or_skip);
2390     }
2391 }
2392 
2393 /* Output location description stack opcode's operands (if any).
2394    The output is single bytes on a line, suitable for .cfi_escape.  */
2395 
2396 static void
2397 output_loc_operands_raw (dw_loc_descr_ref loc)
2398 {
2399   dw_val_ref val1 = &loc->dw_loc_oprnd1;
2400   dw_val_ref val2 = &loc->dw_loc_oprnd2;
2401 
2402   switch (loc->dw_loc_opc)
2403     {
2404     case DW_OP_addr:
2405     case DW_OP_implicit_value:
2406       /* We cannot output addresses in .cfi_escape, only bytes.  */
2407       gcc_unreachable ();
2408 
2409     case DW_OP_const1u:
2410     case DW_OP_const1s:
2411     case DW_OP_pick:
2412     case DW_OP_deref_size:
2413     case DW_OP_xderef_size:
2414       fputc (',', asm_out_file);
2415       dw2_asm_output_data_raw (1, val1->v.val_int);
2416       break;
2417 
2418     case DW_OP_const2u:
2419     case DW_OP_const2s:
2420       fputc (',', asm_out_file);
2421       dw2_asm_output_data_raw (2, val1->v.val_int);
2422       break;
2423 
2424     case DW_OP_const4u:
2425     case DW_OP_const4s:
2426       fputc (',', asm_out_file);
2427       dw2_asm_output_data_raw (4, val1->v.val_int);
2428       break;
2429 
2430     case DW_OP_const8u:
2431     case DW_OP_const8s:
2432       gcc_assert (HOST_BITS_PER_WIDE_INT >= 64);
2433       fputc (',', asm_out_file);
2434       dw2_asm_output_data_raw (8, val1->v.val_int);
2435       break;
2436 
2437     case DW_OP_skip:
2438     case DW_OP_bra:
2439       {
2440 	int offset;
2441 
2442 	gcc_assert (val1->val_class == dw_val_class_loc);
2443 	offset = val1->v.val_loc->dw_loc_addr - (loc->dw_loc_addr + 3);
2444 
2445         fputc (',', asm_out_file);
2446 	dw2_asm_output_data_raw (2, offset);
2447       }
2448       break;
2449 
2450     case DW_OP_regx:
2451       {
2452 	unsigned r = DWARF2_FRAME_REG_OUT (val1->v.val_unsigned, 1);
2453 	gcc_assert (size_of_uleb128 (r)
2454 		    == size_of_uleb128 (val1->v.val_unsigned));
2455 	fputc (',', asm_out_file);
2456 	dw2_asm_output_data_uleb128_raw (r);
2457       }
2458       break;
2459 
2460     case DW_OP_constu:
2461     case DW_OP_plus_uconst:
2462     case DW_OP_piece:
2463       fputc (',', asm_out_file);
2464       dw2_asm_output_data_uleb128_raw (val1->v.val_unsigned);
2465       break;
2466 
2467     case DW_OP_bit_piece:
2468       fputc (',', asm_out_file);
2469       dw2_asm_output_data_uleb128_raw (val1->v.val_unsigned);
2470       dw2_asm_output_data_uleb128_raw (val2->v.val_unsigned);
2471       break;
2472 
2473     case DW_OP_consts:
2474     case DW_OP_breg0:
2475     case DW_OP_breg1:
2476     case DW_OP_breg2:
2477     case DW_OP_breg3:
2478     case DW_OP_breg4:
2479     case DW_OP_breg5:
2480     case DW_OP_breg6:
2481     case DW_OP_breg7:
2482     case DW_OP_breg8:
2483     case DW_OP_breg9:
2484     case DW_OP_breg10:
2485     case DW_OP_breg11:
2486     case DW_OP_breg12:
2487     case DW_OP_breg13:
2488     case DW_OP_breg14:
2489     case DW_OP_breg15:
2490     case DW_OP_breg16:
2491     case DW_OP_breg17:
2492     case DW_OP_breg18:
2493     case DW_OP_breg19:
2494     case DW_OP_breg20:
2495     case DW_OP_breg21:
2496     case DW_OP_breg22:
2497     case DW_OP_breg23:
2498     case DW_OP_breg24:
2499     case DW_OP_breg25:
2500     case DW_OP_breg26:
2501     case DW_OP_breg27:
2502     case DW_OP_breg28:
2503     case DW_OP_breg29:
2504     case DW_OP_breg30:
2505     case DW_OP_breg31:
2506     case DW_OP_fbreg:
2507       fputc (',', asm_out_file);
2508       dw2_asm_output_data_sleb128_raw (val1->v.val_int);
2509       break;
2510 
2511     case DW_OP_bregx:
2512       {
2513 	unsigned r = DWARF2_FRAME_REG_OUT (val1->v.val_unsigned, 1);
2514 	gcc_assert (size_of_uleb128 (r)
2515 		    == size_of_uleb128 (val1->v.val_unsigned));
2516 	fputc (',', asm_out_file);
2517 	dw2_asm_output_data_uleb128_raw (r);
2518 	fputc (',', asm_out_file);
2519 	dw2_asm_output_data_sleb128_raw (val2->v.val_int);
2520       }
2521       break;
2522 
2523     case DW_OP_GNU_implicit_pointer:
2524     case DW_OP_GNU_entry_value:
2525     case DW_OP_GNU_const_type:
2526     case DW_OP_GNU_regval_type:
2527     case DW_OP_GNU_deref_type:
2528     case DW_OP_GNU_convert:
2529     case DW_OP_GNU_reinterpret:
2530     case DW_OP_GNU_parameter_ref:
2531       gcc_unreachable ();
2532       break;
2533 
2534     default:
2535       /* Other codes have no operands.  */
2536       break;
2537     }
2538 }
2539 
2540 void
2541 output_loc_sequence_raw (dw_loc_descr_ref loc)
2542 {
2543   while (1)
2544     {
2545       enum dwarf_location_atom opc = loc->dw_loc_opc;
2546       /* Output the opcode.  */
2547       if (opc >= DW_OP_breg0 && opc <= DW_OP_breg31)
2548 	{
2549 	  unsigned r = (opc - DW_OP_breg0);
2550 	  r = DWARF2_FRAME_REG_OUT (r, 1);
2551 	  gcc_assert (r <= 31);
2552 	  opc = (enum dwarf_location_atom) (DW_OP_breg0 + r);
2553 	}
2554       else if (opc >= DW_OP_reg0 && opc <= DW_OP_reg31)
2555 	{
2556 	  unsigned r = (opc - DW_OP_reg0);
2557 	  r = DWARF2_FRAME_REG_OUT (r, 1);
2558 	  gcc_assert (r <= 31);
2559 	  opc = (enum dwarf_location_atom) (DW_OP_reg0 + r);
2560 	}
2561       /* Output the opcode.  */
2562       fprintf (asm_out_file, "%#x", opc);
2563       output_loc_operands_raw (loc);
2564 
2565       if (!loc->dw_loc_next)
2566 	break;
2567       loc = loc->dw_loc_next;
2568 
2569       fputc (',', asm_out_file);
2570     }
2571 }
2572 
2573 /* This function builds a dwarf location descriptor sequence from a
2574    dw_cfa_location, adding the given OFFSET to the result of the
2575    expression.  */
2576 
2577 struct dw_loc_descr_struct *
2578 build_cfa_loc (dw_cfa_location *cfa, HOST_WIDE_INT offset)
2579 {
2580   struct dw_loc_descr_struct *head, *tmp;
2581 
2582   offset += cfa->offset;
2583 
2584   if (cfa->indirect)
2585     {
2586       head = new_reg_loc_descr (cfa->reg, cfa->base_offset);
2587       head->dw_loc_oprnd1.val_class = dw_val_class_const;
2588       tmp = new_loc_descr (DW_OP_deref, 0, 0);
2589       add_loc_descr (&head, tmp);
2590       if (offset != 0)
2591 	{
2592 	  tmp = new_loc_descr (DW_OP_plus_uconst, offset, 0);
2593 	  add_loc_descr (&head, tmp);
2594 	}
2595     }
2596   else
2597     head = new_reg_loc_descr (cfa->reg, offset);
2598 
2599   return head;
2600 }
2601 
2602 /* This function builds a dwarf location descriptor sequence for
2603    the address at OFFSET from the CFA when stack is aligned to
2604    ALIGNMENT byte.  */
2605 
2606 struct dw_loc_descr_struct *
2607 build_cfa_aligned_loc (dw_cfa_location *cfa,
2608 		       HOST_WIDE_INT offset, HOST_WIDE_INT alignment)
2609 {
2610   struct dw_loc_descr_struct *head;
2611   unsigned int dwarf_fp
2612     = DWARF_FRAME_REGNUM (HARD_FRAME_POINTER_REGNUM);
2613 
2614   /* When CFA is defined as FP+OFFSET, emulate stack alignment.  */
2615   if (cfa->reg == HARD_FRAME_POINTER_REGNUM && cfa->indirect == 0)
2616     {
2617       head = new_reg_loc_descr (dwarf_fp, 0);
2618       add_loc_descr (&head, int_loc_descriptor (alignment));
2619       add_loc_descr (&head, new_loc_descr (DW_OP_and, 0, 0));
2620       loc_descr_plus_const (&head, offset);
2621     }
2622   else
2623     head = new_reg_loc_descr (dwarf_fp, offset);
2624   return head;
2625 }
2626 
2627 /* And now, the support for symbolic debugging information.  */
2628 
2629 /* .debug_str support.  */
2630 static int output_indirect_string (void **, void *);
2631 
2632 static void dwarf2out_init (const char *);
2633 static void dwarf2out_finish (const char *);
2634 static void dwarf2out_assembly_start (void);
2635 static void dwarf2out_define (unsigned int, const char *);
2636 static void dwarf2out_undef (unsigned int, const char *);
2637 static void dwarf2out_start_source_file (unsigned, const char *);
2638 static void dwarf2out_end_source_file (unsigned);
2639 static void dwarf2out_function_decl (tree);
2640 static void dwarf2out_begin_block (unsigned, unsigned);
2641 static void dwarf2out_end_block (unsigned, unsigned);
2642 static bool dwarf2out_ignore_block (const_tree);
2643 static void dwarf2out_global_decl (tree);
2644 static void dwarf2out_type_decl (tree, int);
2645 static void dwarf2out_imported_module_or_decl (tree, tree, tree, bool);
2646 static void dwarf2out_imported_module_or_decl_1 (tree, tree, tree,
2647 						 dw_die_ref);
2648 static void dwarf2out_abstract_function (tree);
2649 static void dwarf2out_var_location (rtx);
2650 static void dwarf2out_begin_function (tree);
2651 static void dwarf2out_set_name (tree, tree);
2652 
2653 /* The debug hooks structure.  */
2654 
2655 const struct gcc_debug_hooks dwarf2_debug_hooks =
2656 {
2657   dwarf2out_init,
2658   dwarf2out_finish,
2659   dwarf2out_assembly_start,
2660   dwarf2out_define,
2661   dwarf2out_undef,
2662   dwarf2out_start_source_file,
2663   dwarf2out_end_source_file,
2664   dwarf2out_begin_block,
2665   dwarf2out_end_block,
2666   dwarf2out_ignore_block,
2667   dwarf2out_source_line,
2668   dwarf2out_begin_prologue,
2669 #if VMS_DEBUGGING_INFO
2670   dwarf2out_vms_end_prologue,
2671   dwarf2out_vms_begin_epilogue,
2672 #else
2673   debug_nothing_int_charstar,
2674   debug_nothing_int_charstar,
2675 #endif
2676   dwarf2out_end_epilogue,
2677   dwarf2out_begin_function,
2678   debug_nothing_int,		/* end_function */
2679   dwarf2out_function_decl,	/* function_decl */
2680   dwarf2out_global_decl,
2681   dwarf2out_type_decl,		/* type_decl */
2682   dwarf2out_imported_module_or_decl,
2683   debug_nothing_tree,		/* deferred_inline_function */
2684   /* The DWARF 2 backend tries to reduce debugging bloat by not
2685      emitting the abstract description of inline functions until
2686      something tries to reference them.  */
2687   dwarf2out_abstract_function,	/* outlining_inline_function */
2688   debug_nothing_rtx,		/* label */
2689   debug_nothing_int,		/* handle_pch */
2690   dwarf2out_var_location,
2691   dwarf2out_switch_text_section,
2692   dwarf2out_set_name,
2693   1,                            /* start_end_main_source_file */
2694   TYPE_SYMTAB_IS_DIE            /* tree_type_symtab_field */
2695 };
2696 
2697 /* NOTE: In the comments in this file, many references are made to
2698    "Debugging Information Entries".  This term is abbreviated as `DIE'
2699    throughout the remainder of this file.  */
2700 
2701 /* An internal representation of the DWARF output is built, and then
2702    walked to generate the DWARF debugging info.  The walk of the internal
2703    representation is done after the entire program has been compiled.
2704    The types below are used to describe the internal representation.  */
2705 
2706 /* Whether to put type DIEs into their own section .debug_types instead
2707    of making them part of the .debug_info section.  Only supported for
2708    Dwarf V4 or higher and the user didn't disable them through
2709    -fno-debug-types-section.  It is more efficient to put them in a
2710    separate comdat sections since the linker will then be able to
2711    remove duplicates.  But not all tools support .debug_types sections
2712    yet.  */
2713 
2714 #define use_debug_types (dwarf_version >= 4 && flag_debug_types_section)
2715 
2716 /* Various DIE's use offsets relative to the beginning of the
2717    .debug_info section to refer to each other.  */
2718 
2719 typedef long int dw_offset;
2720 
2721 /* Define typedefs here to avoid circular dependencies.  */
2722 
2723 typedef struct dw_attr_struct *dw_attr_ref;
2724 typedef struct dw_line_info_struct *dw_line_info_ref;
2725 typedef struct pubname_struct *pubname_ref;
2726 typedef struct dw_ranges_struct *dw_ranges_ref;
2727 typedef struct dw_ranges_by_label_struct *dw_ranges_by_label_ref;
2728 typedef struct comdat_type_struct *comdat_type_node_ref;
2729 
2730 /* The entries in the line_info table more-or-less mirror the opcodes
2731    that are used in the real dwarf line table.  Arrays of these entries
2732    are collected per section when DWARF2_ASM_LINE_DEBUG_INFO is not
2733    supported.  */
2734 
2735 enum dw_line_info_opcode {
2736   /* Emit DW_LNE_set_address; the operand is the label index.  */
2737   LI_set_address,
2738 
2739   /* Emit a row to the matrix with the given line.  This may be done
2740      via any combination of DW_LNS_copy, DW_LNS_advance_line, and
2741      special opcodes.  */
2742   LI_set_line,
2743 
2744   /* Emit a DW_LNS_set_file.  */
2745   LI_set_file,
2746 
2747   /* Emit a DW_LNS_set_column.  */
2748   LI_set_column,
2749 
2750   /* Emit a DW_LNS_negate_stmt; the operand is ignored.  */
2751   LI_negate_stmt,
2752 
2753   /* Emit a DW_LNS_set_prologue_end/epilogue_begin; the operand is ignored.  */
2754   LI_set_prologue_end,
2755   LI_set_epilogue_begin,
2756 
2757   /* Emit a DW_LNE_set_discriminator.  */
2758   LI_set_discriminator
2759 };
2760 
2761 typedef struct GTY(()) dw_line_info_struct {
2762   enum dw_line_info_opcode opcode;
2763   unsigned int val;
2764 } dw_line_info_entry;
2765 
2766 DEF_VEC_O(dw_line_info_entry);
2767 DEF_VEC_ALLOC_O(dw_line_info_entry, gc);
2768 
2769 typedef struct GTY(()) dw_line_info_table_struct {
2770   /* The label that marks the end of this section.  */
2771   const char *end_label;
2772 
2773   /* The values for the last row of the matrix, as collected in the table.
2774      These are used to minimize the changes to the next row.  */
2775   unsigned int file_num;
2776   unsigned int line_num;
2777   unsigned int column_num;
2778   int discrim_num;
2779   bool is_stmt;
2780   bool in_use;
2781 
2782   VEC(dw_line_info_entry, gc) *entries;
2783 } dw_line_info_table;
2784 
2785 typedef dw_line_info_table *dw_line_info_table_p;
2786 
2787 DEF_VEC_P(dw_line_info_table_p);
2788 DEF_VEC_ALLOC_P(dw_line_info_table_p, gc);
2789 
2790 /* Each DIE attribute has a field specifying the attribute kind,
2791    a link to the next attribute in the chain, and an attribute value.
2792    Attributes are typically linked below the DIE they modify.  */
2793 
2794 typedef struct GTY(()) dw_attr_struct {
2795   enum dwarf_attribute dw_attr;
2796   dw_val_node dw_attr_val;
2797 }
2798 dw_attr_node;
2799 
2800 DEF_VEC_O(dw_attr_node);
2801 DEF_VEC_ALLOC_O(dw_attr_node,gc);
2802 
2803 /* The Debugging Information Entry (DIE) structure.  DIEs form a tree.
2804    The children of each node form a circular list linked by
2805    die_sib.  die_child points to the node *before* the "first" child node.  */
2806 
2807 typedef struct GTY((chain_circular ("%h.die_sib"))) die_struct {
2808   union die_symbol_or_type_node
2809     {
2810       char * GTY ((tag ("0"))) die_symbol;
2811       comdat_type_node_ref GTY ((tag ("1"))) die_type_node;
2812     }
2813   GTY ((desc ("use_debug_types"))) die_id;
2814   VEC(dw_attr_node,gc) * die_attr;
2815   dw_die_ref die_parent;
2816   dw_die_ref die_child;
2817   dw_die_ref die_sib;
2818   dw_die_ref die_definition; /* ref from a specification to its definition */
2819   dw_offset die_offset;
2820   unsigned long die_abbrev;
2821   int die_mark;
2822   /* Die is used and must not be pruned as unused.  */
2823   int die_perennial_p;
2824   unsigned int decl_id;
2825   enum dwarf_tag die_tag;
2826 }
2827 die_node;
2828 
2829 /* Evaluate 'expr' while 'c' is set to each child of DIE in order.  */
2830 #define FOR_EACH_CHILD(die, c, expr) do {	\
2831   c = die->die_child;				\
2832   if (c) do {					\
2833     c = c->die_sib;				\
2834     expr;					\
2835   } while (c != die->die_child);		\
2836 } while (0)
2837 
2838 /* The pubname structure */
2839 
2840 typedef struct GTY(()) pubname_struct {
2841   dw_die_ref die;
2842   const char *name;
2843 }
2844 pubname_entry;
2845 
2846 DEF_VEC_O(pubname_entry);
2847 DEF_VEC_ALLOC_O(pubname_entry, gc);
2848 
2849 struct GTY(()) dw_ranges_struct {
2850   /* If this is positive, it's a block number, otherwise it's a
2851      bitwise-negated index into dw_ranges_by_label.  */
2852   int num;
2853 };
2854 
2855 /* A structure to hold a macinfo entry.  */
2856 
2857 typedef struct GTY(()) macinfo_struct {
2858   unsigned char code;
2859   unsigned HOST_WIDE_INT lineno;
2860   const char *info;
2861 }
2862 macinfo_entry;
2863 
2864 DEF_VEC_O(macinfo_entry);
2865 DEF_VEC_ALLOC_O(macinfo_entry, gc);
2866 
2867 struct GTY(()) dw_ranges_by_label_struct {
2868   const char *begin;
2869   const char *end;
2870 };
2871 
2872 /* The comdat type node structure.  */
2873 typedef struct GTY(()) comdat_type_struct
2874 {
2875   dw_die_ref root_die;
2876   dw_die_ref type_die;
2877   char signature[DWARF_TYPE_SIGNATURE_SIZE];
2878   struct comdat_type_struct *next;
2879 }
2880 comdat_type_node;
2881 
2882 /* The limbo die list structure.  */
2883 typedef struct GTY(()) limbo_die_struct {
2884   dw_die_ref die;
2885   tree created_for;
2886   struct limbo_die_struct *next;
2887 }
2888 limbo_die_node;
2889 
2890 typedef struct skeleton_chain_struct
2891 {
2892   dw_die_ref old_die;
2893   dw_die_ref new_die;
2894   struct skeleton_chain_struct *parent;
2895 }
2896 skeleton_chain_node;
2897 
2898 /* Define a macro which returns nonzero for a TYPE_DECL which was
2899    implicitly generated for a type.
2900 
2901    Note that, unlike the C front-end (which generates a NULL named
2902    TYPE_DECL node for each complete tagged type, each array type,
2903    and each function type node created) the C++ front-end generates
2904    a _named_ TYPE_DECL node for each tagged type node created.
2905    These TYPE_DECLs have DECL_ARTIFICIAL set, so we know not to
2906    generate a DW_TAG_typedef DIE for them.  Likewise with the Ada
2907    front-end, but for each type, tagged or not.  */
2908 
2909 #define TYPE_DECL_IS_STUB(decl)				\
2910   (DECL_NAME (decl) == NULL_TREE			\
2911    || (DECL_ARTIFICIAL (decl)				\
2912        && ((decl == TYPE_STUB_DECL (TREE_TYPE (decl)))	\
2913 	   /* This is necessary for stub decls that	\
2914 	      appear in nested inline functions.  */	\
2915 	   || (DECL_ABSTRACT_ORIGIN (decl) != NULL_TREE	\
2916 	       && (decl_ultimate_origin (decl)		\
2917 		   == TYPE_STUB_DECL (TREE_TYPE (decl)))))))
2918 
2919 /* Information concerning the compilation unit's programming
2920    language, and compiler version.  */
2921 
2922 /* Fixed size portion of the DWARF compilation unit header.  */
2923 #define DWARF_COMPILE_UNIT_HEADER_SIZE \
2924   (DWARF_INITIAL_LENGTH_SIZE + DWARF_OFFSET_SIZE + 3)
2925 
2926 /* Fixed size portion of the DWARF comdat type unit header.  */
2927 #define DWARF_COMDAT_TYPE_UNIT_HEADER_SIZE \
2928   (DWARF_COMPILE_UNIT_HEADER_SIZE + DWARF_TYPE_SIGNATURE_SIZE \
2929    + DWARF_OFFSET_SIZE)
2930 
2931 /* Fixed size portion of public names info.  */
2932 #define DWARF_PUBNAMES_HEADER_SIZE (2 * DWARF_OFFSET_SIZE + 2)
2933 
2934 /* Fixed size portion of the address range info.  */
2935 #define DWARF_ARANGES_HEADER_SIZE					\
2936   (DWARF_ROUND (DWARF_INITIAL_LENGTH_SIZE + DWARF_OFFSET_SIZE + 4,	\
2937 		DWARF2_ADDR_SIZE * 2)					\
2938    - DWARF_INITIAL_LENGTH_SIZE)
2939 
2940 /* Size of padding portion in the address range info.  It must be
2941    aligned to twice the pointer size.  */
2942 #define DWARF_ARANGES_PAD_SIZE \
2943   (DWARF_ROUND (DWARF_INITIAL_LENGTH_SIZE + DWARF_OFFSET_SIZE + 4, \
2944 		DWARF2_ADDR_SIZE * 2)				   \
2945    - (DWARF_INITIAL_LENGTH_SIZE + DWARF_OFFSET_SIZE + 4))
2946 
2947 /* Use assembler line directives if available.  */
2948 #ifndef DWARF2_ASM_LINE_DEBUG_INFO
2949 #ifdef HAVE_AS_DWARF2_DEBUG_LINE
2950 #define DWARF2_ASM_LINE_DEBUG_INFO 1
2951 #else
2952 #define DWARF2_ASM_LINE_DEBUG_INFO 0
2953 #endif
2954 #endif
2955 
2956 /* Minimum line offset in a special line info. opcode.
2957    This value was chosen to give a reasonable range of values.  */
2958 #define DWARF_LINE_BASE  -10
2959 
2960 /* First special line opcode - leave room for the standard opcodes.  */
2961 #define DWARF_LINE_OPCODE_BASE  ((int)DW_LNS_set_isa + 1)
2962 
2963 /* Range of line offsets in a special line info. opcode.  */
2964 #define DWARF_LINE_RANGE  (254-DWARF_LINE_OPCODE_BASE+1)
2965 
2966 /* Flag that indicates the initial value of the is_stmt_start flag.
2967    In the present implementation, we do not mark any lines as
2968    the beginning of a source statement, because that information
2969    is not made available by the GCC front-end.  */
2970 #define	DWARF_LINE_DEFAULT_IS_STMT_START 1
2971 
2972 /* Maximum number of operations per instruction bundle.  */
2973 #ifndef DWARF_LINE_DEFAULT_MAX_OPS_PER_INSN
2974 #define DWARF_LINE_DEFAULT_MAX_OPS_PER_INSN 1
2975 #endif
2976 
2977 /* This location is used by calc_die_sizes() to keep track
2978    the offset of each DIE within the .debug_info section.  */
2979 static unsigned long next_die_offset;
2980 
2981 /* Record the root of the DIE's built for the current compilation unit.  */
2982 static GTY(()) dw_die_ref single_comp_unit_die;
2983 
2984 /* A list of type DIEs that have been separated into comdat sections.  */
2985 static GTY(()) comdat_type_node *comdat_type_list;
2986 
2987 /* A list of DIEs with a NULL parent waiting to be relocated.  */
2988 static GTY(()) limbo_die_node *limbo_die_list;
2989 
2990 /* A list of DIEs for which we may have to generate
2991    DW_AT_{,MIPS_}linkage_name once their DECL_ASSEMBLER_NAMEs are set.  */
2992 static GTY(()) limbo_die_node *deferred_asm_name;
2993 
2994 /* Filenames referenced by this compilation unit.  */
2995 static GTY((param_is (struct dwarf_file_data))) htab_t file_table;
2996 
2997 /* A hash table of references to DIE's that describe declarations.
2998    The key is a DECL_UID() which is a unique number identifying each decl.  */
2999 static GTY ((param_is (struct die_struct))) htab_t decl_die_table;
3000 
3001 /* A hash table of references to DIE's that describe COMMON blocks.
3002    The key is DECL_UID() ^ die_parent.  */
3003 static GTY ((param_is (struct die_struct))) htab_t common_block_die_table;
3004 
3005 typedef struct GTY(()) die_arg_entry_struct {
3006     dw_die_ref die;
3007     tree arg;
3008 } die_arg_entry;
3009 
3010 DEF_VEC_O(die_arg_entry);
3011 DEF_VEC_ALLOC_O(die_arg_entry,gc);
3012 
3013 /* Node of the variable location list.  */
3014 struct GTY ((chain_next ("%h.next"))) var_loc_node {
3015   /* Either NOTE_INSN_VAR_LOCATION, or, for SRA optimized variables,
3016      EXPR_LIST chain.  For small bitsizes, bitsize is encoded
3017      in mode of the EXPR_LIST node and first EXPR_LIST operand
3018      is either NOTE_INSN_VAR_LOCATION for a piece with a known
3019      location or NULL for padding.  For larger bitsizes,
3020      mode is 0 and first operand is a CONCAT with bitsize
3021      as first CONCAT operand and NOTE_INSN_VAR_LOCATION resp.
3022      NULL as second operand.  */
3023   rtx GTY (()) loc;
3024   const char * GTY (()) label;
3025   struct var_loc_node * GTY (()) next;
3026 };
3027 
3028 /* Variable location list.  */
3029 struct GTY (()) var_loc_list_def {
3030   struct var_loc_node * GTY (()) first;
3031 
3032   /* Pointer to the last but one or last element of the
3033      chained list.  If the list is empty, both first and
3034      last are NULL, if the list contains just one node
3035      or the last node certainly is not redundant, it points
3036      to the last node, otherwise points to the last but one.
3037      Do not mark it for GC because it is marked through the chain.  */
3038   struct var_loc_node * GTY ((skip ("%h"))) last;
3039 
3040   /* Pointer to the last element before section switch,
3041      if NULL, either sections weren't switched or first
3042      is after section switch.  */
3043   struct var_loc_node * GTY ((skip ("%h"))) last_before_switch;
3044 
3045   /* DECL_UID of the variable decl.  */
3046   unsigned int decl_id;
3047 };
3048 typedef struct var_loc_list_def var_loc_list;
3049 
3050 /* Call argument location list.  */
3051 struct GTY ((chain_next ("%h.next"))) call_arg_loc_node {
3052   rtx GTY (()) call_arg_loc_note;
3053   const char * GTY (()) label;
3054   tree GTY (()) block;
3055   bool tail_call_p;
3056   rtx GTY (()) symbol_ref;
3057   struct call_arg_loc_node * GTY (()) next;
3058 };
3059 
3060 
3061 /* Table of decl location linked lists.  */
3062 static GTY ((param_is (var_loc_list))) htab_t decl_loc_table;
3063 
3064 /* Head and tail of call_arg_loc chain.  */
3065 static GTY (()) struct call_arg_loc_node *call_arg_locations;
3066 static struct call_arg_loc_node *call_arg_loc_last;
3067 
3068 /* Number of call sites in the current function.  */
3069 static int call_site_count = -1;
3070 /* Number of tail call sites in the current function.  */
3071 static int tail_call_site_count = -1;
3072 
3073 /* Vector mapping block numbers to DW_TAG_{lexical_block,inlined_subroutine}
3074    DIEs.  */
3075 static VEC (dw_die_ref, heap) *block_map;
3076 
3077 /* A cached location list.  */
3078 struct GTY (()) cached_dw_loc_list_def {
3079   /* The DECL_UID of the decl that this entry describes.  */
3080   unsigned int decl_id;
3081 
3082   /* The cached location list.  */
3083   dw_loc_list_ref loc_list;
3084 };
3085 typedef struct cached_dw_loc_list_def cached_dw_loc_list;
3086 
3087 /* Table of cached location lists.  */
3088 static GTY ((param_is (cached_dw_loc_list))) htab_t cached_dw_loc_list_table;
3089 
3090 /* A pointer to the base of a list of references to DIE's that
3091    are uniquely identified by their tag, presence/absence of
3092    children DIE's, and list of attribute/value pairs.  */
3093 static GTY((length ("abbrev_die_table_allocated")))
3094   dw_die_ref *abbrev_die_table;
3095 
3096 /* Number of elements currently allocated for abbrev_die_table.  */
3097 static GTY(()) unsigned abbrev_die_table_allocated;
3098 
3099 /* Number of elements in type_die_table currently in use.  */
3100 static GTY(()) unsigned abbrev_die_table_in_use;
3101 
3102 /* Size (in elements) of increments by which we may expand the
3103    abbrev_die_table.  */
3104 #define ABBREV_DIE_TABLE_INCREMENT 256
3105 
3106 /* A global counter for generating labels for line number data.  */
3107 static unsigned int line_info_label_num;
3108 
3109 /* The current table to which we should emit line number information
3110    for the current function.  This will be set up at the beginning of
3111    assembly for the function.  */
3112 static dw_line_info_table *cur_line_info_table;
3113 
3114 /* The two default tables of line number info.  */
3115 static GTY(()) dw_line_info_table *text_section_line_info;
3116 static GTY(()) dw_line_info_table *cold_text_section_line_info;
3117 
3118 /* The set of all non-default tables of line number info.  */
3119 static GTY(()) VEC (dw_line_info_table_p, gc) *separate_line_info;
3120 
3121 /* A flag to tell pubnames/types export if there is an info section to
3122    refer to.  */
3123 static bool info_section_emitted;
3124 
3125 /* A pointer to the base of a table that contains a list of publicly
3126    accessible names.  */
3127 static GTY (()) VEC (pubname_entry, gc) *  pubname_table;
3128 
3129 /* A pointer to the base of a table that contains a list of publicly
3130    accessible types.  */
3131 static GTY (()) VEC (pubname_entry, gc) * pubtype_table;
3132 
3133 /* A pointer to the base of a table that contains a list of macro
3134    defines/undefines (and file start/end markers).  */
3135 static GTY (()) VEC (macinfo_entry, gc) * macinfo_table;
3136 
3137 /* True if .debug_macinfo or .debug_macros section is going to be
3138    emitted.  */
3139 #define have_macinfo \
3140   (debug_info_level >= DINFO_LEVEL_VERBOSE \
3141    && !VEC_empty (macinfo_entry, macinfo_table))
3142 
3143 /* Array of dies for which we should generate .debug_ranges info.  */
3144 static GTY ((length ("ranges_table_allocated"))) dw_ranges_ref ranges_table;
3145 
3146 /* Number of elements currently allocated for ranges_table.  */
3147 static GTY(()) unsigned ranges_table_allocated;
3148 
3149 /* Number of elements in ranges_table currently in use.  */
3150 static GTY(()) unsigned ranges_table_in_use;
3151 
3152 /* Array of pairs of labels referenced in ranges_table.  */
3153 static GTY ((length ("ranges_by_label_allocated")))
3154      dw_ranges_by_label_ref ranges_by_label;
3155 
3156 /* Number of elements currently allocated for ranges_by_label.  */
3157 static GTY(()) unsigned ranges_by_label_allocated;
3158 
3159 /* Number of elements in ranges_by_label currently in use.  */
3160 static GTY(()) unsigned ranges_by_label_in_use;
3161 
3162 /* Size (in elements) of increments by which we may expand the
3163    ranges_table.  */
3164 #define RANGES_TABLE_INCREMENT 64
3165 
3166 /* Whether we have location lists that need outputting */
3167 static GTY(()) bool have_location_lists;
3168 
3169 /* Unique label counter.  */
3170 static GTY(()) unsigned int loclabel_num;
3171 
3172 /* Unique label counter for point-of-call tables.  */
3173 static GTY(()) unsigned int poc_label_num;
3174 
3175 /* Record whether the function being analyzed contains inlined functions.  */
3176 static int current_function_has_inlines;
3177 
3178 /* The last file entry emitted by maybe_emit_file().  */
3179 static GTY(()) struct dwarf_file_data * last_emitted_file;
3180 
3181 /* Number of internal labels generated by gen_internal_sym().  */
3182 static GTY(()) int label_num;
3183 
3184 /* Cached result of previous call to lookup_filename.  */
3185 static GTY(()) struct dwarf_file_data * file_table_last_lookup;
3186 
3187 static GTY(()) VEC(die_arg_entry,gc) *tmpl_value_parm_die_table;
3188 
3189 /* Instances of generic types for which we need to generate debug
3190    info that describe their generic parameters and arguments. That
3191    generation needs to happen once all types are properly laid out so
3192    we do it at the end of compilation.  */
3193 static GTY(()) VEC(tree,gc) *generic_type_instances;
3194 
3195 /* Offset from the "steady-state frame pointer" to the frame base,
3196    within the current function.  */
3197 static HOST_WIDE_INT frame_pointer_fb_offset;
3198 static bool frame_pointer_fb_offset_valid;
3199 
3200 static VEC (dw_die_ref, heap) *base_types;
3201 
3202 /* Forward declarations for functions defined in this file.  */
3203 
3204 static int is_pseudo_reg (const_rtx);
3205 static tree type_main_variant (tree);
3206 static int is_tagged_type (const_tree);
3207 static const char *dwarf_tag_name (unsigned);
3208 static const char *dwarf_attr_name (unsigned);
3209 static const char *dwarf_form_name (unsigned);
3210 static tree decl_ultimate_origin (const_tree);
3211 static tree decl_class_context (tree);
3212 static void add_dwarf_attr (dw_die_ref, dw_attr_ref);
3213 static inline enum dw_val_class AT_class (dw_attr_ref);
3214 static void add_AT_flag (dw_die_ref, enum dwarf_attribute, unsigned);
3215 static inline unsigned AT_flag (dw_attr_ref);
3216 static void add_AT_int (dw_die_ref, enum dwarf_attribute, HOST_WIDE_INT);
3217 static inline HOST_WIDE_INT AT_int (dw_attr_ref);
3218 static void add_AT_unsigned (dw_die_ref, enum dwarf_attribute, unsigned HOST_WIDE_INT);
3219 static inline unsigned HOST_WIDE_INT AT_unsigned (dw_attr_ref);
3220 static void add_AT_double (dw_die_ref, enum dwarf_attribute,
3221 			   HOST_WIDE_INT, unsigned HOST_WIDE_INT);
3222 static inline void add_AT_vec (dw_die_ref, enum dwarf_attribute, unsigned int,
3223 			       unsigned int, unsigned char *);
3224 static void add_AT_data8 (dw_die_ref, enum dwarf_attribute, unsigned char *);
3225 static hashval_t debug_str_do_hash (const void *);
3226 static int debug_str_eq (const void *, const void *);
3227 static void add_AT_string (dw_die_ref, enum dwarf_attribute, const char *);
3228 static inline const char *AT_string (dw_attr_ref);
3229 static enum dwarf_form AT_string_form (dw_attr_ref);
3230 static void add_AT_die_ref (dw_die_ref, enum dwarf_attribute, dw_die_ref);
3231 static void add_AT_specification (dw_die_ref, dw_die_ref);
3232 static inline dw_die_ref AT_ref (dw_attr_ref);
3233 static inline int AT_ref_external (dw_attr_ref);
3234 static inline void set_AT_ref_external (dw_attr_ref, int);
3235 static void add_AT_fde_ref (dw_die_ref, enum dwarf_attribute, unsigned);
3236 static void add_AT_loc (dw_die_ref, enum dwarf_attribute, dw_loc_descr_ref);
3237 static inline dw_loc_descr_ref AT_loc (dw_attr_ref);
3238 static void add_AT_loc_list (dw_die_ref, enum dwarf_attribute,
3239 			     dw_loc_list_ref);
3240 static inline dw_loc_list_ref AT_loc_list (dw_attr_ref);
3241 static void add_AT_addr (dw_die_ref, enum dwarf_attribute, rtx);
3242 static inline rtx AT_addr (dw_attr_ref);
3243 static void add_AT_lbl_id (dw_die_ref, enum dwarf_attribute, const char *);
3244 static void add_AT_lineptr (dw_die_ref, enum dwarf_attribute, const char *);
3245 static void add_AT_macptr (dw_die_ref, enum dwarf_attribute, const char *);
3246 static void add_AT_offset (dw_die_ref, enum dwarf_attribute,
3247 			   unsigned HOST_WIDE_INT);
3248 static void add_AT_range_list (dw_die_ref, enum dwarf_attribute,
3249 			       unsigned long);
3250 static inline const char *AT_lbl (dw_attr_ref);
3251 static dw_attr_ref get_AT (dw_die_ref, enum dwarf_attribute);
3252 static const char *get_AT_low_pc (dw_die_ref);
3253 static const char *get_AT_hi_pc (dw_die_ref);
3254 static const char *get_AT_string (dw_die_ref, enum dwarf_attribute);
3255 static int get_AT_flag (dw_die_ref, enum dwarf_attribute);
3256 static unsigned get_AT_unsigned (dw_die_ref, enum dwarf_attribute);
3257 static inline dw_die_ref get_AT_ref (dw_die_ref, enum dwarf_attribute);
3258 static bool is_cxx (void);
3259 static bool is_fortran (void);
3260 static bool is_ada (void);
3261 static void remove_AT (dw_die_ref, enum dwarf_attribute);
3262 static void remove_child_TAG (dw_die_ref, enum dwarf_tag);
3263 static void add_child_die (dw_die_ref, dw_die_ref);
3264 static dw_die_ref new_die (enum dwarf_tag, dw_die_ref, tree);
3265 static dw_die_ref lookup_type_die (tree);
3266 static dw_die_ref strip_naming_typedef (tree, dw_die_ref);
3267 static dw_die_ref lookup_type_die_strip_naming_typedef (tree);
3268 static void equate_type_number_to_die (tree, dw_die_ref);
3269 static hashval_t decl_die_table_hash (const void *);
3270 static int decl_die_table_eq (const void *, const void *);
3271 static dw_die_ref lookup_decl_die (tree);
3272 static hashval_t common_block_die_table_hash (const void *);
3273 static int common_block_die_table_eq (const void *, const void *);
3274 static hashval_t decl_loc_table_hash (const void *);
3275 static int decl_loc_table_eq (const void *, const void *);
3276 static var_loc_list *lookup_decl_loc (const_tree);
3277 static void equate_decl_number_to_die (tree, dw_die_ref);
3278 static struct var_loc_node *add_var_loc_to_decl (tree, rtx, const char *);
3279 static void print_spaces (FILE *);
3280 static void print_die (dw_die_ref, FILE *);
3281 static dw_die_ref push_new_compile_unit (dw_die_ref, dw_die_ref);
3282 static dw_die_ref pop_compile_unit (dw_die_ref);
3283 static void loc_checksum (dw_loc_descr_ref, struct md5_ctx *);
3284 static void attr_checksum (dw_attr_ref, struct md5_ctx *, int *);
3285 static void die_checksum (dw_die_ref, struct md5_ctx *, int *);
3286 static void checksum_sleb128 (HOST_WIDE_INT, struct md5_ctx *);
3287 static void checksum_uleb128 (unsigned HOST_WIDE_INT, struct md5_ctx *);
3288 static void loc_checksum_ordered (dw_loc_descr_ref, struct md5_ctx *);
3289 static void attr_checksum_ordered (enum dwarf_tag, dw_attr_ref,
3290 				   struct md5_ctx *, int *);
3291 struct checksum_attributes;
3292 static void collect_checksum_attributes (struct checksum_attributes *, dw_die_ref);
3293 static void die_checksum_ordered (dw_die_ref, struct md5_ctx *, int *);
3294 static void checksum_die_context (dw_die_ref, struct md5_ctx *);
3295 static void generate_type_signature (dw_die_ref, comdat_type_node *);
3296 static int same_loc_p (dw_loc_descr_ref, dw_loc_descr_ref, int *);
3297 static int same_dw_val_p (const dw_val_node *, const dw_val_node *, int *);
3298 static int same_attr_p (dw_attr_ref, dw_attr_ref, int *);
3299 static int same_die_p (dw_die_ref, dw_die_ref, int *);
3300 static int same_die_p_wrap (dw_die_ref, dw_die_ref);
3301 static void compute_section_prefix (dw_die_ref);
3302 static int is_type_die (dw_die_ref);
3303 static int is_comdat_die (dw_die_ref);
3304 static int is_symbol_die (dw_die_ref);
3305 static void assign_symbol_names (dw_die_ref);
3306 static void break_out_includes (dw_die_ref);
3307 static int is_declaration_die (dw_die_ref);
3308 static int should_move_die_to_comdat (dw_die_ref);
3309 static dw_die_ref clone_as_declaration (dw_die_ref);
3310 static dw_die_ref clone_die (dw_die_ref);
3311 static dw_die_ref clone_tree (dw_die_ref);
3312 static dw_die_ref copy_declaration_context (dw_die_ref, dw_die_ref);
3313 static void generate_skeleton_ancestor_tree (skeleton_chain_node *);
3314 static void generate_skeleton_bottom_up (skeleton_chain_node *);
3315 static dw_die_ref generate_skeleton (dw_die_ref);
3316 static dw_die_ref remove_child_or_replace_with_skeleton (dw_die_ref,
3317                                                          dw_die_ref,
3318                                                          dw_die_ref);
3319 static void break_out_comdat_types (dw_die_ref);
3320 static dw_die_ref copy_ancestor_tree (dw_die_ref, dw_die_ref, htab_t);
3321 static void copy_decls_walk (dw_die_ref, dw_die_ref, htab_t);
3322 static void copy_decls_for_unworthy_types (dw_die_ref);
3323 
3324 static hashval_t htab_cu_hash (const void *);
3325 static int htab_cu_eq (const void *, const void *);
3326 static void htab_cu_del (void *);
3327 static int check_duplicate_cu (dw_die_ref, htab_t, unsigned *);
3328 static void record_comdat_symbol_number (dw_die_ref, htab_t, unsigned);
3329 static void add_sibling_attributes (dw_die_ref);
3330 static void build_abbrev_table (dw_die_ref);
3331 static void output_location_lists (dw_die_ref);
3332 static int constant_size (unsigned HOST_WIDE_INT);
3333 static unsigned long size_of_die (dw_die_ref);
3334 static void calc_die_sizes (dw_die_ref);
3335 static void calc_base_type_die_sizes (void);
3336 static void mark_dies (dw_die_ref);
3337 static void unmark_dies (dw_die_ref);
3338 static void unmark_all_dies (dw_die_ref);
3339 static unsigned long size_of_pubnames (VEC (pubname_entry,gc) *);
3340 static unsigned long size_of_aranges (void);
3341 static enum dwarf_form value_format (dw_attr_ref);
3342 static void output_value_format (dw_attr_ref);
3343 static void output_abbrev_section (void);
3344 static void output_die_symbol (dw_die_ref);
3345 static void output_die (dw_die_ref);
3346 static void output_compilation_unit_header (void);
3347 static void output_comp_unit (dw_die_ref, int);
3348 static void output_comdat_type_unit (comdat_type_node *);
3349 static const char *dwarf2_name (tree, int);
3350 static void add_pubname (tree, dw_die_ref);
3351 static void add_pubname_string (const char *, dw_die_ref);
3352 static void add_pubtype (tree, dw_die_ref);
3353 static void output_pubnames (VEC (pubname_entry,gc) *);
3354 static void output_aranges (unsigned long);
3355 static unsigned int add_ranges_num (int);
3356 static unsigned int add_ranges (const_tree);
3357 static void add_ranges_by_labels (dw_die_ref, const char *, const char *,
3358 				  bool *);
3359 static void output_ranges (void);
3360 static dw_line_info_table *new_line_info_table (void);
3361 static void output_line_info (void);
3362 static void output_file_names (void);
3363 static dw_die_ref base_type_die (tree);
3364 static int is_base_type (tree);
3365 static dw_die_ref subrange_type_die (tree, tree, tree, dw_die_ref);
3366 static dw_die_ref modified_type_die (tree, int, int, dw_die_ref);
3367 static dw_die_ref generic_parameter_die (tree, tree, bool, dw_die_ref);
3368 static dw_die_ref template_parameter_pack_die (tree, tree, dw_die_ref);
3369 static int type_is_enum (const_tree);
3370 static unsigned int dbx_reg_number (const_rtx);
3371 static void add_loc_descr_op_piece (dw_loc_descr_ref *, int);
3372 static dw_loc_descr_ref reg_loc_descriptor (rtx, enum var_init_status);
3373 static dw_loc_descr_ref one_reg_loc_descriptor (unsigned int,
3374 						enum var_init_status);
3375 static dw_loc_descr_ref multiple_reg_loc_descriptor (rtx, rtx,
3376 						     enum var_init_status);
3377 static dw_loc_descr_ref based_loc_descr (rtx, HOST_WIDE_INT,
3378 					 enum var_init_status);
3379 static int is_based_loc (const_rtx);
3380 static int resolve_one_addr (rtx *, void *);
3381 static dw_loc_descr_ref concat_loc_descriptor (rtx, rtx,
3382 					       enum var_init_status);
3383 static dw_loc_descr_ref loc_descriptor (rtx, enum machine_mode mode,
3384 					enum var_init_status);
3385 static dw_loc_list_ref loc_list_from_tree (tree, int);
3386 static dw_loc_descr_ref loc_descriptor_from_tree (tree, int);
3387 static HOST_WIDE_INT ceiling (HOST_WIDE_INT, unsigned int);
3388 static tree field_type (const_tree);
3389 static unsigned int simple_type_align_in_bits (const_tree);
3390 static unsigned int simple_decl_align_in_bits (const_tree);
3391 static unsigned HOST_WIDE_INT simple_type_size_in_bits (const_tree);
3392 static HOST_WIDE_INT field_byte_offset (const_tree);
3393 static void add_AT_location_description	(dw_die_ref, enum dwarf_attribute,
3394 					 dw_loc_list_ref);
3395 static void add_data_member_location_attribute (dw_die_ref, tree);
3396 static bool add_const_value_attribute (dw_die_ref, rtx);
3397 static void insert_int (HOST_WIDE_INT, unsigned, unsigned char *);
3398 static void insert_double (double_int, unsigned char *);
3399 static void insert_float (const_rtx, unsigned char *);
3400 static rtx rtl_for_decl_location (tree);
3401 static bool add_location_or_const_value_attribute (dw_die_ref, tree, bool,
3402 						   enum dwarf_attribute);
3403 static bool tree_add_const_value_attribute (dw_die_ref, tree);
3404 static bool tree_add_const_value_attribute_for_decl (dw_die_ref, tree);
3405 static void add_name_attribute (dw_die_ref, const char *);
3406 static void add_gnat_descriptive_type_attribute (dw_die_ref, tree, dw_die_ref);
3407 static void add_comp_dir_attribute (dw_die_ref);
3408 static void add_bound_info (dw_die_ref, enum dwarf_attribute, tree);
3409 static void add_subscript_info (dw_die_ref, tree, bool);
3410 static void add_byte_size_attribute (dw_die_ref, tree);
3411 static void add_bit_offset_attribute (dw_die_ref, tree);
3412 static void add_bit_size_attribute (dw_die_ref, tree);
3413 static void add_prototyped_attribute (dw_die_ref, tree);
3414 static dw_die_ref add_abstract_origin_attribute (dw_die_ref, tree);
3415 static void add_pure_or_virtual_attribute (dw_die_ref, tree);
3416 static void add_src_coords_attributes (dw_die_ref, tree);
3417 static void add_name_and_src_coords_attributes (dw_die_ref, tree);
3418 static void push_decl_scope (tree);
3419 static void pop_decl_scope (void);
3420 static dw_die_ref scope_die_for (tree, dw_die_ref);
3421 static inline int local_scope_p (dw_die_ref);
3422 static inline int class_scope_p (dw_die_ref);
3423 static inline int class_or_namespace_scope_p (dw_die_ref);
3424 static void add_type_attribute (dw_die_ref, tree, int, int, dw_die_ref);
3425 static void add_calling_convention_attribute (dw_die_ref, tree);
3426 static const char *type_tag (const_tree);
3427 static tree member_declared_type (const_tree);
3428 #if 0
3429 static const char *decl_start_label (tree);
3430 #endif
3431 static void gen_array_type_die (tree, dw_die_ref);
3432 static void gen_descr_array_type_die (tree, struct array_descr_info *, dw_die_ref);
3433 #if 0
3434 static void gen_entry_point_die (tree, dw_die_ref);
3435 #endif
3436 static dw_die_ref gen_enumeration_type_die (tree, dw_die_ref);
3437 static dw_die_ref gen_formal_parameter_die (tree, tree, bool, dw_die_ref);
3438 static dw_die_ref gen_formal_parameter_pack_die  (tree, tree, dw_die_ref, tree*);
3439 static void gen_unspecified_parameters_die (tree, dw_die_ref);
3440 static void gen_formal_types_die (tree, dw_die_ref);
3441 static void gen_subprogram_die (tree, dw_die_ref);
3442 static void gen_variable_die (tree, tree, dw_die_ref);
3443 static void gen_const_die (tree, dw_die_ref);
3444 static void gen_label_die (tree, dw_die_ref);
3445 static void gen_lexical_block_die (tree, dw_die_ref, int);
3446 static void gen_inlined_subroutine_die (tree, dw_die_ref, int);
3447 static void gen_field_die (tree, dw_die_ref);
3448 static void gen_ptr_to_mbr_type_die (tree, dw_die_ref);
3449 static dw_die_ref gen_compile_unit_die (const char *);
3450 static void gen_inheritance_die (tree, tree, dw_die_ref);
3451 static void gen_member_die (tree, dw_die_ref);
3452 static void gen_struct_or_union_type_die (tree, dw_die_ref,
3453 						enum debug_info_usage);
3454 static void gen_subroutine_type_die (tree, dw_die_ref);
3455 static void gen_typedef_die (tree, dw_die_ref);
3456 static void gen_type_die (tree, dw_die_ref);
3457 static void gen_block_die (tree, dw_die_ref, int);
3458 static void decls_for_scope (tree, dw_die_ref, int);
3459 static inline int is_redundant_typedef (const_tree);
3460 static bool is_naming_typedef_decl (const_tree);
3461 static inline dw_die_ref get_context_die (tree);
3462 static void gen_namespace_die (tree, dw_die_ref);
3463 static dw_die_ref gen_decl_die (tree, tree, dw_die_ref);
3464 static dw_die_ref force_decl_die (tree);
3465 static dw_die_ref force_type_die (tree);
3466 static dw_die_ref setup_namespace_context (tree, dw_die_ref);
3467 static dw_die_ref declare_in_namespace (tree, dw_die_ref);
3468 static struct dwarf_file_data * lookup_filename (const char *);
3469 static void retry_incomplete_types (void);
3470 static void gen_type_die_for_member (tree, tree, dw_die_ref);
3471 static void gen_generic_params_dies (tree);
3472 static void gen_tagged_type_die (tree, dw_die_ref, enum debug_info_usage);
3473 static void gen_type_die_with_usage (tree, dw_die_ref, enum debug_info_usage);
3474 static void splice_child_die (dw_die_ref, dw_die_ref);
3475 static int file_info_cmp (const void *, const void *);
3476 static dw_loc_list_ref new_loc_list (dw_loc_descr_ref, const char *,
3477 				     const char *, const char *);
3478 static void output_loc_list (dw_loc_list_ref);
3479 static char *gen_internal_sym (const char *);
3480 
3481 static void prune_unmark_dies (dw_die_ref);
3482 static void prune_unused_types_mark_generic_parms_dies (dw_die_ref);
3483 static void prune_unused_types_mark (dw_die_ref, int);
3484 static void prune_unused_types_walk (dw_die_ref);
3485 static void prune_unused_types_walk_attribs (dw_die_ref);
3486 static void prune_unused_types_prune (dw_die_ref);
3487 static void prune_unused_types (void);
3488 static int maybe_emit_file (struct dwarf_file_data *fd);
3489 static inline const char *AT_vms_delta1 (dw_attr_ref);
3490 static inline const char *AT_vms_delta2 (dw_attr_ref);
3491 static inline void add_AT_vms_delta (dw_die_ref, enum dwarf_attribute,
3492 				     const char *, const char *);
3493 static void append_entry_to_tmpl_value_parm_die_table (dw_die_ref, tree);
3494 static void gen_remaining_tmpl_value_param_die_attribute (void);
3495 static bool generic_type_p (tree);
3496 static void schedule_generic_params_dies_gen (tree t);
3497 static void gen_scheduled_generic_parms_dies (void);
3498 
3499 /* Section names used to hold DWARF debugging information.  */
3500 #ifndef DEBUG_INFO_SECTION
3501 #define DEBUG_INFO_SECTION	".debug_info"
3502 #endif
3503 #ifndef DEBUG_ABBREV_SECTION
3504 #define DEBUG_ABBREV_SECTION	".debug_abbrev"
3505 #endif
3506 #ifndef DEBUG_ARANGES_SECTION
3507 #define DEBUG_ARANGES_SECTION	".debug_aranges"
3508 #endif
3509 #ifndef DEBUG_MACINFO_SECTION
3510 #define DEBUG_MACINFO_SECTION	".debug_macinfo"
3511 #endif
3512 #ifndef DEBUG_MACRO_SECTION
3513 #define DEBUG_MACRO_SECTION	".debug_macro"
3514 #endif
3515 #ifndef DEBUG_LINE_SECTION
3516 #define DEBUG_LINE_SECTION	".debug_line"
3517 #endif
3518 #ifndef DEBUG_LOC_SECTION
3519 #define DEBUG_LOC_SECTION	".debug_loc"
3520 #endif
3521 #ifndef DEBUG_PUBNAMES_SECTION
3522 #define DEBUG_PUBNAMES_SECTION	".debug_pubnames"
3523 #endif
3524 #ifndef DEBUG_PUBTYPES_SECTION
3525 #define DEBUG_PUBTYPES_SECTION	".debug_pubtypes"
3526 #endif
3527 #ifndef DEBUG_STR_SECTION
3528 #define DEBUG_STR_SECTION	".debug_str"
3529 #endif
3530 #ifndef DEBUG_RANGES_SECTION
3531 #define DEBUG_RANGES_SECTION	".debug_ranges"
3532 #endif
3533 
3534 /* Standard ELF section names for compiled code and data.  */
3535 #ifndef TEXT_SECTION_NAME
3536 #define TEXT_SECTION_NAME	".text"
3537 #endif
3538 
3539 /* Section flags for .debug_str section.  */
3540 #define DEBUG_STR_SECTION_FLAGS \
3541   (HAVE_GAS_SHF_MERGE && flag_merge_debug_strings		\
3542    ? SECTION_DEBUG | SECTION_MERGE | SECTION_STRINGS | 1	\
3543    : SECTION_DEBUG)
3544 
3545 /* Labels we insert at beginning sections we can reference instead of
3546    the section names themselves.  */
3547 
3548 #ifndef TEXT_SECTION_LABEL
3549 #define TEXT_SECTION_LABEL		"Ltext"
3550 #endif
3551 #ifndef COLD_TEXT_SECTION_LABEL
3552 #define COLD_TEXT_SECTION_LABEL         "Ltext_cold"
3553 #endif
3554 #ifndef DEBUG_LINE_SECTION_LABEL
3555 #define DEBUG_LINE_SECTION_LABEL	"Ldebug_line"
3556 #endif
3557 #ifndef DEBUG_INFO_SECTION_LABEL
3558 #define DEBUG_INFO_SECTION_LABEL	"Ldebug_info"
3559 #endif
3560 #ifndef DEBUG_ABBREV_SECTION_LABEL
3561 #define DEBUG_ABBREV_SECTION_LABEL	"Ldebug_abbrev"
3562 #endif
3563 #ifndef DEBUG_LOC_SECTION_LABEL
3564 #define DEBUG_LOC_SECTION_LABEL		"Ldebug_loc"
3565 #endif
3566 #ifndef DEBUG_RANGES_SECTION_LABEL
3567 #define DEBUG_RANGES_SECTION_LABEL	"Ldebug_ranges"
3568 #endif
3569 #ifndef DEBUG_MACINFO_SECTION_LABEL
3570 #define DEBUG_MACINFO_SECTION_LABEL     "Ldebug_macinfo"
3571 #endif
3572 #ifndef DEBUG_MACRO_SECTION_LABEL
3573 #define DEBUG_MACRO_SECTION_LABEL	"Ldebug_macro"
3574 #endif
3575 
3576 
3577 /* Definitions of defaults for formats and names of various special
3578    (artificial) labels which may be generated within this file (when the -g
3579    options is used and DWARF2_DEBUGGING_INFO is in effect.
3580    If necessary, these may be overridden from within the tm.h file, but
3581    typically, overriding these defaults is unnecessary.  */
3582 
3583 static char text_end_label[MAX_ARTIFICIAL_LABEL_BYTES];
3584 static char text_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
3585 static char cold_text_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
3586 static char cold_end_label[MAX_ARTIFICIAL_LABEL_BYTES];
3587 static char abbrev_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
3588 static char debug_info_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
3589 static char debug_line_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
3590 static char macinfo_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
3591 static char loc_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
3592 static char ranges_section_label[2 * MAX_ARTIFICIAL_LABEL_BYTES];
3593 
3594 #ifndef TEXT_END_LABEL
3595 #define TEXT_END_LABEL		"Letext"
3596 #endif
3597 #ifndef COLD_END_LABEL
3598 #define COLD_END_LABEL          "Letext_cold"
3599 #endif
3600 #ifndef BLOCK_BEGIN_LABEL
3601 #define BLOCK_BEGIN_LABEL	"LBB"
3602 #endif
3603 #ifndef BLOCK_END_LABEL
3604 #define BLOCK_END_LABEL		"LBE"
3605 #endif
3606 #ifndef LINE_CODE_LABEL
3607 #define LINE_CODE_LABEL		"LM"
3608 #endif
3609 
3610 
3611 /* Return the root of the DIE's built for the current compilation unit.  */
3612 static dw_die_ref
3613 comp_unit_die (void)
3614 {
3615   if (!single_comp_unit_die)
3616     single_comp_unit_die = gen_compile_unit_die (NULL);
3617   return single_comp_unit_die;
3618 }
3619 
3620 /* We allow a language front-end to designate a function that is to be
3621    called to "demangle" any name before it is put into a DIE.  */
3622 
3623 static const char *(*demangle_name_func) (const char *);
3624 
3625 void
3626 dwarf2out_set_demangle_name_func (const char *(*func) (const char *))
3627 {
3628   demangle_name_func = func;
3629 }
3630 
3631 /* Test if rtl node points to a pseudo register.  */
3632 
3633 static inline int
3634 is_pseudo_reg (const_rtx rtl)
3635 {
3636   return ((REG_P (rtl) && REGNO (rtl) >= FIRST_PSEUDO_REGISTER)
3637 	  || (GET_CODE (rtl) == SUBREG
3638 	      && REGNO (SUBREG_REG (rtl)) >= FIRST_PSEUDO_REGISTER));
3639 }
3640 
3641 /* Return a reference to a type, with its const and volatile qualifiers
3642    removed.  */
3643 
3644 static inline tree
3645 type_main_variant (tree type)
3646 {
3647   type = TYPE_MAIN_VARIANT (type);
3648 
3649   /* ??? There really should be only one main variant among any group of
3650      variants of a given type (and all of the MAIN_VARIANT values for all
3651      members of the group should point to that one type) but sometimes the C
3652      front-end messes this up for array types, so we work around that bug
3653      here.  */
3654   if (TREE_CODE (type) == ARRAY_TYPE)
3655     while (type != TYPE_MAIN_VARIANT (type))
3656       type = TYPE_MAIN_VARIANT (type);
3657 
3658   return type;
3659 }
3660 
3661 /* Return nonzero if the given type node represents a tagged type.  */
3662 
3663 static inline int
3664 is_tagged_type (const_tree type)
3665 {
3666   enum tree_code code = TREE_CODE (type);
3667 
3668   return (code == RECORD_TYPE || code == UNION_TYPE
3669 	  || code == QUAL_UNION_TYPE || code == ENUMERAL_TYPE);
3670 }
3671 
3672 /* Set label to debug_info_section_label + die_offset of a DIE reference.  */
3673 
3674 static void
3675 get_ref_die_offset_label (char *label, dw_die_ref ref)
3676 {
3677   sprintf (label, "%s+%ld", debug_info_section_label, ref->die_offset);
3678 }
3679 
3680 /* Return die_offset of a DIE reference to a base type.  */
3681 
3682 static unsigned long int
3683 get_base_type_offset (dw_die_ref ref)
3684 {
3685   if (ref->die_offset)
3686     return ref->die_offset;
3687   if (comp_unit_die ()->die_abbrev)
3688     {
3689       calc_base_type_die_sizes ();
3690       gcc_assert (ref->die_offset);
3691     }
3692   return ref->die_offset;
3693 }
3694 
3695 /* Return die_offset of a DIE reference other than base type.  */
3696 
3697 static unsigned long int
3698 get_ref_die_offset (dw_die_ref ref)
3699 {
3700   gcc_assert (ref->die_offset);
3701   return ref->die_offset;
3702 }
3703 
3704 /* Convert a DIE tag into its string name.  */
3705 
3706 static const char *
3707 dwarf_tag_name (unsigned int tag)
3708 {
3709   switch (tag)
3710     {
3711     case DW_TAG_padding:
3712       return "DW_TAG_padding";
3713     case DW_TAG_array_type:
3714       return "DW_TAG_array_type";
3715     case DW_TAG_class_type:
3716       return "DW_TAG_class_type";
3717     case DW_TAG_entry_point:
3718       return "DW_TAG_entry_point";
3719     case DW_TAG_enumeration_type:
3720       return "DW_TAG_enumeration_type";
3721     case DW_TAG_formal_parameter:
3722       return "DW_TAG_formal_parameter";
3723     case DW_TAG_imported_declaration:
3724       return "DW_TAG_imported_declaration";
3725     case DW_TAG_label:
3726       return "DW_TAG_label";
3727     case DW_TAG_lexical_block:
3728       return "DW_TAG_lexical_block";
3729     case DW_TAG_member:
3730       return "DW_TAG_member";
3731     case DW_TAG_pointer_type:
3732       return "DW_TAG_pointer_type";
3733     case DW_TAG_reference_type:
3734       return "DW_TAG_reference_type";
3735     case DW_TAG_compile_unit:
3736       return "DW_TAG_compile_unit";
3737     case DW_TAG_string_type:
3738       return "DW_TAG_string_type";
3739     case DW_TAG_structure_type:
3740       return "DW_TAG_structure_type";
3741     case DW_TAG_subroutine_type:
3742       return "DW_TAG_subroutine_type";
3743     case DW_TAG_typedef:
3744       return "DW_TAG_typedef";
3745     case DW_TAG_union_type:
3746       return "DW_TAG_union_type";
3747     case DW_TAG_unspecified_parameters:
3748       return "DW_TAG_unspecified_parameters";
3749     case DW_TAG_variant:
3750       return "DW_TAG_variant";
3751     case DW_TAG_common_block:
3752       return "DW_TAG_common_block";
3753     case DW_TAG_common_inclusion:
3754       return "DW_TAG_common_inclusion";
3755     case DW_TAG_inheritance:
3756       return "DW_TAG_inheritance";
3757     case DW_TAG_inlined_subroutine:
3758       return "DW_TAG_inlined_subroutine";
3759     case DW_TAG_module:
3760       return "DW_TAG_module";
3761     case DW_TAG_ptr_to_member_type:
3762       return "DW_TAG_ptr_to_member_type";
3763     case DW_TAG_set_type:
3764       return "DW_TAG_set_type";
3765     case DW_TAG_subrange_type:
3766       return "DW_TAG_subrange_type";
3767     case DW_TAG_with_stmt:
3768       return "DW_TAG_with_stmt";
3769     case DW_TAG_access_declaration:
3770       return "DW_TAG_access_declaration";
3771     case DW_TAG_base_type:
3772       return "DW_TAG_base_type";
3773     case DW_TAG_catch_block:
3774       return "DW_TAG_catch_block";
3775     case DW_TAG_const_type:
3776       return "DW_TAG_const_type";
3777     case DW_TAG_constant:
3778       return "DW_TAG_constant";
3779     case DW_TAG_enumerator:
3780       return "DW_TAG_enumerator";
3781     case DW_TAG_file_type:
3782       return "DW_TAG_file_type";
3783     case DW_TAG_friend:
3784       return "DW_TAG_friend";
3785     case DW_TAG_namelist:
3786       return "DW_TAG_namelist";
3787     case DW_TAG_namelist_item:
3788       return "DW_TAG_namelist_item";
3789     case DW_TAG_packed_type:
3790       return "DW_TAG_packed_type";
3791     case DW_TAG_subprogram:
3792       return "DW_TAG_subprogram";
3793     case DW_TAG_template_type_param:
3794       return "DW_TAG_template_type_param";
3795     case DW_TAG_template_value_param:
3796       return "DW_TAG_template_value_param";
3797     case DW_TAG_thrown_type:
3798       return "DW_TAG_thrown_type";
3799     case DW_TAG_try_block:
3800       return "DW_TAG_try_block";
3801     case DW_TAG_variant_part:
3802       return "DW_TAG_variant_part";
3803     case DW_TAG_variable:
3804       return "DW_TAG_variable";
3805     case DW_TAG_volatile_type:
3806       return "DW_TAG_volatile_type";
3807     case DW_TAG_dwarf_procedure:
3808       return "DW_TAG_dwarf_procedure";
3809     case DW_TAG_restrict_type:
3810       return "DW_TAG_restrict_type";
3811     case DW_TAG_interface_type:
3812       return "DW_TAG_interface_type";
3813     case DW_TAG_namespace:
3814       return "DW_TAG_namespace";
3815     case DW_TAG_imported_module:
3816       return "DW_TAG_imported_module";
3817     case DW_TAG_unspecified_type:
3818       return "DW_TAG_unspecified_type";
3819     case DW_TAG_partial_unit:
3820       return "DW_TAG_partial_unit";
3821     case DW_TAG_imported_unit:
3822       return "DW_TAG_imported_unit";
3823     case DW_TAG_condition:
3824       return "DW_TAG_condition";
3825     case DW_TAG_shared_type:
3826       return "DW_TAG_shared_type";
3827     case DW_TAG_type_unit:
3828       return "DW_TAG_type_unit";
3829     case DW_TAG_rvalue_reference_type:
3830       return "DW_TAG_rvalue_reference_type";
3831     case DW_TAG_template_alias:
3832       return "DW_TAG_template_alias";
3833     case DW_TAG_GNU_template_parameter_pack:
3834       return "DW_TAG_GNU_template_parameter_pack";
3835     case DW_TAG_GNU_formal_parameter_pack:
3836       return "DW_TAG_GNU_formal_parameter_pack";
3837     case DW_TAG_MIPS_loop:
3838       return "DW_TAG_MIPS_loop";
3839     case DW_TAG_format_label:
3840       return "DW_TAG_format_label";
3841     case DW_TAG_function_template:
3842       return "DW_TAG_function_template";
3843     case DW_TAG_class_template:
3844       return "DW_TAG_class_template";
3845     case DW_TAG_GNU_BINCL:
3846       return "DW_TAG_GNU_BINCL";
3847     case DW_TAG_GNU_EINCL:
3848       return "DW_TAG_GNU_EINCL";
3849     case DW_TAG_GNU_template_template_param:
3850       return "DW_TAG_GNU_template_template_param";
3851     case DW_TAG_GNU_call_site:
3852       return "DW_TAG_GNU_call_site";
3853     case DW_TAG_GNU_call_site_parameter:
3854       return "DW_TAG_GNU_call_site_parameter";
3855     default:
3856       return "DW_TAG_<unknown>";
3857     }
3858 }
3859 
3860 /* Convert a DWARF attribute code into its string name.  */
3861 
3862 static const char *
3863 dwarf_attr_name (unsigned int attr)
3864 {
3865   switch (attr)
3866     {
3867     case DW_AT_sibling:
3868       return "DW_AT_sibling";
3869     case DW_AT_location:
3870       return "DW_AT_location";
3871     case DW_AT_name:
3872       return "DW_AT_name";
3873     case DW_AT_ordering:
3874       return "DW_AT_ordering";
3875     case DW_AT_subscr_data:
3876       return "DW_AT_subscr_data";
3877     case DW_AT_byte_size:
3878       return "DW_AT_byte_size";
3879     case DW_AT_bit_offset:
3880       return "DW_AT_bit_offset";
3881     case DW_AT_bit_size:
3882       return "DW_AT_bit_size";
3883     case DW_AT_element_list:
3884       return "DW_AT_element_list";
3885     case DW_AT_stmt_list:
3886       return "DW_AT_stmt_list";
3887     case DW_AT_low_pc:
3888       return "DW_AT_low_pc";
3889     case DW_AT_high_pc:
3890       return "DW_AT_high_pc";
3891     case DW_AT_language:
3892       return "DW_AT_language";
3893     case DW_AT_member:
3894       return "DW_AT_member";
3895     case DW_AT_discr:
3896       return "DW_AT_discr";
3897     case DW_AT_discr_value:
3898       return "DW_AT_discr_value";
3899     case DW_AT_visibility:
3900       return "DW_AT_visibility";
3901     case DW_AT_import:
3902       return "DW_AT_import";
3903     case DW_AT_string_length:
3904       return "DW_AT_string_length";
3905     case DW_AT_common_reference:
3906       return "DW_AT_common_reference";
3907     case DW_AT_comp_dir:
3908       return "DW_AT_comp_dir";
3909     case DW_AT_const_value:
3910       return "DW_AT_const_value";
3911     case DW_AT_containing_type:
3912       return "DW_AT_containing_type";
3913     case DW_AT_default_value:
3914       return "DW_AT_default_value";
3915     case DW_AT_inline:
3916       return "DW_AT_inline";
3917     case DW_AT_is_optional:
3918       return "DW_AT_is_optional";
3919     case DW_AT_lower_bound:
3920       return "DW_AT_lower_bound";
3921     case DW_AT_producer:
3922       return "DW_AT_producer";
3923     case DW_AT_prototyped:
3924       return "DW_AT_prototyped";
3925     case DW_AT_return_addr:
3926       return "DW_AT_return_addr";
3927     case DW_AT_start_scope:
3928       return "DW_AT_start_scope";
3929     case DW_AT_bit_stride:
3930       return "DW_AT_bit_stride";
3931     case DW_AT_upper_bound:
3932       return "DW_AT_upper_bound";
3933     case DW_AT_abstract_origin:
3934       return "DW_AT_abstract_origin";
3935     case DW_AT_accessibility:
3936       return "DW_AT_accessibility";
3937     case DW_AT_address_class:
3938       return "DW_AT_address_class";
3939     case DW_AT_artificial:
3940       return "DW_AT_artificial";
3941     case DW_AT_base_types:
3942       return "DW_AT_base_types";
3943     case DW_AT_calling_convention:
3944       return "DW_AT_calling_convention";
3945     case DW_AT_count:
3946       return "DW_AT_count";
3947     case DW_AT_data_member_location:
3948       return "DW_AT_data_member_location";
3949     case DW_AT_decl_column:
3950       return "DW_AT_decl_column";
3951     case DW_AT_decl_file:
3952       return "DW_AT_decl_file";
3953     case DW_AT_decl_line:
3954       return "DW_AT_decl_line";
3955     case DW_AT_declaration:
3956       return "DW_AT_declaration";
3957     case DW_AT_discr_list:
3958       return "DW_AT_discr_list";
3959     case DW_AT_encoding:
3960       return "DW_AT_encoding";
3961     case DW_AT_external:
3962       return "DW_AT_external";
3963     case DW_AT_explicit:
3964       return "DW_AT_explicit";
3965     case DW_AT_frame_base:
3966       return "DW_AT_frame_base";
3967     case DW_AT_friend:
3968       return "DW_AT_friend";
3969     case DW_AT_identifier_case:
3970       return "DW_AT_identifier_case";
3971     case DW_AT_macro_info:
3972       return "DW_AT_macro_info";
3973     case DW_AT_namelist_items:
3974       return "DW_AT_namelist_items";
3975     case DW_AT_priority:
3976       return "DW_AT_priority";
3977     case DW_AT_segment:
3978       return "DW_AT_segment";
3979     case DW_AT_specification:
3980       return "DW_AT_specification";
3981     case DW_AT_static_link:
3982       return "DW_AT_static_link";
3983     case DW_AT_type:
3984       return "DW_AT_type";
3985     case DW_AT_use_location:
3986       return "DW_AT_use_location";
3987     case DW_AT_variable_parameter:
3988       return "DW_AT_variable_parameter";
3989     case DW_AT_virtuality:
3990       return "DW_AT_virtuality";
3991     case DW_AT_vtable_elem_location:
3992       return "DW_AT_vtable_elem_location";
3993 
3994     case DW_AT_allocated:
3995       return "DW_AT_allocated";
3996     case DW_AT_associated:
3997       return "DW_AT_associated";
3998     case DW_AT_data_location:
3999       return "DW_AT_data_location";
4000     case DW_AT_byte_stride:
4001       return "DW_AT_byte_stride";
4002     case DW_AT_entry_pc:
4003       return "DW_AT_entry_pc";
4004     case DW_AT_use_UTF8:
4005       return "DW_AT_use_UTF8";
4006     case DW_AT_extension:
4007       return "DW_AT_extension";
4008     case DW_AT_ranges:
4009       return "DW_AT_ranges";
4010     case DW_AT_trampoline:
4011       return "DW_AT_trampoline";
4012     case DW_AT_call_column:
4013       return "DW_AT_call_column";
4014     case DW_AT_call_file:
4015       return "DW_AT_call_file";
4016     case DW_AT_call_line:
4017       return "DW_AT_call_line";
4018     case DW_AT_object_pointer:
4019       return "DW_AT_object_pointer";
4020 
4021     case DW_AT_signature:
4022       return "DW_AT_signature";
4023     case DW_AT_main_subprogram:
4024       return "DW_AT_main_subprogram";
4025     case DW_AT_data_bit_offset:
4026       return "DW_AT_data_bit_offset";
4027     case DW_AT_const_expr:
4028       return "DW_AT_const_expr";
4029     case DW_AT_enum_class:
4030       return "DW_AT_enum_class";
4031     case DW_AT_linkage_name:
4032       return "DW_AT_linkage_name";
4033 
4034     case DW_AT_MIPS_fde:
4035       return "DW_AT_MIPS_fde";
4036     case DW_AT_MIPS_loop_begin:
4037       return "DW_AT_MIPS_loop_begin";
4038     case DW_AT_MIPS_tail_loop_begin:
4039       return "DW_AT_MIPS_tail_loop_begin";
4040     case DW_AT_MIPS_epilog_begin:
4041       return "DW_AT_MIPS_epilog_begin";
4042 #if VMS_DEBUGGING_INFO
4043     case DW_AT_HP_prologue:
4044       return "DW_AT_HP_prologue";
4045 #else
4046     case DW_AT_MIPS_loop_unroll_factor:
4047       return "DW_AT_MIPS_loop_unroll_factor";
4048 #endif
4049     case DW_AT_MIPS_software_pipeline_depth:
4050       return "DW_AT_MIPS_software_pipeline_depth";
4051     case DW_AT_MIPS_linkage_name:
4052       return "DW_AT_MIPS_linkage_name";
4053 #if VMS_DEBUGGING_INFO
4054     case DW_AT_HP_epilogue:
4055       return "DW_AT_HP_epilogue";
4056 #else
4057     case DW_AT_MIPS_stride:
4058       return "DW_AT_MIPS_stride";
4059 #endif
4060     case DW_AT_MIPS_abstract_name:
4061       return "DW_AT_MIPS_abstract_name";
4062     case DW_AT_MIPS_clone_origin:
4063       return "DW_AT_MIPS_clone_origin";
4064     case DW_AT_MIPS_has_inlines:
4065       return "DW_AT_MIPS_has_inlines";
4066 
4067     case DW_AT_sf_names:
4068       return "DW_AT_sf_names";
4069     case DW_AT_src_info:
4070       return "DW_AT_src_info";
4071     case DW_AT_mac_info:
4072       return "DW_AT_mac_info";
4073     case DW_AT_src_coords:
4074       return "DW_AT_src_coords";
4075     case DW_AT_body_begin:
4076       return "DW_AT_body_begin";
4077     case DW_AT_body_end:
4078       return "DW_AT_body_end";
4079 
4080     case DW_AT_GNU_vector:
4081       return "DW_AT_GNU_vector";
4082     case DW_AT_GNU_guarded_by:
4083       return "DW_AT_GNU_guarded_by";
4084     case DW_AT_GNU_pt_guarded_by:
4085       return "DW_AT_GNU_pt_guarded_by";
4086     case DW_AT_GNU_guarded:
4087       return "DW_AT_GNU_guarded";
4088     case DW_AT_GNU_pt_guarded:
4089       return "DW_AT_GNU_pt_guarded";
4090     case DW_AT_GNU_locks_excluded:
4091       return "DW_AT_GNU_locks_excluded";
4092     case DW_AT_GNU_exclusive_locks_required:
4093       return "DW_AT_GNU_exclusive_locks_required";
4094     case DW_AT_GNU_shared_locks_required:
4095       return "DW_AT_GNU_shared_locks_required";
4096     case DW_AT_GNU_odr_signature:
4097       return "DW_AT_GNU_odr_signature";
4098     case DW_AT_GNU_template_name:
4099       return "DW_AT_GNU_template_name";
4100     case DW_AT_GNU_call_site_value:
4101       return "DW_AT_GNU_call_site_value";
4102     case DW_AT_GNU_call_site_data_value:
4103       return "DW_AT_GNU_call_site_data_value";
4104     case DW_AT_GNU_call_site_target:
4105       return "DW_AT_GNU_call_site_target";
4106     case DW_AT_GNU_call_site_target_clobbered:
4107       return "DW_AT_GNU_call_site_target_clobbered";
4108     case DW_AT_GNU_tail_call:
4109       return "DW_AT_GNU_tail_call";
4110     case DW_AT_GNU_all_tail_call_sites:
4111       return "DW_AT_GNU_all_tail_call_sites";
4112     case DW_AT_GNU_all_call_sites:
4113       return "DW_AT_GNU_all_call_sites";
4114     case DW_AT_GNU_all_source_call_sites:
4115       return "DW_AT_GNU_all_source_call_sites";
4116     case DW_AT_GNU_macros:
4117       return "DW_AT_GNU_macros";
4118 
4119     case DW_AT_GNAT_descriptive_type:
4120       return "DW_AT_GNAT_descriptive_type";
4121 
4122     case DW_AT_VMS_rtnbeg_pd_address:
4123       return "DW_AT_VMS_rtnbeg_pd_address";
4124 
4125     default:
4126       return "DW_AT_<unknown>";
4127     }
4128 }
4129 
4130 /* Convert a DWARF value form code into its string name.  */
4131 
4132 static const char *
4133 dwarf_form_name (unsigned int form)
4134 {
4135   switch (form)
4136     {
4137     case DW_FORM_addr:
4138       return "DW_FORM_addr";
4139     case DW_FORM_block2:
4140       return "DW_FORM_block2";
4141     case DW_FORM_block4:
4142       return "DW_FORM_block4";
4143     case DW_FORM_data2:
4144       return "DW_FORM_data2";
4145     case DW_FORM_data4:
4146       return "DW_FORM_data4";
4147     case DW_FORM_data8:
4148       return "DW_FORM_data8";
4149     case DW_FORM_string:
4150       return "DW_FORM_string";
4151     case DW_FORM_block:
4152       return "DW_FORM_block";
4153     case DW_FORM_block1:
4154       return "DW_FORM_block1";
4155     case DW_FORM_data1:
4156       return "DW_FORM_data1";
4157     case DW_FORM_flag:
4158       return "DW_FORM_flag";
4159     case DW_FORM_sdata:
4160       return "DW_FORM_sdata";
4161     case DW_FORM_strp:
4162       return "DW_FORM_strp";
4163     case DW_FORM_udata:
4164       return "DW_FORM_udata";
4165     case DW_FORM_ref_addr:
4166       return "DW_FORM_ref_addr";
4167     case DW_FORM_ref1:
4168       return "DW_FORM_ref1";
4169     case DW_FORM_ref2:
4170       return "DW_FORM_ref2";
4171     case DW_FORM_ref4:
4172       return "DW_FORM_ref4";
4173     case DW_FORM_ref8:
4174       return "DW_FORM_ref8";
4175     case DW_FORM_ref_udata:
4176       return "DW_FORM_ref_udata";
4177     case DW_FORM_indirect:
4178       return "DW_FORM_indirect";
4179     case DW_FORM_sec_offset:
4180       return "DW_FORM_sec_offset";
4181     case DW_FORM_exprloc:
4182       return "DW_FORM_exprloc";
4183     case DW_FORM_flag_present:
4184       return "DW_FORM_flag_present";
4185     case DW_FORM_ref_sig8:
4186       return "DW_FORM_ref_sig8";
4187     default:
4188       return "DW_FORM_<unknown>";
4189     }
4190 }
4191 
4192 /* Determine the "ultimate origin" of a decl.  The decl may be an inlined
4193    instance of an inlined instance of a decl which is local to an inline
4194    function, so we have to trace all of the way back through the origin chain
4195    to find out what sort of node actually served as the original seed for the
4196    given block.  */
4197 
4198 static tree
4199 decl_ultimate_origin (const_tree decl)
4200 {
4201   if (!CODE_CONTAINS_STRUCT (TREE_CODE (decl), TS_DECL_COMMON))
4202     return NULL_TREE;
4203 
4204   /* output_inline_function sets DECL_ABSTRACT_ORIGIN for all the
4205      nodes in the function to point to themselves; ignore that if
4206      we're trying to output the abstract instance of this function.  */
4207   if (DECL_ABSTRACT (decl) && DECL_ABSTRACT_ORIGIN (decl) == decl)
4208     return NULL_TREE;
4209 
4210   /* Since the DECL_ABSTRACT_ORIGIN for a DECL is supposed to be the
4211      most distant ancestor, this should never happen.  */
4212   gcc_assert (!DECL_FROM_INLINE (DECL_ORIGIN (decl)));
4213 
4214   return DECL_ABSTRACT_ORIGIN (decl);
4215 }
4216 
4217 /* Get the class to which DECL belongs, if any.  In g++, the DECL_CONTEXT
4218    of a virtual function may refer to a base class, so we check the 'this'
4219    parameter.  */
4220 
4221 static tree
4222 decl_class_context (tree decl)
4223 {
4224   tree context = NULL_TREE;
4225 
4226   if (TREE_CODE (decl) != FUNCTION_DECL || ! DECL_VINDEX (decl))
4227     context = DECL_CONTEXT (decl);
4228   else
4229     context = TYPE_MAIN_VARIANT
4230       (TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (TREE_TYPE (decl)))));
4231 
4232   if (context && !TYPE_P (context))
4233     context = NULL_TREE;
4234 
4235   return context;
4236 }
4237 
4238 /* Add an attribute/value pair to a DIE.  */
4239 
4240 static inline void
4241 add_dwarf_attr (dw_die_ref die, dw_attr_ref attr)
4242 {
4243   /* Maybe this should be an assert?  */
4244   if (die == NULL)
4245     return;
4246 
4247   if (die->die_attr == NULL)
4248     die->die_attr = VEC_alloc (dw_attr_node, gc, 1);
4249   VEC_safe_push (dw_attr_node, gc, die->die_attr, attr);
4250 }
4251 
4252 static inline enum dw_val_class
4253 AT_class (dw_attr_ref a)
4254 {
4255   return a->dw_attr_val.val_class;
4256 }
4257 
4258 /* Add a flag value attribute to a DIE.  */
4259 
4260 static inline void
4261 add_AT_flag (dw_die_ref die, enum dwarf_attribute attr_kind, unsigned int flag)
4262 {
4263   dw_attr_node attr;
4264 
4265   attr.dw_attr = attr_kind;
4266   attr.dw_attr_val.val_class = dw_val_class_flag;
4267   attr.dw_attr_val.v.val_flag = flag;
4268   add_dwarf_attr (die, &attr);
4269 }
4270 
4271 static inline unsigned
4272 AT_flag (dw_attr_ref a)
4273 {
4274   gcc_assert (a && AT_class (a) == dw_val_class_flag);
4275   return a->dw_attr_val.v.val_flag;
4276 }
4277 
4278 /* Add a signed integer attribute value to a DIE.  */
4279 
4280 static inline void
4281 add_AT_int (dw_die_ref die, enum dwarf_attribute attr_kind, HOST_WIDE_INT int_val)
4282 {
4283   dw_attr_node attr;
4284 
4285   attr.dw_attr = attr_kind;
4286   attr.dw_attr_val.val_class = dw_val_class_const;
4287   attr.dw_attr_val.v.val_int = int_val;
4288   add_dwarf_attr (die, &attr);
4289 }
4290 
4291 static inline HOST_WIDE_INT
4292 AT_int (dw_attr_ref a)
4293 {
4294   gcc_assert (a && AT_class (a) == dw_val_class_const);
4295   return a->dw_attr_val.v.val_int;
4296 }
4297 
4298 /* Add an unsigned integer attribute value to a DIE.  */
4299 
4300 static inline void
4301 add_AT_unsigned (dw_die_ref die, enum dwarf_attribute attr_kind,
4302 		 unsigned HOST_WIDE_INT unsigned_val)
4303 {
4304   dw_attr_node attr;
4305 
4306   attr.dw_attr = attr_kind;
4307   attr.dw_attr_val.val_class = dw_val_class_unsigned_const;
4308   attr.dw_attr_val.v.val_unsigned = unsigned_val;
4309   add_dwarf_attr (die, &attr);
4310 }
4311 
4312 static inline unsigned HOST_WIDE_INT
4313 AT_unsigned (dw_attr_ref a)
4314 {
4315   gcc_assert (a && AT_class (a) == dw_val_class_unsigned_const);
4316   return a->dw_attr_val.v.val_unsigned;
4317 }
4318 
4319 /* Add an unsigned double integer attribute value to a DIE.  */
4320 
4321 static inline void
4322 add_AT_double (dw_die_ref die, enum dwarf_attribute attr_kind,
4323 	       HOST_WIDE_INT high, unsigned HOST_WIDE_INT low)
4324 {
4325   dw_attr_node attr;
4326 
4327   attr.dw_attr = attr_kind;
4328   attr.dw_attr_val.val_class = dw_val_class_const_double;
4329   attr.dw_attr_val.v.val_double.high = high;
4330   attr.dw_attr_val.v.val_double.low = low;
4331   add_dwarf_attr (die, &attr);
4332 }
4333 
4334 /* Add a floating point attribute value to a DIE and return it.  */
4335 
4336 static inline void
4337 add_AT_vec (dw_die_ref die, enum dwarf_attribute attr_kind,
4338 	    unsigned int length, unsigned int elt_size, unsigned char *array)
4339 {
4340   dw_attr_node attr;
4341 
4342   attr.dw_attr = attr_kind;
4343   attr.dw_attr_val.val_class = dw_val_class_vec;
4344   attr.dw_attr_val.v.val_vec.length = length;
4345   attr.dw_attr_val.v.val_vec.elt_size = elt_size;
4346   attr.dw_attr_val.v.val_vec.array = array;
4347   add_dwarf_attr (die, &attr);
4348 }
4349 
4350 /* Add an 8-byte data attribute value to a DIE.  */
4351 
4352 static inline void
4353 add_AT_data8 (dw_die_ref die, enum dwarf_attribute attr_kind,
4354               unsigned char data8[8])
4355 {
4356   dw_attr_node attr;
4357 
4358   attr.dw_attr = attr_kind;
4359   attr.dw_attr_val.val_class = dw_val_class_data8;
4360   memcpy (attr.dw_attr_val.v.val_data8, data8, 8);
4361   add_dwarf_attr (die, &attr);
4362 }
4363 
4364 /* Hash and equality functions for debug_str_hash.  */
4365 
4366 static hashval_t
4367 debug_str_do_hash (const void *x)
4368 {
4369   return htab_hash_string (((const struct indirect_string_node *)x)->str);
4370 }
4371 
4372 static int
4373 debug_str_eq (const void *x1, const void *x2)
4374 {
4375   return strcmp ((((const struct indirect_string_node *)x1)->str),
4376 		 (const char *)x2) == 0;
4377 }
4378 
4379 /* Add STR to the indirect string hash table.  */
4380 
4381 static struct indirect_string_node *
4382 find_AT_string (const char *str)
4383 {
4384   struct indirect_string_node *node;
4385   void **slot;
4386 
4387   if (! debug_str_hash)
4388     debug_str_hash = htab_create_ggc (10, debug_str_do_hash,
4389 				      debug_str_eq, NULL);
4390 
4391   slot = htab_find_slot_with_hash (debug_str_hash, str,
4392 				   htab_hash_string (str), INSERT);
4393   if (*slot == NULL)
4394     {
4395       node = ggc_alloc_cleared_indirect_string_node ();
4396       node->str = ggc_strdup (str);
4397       *slot = node;
4398     }
4399   else
4400     node = (struct indirect_string_node *) *slot;
4401 
4402   node->refcount++;
4403   return node;
4404 }
4405 
4406 /* Add a string attribute value to a DIE.  */
4407 
4408 static inline void
4409 add_AT_string (dw_die_ref die, enum dwarf_attribute attr_kind, const char *str)
4410 {
4411   dw_attr_node attr;
4412   struct indirect_string_node *node;
4413 
4414   node = find_AT_string (str);
4415 
4416   attr.dw_attr = attr_kind;
4417   attr.dw_attr_val.val_class = dw_val_class_str;
4418   attr.dw_attr_val.v.val_str = node;
4419   add_dwarf_attr (die, &attr);
4420 }
4421 
4422 static inline const char *
4423 AT_string (dw_attr_ref a)
4424 {
4425   gcc_assert (a && AT_class (a) == dw_val_class_str);
4426   return a->dw_attr_val.v.val_str->str;
4427 }
4428 
4429 /* Find out whether a string should be output inline in DIE
4430    or out-of-line in .debug_str section.  */
4431 
4432 static enum dwarf_form
4433 AT_string_form (dw_attr_ref a)
4434 {
4435   struct indirect_string_node *node;
4436   unsigned int len;
4437   char label[32];
4438 
4439   gcc_assert (a && AT_class (a) == dw_val_class_str);
4440 
4441   node = a->dw_attr_val.v.val_str;
4442   if (node->form)
4443     return node->form;
4444 
4445   len = strlen (node->str) + 1;
4446 
4447   /* If the string is shorter or equal to the size of the reference, it is
4448      always better to put it inline.  */
4449   if (len <= DWARF_OFFSET_SIZE || node->refcount == 0)
4450     return node->form = DW_FORM_string;
4451 
4452   /* If we cannot expect the linker to merge strings in .debug_str
4453      section, only put it into .debug_str if it is worth even in this
4454      single module.  */
4455   if (DWARF2_INDIRECT_STRING_SUPPORT_MISSING_ON_TARGET
4456       || ((debug_str_section->common.flags & SECTION_MERGE) == 0
4457       && (len - DWARF_OFFSET_SIZE) * node->refcount <= len))
4458     return node->form = DW_FORM_string;
4459 
4460   ASM_GENERATE_INTERNAL_LABEL (label, "LASF", dw2_string_counter);
4461   ++dw2_string_counter;
4462   node->label = xstrdup (label);
4463 
4464   return node->form = DW_FORM_strp;
4465 }
4466 
4467 /* Add a DIE reference attribute value to a DIE.  */
4468 
4469 static inline void
4470 add_AT_die_ref (dw_die_ref die, enum dwarf_attribute attr_kind, dw_die_ref targ_die)
4471 {
4472   dw_attr_node attr;
4473 
4474 #ifdef ENABLE_CHECKING
4475   gcc_assert (targ_die != NULL);
4476 #else
4477   /* With LTO we can end up trying to reference something we didn't create
4478      a DIE for.  Avoid crashing later on a NULL referenced DIE.  */
4479   if (targ_die == NULL)
4480     return;
4481 #endif
4482 
4483   attr.dw_attr = attr_kind;
4484   attr.dw_attr_val.val_class = dw_val_class_die_ref;
4485   attr.dw_attr_val.v.val_die_ref.die = targ_die;
4486   attr.dw_attr_val.v.val_die_ref.external = 0;
4487   add_dwarf_attr (die, &attr);
4488 }
4489 
4490 /* Add an AT_specification attribute to a DIE, and also make the back
4491    pointer from the specification to the definition.  */
4492 
4493 static inline void
4494 add_AT_specification (dw_die_ref die, dw_die_ref targ_die)
4495 {
4496   add_AT_die_ref (die, DW_AT_specification, targ_die);
4497   gcc_assert (!targ_die->die_definition);
4498   targ_die->die_definition = die;
4499 }
4500 
4501 static inline dw_die_ref
4502 AT_ref (dw_attr_ref a)
4503 {
4504   gcc_assert (a && AT_class (a) == dw_val_class_die_ref);
4505   return a->dw_attr_val.v.val_die_ref.die;
4506 }
4507 
4508 static inline int
4509 AT_ref_external (dw_attr_ref a)
4510 {
4511   if (a && AT_class (a) == dw_val_class_die_ref)
4512     return a->dw_attr_val.v.val_die_ref.external;
4513 
4514   return 0;
4515 }
4516 
4517 static inline void
4518 set_AT_ref_external (dw_attr_ref a, int i)
4519 {
4520   gcc_assert (a && AT_class (a) == dw_val_class_die_ref);
4521   a->dw_attr_val.v.val_die_ref.external = i;
4522 }
4523 
4524 /* Add an FDE reference attribute value to a DIE.  */
4525 
4526 static inline void
4527 add_AT_fde_ref (dw_die_ref die, enum dwarf_attribute attr_kind, unsigned int targ_fde)
4528 {
4529   dw_attr_node attr;
4530 
4531   attr.dw_attr = attr_kind;
4532   attr.dw_attr_val.val_class = dw_val_class_fde_ref;
4533   attr.dw_attr_val.v.val_fde_index = targ_fde;
4534   add_dwarf_attr (die, &attr);
4535 }
4536 
4537 /* Add a location description attribute value to a DIE.  */
4538 
4539 static inline void
4540 add_AT_loc (dw_die_ref die, enum dwarf_attribute attr_kind, dw_loc_descr_ref loc)
4541 {
4542   dw_attr_node attr;
4543 
4544   attr.dw_attr = attr_kind;
4545   attr.dw_attr_val.val_class = dw_val_class_loc;
4546   attr.dw_attr_val.v.val_loc = loc;
4547   add_dwarf_attr (die, &attr);
4548 }
4549 
4550 static inline dw_loc_descr_ref
4551 AT_loc (dw_attr_ref a)
4552 {
4553   gcc_assert (a && AT_class (a) == dw_val_class_loc);
4554   return a->dw_attr_val.v.val_loc;
4555 }
4556 
4557 static inline void
4558 add_AT_loc_list (dw_die_ref die, enum dwarf_attribute attr_kind, dw_loc_list_ref loc_list)
4559 {
4560   dw_attr_node attr;
4561 
4562   attr.dw_attr = attr_kind;
4563   attr.dw_attr_val.val_class = dw_val_class_loc_list;
4564   attr.dw_attr_val.v.val_loc_list = loc_list;
4565   add_dwarf_attr (die, &attr);
4566   have_location_lists = true;
4567 }
4568 
4569 static inline dw_loc_list_ref
4570 AT_loc_list (dw_attr_ref a)
4571 {
4572   gcc_assert (a && AT_class (a) == dw_val_class_loc_list);
4573   return a->dw_attr_val.v.val_loc_list;
4574 }
4575 
4576 static inline dw_loc_list_ref *
4577 AT_loc_list_ptr (dw_attr_ref a)
4578 {
4579   gcc_assert (a && AT_class (a) == dw_val_class_loc_list);
4580   return &a->dw_attr_val.v.val_loc_list;
4581 }
4582 
4583 /* Add an address constant attribute value to a DIE.  */
4584 
4585 static inline void
4586 add_AT_addr (dw_die_ref die, enum dwarf_attribute attr_kind, rtx addr)
4587 {
4588   dw_attr_node attr;
4589 
4590   attr.dw_attr = attr_kind;
4591   attr.dw_attr_val.val_class = dw_val_class_addr;
4592   attr.dw_attr_val.v.val_addr = addr;
4593   add_dwarf_attr (die, &attr);
4594 }
4595 
4596 /* Get the RTX from to an address DIE attribute.  */
4597 
4598 static inline rtx
4599 AT_addr (dw_attr_ref a)
4600 {
4601   gcc_assert (a && AT_class (a) == dw_val_class_addr);
4602   return a->dw_attr_val.v.val_addr;
4603 }
4604 
4605 /* Add a file attribute value to a DIE.  */
4606 
4607 static inline void
4608 add_AT_file (dw_die_ref die, enum dwarf_attribute attr_kind,
4609 	     struct dwarf_file_data *fd)
4610 {
4611   dw_attr_node attr;
4612 
4613   attr.dw_attr = attr_kind;
4614   attr.dw_attr_val.val_class = dw_val_class_file;
4615   attr.dw_attr_val.v.val_file = fd;
4616   add_dwarf_attr (die, &attr);
4617 }
4618 
4619 /* Get the dwarf_file_data from a file DIE attribute.  */
4620 
4621 static inline struct dwarf_file_data *
4622 AT_file (dw_attr_ref a)
4623 {
4624   gcc_assert (a && AT_class (a) == dw_val_class_file);
4625   return a->dw_attr_val.v.val_file;
4626 }
4627 
4628 /* Add a vms delta attribute value to a DIE.  */
4629 
4630 static inline void
4631 add_AT_vms_delta (dw_die_ref die, enum dwarf_attribute attr_kind,
4632 		  const char *lbl1, const char *lbl2)
4633 {
4634   dw_attr_node attr;
4635 
4636   attr.dw_attr = attr_kind;
4637   attr.dw_attr_val.val_class = dw_val_class_vms_delta;
4638   attr.dw_attr_val.v.val_vms_delta.lbl1 = xstrdup (lbl1);
4639   attr.dw_attr_val.v.val_vms_delta.lbl2 = xstrdup (lbl2);
4640   add_dwarf_attr (die, &attr);
4641 }
4642 
4643 /* Add a label identifier attribute value to a DIE.  */
4644 
4645 static inline void
4646 add_AT_lbl_id (dw_die_ref die, enum dwarf_attribute attr_kind, const char *lbl_id)
4647 {
4648   dw_attr_node attr;
4649 
4650   attr.dw_attr = attr_kind;
4651   attr.dw_attr_val.val_class = dw_val_class_lbl_id;
4652   attr.dw_attr_val.v.val_lbl_id = xstrdup (lbl_id);
4653   add_dwarf_attr (die, &attr);
4654 }
4655 
4656 /* Add a section offset attribute value to a DIE, an offset into the
4657    debug_line section.  */
4658 
4659 static inline void
4660 add_AT_lineptr (dw_die_ref die, enum dwarf_attribute attr_kind,
4661 		const char *label)
4662 {
4663   dw_attr_node attr;
4664 
4665   attr.dw_attr = attr_kind;
4666   attr.dw_attr_val.val_class = dw_val_class_lineptr;
4667   attr.dw_attr_val.v.val_lbl_id = xstrdup (label);
4668   add_dwarf_attr (die, &attr);
4669 }
4670 
4671 /* Add a section offset attribute value to a DIE, an offset into the
4672    debug_macinfo section.  */
4673 
4674 static inline void
4675 add_AT_macptr (dw_die_ref die, enum dwarf_attribute attr_kind,
4676 	       const char *label)
4677 {
4678   dw_attr_node attr;
4679 
4680   attr.dw_attr = attr_kind;
4681   attr.dw_attr_val.val_class = dw_val_class_macptr;
4682   attr.dw_attr_val.v.val_lbl_id = xstrdup (label);
4683   add_dwarf_attr (die, &attr);
4684 }
4685 
4686 /* Add an offset attribute value to a DIE.  */
4687 
4688 static inline void
4689 add_AT_offset (dw_die_ref die, enum dwarf_attribute attr_kind,
4690 	       unsigned HOST_WIDE_INT offset)
4691 {
4692   dw_attr_node attr;
4693 
4694   attr.dw_attr = attr_kind;
4695   attr.dw_attr_val.val_class = dw_val_class_offset;
4696   attr.dw_attr_val.v.val_offset = offset;
4697   add_dwarf_attr (die, &attr);
4698 }
4699 
4700 /* Add an range_list attribute value to a DIE.  */
4701 
4702 static void
4703 add_AT_range_list (dw_die_ref die, enum dwarf_attribute attr_kind,
4704 		   long unsigned int offset)
4705 {
4706   dw_attr_node attr;
4707 
4708   attr.dw_attr = attr_kind;
4709   attr.dw_attr_val.val_class = dw_val_class_range_list;
4710   attr.dw_attr_val.v.val_offset = offset;
4711   add_dwarf_attr (die, &attr);
4712 }
4713 
4714 /* Return the start label of a delta attribute.  */
4715 
4716 static inline const char *
4717 AT_vms_delta1 (dw_attr_ref a)
4718 {
4719   gcc_assert (a && (AT_class (a) == dw_val_class_vms_delta));
4720   return a->dw_attr_val.v.val_vms_delta.lbl1;
4721 }
4722 
4723 /* Return the end label of a delta attribute.  */
4724 
4725 static inline const char *
4726 AT_vms_delta2 (dw_attr_ref a)
4727 {
4728   gcc_assert (a && (AT_class (a) == dw_val_class_vms_delta));
4729   return a->dw_attr_val.v.val_vms_delta.lbl2;
4730 }
4731 
4732 static inline const char *
4733 AT_lbl (dw_attr_ref a)
4734 {
4735   gcc_assert (a && (AT_class (a) == dw_val_class_lbl_id
4736 		    || AT_class (a) == dw_val_class_lineptr
4737 		    || AT_class (a) == dw_val_class_macptr));
4738   return a->dw_attr_val.v.val_lbl_id;
4739 }
4740 
4741 /* Get the attribute of type attr_kind.  */
4742 
4743 static dw_attr_ref
4744 get_AT (dw_die_ref die, enum dwarf_attribute attr_kind)
4745 {
4746   dw_attr_ref a;
4747   unsigned ix;
4748   dw_die_ref spec = NULL;
4749 
4750   if (! die)
4751     return NULL;
4752 
4753   FOR_EACH_VEC_ELT (dw_attr_node, die->die_attr, ix, a)
4754     if (a->dw_attr == attr_kind)
4755       return a;
4756     else if (a->dw_attr == DW_AT_specification
4757 	     || a->dw_attr == DW_AT_abstract_origin)
4758       spec = AT_ref (a);
4759 
4760   if (spec)
4761     return get_AT (spec, attr_kind);
4762 
4763   return NULL;
4764 }
4765 
4766 /* Return the "low pc" attribute value, typically associated with a subprogram
4767    DIE.  Return null if the "low pc" attribute is either not present, or if it
4768    cannot be represented as an assembler label identifier.  */
4769 
4770 static inline const char *
4771 get_AT_low_pc (dw_die_ref die)
4772 {
4773   dw_attr_ref a = get_AT (die, DW_AT_low_pc);
4774 
4775   return a ? AT_lbl (a) : NULL;
4776 }
4777 
4778 /* Return the "high pc" attribute value, typically associated with a subprogram
4779    DIE.  Return null if the "high pc" attribute is either not present, or if it
4780    cannot be represented as an assembler label identifier.  */
4781 
4782 static inline const char *
4783 get_AT_hi_pc (dw_die_ref die)
4784 {
4785   dw_attr_ref a = get_AT (die, DW_AT_high_pc);
4786 
4787   return a ? AT_lbl (a) : NULL;
4788 }
4789 
4790 /* Return the value of the string attribute designated by ATTR_KIND, or
4791    NULL if it is not present.  */
4792 
4793 static inline const char *
4794 get_AT_string (dw_die_ref die, enum dwarf_attribute attr_kind)
4795 {
4796   dw_attr_ref a = get_AT (die, attr_kind);
4797 
4798   return a ? AT_string (a) : NULL;
4799 }
4800 
4801 /* Return the value of the flag attribute designated by ATTR_KIND, or -1
4802    if it is not present.  */
4803 
4804 static inline int
4805 get_AT_flag (dw_die_ref die, enum dwarf_attribute attr_kind)
4806 {
4807   dw_attr_ref a = get_AT (die, attr_kind);
4808 
4809   return a ? AT_flag (a) : 0;
4810 }
4811 
4812 /* Return the value of the unsigned attribute designated by ATTR_KIND, or 0
4813    if it is not present.  */
4814 
4815 static inline unsigned
4816 get_AT_unsigned (dw_die_ref die, enum dwarf_attribute attr_kind)
4817 {
4818   dw_attr_ref a = get_AT (die, attr_kind);
4819 
4820   return a ? AT_unsigned (a) : 0;
4821 }
4822 
4823 static inline dw_die_ref
4824 get_AT_ref (dw_die_ref die, enum dwarf_attribute attr_kind)
4825 {
4826   dw_attr_ref a = get_AT (die, attr_kind);
4827 
4828   return a ? AT_ref (a) : NULL;
4829 }
4830 
4831 static inline struct dwarf_file_data *
4832 get_AT_file (dw_die_ref die, enum dwarf_attribute attr_kind)
4833 {
4834   dw_attr_ref a = get_AT (die, attr_kind);
4835 
4836   return a ? AT_file (a) : NULL;
4837 }
4838 
4839 /* Return TRUE if the language is C++.  */
4840 
4841 static inline bool
4842 is_cxx (void)
4843 {
4844   unsigned int lang = get_AT_unsigned (comp_unit_die (), DW_AT_language);
4845 
4846   return lang == DW_LANG_C_plus_plus || lang == DW_LANG_ObjC_plus_plus;
4847 }
4848 
4849 /* Return TRUE if the language is Fortran.  */
4850 
4851 static inline bool
4852 is_fortran (void)
4853 {
4854   unsigned int lang = get_AT_unsigned (comp_unit_die (), DW_AT_language);
4855 
4856   return (lang == DW_LANG_Fortran77
4857 	  || lang == DW_LANG_Fortran90
4858 	  || lang == DW_LANG_Fortran95);
4859 }
4860 
4861 /* Return TRUE if the language is Ada.  */
4862 
4863 static inline bool
4864 is_ada (void)
4865 {
4866   unsigned int lang = get_AT_unsigned (comp_unit_die (), DW_AT_language);
4867 
4868   return lang == DW_LANG_Ada95 || lang == DW_LANG_Ada83;
4869 }
4870 
4871 /* Remove the specified attribute if present.  */
4872 
4873 static void
4874 remove_AT (dw_die_ref die, enum dwarf_attribute attr_kind)
4875 {
4876   dw_attr_ref a;
4877   unsigned ix;
4878 
4879   if (! die)
4880     return;
4881 
4882   FOR_EACH_VEC_ELT (dw_attr_node, die->die_attr, ix, a)
4883     if (a->dw_attr == attr_kind)
4884       {
4885 	if (AT_class (a) == dw_val_class_str)
4886 	  if (a->dw_attr_val.v.val_str->refcount)
4887 	    a->dw_attr_val.v.val_str->refcount--;
4888 
4889 	/* VEC_ordered_remove should help reduce the number of abbrevs
4890 	   that are needed.  */
4891 	VEC_ordered_remove (dw_attr_node, die->die_attr, ix);
4892 	return;
4893       }
4894 }
4895 
4896 /* Remove CHILD from its parent.  PREV must have the property that
4897    PREV->DIE_SIB == CHILD.  Does not alter CHILD.  */
4898 
4899 static void
4900 remove_child_with_prev (dw_die_ref child, dw_die_ref prev)
4901 {
4902   gcc_assert (child->die_parent == prev->die_parent);
4903   gcc_assert (prev->die_sib == child);
4904   if (prev == child)
4905     {
4906       gcc_assert (child->die_parent->die_child == child);
4907       prev = NULL;
4908     }
4909   else
4910     prev->die_sib = child->die_sib;
4911   if (child->die_parent->die_child == child)
4912     child->die_parent->die_child = prev;
4913 }
4914 
4915 /* Replace OLD_CHILD with NEW_CHILD.  PREV must have the property that
4916    PREV->DIE_SIB == OLD_CHILD.  Does not alter OLD_CHILD.  */
4917 
4918 static void
4919 replace_child (dw_die_ref old_child, dw_die_ref new_child, dw_die_ref prev)
4920 {
4921   dw_die_ref parent = old_child->die_parent;
4922 
4923   gcc_assert (parent == prev->die_parent);
4924   gcc_assert (prev->die_sib == old_child);
4925 
4926   new_child->die_parent = parent;
4927   if (prev == old_child)
4928     {
4929       gcc_assert (parent->die_child == old_child);
4930       new_child->die_sib = new_child;
4931     }
4932   else
4933     {
4934       prev->die_sib = new_child;
4935       new_child->die_sib = old_child->die_sib;
4936     }
4937   if (old_child->die_parent->die_child == old_child)
4938     old_child->die_parent->die_child = new_child;
4939 }
4940 
4941 /* Move all children from OLD_PARENT to NEW_PARENT.  */
4942 
4943 static void
4944 move_all_children (dw_die_ref old_parent, dw_die_ref new_parent)
4945 {
4946   dw_die_ref c;
4947   new_parent->die_child = old_parent->die_child;
4948   old_parent->die_child = NULL;
4949   FOR_EACH_CHILD (new_parent, c, c->die_parent = new_parent);
4950 }
4951 
4952 /* Remove child DIE whose die_tag is TAG.  Do nothing if no child
4953    matches TAG.  */
4954 
4955 static void
4956 remove_child_TAG (dw_die_ref die, enum dwarf_tag tag)
4957 {
4958   dw_die_ref c;
4959 
4960   c = die->die_child;
4961   if (c) do {
4962     dw_die_ref prev = c;
4963     c = c->die_sib;
4964     while (c->die_tag == tag)
4965       {
4966 	remove_child_with_prev (c, prev);
4967 	/* Might have removed every child.  */
4968 	if (c == c->die_sib)
4969 	  return;
4970 	c = c->die_sib;
4971       }
4972   } while (c != die->die_child);
4973 }
4974 
4975 /* Add a CHILD_DIE as the last child of DIE.  */
4976 
4977 static void
4978 add_child_die (dw_die_ref die, dw_die_ref child_die)
4979 {
4980   /* FIXME this should probably be an assert.  */
4981   if (! die || ! child_die)
4982     return;
4983   gcc_assert (die != child_die);
4984 
4985   child_die->die_parent = die;
4986   if (die->die_child)
4987     {
4988       child_die->die_sib = die->die_child->die_sib;
4989       die->die_child->die_sib = child_die;
4990     }
4991   else
4992     child_die->die_sib = child_die;
4993   die->die_child = child_die;
4994 }
4995 
4996 /* Move CHILD, which must be a child of PARENT or the DIE for which PARENT
4997    is the specification, to the end of PARENT's list of children.
4998    This is done by removing and re-adding it.  */
4999 
5000 static void
5001 splice_child_die (dw_die_ref parent, dw_die_ref child)
5002 {
5003   dw_die_ref p;
5004 
5005   /* We want the declaration DIE from inside the class, not the
5006      specification DIE at toplevel.  */
5007   if (child->die_parent != parent)
5008     {
5009       dw_die_ref tmp = get_AT_ref (child, DW_AT_specification);
5010 
5011       if (tmp)
5012 	child = tmp;
5013     }
5014 
5015   gcc_assert (child->die_parent == parent
5016 	      || (child->die_parent
5017 		  == get_AT_ref (parent, DW_AT_specification)));
5018 
5019   for (p = child->die_parent->die_child; ; p = p->die_sib)
5020     if (p->die_sib == child)
5021       {
5022 	remove_child_with_prev (child, p);
5023 	break;
5024       }
5025 
5026   add_child_die (parent, child);
5027 }
5028 
5029 /* Return a pointer to a newly created DIE node.  */
5030 
5031 static inline dw_die_ref
5032 new_die (enum dwarf_tag tag_value, dw_die_ref parent_die, tree t)
5033 {
5034   dw_die_ref die = ggc_alloc_cleared_die_node ();
5035 
5036   die->die_tag = tag_value;
5037 
5038   if (parent_die != NULL)
5039     add_child_die (parent_die, die);
5040   else
5041     {
5042       limbo_die_node *limbo_node;
5043 
5044       limbo_node = ggc_alloc_cleared_limbo_die_node ();
5045       limbo_node->die = die;
5046       limbo_node->created_for = t;
5047       limbo_node->next = limbo_die_list;
5048       limbo_die_list = limbo_node;
5049     }
5050 
5051   return die;
5052 }
5053 
5054 /* Return the DIE associated with the given type specifier.  */
5055 
5056 static inline dw_die_ref
5057 lookup_type_die (tree type)
5058 {
5059   return TYPE_SYMTAB_DIE (type);
5060 }
5061 
5062 /* Given a TYPE_DIE representing the type TYPE, if TYPE is an
5063    anonymous type named by the typedef TYPE_DIE, return the DIE of the
5064    anonymous type instead the one of the naming typedef.  */
5065 
5066 static inline dw_die_ref
5067 strip_naming_typedef (tree type, dw_die_ref type_die)
5068 {
5069   if (type
5070       && TREE_CODE (type) == RECORD_TYPE
5071       && type_die
5072       && type_die->die_tag == DW_TAG_typedef
5073       && is_naming_typedef_decl (TYPE_NAME (type)))
5074     type_die = get_AT_ref (type_die, DW_AT_type);
5075   return type_die;
5076 }
5077 
5078 /* Like lookup_type_die, but if type is an anonymous type named by a
5079    typedef[1], return the DIE of the anonymous type instead the one of
5080    the naming typedef.  This is because in gen_typedef_die, we did
5081    equate the anonymous struct named by the typedef with the DIE of
5082    the naming typedef. So by default, lookup_type_die on an anonymous
5083    struct yields the DIE of the naming typedef.
5084 
5085    [1]: Read the comment of is_naming_typedef_decl to learn about what
5086    a naming typedef is.  */
5087 
5088 static inline dw_die_ref
5089 lookup_type_die_strip_naming_typedef (tree type)
5090 {
5091   dw_die_ref die = lookup_type_die (type);
5092   return strip_naming_typedef (type, die);
5093 }
5094 
5095 /* Equate a DIE to a given type specifier.  */
5096 
5097 static inline void
5098 equate_type_number_to_die (tree type, dw_die_ref type_die)
5099 {
5100   TYPE_SYMTAB_DIE (type) = type_die;
5101 }
5102 
5103 /* Returns a hash value for X (which really is a die_struct).  */
5104 
5105 static hashval_t
5106 decl_die_table_hash (const void *x)
5107 {
5108   return (hashval_t) ((const_dw_die_ref) x)->decl_id;
5109 }
5110 
5111 /* Return nonzero if decl_id of die_struct X is the same as UID of decl *Y.  */
5112 
5113 static int
5114 decl_die_table_eq (const void *x, const void *y)
5115 {
5116   return (((const_dw_die_ref) x)->decl_id == DECL_UID ((const_tree) y));
5117 }
5118 
5119 /* Return the DIE associated with a given declaration.  */
5120 
5121 static inline dw_die_ref
5122 lookup_decl_die (tree decl)
5123 {
5124   return (dw_die_ref) htab_find_with_hash (decl_die_table, decl, DECL_UID (decl));
5125 }
5126 
5127 /* Returns a hash value for X (which really is a var_loc_list).  */
5128 
5129 static hashval_t
5130 decl_loc_table_hash (const void *x)
5131 {
5132   return (hashval_t) ((const var_loc_list *) x)->decl_id;
5133 }
5134 
5135 /* Return nonzero if decl_id of var_loc_list X is the same as
5136    UID of decl *Y.  */
5137 
5138 static int
5139 decl_loc_table_eq (const void *x, const void *y)
5140 {
5141   return (((const var_loc_list *) x)->decl_id == DECL_UID ((const_tree) y));
5142 }
5143 
5144 /* Return the var_loc list associated with a given declaration.  */
5145 
5146 static inline var_loc_list *
5147 lookup_decl_loc (const_tree decl)
5148 {
5149   if (!decl_loc_table)
5150     return NULL;
5151   return (var_loc_list *)
5152     htab_find_with_hash (decl_loc_table, decl, DECL_UID (decl));
5153 }
5154 
5155 /* Returns a hash value for X (which really is a cached_dw_loc_list_list).  */
5156 
5157 static hashval_t
5158 cached_dw_loc_list_table_hash (const void *x)
5159 {
5160   return (hashval_t) ((const cached_dw_loc_list *) x)->decl_id;
5161 }
5162 
5163 /* Return nonzero if decl_id of cached_dw_loc_list X is the same as
5164    UID of decl *Y.  */
5165 
5166 static int
5167 cached_dw_loc_list_table_eq (const void *x, const void *y)
5168 {
5169   return (((const cached_dw_loc_list *) x)->decl_id
5170 	  == DECL_UID ((const_tree) y));
5171 }
5172 
5173 /* Equate a DIE to a particular declaration.  */
5174 
5175 static void
5176 equate_decl_number_to_die (tree decl, dw_die_ref decl_die)
5177 {
5178   unsigned int decl_id = DECL_UID (decl);
5179   void **slot;
5180 
5181   slot = htab_find_slot_with_hash (decl_die_table, decl, decl_id, INSERT);
5182   *slot = decl_die;
5183   decl_die->decl_id = decl_id;
5184 }
5185 
5186 /* Return how many bits covers PIECE EXPR_LIST.  */
5187 
5188 static int
5189 decl_piece_bitsize (rtx piece)
5190 {
5191   int ret = (int) GET_MODE (piece);
5192   if (ret)
5193     return ret;
5194   gcc_assert (GET_CODE (XEXP (piece, 0)) == CONCAT
5195 	      && CONST_INT_P (XEXP (XEXP (piece, 0), 0)));
5196   return INTVAL (XEXP (XEXP (piece, 0), 0));
5197 }
5198 
5199 /* Return pointer to the location of location note in PIECE EXPR_LIST.  */
5200 
5201 static rtx *
5202 decl_piece_varloc_ptr (rtx piece)
5203 {
5204   if ((int) GET_MODE (piece))
5205     return &XEXP (piece, 0);
5206   else
5207     return &XEXP (XEXP (piece, 0), 1);
5208 }
5209 
5210 /* Create an EXPR_LIST for location note LOC_NOTE covering BITSIZE bits.
5211    Next is the chain of following piece nodes.  */
5212 
5213 static rtx
5214 decl_piece_node (rtx loc_note, HOST_WIDE_INT bitsize, rtx next)
5215 {
5216   if (bitsize <= (int) MAX_MACHINE_MODE)
5217     return alloc_EXPR_LIST (bitsize, loc_note, next);
5218   else
5219     return alloc_EXPR_LIST (0, gen_rtx_CONCAT (VOIDmode,
5220 					       GEN_INT (bitsize),
5221 					       loc_note), next);
5222 }
5223 
5224 /* Return rtx that should be stored into loc field for
5225    LOC_NOTE and BITPOS/BITSIZE.  */
5226 
5227 static rtx
5228 construct_piece_list (rtx loc_note, HOST_WIDE_INT bitpos,
5229 		      HOST_WIDE_INT bitsize)
5230 {
5231   if (bitsize != -1)
5232     {
5233       loc_note = decl_piece_node (loc_note, bitsize, NULL_RTX);
5234       if (bitpos != 0)
5235 	loc_note = decl_piece_node (NULL_RTX, bitpos, loc_note);
5236     }
5237   return loc_note;
5238 }
5239 
5240 /* This function either modifies location piece list *DEST in
5241    place (if SRC and INNER is NULL), or copies location piece list
5242    *SRC to *DEST while modifying it.  Location BITPOS is modified
5243    to contain LOC_NOTE, any pieces overlapping it are removed resp.
5244    not copied and if needed some padding around it is added.
5245    When modifying in place, DEST should point to EXPR_LIST where
5246    earlier pieces cover PIECE_BITPOS bits, when copying SRC points
5247    to the start of the whole list and INNER points to the EXPR_LIST
5248    where earlier pieces cover PIECE_BITPOS bits.  */
5249 
5250 static void
5251 adjust_piece_list (rtx *dest, rtx *src, rtx *inner,
5252 		   HOST_WIDE_INT bitpos, HOST_WIDE_INT piece_bitpos,
5253 		   HOST_WIDE_INT bitsize, rtx loc_note)
5254 {
5255   int diff;
5256   bool copy = inner != NULL;
5257 
5258   if (copy)
5259     {
5260       /* First copy all nodes preceeding the current bitpos.  */
5261       while (src != inner)
5262 	{
5263 	  *dest = decl_piece_node (*decl_piece_varloc_ptr (*src),
5264 				   decl_piece_bitsize (*src), NULL_RTX);
5265 	  dest = &XEXP (*dest, 1);
5266 	  src = &XEXP (*src, 1);
5267 	}
5268     }
5269   /* Add padding if needed.  */
5270   if (bitpos != piece_bitpos)
5271     {
5272       *dest = decl_piece_node (NULL_RTX, bitpos - piece_bitpos,
5273 			       copy ? NULL_RTX : *dest);
5274       dest = &XEXP (*dest, 1);
5275     }
5276   else if (*dest && decl_piece_bitsize (*dest) == bitsize)
5277     {
5278       gcc_assert (!copy);
5279       /* A piece with correct bitpos and bitsize already exist,
5280 	 just update the location for it and return.  */
5281       *decl_piece_varloc_ptr (*dest) = loc_note;
5282       return;
5283     }
5284   /* Add the piece that changed.  */
5285   *dest = decl_piece_node (loc_note, bitsize, copy ? NULL_RTX : *dest);
5286   dest = &XEXP (*dest, 1);
5287   /* Skip over pieces that overlap it.  */
5288   diff = bitpos - piece_bitpos + bitsize;
5289   if (!copy)
5290     src = dest;
5291   while (diff > 0 && *src)
5292     {
5293       rtx piece = *src;
5294       diff -= decl_piece_bitsize (piece);
5295       if (copy)
5296 	src = &XEXP (piece, 1);
5297       else
5298 	{
5299 	  *src = XEXP (piece, 1);
5300 	  free_EXPR_LIST_node (piece);
5301 	}
5302     }
5303   /* Add padding if needed.  */
5304   if (diff < 0 && *src)
5305     {
5306       if (!copy)
5307 	dest = src;
5308       *dest = decl_piece_node (NULL_RTX, -diff, copy ? NULL_RTX : *dest);
5309       dest = &XEXP (*dest, 1);
5310     }
5311   if (!copy)
5312     return;
5313   /* Finally copy all nodes following it.  */
5314   while (*src)
5315     {
5316       *dest = decl_piece_node (*decl_piece_varloc_ptr (*src),
5317 			       decl_piece_bitsize (*src), NULL_RTX);
5318       dest = &XEXP (*dest, 1);
5319       src = &XEXP (*src, 1);
5320     }
5321 }
5322 
5323 /* Add a variable location node to the linked list for DECL.  */
5324 
5325 static struct var_loc_node *
5326 add_var_loc_to_decl (tree decl, rtx loc_note, const char *label)
5327 {
5328   unsigned int decl_id;
5329   var_loc_list *temp;
5330   void **slot;
5331   struct var_loc_node *loc = NULL;
5332   HOST_WIDE_INT bitsize = -1, bitpos = -1;
5333 
5334   if (DECL_DEBUG_EXPR_IS_FROM (decl))
5335     {
5336       tree realdecl = DECL_DEBUG_EXPR (decl);
5337       if (realdecl && handled_component_p (realdecl))
5338 	{
5339 	  HOST_WIDE_INT maxsize;
5340 	  tree innerdecl;
5341 	  innerdecl
5342 	    = get_ref_base_and_extent (realdecl, &bitpos, &bitsize, &maxsize);
5343 	  if (!DECL_P (innerdecl)
5344 	      || DECL_IGNORED_P (innerdecl)
5345 	      || TREE_STATIC (innerdecl)
5346 	      || bitsize <= 0
5347 	      || bitpos + bitsize > 256
5348 	      || bitsize != maxsize)
5349 	    return NULL;
5350 	  decl = innerdecl;
5351 	}
5352     }
5353 
5354   decl_id = DECL_UID (decl);
5355   slot = htab_find_slot_with_hash (decl_loc_table, decl, decl_id, INSERT);
5356   if (*slot == NULL)
5357     {
5358       temp = ggc_alloc_cleared_var_loc_list ();
5359       temp->decl_id = decl_id;
5360       *slot = temp;
5361     }
5362   else
5363     temp = (var_loc_list *) *slot;
5364 
5365   /* For PARM_DECLs try to keep around the original incoming value,
5366      even if that means we'll emit a zero-range .debug_loc entry.  */
5367   if (temp->last
5368       && temp->first == temp->last
5369       && TREE_CODE (decl) == PARM_DECL
5370       && GET_CODE (temp->first->loc) == NOTE
5371       && NOTE_VAR_LOCATION_DECL (temp->first->loc) == decl
5372       && DECL_INCOMING_RTL (decl)
5373       && NOTE_VAR_LOCATION_LOC (temp->first->loc)
5374       && GET_CODE (NOTE_VAR_LOCATION_LOC (temp->first->loc))
5375 	 == GET_CODE (DECL_INCOMING_RTL (decl))
5376       && prev_real_insn (temp->first->loc) == NULL_RTX
5377       && (bitsize != -1
5378 	  || !rtx_equal_p (NOTE_VAR_LOCATION_LOC (temp->first->loc),
5379 			   NOTE_VAR_LOCATION_LOC (loc_note))
5380 	  || (NOTE_VAR_LOCATION_STATUS (temp->first->loc)
5381 	      != NOTE_VAR_LOCATION_STATUS (loc_note))))
5382     {
5383       loc = ggc_alloc_cleared_var_loc_node ();
5384       temp->first->next = loc;
5385       temp->last = loc;
5386       loc->loc = construct_piece_list (loc_note, bitpos, bitsize);
5387     }
5388   else if (temp->last)
5389     {
5390       struct var_loc_node *last = temp->last, *unused = NULL;
5391       rtx *piece_loc = NULL, last_loc_note;
5392       int piece_bitpos = 0;
5393       if (last->next)
5394 	{
5395 	  last = last->next;
5396 	  gcc_assert (last->next == NULL);
5397 	}
5398       if (bitsize != -1 && GET_CODE (last->loc) == EXPR_LIST)
5399 	{
5400 	  piece_loc = &last->loc;
5401 	  do
5402 	    {
5403 	      int cur_bitsize = decl_piece_bitsize (*piece_loc);
5404 	      if (piece_bitpos + cur_bitsize > bitpos)
5405 		break;
5406 	      piece_bitpos += cur_bitsize;
5407 	      piece_loc = &XEXP (*piece_loc, 1);
5408 	    }
5409 	  while (*piece_loc);
5410 	}
5411       /* TEMP->LAST here is either pointer to the last but one or
5412 	 last element in the chained list, LAST is pointer to the
5413 	 last element.  */
5414       if (label && strcmp (last->label, label) == 0)
5415 	{
5416 	  /* For SRA optimized variables if there weren't any real
5417 	     insns since last note, just modify the last node.  */
5418 	  if (piece_loc != NULL)
5419 	    {
5420 	      adjust_piece_list (piece_loc, NULL, NULL,
5421 				 bitpos, piece_bitpos, bitsize, loc_note);
5422 	      return NULL;
5423 	    }
5424 	  /* If the last note doesn't cover any instructions, remove it.  */
5425 	  if (temp->last != last)
5426 	    {
5427 	      temp->last->next = NULL;
5428 	      unused = last;
5429 	      last = temp->last;
5430 	      gcc_assert (strcmp (last->label, label) != 0);
5431 	    }
5432 	  else
5433 	    {
5434 	      gcc_assert (temp->first == temp->last
5435 			  || (temp->first->next == temp->last
5436 			      && TREE_CODE (decl) == PARM_DECL));
5437 	      memset (temp->last, '\0', sizeof (*temp->last));
5438 	      temp->last->loc = construct_piece_list (loc_note, bitpos, bitsize);
5439 	      return temp->last;
5440 	    }
5441 	}
5442       if (bitsize == -1 && NOTE_P (last->loc))
5443 	last_loc_note = last->loc;
5444       else if (piece_loc != NULL
5445 	       && *piece_loc != NULL_RTX
5446 	       && piece_bitpos == bitpos
5447 	       && decl_piece_bitsize (*piece_loc) == bitsize)
5448 	last_loc_note = *decl_piece_varloc_ptr (*piece_loc);
5449       else
5450 	last_loc_note = NULL_RTX;
5451       /* If the current location is the same as the end of the list,
5452 	 and either both or neither of the locations is uninitialized,
5453 	 we have nothing to do.  */
5454       if (last_loc_note == NULL_RTX
5455 	  || (!rtx_equal_p (NOTE_VAR_LOCATION_LOC (last_loc_note),
5456 			    NOTE_VAR_LOCATION_LOC (loc_note)))
5457 	  || ((NOTE_VAR_LOCATION_STATUS (last_loc_note)
5458 	       != NOTE_VAR_LOCATION_STATUS (loc_note))
5459 	      && ((NOTE_VAR_LOCATION_STATUS (last_loc_note)
5460 		   == VAR_INIT_STATUS_UNINITIALIZED)
5461 		  || (NOTE_VAR_LOCATION_STATUS (loc_note)
5462 		      == VAR_INIT_STATUS_UNINITIALIZED))))
5463 	{
5464 	  /* Add LOC to the end of list and update LAST.  If the last
5465 	     element of the list has been removed above, reuse its
5466 	     memory for the new node, otherwise allocate a new one.  */
5467 	  if (unused)
5468 	    {
5469 	      loc = unused;
5470 	      memset (loc, '\0', sizeof (*loc));
5471 	    }
5472 	  else
5473 	    loc = ggc_alloc_cleared_var_loc_node ();
5474 	  if (bitsize == -1 || piece_loc == NULL)
5475 	    loc->loc = construct_piece_list (loc_note, bitpos, bitsize);
5476 	  else
5477 	    adjust_piece_list (&loc->loc, &last->loc, piece_loc,
5478 			       bitpos, piece_bitpos, bitsize, loc_note);
5479 	  last->next = loc;
5480 	  /* Ensure TEMP->LAST will point either to the new last but one
5481 	     element of the chain, or to the last element in it.  */
5482 	  if (last != temp->last)
5483 	    temp->last = last;
5484 	}
5485       else if (unused)
5486 	ggc_free (unused);
5487     }
5488   else
5489     {
5490       loc = ggc_alloc_cleared_var_loc_node ();
5491       temp->first = loc;
5492       temp->last = loc;
5493       loc->loc = construct_piece_list (loc_note, bitpos, bitsize);
5494     }
5495   return loc;
5496 }
5497 
5498 /* Keep track of the number of spaces used to indent the
5499    output of the debugging routines that print the structure of
5500    the DIE internal representation.  */
5501 static int print_indent;
5502 
5503 /* Indent the line the number of spaces given by print_indent.  */
5504 
5505 static inline void
5506 print_spaces (FILE *outfile)
5507 {
5508   fprintf (outfile, "%*s", print_indent, "");
5509 }
5510 
5511 /* Print a type signature in hex.  */
5512 
5513 static inline void
5514 print_signature (FILE *outfile, char *sig)
5515 {
5516   int i;
5517 
5518   for (i = 0; i < DWARF_TYPE_SIGNATURE_SIZE; i++)
5519     fprintf (outfile, "%02x", sig[i] & 0xff);
5520 }
5521 
5522 /* Print the information associated with a given DIE, and its children.
5523    This routine is a debugging aid only.  */
5524 
5525 static void
5526 print_die (dw_die_ref die, FILE *outfile)
5527 {
5528   dw_attr_ref a;
5529   dw_die_ref c;
5530   unsigned ix;
5531 
5532   print_spaces (outfile);
5533   fprintf (outfile, "DIE %4ld: %s (%p)\n",
5534 	   die->die_offset, dwarf_tag_name (die->die_tag),
5535 	   (void*) die);
5536   print_spaces (outfile);
5537   fprintf (outfile, "  abbrev id: %lu", die->die_abbrev);
5538   fprintf (outfile, " offset: %ld", die->die_offset);
5539   fprintf (outfile, " mark: %d\n", die->die_mark);
5540 
5541   if (use_debug_types && die->die_id.die_type_node)
5542     {
5543       print_spaces (outfile);
5544       fprintf (outfile, "  signature: ");
5545       print_signature (outfile, die->die_id.die_type_node->signature);
5546       fprintf (outfile, "\n");
5547     }
5548 
5549   FOR_EACH_VEC_ELT (dw_attr_node, die->die_attr, ix, a)
5550     {
5551       print_spaces (outfile);
5552       fprintf (outfile, "  %s: ", dwarf_attr_name (a->dw_attr));
5553 
5554       switch (AT_class (a))
5555 	{
5556 	case dw_val_class_addr:
5557 	  fprintf (outfile, "address");
5558 	  break;
5559 	case dw_val_class_offset:
5560 	  fprintf (outfile, "offset");
5561 	  break;
5562 	case dw_val_class_loc:
5563 	  fprintf (outfile, "location descriptor");
5564 	  break;
5565 	case dw_val_class_loc_list:
5566 	  fprintf (outfile, "location list -> label:%s",
5567 		   AT_loc_list (a)->ll_symbol);
5568 	  break;
5569 	case dw_val_class_range_list:
5570 	  fprintf (outfile, "range list");
5571 	  break;
5572 	case dw_val_class_const:
5573 	  fprintf (outfile, HOST_WIDE_INT_PRINT_DEC, AT_int (a));
5574 	  break;
5575 	case dw_val_class_unsigned_const:
5576 	  fprintf (outfile, HOST_WIDE_INT_PRINT_UNSIGNED, AT_unsigned (a));
5577 	  break;
5578 	case dw_val_class_const_double:
5579 	  fprintf (outfile, "constant ("HOST_WIDE_INT_PRINT_DEC","\
5580 			    HOST_WIDE_INT_PRINT_UNSIGNED")",
5581 		   a->dw_attr_val.v.val_double.high,
5582 		   a->dw_attr_val.v.val_double.low);
5583 	  break;
5584 	case dw_val_class_vec:
5585 	  fprintf (outfile, "floating-point or vector constant");
5586 	  break;
5587 	case dw_val_class_flag:
5588 	  fprintf (outfile, "%u", AT_flag (a));
5589 	  break;
5590 	case dw_val_class_die_ref:
5591 	  if (AT_ref (a) != NULL)
5592 	    {
5593 	      if (use_debug_types && AT_ref (a)->die_id.die_type_node)
5594 	        {
5595 		  fprintf (outfile, "die -> signature: ");
5596 		  print_signature (outfile,
5597 		  		   AT_ref (a)->die_id.die_type_node->signature);
5598                 }
5599 	      else if (! use_debug_types && AT_ref (a)->die_id.die_symbol)
5600 		fprintf (outfile, "die -> label: %s",
5601 		         AT_ref (a)->die_id.die_symbol);
5602 	      else
5603 		fprintf (outfile, "die -> %ld", AT_ref (a)->die_offset);
5604 	      fprintf (outfile, " (%p)", (void *) AT_ref (a));
5605 	    }
5606 	  else
5607 	    fprintf (outfile, "die -> <null>");
5608 	  break;
5609 	case dw_val_class_vms_delta:
5610 	  fprintf (outfile, "delta: @slotcount(%s-%s)",
5611 		   AT_vms_delta2 (a), AT_vms_delta1 (a));
5612 	  break;
5613 	case dw_val_class_lbl_id:
5614 	case dw_val_class_lineptr:
5615 	case dw_val_class_macptr:
5616 	  fprintf (outfile, "label: %s", AT_lbl (a));
5617 	  break;
5618 	case dw_val_class_str:
5619 	  if (AT_string (a) != NULL)
5620 	    fprintf (outfile, "\"%s\"", AT_string (a));
5621 	  else
5622 	    fprintf (outfile, "<null>");
5623 	  break;
5624 	case dw_val_class_file:
5625 	  fprintf (outfile, "\"%s\" (%d)", AT_file (a)->filename,
5626 		   AT_file (a)->emitted_number);
5627 	  break;
5628 	case dw_val_class_data8:
5629 	  {
5630 	    int i;
5631 
5632             for (i = 0; i < 8; i++)
5633               fprintf (outfile, "%02x", a->dw_attr_val.v.val_data8[i]);
5634 	    break;
5635           }
5636 	default:
5637 	  break;
5638 	}
5639 
5640       fprintf (outfile, "\n");
5641     }
5642 
5643   if (die->die_child != NULL)
5644     {
5645       print_indent += 4;
5646       FOR_EACH_CHILD (die, c, print_die (c, outfile));
5647       print_indent -= 4;
5648     }
5649   if (print_indent == 0)
5650     fprintf (outfile, "\n");
5651 }
5652 
5653 /* Print the information collected for a given DIE.  */
5654 
5655 DEBUG_FUNCTION void
5656 debug_dwarf_die (dw_die_ref die)
5657 {
5658   print_die (die, stderr);
5659 }
5660 
5661 /* Print all DWARF information collected for the compilation unit.
5662    This routine is a debugging aid only.  */
5663 
5664 DEBUG_FUNCTION void
5665 debug_dwarf (void)
5666 {
5667   print_indent = 0;
5668   print_die (comp_unit_die (), stderr);
5669 }
5670 
5671 /* Start a new compilation unit DIE for an include file.  OLD_UNIT is the CU
5672    for the enclosing include file, if any.  BINCL_DIE is the DW_TAG_GNU_BINCL
5673    DIE that marks the start of the DIEs for this include file.  */
5674 
5675 static dw_die_ref
5676 push_new_compile_unit (dw_die_ref old_unit, dw_die_ref bincl_die)
5677 {
5678   const char *filename = get_AT_string (bincl_die, DW_AT_name);
5679   dw_die_ref new_unit = gen_compile_unit_die (filename);
5680 
5681   new_unit->die_sib = old_unit;
5682   return new_unit;
5683 }
5684 
5685 /* Close an include-file CU and reopen the enclosing one.  */
5686 
5687 static dw_die_ref
5688 pop_compile_unit (dw_die_ref old_unit)
5689 {
5690   dw_die_ref new_unit = old_unit->die_sib;
5691 
5692   old_unit->die_sib = NULL;
5693   return new_unit;
5694 }
5695 
5696 #define CHECKSUM(FOO) md5_process_bytes (&(FOO), sizeof (FOO), ctx)
5697 #define CHECKSUM_STRING(FOO) md5_process_bytes ((FOO), strlen (FOO), ctx)
5698 
5699 /* Calculate the checksum of a location expression.  */
5700 
5701 static inline void
5702 loc_checksum (dw_loc_descr_ref loc, struct md5_ctx *ctx)
5703 {
5704   int tem;
5705 
5706   tem = (loc->dtprel << 8) | ((unsigned int) loc->dw_loc_opc);
5707   CHECKSUM (tem);
5708   CHECKSUM (loc->dw_loc_oprnd1);
5709   CHECKSUM (loc->dw_loc_oprnd2);
5710 }
5711 
5712 /* Calculate the checksum of an attribute.  */
5713 
5714 static void
5715 attr_checksum (dw_attr_ref at, struct md5_ctx *ctx, int *mark)
5716 {
5717   dw_loc_descr_ref loc;
5718   rtx r;
5719 
5720   CHECKSUM (at->dw_attr);
5721 
5722   /* We don't care that this was compiled with a different compiler
5723      snapshot; if the output is the same, that's what matters.  */
5724   if (at->dw_attr == DW_AT_producer)
5725     return;
5726 
5727   switch (AT_class (at))
5728     {
5729     case dw_val_class_const:
5730       CHECKSUM (at->dw_attr_val.v.val_int);
5731       break;
5732     case dw_val_class_unsigned_const:
5733       CHECKSUM (at->dw_attr_val.v.val_unsigned);
5734       break;
5735     case dw_val_class_const_double:
5736       CHECKSUM (at->dw_attr_val.v.val_double);
5737       break;
5738     case dw_val_class_vec:
5739       CHECKSUM (at->dw_attr_val.v.val_vec);
5740       break;
5741     case dw_val_class_flag:
5742       CHECKSUM (at->dw_attr_val.v.val_flag);
5743       break;
5744     case dw_val_class_str:
5745       CHECKSUM_STRING (AT_string (at));
5746       break;
5747 
5748     case dw_val_class_addr:
5749       r = AT_addr (at);
5750       gcc_assert (GET_CODE (r) == SYMBOL_REF);
5751       CHECKSUM_STRING (XSTR (r, 0));
5752       break;
5753 
5754     case dw_val_class_offset:
5755       CHECKSUM (at->dw_attr_val.v.val_offset);
5756       break;
5757 
5758     case dw_val_class_loc:
5759       for (loc = AT_loc (at); loc; loc = loc->dw_loc_next)
5760 	loc_checksum (loc, ctx);
5761       break;
5762 
5763     case dw_val_class_die_ref:
5764       die_checksum (AT_ref (at), ctx, mark);
5765       break;
5766 
5767     case dw_val_class_fde_ref:
5768     case dw_val_class_vms_delta:
5769     case dw_val_class_lbl_id:
5770     case dw_val_class_lineptr:
5771     case dw_val_class_macptr:
5772       break;
5773 
5774     case dw_val_class_file:
5775       CHECKSUM_STRING (AT_file (at)->filename);
5776       break;
5777 
5778     case dw_val_class_data8:
5779       CHECKSUM (at->dw_attr_val.v.val_data8);
5780       break;
5781 
5782     default:
5783       break;
5784     }
5785 }
5786 
5787 /* Calculate the checksum of a DIE.  */
5788 
5789 static void
5790 die_checksum (dw_die_ref die, struct md5_ctx *ctx, int *mark)
5791 {
5792   dw_die_ref c;
5793   dw_attr_ref a;
5794   unsigned ix;
5795 
5796   /* To avoid infinite recursion.  */
5797   if (die->die_mark)
5798     {
5799       CHECKSUM (die->die_mark);
5800       return;
5801     }
5802   die->die_mark = ++(*mark);
5803 
5804   CHECKSUM (die->die_tag);
5805 
5806   FOR_EACH_VEC_ELT (dw_attr_node, die->die_attr, ix, a)
5807     attr_checksum (a, ctx, mark);
5808 
5809   FOR_EACH_CHILD (die, c, die_checksum (c, ctx, mark));
5810 }
5811 
5812 #undef CHECKSUM
5813 #undef CHECKSUM_STRING
5814 
5815 /* For DWARF-4 types, include the trailing NULL when checksumming strings.  */
5816 #define CHECKSUM(FOO) md5_process_bytes (&(FOO), sizeof (FOO), ctx)
5817 #define CHECKSUM_STRING(FOO) md5_process_bytes ((FOO), strlen (FOO) + 1, ctx)
5818 #define CHECKSUM_SLEB128(FOO) checksum_sleb128 ((FOO), ctx)
5819 #define CHECKSUM_ULEB128(FOO) checksum_uleb128 ((FOO), ctx)
5820 #define CHECKSUM_ATTR(FOO) \
5821   if (FOO) attr_checksum_ordered (die->die_tag, (FOO), ctx, mark)
5822 
5823 /* Calculate the checksum of a number in signed LEB128 format.  */
5824 
5825 static void
5826 checksum_sleb128 (HOST_WIDE_INT value, struct md5_ctx *ctx)
5827 {
5828   unsigned char byte;
5829   bool more;
5830 
5831   while (1)
5832     {
5833       byte = (value & 0x7f);
5834       value >>= 7;
5835       more = !((value == 0 && (byte & 0x40) == 0)
5836 		|| (value == -1 && (byte & 0x40) != 0));
5837       if (more)
5838 	byte |= 0x80;
5839       CHECKSUM (byte);
5840       if (!more)
5841 	break;
5842     }
5843 }
5844 
5845 /* Calculate the checksum of a number in unsigned LEB128 format.  */
5846 
5847 static void
5848 checksum_uleb128 (unsigned HOST_WIDE_INT value, struct md5_ctx *ctx)
5849 {
5850   while (1)
5851     {
5852       unsigned char byte = (value & 0x7f);
5853       value >>= 7;
5854       if (value != 0)
5855 	/* More bytes to follow.  */
5856 	byte |= 0x80;
5857       CHECKSUM (byte);
5858       if (value == 0)
5859 	break;
5860     }
5861 }
5862 
5863 /* Checksum the context of the DIE.  This adds the names of any
5864    surrounding namespaces or structures to the checksum.  */
5865 
5866 static void
5867 checksum_die_context (dw_die_ref die, struct md5_ctx *ctx)
5868 {
5869   const char *name;
5870   dw_die_ref spec;
5871   int tag = die->die_tag;
5872 
5873   if (tag != DW_TAG_namespace
5874       && tag != DW_TAG_structure_type
5875       && tag != DW_TAG_class_type)
5876     return;
5877 
5878   name = get_AT_string (die, DW_AT_name);
5879 
5880   spec = get_AT_ref (die, DW_AT_specification);
5881   if (spec != NULL)
5882     die = spec;
5883 
5884   if (die->die_parent != NULL)
5885     checksum_die_context (die->die_parent, ctx);
5886 
5887   CHECKSUM_ULEB128 ('C');
5888   CHECKSUM_ULEB128 (tag);
5889   if (name != NULL)
5890     CHECKSUM_STRING (name);
5891 }
5892 
5893 /* Calculate the checksum of a location expression.  */
5894 
5895 static inline void
5896 loc_checksum_ordered (dw_loc_descr_ref loc, struct md5_ctx *ctx)
5897 {
5898   /* Special case for lone DW_OP_plus_uconst: checksum as if the location
5899      were emitted as a DW_FORM_sdata instead of a location expression.  */
5900   if (loc->dw_loc_opc == DW_OP_plus_uconst && loc->dw_loc_next == NULL)
5901     {
5902       CHECKSUM_ULEB128 (DW_FORM_sdata);
5903       CHECKSUM_SLEB128 ((HOST_WIDE_INT) loc->dw_loc_oprnd1.v.val_unsigned);
5904       return;
5905     }
5906 
5907   /* Otherwise, just checksum the raw location expression.  */
5908   while (loc != NULL)
5909     {
5910       CHECKSUM_ULEB128 (loc->dw_loc_opc);
5911       CHECKSUM (loc->dw_loc_oprnd1);
5912       CHECKSUM (loc->dw_loc_oprnd2);
5913       loc = loc->dw_loc_next;
5914     }
5915 }
5916 
5917 /* Calculate the checksum of an attribute.  */
5918 
5919 static void
5920 attr_checksum_ordered (enum dwarf_tag tag, dw_attr_ref at,
5921 		       struct md5_ctx *ctx, int *mark)
5922 {
5923   dw_loc_descr_ref loc;
5924   rtx r;
5925 
5926   if (AT_class (at) == dw_val_class_die_ref)
5927     {
5928       dw_die_ref target_die = AT_ref (at);
5929 
5930       /* For pointer and reference types, we checksum only the (qualified)
5931 	 name of the target type (if there is a name).  For friend entries,
5932 	 we checksum only the (qualified) name of the target type or function.
5933 	 This allows the checksum to remain the same whether the target type
5934 	 is complete or not.  */
5935       if ((at->dw_attr == DW_AT_type
5936 	   && (tag == DW_TAG_pointer_type
5937 	       || tag == DW_TAG_reference_type
5938 	       || tag == DW_TAG_rvalue_reference_type
5939 	       || tag == DW_TAG_ptr_to_member_type))
5940 	  || (at->dw_attr == DW_AT_friend
5941 	      && tag == DW_TAG_friend))
5942 	{
5943 	  dw_attr_ref name_attr = get_AT (target_die, DW_AT_name);
5944 
5945 	  if (name_attr != NULL)
5946 	    {
5947 	      dw_die_ref decl = get_AT_ref (target_die, DW_AT_specification);
5948 
5949 	      if (decl == NULL)
5950 		decl = target_die;
5951 	      CHECKSUM_ULEB128 ('N');
5952 	      CHECKSUM_ULEB128 (at->dw_attr);
5953 	      if (decl->die_parent != NULL)
5954 		checksum_die_context (decl->die_parent, ctx);
5955 	      CHECKSUM_ULEB128 ('E');
5956 	      CHECKSUM_STRING (AT_string (name_attr));
5957 	      return;
5958 	    }
5959 	}
5960 
5961       /* For all other references to another DIE, we check to see if the
5962          target DIE has already been visited.  If it has, we emit a
5963          backward reference; if not, we descend recursively.  */
5964       if (target_die->die_mark > 0)
5965         {
5966 	  CHECKSUM_ULEB128 ('R');
5967 	  CHECKSUM_ULEB128 (at->dw_attr);
5968 	  CHECKSUM_ULEB128 (target_die->die_mark);
5969         }
5970       else
5971         {
5972 	  dw_die_ref decl = get_AT_ref (target_die, DW_AT_specification);
5973 
5974 	  if (decl == NULL)
5975 	    decl = target_die;
5976 	  target_die->die_mark = ++(*mark);
5977 	  CHECKSUM_ULEB128 ('T');
5978 	  CHECKSUM_ULEB128 (at->dw_attr);
5979 	  if (decl->die_parent != NULL)
5980 	    checksum_die_context (decl->die_parent, ctx);
5981 	  die_checksum_ordered (target_die, ctx, mark);
5982         }
5983       return;
5984     }
5985 
5986   CHECKSUM_ULEB128 ('A');
5987   CHECKSUM_ULEB128 (at->dw_attr);
5988 
5989   switch (AT_class (at))
5990     {
5991     case dw_val_class_const:
5992       CHECKSUM_ULEB128 (DW_FORM_sdata);
5993       CHECKSUM_SLEB128 (at->dw_attr_val.v.val_int);
5994       break;
5995 
5996     case dw_val_class_unsigned_const:
5997       CHECKSUM_ULEB128 (DW_FORM_sdata);
5998       CHECKSUM_SLEB128 ((int) at->dw_attr_val.v.val_unsigned);
5999       break;
6000 
6001     case dw_val_class_const_double:
6002       CHECKSUM_ULEB128 (DW_FORM_block);
6003       CHECKSUM_ULEB128 (sizeof (at->dw_attr_val.v.val_double));
6004       CHECKSUM (at->dw_attr_val.v.val_double);
6005       break;
6006 
6007     case dw_val_class_vec:
6008       CHECKSUM_ULEB128 (DW_FORM_block);
6009       CHECKSUM_ULEB128 (sizeof (at->dw_attr_val.v.val_vec));
6010       CHECKSUM (at->dw_attr_val.v.val_vec);
6011       break;
6012 
6013     case dw_val_class_flag:
6014       CHECKSUM_ULEB128 (DW_FORM_flag);
6015       CHECKSUM_ULEB128 (at->dw_attr_val.v.val_flag ? 1 : 0);
6016       break;
6017 
6018     case dw_val_class_str:
6019       CHECKSUM_ULEB128 (DW_FORM_string);
6020       CHECKSUM_STRING (AT_string (at));
6021       break;
6022 
6023     case dw_val_class_addr:
6024       r = AT_addr (at);
6025       gcc_assert (GET_CODE (r) == SYMBOL_REF);
6026       CHECKSUM_ULEB128 (DW_FORM_string);
6027       CHECKSUM_STRING (XSTR (r, 0));
6028       break;
6029 
6030     case dw_val_class_offset:
6031       CHECKSUM_ULEB128 (DW_FORM_sdata);
6032       CHECKSUM_ULEB128 (at->dw_attr_val.v.val_offset);
6033       break;
6034 
6035     case dw_val_class_loc:
6036       for (loc = AT_loc (at); loc; loc = loc->dw_loc_next)
6037 	loc_checksum_ordered (loc, ctx);
6038       break;
6039 
6040     case dw_val_class_fde_ref:
6041     case dw_val_class_lbl_id:
6042     case dw_val_class_lineptr:
6043     case dw_val_class_macptr:
6044       break;
6045 
6046     case dw_val_class_file:
6047       CHECKSUM_ULEB128 (DW_FORM_string);
6048       CHECKSUM_STRING (AT_file (at)->filename);
6049       break;
6050 
6051     case dw_val_class_data8:
6052       CHECKSUM (at->dw_attr_val.v.val_data8);
6053       break;
6054 
6055     default:
6056       break;
6057     }
6058 }
6059 
6060 struct checksum_attributes
6061 {
6062   dw_attr_ref at_name;
6063   dw_attr_ref at_type;
6064   dw_attr_ref at_friend;
6065   dw_attr_ref at_accessibility;
6066   dw_attr_ref at_address_class;
6067   dw_attr_ref at_allocated;
6068   dw_attr_ref at_artificial;
6069   dw_attr_ref at_associated;
6070   dw_attr_ref at_binary_scale;
6071   dw_attr_ref at_bit_offset;
6072   dw_attr_ref at_bit_size;
6073   dw_attr_ref at_bit_stride;
6074   dw_attr_ref at_byte_size;
6075   dw_attr_ref at_byte_stride;
6076   dw_attr_ref at_const_value;
6077   dw_attr_ref at_containing_type;
6078   dw_attr_ref at_count;
6079   dw_attr_ref at_data_location;
6080   dw_attr_ref at_data_member_location;
6081   dw_attr_ref at_decimal_scale;
6082   dw_attr_ref at_decimal_sign;
6083   dw_attr_ref at_default_value;
6084   dw_attr_ref at_digit_count;
6085   dw_attr_ref at_discr;
6086   dw_attr_ref at_discr_list;
6087   dw_attr_ref at_discr_value;
6088   dw_attr_ref at_encoding;
6089   dw_attr_ref at_endianity;
6090   dw_attr_ref at_explicit;
6091   dw_attr_ref at_is_optional;
6092   dw_attr_ref at_location;
6093   dw_attr_ref at_lower_bound;
6094   dw_attr_ref at_mutable;
6095   dw_attr_ref at_ordering;
6096   dw_attr_ref at_picture_string;
6097   dw_attr_ref at_prototyped;
6098   dw_attr_ref at_small;
6099   dw_attr_ref at_segment;
6100   dw_attr_ref at_string_length;
6101   dw_attr_ref at_threads_scaled;
6102   dw_attr_ref at_upper_bound;
6103   dw_attr_ref at_use_location;
6104   dw_attr_ref at_use_UTF8;
6105   dw_attr_ref at_variable_parameter;
6106   dw_attr_ref at_virtuality;
6107   dw_attr_ref at_visibility;
6108   dw_attr_ref at_vtable_elem_location;
6109 };
6110 
6111 /* Collect the attributes that we will want to use for the checksum.  */
6112 
6113 static void
6114 collect_checksum_attributes (struct checksum_attributes *attrs, dw_die_ref die)
6115 {
6116   dw_attr_ref a;
6117   unsigned ix;
6118 
6119   FOR_EACH_VEC_ELT (dw_attr_node, die->die_attr, ix, a)
6120     {
6121       switch (a->dw_attr)
6122         {
6123         case DW_AT_name:
6124           attrs->at_name = a;
6125           break;
6126         case DW_AT_type:
6127           attrs->at_type = a;
6128           break;
6129         case DW_AT_friend:
6130           attrs->at_friend = a;
6131           break;
6132         case DW_AT_accessibility:
6133           attrs->at_accessibility = a;
6134           break;
6135         case DW_AT_address_class:
6136           attrs->at_address_class = a;
6137           break;
6138         case DW_AT_allocated:
6139           attrs->at_allocated = a;
6140           break;
6141         case DW_AT_artificial:
6142           attrs->at_artificial = a;
6143           break;
6144         case DW_AT_associated:
6145           attrs->at_associated = a;
6146           break;
6147         case DW_AT_binary_scale:
6148           attrs->at_binary_scale = a;
6149           break;
6150         case DW_AT_bit_offset:
6151           attrs->at_bit_offset = a;
6152           break;
6153         case DW_AT_bit_size:
6154           attrs->at_bit_size = a;
6155           break;
6156         case DW_AT_bit_stride:
6157           attrs->at_bit_stride = a;
6158           break;
6159         case DW_AT_byte_size:
6160           attrs->at_byte_size = a;
6161           break;
6162         case DW_AT_byte_stride:
6163           attrs->at_byte_stride = a;
6164           break;
6165         case DW_AT_const_value:
6166           attrs->at_const_value = a;
6167           break;
6168         case DW_AT_containing_type:
6169           attrs->at_containing_type = a;
6170           break;
6171         case DW_AT_count:
6172           attrs->at_count = a;
6173           break;
6174         case DW_AT_data_location:
6175           attrs->at_data_location = a;
6176           break;
6177         case DW_AT_data_member_location:
6178           attrs->at_data_member_location = a;
6179           break;
6180         case DW_AT_decimal_scale:
6181           attrs->at_decimal_scale = a;
6182           break;
6183         case DW_AT_decimal_sign:
6184           attrs->at_decimal_sign = a;
6185           break;
6186         case DW_AT_default_value:
6187           attrs->at_default_value = a;
6188           break;
6189         case DW_AT_digit_count:
6190           attrs->at_digit_count = a;
6191           break;
6192         case DW_AT_discr:
6193           attrs->at_discr = a;
6194           break;
6195         case DW_AT_discr_list:
6196           attrs->at_discr_list = a;
6197           break;
6198         case DW_AT_discr_value:
6199           attrs->at_discr_value = a;
6200           break;
6201         case DW_AT_encoding:
6202           attrs->at_encoding = a;
6203           break;
6204         case DW_AT_endianity:
6205           attrs->at_endianity = a;
6206           break;
6207         case DW_AT_explicit:
6208           attrs->at_explicit = a;
6209           break;
6210         case DW_AT_is_optional:
6211           attrs->at_is_optional = a;
6212           break;
6213         case DW_AT_location:
6214           attrs->at_location = a;
6215           break;
6216         case DW_AT_lower_bound:
6217           attrs->at_lower_bound = a;
6218           break;
6219         case DW_AT_mutable:
6220           attrs->at_mutable = a;
6221           break;
6222         case DW_AT_ordering:
6223           attrs->at_ordering = a;
6224           break;
6225         case DW_AT_picture_string:
6226           attrs->at_picture_string = a;
6227           break;
6228         case DW_AT_prototyped:
6229           attrs->at_prototyped = a;
6230           break;
6231         case DW_AT_small:
6232           attrs->at_small = a;
6233           break;
6234         case DW_AT_segment:
6235           attrs->at_segment = a;
6236           break;
6237         case DW_AT_string_length:
6238           attrs->at_string_length = a;
6239           break;
6240         case DW_AT_threads_scaled:
6241           attrs->at_threads_scaled = a;
6242           break;
6243         case DW_AT_upper_bound:
6244           attrs->at_upper_bound = a;
6245           break;
6246         case DW_AT_use_location:
6247           attrs->at_use_location = a;
6248           break;
6249         case DW_AT_use_UTF8:
6250           attrs->at_use_UTF8 = a;
6251           break;
6252         case DW_AT_variable_parameter:
6253           attrs->at_variable_parameter = a;
6254           break;
6255         case DW_AT_virtuality:
6256           attrs->at_virtuality = a;
6257           break;
6258         case DW_AT_visibility:
6259           attrs->at_visibility = a;
6260           break;
6261         case DW_AT_vtable_elem_location:
6262           attrs->at_vtable_elem_location = a;
6263           break;
6264         default:
6265           break;
6266         }
6267     }
6268 }
6269 
6270 /* Calculate the checksum of a DIE, using an ordered subset of attributes.  */
6271 
6272 static void
6273 die_checksum_ordered (dw_die_ref die, struct md5_ctx *ctx, int *mark)
6274 {
6275   dw_die_ref c;
6276   dw_die_ref decl;
6277   struct checksum_attributes attrs;
6278 
6279   CHECKSUM_ULEB128 ('D');
6280   CHECKSUM_ULEB128 (die->die_tag);
6281 
6282   memset (&attrs, 0, sizeof (attrs));
6283 
6284   decl = get_AT_ref (die, DW_AT_specification);
6285   if (decl != NULL)
6286     collect_checksum_attributes (&attrs, decl);
6287   collect_checksum_attributes (&attrs, die);
6288 
6289   CHECKSUM_ATTR (attrs.at_name);
6290   CHECKSUM_ATTR (attrs.at_accessibility);
6291   CHECKSUM_ATTR (attrs.at_address_class);
6292   CHECKSUM_ATTR (attrs.at_allocated);
6293   CHECKSUM_ATTR (attrs.at_artificial);
6294   CHECKSUM_ATTR (attrs.at_associated);
6295   CHECKSUM_ATTR (attrs.at_binary_scale);
6296   CHECKSUM_ATTR (attrs.at_bit_offset);
6297   CHECKSUM_ATTR (attrs.at_bit_size);
6298   CHECKSUM_ATTR (attrs.at_bit_stride);
6299   CHECKSUM_ATTR (attrs.at_byte_size);
6300   CHECKSUM_ATTR (attrs.at_byte_stride);
6301   CHECKSUM_ATTR (attrs.at_const_value);
6302   CHECKSUM_ATTR (attrs.at_containing_type);
6303   CHECKSUM_ATTR (attrs.at_count);
6304   CHECKSUM_ATTR (attrs.at_data_location);
6305   CHECKSUM_ATTR (attrs.at_data_member_location);
6306   CHECKSUM_ATTR (attrs.at_decimal_scale);
6307   CHECKSUM_ATTR (attrs.at_decimal_sign);
6308   CHECKSUM_ATTR (attrs.at_default_value);
6309   CHECKSUM_ATTR (attrs.at_digit_count);
6310   CHECKSUM_ATTR (attrs.at_discr);
6311   CHECKSUM_ATTR (attrs.at_discr_list);
6312   CHECKSUM_ATTR (attrs.at_discr_value);
6313   CHECKSUM_ATTR (attrs.at_encoding);
6314   CHECKSUM_ATTR (attrs.at_endianity);
6315   CHECKSUM_ATTR (attrs.at_explicit);
6316   CHECKSUM_ATTR (attrs.at_is_optional);
6317   CHECKSUM_ATTR (attrs.at_location);
6318   CHECKSUM_ATTR (attrs.at_lower_bound);
6319   CHECKSUM_ATTR (attrs.at_mutable);
6320   CHECKSUM_ATTR (attrs.at_ordering);
6321   CHECKSUM_ATTR (attrs.at_picture_string);
6322   CHECKSUM_ATTR (attrs.at_prototyped);
6323   CHECKSUM_ATTR (attrs.at_small);
6324   CHECKSUM_ATTR (attrs.at_segment);
6325   CHECKSUM_ATTR (attrs.at_string_length);
6326   CHECKSUM_ATTR (attrs.at_threads_scaled);
6327   CHECKSUM_ATTR (attrs.at_upper_bound);
6328   CHECKSUM_ATTR (attrs.at_use_location);
6329   CHECKSUM_ATTR (attrs.at_use_UTF8);
6330   CHECKSUM_ATTR (attrs.at_variable_parameter);
6331   CHECKSUM_ATTR (attrs.at_virtuality);
6332   CHECKSUM_ATTR (attrs.at_visibility);
6333   CHECKSUM_ATTR (attrs.at_vtable_elem_location);
6334   CHECKSUM_ATTR (attrs.at_type);
6335   CHECKSUM_ATTR (attrs.at_friend);
6336 
6337   /* Checksum the child DIEs, except for nested types and member functions.  */
6338   c = die->die_child;
6339   if (c) do {
6340     dw_attr_ref name_attr;
6341 
6342     c = c->die_sib;
6343     name_attr = get_AT (c, DW_AT_name);
6344     if ((is_type_die (c) || c->die_tag == DW_TAG_subprogram)
6345         && name_attr != NULL)
6346       {
6347         CHECKSUM_ULEB128 ('S');
6348         CHECKSUM_ULEB128 (c->die_tag);
6349         CHECKSUM_STRING (AT_string (name_attr));
6350       }
6351     else
6352       {
6353         /* Mark this DIE so it gets processed when unmarking.  */
6354         if (c->die_mark == 0)
6355           c->die_mark = -1;
6356         die_checksum_ordered (c, ctx, mark);
6357       }
6358   } while (c != die->die_child);
6359 
6360   CHECKSUM_ULEB128 (0);
6361 }
6362 
6363 #undef CHECKSUM
6364 #undef CHECKSUM_STRING
6365 #undef CHECKSUM_ATTR
6366 #undef CHECKSUM_LEB128
6367 #undef CHECKSUM_ULEB128
6368 
6369 /* Generate the type signature for DIE.  This is computed by generating an
6370    MD5 checksum over the DIE's tag, its relevant attributes, and its
6371    children.  Attributes that are references to other DIEs are processed
6372    by recursion, using the MARK field to prevent infinite recursion.
6373    If the DIE is nested inside a namespace or another type, we also
6374    need to include that context in the signature.  The lower 64 bits
6375    of the resulting MD5 checksum comprise the signature.  */
6376 
6377 static void
6378 generate_type_signature (dw_die_ref die, comdat_type_node *type_node)
6379 {
6380   int mark;
6381   const char *name;
6382   unsigned char checksum[16];
6383   struct md5_ctx ctx;
6384   dw_die_ref decl;
6385 
6386   name = get_AT_string (die, DW_AT_name);
6387   decl = get_AT_ref (die, DW_AT_specification);
6388 
6389   /* First, compute a signature for just the type name (and its surrounding
6390      context, if any.  This is stored in the type unit DIE for link-time
6391      ODR (one-definition rule) checking.  */
6392 
6393   if (is_cxx() && name != NULL)
6394     {
6395       md5_init_ctx (&ctx);
6396 
6397       /* Checksum the names of surrounding namespaces and structures.  */
6398       if (decl != NULL && decl->die_parent != NULL)
6399         checksum_die_context (decl->die_parent, &ctx);
6400 
6401       md5_process_bytes (&die->die_tag, sizeof (die->die_tag), &ctx);
6402       md5_process_bytes (name, strlen (name) + 1, &ctx);
6403       md5_finish_ctx (&ctx, checksum);
6404 
6405       add_AT_data8 (type_node->root_die, DW_AT_GNU_odr_signature, &checksum[8]);
6406     }
6407 
6408   /* Next, compute the complete type signature.  */
6409 
6410   md5_init_ctx (&ctx);
6411   mark = 1;
6412   die->die_mark = mark;
6413 
6414   /* Checksum the names of surrounding namespaces and structures.  */
6415   if (decl != NULL && decl->die_parent != NULL)
6416     checksum_die_context (decl->die_parent, &ctx);
6417 
6418   /* Checksum the DIE and its children.  */
6419   die_checksum_ordered (die, &ctx, &mark);
6420   unmark_all_dies (die);
6421   md5_finish_ctx (&ctx, checksum);
6422 
6423   /* Store the signature in the type node and link the type DIE and the
6424      type node together.  */
6425   memcpy (type_node->signature, &checksum[16 - DWARF_TYPE_SIGNATURE_SIZE],
6426           DWARF_TYPE_SIGNATURE_SIZE);
6427   die->die_id.die_type_node = type_node;
6428   type_node->type_die = die;
6429 
6430   /* If the DIE is a specification, link its declaration to the type node
6431      as well.  */
6432   if (decl != NULL)
6433     decl->die_id.die_type_node = type_node;
6434 }
6435 
6436 /* Do the location expressions look same?  */
6437 static inline int
6438 same_loc_p (dw_loc_descr_ref loc1, dw_loc_descr_ref loc2, int *mark)
6439 {
6440   return loc1->dw_loc_opc == loc2->dw_loc_opc
6441 	 && same_dw_val_p (&loc1->dw_loc_oprnd1, &loc2->dw_loc_oprnd1, mark)
6442 	 && same_dw_val_p (&loc1->dw_loc_oprnd2, &loc2->dw_loc_oprnd2, mark);
6443 }
6444 
6445 /* Do the values look the same?  */
6446 static int
6447 same_dw_val_p (const dw_val_node *v1, const dw_val_node *v2, int *mark)
6448 {
6449   dw_loc_descr_ref loc1, loc2;
6450   rtx r1, r2;
6451 
6452   if (v1->val_class != v2->val_class)
6453     return 0;
6454 
6455   switch (v1->val_class)
6456     {
6457     case dw_val_class_const:
6458       return v1->v.val_int == v2->v.val_int;
6459     case dw_val_class_unsigned_const:
6460       return v1->v.val_unsigned == v2->v.val_unsigned;
6461     case dw_val_class_const_double:
6462       return v1->v.val_double.high == v2->v.val_double.high
6463 	     && v1->v.val_double.low == v2->v.val_double.low;
6464     case dw_val_class_vec:
6465       if (v1->v.val_vec.length != v2->v.val_vec.length
6466 	  || v1->v.val_vec.elt_size != v2->v.val_vec.elt_size)
6467 	return 0;
6468       if (memcmp (v1->v.val_vec.array, v2->v.val_vec.array,
6469 		  v1->v.val_vec.length * v1->v.val_vec.elt_size))
6470 	return 0;
6471       return 1;
6472     case dw_val_class_flag:
6473       return v1->v.val_flag == v2->v.val_flag;
6474     case dw_val_class_str:
6475       return !strcmp(v1->v.val_str->str, v2->v.val_str->str);
6476 
6477     case dw_val_class_addr:
6478       r1 = v1->v.val_addr;
6479       r2 = v2->v.val_addr;
6480       if (GET_CODE (r1) != GET_CODE (r2))
6481 	return 0;
6482       return !rtx_equal_p (r1, r2);
6483 
6484     case dw_val_class_offset:
6485       return v1->v.val_offset == v2->v.val_offset;
6486 
6487     case dw_val_class_loc:
6488       for (loc1 = v1->v.val_loc, loc2 = v2->v.val_loc;
6489 	   loc1 && loc2;
6490 	   loc1 = loc1->dw_loc_next, loc2 = loc2->dw_loc_next)
6491 	if (!same_loc_p (loc1, loc2, mark))
6492 	  return 0;
6493       return !loc1 && !loc2;
6494 
6495     case dw_val_class_die_ref:
6496       return same_die_p (v1->v.val_die_ref.die, v2->v.val_die_ref.die, mark);
6497 
6498     case dw_val_class_fde_ref:
6499     case dw_val_class_vms_delta:
6500     case dw_val_class_lbl_id:
6501     case dw_val_class_lineptr:
6502     case dw_val_class_macptr:
6503       return 1;
6504 
6505     case dw_val_class_file:
6506       return v1->v.val_file == v2->v.val_file;
6507 
6508     case dw_val_class_data8:
6509       return !memcmp (v1->v.val_data8, v2->v.val_data8, 8);
6510 
6511     default:
6512       return 1;
6513     }
6514 }
6515 
6516 /* Do the attributes look the same?  */
6517 
6518 static int
6519 same_attr_p (dw_attr_ref at1, dw_attr_ref at2, int *mark)
6520 {
6521   if (at1->dw_attr != at2->dw_attr)
6522     return 0;
6523 
6524   /* We don't care that this was compiled with a different compiler
6525      snapshot; if the output is the same, that's what matters. */
6526   if (at1->dw_attr == DW_AT_producer)
6527     return 1;
6528 
6529   return same_dw_val_p (&at1->dw_attr_val, &at2->dw_attr_val, mark);
6530 }
6531 
6532 /* Do the dies look the same?  */
6533 
6534 static int
6535 same_die_p (dw_die_ref die1, dw_die_ref die2, int *mark)
6536 {
6537   dw_die_ref c1, c2;
6538   dw_attr_ref a1;
6539   unsigned ix;
6540 
6541   /* To avoid infinite recursion.  */
6542   if (die1->die_mark)
6543     return die1->die_mark == die2->die_mark;
6544   die1->die_mark = die2->die_mark = ++(*mark);
6545 
6546   if (die1->die_tag != die2->die_tag)
6547     return 0;
6548 
6549   if (VEC_length (dw_attr_node, die1->die_attr)
6550       != VEC_length (dw_attr_node, die2->die_attr))
6551     return 0;
6552 
6553   FOR_EACH_VEC_ELT (dw_attr_node, die1->die_attr, ix, a1)
6554     if (!same_attr_p (a1, VEC_index (dw_attr_node, die2->die_attr, ix), mark))
6555       return 0;
6556 
6557   c1 = die1->die_child;
6558   c2 = die2->die_child;
6559   if (! c1)
6560     {
6561       if (c2)
6562 	return 0;
6563     }
6564   else
6565     for (;;)
6566       {
6567 	if (!same_die_p (c1, c2, mark))
6568 	  return 0;
6569 	c1 = c1->die_sib;
6570 	c2 = c2->die_sib;
6571 	if (c1 == die1->die_child)
6572 	  {
6573 	    if (c2 == die2->die_child)
6574 	      break;
6575 	    else
6576 	      return 0;
6577 	  }
6578     }
6579 
6580   return 1;
6581 }
6582 
6583 /* Do the dies look the same?  Wrapper around same_die_p.  */
6584 
6585 static int
6586 same_die_p_wrap (dw_die_ref die1, dw_die_ref die2)
6587 {
6588   int mark = 0;
6589   int ret = same_die_p (die1, die2, &mark);
6590 
6591   unmark_all_dies (die1);
6592   unmark_all_dies (die2);
6593 
6594   return ret;
6595 }
6596 
6597 /* The prefix to attach to symbols on DIEs in the current comdat debug
6598    info section.  */
6599 static char *comdat_symbol_id;
6600 
6601 /* The index of the current symbol within the current comdat CU.  */
6602 static unsigned int comdat_symbol_number;
6603 
6604 /* Calculate the MD5 checksum of the compilation unit DIE UNIT_DIE and its
6605    children, and set comdat_symbol_id accordingly.  */
6606 
6607 static void
6608 compute_section_prefix (dw_die_ref unit_die)
6609 {
6610   const char *die_name = get_AT_string (unit_die, DW_AT_name);
6611   const char *base = die_name ? lbasename (die_name) : "anonymous";
6612   char *name = XALLOCAVEC (char, strlen (base) + 64);
6613   char *p;
6614   int i, mark;
6615   unsigned char checksum[16];
6616   struct md5_ctx ctx;
6617 
6618   /* Compute the checksum of the DIE, then append part of it as hex digits to
6619      the name filename of the unit.  */
6620 
6621   md5_init_ctx (&ctx);
6622   mark = 0;
6623   die_checksum (unit_die, &ctx, &mark);
6624   unmark_all_dies (unit_die);
6625   md5_finish_ctx (&ctx, checksum);
6626 
6627   sprintf (name, "%s.", base);
6628   clean_symbol_name (name);
6629 
6630   p = name + strlen (name);
6631   for (i = 0; i < 4; i++)
6632     {
6633       sprintf (p, "%.2x", checksum[i]);
6634       p += 2;
6635     }
6636 
6637   comdat_symbol_id = unit_die->die_id.die_symbol = xstrdup (name);
6638   comdat_symbol_number = 0;
6639 }
6640 
6641 /* Returns nonzero if DIE represents a type, in the sense of TYPE_P.  */
6642 
6643 static int
6644 is_type_die (dw_die_ref die)
6645 {
6646   switch (die->die_tag)
6647     {
6648     case DW_TAG_array_type:
6649     case DW_TAG_class_type:
6650     case DW_TAG_interface_type:
6651     case DW_TAG_enumeration_type:
6652     case DW_TAG_pointer_type:
6653     case DW_TAG_reference_type:
6654     case DW_TAG_rvalue_reference_type:
6655     case DW_TAG_string_type:
6656     case DW_TAG_structure_type:
6657     case DW_TAG_subroutine_type:
6658     case DW_TAG_union_type:
6659     case DW_TAG_ptr_to_member_type:
6660     case DW_TAG_set_type:
6661     case DW_TAG_subrange_type:
6662     case DW_TAG_base_type:
6663     case DW_TAG_const_type:
6664     case DW_TAG_file_type:
6665     case DW_TAG_packed_type:
6666     case DW_TAG_volatile_type:
6667     case DW_TAG_typedef:
6668       return 1;
6669     default:
6670       return 0;
6671     }
6672 }
6673 
6674 /* Returns 1 iff C is the sort of DIE that should go into a COMDAT CU.
6675    Basically, we want to choose the bits that are likely to be shared between
6676    compilations (types) and leave out the bits that are specific to individual
6677    compilations (functions).  */
6678 
6679 static int
6680 is_comdat_die (dw_die_ref c)
6681 {
6682   /* I think we want to leave base types and __vtbl_ptr_type in the main CU, as
6683      we do for stabs.  The advantage is a greater likelihood of sharing between
6684      objects that don't include headers in the same order (and therefore would
6685      put the base types in a different comdat).  jason 8/28/00 */
6686 
6687   if (c->die_tag == DW_TAG_base_type)
6688     return 0;
6689 
6690   if (c->die_tag == DW_TAG_pointer_type
6691       || c->die_tag == DW_TAG_reference_type
6692       || c->die_tag == DW_TAG_rvalue_reference_type
6693       || c->die_tag == DW_TAG_const_type
6694       || c->die_tag == DW_TAG_volatile_type)
6695     {
6696       dw_die_ref t = get_AT_ref (c, DW_AT_type);
6697 
6698       return t ? is_comdat_die (t) : 0;
6699     }
6700 
6701   return is_type_die (c);
6702 }
6703 
6704 /* Returns 1 iff C is the sort of DIE that might be referred to from another
6705    compilation unit.  */
6706 
6707 static int
6708 is_symbol_die (dw_die_ref c)
6709 {
6710   return (is_type_die (c)
6711 	  || is_declaration_die (c)
6712 	  || c->die_tag == DW_TAG_namespace
6713 	  || c->die_tag == DW_TAG_module);
6714 }
6715 
6716 /* Returns true iff C is a compile-unit DIE.  */
6717 
6718 static inline bool
6719 is_cu_die (dw_die_ref c)
6720 {
6721   return c && c->die_tag == DW_TAG_compile_unit;
6722 }
6723 
6724 static char *
6725 gen_internal_sym (const char *prefix)
6726 {
6727   char buf[256];
6728 
6729   ASM_GENERATE_INTERNAL_LABEL (buf, prefix, label_num++);
6730   return xstrdup (buf);
6731 }
6732 
6733 /* Assign symbols to all worthy DIEs under DIE.  */
6734 
6735 static void
6736 assign_symbol_names (dw_die_ref die)
6737 {
6738   dw_die_ref c;
6739 
6740   if (is_symbol_die (die))
6741     {
6742       if (comdat_symbol_id)
6743 	{
6744 	  char *p = XALLOCAVEC (char, strlen (comdat_symbol_id) + 64);
6745 
6746 	  sprintf (p, "%s.%s.%x", DIE_LABEL_PREFIX,
6747 		   comdat_symbol_id, comdat_symbol_number++);
6748 	  die->die_id.die_symbol = xstrdup (p);
6749 	}
6750       else
6751 	die->die_id.die_symbol = gen_internal_sym ("LDIE");
6752     }
6753 
6754   FOR_EACH_CHILD (die, c, assign_symbol_names (c));
6755 }
6756 
6757 struct cu_hash_table_entry
6758 {
6759   dw_die_ref cu;
6760   unsigned min_comdat_num, max_comdat_num;
6761   struct cu_hash_table_entry *next;
6762 };
6763 
6764 /* Routines to manipulate hash table of CUs.  */
6765 static hashval_t
6766 htab_cu_hash (const void *of)
6767 {
6768   const struct cu_hash_table_entry *const entry =
6769     (const struct cu_hash_table_entry *) of;
6770 
6771   return htab_hash_string (entry->cu->die_id.die_symbol);
6772 }
6773 
6774 static int
6775 htab_cu_eq (const void *of1, const void *of2)
6776 {
6777   const struct cu_hash_table_entry *const entry1 =
6778     (const struct cu_hash_table_entry *) of1;
6779   const struct die_struct *const entry2 = (const struct die_struct *) of2;
6780 
6781   return !strcmp (entry1->cu->die_id.die_symbol, entry2->die_id.die_symbol);
6782 }
6783 
6784 static void
6785 htab_cu_del (void *what)
6786 {
6787   struct cu_hash_table_entry *next,
6788     *entry = (struct cu_hash_table_entry *) what;
6789 
6790   while (entry)
6791     {
6792       next = entry->next;
6793       free (entry);
6794       entry = next;
6795     }
6796 }
6797 
6798 /* Check whether we have already seen this CU and set up SYM_NUM
6799    accordingly.  */
6800 static int
6801 check_duplicate_cu (dw_die_ref cu, htab_t htable, unsigned int *sym_num)
6802 {
6803   struct cu_hash_table_entry dummy;
6804   struct cu_hash_table_entry **slot, *entry, *last = &dummy;
6805 
6806   dummy.max_comdat_num = 0;
6807 
6808   slot = (struct cu_hash_table_entry **)
6809     htab_find_slot_with_hash (htable, cu, htab_hash_string (cu->die_id.die_symbol),
6810 	INSERT);
6811   entry = *slot;
6812 
6813   for (; entry; last = entry, entry = entry->next)
6814     {
6815       if (same_die_p_wrap (cu, entry->cu))
6816 	break;
6817     }
6818 
6819   if (entry)
6820     {
6821       *sym_num = entry->min_comdat_num;
6822       return 1;
6823     }
6824 
6825   entry = XCNEW (struct cu_hash_table_entry);
6826   entry->cu = cu;
6827   entry->min_comdat_num = *sym_num = last->max_comdat_num;
6828   entry->next = *slot;
6829   *slot = entry;
6830 
6831   return 0;
6832 }
6833 
6834 /* Record SYM_NUM to record of CU in HTABLE.  */
6835 static void
6836 record_comdat_symbol_number (dw_die_ref cu, htab_t htable, unsigned int sym_num)
6837 {
6838   struct cu_hash_table_entry **slot, *entry;
6839 
6840   slot = (struct cu_hash_table_entry **)
6841     htab_find_slot_with_hash (htable, cu, htab_hash_string (cu->die_id.die_symbol),
6842 	NO_INSERT);
6843   entry = *slot;
6844 
6845   entry->max_comdat_num = sym_num;
6846 }
6847 
6848 /* Traverse the DIE (which is always comp_unit_die), and set up
6849    additional compilation units for each of the include files we see
6850    bracketed by BINCL/EINCL.  */
6851 
6852 static void
6853 break_out_includes (dw_die_ref die)
6854 {
6855   dw_die_ref c;
6856   dw_die_ref unit = NULL;
6857   limbo_die_node *node, **pnode;
6858   htab_t cu_hash_table;
6859 
6860   c = die->die_child;
6861   if (c) do {
6862     dw_die_ref prev = c;
6863     c = c->die_sib;
6864     while (c->die_tag == DW_TAG_GNU_BINCL || c->die_tag == DW_TAG_GNU_EINCL
6865 	   || (unit && is_comdat_die (c)))
6866       {
6867 	dw_die_ref next = c->die_sib;
6868 
6869 	/* This DIE is for a secondary CU; remove it from the main one.  */
6870 	remove_child_with_prev (c, prev);
6871 
6872 	if (c->die_tag == DW_TAG_GNU_BINCL)
6873 	  unit = push_new_compile_unit (unit, c);
6874 	else if (c->die_tag == DW_TAG_GNU_EINCL)
6875 	  unit = pop_compile_unit (unit);
6876 	else
6877 	  add_child_die (unit, c);
6878 	c = next;
6879 	if (c == die->die_child)
6880 	  break;
6881       }
6882   } while (c != die->die_child);
6883 
6884 #if 0
6885   /* We can only use this in debugging, since the frontend doesn't check
6886      to make sure that we leave every include file we enter.  */
6887   gcc_assert (!unit);
6888 #endif
6889 
6890   assign_symbol_names (die);
6891   cu_hash_table = htab_create (10, htab_cu_hash, htab_cu_eq, htab_cu_del);
6892   for (node = limbo_die_list, pnode = &limbo_die_list;
6893        node;
6894        node = node->next)
6895     {
6896       int is_dupl;
6897 
6898       compute_section_prefix (node->die);
6899       is_dupl = check_duplicate_cu (node->die, cu_hash_table,
6900 			&comdat_symbol_number);
6901       assign_symbol_names (node->die);
6902       if (is_dupl)
6903 	*pnode = node->next;
6904       else
6905 	{
6906 	  pnode = &node->next;
6907 	  record_comdat_symbol_number (node->die, cu_hash_table,
6908 		comdat_symbol_number);
6909 	}
6910     }
6911   htab_delete (cu_hash_table);
6912 }
6913 
6914 /* Return non-zero if this DIE is a declaration.  */
6915 
6916 static int
6917 is_declaration_die (dw_die_ref die)
6918 {
6919   dw_attr_ref a;
6920   unsigned ix;
6921 
6922   FOR_EACH_VEC_ELT (dw_attr_node, die->die_attr, ix, a)
6923     if (a->dw_attr == DW_AT_declaration)
6924       return 1;
6925 
6926   return 0;
6927 }
6928 
6929 /* Return non-zero if this DIE is nested inside a subprogram.  */
6930 
6931 static int
6932 is_nested_in_subprogram (dw_die_ref die)
6933 {
6934   dw_die_ref decl = get_AT_ref (die, DW_AT_specification);
6935 
6936   if (decl == NULL)
6937     decl = die;
6938   return local_scope_p (decl);
6939 }
6940 
6941 /* Return non-zero if this DIE contains a defining declaration of a
6942    subprogram.  */
6943 
6944 static int
6945 contains_subprogram_definition (dw_die_ref die)
6946 {
6947   dw_die_ref c;
6948 
6949   if (die->die_tag == DW_TAG_subprogram && ! is_declaration_die (die))
6950     return 1;
6951   FOR_EACH_CHILD (die, c, if (contains_subprogram_definition(c)) return 1);
6952   return 0;
6953 }
6954 
6955 /* Return non-zero if this is a type DIE that should be moved to a
6956    COMDAT .debug_types section.  */
6957 
6958 static int
6959 should_move_die_to_comdat (dw_die_ref die)
6960 {
6961   switch (die->die_tag)
6962     {
6963     case DW_TAG_class_type:
6964     case DW_TAG_structure_type:
6965     case DW_TAG_enumeration_type:
6966     case DW_TAG_union_type:
6967       /* Don't move declarations, inlined instances, or types nested in a
6968 	 subprogram.  */
6969       if (is_declaration_die (die)
6970           || get_AT (die, DW_AT_abstract_origin)
6971           || is_nested_in_subprogram (die))
6972         return 0;
6973       /* A type definition should never contain a subprogram definition.  */
6974       gcc_assert (!contains_subprogram_definition (die));
6975       return 1;
6976     case DW_TAG_array_type:
6977     case DW_TAG_interface_type:
6978     case DW_TAG_pointer_type:
6979     case DW_TAG_reference_type:
6980     case DW_TAG_rvalue_reference_type:
6981     case DW_TAG_string_type:
6982     case DW_TAG_subroutine_type:
6983     case DW_TAG_ptr_to_member_type:
6984     case DW_TAG_set_type:
6985     case DW_TAG_subrange_type:
6986     case DW_TAG_base_type:
6987     case DW_TAG_const_type:
6988     case DW_TAG_file_type:
6989     case DW_TAG_packed_type:
6990     case DW_TAG_volatile_type:
6991     case DW_TAG_typedef:
6992     default:
6993       return 0;
6994     }
6995 }
6996 
6997 /* Make a clone of DIE.  */
6998 
6999 static dw_die_ref
7000 clone_die (dw_die_ref die)
7001 {
7002   dw_die_ref clone;
7003   dw_attr_ref a;
7004   unsigned ix;
7005 
7006   clone = ggc_alloc_cleared_die_node ();
7007   clone->die_tag = die->die_tag;
7008 
7009   FOR_EACH_VEC_ELT (dw_attr_node, die->die_attr, ix, a)
7010     add_dwarf_attr (clone, a);
7011 
7012   return clone;
7013 }
7014 
7015 /* Make a clone of the tree rooted at DIE.  */
7016 
7017 static dw_die_ref
7018 clone_tree (dw_die_ref die)
7019 {
7020   dw_die_ref c;
7021   dw_die_ref clone = clone_die (die);
7022 
7023   FOR_EACH_CHILD (die, c, add_child_die (clone, clone_tree(c)));
7024 
7025   return clone;
7026 }
7027 
7028 /* Make a clone of DIE as a declaration.  */
7029 
7030 static dw_die_ref
7031 clone_as_declaration (dw_die_ref die)
7032 {
7033   dw_die_ref clone;
7034   dw_die_ref decl;
7035   dw_attr_ref a;
7036   unsigned ix;
7037 
7038   /* If the DIE is already a declaration, just clone it.  */
7039   if (is_declaration_die (die))
7040     return clone_die (die);
7041 
7042   /* If the DIE is a specification, just clone its declaration DIE.  */
7043   decl = get_AT_ref (die, DW_AT_specification);
7044   if (decl != NULL)
7045     return clone_die (decl);
7046 
7047   clone = ggc_alloc_cleared_die_node ();
7048   clone->die_tag = die->die_tag;
7049 
7050   FOR_EACH_VEC_ELT (dw_attr_node, die->die_attr, ix, a)
7051     {
7052       /* We don't want to copy over all attributes.
7053          For example we don't want DW_AT_byte_size because otherwise we will no
7054          longer have a declaration and GDB will treat it as a definition.  */
7055 
7056       switch (a->dw_attr)
7057         {
7058         case DW_AT_artificial:
7059         case DW_AT_containing_type:
7060         case DW_AT_external:
7061         case DW_AT_name:
7062         case DW_AT_type:
7063         case DW_AT_virtuality:
7064         case DW_AT_linkage_name:
7065         case DW_AT_MIPS_linkage_name:
7066           add_dwarf_attr (clone, a);
7067           break;
7068         case DW_AT_byte_size:
7069         default:
7070           break;
7071         }
7072     }
7073 
7074   if (die->die_id.die_type_node)
7075     add_AT_die_ref (clone, DW_AT_signature, die);
7076 
7077   add_AT_flag (clone, DW_AT_declaration, 1);
7078   return clone;
7079 }
7080 
7081 /* Copy the declaration context to the new type unit DIE.  This includes
7082    any surrounding namespace or type declarations.  If the DIE has an
7083    AT_specification attribute, it also includes attributes and children
7084    attached to the specification, and returns a pointer to the original
7085    parent of the declaration DIE.  Returns NULL otherwise.  */
7086 
7087 static dw_die_ref
7088 copy_declaration_context (dw_die_ref unit, dw_die_ref die)
7089 {
7090   dw_die_ref decl;
7091   dw_die_ref new_decl;
7092   dw_die_ref orig_parent = NULL;
7093 
7094   decl = get_AT_ref (die, DW_AT_specification);
7095   if (decl == NULL)
7096     decl = die;
7097   else
7098     {
7099       unsigned ix;
7100       dw_die_ref c;
7101       dw_attr_ref a;
7102 
7103       /* The original DIE will be changed to a declaration, and must
7104          be moved to be a child of the original declaration DIE.  */
7105       orig_parent = decl->die_parent;
7106 
7107       /* Copy the type node pointer from the new DIE to the original
7108          declaration DIE so we can forward references later.  */
7109       decl->die_id.die_type_node = die->die_id.die_type_node;
7110 
7111       remove_AT (die, DW_AT_specification);
7112 
7113       FOR_EACH_VEC_ELT (dw_attr_node, decl->die_attr, ix, a)
7114         {
7115           if (a->dw_attr != DW_AT_name
7116               && a->dw_attr != DW_AT_declaration
7117               && a->dw_attr != DW_AT_external)
7118             add_dwarf_attr (die, a);
7119         }
7120 
7121       FOR_EACH_CHILD (decl, c, add_child_die (die, clone_tree(c)));
7122     }
7123 
7124   if (decl->die_parent != NULL
7125       && decl->die_parent->die_tag != DW_TAG_compile_unit
7126       && decl->die_parent->die_tag != DW_TAG_type_unit)
7127     {
7128       new_decl = copy_ancestor_tree (unit, decl, NULL);
7129       if (new_decl != NULL)
7130         {
7131           remove_AT (new_decl, DW_AT_signature);
7132           add_AT_specification (die, new_decl);
7133         }
7134     }
7135 
7136   return orig_parent;
7137 }
7138 
7139 /* Generate the skeleton ancestor tree for the given NODE, then clone
7140    the DIE and add the clone into the tree.  */
7141 
7142 static void
7143 generate_skeleton_ancestor_tree (skeleton_chain_node *node)
7144 {
7145   if (node->new_die != NULL)
7146     return;
7147 
7148   node->new_die = clone_as_declaration (node->old_die);
7149 
7150   if (node->parent != NULL)
7151     {
7152       generate_skeleton_ancestor_tree (node->parent);
7153       add_child_die (node->parent->new_die, node->new_die);
7154     }
7155 }
7156 
7157 /* Generate a skeleton tree of DIEs containing any declarations that are
7158    found in the original tree.  We traverse the tree looking for declaration
7159    DIEs, and construct the skeleton from the bottom up whenever we find one.  */
7160 
7161 static void
7162 generate_skeleton_bottom_up (skeleton_chain_node *parent)
7163 {
7164   skeleton_chain_node node;
7165   dw_die_ref c;
7166   dw_die_ref first;
7167   dw_die_ref prev = NULL;
7168   dw_die_ref next = NULL;
7169 
7170   node.parent = parent;
7171 
7172   first = c = parent->old_die->die_child;
7173   if (c)
7174     next = c->die_sib;
7175   if (c) do {
7176     if (prev == NULL || prev->die_sib == c)
7177       prev = c;
7178     c = next;
7179     next = (c == first ? NULL : c->die_sib);
7180     node.old_die = c;
7181     node.new_die = NULL;
7182     if (is_declaration_die (c))
7183       {
7184         /* Clone the existing DIE, move the original to the skeleton
7185            tree (which is in the main CU), and put the clone, with
7186            all the original's children, where the original came from.  */
7187         dw_die_ref clone = clone_die (c);
7188         move_all_children (c, clone);
7189 
7190         replace_child (c, clone, prev);
7191         generate_skeleton_ancestor_tree (parent);
7192         add_child_die (parent->new_die, c);
7193         node.new_die = c;
7194         c = clone;
7195       }
7196     generate_skeleton_bottom_up (&node);
7197   } while (next != NULL);
7198 }
7199 
7200 /* Wrapper function for generate_skeleton_bottom_up.  */
7201 
7202 static dw_die_ref
7203 generate_skeleton (dw_die_ref die)
7204 {
7205   skeleton_chain_node node;
7206 
7207   node.old_die = die;
7208   node.new_die = NULL;
7209   node.parent = NULL;
7210 
7211   /* If this type definition is nested inside another type,
7212      always leave at least a declaration in its place.  */
7213   if (die->die_parent != NULL && is_type_die (die->die_parent))
7214     node.new_die = clone_as_declaration (die);
7215 
7216   generate_skeleton_bottom_up (&node);
7217   return node.new_die;
7218 }
7219 
7220 /* Remove the CHILD DIE from its parent, possibly replacing it with a cloned
7221    declaration.  The original DIE is moved to a new compile unit so that
7222    existing references to it follow it to the new location.  If any of the
7223    original DIE's descendants is a declaration, we need to replace the
7224    original DIE with a skeleton tree and move the declarations back into the
7225    skeleton tree.  */
7226 
7227 static dw_die_ref
7228 remove_child_or_replace_with_skeleton (dw_die_ref unit, dw_die_ref child,
7229 				       dw_die_ref prev)
7230 {
7231   dw_die_ref skeleton, orig_parent;
7232 
7233   /* Copy the declaration context to the type unit DIE.  If the returned
7234      ORIG_PARENT is not NULL, the skeleton needs to be added as a child of
7235      that DIE.  */
7236   orig_parent = copy_declaration_context (unit, child);
7237 
7238   skeleton = generate_skeleton (child);
7239   if (skeleton == NULL)
7240     remove_child_with_prev (child, prev);
7241   else
7242     {
7243       skeleton->die_id.die_type_node = child->die_id.die_type_node;
7244 
7245       /* If the original DIE was a specification, we need to put
7246          the skeleton under the parent DIE of the declaration.
7247 	 This leaves the original declaration in the tree, but
7248 	 it will be pruned later since there are no longer any
7249 	 references to it.  */
7250       if (orig_parent != NULL)
7251 	{
7252 	  remove_child_with_prev (child, prev);
7253 	  add_child_die (orig_parent, skeleton);
7254 	}
7255       else
7256 	replace_child (child, skeleton, prev);
7257     }
7258 
7259   return skeleton;
7260 }
7261 
7262 /* Traverse the DIE and set up additional .debug_types sections for each
7263    type worthy of being placed in a COMDAT section.  */
7264 
7265 static void
7266 break_out_comdat_types (dw_die_ref die)
7267 {
7268   dw_die_ref c;
7269   dw_die_ref first;
7270   dw_die_ref prev = NULL;
7271   dw_die_ref next = NULL;
7272   dw_die_ref unit = NULL;
7273 
7274   first = c = die->die_child;
7275   if (c)
7276     next = c->die_sib;
7277   if (c) do {
7278     if (prev == NULL || prev->die_sib == c)
7279       prev = c;
7280     c = next;
7281     next = (c == first ? NULL : c->die_sib);
7282     if (should_move_die_to_comdat (c))
7283       {
7284         dw_die_ref replacement;
7285 	comdat_type_node_ref type_node;
7286 
7287         /* Create a new type unit DIE as the root for the new tree, and
7288            add it to the list of comdat types.  */
7289         unit = new_die (DW_TAG_type_unit, NULL, NULL);
7290         add_AT_unsigned (unit, DW_AT_language,
7291                          get_AT_unsigned (comp_unit_die (), DW_AT_language));
7292         type_node = ggc_alloc_cleared_comdat_type_node ();
7293         type_node->root_die = unit;
7294         type_node->next = comdat_type_list;
7295         comdat_type_list = type_node;
7296 
7297         /* Generate the type signature.  */
7298         generate_type_signature (c, type_node);
7299 
7300         /* Copy the declaration context, attributes, and children of the
7301            declaration into the new type unit DIE, then remove this DIE
7302 	   from the main CU (or replace it with a skeleton if necessary).  */
7303 	replacement = remove_child_or_replace_with_skeleton (unit, c, prev);
7304 
7305         /* Break out nested types into their own type units.  */
7306         break_out_comdat_types (c);
7307 
7308         /* Add the DIE to the new compunit.  */
7309 	add_child_die (unit, c);
7310 
7311         if (replacement != NULL)
7312           c = replacement;
7313       }
7314     else if (c->die_tag == DW_TAG_namespace
7315              || c->die_tag == DW_TAG_class_type
7316              || c->die_tag == DW_TAG_structure_type
7317              || c->die_tag == DW_TAG_union_type)
7318       {
7319         /* Look for nested types that can be broken out.  */
7320         break_out_comdat_types (c);
7321       }
7322   } while (next != NULL);
7323 }
7324 
7325 /* Structure to map a DIE in one CU to its copy in a comdat type unit.  */
7326 
7327 struct decl_table_entry
7328 {
7329   dw_die_ref orig;
7330   dw_die_ref copy;
7331 };
7332 
7333 /* Routines to manipulate hash table of copied declarations.  */
7334 
7335 static hashval_t
7336 htab_decl_hash (const void *of)
7337 {
7338   const struct decl_table_entry *const entry =
7339     (const struct decl_table_entry *) of;
7340 
7341   return htab_hash_pointer (entry->orig);
7342 }
7343 
7344 static int
7345 htab_decl_eq (const void *of1, const void *of2)
7346 {
7347   const struct decl_table_entry *const entry1 =
7348     (const struct decl_table_entry *) of1;
7349   const struct die_struct *const entry2 = (const struct die_struct *) of2;
7350 
7351   return entry1->orig == entry2;
7352 }
7353 
7354 static void
7355 htab_decl_del (void *what)
7356 {
7357   struct decl_table_entry *entry = (struct decl_table_entry *) what;
7358 
7359   free (entry);
7360 }
7361 
7362 /* Copy DIE and its ancestors, up to, but not including, the compile unit
7363    or type unit entry, to a new tree.  Adds the new tree to UNIT and returns
7364    a pointer to the copy of DIE.  If DECL_TABLE is provided, it is used
7365    to check if the ancestor has already been copied into UNIT.  */
7366 
7367 static dw_die_ref
7368 copy_ancestor_tree (dw_die_ref unit, dw_die_ref die, htab_t decl_table)
7369 {
7370   dw_die_ref parent = die->die_parent;
7371   dw_die_ref new_parent = unit;
7372   dw_die_ref copy;
7373   void **slot = NULL;
7374   struct decl_table_entry *entry = NULL;
7375 
7376   if (decl_table)
7377     {
7378       /* Check if the entry has already been copied to UNIT.  */
7379       slot = htab_find_slot_with_hash (decl_table, die,
7380                                        htab_hash_pointer (die), INSERT);
7381       if (*slot != HTAB_EMPTY_ENTRY)
7382         {
7383           entry = (struct decl_table_entry *) *slot;
7384           return entry->copy;
7385         }
7386 
7387       /* Record in DECL_TABLE that DIE has been copied to UNIT.  */
7388       entry = XCNEW (struct decl_table_entry);
7389       entry->orig = die;
7390       entry->copy = NULL;
7391       *slot = entry;
7392     }
7393 
7394   if (parent != NULL)
7395     {
7396       dw_die_ref spec = get_AT_ref (parent, DW_AT_specification);
7397       if (spec != NULL)
7398         parent = spec;
7399       if (parent->die_tag != DW_TAG_compile_unit
7400           && parent->die_tag != DW_TAG_type_unit)
7401         new_parent = copy_ancestor_tree (unit, parent, decl_table);
7402     }
7403 
7404   copy = clone_as_declaration (die);
7405   add_child_die (new_parent, copy);
7406 
7407   if (decl_table != NULL)
7408     {
7409       /* Record the pointer to the copy.  */
7410       entry->copy = copy;
7411     }
7412 
7413   return copy;
7414 }
7415 
7416 /* Like clone_tree, but additionally enter all the children into
7417    the hash table decl_table.  */
7418 
7419 static dw_die_ref
7420 clone_tree_hash (dw_die_ref die, htab_t decl_table)
7421 {
7422   dw_die_ref c;
7423   dw_die_ref clone = clone_die (die);
7424   struct decl_table_entry *entry;
7425   void **slot = htab_find_slot_with_hash (decl_table, die,
7426 					  htab_hash_pointer (die), INSERT);
7427   /* Assert that DIE isn't in the hash table yet.  If it would be there
7428      before, the ancestors would be necessarily there as well, therefore
7429      clone_tree_hash wouldn't be called.  */
7430   gcc_assert (*slot == HTAB_EMPTY_ENTRY);
7431   entry = XCNEW (struct decl_table_entry);
7432   entry->orig = die;
7433   entry->copy = clone;
7434   *slot = entry;
7435 
7436   FOR_EACH_CHILD (die, c,
7437 		  add_child_die (clone, clone_tree_hash (c, decl_table)));
7438 
7439   return clone;
7440 }
7441 
7442 /* Walk the DIE and its children, looking for references to incomplete
7443    or trivial types that are unmarked (i.e., that are not in the current
7444    type_unit).  */
7445 
7446 static void
7447 copy_decls_walk (dw_die_ref unit, dw_die_ref die, htab_t decl_table)
7448 {
7449   dw_die_ref c;
7450   dw_attr_ref a;
7451   unsigned ix;
7452 
7453   FOR_EACH_VEC_ELT (dw_attr_node, die->die_attr, ix, a)
7454     {
7455       if (AT_class (a) == dw_val_class_die_ref)
7456         {
7457           dw_die_ref targ = AT_ref (a);
7458           comdat_type_node_ref type_node = targ->die_id.die_type_node;
7459           void **slot;
7460           struct decl_table_entry *entry;
7461 
7462           if (targ->die_mark != 0 || type_node != NULL)
7463             continue;
7464 
7465           slot = htab_find_slot_with_hash (decl_table, targ,
7466                                            htab_hash_pointer (targ), INSERT);
7467 
7468           if (*slot != HTAB_EMPTY_ENTRY)
7469             {
7470               /* TARG has already been copied, so we just need to
7471                  modify the reference to point to the copy.  */
7472               entry = (struct decl_table_entry *) *slot;
7473               a->dw_attr_val.v.val_die_ref.die = entry->copy;
7474             }
7475           else
7476             {
7477               dw_die_ref parent = unit;
7478 	      dw_die_ref copy = clone_die (targ);
7479 
7480               /* Record in DECL_TABLE that TARG has been copied.
7481                  Need to do this now, before the recursive call,
7482                  because DECL_TABLE may be expanded and SLOT
7483                  would no longer be a valid pointer.  */
7484               entry = XCNEW (struct decl_table_entry);
7485               entry->orig = targ;
7486               entry->copy = copy;
7487               *slot = entry;
7488 
7489 	      FOR_EACH_CHILD (targ, c,
7490 			      add_child_die (copy,
7491 					     clone_tree_hash (c, decl_table)));
7492 
7493               /* Make sure the cloned tree is marked as part of the
7494                  type unit.  */
7495               mark_dies (copy);
7496 
7497               /* If TARG has surrounding context, copy its ancestor tree
7498                  into the new type unit.  */
7499               if (targ->die_parent != NULL
7500                   && targ->die_parent->die_tag != DW_TAG_compile_unit
7501                   && targ->die_parent->die_tag != DW_TAG_type_unit)
7502                 parent = copy_ancestor_tree (unit, targ->die_parent,
7503                                              decl_table);
7504 
7505               add_child_die (parent, copy);
7506               a->dw_attr_val.v.val_die_ref.die = copy;
7507 
7508               /* Make sure the newly-copied DIE is walked.  If it was
7509                  installed in a previously-added context, it won't
7510                  get visited otherwise.  */
7511               if (parent != unit)
7512 		{
7513 		  /* Find the highest point of the newly-added tree,
7514 		     mark each node along the way, and walk from there.  */
7515 		  parent->die_mark = 1;
7516 		  while (parent->die_parent
7517 		  	 && parent->die_parent->die_mark == 0)
7518 		    {
7519 		      parent = parent->die_parent;
7520 		      parent->die_mark = 1;
7521 		    }
7522 		  copy_decls_walk (unit, parent, decl_table);
7523 		}
7524             }
7525         }
7526     }
7527 
7528   FOR_EACH_CHILD (die, c, copy_decls_walk (unit, c, decl_table));
7529 }
7530 
7531 /* Copy declarations for "unworthy" types into the new comdat section.
7532    Incomplete types, modified types, and certain other types aren't broken
7533    out into comdat sections of their own, so they don't have a signature,
7534    and we need to copy the declaration into the same section so that we
7535    don't have an external reference.  */
7536 
7537 static void
7538 copy_decls_for_unworthy_types (dw_die_ref unit)
7539 {
7540   htab_t decl_table;
7541 
7542   mark_dies (unit);
7543   decl_table = htab_create (10, htab_decl_hash, htab_decl_eq, htab_decl_del);
7544   copy_decls_walk (unit, unit, decl_table);
7545   htab_delete (decl_table);
7546   unmark_dies (unit);
7547 }
7548 
7549 /* Traverse the DIE and add a sibling attribute if it may have the
7550    effect of speeding up access to siblings.  To save some space,
7551    avoid generating sibling attributes for DIE's without children.  */
7552 
7553 static void
7554 add_sibling_attributes (dw_die_ref die)
7555 {
7556   dw_die_ref c;
7557 
7558   if (! die->die_child)
7559     return;
7560 
7561   if (die->die_parent && die != die->die_parent->die_child)
7562     add_AT_die_ref (die, DW_AT_sibling, die->die_sib);
7563 
7564   FOR_EACH_CHILD (die, c, add_sibling_attributes (c));
7565 }
7566 
7567 /* Output all location lists for the DIE and its children.  */
7568 
7569 static void
7570 output_location_lists (dw_die_ref die)
7571 {
7572   dw_die_ref c;
7573   dw_attr_ref a;
7574   unsigned ix;
7575 
7576   FOR_EACH_VEC_ELT (dw_attr_node, die->die_attr, ix, a)
7577     if (AT_class (a) == dw_val_class_loc_list)
7578       output_loc_list (AT_loc_list (a));
7579 
7580   FOR_EACH_CHILD (die, c, output_location_lists (c));
7581 }
7582 
7583 /* The format of each DIE (and its attribute value pairs) is encoded in an
7584    abbreviation table.  This routine builds the abbreviation table and assigns
7585    a unique abbreviation id for each abbreviation entry.  The children of each
7586    die are visited recursively.  */
7587 
7588 static void
7589 build_abbrev_table (dw_die_ref die)
7590 {
7591   unsigned long abbrev_id;
7592   unsigned int n_alloc;
7593   dw_die_ref c;
7594   dw_attr_ref a;
7595   unsigned ix;
7596 
7597   /* Scan the DIE references, and mark as external any that refer to
7598      DIEs from other CUs (i.e. those which are not marked).  */
7599   FOR_EACH_VEC_ELT (dw_attr_node, die->die_attr, ix, a)
7600     if (AT_class (a) == dw_val_class_die_ref
7601 	&& AT_ref (a)->die_mark == 0)
7602       {
7603 	gcc_assert (use_debug_types || AT_ref (a)->die_id.die_symbol);
7604 	set_AT_ref_external (a, 1);
7605       }
7606 
7607   for (abbrev_id = 1; abbrev_id < abbrev_die_table_in_use; ++abbrev_id)
7608     {
7609       dw_die_ref abbrev = abbrev_die_table[abbrev_id];
7610       dw_attr_ref die_a, abbrev_a;
7611       unsigned ix;
7612       bool ok = true;
7613 
7614       if (abbrev->die_tag != die->die_tag)
7615 	continue;
7616       if ((abbrev->die_child != NULL) != (die->die_child != NULL))
7617 	continue;
7618 
7619       if (VEC_length (dw_attr_node, abbrev->die_attr)
7620 	  != VEC_length (dw_attr_node, die->die_attr))
7621 	continue;
7622 
7623       FOR_EACH_VEC_ELT (dw_attr_node, die->die_attr, ix, die_a)
7624 	{
7625 	  abbrev_a = VEC_index (dw_attr_node, abbrev->die_attr, ix);
7626 	  if ((abbrev_a->dw_attr != die_a->dw_attr)
7627 	      || (value_format (abbrev_a) != value_format (die_a)))
7628 	    {
7629 	      ok = false;
7630 	      break;
7631 	    }
7632 	}
7633       if (ok)
7634 	break;
7635     }
7636 
7637   if (abbrev_id >= abbrev_die_table_in_use)
7638     {
7639       if (abbrev_die_table_in_use >= abbrev_die_table_allocated)
7640 	{
7641 	  n_alloc = abbrev_die_table_allocated + ABBREV_DIE_TABLE_INCREMENT;
7642 	  abbrev_die_table = GGC_RESIZEVEC (dw_die_ref, abbrev_die_table,
7643 					    n_alloc);
7644 
7645 	  memset (&abbrev_die_table[abbrev_die_table_allocated], 0,
7646 		 (n_alloc - abbrev_die_table_allocated) * sizeof (dw_die_ref));
7647 	  abbrev_die_table_allocated = n_alloc;
7648 	}
7649 
7650       ++abbrev_die_table_in_use;
7651       abbrev_die_table[abbrev_id] = die;
7652     }
7653 
7654   die->die_abbrev = abbrev_id;
7655   FOR_EACH_CHILD (die, c, build_abbrev_table (c));
7656 }
7657 
7658 /* Return the power-of-two number of bytes necessary to represent VALUE.  */
7659 
7660 static int
7661 constant_size (unsigned HOST_WIDE_INT value)
7662 {
7663   int log;
7664 
7665   if (value == 0)
7666     log = 0;
7667   else
7668     log = floor_log2 (value);
7669 
7670   log = log / 8;
7671   log = 1 << (floor_log2 (log) + 1);
7672 
7673   return log;
7674 }
7675 
7676 /* Return the size of a DIE as it is represented in the
7677    .debug_info section.  */
7678 
7679 static unsigned long
7680 size_of_die (dw_die_ref die)
7681 {
7682   unsigned long size = 0;
7683   dw_attr_ref a;
7684   unsigned ix;
7685 
7686   size += size_of_uleb128 (die->die_abbrev);
7687   FOR_EACH_VEC_ELT (dw_attr_node, die->die_attr, ix, a)
7688     {
7689       switch (AT_class (a))
7690 	{
7691 	case dw_val_class_addr:
7692 	  size += DWARF2_ADDR_SIZE;
7693 	  break;
7694 	case dw_val_class_offset:
7695 	  size += DWARF_OFFSET_SIZE;
7696 	  break;
7697 	case dw_val_class_loc:
7698 	  {
7699 	    unsigned long lsize = size_of_locs (AT_loc (a));
7700 
7701 	    /* Block length.  */
7702 	    if (dwarf_version >= 4)
7703 	      size += size_of_uleb128 (lsize);
7704 	    else
7705 	      size += constant_size (lsize);
7706 	    size += lsize;
7707 	  }
7708 	  break;
7709 	case dw_val_class_loc_list:
7710 	  size += DWARF_OFFSET_SIZE;
7711 	  break;
7712 	case dw_val_class_range_list:
7713 	  size += DWARF_OFFSET_SIZE;
7714 	  break;
7715 	case dw_val_class_const:
7716 	  size += size_of_sleb128 (AT_int (a));
7717 	  break;
7718 	case dw_val_class_unsigned_const:
7719 	  {
7720 	    int csize = constant_size (AT_unsigned (a));
7721 	    if (dwarf_version == 3
7722 		&& a->dw_attr == DW_AT_data_member_location
7723 		&& csize >= 4)
7724 	      size += size_of_uleb128 (AT_unsigned (a));
7725 	    else
7726 	      size += csize;
7727 	  }
7728 	  break;
7729 	case dw_val_class_const_double:
7730 	  size += 2 * HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR;
7731 	  if (HOST_BITS_PER_WIDE_INT >= 64)
7732 	    size++; /* block */
7733 	  break;
7734 	case dw_val_class_vec:
7735 	  size += constant_size (a->dw_attr_val.v.val_vec.length
7736 				 * a->dw_attr_val.v.val_vec.elt_size)
7737 		  + a->dw_attr_val.v.val_vec.length
7738 		    * a->dw_attr_val.v.val_vec.elt_size; /* block */
7739 	  break;
7740 	case dw_val_class_flag:
7741 	  if (dwarf_version >= 4)
7742 	    /* Currently all add_AT_flag calls pass in 1 as last argument,
7743 	       so DW_FORM_flag_present can be used.  If that ever changes,
7744 	       we'll need to use DW_FORM_flag and have some optimization
7745 	       in build_abbrev_table that will change those to
7746 	       DW_FORM_flag_present if it is set to 1 in all DIEs using
7747 	       the same abbrev entry.  */
7748 	    gcc_assert (a->dw_attr_val.v.val_flag == 1);
7749 	  else
7750 	    size += 1;
7751 	  break;
7752 	case dw_val_class_die_ref:
7753 	  if (AT_ref_external (a))
7754 	    {
7755 	      /* In DWARF4, we use DW_FORM_ref_sig8; for earlier versions
7756 		 we use DW_FORM_ref_addr.  In DWARF2, DW_FORM_ref_addr
7757 		 is sized by target address length, whereas in DWARF3
7758 		 it's always sized as an offset.  */
7759 	      if (use_debug_types)
7760 		size += DWARF_TYPE_SIGNATURE_SIZE;
7761 	      else if (dwarf_version == 2)
7762 		size += DWARF2_ADDR_SIZE;
7763 	      else
7764 		size += DWARF_OFFSET_SIZE;
7765 	    }
7766 	  else
7767 	    size += DWARF_OFFSET_SIZE;
7768 	  break;
7769 	case dw_val_class_fde_ref:
7770 	  size += DWARF_OFFSET_SIZE;
7771 	  break;
7772 	case dw_val_class_lbl_id:
7773 	  size += DWARF2_ADDR_SIZE;
7774 	  break;
7775 	case dw_val_class_lineptr:
7776 	case dw_val_class_macptr:
7777 	  size += DWARF_OFFSET_SIZE;
7778 	  break;
7779 	case dw_val_class_str:
7780 	  if (AT_string_form (a) == DW_FORM_strp)
7781 	    size += DWARF_OFFSET_SIZE;
7782 	  else
7783 	    size += strlen (a->dw_attr_val.v.val_str->str) + 1;
7784 	  break;
7785 	case dw_val_class_file:
7786 	  size += constant_size (maybe_emit_file (a->dw_attr_val.v.val_file));
7787 	  break;
7788 	case dw_val_class_data8:
7789 	  size += 8;
7790 	  break;
7791 	case dw_val_class_vms_delta:
7792 	  size += DWARF_OFFSET_SIZE;
7793 	  break;
7794 	default:
7795 	  gcc_unreachable ();
7796 	}
7797     }
7798 
7799   return size;
7800 }
7801 
7802 /* Size the debugging information associated with a given DIE.  Visits the
7803    DIE's children recursively.  Updates the global variable next_die_offset, on
7804    each time through.  Uses the current value of next_die_offset to update the
7805    die_offset field in each DIE.  */
7806 
7807 static void
7808 calc_die_sizes (dw_die_ref die)
7809 {
7810   dw_die_ref c;
7811 
7812   gcc_assert (die->die_offset == 0
7813 	      || (unsigned long int) die->die_offset == next_die_offset);
7814   die->die_offset = next_die_offset;
7815   next_die_offset += size_of_die (die);
7816 
7817   FOR_EACH_CHILD (die, c, calc_die_sizes (c));
7818 
7819   if (die->die_child != NULL)
7820     /* Count the null byte used to terminate sibling lists.  */
7821     next_die_offset += 1;
7822 }
7823 
7824 /* Size just the base type children at the start of the CU.
7825    This is needed because build_abbrev needs to size locs
7826    and sizing of type based stack ops needs to know die_offset
7827    values for the base types.  */
7828 
7829 static void
7830 calc_base_type_die_sizes (void)
7831 {
7832   unsigned long die_offset = DWARF_COMPILE_UNIT_HEADER_SIZE;
7833   unsigned int i;
7834   dw_die_ref base_type;
7835 #if ENABLE_ASSERT_CHECKING
7836   dw_die_ref prev = comp_unit_die ()->die_child;
7837 #endif
7838 
7839   die_offset += size_of_die (comp_unit_die ());
7840   for (i = 0; VEC_iterate (dw_die_ref, base_types, i, base_type); i++)
7841     {
7842 #if ENABLE_ASSERT_CHECKING
7843       gcc_assert (base_type->die_offset == 0
7844 		  && prev->die_sib == base_type
7845 		  && base_type->die_child == NULL
7846 		  && base_type->die_abbrev);
7847       prev = base_type;
7848 #endif
7849       base_type->die_offset = die_offset;
7850       die_offset += size_of_die (base_type);
7851     }
7852 }
7853 
7854 /* Set the marks for a die and its children.  We do this so
7855    that we know whether or not a reference needs to use FORM_ref_addr; only
7856    DIEs in the same CU will be marked.  We used to clear out the offset
7857    and use that as the flag, but ran into ordering problems.  */
7858 
7859 static void
7860 mark_dies (dw_die_ref die)
7861 {
7862   dw_die_ref c;
7863 
7864   gcc_assert (!die->die_mark);
7865 
7866   die->die_mark = 1;
7867   FOR_EACH_CHILD (die, c, mark_dies (c));
7868 }
7869 
7870 /* Clear the marks for a die and its children.  */
7871 
7872 static void
7873 unmark_dies (dw_die_ref die)
7874 {
7875   dw_die_ref c;
7876 
7877   if (! use_debug_types)
7878     gcc_assert (die->die_mark);
7879 
7880   die->die_mark = 0;
7881   FOR_EACH_CHILD (die, c, unmark_dies (c));
7882 }
7883 
7884 /* Clear the marks for a die, its children and referred dies.  */
7885 
7886 static void
7887 unmark_all_dies (dw_die_ref die)
7888 {
7889   dw_die_ref c;
7890   dw_attr_ref a;
7891   unsigned ix;
7892 
7893   if (!die->die_mark)
7894     return;
7895   die->die_mark = 0;
7896 
7897   FOR_EACH_CHILD (die, c, unmark_all_dies (c));
7898 
7899   FOR_EACH_VEC_ELT (dw_attr_node, die->die_attr, ix, a)
7900     if (AT_class (a) == dw_val_class_die_ref)
7901       unmark_all_dies (AT_ref (a));
7902 }
7903 
7904 /* Return the size of the .debug_pubnames or .debug_pubtypes table
7905    generated for the compilation unit.  */
7906 
7907 static unsigned long
7908 size_of_pubnames (VEC (pubname_entry, gc) * names)
7909 {
7910   unsigned long size;
7911   unsigned i;
7912   pubname_ref p;
7913 
7914   size = DWARF_PUBNAMES_HEADER_SIZE;
7915   FOR_EACH_VEC_ELT (pubname_entry, names, i, p)
7916     if (names != pubtype_table
7917 	|| p->die->die_offset != 0
7918 	|| !flag_eliminate_unused_debug_types)
7919       size += strlen (p->name) + DWARF_OFFSET_SIZE + 1;
7920 
7921   size += DWARF_OFFSET_SIZE;
7922   return size;
7923 }
7924 
7925 /* Return the size of the information in the .debug_aranges section.  */
7926 
7927 static unsigned long
7928 size_of_aranges (void)
7929 {
7930   unsigned long size;
7931 
7932   size = DWARF_ARANGES_HEADER_SIZE;
7933 
7934   /* Count the address/length pair for this compilation unit.  */
7935   if (text_section_used)
7936     size += 2 * DWARF2_ADDR_SIZE;
7937   if (cold_text_section_used)
7938     size += 2 * DWARF2_ADDR_SIZE;
7939   if (have_multiple_function_sections)
7940     {
7941       unsigned fde_idx;
7942       dw_fde_ref fde;
7943 
7944       FOR_EACH_VEC_ELT (dw_fde_ref, fde_vec, fde_idx, fde)
7945 	{
7946 	  if (!fde->in_std_section)
7947 	    size += 2 * DWARF2_ADDR_SIZE;
7948 	  if (fde->dw_fde_second_begin && !fde->second_in_std_section)
7949 	    size += 2 * DWARF2_ADDR_SIZE;
7950 	}
7951     }
7952 
7953   /* Count the two zero words used to terminated the address range table.  */
7954   size += 2 * DWARF2_ADDR_SIZE;
7955   return size;
7956 }
7957 
7958 /* Select the encoding of an attribute value.  */
7959 
7960 static enum dwarf_form
7961 value_format (dw_attr_ref a)
7962 {
7963   switch (a->dw_attr_val.val_class)
7964     {
7965     case dw_val_class_addr:
7966       /* Only very few attributes allow DW_FORM_addr.  */
7967       switch (a->dw_attr)
7968 	{
7969 	case DW_AT_low_pc:
7970 	case DW_AT_high_pc:
7971 	case DW_AT_entry_pc:
7972 	case DW_AT_trampoline:
7973 	  return DW_FORM_addr;
7974 	default:
7975 	  break;
7976 	}
7977       switch (DWARF2_ADDR_SIZE)
7978 	{
7979 	case 1:
7980 	  return DW_FORM_data1;
7981 	case 2:
7982 	  return DW_FORM_data2;
7983 	case 4:
7984 	  return DW_FORM_data4;
7985 	case 8:
7986 	  return DW_FORM_data8;
7987 	default:
7988 	  gcc_unreachable ();
7989 	}
7990     case dw_val_class_range_list:
7991     case dw_val_class_loc_list:
7992       if (dwarf_version >= 4)
7993 	return DW_FORM_sec_offset;
7994       /* FALLTHRU */
7995     case dw_val_class_vms_delta:
7996     case dw_val_class_offset:
7997       switch (DWARF_OFFSET_SIZE)
7998 	{
7999 	case 4:
8000 	  return DW_FORM_data4;
8001 	case 8:
8002 	  return DW_FORM_data8;
8003 	default:
8004 	  gcc_unreachable ();
8005 	}
8006     case dw_val_class_loc:
8007       if (dwarf_version >= 4)
8008 	return DW_FORM_exprloc;
8009       switch (constant_size (size_of_locs (AT_loc (a))))
8010 	{
8011 	case 1:
8012 	  return DW_FORM_block1;
8013 	case 2:
8014 	  return DW_FORM_block2;
8015 	default:
8016 	  gcc_unreachable ();
8017 	}
8018     case dw_val_class_const:
8019       return DW_FORM_sdata;
8020     case dw_val_class_unsigned_const:
8021       switch (constant_size (AT_unsigned (a)))
8022 	{
8023 	case 1:
8024 	  return DW_FORM_data1;
8025 	case 2:
8026 	  return DW_FORM_data2;
8027 	case 4:
8028 	  /* In DWARF3 DW_AT_data_member_location with
8029 	     DW_FORM_data4 or DW_FORM_data8 is a loclistptr, not
8030 	     constant, so we need to use DW_FORM_udata if we need
8031 	     a large constant.  */
8032 	  if (dwarf_version == 3 && a->dw_attr == DW_AT_data_member_location)
8033 	    return DW_FORM_udata;
8034 	  return DW_FORM_data4;
8035 	case 8:
8036 	  if (dwarf_version == 3 && a->dw_attr == DW_AT_data_member_location)
8037 	    return DW_FORM_udata;
8038 	  return DW_FORM_data8;
8039 	default:
8040 	  gcc_unreachable ();
8041 	}
8042     case dw_val_class_const_double:
8043       switch (HOST_BITS_PER_WIDE_INT)
8044 	{
8045 	case 8:
8046 	  return DW_FORM_data2;
8047 	case 16:
8048 	  return DW_FORM_data4;
8049 	case 32:
8050 	  return DW_FORM_data8;
8051 	case 64:
8052 	default:
8053 	  return DW_FORM_block1;
8054 	}
8055     case dw_val_class_vec:
8056       switch (constant_size (a->dw_attr_val.v.val_vec.length
8057 			     * a->dw_attr_val.v.val_vec.elt_size))
8058 	{
8059 	case 1:
8060 	  return DW_FORM_block1;
8061 	case 2:
8062 	  return DW_FORM_block2;
8063 	case 4:
8064 	  return DW_FORM_block4;
8065 	default:
8066 	  gcc_unreachable ();
8067 	}
8068     case dw_val_class_flag:
8069       if (dwarf_version >= 4)
8070 	{
8071 	  /* Currently all add_AT_flag calls pass in 1 as last argument,
8072 	     so DW_FORM_flag_present can be used.  If that ever changes,
8073 	     we'll need to use DW_FORM_flag and have some optimization
8074 	     in build_abbrev_table that will change those to
8075 	     DW_FORM_flag_present if it is set to 1 in all DIEs using
8076 	     the same abbrev entry.  */
8077 	  gcc_assert (a->dw_attr_val.v.val_flag == 1);
8078 	  return DW_FORM_flag_present;
8079 	}
8080       return DW_FORM_flag;
8081     case dw_val_class_die_ref:
8082       if (AT_ref_external (a))
8083 	return use_debug_types ? DW_FORM_ref_sig8 : DW_FORM_ref_addr;
8084       else
8085 	return DW_FORM_ref;
8086     case dw_val_class_fde_ref:
8087       return DW_FORM_data;
8088     case dw_val_class_lbl_id:
8089       return DW_FORM_addr;
8090     case dw_val_class_lineptr:
8091     case dw_val_class_macptr:
8092       return dwarf_version >= 4 ? DW_FORM_sec_offset : DW_FORM_data;
8093     case dw_val_class_str:
8094       return AT_string_form (a);
8095     case dw_val_class_file:
8096       switch (constant_size (maybe_emit_file (a->dw_attr_val.v.val_file)))
8097 	{
8098 	case 1:
8099 	  return DW_FORM_data1;
8100 	case 2:
8101 	  return DW_FORM_data2;
8102 	case 4:
8103 	  return DW_FORM_data4;
8104 	default:
8105 	  gcc_unreachable ();
8106 	}
8107 
8108     case dw_val_class_data8:
8109       return DW_FORM_data8;
8110 
8111     default:
8112       gcc_unreachable ();
8113     }
8114 }
8115 
8116 /* Output the encoding of an attribute value.  */
8117 
8118 static void
8119 output_value_format (dw_attr_ref a)
8120 {
8121   enum dwarf_form form = value_format (a);
8122 
8123   dw2_asm_output_data_uleb128 (form, "(%s)", dwarf_form_name (form));
8124 }
8125 
8126 /* Output the .debug_abbrev section which defines the DIE abbreviation
8127    table.  */
8128 
8129 static void
8130 output_abbrev_section (void)
8131 {
8132   unsigned long abbrev_id;
8133 
8134   for (abbrev_id = 1; abbrev_id < abbrev_die_table_in_use; ++abbrev_id)
8135     {
8136       dw_die_ref abbrev = abbrev_die_table[abbrev_id];
8137       unsigned ix;
8138       dw_attr_ref a_attr;
8139 
8140       dw2_asm_output_data_uleb128 (abbrev_id, "(abbrev code)");
8141       dw2_asm_output_data_uleb128 (abbrev->die_tag, "(TAG: %s)",
8142 				   dwarf_tag_name (abbrev->die_tag));
8143 
8144       if (abbrev->die_child != NULL)
8145 	dw2_asm_output_data (1, DW_children_yes, "DW_children_yes");
8146       else
8147 	dw2_asm_output_data (1, DW_children_no, "DW_children_no");
8148 
8149       for (ix = 0; VEC_iterate (dw_attr_node, abbrev->die_attr, ix, a_attr);
8150 	   ix++)
8151 	{
8152 	  dw2_asm_output_data_uleb128 (a_attr->dw_attr, "(%s)",
8153 				       dwarf_attr_name (a_attr->dw_attr));
8154 	  output_value_format (a_attr);
8155 	}
8156 
8157       dw2_asm_output_data (1, 0, NULL);
8158       dw2_asm_output_data (1, 0, NULL);
8159     }
8160 
8161   /* Terminate the table.  */
8162   dw2_asm_output_data (1, 0, NULL);
8163 }
8164 
8165 /* Output a symbol we can use to refer to this DIE from another CU.  */
8166 
8167 static inline void
8168 output_die_symbol (dw_die_ref die)
8169 {
8170   char *sym = die->die_id.die_symbol;
8171 
8172   if (sym == 0)
8173     return;
8174 
8175   if (strncmp (sym, DIE_LABEL_PREFIX, sizeof (DIE_LABEL_PREFIX) - 1) == 0)
8176     /* We make these global, not weak; if the target doesn't support
8177        .linkonce, it doesn't support combining the sections, so debugging
8178        will break.  */
8179     targetm.asm_out.globalize_label (asm_out_file, sym);
8180 
8181   ASM_OUTPUT_LABEL (asm_out_file, sym);
8182 }
8183 
8184 /* Return a new location list, given the begin and end range, and the
8185    expression.  */
8186 
8187 static inline dw_loc_list_ref
8188 new_loc_list (dw_loc_descr_ref expr, const char *begin, const char *end,
8189 	      const char *section)
8190 {
8191   dw_loc_list_ref retlist = ggc_alloc_cleared_dw_loc_list_node ();
8192 
8193   retlist->begin = begin;
8194   retlist->end = end;
8195   retlist->expr = expr;
8196   retlist->section = section;
8197 
8198   return retlist;
8199 }
8200 
8201 /* Generate a new internal symbol for this location list node, if it
8202    hasn't got one yet.  */
8203 
8204 static inline void
8205 gen_llsym (dw_loc_list_ref list)
8206 {
8207   gcc_assert (!list->ll_symbol);
8208   list->ll_symbol = gen_internal_sym ("LLST");
8209 }
8210 
8211 /* Output the location list given to us.  */
8212 
8213 static void
8214 output_loc_list (dw_loc_list_ref list_head)
8215 {
8216   dw_loc_list_ref curr = list_head;
8217 
8218   if (list_head->emitted)
8219     return;
8220   list_head->emitted = true;
8221 
8222   ASM_OUTPUT_LABEL (asm_out_file, list_head->ll_symbol);
8223 
8224   /* Walk the location list, and output each range + expression.  */
8225   for (curr = list_head; curr != NULL; curr = curr->dw_loc_next)
8226     {
8227       unsigned long size;
8228       /* Don't output an entry that starts and ends at the same address.  */
8229       if (strcmp (curr->begin, curr->end) == 0 && !curr->force)
8230 	continue;
8231       size = size_of_locs (curr->expr);
8232       /* If the expression is too large, drop it on the floor.  We could
8233 	 perhaps put it into DW_TAG_dwarf_procedure and refer to that
8234 	 in the expression, but >= 64KB expressions for a single value
8235 	 in a single range are unlikely very useful.  */
8236       if (size > 0xffff)
8237 	continue;
8238       if (!have_multiple_function_sections)
8239 	{
8240 	  dw2_asm_output_delta (DWARF2_ADDR_SIZE, curr->begin, curr->section,
8241 				"Location list begin address (%s)",
8242 				list_head->ll_symbol);
8243 	  dw2_asm_output_delta (DWARF2_ADDR_SIZE, curr->end, curr->section,
8244 				"Location list end address (%s)",
8245 				list_head->ll_symbol);
8246 	}
8247       else
8248 	{
8249 	  dw2_asm_output_addr (DWARF2_ADDR_SIZE, curr->begin,
8250 			       "Location list begin address (%s)",
8251 			       list_head->ll_symbol);
8252 	  dw2_asm_output_addr (DWARF2_ADDR_SIZE, curr->end,
8253 			       "Location list end address (%s)",
8254 			       list_head->ll_symbol);
8255 	}
8256 
8257       /* Output the block length for this list of location operations.  */
8258       gcc_assert (size <= 0xffff);
8259       dw2_asm_output_data (2, size, "%s", "Location expression size");
8260 
8261       output_loc_sequence (curr->expr, -1);
8262     }
8263 
8264   dw2_asm_output_data (DWARF2_ADDR_SIZE, 0,
8265 		       "Location list terminator begin (%s)",
8266 		       list_head->ll_symbol);
8267   dw2_asm_output_data (DWARF2_ADDR_SIZE, 0,
8268 		       "Location list terminator end (%s)",
8269 		       list_head->ll_symbol);
8270 }
8271 
8272 /* Output a type signature.  */
8273 
8274 static inline void
8275 output_signature (const char *sig, const char *name)
8276 {
8277   int i;
8278 
8279   for (i = 0; i < DWARF_TYPE_SIGNATURE_SIZE; i++)
8280     dw2_asm_output_data (1, sig[i], i == 0 ? "%s" : NULL, name);
8281 }
8282 
8283 /* Output the DIE and its attributes.  Called recursively to generate
8284    the definitions of each child DIE.  */
8285 
8286 static void
8287 output_die (dw_die_ref die)
8288 {
8289   dw_attr_ref a;
8290   dw_die_ref c;
8291   unsigned long size;
8292   unsigned ix;
8293 
8294   /* If someone in another CU might refer to us, set up a symbol for
8295      them to point to.  */
8296   if (! use_debug_types && die->die_id.die_symbol)
8297     output_die_symbol (die);
8298 
8299   dw2_asm_output_data_uleb128 (die->die_abbrev, "(DIE (%#lx) %s)",
8300 			       (unsigned long)die->die_offset,
8301 			       dwarf_tag_name (die->die_tag));
8302 
8303   FOR_EACH_VEC_ELT (dw_attr_node, die->die_attr, ix, a)
8304     {
8305       const char *name = dwarf_attr_name (a->dw_attr);
8306 
8307       switch (AT_class (a))
8308 	{
8309 	case dw_val_class_addr:
8310 	  dw2_asm_output_addr_rtx (DWARF2_ADDR_SIZE, AT_addr (a), "%s", name);
8311 	  break;
8312 
8313 	case dw_val_class_offset:
8314 	  dw2_asm_output_data (DWARF_OFFSET_SIZE, a->dw_attr_val.v.val_offset,
8315 			       "%s", name);
8316 	  break;
8317 
8318 	case dw_val_class_range_list:
8319 	  {
8320 	    char *p = strchr (ranges_section_label, '\0');
8321 
8322 	    sprintf (p, "+" HOST_WIDE_INT_PRINT_HEX,
8323 		     a->dw_attr_val.v.val_offset);
8324 	    dw2_asm_output_offset (DWARF_OFFSET_SIZE, ranges_section_label,
8325 				   debug_ranges_section, "%s", name);
8326 	    *p = '\0';
8327 	  }
8328 	  break;
8329 
8330 	case dw_val_class_loc:
8331 	  size = size_of_locs (AT_loc (a));
8332 
8333 	  /* Output the block length for this list of location operations.  */
8334 	  if (dwarf_version >= 4)
8335 	    dw2_asm_output_data_uleb128 (size, "%s", name);
8336 	  else
8337 	    dw2_asm_output_data (constant_size (size), size, "%s", name);
8338 
8339 	  output_loc_sequence (AT_loc (a), -1);
8340 	  break;
8341 
8342 	case dw_val_class_const:
8343 	  /* ??? It would be slightly more efficient to use a scheme like is
8344 	     used for unsigned constants below, but gdb 4.x does not sign
8345 	     extend.  Gdb 5.x does sign extend.  */
8346 	  dw2_asm_output_data_sleb128 (AT_int (a), "%s", name);
8347 	  break;
8348 
8349 	case dw_val_class_unsigned_const:
8350 	  {
8351 	    int csize = constant_size (AT_unsigned (a));
8352 	    if (dwarf_version == 3
8353 		&& a->dw_attr == DW_AT_data_member_location
8354 		&& csize >= 4)
8355 	      dw2_asm_output_data_uleb128 (AT_unsigned (a), "%s", name);
8356 	    else
8357 	      dw2_asm_output_data (csize, AT_unsigned (a), "%s", name);
8358 	  }
8359 	  break;
8360 
8361 	case dw_val_class_const_double:
8362 	  {
8363 	    unsigned HOST_WIDE_INT first, second;
8364 
8365 	    if (HOST_BITS_PER_WIDE_INT >= 64)
8366 	      dw2_asm_output_data (1,
8367 				   2 * HOST_BITS_PER_WIDE_INT
8368 				   / HOST_BITS_PER_CHAR,
8369 				   NULL);
8370 
8371 	    if (WORDS_BIG_ENDIAN)
8372 	      {
8373 		first = a->dw_attr_val.v.val_double.high;
8374 		second = a->dw_attr_val.v.val_double.low;
8375 	      }
8376 	    else
8377 	      {
8378 		first = a->dw_attr_val.v.val_double.low;
8379 		second = a->dw_attr_val.v.val_double.high;
8380 	      }
8381 
8382 	    dw2_asm_output_data (HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR,
8383 				 first, name);
8384 	    dw2_asm_output_data (HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR,
8385 				 second, NULL);
8386 	  }
8387 	  break;
8388 
8389 	case dw_val_class_vec:
8390 	  {
8391 	    unsigned int elt_size = a->dw_attr_val.v.val_vec.elt_size;
8392 	    unsigned int len = a->dw_attr_val.v.val_vec.length;
8393 	    unsigned int i;
8394 	    unsigned char *p;
8395 
8396 	    dw2_asm_output_data (constant_size (len * elt_size),
8397 				 len * elt_size, "%s", name);
8398 	    if (elt_size > sizeof (HOST_WIDE_INT))
8399 	      {
8400 		elt_size /= 2;
8401 		len *= 2;
8402 	      }
8403 	    for (i = 0, p = a->dw_attr_val.v.val_vec.array;
8404 		 i < len;
8405 		 i++, p += elt_size)
8406 	      dw2_asm_output_data (elt_size, extract_int (p, elt_size),
8407 				   "fp or vector constant word %u", i);
8408 	    break;
8409 	  }
8410 
8411 	case dw_val_class_flag:
8412 	  if (dwarf_version >= 4)
8413 	    {
8414 	      /* Currently all add_AT_flag calls pass in 1 as last argument,
8415 		 so DW_FORM_flag_present can be used.  If that ever changes,
8416 		 we'll need to use DW_FORM_flag and have some optimization
8417 		 in build_abbrev_table that will change those to
8418 		 DW_FORM_flag_present if it is set to 1 in all DIEs using
8419 		 the same abbrev entry.  */
8420 	      gcc_assert (AT_flag (a) == 1);
8421 	      if (flag_debug_asm)
8422 		fprintf (asm_out_file, "\t\t\t%s %s\n",
8423 			 ASM_COMMENT_START, name);
8424 	      break;
8425 	    }
8426 	  dw2_asm_output_data (1, AT_flag (a), "%s", name);
8427 	  break;
8428 
8429 	case dw_val_class_loc_list:
8430 	  {
8431 	    char *sym = AT_loc_list (a)->ll_symbol;
8432 
8433 	    gcc_assert (sym);
8434 	    dw2_asm_output_offset (DWARF_OFFSET_SIZE, sym, debug_loc_section,
8435 				   "%s", name);
8436 	  }
8437 	  break;
8438 
8439 	case dw_val_class_die_ref:
8440 	  if (AT_ref_external (a))
8441 	    {
8442 	      if (use_debug_types)
8443 	        {
8444 	          comdat_type_node_ref type_node =
8445 	            AT_ref (a)->die_id.die_type_node;
8446 
8447 	          gcc_assert (type_node);
8448 	          output_signature (type_node->signature, name);
8449 	        }
8450 	      else
8451 	        {
8452 		  char *sym = AT_ref (a)->die_id.die_symbol;
8453 		  int size;
8454 
8455 		  gcc_assert (sym);
8456 		  /* In DWARF2, DW_FORM_ref_addr is sized by target address
8457 		     length, whereas in DWARF3 it's always sized as an
8458 		     offset.  */
8459 		  if (dwarf_version == 2)
8460 		    size = DWARF2_ADDR_SIZE;
8461 		  else
8462 		    size = DWARF_OFFSET_SIZE;
8463 		  dw2_asm_output_offset (size, sym, debug_info_section, "%s",
8464 					 name);
8465 		}
8466 	    }
8467 	  else
8468 	    {
8469 	      gcc_assert (AT_ref (a)->die_offset);
8470 	      dw2_asm_output_data (DWARF_OFFSET_SIZE, AT_ref (a)->die_offset,
8471 				   "%s", name);
8472 	    }
8473 	  break;
8474 
8475 	case dw_val_class_fde_ref:
8476 	  {
8477 	    char l1[20];
8478 
8479 	    ASM_GENERATE_INTERNAL_LABEL (l1, FDE_LABEL,
8480 					 a->dw_attr_val.v.val_fde_index * 2);
8481 	    dw2_asm_output_offset (DWARF_OFFSET_SIZE, l1, debug_frame_section,
8482 				   "%s", name);
8483 	  }
8484 	  break;
8485 
8486 	case dw_val_class_vms_delta:
8487 	  dw2_asm_output_vms_delta (DWARF_OFFSET_SIZE,
8488 				    AT_vms_delta2 (a), AT_vms_delta1 (a),
8489 				    "%s", name);
8490 	  break;
8491 
8492 	case dw_val_class_lbl_id:
8493 	  dw2_asm_output_addr (DWARF2_ADDR_SIZE, AT_lbl (a), "%s", name);
8494 	  break;
8495 
8496 	case dw_val_class_lineptr:
8497 	  dw2_asm_output_offset (DWARF_OFFSET_SIZE, AT_lbl (a),
8498 				 debug_line_section, "%s", name);
8499 	  break;
8500 
8501 	case dw_val_class_macptr:
8502 	  dw2_asm_output_offset (DWARF_OFFSET_SIZE, AT_lbl (a),
8503 				 debug_macinfo_section, "%s", name);
8504 	  break;
8505 
8506 	case dw_val_class_str:
8507 	  if (AT_string_form (a) == DW_FORM_strp)
8508 	    dw2_asm_output_offset (DWARF_OFFSET_SIZE,
8509 				   a->dw_attr_val.v.val_str->label,
8510 				   debug_str_section,
8511 				   "%s: \"%s\"", name, AT_string (a));
8512 	  else
8513 	    dw2_asm_output_nstring (AT_string (a), -1, "%s", name);
8514 	  break;
8515 
8516 	case dw_val_class_file:
8517 	  {
8518 	    int f = maybe_emit_file (a->dw_attr_val.v.val_file);
8519 
8520 	    dw2_asm_output_data (constant_size (f), f, "%s (%s)", name,
8521 				 a->dw_attr_val.v.val_file->filename);
8522 	    break;
8523 	  }
8524 
8525 	case dw_val_class_data8:
8526 	  {
8527 	    int i;
8528 
8529 	    for (i = 0; i < 8; i++)
8530 	      dw2_asm_output_data (1, a->dw_attr_val.v.val_data8[i],
8531 				   i == 0 ? "%s" : NULL, name);
8532 	    break;
8533 	  }
8534 
8535 	default:
8536 	  gcc_unreachable ();
8537 	}
8538     }
8539 
8540   FOR_EACH_CHILD (die, c, output_die (c));
8541 
8542   /* Add null byte to terminate sibling list.  */
8543   if (die->die_child != NULL)
8544     dw2_asm_output_data (1, 0, "end of children of DIE %#lx",
8545 			 (unsigned long) die->die_offset);
8546 }
8547 
8548 /* Output the compilation unit that appears at the beginning of the
8549    .debug_info section, and precedes the DIE descriptions.  */
8550 
8551 static void
8552 output_compilation_unit_header (void)
8553 {
8554   int ver = dwarf_version;
8555 
8556   if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
8557     dw2_asm_output_data (4, 0xffffffff,
8558       "Initial length escape value indicating 64-bit DWARF extension");
8559   dw2_asm_output_data (DWARF_OFFSET_SIZE,
8560 		       next_die_offset - DWARF_INITIAL_LENGTH_SIZE,
8561 		       "Length of Compilation Unit Info");
8562   dw2_asm_output_data (2, ver, "DWARF version number");
8563   dw2_asm_output_offset (DWARF_OFFSET_SIZE, abbrev_section_label,
8564 			 debug_abbrev_section,
8565 			 "Offset Into Abbrev. Section");
8566   dw2_asm_output_data (1, DWARF2_ADDR_SIZE, "Pointer Size (in bytes)");
8567 }
8568 
8569 /* Output the compilation unit DIE and its children.  */
8570 
8571 static void
8572 output_comp_unit (dw_die_ref die, int output_if_empty)
8573 {
8574   const char *secname;
8575   char *oldsym, *tmp;
8576 
8577   /* Unless we are outputting main CU, we may throw away empty ones.  */
8578   if (!output_if_empty && die->die_child == NULL)
8579     return;
8580 
8581   /* Even if there are no children of this DIE, we must output the information
8582      about the compilation unit.  Otherwise, on an empty translation unit, we
8583      will generate a present, but empty, .debug_info section.  IRIX 6.5 `nm'
8584      will then complain when examining the file.  First mark all the DIEs in
8585      this CU so we know which get local refs.  */
8586   mark_dies (die);
8587 
8588   build_abbrev_table (die);
8589 
8590   /* Initialize the beginning DIE offset - and calculate sizes/offsets.  */
8591   next_die_offset = DWARF_COMPILE_UNIT_HEADER_SIZE;
8592   calc_die_sizes (die);
8593 
8594   oldsym = die->die_id.die_symbol;
8595   if (oldsym)
8596     {
8597       tmp = XALLOCAVEC (char, strlen (oldsym) + 24);
8598 
8599       sprintf (tmp, ".gnu.linkonce.wi.%s", oldsym);
8600       secname = tmp;
8601       die->die_id.die_symbol = NULL;
8602       switch_to_section (get_section (secname, SECTION_DEBUG, NULL));
8603     }
8604   else
8605     {
8606       switch_to_section (debug_info_section);
8607       ASM_OUTPUT_LABEL (asm_out_file, debug_info_section_label);
8608       info_section_emitted = true;
8609     }
8610 
8611   /* Output debugging information.  */
8612   output_compilation_unit_header ();
8613   output_die (die);
8614 
8615   /* Leave the marks on the main CU, so we can check them in
8616      output_pubnames.  */
8617   if (oldsym)
8618     {
8619       unmark_dies (die);
8620       die->die_id.die_symbol = oldsym;
8621     }
8622 }
8623 
8624 /* Output a comdat type unit DIE and its children.  */
8625 
8626 static void
8627 output_comdat_type_unit (comdat_type_node *node)
8628 {
8629   const char *secname;
8630   char *tmp;
8631   int i;
8632 #if defined (OBJECT_FORMAT_ELF)
8633   tree comdat_key;
8634 #endif
8635 
8636   /* First mark all the DIEs in this CU so we know which get local refs.  */
8637   mark_dies (node->root_die);
8638 
8639   build_abbrev_table (node->root_die);
8640 
8641   /* Initialize the beginning DIE offset - and calculate sizes/offsets.  */
8642   next_die_offset = DWARF_COMDAT_TYPE_UNIT_HEADER_SIZE;
8643   calc_die_sizes (node->root_die);
8644 
8645 #if defined (OBJECT_FORMAT_ELF)
8646   secname = ".debug_types";
8647   tmp = XALLOCAVEC (char, 4 + DWARF_TYPE_SIGNATURE_SIZE * 2);
8648   sprintf (tmp, "wt.");
8649   for (i = 0; i < DWARF_TYPE_SIGNATURE_SIZE; i++)
8650     sprintf (tmp + 3 + i * 2, "%02x", node->signature[i] & 0xff);
8651   comdat_key = get_identifier (tmp);
8652   targetm.asm_out.named_section (secname,
8653                                  SECTION_DEBUG | SECTION_LINKONCE,
8654                                  comdat_key);
8655 #else
8656   tmp = XALLOCAVEC (char, 18 + DWARF_TYPE_SIGNATURE_SIZE * 2);
8657   sprintf (tmp, ".gnu.linkonce.wt.");
8658   for (i = 0; i < DWARF_TYPE_SIGNATURE_SIZE; i++)
8659     sprintf (tmp + 17 + i * 2, "%02x", node->signature[i] & 0xff);
8660   secname = tmp;
8661   switch_to_section (get_section (secname, SECTION_DEBUG, NULL));
8662 #endif
8663 
8664   /* Output debugging information.  */
8665   output_compilation_unit_header ();
8666   output_signature (node->signature, "Type Signature");
8667   dw2_asm_output_data (DWARF_OFFSET_SIZE, node->type_die->die_offset,
8668 		       "Offset to Type DIE");
8669   output_die (node->root_die);
8670 
8671   unmark_dies (node->root_die);
8672 }
8673 
8674 /* Return the DWARF2/3 pubname associated with a decl.  */
8675 
8676 static const char *
8677 dwarf2_name (tree decl, int scope)
8678 {
8679   if (DECL_NAMELESS (decl))
8680     return NULL;
8681   return lang_hooks.dwarf_name (decl, scope ? 1 : 0);
8682 }
8683 
8684 /* Add a new entry to .debug_pubnames if appropriate.  */
8685 
8686 static void
8687 add_pubname_string (const char *str, dw_die_ref die)
8688 {
8689   if (targetm.want_debug_pub_sections)
8690     {
8691       pubname_entry e;
8692 
8693       e.die = die;
8694       e.name = xstrdup (str);
8695       VEC_safe_push (pubname_entry, gc, pubname_table, &e);
8696     }
8697 }
8698 
8699 static void
8700 add_pubname (tree decl, dw_die_ref die)
8701 {
8702   if (targetm.want_debug_pub_sections && TREE_PUBLIC (decl))
8703     {
8704       const char *name = dwarf2_name (decl, 1);
8705       if (name)
8706 	add_pubname_string (name, die);
8707     }
8708 }
8709 
8710 /* Add a new entry to .debug_pubtypes if appropriate.  */
8711 
8712 static void
8713 add_pubtype (tree decl, dw_die_ref die)
8714 {
8715   pubname_entry e;
8716 
8717   if (!targetm.want_debug_pub_sections)
8718     return;
8719 
8720   e.name = NULL;
8721   if ((TREE_PUBLIC (decl)
8722        || is_cu_die (die->die_parent))
8723       && (die->die_tag == DW_TAG_typedef || COMPLETE_TYPE_P (decl)))
8724     {
8725       e.die = die;
8726       if (TYPE_P (decl))
8727 	{
8728 	  if (TYPE_NAME (decl))
8729 	    {
8730 	      if (TREE_CODE (TYPE_NAME (decl)) == IDENTIFIER_NODE)
8731 		e.name = IDENTIFIER_POINTER (TYPE_NAME (decl));
8732 	      else if (TREE_CODE (TYPE_NAME (decl)) == TYPE_DECL
8733 		       && DECL_NAME (TYPE_NAME (decl)))
8734 		e.name = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (decl)));
8735 	      else
8736 	       e.name = xstrdup ((const char *) get_AT_string (die, DW_AT_name));
8737 	    }
8738 	}
8739       else
8740 	{
8741 	  e.name = dwarf2_name (decl, 1);
8742 	  if (e.name)
8743 	    e.name = xstrdup (e.name);
8744 	}
8745 
8746       /* If we don't have a name for the type, there's no point in adding
8747 	 it to the table.  */
8748       if (e.name && e.name[0] != '\0')
8749 	VEC_safe_push (pubname_entry, gc, pubtype_table, &e);
8750     }
8751 }
8752 
8753 /* Output the public names table used to speed up access to externally
8754    visible names; or the public types table used to find type definitions.  */
8755 
8756 static void
8757 output_pubnames (VEC (pubname_entry, gc) * names)
8758 {
8759   unsigned i;
8760   unsigned long pubnames_length = size_of_pubnames (names);
8761   pubname_ref pub;
8762 
8763   if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
8764     dw2_asm_output_data (4, 0xffffffff,
8765       "Initial length escape value indicating 64-bit DWARF extension");
8766   if (names == pubname_table)
8767     dw2_asm_output_data (DWARF_OFFSET_SIZE, pubnames_length,
8768 			 "Length of Public Names Info");
8769   else
8770     dw2_asm_output_data (DWARF_OFFSET_SIZE, pubnames_length,
8771 			 "Length of Public Type Names Info");
8772   /* Version number for pubnames/pubtypes is still 2, even in DWARF3.  */
8773   dw2_asm_output_data (2, 2, "DWARF Version");
8774   dw2_asm_output_offset (DWARF_OFFSET_SIZE, debug_info_section_label,
8775 			 debug_info_section,
8776 			 "Offset of Compilation Unit Info");
8777   dw2_asm_output_data (DWARF_OFFSET_SIZE, next_die_offset,
8778 		       "Compilation Unit Length");
8779 
8780   FOR_EACH_VEC_ELT (pubname_entry, names, i, pub)
8781     {
8782       /* We shouldn't see pubnames for DIEs outside of the main CU.  */
8783       if (names == pubname_table)
8784 	gcc_assert (pub->die->die_mark);
8785 
8786       if (names != pubtype_table
8787 	  || pub->die->die_offset != 0
8788 	  || !flag_eliminate_unused_debug_types)
8789 	{
8790 	  dw2_asm_output_data (DWARF_OFFSET_SIZE, pub->die->die_offset,
8791 			       "DIE offset");
8792 
8793 	  dw2_asm_output_nstring (pub->name, -1, "external name");
8794 	}
8795     }
8796 
8797   dw2_asm_output_data (DWARF_OFFSET_SIZE, 0, NULL);
8798 }
8799 
8800 /* Output the information that goes into the .debug_aranges table.
8801    Namely, define the beginning and ending address range of the
8802    text section generated for this compilation unit.  */
8803 
8804 static void
8805 output_aranges (unsigned long aranges_length)
8806 {
8807   unsigned i;
8808 
8809   if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
8810     dw2_asm_output_data (4, 0xffffffff,
8811       "Initial length escape value indicating 64-bit DWARF extension");
8812   dw2_asm_output_data (DWARF_OFFSET_SIZE, aranges_length,
8813 		       "Length of Address Ranges Info");
8814   /* Version number for aranges is still 2, even in DWARF3.  */
8815   dw2_asm_output_data (2, 2, "DWARF Version");
8816   dw2_asm_output_offset (DWARF_OFFSET_SIZE, debug_info_section_label,
8817 			 debug_info_section,
8818 			 "Offset of Compilation Unit Info");
8819   dw2_asm_output_data (1, DWARF2_ADDR_SIZE, "Size of Address");
8820   dw2_asm_output_data (1, 0, "Size of Segment Descriptor");
8821 
8822   /* We need to align to twice the pointer size here.  */
8823   if (DWARF_ARANGES_PAD_SIZE)
8824     {
8825       /* Pad using a 2 byte words so that padding is correct for any
8826 	 pointer size.  */
8827       dw2_asm_output_data (2, 0, "Pad to %d byte boundary",
8828 			   2 * DWARF2_ADDR_SIZE);
8829       for (i = 2; i < (unsigned) DWARF_ARANGES_PAD_SIZE; i += 2)
8830 	dw2_asm_output_data (2, 0, NULL);
8831     }
8832 
8833   /* It is necessary not to output these entries if the sections were
8834      not used; if the sections were not used, the length will be 0 and
8835      the address may end up as 0 if the section is discarded by ld
8836      --gc-sections, leaving an invalid (0, 0) entry that can be
8837      confused with the terminator.  */
8838   if (text_section_used)
8839     {
8840       dw2_asm_output_addr (DWARF2_ADDR_SIZE, text_section_label, "Address");
8841       dw2_asm_output_delta (DWARF2_ADDR_SIZE, text_end_label,
8842 			    text_section_label, "Length");
8843     }
8844   if (cold_text_section_used)
8845     {
8846       dw2_asm_output_addr (DWARF2_ADDR_SIZE, cold_text_section_label,
8847 			   "Address");
8848       dw2_asm_output_delta (DWARF2_ADDR_SIZE, cold_end_label,
8849 			    cold_text_section_label, "Length");
8850     }
8851 
8852   if (have_multiple_function_sections)
8853     {
8854       unsigned fde_idx;
8855       dw_fde_ref fde;
8856 
8857       FOR_EACH_VEC_ELT (dw_fde_ref, fde_vec, fde_idx, fde)
8858 	{
8859 	  if (!fde->in_std_section)
8860 	    {
8861 	      dw2_asm_output_addr (DWARF2_ADDR_SIZE, fde->dw_fde_begin,
8862 				   "Address");
8863 	      dw2_asm_output_delta (DWARF2_ADDR_SIZE, fde->dw_fde_end,
8864 				    fde->dw_fde_begin, "Length");
8865 	    }
8866 	  if (fde->dw_fde_second_begin && !fde->second_in_std_section)
8867 	    {
8868 	      dw2_asm_output_addr (DWARF2_ADDR_SIZE, fde->dw_fde_second_begin,
8869 				   "Address");
8870 	      dw2_asm_output_delta (DWARF2_ADDR_SIZE, fde->dw_fde_second_end,
8871 				    fde->dw_fde_second_begin, "Length");
8872 	    }
8873 	}
8874     }
8875 
8876   /* Output the terminator words.  */
8877   dw2_asm_output_data (DWARF2_ADDR_SIZE, 0, NULL);
8878   dw2_asm_output_data (DWARF2_ADDR_SIZE, 0, NULL);
8879 }
8880 
8881 /* Add a new entry to .debug_ranges.  Return the offset at which it
8882    was placed.  */
8883 
8884 static unsigned int
8885 add_ranges_num (int num)
8886 {
8887   unsigned int in_use = ranges_table_in_use;
8888 
8889   if (in_use == ranges_table_allocated)
8890     {
8891       ranges_table_allocated += RANGES_TABLE_INCREMENT;
8892       ranges_table = GGC_RESIZEVEC (struct dw_ranges_struct, ranges_table,
8893 				    ranges_table_allocated);
8894       memset (ranges_table + ranges_table_in_use, 0,
8895 	      RANGES_TABLE_INCREMENT * sizeof (struct dw_ranges_struct));
8896     }
8897 
8898   ranges_table[in_use].num = num;
8899   ranges_table_in_use = in_use + 1;
8900 
8901   return in_use * 2 * DWARF2_ADDR_SIZE;
8902 }
8903 
8904 /* Add a new entry to .debug_ranges corresponding to a block, or a
8905    range terminator if BLOCK is NULL.  */
8906 
8907 static unsigned int
8908 add_ranges (const_tree block)
8909 {
8910   return add_ranges_num (block ? BLOCK_NUMBER (block) : 0);
8911 }
8912 
8913 /* Add a new entry to .debug_ranges corresponding to a pair of
8914    labels.  */
8915 
8916 static void
8917 add_ranges_by_labels (dw_die_ref die, const char *begin, const char *end,
8918 		      bool *added)
8919 {
8920   unsigned int in_use = ranges_by_label_in_use;
8921   unsigned int offset;
8922 
8923   if (in_use == ranges_by_label_allocated)
8924     {
8925       ranges_by_label_allocated += RANGES_TABLE_INCREMENT;
8926       ranges_by_label = GGC_RESIZEVEC (struct dw_ranges_by_label_struct,
8927 				       ranges_by_label,
8928 				       ranges_by_label_allocated);
8929       memset (ranges_by_label + ranges_by_label_in_use, 0,
8930 	      RANGES_TABLE_INCREMENT
8931 	      * sizeof (struct dw_ranges_by_label_struct));
8932     }
8933 
8934   ranges_by_label[in_use].begin = begin;
8935   ranges_by_label[in_use].end = end;
8936   ranges_by_label_in_use = in_use + 1;
8937 
8938   offset = add_ranges_num (-(int)in_use - 1);
8939   if (!*added)
8940     {
8941       add_AT_range_list (die, DW_AT_ranges, offset);
8942       *added = true;
8943     }
8944 }
8945 
8946 static void
8947 output_ranges (void)
8948 {
8949   unsigned i;
8950   static const char *const start_fmt = "Offset %#x";
8951   const char *fmt = start_fmt;
8952 
8953   for (i = 0; i < ranges_table_in_use; i++)
8954     {
8955       int block_num = ranges_table[i].num;
8956 
8957       if (block_num > 0)
8958 	{
8959 	  char blabel[MAX_ARTIFICIAL_LABEL_BYTES];
8960 	  char elabel[MAX_ARTIFICIAL_LABEL_BYTES];
8961 
8962 	  ASM_GENERATE_INTERNAL_LABEL (blabel, BLOCK_BEGIN_LABEL, block_num);
8963 	  ASM_GENERATE_INTERNAL_LABEL (elabel, BLOCK_END_LABEL, block_num);
8964 
8965 	  /* If all code is in the text section, then the compilation
8966 	     unit base address defaults to DW_AT_low_pc, which is the
8967 	     base of the text section.  */
8968 	  if (!have_multiple_function_sections)
8969 	    {
8970 	      dw2_asm_output_delta (DWARF2_ADDR_SIZE, blabel,
8971 				    text_section_label,
8972 				    fmt, i * 2 * DWARF2_ADDR_SIZE);
8973 	      dw2_asm_output_delta (DWARF2_ADDR_SIZE, elabel,
8974 				    text_section_label, NULL);
8975 	    }
8976 
8977 	  /* Otherwise, the compilation unit base address is zero,
8978 	     which allows us to use absolute addresses, and not worry
8979 	     about whether the target supports cross-section
8980 	     arithmetic.  */
8981 	  else
8982 	    {
8983 	      dw2_asm_output_addr (DWARF2_ADDR_SIZE, blabel,
8984 				   fmt, i * 2 * DWARF2_ADDR_SIZE);
8985 	      dw2_asm_output_addr (DWARF2_ADDR_SIZE, elabel, NULL);
8986 	    }
8987 
8988 	  fmt = NULL;
8989 	}
8990 
8991       /* Negative block_num stands for an index into ranges_by_label.  */
8992       else if (block_num < 0)
8993 	{
8994 	  int lab_idx = - block_num - 1;
8995 
8996 	  if (!have_multiple_function_sections)
8997 	    {
8998 	      gcc_unreachable ();
8999 #if 0
9000 	      /* If we ever use add_ranges_by_labels () for a single
9001 		 function section, all we have to do is to take out
9002 		 the #if 0 above.  */
9003 	      dw2_asm_output_delta (DWARF2_ADDR_SIZE,
9004 				    ranges_by_label[lab_idx].begin,
9005 				    text_section_label,
9006 				    fmt, i * 2 * DWARF2_ADDR_SIZE);
9007 	      dw2_asm_output_delta (DWARF2_ADDR_SIZE,
9008 				    ranges_by_label[lab_idx].end,
9009 				    text_section_label, NULL);
9010 #endif
9011 	    }
9012 	  else
9013 	    {
9014 	      dw2_asm_output_addr (DWARF2_ADDR_SIZE,
9015 				   ranges_by_label[lab_idx].begin,
9016 				   fmt, i * 2 * DWARF2_ADDR_SIZE);
9017 	      dw2_asm_output_addr (DWARF2_ADDR_SIZE,
9018 				   ranges_by_label[lab_idx].end,
9019 				   NULL);
9020 	    }
9021 	}
9022       else
9023 	{
9024 	  dw2_asm_output_data (DWARF2_ADDR_SIZE, 0, NULL);
9025 	  dw2_asm_output_data (DWARF2_ADDR_SIZE, 0, NULL);
9026 	  fmt = start_fmt;
9027 	}
9028     }
9029 }
9030 
9031 /* Data structure containing information about input files.  */
9032 struct file_info
9033 {
9034   const char *path;	/* Complete file name.  */
9035   const char *fname;	/* File name part.  */
9036   int length;		/* Length of entire string.  */
9037   struct dwarf_file_data * file_idx;	/* Index in input file table.  */
9038   int dir_idx;		/* Index in directory table.  */
9039 };
9040 
9041 /* Data structure containing information about directories with source
9042    files.  */
9043 struct dir_info
9044 {
9045   const char *path;	/* Path including directory name.  */
9046   int length;		/* Path length.  */
9047   int prefix;		/* Index of directory entry which is a prefix.  */
9048   int count;		/* Number of files in this directory.  */
9049   int dir_idx;		/* Index of directory used as base.  */
9050 };
9051 
9052 /* Callback function for file_info comparison.  We sort by looking at
9053    the directories in the path.  */
9054 
9055 static int
9056 file_info_cmp (const void *p1, const void *p2)
9057 {
9058   const struct file_info *const s1 = (const struct file_info *) p1;
9059   const struct file_info *const s2 = (const struct file_info *) p2;
9060   const unsigned char *cp1;
9061   const unsigned char *cp2;
9062 
9063   /* Take care of file names without directories.  We need to make sure that
9064      we return consistent values to qsort since some will get confused if
9065      we return the same value when identical operands are passed in opposite
9066      orders.  So if neither has a directory, return 0 and otherwise return
9067      1 or -1 depending on which one has the directory.  */
9068   if ((s1->path == s1->fname || s2->path == s2->fname))
9069     return (s2->path == s2->fname) - (s1->path == s1->fname);
9070 
9071   cp1 = (const unsigned char *) s1->path;
9072   cp2 = (const unsigned char *) s2->path;
9073 
9074   while (1)
9075     {
9076       ++cp1;
9077       ++cp2;
9078       /* Reached the end of the first path?  If so, handle like above.  */
9079       if ((cp1 == (const unsigned char *) s1->fname)
9080 	  || (cp2 == (const unsigned char *) s2->fname))
9081 	return ((cp2 == (const unsigned char *) s2->fname)
9082 		- (cp1 == (const unsigned char *) s1->fname));
9083 
9084       /* Character of current path component the same?  */
9085       else if (*cp1 != *cp2)
9086 	return *cp1 - *cp2;
9087     }
9088 }
9089 
9090 struct file_name_acquire_data
9091 {
9092   struct file_info *files;
9093   int used_files;
9094   int max_files;
9095 };
9096 
9097 /* Traversal function for the hash table.  */
9098 
9099 static int
9100 file_name_acquire (void ** slot, void *data)
9101 {
9102   struct file_name_acquire_data *fnad = (struct file_name_acquire_data *) data;
9103   struct dwarf_file_data *d = (struct dwarf_file_data *) *slot;
9104   struct file_info *fi;
9105   const char *f;
9106 
9107   gcc_assert (fnad->max_files >= d->emitted_number);
9108 
9109   if (! d->emitted_number)
9110     return 1;
9111 
9112   gcc_assert (fnad->max_files != fnad->used_files);
9113 
9114   fi = fnad->files + fnad->used_files++;
9115 
9116   /* Skip all leading "./".  */
9117   f = d->filename;
9118   while (f[0] == '.' && IS_DIR_SEPARATOR (f[1]))
9119     f += 2;
9120 
9121   /* Create a new array entry.  */
9122   fi->path = f;
9123   fi->length = strlen (f);
9124   fi->file_idx = d;
9125 
9126   /* Search for the file name part.  */
9127   f = strrchr (f, DIR_SEPARATOR);
9128 #if defined (DIR_SEPARATOR_2)
9129   {
9130     char *g = strrchr (fi->path, DIR_SEPARATOR_2);
9131 
9132     if (g != NULL)
9133       {
9134 	if (f == NULL || f < g)
9135 	  f = g;
9136       }
9137   }
9138 #endif
9139 
9140   fi->fname = f == NULL ? fi->path : f + 1;
9141   return 1;
9142 }
9143 
9144 /* Output the directory table and the file name table.  We try to minimize
9145    the total amount of memory needed.  A heuristic is used to avoid large
9146    slowdowns with many input files.  */
9147 
9148 static void
9149 output_file_names (void)
9150 {
9151   struct file_name_acquire_data fnad;
9152   int numfiles;
9153   struct file_info *files;
9154   struct dir_info *dirs;
9155   int *saved;
9156   int *savehere;
9157   int *backmap;
9158   int ndirs;
9159   int idx_offset;
9160   int i;
9161 
9162   if (!last_emitted_file)
9163     {
9164       dw2_asm_output_data (1, 0, "End directory table");
9165       dw2_asm_output_data (1, 0, "End file name table");
9166       return;
9167     }
9168 
9169   numfiles = last_emitted_file->emitted_number;
9170 
9171   /* Allocate the various arrays we need.  */
9172   files = XALLOCAVEC (struct file_info, numfiles);
9173   dirs = XALLOCAVEC (struct dir_info, numfiles);
9174 
9175   fnad.files = files;
9176   fnad.used_files = 0;
9177   fnad.max_files = numfiles;
9178   htab_traverse (file_table, file_name_acquire, &fnad);
9179   gcc_assert (fnad.used_files == fnad.max_files);
9180 
9181   qsort (files, numfiles, sizeof (files[0]), file_info_cmp);
9182 
9183   /* Find all the different directories used.  */
9184   dirs[0].path = files[0].path;
9185   dirs[0].length = files[0].fname - files[0].path;
9186   dirs[0].prefix = -1;
9187   dirs[0].count = 1;
9188   dirs[0].dir_idx = 0;
9189   files[0].dir_idx = 0;
9190   ndirs = 1;
9191 
9192   for (i = 1; i < numfiles; i++)
9193     if (files[i].fname - files[i].path == dirs[ndirs - 1].length
9194 	&& memcmp (dirs[ndirs - 1].path, files[i].path,
9195 		   dirs[ndirs - 1].length) == 0)
9196       {
9197 	/* Same directory as last entry.  */
9198 	files[i].dir_idx = ndirs - 1;
9199 	++dirs[ndirs - 1].count;
9200       }
9201     else
9202       {
9203 	int j;
9204 
9205 	/* This is a new directory.  */
9206 	dirs[ndirs].path = files[i].path;
9207 	dirs[ndirs].length = files[i].fname - files[i].path;
9208 	dirs[ndirs].count = 1;
9209 	dirs[ndirs].dir_idx = ndirs;
9210 	files[i].dir_idx = ndirs;
9211 
9212 	/* Search for a prefix.  */
9213 	dirs[ndirs].prefix = -1;
9214 	for (j = 0; j < ndirs; j++)
9215 	  if (dirs[j].length < dirs[ndirs].length
9216 	      && dirs[j].length > 1
9217 	      && (dirs[ndirs].prefix == -1
9218 		  || dirs[j].length > dirs[dirs[ndirs].prefix].length)
9219 	      && memcmp (dirs[j].path, dirs[ndirs].path, dirs[j].length) == 0)
9220 	    dirs[ndirs].prefix = j;
9221 
9222 	++ndirs;
9223       }
9224 
9225   /* Now to the actual work.  We have to find a subset of the directories which
9226      allow expressing the file name using references to the directory table
9227      with the least amount of characters.  We do not do an exhaustive search
9228      where we would have to check out every combination of every single
9229      possible prefix.  Instead we use a heuristic which provides nearly optimal
9230      results in most cases and never is much off.  */
9231   saved = XALLOCAVEC (int, ndirs);
9232   savehere = XALLOCAVEC (int, ndirs);
9233 
9234   memset (saved, '\0', ndirs * sizeof (saved[0]));
9235   for (i = 0; i < ndirs; i++)
9236     {
9237       int j;
9238       int total;
9239 
9240       /* We can always save some space for the current directory.  But this
9241 	 does not mean it will be enough to justify adding the directory.  */
9242       savehere[i] = dirs[i].length;
9243       total = (savehere[i] - saved[i]) * dirs[i].count;
9244 
9245       for (j = i + 1; j < ndirs; j++)
9246 	{
9247 	  savehere[j] = 0;
9248 	  if (saved[j] < dirs[i].length)
9249 	    {
9250 	      /* Determine whether the dirs[i] path is a prefix of the
9251 		 dirs[j] path.  */
9252 	      int k;
9253 
9254 	      k = dirs[j].prefix;
9255 	      while (k != -1 && k != (int) i)
9256 		k = dirs[k].prefix;
9257 
9258 	      if (k == (int) i)
9259 		{
9260 		  /* Yes it is.  We can possibly save some memory by
9261 		     writing the filenames in dirs[j] relative to
9262 		     dirs[i].  */
9263 		  savehere[j] = dirs[i].length;
9264 		  total += (savehere[j] - saved[j]) * dirs[j].count;
9265 		}
9266 	    }
9267 	}
9268 
9269       /* Check whether we can save enough to justify adding the dirs[i]
9270 	 directory.  */
9271       if (total > dirs[i].length + 1)
9272 	{
9273 	  /* It's worthwhile adding.  */
9274 	  for (j = i; j < ndirs; j++)
9275 	    if (savehere[j] > 0)
9276 	      {
9277 		/* Remember how much we saved for this directory so far.  */
9278 		saved[j] = savehere[j];
9279 
9280 		/* Remember the prefix directory.  */
9281 		dirs[j].dir_idx = i;
9282 	      }
9283 	}
9284     }
9285 
9286   /* Emit the directory name table.  */
9287   idx_offset = dirs[0].length > 0 ? 1 : 0;
9288   for (i = 1 - idx_offset; i < ndirs; i++)
9289     dw2_asm_output_nstring (dirs[i].path,
9290 			    dirs[i].length
9291 			     - !DWARF2_DIR_SHOULD_END_WITH_SEPARATOR,
9292 			    "Directory Entry: %#x", i + idx_offset);
9293 
9294   dw2_asm_output_data (1, 0, "End directory table");
9295 
9296   /* We have to emit them in the order of emitted_number since that's
9297      used in the debug info generation.  To do this efficiently we
9298      generate a back-mapping of the indices first.  */
9299   backmap = XALLOCAVEC (int, numfiles);
9300   for (i = 0; i < numfiles; i++)
9301     backmap[files[i].file_idx->emitted_number - 1] = i;
9302 
9303   /* Now write all the file names.  */
9304   for (i = 0; i < numfiles; i++)
9305     {
9306       int file_idx = backmap[i];
9307       int dir_idx = dirs[files[file_idx].dir_idx].dir_idx;
9308 
9309 #ifdef VMS_DEBUGGING_INFO
9310 #define MAX_VMS_VERSION_LEN 6 /* ";32768" */
9311 
9312       /* Setting these fields can lead to debugger miscomparisons,
9313          but VMS Debug requires them to be set correctly.  */
9314 
9315       int ver;
9316       long long cdt;
9317       long siz;
9318       int maxfilelen = strlen (files[file_idx].path)
9319 			       + dirs[dir_idx].length
9320 			       + MAX_VMS_VERSION_LEN + 1;
9321       char *filebuf = XALLOCAVEC (char, maxfilelen);
9322 
9323       vms_file_stats_name (files[file_idx].path, 0, 0, 0, &ver);
9324       snprintf (filebuf, maxfilelen, "%s;%d",
9325 	        files[file_idx].path + dirs[dir_idx].length, ver);
9326 
9327       dw2_asm_output_nstring
9328 	(filebuf, -1, "File Entry: %#x", (unsigned) i + 1);
9329 
9330       /* Include directory index.  */
9331       dw2_asm_output_data_uleb128 (dir_idx + idx_offset, NULL);
9332 
9333       /* Modification time.  */
9334       dw2_asm_output_data_uleb128
9335         ((vms_file_stats_name (files[file_idx].path, &cdt, 0, 0, 0) == 0)
9336 	  ? cdt : 0,
9337 	 NULL);
9338 
9339       /* File length in bytes.  */
9340       dw2_asm_output_data_uleb128
9341         ((vms_file_stats_name (files[file_idx].path, 0, &siz, 0, 0) == 0)
9342       	  ? siz : 0,
9343 	 NULL);
9344 #else
9345       dw2_asm_output_nstring (files[file_idx].path + dirs[dir_idx].length, -1,
9346 			      "File Entry: %#x", (unsigned) i + 1);
9347 
9348       /* Include directory index.  */
9349       dw2_asm_output_data_uleb128 (dir_idx + idx_offset, NULL);
9350 
9351       /* Modification time.  */
9352       dw2_asm_output_data_uleb128 (0, NULL);
9353 
9354       /* File length in bytes.  */
9355       dw2_asm_output_data_uleb128 (0, NULL);
9356 #endif /* VMS_DEBUGGING_INFO */
9357     }
9358 
9359   dw2_asm_output_data (1, 0, "End file name table");
9360 }
9361 
9362 
9363 /* Output one line number table into the .debug_line section.  */
9364 
9365 static void
9366 output_one_line_info_table (dw_line_info_table *table)
9367 {
9368   char line_label[MAX_ARTIFICIAL_LABEL_BYTES];
9369   unsigned int current_line = 1;
9370   bool current_is_stmt = DWARF_LINE_DEFAULT_IS_STMT_START;
9371   dw_line_info_entry *ent;
9372   size_t i;
9373 
9374   FOR_EACH_VEC_ELT (dw_line_info_entry, table->entries, i, ent)
9375     {
9376       switch (ent->opcode)
9377 	{
9378 	case LI_set_address:
9379 	  /* ??? Unfortunately, we have little choice here currently, and
9380 	     must always use the most general form.  GCC does not know the
9381 	     address delta itself, so we can't use DW_LNS_advance_pc.  Many
9382 	     ports do have length attributes which will give an upper bound
9383 	     on the address range.  We could perhaps use length attributes
9384 	     to determine when it is safe to use DW_LNS_fixed_advance_pc.  */
9385 	  ASM_GENERATE_INTERNAL_LABEL (line_label, LINE_CODE_LABEL, ent->val);
9386 
9387 	  /* This can handle any delta.  This takes
9388 	     4+DWARF2_ADDR_SIZE bytes.  */
9389 	  dw2_asm_output_data (1, 0, "set address %s", line_label);
9390 	  dw2_asm_output_data_uleb128 (1 + DWARF2_ADDR_SIZE, NULL);
9391 	  dw2_asm_output_data (1, DW_LNE_set_address, NULL);
9392 	  dw2_asm_output_addr (DWARF2_ADDR_SIZE, line_label, NULL);
9393 	  break;
9394 
9395 	case LI_set_line:
9396 	  if (ent->val == current_line)
9397 	    {
9398 	      /* We still need to start a new row, so output a copy insn.  */
9399 	      dw2_asm_output_data (1, DW_LNS_copy,
9400 				   "copy line %u", current_line);
9401 	    }
9402 	  else
9403 	    {
9404 	      int line_offset = ent->val - current_line;
9405 	      int line_delta = line_offset - DWARF_LINE_BASE;
9406 
9407 	      current_line = ent->val;
9408 	      if (line_delta >= 0 && line_delta < (DWARF_LINE_RANGE - 1))
9409 		{
9410 		  /* This can handle deltas from -10 to 234, using the current
9411 		     definitions of DWARF_LINE_BASE and DWARF_LINE_RANGE.
9412 		     This takes 1 byte.  */
9413 		  dw2_asm_output_data (1, DWARF_LINE_OPCODE_BASE + line_delta,
9414 				       "line %u", current_line);
9415 		}
9416 	      else
9417 		{
9418 		  /* This can handle any delta.  This takes at least 4 bytes,
9419 		     depending on the value being encoded.  */
9420 		  dw2_asm_output_data (1, DW_LNS_advance_line,
9421 				       "advance to line %u", current_line);
9422 		  dw2_asm_output_data_sleb128 (line_offset, NULL);
9423 		  dw2_asm_output_data (1, DW_LNS_copy, NULL);
9424 		}
9425 	    }
9426 	  break;
9427 
9428 	case LI_set_file:
9429 	  dw2_asm_output_data (1, DW_LNS_set_file, "set file %u", ent->val);
9430 	  dw2_asm_output_data_uleb128 (ent->val, "%u", ent->val);
9431 	  break;
9432 
9433 	case LI_set_column:
9434 	  dw2_asm_output_data (1, DW_LNS_set_column, "column %u", ent->val);
9435 	  dw2_asm_output_data_uleb128 (ent->val, "%u", ent->val);
9436 	  break;
9437 
9438 	case LI_negate_stmt:
9439 	  current_is_stmt = !current_is_stmt;
9440 	  dw2_asm_output_data (1, DW_LNS_negate_stmt,
9441 			       "is_stmt %d", current_is_stmt);
9442 	  break;
9443 
9444 	case LI_set_prologue_end:
9445 	  dw2_asm_output_data (1, DW_LNS_set_prologue_end,
9446 			       "set prologue end");
9447 	  break;
9448 
9449 	case LI_set_epilogue_begin:
9450 	  dw2_asm_output_data (1, DW_LNS_set_epilogue_begin,
9451 			       "set epilogue begin");
9452 	  break;
9453 
9454 	case LI_set_discriminator:
9455 	  dw2_asm_output_data (1, 0, "discriminator %u", ent->val);
9456 	  dw2_asm_output_data_uleb128 (1 + size_of_uleb128 (ent->val), NULL);
9457 	  dw2_asm_output_data (1, DW_LNE_set_discriminator, NULL);
9458 	  dw2_asm_output_data_uleb128 (ent->val, NULL);
9459 	  break;
9460 	}
9461     }
9462 
9463   /* Emit debug info for the address of the end of the table.  */
9464   dw2_asm_output_data (1, 0, "set address %s", table->end_label);
9465   dw2_asm_output_data_uleb128 (1 + DWARF2_ADDR_SIZE, NULL);
9466   dw2_asm_output_data (1, DW_LNE_set_address, NULL);
9467   dw2_asm_output_addr (DWARF2_ADDR_SIZE, table->end_label, NULL);
9468 
9469   dw2_asm_output_data (1, 0, "end sequence");
9470   dw2_asm_output_data_uleb128 (1, NULL);
9471   dw2_asm_output_data (1, DW_LNE_end_sequence, NULL);
9472 }
9473 
9474 /* Output the source line number correspondence information.  This
9475    information goes into the .debug_line section.  */
9476 
9477 static void
9478 output_line_info (void)
9479 {
9480   char l1[20], l2[20], p1[20], p2[20];
9481   int ver = dwarf_version;
9482   bool saw_one = false;
9483   int opc;
9484 
9485   ASM_GENERATE_INTERNAL_LABEL (l1, LINE_NUMBER_BEGIN_LABEL, 0);
9486   ASM_GENERATE_INTERNAL_LABEL (l2, LINE_NUMBER_END_LABEL, 0);
9487   ASM_GENERATE_INTERNAL_LABEL (p1, LN_PROLOG_AS_LABEL, 0);
9488   ASM_GENERATE_INTERNAL_LABEL (p2, LN_PROLOG_END_LABEL, 0);
9489 
9490   if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
9491     dw2_asm_output_data (4, 0xffffffff,
9492       "Initial length escape value indicating 64-bit DWARF extension");
9493   dw2_asm_output_delta (DWARF_OFFSET_SIZE, l2, l1,
9494 			"Length of Source Line Info");
9495   ASM_OUTPUT_LABEL (asm_out_file, l1);
9496 
9497   dw2_asm_output_data (2, ver, "DWARF Version");
9498   dw2_asm_output_delta (DWARF_OFFSET_SIZE, p2, p1, "Prolog Length");
9499   ASM_OUTPUT_LABEL (asm_out_file, p1);
9500 
9501   /* Define the architecture-dependent minimum instruction length (in bytes).
9502      In this implementation of DWARF, this field is used for information
9503      purposes only.  Since GCC generates assembly language, we have no
9504      a priori knowledge of how many instruction bytes are generated for each
9505      source line, and therefore can use only the DW_LNE_set_address and
9506      DW_LNS_fixed_advance_pc line information commands.  Accordingly, we fix
9507      this as '1', which is "correct enough" for all architectures,
9508      and don't let the target override.  */
9509   dw2_asm_output_data (1, 1, "Minimum Instruction Length");
9510 
9511   if (ver >= 4)
9512     dw2_asm_output_data (1, DWARF_LINE_DEFAULT_MAX_OPS_PER_INSN,
9513 			 "Maximum Operations Per Instruction");
9514   dw2_asm_output_data (1, DWARF_LINE_DEFAULT_IS_STMT_START,
9515 		       "Default is_stmt_start flag");
9516   dw2_asm_output_data (1, DWARF_LINE_BASE,
9517 		       "Line Base Value (Special Opcodes)");
9518   dw2_asm_output_data (1, DWARF_LINE_RANGE,
9519 		       "Line Range Value (Special Opcodes)");
9520   dw2_asm_output_data (1, DWARF_LINE_OPCODE_BASE,
9521 		       "Special Opcode Base");
9522 
9523   for (opc = 1; opc < DWARF_LINE_OPCODE_BASE; opc++)
9524     {
9525       int n_op_args;
9526       switch (opc)
9527 	{
9528 	case DW_LNS_advance_pc:
9529 	case DW_LNS_advance_line:
9530 	case DW_LNS_set_file:
9531 	case DW_LNS_set_column:
9532 	case DW_LNS_fixed_advance_pc:
9533 	case DW_LNS_set_isa:
9534 	  n_op_args = 1;
9535 	  break;
9536 	default:
9537 	  n_op_args = 0;
9538 	  break;
9539 	}
9540 
9541       dw2_asm_output_data (1, n_op_args, "opcode: %#x has %d args",
9542 			   opc, n_op_args);
9543     }
9544 
9545   /* Write out the information about the files we use.  */
9546   output_file_names ();
9547   ASM_OUTPUT_LABEL (asm_out_file, p2);
9548 
9549   if (separate_line_info)
9550     {
9551       dw_line_info_table *table;
9552       size_t i;
9553 
9554       FOR_EACH_VEC_ELT (dw_line_info_table_p, separate_line_info, i, table)
9555 	if (table->in_use)
9556 	  {
9557 	    output_one_line_info_table (table);
9558 	    saw_one = true;
9559 	  }
9560     }
9561   if (cold_text_section_line_info && cold_text_section_line_info->in_use)
9562     {
9563       output_one_line_info_table (cold_text_section_line_info);
9564       saw_one = true;
9565     }
9566 
9567   /* ??? Some Darwin linkers crash on a .debug_line section with no
9568      sequences.  Further, merely a DW_LNE_end_sequence entry is not
9569      sufficient -- the address column must also be initialized.
9570      Make sure to output at least one set_address/end_sequence pair,
9571      choosing .text since that section is always present.  */
9572   if (text_section_line_info->in_use || !saw_one)
9573     output_one_line_info_table (text_section_line_info);
9574 
9575   /* Output the marker for the end of the line number info.  */
9576   ASM_OUTPUT_LABEL (asm_out_file, l2);
9577 }
9578 
9579 /* Given a pointer to a tree node for some base type, return a pointer to
9580    a DIE that describes the given type.
9581 
9582    This routine must only be called for GCC type nodes that correspond to
9583    Dwarf base (fundamental) types.  */
9584 
9585 static dw_die_ref
9586 base_type_die (tree type)
9587 {
9588   dw_die_ref base_type_result;
9589   enum dwarf_type encoding;
9590 
9591   if (TREE_CODE (type) == ERROR_MARK || TREE_CODE (type) == VOID_TYPE)
9592     return 0;
9593 
9594   /* If this is a subtype that should not be emitted as a subrange type,
9595      use the base type.  See subrange_type_for_debug_p.  */
9596   if (TREE_CODE (type) == INTEGER_TYPE && TREE_TYPE (type) != NULL_TREE)
9597     type = TREE_TYPE (type);
9598 
9599   switch (TREE_CODE (type))
9600     {
9601     case INTEGER_TYPE:
9602       if ((dwarf_version >= 4 || !dwarf_strict)
9603 	  && TYPE_NAME (type)
9604 	  && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
9605 	  && DECL_IS_BUILTIN (TYPE_NAME (type))
9606 	  && DECL_NAME (TYPE_NAME (type)))
9607 	{
9608 	  const char *name = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (type)));
9609 	  if (strcmp (name, "char16_t") == 0
9610 	      || strcmp (name, "char32_t") == 0)
9611 	    {
9612 	      encoding = DW_ATE_UTF;
9613 	      break;
9614 	    }
9615 	}
9616       if (TYPE_STRING_FLAG (type))
9617 	{
9618 	  if (TYPE_UNSIGNED (type))
9619 	    encoding = DW_ATE_unsigned_char;
9620 	  else
9621 	    encoding = DW_ATE_signed_char;
9622 	}
9623       else if (TYPE_UNSIGNED (type))
9624 	encoding = DW_ATE_unsigned;
9625       else
9626 	encoding = DW_ATE_signed;
9627       break;
9628 
9629     case REAL_TYPE:
9630       if (DECIMAL_FLOAT_MODE_P (TYPE_MODE (type)))
9631 	{
9632 	  if (dwarf_version >= 3 || !dwarf_strict)
9633 	    encoding = DW_ATE_decimal_float;
9634 	  else
9635 	    encoding = DW_ATE_lo_user;
9636 	}
9637       else
9638 	encoding = DW_ATE_float;
9639       break;
9640 
9641     case FIXED_POINT_TYPE:
9642       if (!(dwarf_version >= 3 || !dwarf_strict))
9643 	encoding = DW_ATE_lo_user;
9644       else if (TYPE_UNSIGNED (type))
9645 	encoding = DW_ATE_unsigned_fixed;
9646       else
9647 	encoding = DW_ATE_signed_fixed;
9648       break;
9649 
9650       /* Dwarf2 doesn't know anything about complex ints, so use
9651 	 a user defined type for it.  */
9652     case COMPLEX_TYPE:
9653       if (TREE_CODE (TREE_TYPE (type)) == REAL_TYPE)
9654 	encoding = DW_ATE_complex_float;
9655       else
9656 	encoding = DW_ATE_lo_user;
9657       break;
9658 
9659     case BOOLEAN_TYPE:
9660       /* GNU FORTRAN/Ada/C++ BOOLEAN type.  */
9661       encoding = DW_ATE_boolean;
9662       break;
9663 
9664     default:
9665       /* No other TREE_CODEs are Dwarf fundamental types.  */
9666       gcc_unreachable ();
9667     }
9668 
9669   base_type_result = new_die (DW_TAG_base_type, comp_unit_die (), type);
9670 
9671   add_AT_unsigned (base_type_result, DW_AT_byte_size,
9672 		   int_size_in_bytes (type));
9673   add_AT_unsigned (base_type_result, DW_AT_encoding, encoding);
9674 
9675   return base_type_result;
9676 }
9677 
9678 /* Given a pointer to an arbitrary ..._TYPE tree node, return nonzero if the
9679    given input type is a Dwarf "fundamental" type.  Otherwise return null.  */
9680 
9681 static inline int
9682 is_base_type (tree type)
9683 {
9684   switch (TREE_CODE (type))
9685     {
9686     case ERROR_MARK:
9687     case VOID_TYPE:
9688     case INTEGER_TYPE:
9689     case REAL_TYPE:
9690     case FIXED_POINT_TYPE:
9691     case COMPLEX_TYPE:
9692     case BOOLEAN_TYPE:
9693       return 1;
9694 
9695     case ARRAY_TYPE:
9696     case RECORD_TYPE:
9697     case UNION_TYPE:
9698     case QUAL_UNION_TYPE:
9699     case ENUMERAL_TYPE:
9700     case FUNCTION_TYPE:
9701     case METHOD_TYPE:
9702     case POINTER_TYPE:
9703     case REFERENCE_TYPE:
9704     case NULLPTR_TYPE:
9705     case OFFSET_TYPE:
9706     case LANG_TYPE:
9707     case VECTOR_TYPE:
9708       return 0;
9709 
9710     default:
9711       gcc_unreachable ();
9712     }
9713 
9714   return 0;
9715 }
9716 
9717 /* Given a pointer to a tree node, assumed to be some kind of a ..._TYPE
9718    node, return the size in bits for the type if it is a constant, or else
9719    return the alignment for the type if the type's size is not constant, or
9720    else return BITS_PER_WORD if the type actually turns out to be an
9721    ERROR_MARK node.  */
9722 
9723 static inline unsigned HOST_WIDE_INT
9724 simple_type_size_in_bits (const_tree type)
9725 {
9726   if (TREE_CODE (type) == ERROR_MARK)
9727     return BITS_PER_WORD;
9728   else if (TYPE_SIZE (type) == NULL_TREE)
9729     return 0;
9730   else if (host_integerp (TYPE_SIZE (type), 1))
9731     return tree_low_cst (TYPE_SIZE (type), 1);
9732   else
9733     return TYPE_ALIGN (type);
9734 }
9735 
9736 /* Similarly, but return a double_int instead of UHWI.  */
9737 
9738 static inline double_int
9739 double_int_type_size_in_bits (const_tree type)
9740 {
9741   if (TREE_CODE (type) == ERROR_MARK)
9742     return uhwi_to_double_int (BITS_PER_WORD);
9743   else if (TYPE_SIZE (type) == NULL_TREE)
9744     return double_int_zero;
9745   else if (TREE_CODE (TYPE_SIZE (type)) == INTEGER_CST)
9746     return tree_to_double_int (TYPE_SIZE (type));
9747   else
9748     return uhwi_to_double_int (TYPE_ALIGN (type));
9749 }
9750 
9751 /*  Given a pointer to a tree node for a subrange type, return a pointer
9752     to a DIE that describes the given type.  */
9753 
9754 static dw_die_ref
9755 subrange_type_die (tree type, tree low, tree high, dw_die_ref context_die)
9756 {
9757   dw_die_ref subrange_die;
9758   const HOST_WIDE_INT size_in_bytes = int_size_in_bytes (type);
9759 
9760   if (context_die == NULL)
9761     context_die = comp_unit_die ();
9762 
9763   subrange_die = new_die (DW_TAG_subrange_type, context_die, type);
9764 
9765   if (int_size_in_bytes (TREE_TYPE (type)) != size_in_bytes)
9766     {
9767       /* The size of the subrange type and its base type do not match,
9768 	 so we need to generate a size attribute for the subrange type.  */
9769       add_AT_unsigned (subrange_die, DW_AT_byte_size, size_in_bytes);
9770     }
9771 
9772   if (low)
9773     add_bound_info (subrange_die, DW_AT_lower_bound, low);
9774   if (high)
9775     add_bound_info (subrange_die, DW_AT_upper_bound, high);
9776 
9777   return subrange_die;
9778 }
9779 
9780 /* Given a pointer to an arbitrary ..._TYPE tree node, return a debugging
9781    entry that chains various modifiers in front of the given type.  */
9782 
9783 static dw_die_ref
9784 modified_type_die (tree type, int is_const_type, int is_volatile_type,
9785 		   dw_die_ref context_die)
9786 {
9787   enum tree_code code = TREE_CODE (type);
9788   dw_die_ref mod_type_die;
9789   dw_die_ref sub_die = NULL;
9790   tree item_type = NULL;
9791   tree qualified_type;
9792   tree name, low, high;
9793   dw_die_ref mod_scope;
9794 
9795   if (code == ERROR_MARK)
9796     return NULL;
9797 
9798   /* See if we already have the appropriately qualified variant of
9799      this type.  */
9800   qualified_type
9801     = get_qualified_type (type,
9802 			  ((is_const_type ? TYPE_QUAL_CONST : 0)
9803 			   | (is_volatile_type ? TYPE_QUAL_VOLATILE : 0)));
9804 
9805   if (qualified_type == sizetype
9806       && TYPE_NAME (qualified_type)
9807       && TREE_CODE (TYPE_NAME (qualified_type)) == TYPE_DECL)
9808     {
9809       tree t = TREE_TYPE (TYPE_NAME (qualified_type));
9810 
9811       gcc_checking_assert (TREE_CODE (t) == INTEGER_TYPE
9812 			   && TYPE_PRECISION (t)
9813 			   == TYPE_PRECISION (qualified_type)
9814 			   && TYPE_UNSIGNED (t)
9815 			   == TYPE_UNSIGNED (qualified_type));
9816       qualified_type = t;
9817     }
9818 
9819   /* If we do, then we can just use its DIE, if it exists.  */
9820   if (qualified_type)
9821     {
9822       mod_type_die = lookup_type_die (qualified_type);
9823       if (mod_type_die)
9824 	return mod_type_die;
9825     }
9826 
9827   name = qualified_type ? TYPE_NAME (qualified_type) : NULL;
9828 
9829   /* Handle C typedef types.  */
9830   if (name && TREE_CODE (name) == TYPE_DECL && DECL_ORIGINAL_TYPE (name)
9831       && !DECL_ARTIFICIAL (name))
9832     {
9833       tree dtype = TREE_TYPE (name);
9834 
9835       if (qualified_type == dtype)
9836 	{
9837 	  /* For a named type, use the typedef.  */
9838 	  gen_type_die (qualified_type, context_die);
9839 	  return lookup_type_die (qualified_type);
9840 	}
9841       else if (is_const_type < TYPE_READONLY (dtype)
9842 	       || is_volatile_type < TYPE_VOLATILE (dtype)
9843 	       || (is_const_type <= TYPE_READONLY (dtype)
9844 		   && is_volatile_type <= TYPE_VOLATILE (dtype)
9845 		   && DECL_ORIGINAL_TYPE (name) != type))
9846 	/* cv-unqualified version of named type.  Just use the unnamed
9847 	   type to which it refers.  */
9848 	return modified_type_die (DECL_ORIGINAL_TYPE (name),
9849 				  is_const_type, is_volatile_type,
9850 				  context_die);
9851       /* Else cv-qualified version of named type; fall through.  */
9852     }
9853 
9854   mod_scope = scope_die_for (type, context_die);
9855 
9856   if (is_const_type
9857       /* If both is_const_type and is_volatile_type, prefer the path
9858 	 which leads to a qualified type.  */
9859       && (!is_volatile_type
9860 	  || get_qualified_type (type, TYPE_QUAL_CONST) == NULL_TREE
9861 	  || get_qualified_type (type, TYPE_QUAL_VOLATILE) != NULL_TREE))
9862     {
9863       mod_type_die = new_die (DW_TAG_const_type, mod_scope, type);
9864       sub_die = modified_type_die (type, 0, is_volatile_type, context_die);
9865     }
9866   else if (is_volatile_type)
9867     {
9868       mod_type_die = new_die (DW_TAG_volatile_type, mod_scope, type);
9869       sub_die = modified_type_die (type, is_const_type, 0, context_die);
9870     }
9871   else if (code == POINTER_TYPE)
9872     {
9873       mod_type_die = new_die (DW_TAG_pointer_type, mod_scope, type);
9874       add_AT_unsigned (mod_type_die, DW_AT_byte_size,
9875 		       simple_type_size_in_bits (type) / BITS_PER_UNIT);
9876       item_type = TREE_TYPE (type);
9877       if (!ADDR_SPACE_GENERIC_P (TYPE_ADDR_SPACE (item_type)))
9878 	add_AT_unsigned (mod_type_die, DW_AT_address_class,
9879 			 TYPE_ADDR_SPACE (item_type));
9880     }
9881   else if (code == REFERENCE_TYPE)
9882     {
9883       if (TYPE_REF_IS_RVALUE (type) && dwarf_version >= 4)
9884 	mod_type_die = new_die (DW_TAG_rvalue_reference_type, mod_scope,
9885 				type);
9886       else
9887 	mod_type_die = new_die (DW_TAG_reference_type, mod_scope, type);
9888       add_AT_unsigned (mod_type_die, DW_AT_byte_size,
9889 		       simple_type_size_in_bits (type) / BITS_PER_UNIT);
9890       item_type = TREE_TYPE (type);
9891       if (!ADDR_SPACE_GENERIC_P (TYPE_ADDR_SPACE (item_type)))
9892 	add_AT_unsigned (mod_type_die, DW_AT_address_class,
9893 			 TYPE_ADDR_SPACE (item_type));
9894     }
9895   else if (code == INTEGER_TYPE
9896 	   && TREE_TYPE (type) != NULL_TREE
9897 	   && subrange_type_for_debug_p (type, &low, &high))
9898     {
9899       mod_type_die = subrange_type_die (type, low, high, context_die);
9900       item_type = TREE_TYPE (type);
9901     }
9902   else if (is_base_type (type))
9903     mod_type_die = base_type_die (type);
9904   else
9905     {
9906       gen_type_die (type, context_die);
9907 
9908       /* We have to get the type_main_variant here (and pass that to the
9909 	 `lookup_type_die' routine) because the ..._TYPE node we have
9910 	 might simply be a *copy* of some original type node (where the
9911 	 copy was created to help us keep track of typedef names) and
9912 	 that copy might have a different TYPE_UID from the original
9913 	 ..._TYPE node.  */
9914       if (TREE_CODE (type) != VECTOR_TYPE)
9915 	return lookup_type_die (type_main_variant (type));
9916       else
9917 	/* Vectors have the debugging information in the type,
9918 	   not the main variant.  */
9919 	return lookup_type_die (type);
9920     }
9921 
9922   /* Builtin types don't have a DECL_ORIGINAL_TYPE.  For those,
9923      don't output a DW_TAG_typedef, since there isn't one in the
9924      user's program; just attach a DW_AT_name to the type.
9925      Don't attach a DW_AT_name to DW_TAG_const_type or DW_TAG_volatile_type
9926      if the base type already has the same name.  */
9927   if (name
9928       && ((TREE_CODE (name) != TYPE_DECL
9929 	   && (qualified_type == TYPE_MAIN_VARIANT (type)
9930 	       || (!is_const_type && !is_volatile_type)))
9931 	  || (TREE_CODE (name) == TYPE_DECL
9932 	      && TREE_TYPE (name) == qualified_type
9933 	      && DECL_NAME (name))))
9934     {
9935       if (TREE_CODE (name) == TYPE_DECL)
9936 	/* Could just call add_name_and_src_coords_attributes here,
9937 	   but since this is a builtin type it doesn't have any
9938 	   useful source coordinates anyway.  */
9939 	name = DECL_NAME (name);
9940       add_name_attribute (mod_type_die, IDENTIFIER_POINTER (name));
9941     }
9942   /* This probably indicates a bug.  */
9943   else if (mod_type_die && mod_type_die->die_tag == DW_TAG_base_type)
9944     {
9945       name = TYPE_NAME (type);
9946       if (name
9947 	  && TREE_CODE (name) == TYPE_DECL)
9948 	name = DECL_NAME (name);
9949       add_name_attribute (mod_type_die,
9950 			  name ? IDENTIFIER_POINTER (name) : "__unknown__");
9951     }
9952 
9953   if (qualified_type)
9954     equate_type_number_to_die (qualified_type, mod_type_die);
9955 
9956   if (item_type)
9957     /* We must do this after the equate_type_number_to_die call, in case
9958        this is a recursive type.  This ensures that the modified_type_die
9959        recursion will terminate even if the type is recursive.  Recursive
9960        types are possible in Ada.  */
9961     sub_die = modified_type_die (item_type,
9962 				 TYPE_READONLY (item_type),
9963 				 TYPE_VOLATILE (item_type),
9964 				 context_die);
9965 
9966   if (sub_die != NULL)
9967     add_AT_die_ref (mod_type_die, DW_AT_type, sub_die);
9968 
9969   add_gnat_descriptive_type_attribute (mod_type_die, type, context_die);
9970   if (TYPE_ARTIFICIAL (type))
9971     add_AT_flag (mod_type_die, DW_AT_artificial, 1);
9972 
9973   return mod_type_die;
9974 }
9975 
9976 /* Generate DIEs for the generic parameters of T.
9977    T must be either a generic type or a generic function.
9978    See http://gcc.gnu.org/wiki/TemplateParmsDwarf for more.  */
9979 
9980 static void
9981 gen_generic_params_dies (tree t)
9982 {
9983   tree parms, args;
9984   int parms_num, i;
9985   dw_die_ref die = NULL;
9986 
9987   if (!t || (TYPE_P (t) && !COMPLETE_TYPE_P (t)))
9988     return;
9989 
9990   if (TYPE_P (t))
9991     die = lookup_type_die (t);
9992   else if (DECL_P (t))
9993     die = lookup_decl_die (t);
9994 
9995   gcc_assert (die);
9996 
9997   parms = lang_hooks.get_innermost_generic_parms (t);
9998   if (!parms)
9999     /* T has no generic parameter. It means T is neither a generic type
10000        or function. End of story.  */
10001     return;
10002 
10003   parms_num = TREE_VEC_LENGTH (parms);
10004   args = lang_hooks.get_innermost_generic_args (t);
10005   for (i = 0; i < parms_num; i++)
10006     {
10007       tree parm, arg, arg_pack_elems;
10008 
10009       parm = TREE_VEC_ELT (parms, i);
10010       arg = TREE_VEC_ELT (args, i);
10011       arg_pack_elems = lang_hooks.types.get_argument_pack_elems (arg);
10012       gcc_assert (parm && TREE_VALUE (parm) && arg);
10013 
10014       if (parm && TREE_VALUE (parm) && arg)
10015 	{
10016 	  /* If PARM represents a template parameter pack,
10017 	     emit a DW_TAG_GNU_template_parameter_pack DIE, followed
10018 	     by DW_TAG_template_*_parameter DIEs for the argument
10019 	     pack elements of ARG. Note that ARG would then be
10020 	     an argument pack.  */
10021 	  if (arg_pack_elems)
10022 	    template_parameter_pack_die (TREE_VALUE (parm),
10023 					 arg_pack_elems,
10024 					 die);
10025 	  else
10026 	    generic_parameter_die (TREE_VALUE (parm), arg,
10027 				   true /* Emit DW_AT_name */, die);
10028 	}
10029     }
10030 }
10031 
10032 /* Create and return a DIE for PARM which should be
10033    the representation of a generic type parameter.
10034    For instance, in the C++ front end, PARM would be a template parameter.
10035    ARG is the argument to PARM.
10036    EMIT_NAME_P if tree, the DIE will have DW_AT_name attribute set to the
10037    name of the PARM.
10038    PARENT_DIE is the parent DIE which the new created DIE should be added to,
10039    as a child node.  */
10040 
10041 static dw_die_ref
10042 generic_parameter_die (tree parm, tree arg,
10043 		       bool emit_name_p,
10044 		       dw_die_ref parent_die)
10045 {
10046   dw_die_ref tmpl_die = NULL;
10047   const char *name = NULL;
10048 
10049   if (!parm || !DECL_NAME (parm) || !arg)
10050     return NULL;
10051 
10052   /* We support non-type generic parameters and arguments,
10053      type generic parameters and arguments, as well as
10054      generic generic parameters (a.k.a. template template parameters in C++)
10055      and arguments.  */
10056   if (TREE_CODE (parm) == PARM_DECL)
10057     /* PARM is a nontype generic parameter  */
10058     tmpl_die = new_die (DW_TAG_template_value_param, parent_die, parm);
10059   else if (TREE_CODE (parm) == TYPE_DECL)
10060     /* PARM is a type generic parameter.  */
10061     tmpl_die = new_die (DW_TAG_template_type_param, parent_die, parm);
10062   else if (lang_hooks.decls.generic_generic_parameter_decl_p (parm))
10063     /* PARM is a generic generic parameter.
10064        Its DIE is a GNU extension. It shall have a
10065        DW_AT_name attribute to represent the name of the template template
10066        parameter, and a DW_AT_GNU_template_name attribute to represent the
10067        name of the template template argument.  */
10068     tmpl_die = new_die (DW_TAG_GNU_template_template_param,
10069 			parent_die, parm);
10070   else
10071     gcc_unreachable ();
10072 
10073   if (tmpl_die)
10074     {
10075       tree tmpl_type;
10076 
10077       /* If PARM is a generic parameter pack, it means we are
10078          emitting debug info for a template argument pack element.
10079 	 In other terms, ARG is a template argument pack element.
10080 	 In that case, we don't emit any DW_AT_name attribute for
10081 	 the die.  */
10082       if (emit_name_p)
10083 	{
10084 	  name = IDENTIFIER_POINTER (DECL_NAME (parm));
10085 	  gcc_assert (name);
10086 	  add_AT_string (tmpl_die, DW_AT_name, name);
10087 	}
10088 
10089       if (!lang_hooks.decls.generic_generic_parameter_decl_p (parm))
10090 	{
10091 	  /* DWARF3, 5.6.8 says if PARM is a non-type generic parameter
10092 	     TMPL_DIE should have a child DW_AT_type attribute that is set
10093 	     to the type of the argument to PARM, which is ARG.
10094 	     If PARM is a type generic parameter, TMPL_DIE should have a
10095 	     child DW_AT_type that is set to ARG.  */
10096 	  tmpl_type = TYPE_P (arg) ? arg : TREE_TYPE (arg);
10097 	  add_type_attribute (tmpl_die, tmpl_type, 0,
10098 			      TREE_THIS_VOLATILE (tmpl_type),
10099 			      parent_die);
10100 	}
10101       else
10102 	{
10103 	  /* So TMPL_DIE is a DIE representing a
10104 	     a generic generic template parameter, a.k.a template template
10105 	     parameter in C++ and arg is a template.  */
10106 
10107 	  /* The DW_AT_GNU_template_name attribute of the DIE must be set
10108 	     to the name of the argument.  */
10109 	  name = dwarf2_name (TYPE_P (arg) ? TYPE_NAME (arg) : arg, 1);
10110 	  if (name)
10111 	    add_AT_string (tmpl_die, DW_AT_GNU_template_name, name);
10112 	}
10113 
10114       if (TREE_CODE (parm) == PARM_DECL)
10115 	/* So PARM is a non-type generic parameter.
10116 	   DWARF3 5.6.8 says we must set a DW_AT_const_value child
10117 	   attribute of TMPL_DIE which value represents the value
10118 	   of ARG.
10119 	   We must be careful here:
10120 	   The value of ARG might reference some function decls.
10121 	   We might currently be emitting debug info for a generic
10122 	   type and types are emitted before function decls, we don't
10123 	   know if the function decls referenced by ARG will actually be
10124 	   emitted after cgraph computations.
10125 	   So must defer the generation of the DW_AT_const_value to
10126 	   after cgraph is ready.  */
10127 	append_entry_to_tmpl_value_parm_die_table (tmpl_die, arg);
10128     }
10129 
10130   return tmpl_die;
10131 }
10132 
10133 /* Generate and return a  DW_TAG_GNU_template_parameter_pack DIE representing.
10134    PARM_PACK must be a template parameter pack. The returned DIE
10135    will be child DIE of PARENT_DIE.  */
10136 
10137 static dw_die_ref
10138 template_parameter_pack_die (tree parm_pack,
10139 			     tree parm_pack_args,
10140 			     dw_die_ref parent_die)
10141 {
10142   dw_die_ref die;
10143   int j;
10144 
10145   gcc_assert (parent_die && parm_pack);
10146 
10147   die = new_die (DW_TAG_GNU_template_parameter_pack, parent_die, parm_pack);
10148   add_name_and_src_coords_attributes (die, parm_pack);
10149   for (j = 0; j < TREE_VEC_LENGTH (parm_pack_args); j++)
10150     generic_parameter_die (parm_pack,
10151 			   TREE_VEC_ELT (parm_pack_args, j),
10152 			   false /* Don't emit DW_AT_name */,
10153 			   die);
10154   return die;
10155 }
10156 
10157 /* Given a pointer to an arbitrary ..._TYPE tree node, return true if it is
10158    an enumerated type.  */
10159 
10160 static inline int
10161 type_is_enum (const_tree type)
10162 {
10163   return TREE_CODE (type) == ENUMERAL_TYPE;
10164 }
10165 
10166 /* Return the DBX register number described by a given RTL node.  */
10167 
10168 static unsigned int
10169 dbx_reg_number (const_rtx rtl)
10170 {
10171   unsigned regno = REGNO (rtl);
10172 
10173   gcc_assert (regno < FIRST_PSEUDO_REGISTER);
10174 
10175 #ifdef LEAF_REG_REMAP
10176   if (current_function_uses_only_leaf_regs)
10177     {
10178       int leaf_reg = LEAF_REG_REMAP (regno);
10179       if (leaf_reg != -1)
10180 	regno = (unsigned) leaf_reg;
10181     }
10182 #endif
10183 
10184   return DBX_REGISTER_NUMBER (regno);
10185 }
10186 
10187 /* Optionally add a DW_OP_piece term to a location description expression.
10188    DW_OP_piece is only added if the location description expression already
10189    doesn't end with DW_OP_piece.  */
10190 
10191 static void
10192 add_loc_descr_op_piece (dw_loc_descr_ref *list_head, int size)
10193 {
10194   dw_loc_descr_ref loc;
10195 
10196   if (*list_head != NULL)
10197     {
10198       /* Find the end of the chain.  */
10199       for (loc = *list_head; loc->dw_loc_next != NULL; loc = loc->dw_loc_next)
10200 	;
10201 
10202       if (loc->dw_loc_opc != DW_OP_piece)
10203 	loc->dw_loc_next = new_loc_descr (DW_OP_piece, size, 0);
10204     }
10205 }
10206 
10207 /* Return a location descriptor that designates a machine register or
10208    zero if there is none.  */
10209 
10210 static dw_loc_descr_ref
10211 reg_loc_descriptor (rtx rtl, enum var_init_status initialized)
10212 {
10213   rtx regs;
10214 
10215   if (REGNO (rtl) >= FIRST_PSEUDO_REGISTER)
10216     return 0;
10217 
10218   /* We only use "frame base" when we're sure we're talking about the
10219      post-prologue local stack frame.  We do this by *not* running
10220      register elimination until this point, and recognizing the special
10221      argument pointer and soft frame pointer rtx's.
10222      Use DW_OP_fbreg offset DW_OP_stack_value in this case.  */
10223   if ((rtl == arg_pointer_rtx || rtl == frame_pointer_rtx)
10224       && eliminate_regs (rtl, VOIDmode, NULL_RTX) != rtl)
10225     {
10226       dw_loc_descr_ref result = NULL;
10227 
10228       if (dwarf_version >= 4 || !dwarf_strict)
10229 	{
10230 	  result = mem_loc_descriptor (rtl, GET_MODE (rtl), VOIDmode,
10231 				       initialized);
10232 	  if (result)
10233 	    add_loc_descr (&result,
10234 			   new_loc_descr (DW_OP_stack_value, 0, 0));
10235 	}
10236       return result;
10237     }
10238 
10239   regs = targetm.dwarf_register_span (rtl);
10240 
10241   if (hard_regno_nregs[REGNO (rtl)][GET_MODE (rtl)] > 1 || regs)
10242     return multiple_reg_loc_descriptor (rtl, regs, initialized);
10243   else
10244     return one_reg_loc_descriptor (dbx_reg_number (rtl), initialized);
10245 }
10246 
10247 /* Return a location descriptor that designates a machine register for
10248    a given hard register number.  */
10249 
10250 static dw_loc_descr_ref
10251 one_reg_loc_descriptor (unsigned int regno, enum var_init_status initialized)
10252 {
10253   dw_loc_descr_ref reg_loc_descr;
10254 
10255   if (regno <= 31)
10256     reg_loc_descr
10257       = new_loc_descr ((enum dwarf_location_atom) (DW_OP_reg0 + regno), 0, 0);
10258   else
10259     reg_loc_descr = new_loc_descr (DW_OP_regx, regno, 0);
10260 
10261   if (initialized == VAR_INIT_STATUS_UNINITIALIZED)
10262     add_loc_descr (&reg_loc_descr, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
10263 
10264   return reg_loc_descr;
10265 }
10266 
10267 /* Given an RTL of a register, return a location descriptor that
10268    designates a value that spans more than one register.  */
10269 
10270 static dw_loc_descr_ref
10271 multiple_reg_loc_descriptor (rtx rtl, rtx regs,
10272 			     enum var_init_status initialized)
10273 {
10274   int nregs, size, i;
10275   unsigned reg;
10276   dw_loc_descr_ref loc_result = NULL;
10277 
10278   reg = REGNO (rtl);
10279 #ifdef LEAF_REG_REMAP
10280   if (current_function_uses_only_leaf_regs)
10281     {
10282       int leaf_reg = LEAF_REG_REMAP (reg);
10283       if (leaf_reg != -1)
10284 	reg = (unsigned) leaf_reg;
10285     }
10286 #endif
10287   gcc_assert ((unsigned) DBX_REGISTER_NUMBER (reg) == dbx_reg_number (rtl));
10288   nregs = hard_regno_nregs[REGNO (rtl)][GET_MODE (rtl)];
10289 
10290   /* Simple, contiguous registers.  */
10291   if (regs == NULL_RTX)
10292     {
10293       size = GET_MODE_SIZE (GET_MODE (rtl)) / nregs;
10294 
10295       loc_result = NULL;
10296       while (nregs--)
10297 	{
10298 	  dw_loc_descr_ref t;
10299 
10300 	  t = one_reg_loc_descriptor (DBX_REGISTER_NUMBER (reg),
10301 				      VAR_INIT_STATUS_INITIALIZED);
10302 	  add_loc_descr (&loc_result, t);
10303 	  add_loc_descr_op_piece (&loc_result, size);
10304 	  ++reg;
10305 	}
10306       return loc_result;
10307     }
10308 
10309   /* Now onto stupid register sets in non contiguous locations.  */
10310 
10311   gcc_assert (GET_CODE (regs) == PARALLEL);
10312 
10313   size = GET_MODE_SIZE (GET_MODE (XVECEXP (regs, 0, 0)));
10314   loc_result = NULL;
10315 
10316   for (i = 0; i < XVECLEN (regs, 0); ++i)
10317     {
10318       dw_loc_descr_ref t;
10319 
10320       t = one_reg_loc_descriptor (REGNO (XVECEXP (regs, 0, i)),
10321 				  VAR_INIT_STATUS_INITIALIZED);
10322       add_loc_descr (&loc_result, t);
10323       size = GET_MODE_SIZE (GET_MODE (XVECEXP (regs, 0, 0)));
10324       add_loc_descr_op_piece (&loc_result, size);
10325     }
10326 
10327   if (loc_result && initialized == VAR_INIT_STATUS_UNINITIALIZED)
10328     add_loc_descr (&loc_result, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
10329   return loc_result;
10330 }
10331 
10332 static unsigned long size_of_int_loc_descriptor (HOST_WIDE_INT);
10333 
10334 /* Return a location descriptor that designates a constant i,
10335    as a compound operation from constant (i >> shift), constant shift
10336    and DW_OP_shl.  */
10337 
10338 static dw_loc_descr_ref
10339 int_shift_loc_descriptor (HOST_WIDE_INT i, int shift)
10340 {
10341   dw_loc_descr_ref ret = int_loc_descriptor (i >> shift);
10342   add_loc_descr (&ret, int_loc_descriptor (shift));
10343   add_loc_descr (&ret, new_loc_descr (DW_OP_shl, 0, 0));
10344   return ret;
10345 }
10346 
10347 /* Return a location descriptor that designates a constant.  */
10348 
10349 static dw_loc_descr_ref
10350 int_loc_descriptor (HOST_WIDE_INT i)
10351 {
10352   enum dwarf_location_atom op;
10353 
10354   /* Pick the smallest representation of a constant, rather than just
10355      defaulting to the LEB encoding.  */
10356   if (i >= 0)
10357     {
10358       int clz = clz_hwi (i);
10359       int ctz = ctz_hwi (i);
10360       if (i <= 31)
10361 	op = (enum dwarf_location_atom) (DW_OP_lit0 + i);
10362       else if (i <= 0xff)
10363 	op = DW_OP_const1u;
10364       else if (i <= 0xffff)
10365 	op = DW_OP_const2u;
10366       else if (clz + ctz >= HOST_BITS_PER_WIDE_INT - 5
10367 	       && clz + 5 + 255 >= HOST_BITS_PER_WIDE_INT)
10368 	/* DW_OP_litX DW_OP_litY DW_OP_shl takes just 3 bytes and
10369 	   DW_OP_litX DW_OP_const1u Y DW_OP_shl takes just 4 bytes,
10370 	   while DW_OP_const4u is 5 bytes.  */
10371 	return int_shift_loc_descriptor (i, HOST_BITS_PER_WIDE_INT - clz - 5);
10372       else if (clz + ctz >= HOST_BITS_PER_WIDE_INT - 8
10373 	       && clz + 8 + 31 >= HOST_BITS_PER_WIDE_INT)
10374 	/* DW_OP_const1u X DW_OP_litY DW_OP_shl takes just 4 bytes,
10375 	   while DW_OP_const4u is 5 bytes.  */
10376 	return int_shift_loc_descriptor (i, HOST_BITS_PER_WIDE_INT - clz - 8);
10377       else if (HOST_BITS_PER_WIDE_INT == 32 || i <= 0xffffffff)
10378 	op = DW_OP_const4u;
10379       else if (clz + ctz >= HOST_BITS_PER_WIDE_INT - 8
10380 	       && clz + 8 + 255 >= HOST_BITS_PER_WIDE_INT)
10381 	/* DW_OP_const1u X DW_OP_const1u Y DW_OP_shl takes just 5 bytes,
10382 	   while DW_OP_constu of constant >= 0x100000000 takes at least
10383 	   6 bytes.  */
10384 	return int_shift_loc_descriptor (i, HOST_BITS_PER_WIDE_INT - clz - 8);
10385       else if (clz + ctz >= HOST_BITS_PER_WIDE_INT - 16
10386 	       && clz + 16 + (size_of_uleb128 (i) > 5 ? 255 : 31)
10387 		  >= HOST_BITS_PER_WIDE_INT)
10388 	/* DW_OP_const2u X DW_OP_litY DW_OP_shl takes just 5 bytes,
10389 	   DW_OP_const2u X DW_OP_const1u Y DW_OP_shl takes 6 bytes,
10390 	   while DW_OP_constu takes in this case at least 6 bytes.  */
10391 	return int_shift_loc_descriptor (i, HOST_BITS_PER_WIDE_INT - clz - 16);
10392       else if (clz + ctz >= HOST_BITS_PER_WIDE_INT - 32
10393 	       && clz + 32 + 31 >= HOST_BITS_PER_WIDE_INT
10394 	       && size_of_uleb128 (i) > 6)
10395 	/* DW_OP_const4u X DW_OP_litY DW_OP_shl takes just 7 bytes.  */
10396 	return int_shift_loc_descriptor (i, HOST_BITS_PER_WIDE_INT - clz - 32);
10397       else
10398 	op = DW_OP_constu;
10399     }
10400   else
10401     {
10402       if (i >= -0x80)
10403 	op = DW_OP_const1s;
10404       else if (i >= -0x8000)
10405 	op = DW_OP_const2s;
10406       else if (HOST_BITS_PER_WIDE_INT == 32 || i >= -0x80000000)
10407 	{
10408 	  if (size_of_int_loc_descriptor (i) < 5)
10409 	    {
10410 	      dw_loc_descr_ref ret = int_loc_descriptor (-i);
10411 	      add_loc_descr (&ret, new_loc_descr (DW_OP_neg, 0, 0));
10412 	      return ret;
10413 	    }
10414 	  op = DW_OP_const4s;
10415 	}
10416       else
10417 	{
10418 	  if (size_of_int_loc_descriptor (i)
10419 	      < (unsigned long) 1 + size_of_sleb128 (i))
10420 	    {
10421 	      dw_loc_descr_ref ret = int_loc_descriptor (-i);
10422 	      add_loc_descr (&ret, new_loc_descr (DW_OP_neg, 0, 0));
10423 	      return ret;
10424 	    }
10425 	  op = DW_OP_consts;
10426 	}
10427     }
10428 
10429   return new_loc_descr (op, i, 0);
10430 }
10431 
10432 /* Return size_of_locs (int_shift_loc_descriptor (i, shift))
10433    without actually allocating it.  */
10434 
10435 static unsigned long
10436 size_of_int_shift_loc_descriptor (HOST_WIDE_INT i, int shift)
10437 {
10438   return size_of_int_loc_descriptor (i >> shift)
10439 	 + size_of_int_loc_descriptor (shift)
10440 	 + 1;
10441 }
10442 
10443 /* Return size_of_locs (int_loc_descriptor (i)) without
10444    actually allocating it.  */
10445 
10446 static unsigned long
10447 size_of_int_loc_descriptor (HOST_WIDE_INT i)
10448 {
10449   unsigned long s;
10450 
10451   if (i >= 0)
10452     {
10453       int clz, ctz;
10454       if (i <= 31)
10455 	return 1;
10456       else if (i <= 0xff)
10457 	return 2;
10458       else if (i <= 0xffff)
10459 	return 3;
10460       clz = clz_hwi (i);
10461       ctz = ctz_hwi (i);
10462       if (clz + ctz >= HOST_BITS_PER_WIDE_INT - 5
10463 	  && clz + 5 + 255 >= HOST_BITS_PER_WIDE_INT)
10464 	return size_of_int_shift_loc_descriptor (i, HOST_BITS_PER_WIDE_INT
10465 						    - clz - 5);
10466       else if (clz + ctz >= HOST_BITS_PER_WIDE_INT - 8
10467 	       && clz + 8 + 31 >= HOST_BITS_PER_WIDE_INT)
10468 	return size_of_int_shift_loc_descriptor (i, HOST_BITS_PER_WIDE_INT
10469 						    - clz - 8);
10470       else if (HOST_BITS_PER_WIDE_INT == 32 || i <= 0xffffffff)
10471 	return 5;
10472       s = size_of_uleb128 ((unsigned HOST_WIDE_INT) i);
10473       if (clz + ctz >= HOST_BITS_PER_WIDE_INT - 8
10474 	  && clz + 8 + 255 >= HOST_BITS_PER_WIDE_INT)
10475 	return size_of_int_shift_loc_descriptor (i, HOST_BITS_PER_WIDE_INT
10476 						    - clz - 8);
10477       else if (clz + ctz >= HOST_BITS_PER_WIDE_INT - 16
10478 	       && clz + 16 + (s > 5 ? 255 : 31) >= HOST_BITS_PER_WIDE_INT)
10479 	return size_of_int_shift_loc_descriptor (i, HOST_BITS_PER_WIDE_INT
10480 						    - clz - 16);
10481       else if (clz + ctz >= HOST_BITS_PER_WIDE_INT - 32
10482 	       && clz + 32 + 31 >= HOST_BITS_PER_WIDE_INT
10483 	       && s > 6)
10484 	return size_of_int_shift_loc_descriptor (i, HOST_BITS_PER_WIDE_INT
10485 						    - clz - 32);
10486       else
10487 	return 1 + s;
10488     }
10489   else
10490     {
10491       if (i >= -0x80)
10492 	return 2;
10493       else if (i >= -0x8000)
10494 	return 3;
10495       else if (HOST_BITS_PER_WIDE_INT == 32 || i >= -0x80000000)
10496 	{
10497 	  if (-(unsigned HOST_WIDE_INT) i != (unsigned HOST_WIDE_INT) i)
10498 	    {
10499 	      s = size_of_int_loc_descriptor (-i) + 1;
10500 	      if (s < 5)
10501 		return s;
10502 	    }
10503 	  return 5;
10504 	}
10505       else
10506 	{
10507 	  unsigned long r = 1 + size_of_sleb128 (i);
10508 	  if (-(unsigned HOST_WIDE_INT) i != (unsigned HOST_WIDE_INT) i)
10509 	    {
10510 	      s = size_of_int_loc_descriptor (-i) + 1;
10511 	      if (s < r)
10512 		return s;
10513 	    }
10514 	  return r;
10515 	}
10516     }
10517 }
10518 
10519 /* Return loc description representing "address" of integer value.
10520    This can appear only as toplevel expression.  */
10521 
10522 static dw_loc_descr_ref
10523 address_of_int_loc_descriptor (int size, HOST_WIDE_INT i)
10524 {
10525   int litsize;
10526   dw_loc_descr_ref loc_result = NULL;
10527 
10528   if (!(dwarf_version >= 4 || !dwarf_strict))
10529     return NULL;
10530 
10531   litsize = size_of_int_loc_descriptor (i);
10532   /* Determine if DW_OP_stack_value or DW_OP_implicit_value
10533      is more compact.  For DW_OP_stack_value we need:
10534      litsize + 1 (DW_OP_stack_value)
10535      and for DW_OP_implicit_value:
10536      1 (DW_OP_implicit_value) + 1 (length) + size.  */
10537   if ((int) DWARF2_ADDR_SIZE >= size && litsize + 1 <= 1 + 1 + size)
10538     {
10539       loc_result = int_loc_descriptor (i);
10540       add_loc_descr (&loc_result,
10541 		     new_loc_descr (DW_OP_stack_value, 0, 0));
10542       return loc_result;
10543     }
10544 
10545   loc_result = new_loc_descr (DW_OP_implicit_value,
10546 			      size, 0);
10547   loc_result->dw_loc_oprnd2.val_class = dw_val_class_const;
10548   loc_result->dw_loc_oprnd2.v.val_int = i;
10549   return loc_result;
10550 }
10551 
10552 /* Return a location descriptor that designates a base+offset location.  */
10553 
10554 static dw_loc_descr_ref
10555 based_loc_descr (rtx reg, HOST_WIDE_INT offset,
10556 		 enum var_init_status initialized)
10557 {
10558   unsigned int regno;
10559   dw_loc_descr_ref result;
10560   dw_fde_ref fde = cfun->fde;
10561 
10562   /* We only use "frame base" when we're sure we're talking about the
10563      post-prologue local stack frame.  We do this by *not* running
10564      register elimination until this point, and recognizing the special
10565      argument pointer and soft frame pointer rtx's.  */
10566   if (reg == arg_pointer_rtx || reg == frame_pointer_rtx)
10567     {
10568       rtx elim = eliminate_regs (reg, VOIDmode, NULL_RTX);
10569 
10570       if (elim != reg)
10571 	{
10572 	  if (GET_CODE (elim) == PLUS)
10573 	    {
10574 	      offset += INTVAL (XEXP (elim, 1));
10575 	      elim = XEXP (elim, 0);
10576 	    }
10577 	  gcc_assert ((SUPPORTS_STACK_ALIGNMENT
10578 		       && (elim == hard_frame_pointer_rtx
10579 			   || elim == stack_pointer_rtx))
10580 	              || elim == (frame_pointer_needed
10581 				  ? hard_frame_pointer_rtx
10582 				  : stack_pointer_rtx));
10583 
10584 	  /* If drap register is used to align stack, use frame
10585 	     pointer + offset to access stack variables.  If stack
10586 	     is aligned without drap, use stack pointer + offset to
10587 	     access stack variables.  */
10588 	  if (crtl->stack_realign_tried
10589 	      && reg == frame_pointer_rtx)
10590 	    {
10591 	      int base_reg
10592 		= DWARF_FRAME_REGNUM ((fde && fde->drap_reg != INVALID_REGNUM)
10593 				      ? HARD_FRAME_POINTER_REGNUM
10594 				      : REGNO (elim));
10595 	      return new_reg_loc_descr (base_reg, offset);
10596 	    }
10597 
10598 	  gcc_assert (frame_pointer_fb_offset_valid);
10599 	  offset += frame_pointer_fb_offset;
10600 	  return new_loc_descr (DW_OP_fbreg, offset, 0);
10601 	}
10602     }
10603 
10604   regno = DWARF_FRAME_REGNUM (REGNO (reg));
10605 
10606   if (!optimize && fde
10607       && (fde->drap_reg == regno || fde->vdrap_reg == regno))
10608     {
10609       /* Use cfa+offset to represent the location of arguments passed
10610 	 on the stack when drap is used to align stack.
10611 	 Only do this when not optimizing, for optimized code var-tracking
10612 	 is supposed to track where the arguments live and the register
10613 	 used as vdrap or drap in some spot might be used for something
10614 	 else in other part of the routine.  */
10615       return new_loc_descr (DW_OP_fbreg, offset, 0);
10616     }
10617 
10618   if (regno <= 31)
10619     result = new_loc_descr ((enum dwarf_location_atom) (DW_OP_breg0 + regno),
10620 			    offset, 0);
10621   else
10622     result = new_loc_descr (DW_OP_bregx, regno, offset);
10623 
10624   if (initialized == VAR_INIT_STATUS_UNINITIALIZED)
10625     add_loc_descr (&result, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
10626 
10627   return result;
10628 }
10629 
10630 /* Return true if this RTL expression describes a base+offset calculation.  */
10631 
10632 static inline int
10633 is_based_loc (const_rtx rtl)
10634 {
10635   return (GET_CODE (rtl) == PLUS
10636 	  && ((REG_P (XEXP (rtl, 0))
10637 	       && REGNO (XEXP (rtl, 0)) < FIRST_PSEUDO_REGISTER
10638 	       && CONST_INT_P (XEXP (rtl, 1)))));
10639 }
10640 
10641 /* Try to handle TLS MEMs, for which mem_loc_descriptor on XEXP (mem, 0)
10642    failed.  */
10643 
10644 static dw_loc_descr_ref
10645 tls_mem_loc_descriptor (rtx mem)
10646 {
10647   tree base;
10648   dw_loc_descr_ref loc_result;
10649 
10650   if (MEM_EXPR (mem) == NULL_TREE || !MEM_OFFSET_KNOWN_P (mem))
10651     return NULL;
10652 
10653   base = get_base_address (MEM_EXPR (mem));
10654   if (base == NULL
10655       || TREE_CODE (base) != VAR_DECL
10656       || !DECL_THREAD_LOCAL_P (base))
10657     return NULL;
10658 
10659   loc_result = loc_descriptor_from_tree (MEM_EXPR (mem), 1);
10660   if (loc_result == NULL)
10661     return NULL;
10662 
10663   if (MEM_OFFSET (mem))
10664     loc_descr_plus_const (&loc_result, MEM_OFFSET (mem));
10665 
10666   return loc_result;
10667 }
10668 
10669 /* Output debug info about reason why we failed to expand expression as dwarf
10670    expression.  */
10671 
10672 static void
10673 expansion_failed (tree expr, rtx rtl, char const *reason)
10674 {
10675   if (dump_file && (dump_flags & TDF_DETAILS))
10676     {
10677       fprintf (dump_file, "Failed to expand as dwarf: ");
10678       if (expr)
10679 	print_generic_expr (dump_file, expr, dump_flags);
10680       if (rtl)
10681 	{
10682 	  fprintf (dump_file, "\n");
10683 	  print_rtl (dump_file, rtl);
10684 	}
10685       fprintf (dump_file, "\nReason: %s\n", reason);
10686     }
10687 }
10688 
10689 /* Helper function for const_ok_for_output, called either directly
10690    or via for_each_rtx.  */
10691 
10692 static int
10693 const_ok_for_output_1 (rtx *rtlp, void *data ATTRIBUTE_UNUSED)
10694 {
10695   rtx rtl = *rtlp;
10696 
10697   if (GET_CODE (rtl) == UNSPEC)
10698     {
10699       /* If delegitimize_address couldn't do anything with the UNSPEC, assume
10700 	 we can't express it in the debug info.  */
10701 #ifdef ENABLE_CHECKING
10702       /* Don't complain about TLS UNSPECs, those are just too hard to
10703 	 delegitimize.  */
10704       if (XVECLEN (rtl, 0) != 1
10705 	  || GET_CODE (XVECEXP (rtl, 0, 0)) != SYMBOL_REF
10706 	  || SYMBOL_REF_DECL (XVECEXP (rtl, 0, 0)) == NULL
10707 	  || TREE_CODE (SYMBOL_REF_DECL (XVECEXP (rtl, 0, 0))) != VAR_DECL
10708 	  || !DECL_THREAD_LOCAL_P (SYMBOL_REF_DECL (XVECEXP (rtl, 0, 0))))
10709 	inform (current_function_decl
10710 		? DECL_SOURCE_LOCATION (current_function_decl)
10711 		: UNKNOWN_LOCATION,
10712 #if NUM_UNSPEC_VALUES > 0
10713 		"non-delegitimized UNSPEC %s (%d) found in variable location",
10714 		((XINT (rtl, 1) >= 0 && XINT (rtl, 1) < NUM_UNSPEC_VALUES)
10715 		 ? unspec_strings[XINT (rtl, 1)] : "unknown"),
10716 		XINT (rtl, 1));
10717 #else
10718 		"non-delegitimized UNSPEC %d found in variable location",
10719 		XINT (rtl, 1));
10720 #endif
10721 #endif
10722       expansion_failed (NULL_TREE, rtl,
10723 			"UNSPEC hasn't been delegitimized.\n");
10724       return 1;
10725     }
10726 
10727   if (targetm.const_not_ok_for_debug_p (rtl))
10728     {
10729       expansion_failed (NULL_TREE, rtl,
10730 			"Expression rejected for debug by the backend.\n");
10731       return 1;
10732     }
10733 
10734   if (GET_CODE (rtl) != SYMBOL_REF)
10735     return 0;
10736 
10737   if (CONSTANT_POOL_ADDRESS_P (rtl))
10738     {
10739       bool marked;
10740       get_pool_constant_mark (rtl, &marked);
10741       /* If all references to this pool constant were optimized away,
10742 	 it was not output and thus we can't represent it.  */
10743       if (!marked)
10744 	{
10745 	  expansion_failed (NULL_TREE, rtl,
10746 			    "Constant was removed from constant pool.\n");
10747 	  return 1;
10748 	}
10749     }
10750 
10751   if (SYMBOL_REF_TLS_MODEL (rtl) != TLS_MODEL_NONE)
10752     return 1;
10753 
10754   /* Avoid references to external symbols in debug info, on several targets
10755      the linker might even refuse to link when linking a shared library,
10756      and in many other cases the relocations for .debug_info/.debug_loc are
10757      dropped, so the address becomes zero anyway.  Hidden symbols, guaranteed
10758      to be defined within the same shared library or executable are fine.  */
10759   if (SYMBOL_REF_EXTERNAL_P (rtl))
10760     {
10761       tree decl = SYMBOL_REF_DECL (rtl);
10762 
10763       if (decl == NULL || !targetm.binds_local_p (decl))
10764 	{
10765 	  expansion_failed (NULL_TREE, rtl,
10766 			    "Symbol not defined in current TU.\n");
10767 	  return 1;
10768 	}
10769     }
10770 
10771   return 0;
10772 }
10773 
10774 /* Return true if constant RTL can be emitted in DW_OP_addr or
10775    DW_AT_const_value.  TLS SYMBOL_REFs, external SYMBOL_REFs or
10776    non-marked constant pool SYMBOL_REFs can't be referenced in it.  */
10777 
10778 static bool
10779 const_ok_for_output (rtx rtl)
10780 {
10781   if (GET_CODE (rtl) == SYMBOL_REF)
10782     return const_ok_for_output_1 (&rtl, NULL) == 0;
10783 
10784   if (GET_CODE (rtl) == CONST)
10785     return for_each_rtx (&XEXP (rtl, 0), const_ok_for_output_1, NULL) == 0;
10786 
10787   return true;
10788 }
10789 
10790 /* Return a reference to DW_TAG_base_type corresponding to MODE and UNSIGNEDP
10791    if possible, NULL otherwise.  */
10792 
10793 static dw_die_ref
10794 base_type_for_mode (enum machine_mode mode, bool unsignedp)
10795 {
10796   dw_die_ref type_die;
10797   tree type = lang_hooks.types.type_for_mode (mode, unsignedp);
10798 
10799   if (type == NULL)
10800     return NULL;
10801   switch (TREE_CODE (type))
10802     {
10803     case INTEGER_TYPE:
10804     case REAL_TYPE:
10805       break;
10806     default:
10807       return NULL;
10808     }
10809   type_die = lookup_type_die (type);
10810   if (!type_die)
10811     type_die = modified_type_die (type, false, false, comp_unit_die ());
10812   if (type_die == NULL || type_die->die_tag != DW_TAG_base_type)
10813     return NULL;
10814   return type_die;
10815 }
10816 
10817 /* For OP descriptor assumed to be in unsigned MODE, convert it to a unsigned
10818    type matching MODE, or, if MODE is narrower than or as wide as
10819    DWARF2_ADDR_SIZE, untyped.  Return NULL if the conversion is not
10820    possible.  */
10821 
10822 static dw_loc_descr_ref
10823 convert_descriptor_to_mode (enum machine_mode mode, dw_loc_descr_ref op)
10824 {
10825   enum machine_mode outer_mode = mode;
10826   dw_die_ref type_die;
10827   dw_loc_descr_ref cvt;
10828 
10829   if (GET_MODE_SIZE (mode) <= DWARF2_ADDR_SIZE)
10830     {
10831       add_loc_descr (&op, new_loc_descr (DW_OP_GNU_convert, 0, 0));
10832       return op;
10833     }
10834   type_die = base_type_for_mode (outer_mode, 1);
10835   if (type_die == NULL)
10836     return NULL;
10837   cvt = new_loc_descr (DW_OP_GNU_convert, 0, 0);
10838   cvt->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
10839   cvt->dw_loc_oprnd1.v.val_die_ref.die = type_die;
10840   cvt->dw_loc_oprnd1.v.val_die_ref.external = 0;
10841   add_loc_descr (&op, cvt);
10842   return op;
10843 }
10844 
10845 /* Return location descriptor for comparison OP with operands OP0 and OP1.  */
10846 
10847 static dw_loc_descr_ref
10848 compare_loc_descriptor (enum dwarf_location_atom op, dw_loc_descr_ref op0,
10849 			dw_loc_descr_ref op1)
10850 {
10851   dw_loc_descr_ref ret = op0;
10852   add_loc_descr (&ret, op1);
10853   add_loc_descr (&ret, new_loc_descr (op, 0, 0));
10854   if (STORE_FLAG_VALUE != 1)
10855     {
10856       add_loc_descr (&ret, int_loc_descriptor (STORE_FLAG_VALUE));
10857       add_loc_descr (&ret, new_loc_descr (DW_OP_mul, 0, 0));
10858     }
10859   return ret;
10860 }
10861 
10862 /* Return location descriptor for signed comparison OP RTL.  */
10863 
10864 static dw_loc_descr_ref
10865 scompare_loc_descriptor (enum dwarf_location_atom op, rtx rtl,
10866 			 enum machine_mode mem_mode)
10867 {
10868   enum machine_mode op_mode = GET_MODE (XEXP (rtl, 0));
10869   dw_loc_descr_ref op0, op1;
10870   int shift;
10871 
10872   if (op_mode == VOIDmode)
10873     op_mode = GET_MODE (XEXP (rtl, 1));
10874   if (op_mode == VOIDmode)
10875     return NULL;
10876 
10877   if (dwarf_strict
10878       && (GET_MODE_CLASS (op_mode) != MODE_INT
10879 	  || GET_MODE_SIZE (op_mode) > DWARF2_ADDR_SIZE))
10880     return NULL;
10881 
10882   op0 = mem_loc_descriptor (XEXP (rtl, 0), op_mode, mem_mode,
10883 			    VAR_INIT_STATUS_INITIALIZED);
10884   op1 = mem_loc_descriptor (XEXP (rtl, 1), op_mode, mem_mode,
10885 			    VAR_INIT_STATUS_INITIALIZED);
10886 
10887   if (op0 == NULL || op1 == NULL)
10888     return NULL;
10889 
10890   if (GET_MODE_CLASS (op_mode) != MODE_INT
10891       || GET_MODE_SIZE (op_mode) == DWARF2_ADDR_SIZE)
10892     return compare_loc_descriptor (op, op0, op1);
10893 
10894   if (GET_MODE_SIZE (op_mode) > DWARF2_ADDR_SIZE)
10895     {
10896       dw_die_ref type_die = base_type_for_mode (op_mode, 0);
10897       dw_loc_descr_ref cvt;
10898 
10899       if (type_die == NULL)
10900 	return NULL;
10901       cvt = new_loc_descr (DW_OP_GNU_convert, 0, 0);
10902       cvt->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
10903       cvt->dw_loc_oprnd1.v.val_die_ref.die = type_die;
10904       cvt->dw_loc_oprnd1.v.val_die_ref.external = 0;
10905       add_loc_descr (&op0, cvt);
10906       cvt = new_loc_descr (DW_OP_GNU_convert, 0, 0);
10907       cvt->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
10908       cvt->dw_loc_oprnd1.v.val_die_ref.die = type_die;
10909       cvt->dw_loc_oprnd1.v.val_die_ref.external = 0;
10910       add_loc_descr (&op1, cvt);
10911       return compare_loc_descriptor (op, op0, op1);
10912     }
10913 
10914   shift = (DWARF2_ADDR_SIZE - GET_MODE_SIZE (op_mode)) * BITS_PER_UNIT;
10915   /* For eq/ne, if the operands are known to be zero-extended,
10916      there is no need to do the fancy shifting up.  */
10917   if (op == DW_OP_eq || op == DW_OP_ne)
10918     {
10919       dw_loc_descr_ref last0, last1;
10920       for (last0 = op0; last0->dw_loc_next != NULL; last0 = last0->dw_loc_next)
10921 	;
10922       for (last1 = op1; last1->dw_loc_next != NULL; last1 = last1->dw_loc_next)
10923 	;
10924       /* deref_size zero extends, and for constants we can check
10925 	 whether they are zero extended or not.  */
10926       if (((last0->dw_loc_opc == DW_OP_deref_size
10927 	    && last0->dw_loc_oprnd1.v.val_int <= GET_MODE_SIZE (op_mode))
10928 	   || (CONST_INT_P (XEXP (rtl, 0))
10929 	       && (unsigned HOST_WIDE_INT) INTVAL (XEXP (rtl, 0))
10930 		  == (INTVAL (XEXP (rtl, 0)) & GET_MODE_MASK (op_mode))))
10931 	  && ((last1->dw_loc_opc == DW_OP_deref_size
10932 	       && last1->dw_loc_oprnd1.v.val_int <= GET_MODE_SIZE (op_mode))
10933 	      || (CONST_INT_P (XEXP (rtl, 1))
10934 		  && (unsigned HOST_WIDE_INT) INTVAL (XEXP (rtl, 1))
10935 		     == (INTVAL (XEXP (rtl, 1)) & GET_MODE_MASK (op_mode)))))
10936 	return compare_loc_descriptor (op, op0, op1);
10937 
10938       /* EQ/NE comparison against constant in narrower type than
10939 	 DWARF2_ADDR_SIZE can be performed either as
10940 	 DW_OP_const1u <shift> DW_OP_shl DW_OP_const* <cst << shift>
10941 	 DW_OP_{eq,ne}
10942 	 or
10943 	 DW_OP_const*u <mode_mask> DW_OP_and DW_OP_const* <cst & mode_mask>
10944 	 DW_OP_{eq,ne}.  Pick whatever is shorter.  */
10945       if (CONST_INT_P (XEXP (rtl, 1))
10946 	  && GET_MODE_BITSIZE (op_mode) < HOST_BITS_PER_WIDE_INT
10947 	  && (size_of_int_loc_descriptor (shift) + 1
10948 	      + size_of_int_loc_descriptor (INTVAL (XEXP (rtl, 1)) << shift)
10949 	      >= size_of_int_loc_descriptor (GET_MODE_MASK (op_mode)) + 1
10950 		 + size_of_int_loc_descriptor (INTVAL (XEXP (rtl, 1))
10951 					       & GET_MODE_MASK (op_mode))))
10952 	{
10953 	  add_loc_descr (&op0, int_loc_descriptor (GET_MODE_MASK (op_mode)));
10954 	  add_loc_descr (&op0, new_loc_descr (DW_OP_and, 0, 0));
10955 	  op1 = int_loc_descriptor (INTVAL (XEXP (rtl, 1))
10956 				    & GET_MODE_MASK (op_mode));
10957 	  return compare_loc_descriptor (op, op0, op1);
10958 	}
10959     }
10960   add_loc_descr (&op0, int_loc_descriptor (shift));
10961   add_loc_descr (&op0, new_loc_descr (DW_OP_shl, 0, 0));
10962   if (CONST_INT_P (XEXP (rtl, 1)))
10963     op1 = int_loc_descriptor (INTVAL (XEXP (rtl, 1)) << shift);
10964   else
10965     {
10966       add_loc_descr (&op1, int_loc_descriptor (shift));
10967       add_loc_descr (&op1, new_loc_descr (DW_OP_shl, 0, 0));
10968     }
10969   return compare_loc_descriptor (op, op0, op1);
10970 }
10971 
10972 /* Return location descriptor for unsigned comparison OP RTL.  */
10973 
10974 static dw_loc_descr_ref
10975 ucompare_loc_descriptor (enum dwarf_location_atom op, rtx rtl,
10976 			 enum machine_mode mem_mode)
10977 {
10978   enum machine_mode op_mode = GET_MODE (XEXP (rtl, 0));
10979   dw_loc_descr_ref op0, op1;
10980 
10981   if (op_mode == VOIDmode)
10982     op_mode = GET_MODE (XEXP (rtl, 1));
10983   if (op_mode == VOIDmode)
10984     return NULL;
10985   if (GET_MODE_CLASS (op_mode) != MODE_INT)
10986     return NULL;
10987 
10988   if (dwarf_strict && GET_MODE_SIZE (op_mode) > DWARF2_ADDR_SIZE)
10989     return NULL;
10990 
10991   op0 = mem_loc_descriptor (XEXP (rtl, 0), op_mode, mem_mode,
10992 			    VAR_INIT_STATUS_INITIALIZED);
10993   op1 = mem_loc_descriptor (XEXP (rtl, 1), op_mode, mem_mode,
10994 			    VAR_INIT_STATUS_INITIALIZED);
10995 
10996   if (op0 == NULL || op1 == NULL)
10997     return NULL;
10998 
10999   if (GET_MODE_SIZE (op_mode) < DWARF2_ADDR_SIZE)
11000     {
11001       HOST_WIDE_INT mask = GET_MODE_MASK (op_mode);
11002       dw_loc_descr_ref last0, last1;
11003       for (last0 = op0; last0->dw_loc_next != NULL; last0 = last0->dw_loc_next)
11004 	;
11005       for (last1 = op1; last1->dw_loc_next != NULL; last1 = last1->dw_loc_next)
11006 	;
11007       if (CONST_INT_P (XEXP (rtl, 0)))
11008 	op0 = int_loc_descriptor (INTVAL (XEXP (rtl, 0)) & mask);
11009       /* deref_size zero extends, so no need to mask it again.  */
11010       else if (last0->dw_loc_opc != DW_OP_deref_size
11011 	       || last0->dw_loc_oprnd1.v.val_int > GET_MODE_SIZE (op_mode))
11012 	{
11013 	  add_loc_descr (&op0, int_loc_descriptor (mask));
11014 	  add_loc_descr (&op0, new_loc_descr (DW_OP_and, 0, 0));
11015 	}
11016       if (CONST_INT_P (XEXP (rtl, 1)))
11017 	op1 = int_loc_descriptor (INTVAL (XEXP (rtl, 1)) & mask);
11018       /* deref_size zero extends, so no need to mask it again.  */
11019       else if (last1->dw_loc_opc != DW_OP_deref_size
11020 	       || last1->dw_loc_oprnd1.v.val_int > GET_MODE_SIZE (op_mode))
11021 	{
11022 	  add_loc_descr (&op1, int_loc_descriptor (mask));
11023 	  add_loc_descr (&op1, new_loc_descr (DW_OP_and, 0, 0));
11024 	}
11025     }
11026   else if (GET_MODE_SIZE (op_mode) == DWARF2_ADDR_SIZE)
11027     {
11028       HOST_WIDE_INT bias = 1;
11029       bias <<= (DWARF2_ADDR_SIZE * BITS_PER_UNIT - 1);
11030       add_loc_descr (&op0, new_loc_descr (DW_OP_plus_uconst, bias, 0));
11031       if (CONST_INT_P (XEXP (rtl, 1)))
11032 	op1 = int_loc_descriptor ((unsigned HOST_WIDE_INT) bias
11033 				  + INTVAL (XEXP (rtl, 1)));
11034       else
11035 	add_loc_descr (&op1, new_loc_descr (DW_OP_plus_uconst,
11036 					    bias, 0));
11037     }
11038   return compare_loc_descriptor (op, op0, op1);
11039 }
11040 
11041 /* Return location descriptor for {U,S}{MIN,MAX}.  */
11042 
11043 static dw_loc_descr_ref
11044 minmax_loc_descriptor (rtx rtl, enum machine_mode mode,
11045 		       enum machine_mode mem_mode)
11046 {
11047   enum dwarf_location_atom op;
11048   dw_loc_descr_ref op0, op1, ret;
11049   dw_loc_descr_ref bra_node, drop_node;
11050 
11051   if (dwarf_strict
11052       && (GET_MODE_CLASS (mode) != MODE_INT
11053 	  || GET_MODE_SIZE (mode) > DWARF2_ADDR_SIZE))
11054     return NULL;
11055 
11056   op0 = mem_loc_descriptor (XEXP (rtl, 0), mode, mem_mode,
11057 			    VAR_INIT_STATUS_INITIALIZED);
11058   op1 = mem_loc_descriptor (XEXP (rtl, 1), mode, mem_mode,
11059 			    VAR_INIT_STATUS_INITIALIZED);
11060 
11061   if (op0 == NULL || op1 == NULL)
11062     return NULL;
11063 
11064   add_loc_descr (&op0, new_loc_descr (DW_OP_dup, 0, 0));
11065   add_loc_descr (&op1, new_loc_descr (DW_OP_swap, 0, 0));
11066   add_loc_descr (&op1, new_loc_descr (DW_OP_over, 0, 0));
11067   if (GET_CODE (rtl) == UMIN || GET_CODE (rtl) == UMAX)
11068     {
11069       if (GET_MODE_SIZE (mode) < DWARF2_ADDR_SIZE)
11070 	{
11071 	  HOST_WIDE_INT mask = GET_MODE_MASK (mode);
11072 	  add_loc_descr (&op0, int_loc_descriptor (mask));
11073 	  add_loc_descr (&op0, new_loc_descr (DW_OP_and, 0, 0));
11074 	  add_loc_descr (&op1, int_loc_descriptor (mask));
11075 	  add_loc_descr (&op1, new_loc_descr (DW_OP_and, 0, 0));
11076 	}
11077       else if (GET_MODE_SIZE (mode) == DWARF2_ADDR_SIZE)
11078 	{
11079 	  HOST_WIDE_INT bias = 1;
11080 	  bias <<= (DWARF2_ADDR_SIZE * BITS_PER_UNIT - 1);
11081 	  add_loc_descr (&op0, new_loc_descr (DW_OP_plus_uconst, bias, 0));
11082 	  add_loc_descr (&op1, new_loc_descr (DW_OP_plus_uconst, bias, 0));
11083 	}
11084     }
11085   else if (GET_MODE_CLASS (mode) == MODE_INT
11086 	   && GET_MODE_SIZE (mode) < DWARF2_ADDR_SIZE)
11087     {
11088       int shift = (DWARF2_ADDR_SIZE - GET_MODE_SIZE (mode)) * BITS_PER_UNIT;
11089       add_loc_descr (&op0, int_loc_descriptor (shift));
11090       add_loc_descr (&op0, new_loc_descr (DW_OP_shl, 0, 0));
11091       add_loc_descr (&op1, int_loc_descriptor (shift));
11092       add_loc_descr (&op1, new_loc_descr (DW_OP_shl, 0, 0));
11093     }
11094   else if (GET_MODE_CLASS (mode) == MODE_INT
11095 	   && GET_MODE_SIZE (mode) > DWARF2_ADDR_SIZE)
11096     {
11097       dw_die_ref type_die = base_type_for_mode (mode, 0);
11098       dw_loc_descr_ref cvt;
11099       if (type_die == NULL)
11100 	return NULL;
11101       cvt = new_loc_descr (DW_OP_GNU_convert, 0, 0);
11102       cvt->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
11103       cvt->dw_loc_oprnd1.v.val_die_ref.die = type_die;
11104       cvt->dw_loc_oprnd1.v.val_die_ref.external = 0;
11105       add_loc_descr (&op0, cvt);
11106       cvt = new_loc_descr (DW_OP_GNU_convert, 0, 0);
11107       cvt->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
11108       cvt->dw_loc_oprnd1.v.val_die_ref.die = type_die;
11109       cvt->dw_loc_oprnd1.v.val_die_ref.external = 0;
11110       add_loc_descr (&op1, cvt);
11111     }
11112 
11113   if (GET_CODE (rtl) == SMIN || GET_CODE (rtl) == UMIN)
11114     op = DW_OP_lt;
11115   else
11116     op = DW_OP_gt;
11117   ret = op0;
11118   add_loc_descr (&ret, op1);
11119   add_loc_descr (&ret, new_loc_descr (op, 0, 0));
11120   bra_node = new_loc_descr (DW_OP_bra, 0, 0);
11121   add_loc_descr (&ret, bra_node);
11122   add_loc_descr (&ret, new_loc_descr (DW_OP_swap, 0, 0));
11123   drop_node = new_loc_descr (DW_OP_drop, 0, 0);
11124   add_loc_descr (&ret, drop_node);
11125   bra_node->dw_loc_oprnd1.val_class = dw_val_class_loc;
11126   bra_node->dw_loc_oprnd1.v.val_loc = drop_node;
11127   if ((GET_CODE (rtl) == SMIN || GET_CODE (rtl) == SMAX)
11128       && GET_MODE_CLASS (mode) == MODE_INT
11129       && GET_MODE_SIZE (mode) > DWARF2_ADDR_SIZE)
11130     ret = convert_descriptor_to_mode (mode, ret);
11131   return ret;
11132 }
11133 
11134 /* Helper function for mem_loc_descriptor.  Perform OP binary op,
11135    but after converting arguments to type_die, afterwards
11136    convert back to unsigned.  */
11137 
11138 static dw_loc_descr_ref
11139 typed_binop (enum dwarf_location_atom op, rtx rtl, dw_die_ref type_die,
11140 	     enum machine_mode mode, enum machine_mode mem_mode)
11141 {
11142   dw_loc_descr_ref cvt, op0, op1;
11143 
11144   if (type_die == NULL)
11145     return NULL;
11146   op0 = mem_loc_descriptor (XEXP (rtl, 0), mode, mem_mode,
11147 			    VAR_INIT_STATUS_INITIALIZED);
11148   op1 = mem_loc_descriptor (XEXP (rtl, 1), mode, mem_mode,
11149 			    VAR_INIT_STATUS_INITIALIZED);
11150   if (op0 == NULL || op1 == NULL)
11151     return NULL;
11152   cvt = new_loc_descr (DW_OP_GNU_convert, 0, 0);
11153   cvt->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
11154   cvt->dw_loc_oprnd1.v.val_die_ref.die = type_die;
11155   cvt->dw_loc_oprnd1.v.val_die_ref.external = 0;
11156   add_loc_descr (&op0, cvt);
11157   cvt = new_loc_descr (DW_OP_GNU_convert, 0, 0);
11158   cvt->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
11159   cvt->dw_loc_oprnd1.v.val_die_ref.die = type_die;
11160   cvt->dw_loc_oprnd1.v.val_die_ref.external = 0;
11161   add_loc_descr (&op1, cvt);
11162   add_loc_descr (&op0, op1);
11163   add_loc_descr (&op0, new_loc_descr (op, 0, 0));
11164   return convert_descriptor_to_mode (mode, op0);
11165 }
11166 
11167 /* CLZ (where constV is CLZ_DEFINED_VALUE_AT_ZERO computed value,
11168    const0 is DW_OP_lit0 or corresponding typed constant,
11169    const1 is DW_OP_lit1 or corresponding typed constant
11170    and constMSB is constant with just the MSB bit set
11171    for the mode):
11172        DW_OP_dup DW_OP_bra <L1> DW_OP_drop constV DW_OP_skip <L4>
11173    L1: const0 DW_OP_swap
11174    L2: DW_OP_dup constMSB DW_OP_and DW_OP_bra <L3> const1 DW_OP_shl
11175        DW_OP_swap DW_OP_plus_uconst <1> DW_OP_swap DW_OP_skip <L2>
11176    L3: DW_OP_drop
11177    L4: DW_OP_nop
11178 
11179    CTZ is similar:
11180        DW_OP_dup DW_OP_bra <L1> DW_OP_drop constV DW_OP_skip <L4>
11181    L1: const0 DW_OP_swap
11182    L2: DW_OP_dup const1 DW_OP_and DW_OP_bra <L3> const1 DW_OP_shr
11183        DW_OP_swap DW_OP_plus_uconst <1> DW_OP_swap DW_OP_skip <L2>
11184    L3: DW_OP_drop
11185    L4: DW_OP_nop
11186 
11187    FFS is similar:
11188        DW_OP_dup DW_OP_bra <L1> DW_OP_drop const0 DW_OP_skip <L4>
11189    L1: const1 DW_OP_swap
11190    L2: DW_OP_dup const1 DW_OP_and DW_OP_bra <L3> const1 DW_OP_shr
11191        DW_OP_swap DW_OP_plus_uconst <1> DW_OP_swap DW_OP_skip <L2>
11192    L3: DW_OP_drop
11193    L4: DW_OP_nop  */
11194 
11195 static dw_loc_descr_ref
11196 clz_loc_descriptor (rtx rtl, enum machine_mode mode,
11197 		    enum machine_mode mem_mode)
11198 {
11199   dw_loc_descr_ref op0, ret, tmp;
11200   HOST_WIDE_INT valv;
11201   dw_loc_descr_ref l1jump, l1label;
11202   dw_loc_descr_ref l2jump, l2label;
11203   dw_loc_descr_ref l3jump, l3label;
11204   dw_loc_descr_ref l4jump, l4label;
11205   rtx msb;
11206 
11207   if (GET_MODE_CLASS (mode) != MODE_INT
11208       || GET_MODE (XEXP (rtl, 0)) != mode
11209       || (GET_CODE (rtl) == CLZ
11210 	  && GET_MODE_BITSIZE (mode) > 2 * HOST_BITS_PER_WIDE_INT))
11211     return NULL;
11212 
11213   op0 = mem_loc_descriptor (XEXP (rtl, 0), mode, mem_mode,
11214 			    VAR_INIT_STATUS_INITIALIZED);
11215   if (op0 == NULL)
11216     return NULL;
11217   ret = op0;
11218   if (GET_CODE (rtl) == CLZ)
11219     {
11220       if (!CLZ_DEFINED_VALUE_AT_ZERO (mode, valv))
11221 	valv = GET_MODE_BITSIZE (mode);
11222     }
11223   else if (GET_CODE (rtl) == FFS)
11224     valv = 0;
11225   else if (!CTZ_DEFINED_VALUE_AT_ZERO (mode, valv))
11226     valv = GET_MODE_BITSIZE (mode);
11227   add_loc_descr (&ret, new_loc_descr (DW_OP_dup, 0, 0));
11228   l1jump = new_loc_descr (DW_OP_bra, 0, 0);
11229   add_loc_descr (&ret, l1jump);
11230   add_loc_descr (&ret, new_loc_descr (DW_OP_drop, 0, 0));
11231   tmp = mem_loc_descriptor (GEN_INT (valv), mode, mem_mode,
11232 			    VAR_INIT_STATUS_INITIALIZED);
11233   if (tmp == NULL)
11234     return NULL;
11235   add_loc_descr (&ret, tmp);
11236   l4jump = new_loc_descr (DW_OP_skip, 0, 0);
11237   add_loc_descr (&ret, l4jump);
11238   l1label = mem_loc_descriptor (GET_CODE (rtl) == FFS
11239 				? const1_rtx : const0_rtx,
11240 				mode, mem_mode,
11241 				VAR_INIT_STATUS_INITIALIZED);
11242   if (l1label == NULL)
11243     return NULL;
11244   add_loc_descr (&ret, l1label);
11245   add_loc_descr (&ret, new_loc_descr (DW_OP_swap, 0, 0));
11246   l2label = new_loc_descr (DW_OP_dup, 0, 0);
11247   add_loc_descr (&ret, l2label);
11248   if (GET_CODE (rtl) != CLZ)
11249     msb = const1_rtx;
11250   else if (GET_MODE_BITSIZE (mode) <= HOST_BITS_PER_WIDE_INT)
11251     msb = GEN_INT ((unsigned HOST_WIDE_INT) 1
11252 		   << (GET_MODE_BITSIZE (mode) - 1));
11253   else
11254     msb = immed_double_const (0, (unsigned HOST_WIDE_INT) 1
11255 				  << (GET_MODE_BITSIZE (mode)
11256 				      - HOST_BITS_PER_WIDE_INT - 1), mode);
11257   if (GET_CODE (msb) == CONST_INT && INTVAL (msb) < 0)
11258     tmp = new_loc_descr (HOST_BITS_PER_WIDE_INT == 32
11259 			 ? DW_OP_const4u : HOST_BITS_PER_WIDE_INT == 64
11260 			 ? DW_OP_const8u : DW_OP_constu, INTVAL (msb), 0);
11261   else
11262     tmp = mem_loc_descriptor (msb, mode, mem_mode,
11263 			      VAR_INIT_STATUS_INITIALIZED);
11264   if (tmp == NULL)
11265     return NULL;
11266   add_loc_descr (&ret, tmp);
11267   add_loc_descr (&ret, new_loc_descr (DW_OP_and, 0, 0));
11268   l3jump = new_loc_descr (DW_OP_bra, 0, 0);
11269   add_loc_descr (&ret, l3jump);
11270   tmp = mem_loc_descriptor (const1_rtx, mode, mem_mode,
11271 			    VAR_INIT_STATUS_INITIALIZED);
11272   if (tmp == NULL)
11273     return NULL;
11274   add_loc_descr (&ret, tmp);
11275   add_loc_descr (&ret, new_loc_descr (GET_CODE (rtl) == CLZ
11276 				      ? DW_OP_shl : DW_OP_shr, 0, 0));
11277   add_loc_descr (&ret, new_loc_descr (DW_OP_swap, 0, 0));
11278   add_loc_descr (&ret, new_loc_descr (DW_OP_plus_uconst, 1, 0));
11279   add_loc_descr (&ret, new_loc_descr (DW_OP_swap, 0, 0));
11280   l2jump = new_loc_descr (DW_OP_skip, 0, 0);
11281   add_loc_descr (&ret, l2jump);
11282   l3label = new_loc_descr (DW_OP_drop, 0, 0);
11283   add_loc_descr (&ret, l3label);
11284   l4label = new_loc_descr (DW_OP_nop, 0, 0);
11285   add_loc_descr (&ret, l4label);
11286   l1jump->dw_loc_oprnd1.val_class = dw_val_class_loc;
11287   l1jump->dw_loc_oprnd1.v.val_loc = l1label;
11288   l2jump->dw_loc_oprnd1.val_class = dw_val_class_loc;
11289   l2jump->dw_loc_oprnd1.v.val_loc = l2label;
11290   l3jump->dw_loc_oprnd1.val_class = dw_val_class_loc;
11291   l3jump->dw_loc_oprnd1.v.val_loc = l3label;
11292   l4jump->dw_loc_oprnd1.val_class = dw_val_class_loc;
11293   l4jump->dw_loc_oprnd1.v.val_loc = l4label;
11294   return ret;
11295 }
11296 
11297 /* POPCOUNT (const0 is DW_OP_lit0 or corresponding typed constant,
11298    const1 is DW_OP_lit1 or corresponding typed constant):
11299        const0 DW_OP_swap
11300    L1: DW_OP_dup DW_OP_bra <L2> DW_OP_dup DW_OP_rot const1 DW_OP_and
11301        DW_OP_plus DW_OP_swap const1 DW_OP_shr DW_OP_skip <L1>
11302    L2: DW_OP_drop
11303 
11304    PARITY is similar:
11305    L1: DW_OP_dup DW_OP_bra <L2> DW_OP_dup DW_OP_rot const1 DW_OP_and
11306        DW_OP_xor DW_OP_swap const1 DW_OP_shr DW_OP_skip <L1>
11307    L2: DW_OP_drop  */
11308 
11309 static dw_loc_descr_ref
11310 popcount_loc_descriptor (rtx rtl, enum machine_mode mode,
11311 			 enum machine_mode mem_mode)
11312 {
11313   dw_loc_descr_ref op0, ret, tmp;
11314   dw_loc_descr_ref l1jump, l1label;
11315   dw_loc_descr_ref l2jump, l2label;
11316 
11317   if (GET_MODE_CLASS (mode) != MODE_INT
11318       || GET_MODE (XEXP (rtl, 0)) != mode)
11319     return NULL;
11320 
11321   op0 = mem_loc_descriptor (XEXP (rtl, 0), mode, mem_mode,
11322 			    VAR_INIT_STATUS_INITIALIZED);
11323   if (op0 == NULL)
11324     return NULL;
11325   ret = op0;
11326   tmp = mem_loc_descriptor (const0_rtx, mode, mem_mode,
11327 			    VAR_INIT_STATUS_INITIALIZED);
11328   if (tmp == NULL)
11329     return NULL;
11330   add_loc_descr (&ret, tmp);
11331   add_loc_descr (&ret, new_loc_descr (DW_OP_swap, 0, 0));
11332   l1label = new_loc_descr (DW_OP_dup, 0, 0);
11333   add_loc_descr (&ret, l1label);
11334   l2jump = new_loc_descr (DW_OP_bra, 0, 0);
11335   add_loc_descr (&ret, l2jump);
11336   add_loc_descr (&ret, new_loc_descr (DW_OP_dup, 0, 0));
11337   add_loc_descr (&ret, new_loc_descr (DW_OP_rot, 0, 0));
11338   tmp = mem_loc_descriptor (const1_rtx, mode, mem_mode,
11339 			    VAR_INIT_STATUS_INITIALIZED);
11340   if (tmp == NULL)
11341     return NULL;
11342   add_loc_descr (&ret, tmp);
11343   add_loc_descr (&ret, new_loc_descr (DW_OP_and, 0, 0));
11344   add_loc_descr (&ret, new_loc_descr (GET_CODE (rtl) == POPCOUNT
11345 				      ? DW_OP_plus : DW_OP_xor, 0, 0));
11346   add_loc_descr (&ret, new_loc_descr (DW_OP_swap, 0, 0));
11347   tmp = mem_loc_descriptor (const1_rtx, mode, mem_mode,
11348 			    VAR_INIT_STATUS_INITIALIZED);
11349   add_loc_descr (&ret, tmp);
11350   add_loc_descr (&ret, new_loc_descr (DW_OP_shr, 0, 0));
11351   l1jump = new_loc_descr (DW_OP_skip, 0, 0);
11352   add_loc_descr (&ret, l1jump);
11353   l2label = new_loc_descr (DW_OP_drop, 0, 0);
11354   add_loc_descr (&ret, l2label);
11355   l1jump->dw_loc_oprnd1.val_class = dw_val_class_loc;
11356   l1jump->dw_loc_oprnd1.v.val_loc = l1label;
11357   l2jump->dw_loc_oprnd1.val_class = dw_val_class_loc;
11358   l2jump->dw_loc_oprnd1.v.val_loc = l2label;
11359   return ret;
11360 }
11361 
11362 /* BSWAP (constS is initial shift count, either 56 or 24):
11363        constS const0
11364    L1: DW_OP_pick <2> constS DW_OP_pick <3> DW_OP_minus DW_OP_shr
11365        const255 DW_OP_and DW_OP_pick <2> DW_OP_shl DW_OP_or
11366        DW_OP_swap DW_OP_dup const0 DW_OP_eq DW_OP_bra <L2> const8
11367        DW_OP_minus DW_OP_swap DW_OP_skip <L1>
11368    L2: DW_OP_drop DW_OP_swap DW_OP_drop  */
11369 
11370 static dw_loc_descr_ref
11371 bswap_loc_descriptor (rtx rtl, enum machine_mode mode,
11372 		      enum machine_mode mem_mode)
11373 {
11374   dw_loc_descr_ref op0, ret, tmp;
11375   dw_loc_descr_ref l1jump, l1label;
11376   dw_loc_descr_ref l2jump, l2label;
11377 
11378   if (GET_MODE_CLASS (mode) != MODE_INT
11379       || BITS_PER_UNIT != 8
11380       || (GET_MODE_BITSIZE (mode) != 32
11381 	  &&  GET_MODE_BITSIZE (mode) != 64))
11382     return NULL;
11383 
11384   op0 = mem_loc_descriptor (XEXP (rtl, 0), mode, mem_mode,
11385 			    VAR_INIT_STATUS_INITIALIZED);
11386   if (op0 == NULL)
11387     return NULL;
11388 
11389   ret = op0;
11390   tmp = mem_loc_descriptor (GEN_INT (GET_MODE_BITSIZE (mode) - 8),
11391 			    mode, mem_mode,
11392 			    VAR_INIT_STATUS_INITIALIZED);
11393   if (tmp == NULL)
11394     return NULL;
11395   add_loc_descr (&ret, tmp);
11396   tmp = mem_loc_descriptor (const0_rtx, mode, mem_mode,
11397 			    VAR_INIT_STATUS_INITIALIZED);
11398   if (tmp == NULL)
11399     return NULL;
11400   add_loc_descr (&ret, tmp);
11401   l1label = new_loc_descr (DW_OP_pick, 2, 0);
11402   add_loc_descr (&ret, l1label);
11403   tmp = mem_loc_descriptor (GEN_INT (GET_MODE_BITSIZE (mode) - 8),
11404 			    mode, mem_mode,
11405 			    VAR_INIT_STATUS_INITIALIZED);
11406   add_loc_descr (&ret, tmp);
11407   add_loc_descr (&ret, new_loc_descr (DW_OP_pick, 3, 0));
11408   add_loc_descr (&ret, new_loc_descr (DW_OP_minus, 0, 0));
11409   add_loc_descr (&ret, new_loc_descr (DW_OP_shr, 0, 0));
11410   tmp = mem_loc_descriptor (GEN_INT (255), mode, mem_mode,
11411 			    VAR_INIT_STATUS_INITIALIZED);
11412   if (tmp == NULL)
11413     return NULL;
11414   add_loc_descr (&ret, tmp);
11415   add_loc_descr (&ret, new_loc_descr (DW_OP_and, 0, 0));
11416   add_loc_descr (&ret, new_loc_descr (DW_OP_pick, 2, 0));
11417   add_loc_descr (&ret, new_loc_descr (DW_OP_shl, 0, 0));
11418   add_loc_descr (&ret, new_loc_descr (DW_OP_or, 0, 0));
11419   add_loc_descr (&ret, new_loc_descr (DW_OP_swap, 0, 0));
11420   add_loc_descr (&ret, new_loc_descr (DW_OP_dup, 0, 0));
11421   tmp = mem_loc_descriptor (const0_rtx, mode, mem_mode,
11422 			    VAR_INIT_STATUS_INITIALIZED);
11423   add_loc_descr (&ret, tmp);
11424   add_loc_descr (&ret, new_loc_descr (DW_OP_eq, 0, 0));
11425   l2jump = new_loc_descr (DW_OP_bra, 0, 0);
11426   add_loc_descr (&ret, l2jump);
11427   tmp = mem_loc_descriptor (GEN_INT (8), mode, mem_mode,
11428 			    VAR_INIT_STATUS_INITIALIZED);
11429   add_loc_descr (&ret, tmp);
11430   add_loc_descr (&ret, new_loc_descr (DW_OP_minus, 0, 0));
11431   add_loc_descr (&ret, new_loc_descr (DW_OP_swap, 0, 0));
11432   l1jump = new_loc_descr (DW_OP_skip, 0, 0);
11433   add_loc_descr (&ret, l1jump);
11434   l2label = new_loc_descr (DW_OP_drop, 0, 0);
11435   add_loc_descr (&ret, l2label);
11436   add_loc_descr (&ret, new_loc_descr (DW_OP_swap, 0, 0));
11437   add_loc_descr (&ret, new_loc_descr (DW_OP_drop, 0, 0));
11438   l1jump->dw_loc_oprnd1.val_class = dw_val_class_loc;
11439   l1jump->dw_loc_oprnd1.v.val_loc = l1label;
11440   l2jump->dw_loc_oprnd1.val_class = dw_val_class_loc;
11441   l2jump->dw_loc_oprnd1.v.val_loc = l2label;
11442   return ret;
11443 }
11444 
11445 /* ROTATE (constMASK is mode mask, BITSIZE is bitsize of mode):
11446    DW_OP_over DW_OP_over DW_OP_shl [ constMASK DW_OP_and ] DW_OP_rot
11447    [ DW_OP_swap constMASK DW_OP_and DW_OP_swap ] DW_OP_neg
11448    DW_OP_plus_uconst <BITSIZE> DW_OP_shr DW_OP_or
11449 
11450    ROTATERT is similar:
11451    DW_OP_over DW_OP_over DW_OP_neg DW_OP_plus_uconst <BITSIZE>
11452    DW_OP_shl [ constMASK DW_OP_and ] DW_OP_rot
11453    [ DW_OP_swap constMASK DW_OP_and DW_OP_swap ] DW_OP_shr DW_OP_or  */
11454 
11455 static dw_loc_descr_ref
11456 rotate_loc_descriptor (rtx rtl, enum machine_mode mode,
11457 		       enum machine_mode mem_mode)
11458 {
11459   rtx rtlop1 = XEXP (rtl, 1);
11460   dw_loc_descr_ref op0, op1, ret, mask[2] = { NULL, NULL };
11461   int i;
11462 
11463   if (GET_MODE_CLASS (mode) != MODE_INT)
11464     return NULL;
11465 
11466   if (GET_MODE (rtlop1) != VOIDmode
11467       && GET_MODE_BITSIZE (GET_MODE (rtlop1)) < GET_MODE_BITSIZE (mode))
11468     rtlop1 = gen_rtx_ZERO_EXTEND (mode, rtlop1);
11469   op0 = mem_loc_descriptor (XEXP (rtl, 0), mode, mem_mode,
11470 			    VAR_INIT_STATUS_INITIALIZED);
11471   op1 = mem_loc_descriptor (rtlop1, mode, mem_mode,
11472 			    VAR_INIT_STATUS_INITIALIZED);
11473   if (op0 == NULL || op1 == NULL)
11474     return NULL;
11475   if (GET_MODE_SIZE (mode) < DWARF2_ADDR_SIZE)
11476     for (i = 0; i < 2; i++)
11477       {
11478 	if (GET_MODE_BITSIZE (mode) < HOST_BITS_PER_WIDE_INT)
11479 	  mask[i] = mem_loc_descriptor (GEN_INT (GET_MODE_MASK (mode)),
11480 					mode, mem_mode,
11481 					VAR_INIT_STATUS_INITIALIZED);
11482 	else if (GET_MODE_BITSIZE (mode) == HOST_BITS_PER_WIDE_INT)
11483 	  mask[i] = new_loc_descr (HOST_BITS_PER_WIDE_INT == 32
11484 				   ? DW_OP_const4u
11485 				   : HOST_BITS_PER_WIDE_INT == 64
11486 				   ? DW_OP_const8u : DW_OP_constu,
11487 				   GET_MODE_MASK (mode), 0);
11488 	else
11489 	  mask[i] = NULL;
11490 	if (mask[i] == NULL)
11491 	  return NULL;
11492 	add_loc_descr (&mask[i], new_loc_descr (DW_OP_and, 0, 0));
11493       }
11494   ret = op0;
11495   add_loc_descr (&ret, op1);
11496   add_loc_descr (&ret, new_loc_descr (DW_OP_over, 0, 0));
11497   add_loc_descr (&ret, new_loc_descr (DW_OP_over, 0, 0));
11498   if (GET_CODE (rtl) == ROTATERT)
11499     {
11500       add_loc_descr (&ret, new_loc_descr (DW_OP_neg, 0, 0));
11501       add_loc_descr (&ret, new_loc_descr (DW_OP_plus_uconst,
11502 					  GET_MODE_BITSIZE (mode), 0));
11503     }
11504   add_loc_descr (&ret, new_loc_descr (DW_OP_shl, 0, 0));
11505   if (mask[0] != NULL)
11506     add_loc_descr (&ret, mask[0]);
11507   add_loc_descr (&ret, new_loc_descr (DW_OP_rot, 0, 0));
11508   if (mask[1] != NULL)
11509     {
11510       add_loc_descr (&ret, new_loc_descr (DW_OP_swap, 0, 0));
11511       add_loc_descr (&ret, mask[1]);
11512       add_loc_descr (&ret, new_loc_descr (DW_OP_swap, 0, 0));
11513     }
11514   if (GET_CODE (rtl) == ROTATE)
11515     {
11516       add_loc_descr (&ret, new_loc_descr (DW_OP_neg, 0, 0));
11517       add_loc_descr (&ret, new_loc_descr (DW_OP_plus_uconst,
11518 					  GET_MODE_BITSIZE (mode), 0));
11519     }
11520   add_loc_descr (&ret, new_loc_descr (DW_OP_shr, 0, 0));
11521   add_loc_descr (&ret, new_loc_descr (DW_OP_or, 0, 0));
11522   return ret;
11523 }
11524 
11525 /* Helper function for mem_loc_descriptor.  Return DW_OP_GNU_parameter_ref
11526    for DEBUG_PARAMETER_REF RTL.  */
11527 
11528 static dw_loc_descr_ref
11529 parameter_ref_descriptor (rtx rtl)
11530 {
11531   dw_loc_descr_ref ret;
11532   dw_die_ref ref;
11533 
11534   if (dwarf_strict)
11535     return NULL;
11536   gcc_assert (TREE_CODE (DEBUG_PARAMETER_REF_DECL (rtl)) == PARM_DECL);
11537   ref = lookup_decl_die (DEBUG_PARAMETER_REF_DECL (rtl));
11538   ret = new_loc_descr (DW_OP_GNU_parameter_ref, 0, 0);
11539   if (ref)
11540     {
11541       ret->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
11542       ret->dw_loc_oprnd1.v.val_die_ref.die = ref;
11543       ret->dw_loc_oprnd1.v.val_die_ref.external = 0;
11544     }
11545   else
11546     {
11547       ret->dw_loc_oprnd1.val_class = dw_val_class_decl_ref;
11548       ret->dw_loc_oprnd1.v.val_decl_ref = DEBUG_PARAMETER_REF_DECL (rtl);
11549     }
11550   return ret;
11551 }
11552 
11553 /* Helper function to get mode of MEM's address.  */
11554 
11555 enum machine_mode
11556 get_address_mode (rtx mem)
11557 {
11558   enum machine_mode mode = GET_MODE (XEXP (mem, 0));
11559   if (mode != VOIDmode)
11560     return mode;
11561   return targetm.addr_space.address_mode (MEM_ADDR_SPACE (mem));
11562 }
11563 
11564 /* The following routine converts the RTL for a variable or parameter
11565    (resident in memory) into an equivalent Dwarf representation of a
11566    mechanism for getting the address of that same variable onto the top of a
11567    hypothetical "address evaluation" stack.
11568 
11569    When creating memory location descriptors, we are effectively transforming
11570    the RTL for a memory-resident object into its Dwarf postfix expression
11571    equivalent.  This routine recursively descends an RTL tree, turning
11572    it into Dwarf postfix code as it goes.
11573 
11574    MODE is the mode that should be assumed for the rtl if it is VOIDmode.
11575 
11576    MEM_MODE is the mode of the memory reference, needed to handle some
11577    autoincrement addressing modes.
11578 
11579    Return 0 if we can't represent the location.  */
11580 
11581 dw_loc_descr_ref
11582 mem_loc_descriptor (rtx rtl, enum machine_mode mode,
11583 		    enum machine_mode mem_mode,
11584 		    enum var_init_status initialized)
11585 {
11586   dw_loc_descr_ref mem_loc_result = NULL;
11587   enum dwarf_location_atom op;
11588   dw_loc_descr_ref op0, op1;
11589 
11590   if (mode == VOIDmode)
11591     mode = GET_MODE (rtl);
11592 
11593   /* Note that for a dynamically sized array, the location we will generate a
11594      description of here will be the lowest numbered location which is
11595      actually within the array.  That's *not* necessarily the same as the
11596      zeroth element of the array.  */
11597 
11598   rtl = targetm.delegitimize_address (rtl);
11599 
11600   if (mode != GET_MODE (rtl) && GET_MODE (rtl) != VOIDmode)
11601     return NULL;
11602 
11603   switch (GET_CODE (rtl))
11604     {
11605     case POST_INC:
11606     case POST_DEC:
11607     case POST_MODIFY:
11608       return mem_loc_descriptor (XEXP (rtl, 0), mode, mem_mode, initialized);
11609 
11610     case SUBREG:
11611       /* The case of a subreg may arise when we have a local (register)
11612 	 variable or a formal (register) parameter which doesn't quite fill
11613 	 up an entire register.  For now, just assume that it is
11614 	 legitimate to make the Dwarf info refer to the whole register which
11615 	 contains the given subreg.  */
11616       if (!subreg_lowpart_p (rtl))
11617 	break;
11618       if (GET_MODE_CLASS (mode) == MODE_INT
11619 	  && GET_MODE_CLASS (GET_MODE (SUBREG_REG (rtl))) == MODE_INT
11620 	  && (GET_MODE_SIZE (mode) <= DWARF2_ADDR_SIZE
11621 #ifdef POINTERS_EXTEND_UNSIGNED
11622 	      || (mode == Pmode && mem_mode != VOIDmode)
11623 #endif
11624 	     )
11625 	  && GET_MODE_SIZE (GET_MODE (SUBREG_REG (rtl))) <= DWARF2_ADDR_SIZE)
11626 	{
11627 	  mem_loc_result = mem_loc_descriptor (SUBREG_REG (rtl),
11628 					       GET_MODE (SUBREG_REG (rtl)),
11629 					       mem_mode, initialized);
11630 	  break;
11631 	}
11632       if (dwarf_strict)
11633 	break;
11634       if (GET_MODE_SIZE (mode) > GET_MODE_SIZE (GET_MODE (SUBREG_REG (rtl))))
11635 	break;
11636       if (GET_MODE_SIZE (mode) != GET_MODE_SIZE (GET_MODE (SUBREG_REG (rtl)))
11637 	  && (GET_MODE_CLASS (mode) != MODE_INT
11638 	      || GET_MODE_CLASS (GET_MODE (SUBREG_REG (rtl))) != MODE_INT))
11639 	break;
11640       else
11641 	{
11642 	  dw_die_ref type_die;
11643 	  dw_loc_descr_ref cvt;
11644 
11645 	  mem_loc_result = mem_loc_descriptor (SUBREG_REG (rtl),
11646 					       GET_MODE (SUBREG_REG (rtl)),
11647 					       mem_mode, initialized);
11648 	  if (mem_loc_result == NULL)
11649 	    break;
11650 	  type_die = base_type_for_mode (mode,
11651 					 GET_MODE_CLASS (mode) == MODE_INT);
11652 	  if (type_die == NULL)
11653 	    {
11654 	      mem_loc_result = NULL;
11655 	      break;
11656 	    }
11657 	  if (GET_MODE_SIZE (mode)
11658 	      != GET_MODE_SIZE (GET_MODE (SUBREG_REG (rtl))))
11659 	    cvt = new_loc_descr (DW_OP_GNU_convert, 0, 0);
11660 	  else
11661 	    cvt = new_loc_descr (DW_OP_GNU_reinterpret, 0, 0);
11662 	  cvt->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
11663 	  cvt->dw_loc_oprnd1.v.val_die_ref.die = type_die;
11664 	  cvt->dw_loc_oprnd1.v.val_die_ref.external = 0;
11665 	  add_loc_descr (&mem_loc_result, cvt);
11666 	}
11667       break;
11668 
11669     case REG:
11670       if (GET_MODE_CLASS (mode) != MODE_INT
11671 	  || (GET_MODE_SIZE (mode) > DWARF2_ADDR_SIZE
11672 #ifdef POINTERS_EXTEND_UNSIGNED
11673 	      && (mode != Pmode || mem_mode == VOIDmode)
11674 #endif
11675 	      ))
11676 	{
11677 	  dw_die_ref type_die;
11678 
11679 	  if (dwarf_strict)
11680 	    break;
11681 	  if (REGNO (rtl) > FIRST_PSEUDO_REGISTER)
11682 	    break;
11683 	  type_die = base_type_for_mode (mode,
11684 					 GET_MODE_CLASS (mode) == MODE_INT);
11685 	  if (type_die == NULL)
11686 	    break;
11687 	  mem_loc_result = new_loc_descr (DW_OP_GNU_regval_type,
11688 					  dbx_reg_number (rtl), 0);
11689 	  mem_loc_result->dw_loc_oprnd2.val_class = dw_val_class_die_ref;
11690 	  mem_loc_result->dw_loc_oprnd2.v.val_die_ref.die = type_die;
11691 	  mem_loc_result->dw_loc_oprnd2.v.val_die_ref.external = 0;
11692 	  break;
11693 	}
11694       /* Whenever a register number forms a part of the description of the
11695 	 method for calculating the (dynamic) address of a memory resident
11696 	 object, DWARF rules require the register number be referred to as
11697 	 a "base register".  This distinction is not based in any way upon
11698 	 what category of register the hardware believes the given register
11699 	 belongs to.  This is strictly DWARF terminology we're dealing with
11700 	 here. Note that in cases where the location of a memory-resident
11701 	 data object could be expressed as: OP_ADD (OP_BASEREG (basereg),
11702 	 OP_CONST (0)) the actual DWARF location descriptor that we generate
11703 	 may just be OP_BASEREG (basereg).  This may look deceptively like
11704 	 the object in question was allocated to a register (rather than in
11705 	 memory) so DWARF consumers need to be aware of the subtle
11706 	 distinction between OP_REG and OP_BASEREG.  */
11707       if (REGNO (rtl) < FIRST_PSEUDO_REGISTER)
11708 	mem_loc_result = based_loc_descr (rtl, 0, VAR_INIT_STATUS_INITIALIZED);
11709       else if (stack_realign_drap
11710 	       && crtl->drap_reg
11711 	       && crtl->args.internal_arg_pointer == rtl
11712 	       && REGNO (crtl->drap_reg) < FIRST_PSEUDO_REGISTER)
11713 	{
11714 	  /* If RTL is internal_arg_pointer, which has been optimized
11715 	     out, use DRAP instead.  */
11716 	  mem_loc_result = based_loc_descr (crtl->drap_reg, 0,
11717 					    VAR_INIT_STATUS_INITIALIZED);
11718 	}
11719       break;
11720 
11721     case SIGN_EXTEND:
11722     case ZERO_EXTEND:
11723       if (GET_MODE_CLASS (mode) != MODE_INT)
11724 	break;
11725       op0 = mem_loc_descriptor (XEXP (rtl, 0), GET_MODE (XEXP (rtl, 0)),
11726 				mem_mode, VAR_INIT_STATUS_INITIALIZED);
11727       if (op0 == 0)
11728 	break;
11729       else if (GET_CODE (rtl) == ZERO_EXTEND
11730 	       && GET_MODE_SIZE (mode) <= DWARF2_ADDR_SIZE
11731 	       && GET_MODE_BITSIZE (GET_MODE (XEXP (rtl, 0)))
11732 		  < HOST_BITS_PER_WIDE_INT
11733 	       /* If DW_OP_const{1,2,4}u won't be used, it is shorter
11734 		  to expand zero extend as two shifts instead of
11735 		  masking.  */
11736 	       && GET_MODE_SIZE (GET_MODE (XEXP (rtl, 0))) <= 4)
11737 	{
11738 	  enum machine_mode imode = GET_MODE (XEXP (rtl, 0));
11739 	  mem_loc_result = op0;
11740 	  add_loc_descr (&mem_loc_result,
11741 			 int_loc_descriptor (GET_MODE_MASK (imode)));
11742 	  add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_and, 0, 0));
11743 	}
11744       else if (GET_MODE_SIZE (mode) <= DWARF2_ADDR_SIZE)
11745 	{
11746 	  int shift = DWARF2_ADDR_SIZE
11747 		      - GET_MODE_SIZE (GET_MODE (XEXP (rtl, 0)));
11748 	  shift *= BITS_PER_UNIT;
11749 	  if (GET_CODE (rtl) == SIGN_EXTEND)
11750 	    op = DW_OP_shra;
11751 	  else
11752 	    op = DW_OP_shr;
11753 	  mem_loc_result = op0;
11754 	  add_loc_descr (&mem_loc_result, int_loc_descriptor (shift));
11755 	  add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_shl, 0, 0));
11756 	  add_loc_descr (&mem_loc_result, int_loc_descriptor (shift));
11757 	  add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0));
11758 	}
11759       else if (!dwarf_strict)
11760 	{
11761 	  dw_die_ref type_die1, type_die2;
11762 	  dw_loc_descr_ref cvt;
11763 
11764 	  type_die1 = base_type_for_mode (GET_MODE (XEXP (rtl, 0)),
11765 					  GET_CODE (rtl) == ZERO_EXTEND);
11766 	  if (type_die1 == NULL)
11767 	    break;
11768 	  type_die2 = base_type_for_mode (mode, 1);
11769 	  if (type_die2 == NULL)
11770 	    break;
11771 	  mem_loc_result = op0;
11772 	  cvt = new_loc_descr (DW_OP_GNU_convert, 0, 0);
11773 	  cvt->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
11774 	  cvt->dw_loc_oprnd1.v.val_die_ref.die = type_die1;
11775 	  cvt->dw_loc_oprnd1.v.val_die_ref.external = 0;
11776 	  add_loc_descr (&mem_loc_result, cvt);
11777 	  cvt = new_loc_descr (DW_OP_GNU_convert, 0, 0);
11778 	  cvt->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
11779 	  cvt->dw_loc_oprnd1.v.val_die_ref.die = type_die2;
11780 	  cvt->dw_loc_oprnd1.v.val_die_ref.external = 0;
11781 	  add_loc_descr (&mem_loc_result, cvt);
11782 	}
11783       break;
11784 
11785     case MEM:
11786       {
11787 	rtx new_rtl = avoid_constant_pool_reference (rtl);
11788 	if (new_rtl != rtl)
11789 	  {
11790 	    mem_loc_result = mem_loc_descriptor (new_rtl, mode, mem_mode,
11791 						 initialized);
11792 	    if (mem_loc_result != NULL)
11793 	      return mem_loc_result;
11794 	  }
11795       }
11796       mem_loc_result = mem_loc_descriptor (XEXP (rtl, 0),
11797 					   get_address_mode (rtl), mode,
11798 					   VAR_INIT_STATUS_INITIALIZED);
11799       if (mem_loc_result == NULL)
11800 	mem_loc_result = tls_mem_loc_descriptor (rtl);
11801       if (mem_loc_result != NULL)
11802 	{
11803 	  if (GET_MODE_SIZE (mode) > DWARF2_ADDR_SIZE
11804 	      || GET_MODE_CLASS (mode) != MODE_INT)
11805 	    {
11806 	      dw_die_ref type_die;
11807 	      dw_loc_descr_ref deref;
11808 
11809 	      if (dwarf_strict)
11810 		return NULL;
11811 	      type_die
11812 		= base_type_for_mode (mode, GET_MODE_CLASS (mode) == MODE_INT);
11813 	      if (type_die == NULL)
11814 		return NULL;
11815 	      deref = new_loc_descr (DW_OP_GNU_deref_type,
11816 				     GET_MODE_SIZE (mode), 0);
11817 	      deref->dw_loc_oprnd2.val_class = dw_val_class_die_ref;
11818 	      deref->dw_loc_oprnd2.v.val_die_ref.die = type_die;
11819 	      deref->dw_loc_oprnd2.v.val_die_ref.external = 0;
11820 	      add_loc_descr (&mem_loc_result, deref);
11821 	    }
11822 	  else if (GET_MODE_SIZE (mode) == DWARF2_ADDR_SIZE)
11823 	    add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_deref, 0, 0));
11824 	  else
11825 	    add_loc_descr (&mem_loc_result,
11826 			   new_loc_descr (DW_OP_deref_size,
11827 					  GET_MODE_SIZE (mode), 0));
11828 	}
11829       break;
11830 
11831     case LO_SUM:
11832       return mem_loc_descriptor (XEXP (rtl, 1), mode, mem_mode, initialized);
11833 
11834     case LABEL_REF:
11835       /* Some ports can transform a symbol ref into a label ref, because
11836 	 the symbol ref is too far away and has to be dumped into a constant
11837 	 pool.  */
11838     case CONST:
11839     case SYMBOL_REF:
11840       if (GET_MODE_CLASS (mode) != MODE_INT
11841 	  || (GET_MODE_SIZE (mode) > DWARF2_ADDR_SIZE
11842 #ifdef POINTERS_EXTEND_UNSIGNED
11843 	      && (mode != Pmode || mem_mode == VOIDmode)
11844 #endif
11845 	      ))
11846 	break;
11847       if (GET_CODE (rtl) == SYMBOL_REF
11848 	  && SYMBOL_REF_TLS_MODEL (rtl) != TLS_MODEL_NONE)
11849 	{
11850 	  dw_loc_descr_ref temp;
11851 
11852 	  /* If this is not defined, we have no way to emit the data.  */
11853 	  if (!targetm.have_tls || !targetm.asm_out.output_dwarf_dtprel)
11854 	    break;
11855 
11856 	  /* We used to emit DW_OP_addr here, but that's wrong, since
11857 	     DW_OP_addr should be relocated by the debug info consumer,
11858 	     while DW_OP_GNU_push_tls_address operand should not.  */
11859 	  temp = new_loc_descr (DWARF2_ADDR_SIZE == 4
11860 				? DW_OP_const4u : DW_OP_const8u, 0, 0);
11861 	  temp->dw_loc_oprnd1.val_class = dw_val_class_addr;
11862 	  temp->dw_loc_oprnd1.v.val_addr = rtl;
11863 	  temp->dtprel = true;
11864 
11865 	  mem_loc_result = new_loc_descr (DW_OP_GNU_push_tls_address, 0, 0);
11866 	  add_loc_descr (&mem_loc_result, temp);
11867 
11868 	  break;
11869 	}
11870 
11871       if (!const_ok_for_output (rtl))
11872 	break;
11873 
11874     symref:
11875       mem_loc_result = new_loc_descr (DW_OP_addr, 0, 0);
11876       mem_loc_result->dw_loc_oprnd1.val_class = dw_val_class_addr;
11877       mem_loc_result->dw_loc_oprnd1.v.val_addr = rtl;
11878       VEC_safe_push (rtx, gc, used_rtx_array, rtl);
11879       break;
11880 
11881     case CONCAT:
11882     case CONCATN:
11883     case VAR_LOCATION:
11884     case DEBUG_IMPLICIT_PTR:
11885       expansion_failed (NULL_TREE, rtl,
11886 			"CONCAT/CONCATN/VAR_LOCATION is handled only by loc_descriptor");
11887       return 0;
11888 
11889     case ENTRY_VALUE:
11890       if (dwarf_strict)
11891 	return NULL;
11892       if (REG_P (ENTRY_VALUE_EXP (rtl)))
11893 	{
11894 	  if (GET_MODE_CLASS (mode) != MODE_INT
11895 	      || GET_MODE_SIZE (mode) > DWARF2_ADDR_SIZE)
11896 	    op0 = mem_loc_descriptor (ENTRY_VALUE_EXP (rtl), mode,
11897 				      VOIDmode, VAR_INIT_STATUS_INITIALIZED);
11898 	  else
11899 	    op0
11900 	      = one_reg_loc_descriptor (dbx_reg_number (ENTRY_VALUE_EXP (rtl)),
11901 					VAR_INIT_STATUS_INITIALIZED);
11902 	}
11903       else if (MEM_P (ENTRY_VALUE_EXP (rtl))
11904 	       && REG_P (XEXP (ENTRY_VALUE_EXP (rtl), 0)))
11905 	{
11906 	  op0 = mem_loc_descriptor (ENTRY_VALUE_EXP (rtl), mode,
11907 				    VOIDmode, VAR_INIT_STATUS_INITIALIZED);
11908 	  if (op0 && op0->dw_loc_opc == DW_OP_fbreg)
11909 	    return NULL;
11910 	}
11911       else
11912 	gcc_unreachable ();
11913       if (op0 == NULL)
11914 	return NULL;
11915       mem_loc_result = new_loc_descr (DW_OP_GNU_entry_value, 0, 0);
11916       mem_loc_result->dw_loc_oprnd1.val_class = dw_val_class_loc;
11917       mem_loc_result->dw_loc_oprnd1.v.val_loc = op0;
11918       break;
11919 
11920     case DEBUG_PARAMETER_REF:
11921       mem_loc_result = parameter_ref_descriptor (rtl);
11922       break;
11923 
11924     case PRE_MODIFY:
11925       /* Extract the PLUS expression nested inside and fall into
11926 	 PLUS code below.  */
11927       rtl = XEXP (rtl, 1);
11928       goto plus;
11929 
11930     case PRE_INC:
11931     case PRE_DEC:
11932       /* Turn these into a PLUS expression and fall into the PLUS code
11933 	 below.  */
11934       rtl = gen_rtx_PLUS (mode, XEXP (rtl, 0),
11935 			  GEN_INT (GET_CODE (rtl) == PRE_INC
11936 				   ? GET_MODE_UNIT_SIZE (mem_mode)
11937 				   : -GET_MODE_UNIT_SIZE (mem_mode)));
11938 
11939       /* ... fall through ...  */
11940 
11941     case PLUS:
11942     plus:
11943       if (is_based_loc (rtl)
11944 	  && GET_MODE_SIZE (mode) <= DWARF2_ADDR_SIZE
11945 	  && GET_MODE_CLASS (mode) == MODE_INT)
11946 	mem_loc_result = based_loc_descr (XEXP (rtl, 0),
11947 					  INTVAL (XEXP (rtl, 1)),
11948 					  VAR_INIT_STATUS_INITIALIZED);
11949       else
11950 	{
11951 	  mem_loc_result = mem_loc_descriptor (XEXP (rtl, 0), mode, mem_mode,
11952 					       VAR_INIT_STATUS_INITIALIZED);
11953 	  if (mem_loc_result == 0)
11954 	    break;
11955 
11956 	  if (CONST_INT_P (XEXP (rtl, 1))
11957 	      && GET_MODE_SIZE (mode) <= DWARF2_ADDR_SIZE)
11958 	    loc_descr_plus_const (&mem_loc_result, INTVAL (XEXP (rtl, 1)));
11959 	  else
11960 	    {
11961 	      op1 = mem_loc_descriptor (XEXP (rtl, 1), mode, mem_mode,
11962 					VAR_INIT_STATUS_INITIALIZED);
11963 	      if (op1 == 0)
11964 		break;
11965 	      add_loc_descr (&mem_loc_result, op1);
11966 	      add_loc_descr (&mem_loc_result,
11967 			     new_loc_descr (DW_OP_plus, 0, 0));
11968 	    }
11969 	}
11970       break;
11971 
11972     /* If a pseudo-reg is optimized away, it is possible for it to
11973        be replaced with a MEM containing a multiply or shift.  */
11974     case MINUS:
11975       op = DW_OP_minus;
11976       goto do_binop;
11977 
11978     case MULT:
11979       op = DW_OP_mul;
11980       goto do_binop;
11981 
11982     case DIV:
11983       if (!dwarf_strict
11984 	  && GET_MODE_CLASS (mode) == MODE_INT
11985 	  && GET_MODE_SIZE (mode) > DWARF2_ADDR_SIZE)
11986 	{
11987 	  mem_loc_result = typed_binop (DW_OP_div, rtl,
11988 					base_type_for_mode (mode, 0),
11989 					mode, mem_mode);
11990 	  break;
11991 	}
11992       op = DW_OP_div;
11993       goto do_binop;
11994 
11995     case UMOD:
11996       op = DW_OP_mod;
11997       goto do_binop;
11998 
11999     case ASHIFT:
12000       op = DW_OP_shl;
12001       goto do_shift;
12002 
12003     case ASHIFTRT:
12004       op = DW_OP_shra;
12005       goto do_shift;
12006 
12007     case LSHIFTRT:
12008       op = DW_OP_shr;
12009       goto do_shift;
12010 
12011     do_shift:
12012       if (GET_MODE_CLASS (mode) != MODE_INT)
12013 	break;
12014       op0 = mem_loc_descriptor (XEXP (rtl, 0), mode, mem_mode,
12015 				VAR_INIT_STATUS_INITIALIZED);
12016       {
12017 	rtx rtlop1 = XEXP (rtl, 1);
12018 	if (GET_MODE (rtlop1) != VOIDmode
12019 	    && GET_MODE_BITSIZE (GET_MODE (rtlop1))
12020 	       < GET_MODE_BITSIZE (mode))
12021 	  rtlop1 = gen_rtx_ZERO_EXTEND (mode, rtlop1);
12022 	op1 = mem_loc_descriptor (rtlop1, mode, mem_mode,
12023 				  VAR_INIT_STATUS_INITIALIZED);
12024       }
12025 
12026       if (op0 == 0 || op1 == 0)
12027 	break;
12028 
12029       mem_loc_result = op0;
12030       add_loc_descr (&mem_loc_result, op1);
12031       add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0));
12032       break;
12033 
12034     case AND:
12035       op = DW_OP_and;
12036       goto do_binop;
12037 
12038     case IOR:
12039       op = DW_OP_or;
12040       goto do_binop;
12041 
12042     case XOR:
12043       op = DW_OP_xor;
12044       goto do_binop;
12045 
12046     do_binop:
12047       op0 = mem_loc_descriptor (XEXP (rtl, 0), mode, mem_mode,
12048 				VAR_INIT_STATUS_INITIALIZED);
12049       op1 = mem_loc_descriptor (XEXP (rtl, 1), mode, mem_mode,
12050 				VAR_INIT_STATUS_INITIALIZED);
12051 
12052       if (op0 == 0 || op1 == 0)
12053 	break;
12054 
12055       mem_loc_result = op0;
12056       add_loc_descr (&mem_loc_result, op1);
12057       add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0));
12058       break;
12059 
12060     case MOD:
12061       if (GET_MODE_SIZE (mode) > DWARF2_ADDR_SIZE && !dwarf_strict)
12062 	{
12063 	  mem_loc_result = typed_binop (DW_OP_mod, rtl,
12064 					base_type_for_mode (mode, 0),
12065 					mode, mem_mode);
12066 	  break;
12067 	}
12068 
12069       op0 = mem_loc_descriptor (XEXP (rtl, 0), mode, mem_mode,
12070 				VAR_INIT_STATUS_INITIALIZED);
12071       op1 = mem_loc_descriptor (XEXP (rtl, 1), mode, mem_mode,
12072 				VAR_INIT_STATUS_INITIALIZED);
12073 
12074       if (op0 == 0 || op1 == 0)
12075 	break;
12076 
12077       mem_loc_result = op0;
12078       add_loc_descr (&mem_loc_result, op1);
12079       add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_over, 0, 0));
12080       add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_over, 0, 0));
12081       add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_div, 0, 0));
12082       add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_mul, 0, 0));
12083       add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_minus, 0, 0));
12084       break;
12085 
12086     case UDIV:
12087       if (!dwarf_strict && GET_MODE_CLASS (mode) == MODE_INT)
12088 	{
12089 	  if (GET_MODE_CLASS (mode) > DWARF2_ADDR_SIZE)
12090 	    {
12091 	      op = DW_OP_div;
12092 	      goto do_binop;
12093 	    }
12094 	  mem_loc_result = typed_binop (DW_OP_div, rtl,
12095 					base_type_for_mode (mode, 1),
12096 					mode, mem_mode);
12097 	}
12098       break;
12099 
12100     case NOT:
12101       op = DW_OP_not;
12102       goto do_unop;
12103 
12104     case ABS:
12105       op = DW_OP_abs;
12106       goto do_unop;
12107 
12108     case NEG:
12109       op = DW_OP_neg;
12110       goto do_unop;
12111 
12112     do_unop:
12113       op0 = mem_loc_descriptor (XEXP (rtl, 0), mode, mem_mode,
12114 				VAR_INIT_STATUS_INITIALIZED);
12115 
12116       if (op0 == 0)
12117 	break;
12118 
12119       mem_loc_result = op0;
12120       add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0));
12121       break;
12122 
12123     case CONST_INT:
12124       if (GET_MODE_SIZE (mode) <= DWARF2_ADDR_SIZE
12125 #ifdef POINTERS_EXTEND_UNSIGNED
12126 	  || (mode == Pmode
12127 	      && mem_mode != VOIDmode
12128 	      && trunc_int_for_mode (INTVAL (rtl), ptr_mode) == INTVAL (rtl))
12129 #endif
12130 	  )
12131 	{
12132 	  mem_loc_result = int_loc_descriptor (INTVAL (rtl));
12133 	  break;
12134 	}
12135       if (!dwarf_strict
12136 	  && (GET_MODE_BITSIZE (mode) == HOST_BITS_PER_WIDE_INT
12137 	      || GET_MODE_BITSIZE (mode) == 2 * HOST_BITS_PER_WIDE_INT))
12138 	{
12139 	  dw_die_ref type_die = base_type_for_mode (mode, 1);
12140 	  enum machine_mode amode;
12141 	  if (type_die == NULL)
12142 	    return NULL;
12143 	  amode = mode_for_size (DWARF2_ADDR_SIZE * BITS_PER_UNIT,
12144 				 MODE_INT, 0);
12145 	  if (INTVAL (rtl) >= 0
12146 	      && amode != BLKmode
12147 	      && trunc_int_for_mode (INTVAL (rtl), amode) == INTVAL (rtl)
12148 	      /* const DW_OP_GNU_convert <XXX> vs.
12149 		 DW_OP_GNU_const_type <XXX, 1, const>.  */
12150 	      && size_of_int_loc_descriptor (INTVAL (rtl)) + 1 + 1
12151 		 < (unsigned long) 1 + 1 + 1 + GET_MODE_SIZE (mode))
12152 	    {
12153 	      mem_loc_result = int_loc_descriptor (INTVAL (rtl));
12154 	      op0 = new_loc_descr (DW_OP_GNU_convert, 0, 0);
12155 	      op0->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
12156 	      op0->dw_loc_oprnd1.v.val_die_ref.die = type_die;
12157 	      op0->dw_loc_oprnd1.v.val_die_ref.external = 0;
12158 	      add_loc_descr (&mem_loc_result, op0);
12159 	      return mem_loc_result;
12160 	    }
12161 	  mem_loc_result = new_loc_descr (DW_OP_GNU_const_type, 0,
12162 					  INTVAL (rtl));
12163 	  mem_loc_result->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
12164 	  mem_loc_result->dw_loc_oprnd1.v.val_die_ref.die = type_die;
12165 	  mem_loc_result->dw_loc_oprnd1.v.val_die_ref.external = 0;
12166 	  if (GET_MODE_BITSIZE (mode) == HOST_BITS_PER_WIDE_INT)
12167 	    mem_loc_result->dw_loc_oprnd2.val_class = dw_val_class_const;
12168 	  else
12169 	    {
12170 	      mem_loc_result->dw_loc_oprnd2.val_class
12171 		= dw_val_class_const_double;
12172 	      mem_loc_result->dw_loc_oprnd2.v.val_double
12173 		= shwi_to_double_int (INTVAL (rtl));
12174 	    }
12175 	}
12176       break;
12177 
12178     case CONST_DOUBLE:
12179       if (!dwarf_strict)
12180 	{
12181 	  dw_die_ref type_die;
12182 
12183 	  /* Note that a CONST_DOUBLE rtx could represent either an integer
12184 	     or a floating-point constant.  A CONST_DOUBLE is used whenever
12185 	     the constant requires more than one word in order to be
12186 	     adequately represented.  We output CONST_DOUBLEs as blocks.  */
12187 	  if (mode == VOIDmode
12188 	      || (GET_MODE (rtl) == VOIDmode
12189 		  && GET_MODE_BITSIZE (mode) != 2 * HOST_BITS_PER_WIDE_INT))
12190 	    break;
12191 	  type_die = base_type_for_mode (mode,
12192 					 GET_MODE_CLASS (mode) == MODE_INT);
12193 	  if (type_die == NULL)
12194 	    return NULL;
12195 	  mem_loc_result = new_loc_descr (DW_OP_GNU_const_type, 0, 0);
12196 	  mem_loc_result->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
12197 	  mem_loc_result->dw_loc_oprnd1.v.val_die_ref.die = type_die;
12198 	  mem_loc_result->dw_loc_oprnd1.v.val_die_ref.external = 0;
12199 	  if (SCALAR_FLOAT_MODE_P (mode))
12200 	    {
12201 	      unsigned int length = GET_MODE_SIZE (mode);
12202 	      unsigned char *array
12203 		  = (unsigned char*) ggc_alloc_atomic (length);
12204 
12205 	      insert_float (rtl, array);
12206 	      mem_loc_result->dw_loc_oprnd2.val_class = dw_val_class_vec;
12207 	      mem_loc_result->dw_loc_oprnd2.v.val_vec.length = length / 4;
12208 	      mem_loc_result->dw_loc_oprnd2.v.val_vec.elt_size = 4;
12209 	      mem_loc_result->dw_loc_oprnd2.v.val_vec.array = array;
12210 	    }
12211 	  else
12212 	    {
12213 	      mem_loc_result->dw_loc_oprnd2.val_class
12214 		= dw_val_class_const_double;
12215 	      mem_loc_result->dw_loc_oprnd2.v.val_double
12216 		= rtx_to_double_int (rtl);
12217 	    }
12218 	}
12219       break;
12220 
12221     case EQ:
12222       mem_loc_result = scompare_loc_descriptor (DW_OP_eq, rtl, mem_mode);
12223       break;
12224 
12225     case GE:
12226       mem_loc_result = scompare_loc_descriptor (DW_OP_ge, rtl, mem_mode);
12227       break;
12228 
12229     case GT:
12230       mem_loc_result = scompare_loc_descriptor (DW_OP_gt, rtl, mem_mode);
12231       break;
12232 
12233     case LE:
12234       mem_loc_result = scompare_loc_descriptor (DW_OP_le, rtl, mem_mode);
12235       break;
12236 
12237     case LT:
12238       mem_loc_result = scompare_loc_descriptor (DW_OP_lt, rtl, mem_mode);
12239       break;
12240 
12241     case NE:
12242       mem_loc_result = scompare_loc_descriptor (DW_OP_ne, rtl, mem_mode);
12243       break;
12244 
12245     case GEU:
12246       mem_loc_result = ucompare_loc_descriptor (DW_OP_ge, rtl, mem_mode);
12247       break;
12248 
12249     case GTU:
12250       mem_loc_result = ucompare_loc_descriptor (DW_OP_gt, rtl, mem_mode);
12251       break;
12252 
12253     case LEU:
12254       mem_loc_result = ucompare_loc_descriptor (DW_OP_le, rtl, mem_mode);
12255       break;
12256 
12257     case LTU:
12258       mem_loc_result = ucompare_loc_descriptor (DW_OP_lt, rtl, mem_mode);
12259       break;
12260 
12261     case UMIN:
12262     case UMAX:
12263       if (GET_MODE_CLASS (mode) != MODE_INT)
12264 	break;
12265       /* FALLTHRU */
12266     case SMIN:
12267     case SMAX:
12268       mem_loc_result = minmax_loc_descriptor (rtl, mode, mem_mode);
12269       break;
12270 
12271     case ZERO_EXTRACT:
12272     case SIGN_EXTRACT:
12273       if (CONST_INT_P (XEXP (rtl, 1))
12274 	  && CONST_INT_P (XEXP (rtl, 2))
12275 	  && ((unsigned) INTVAL (XEXP (rtl, 1))
12276 	      + (unsigned) INTVAL (XEXP (rtl, 2))
12277 	      <= GET_MODE_BITSIZE (mode))
12278 	  && GET_MODE_CLASS (mode) == MODE_INT
12279 	  && GET_MODE_SIZE (mode) <= DWARF2_ADDR_SIZE
12280 	  && GET_MODE_SIZE (GET_MODE (XEXP (rtl, 0))) <= DWARF2_ADDR_SIZE)
12281 	{
12282 	  int shift, size;
12283 	  op0 = mem_loc_descriptor (XEXP (rtl, 0), GET_MODE (XEXP (rtl, 0)),
12284 				    mem_mode, VAR_INIT_STATUS_INITIALIZED);
12285 	  if (op0 == 0)
12286 	    break;
12287 	  if (GET_CODE (rtl) == SIGN_EXTRACT)
12288 	    op = DW_OP_shra;
12289 	  else
12290 	    op = DW_OP_shr;
12291 	  mem_loc_result = op0;
12292 	  size = INTVAL (XEXP (rtl, 1));
12293 	  shift = INTVAL (XEXP (rtl, 2));
12294 	  if (BITS_BIG_ENDIAN)
12295 	    shift = GET_MODE_BITSIZE (GET_MODE (XEXP (rtl, 0)))
12296 		    - shift - size;
12297 	  if (shift + size != (int) DWARF2_ADDR_SIZE)
12298 	    {
12299 	      add_loc_descr (&mem_loc_result,
12300 			     int_loc_descriptor (DWARF2_ADDR_SIZE
12301 						 - shift - size));
12302 	      add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_shl, 0, 0));
12303 	    }
12304 	  if (size != (int) DWARF2_ADDR_SIZE)
12305 	    {
12306 	      add_loc_descr (&mem_loc_result,
12307 			     int_loc_descriptor (DWARF2_ADDR_SIZE - size));
12308 	      add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0));
12309 	    }
12310 	}
12311       break;
12312 
12313     case IF_THEN_ELSE:
12314       {
12315 	dw_loc_descr_ref op2, bra_node, drop_node;
12316 	op0 = mem_loc_descriptor (XEXP (rtl, 0),
12317 				  GET_MODE (XEXP (rtl, 0)) == VOIDmode
12318 				  ? word_mode : GET_MODE (XEXP (rtl, 0)),
12319 				  mem_mode, VAR_INIT_STATUS_INITIALIZED);
12320 	op1 = mem_loc_descriptor (XEXP (rtl, 1), mode, mem_mode,
12321 				  VAR_INIT_STATUS_INITIALIZED);
12322 	op2 = mem_loc_descriptor (XEXP (rtl, 2), mode, mem_mode,
12323 				  VAR_INIT_STATUS_INITIALIZED);
12324 	if (op0 == NULL || op1 == NULL || op2 == NULL)
12325 	  break;
12326 
12327 	mem_loc_result = op1;
12328 	add_loc_descr (&mem_loc_result, op2);
12329 	add_loc_descr (&mem_loc_result, op0);
12330 	bra_node = new_loc_descr (DW_OP_bra, 0, 0);
12331 	add_loc_descr (&mem_loc_result, bra_node);
12332 	add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_swap, 0, 0));
12333 	drop_node = new_loc_descr (DW_OP_drop, 0, 0);
12334 	add_loc_descr (&mem_loc_result, drop_node);
12335 	bra_node->dw_loc_oprnd1.val_class = dw_val_class_loc;
12336 	bra_node->dw_loc_oprnd1.v.val_loc = drop_node;
12337       }
12338       break;
12339 
12340     case FLOAT_EXTEND:
12341     case FLOAT_TRUNCATE:
12342     case FLOAT:
12343     case UNSIGNED_FLOAT:
12344     case FIX:
12345     case UNSIGNED_FIX:
12346       if (!dwarf_strict)
12347 	{
12348 	  dw_die_ref type_die;
12349 	  dw_loc_descr_ref cvt;
12350 
12351 	  op0 = mem_loc_descriptor (XEXP (rtl, 0), GET_MODE (XEXP (rtl, 0)),
12352 				    mem_mode, VAR_INIT_STATUS_INITIALIZED);
12353 	  if (op0 == NULL)
12354 	    break;
12355 	  if (GET_MODE_CLASS (GET_MODE (XEXP (rtl, 0))) == MODE_INT
12356 	      && (GET_CODE (rtl) == FLOAT
12357 		  || GET_MODE_SIZE (GET_MODE (XEXP (rtl, 0)))
12358 		     <= DWARF2_ADDR_SIZE))
12359 	    {
12360 	      type_die = base_type_for_mode (GET_MODE (XEXP (rtl, 0)),
12361 					     GET_CODE (rtl) == UNSIGNED_FLOAT);
12362 	      if (type_die == NULL)
12363 		break;
12364 	      cvt = new_loc_descr (DW_OP_GNU_convert, 0, 0);
12365 	      cvt->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
12366 	      cvt->dw_loc_oprnd1.v.val_die_ref.die = type_die;
12367 	      cvt->dw_loc_oprnd1.v.val_die_ref.external = 0;
12368 	      add_loc_descr (&op0, cvt);
12369 	    }
12370 	  type_die = base_type_for_mode (mode, GET_CODE (rtl) == UNSIGNED_FIX);
12371 	  if (type_die == NULL)
12372 	    break;
12373 	  cvt = new_loc_descr (DW_OP_GNU_convert, 0, 0);
12374 	  cvt->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
12375 	  cvt->dw_loc_oprnd1.v.val_die_ref.die = type_die;
12376 	  cvt->dw_loc_oprnd1.v.val_die_ref.external = 0;
12377 	  add_loc_descr (&op0, cvt);
12378 	  if (GET_MODE_CLASS (mode) == MODE_INT
12379 	      && (GET_CODE (rtl) == FIX
12380 		  || GET_MODE_SIZE (mode) < DWARF2_ADDR_SIZE))
12381 	    {
12382 	      op0 = convert_descriptor_to_mode (mode, op0);
12383 	      if (op0 == NULL)
12384 		break;
12385 	    }
12386 	  mem_loc_result = op0;
12387 	}
12388       break;
12389 
12390     case CLZ:
12391     case CTZ:
12392     case FFS:
12393       mem_loc_result = clz_loc_descriptor (rtl, mode, mem_mode);
12394       break;
12395 
12396     case POPCOUNT:
12397     case PARITY:
12398       mem_loc_result = popcount_loc_descriptor (rtl, mode, mem_mode);
12399       break;
12400 
12401     case BSWAP:
12402       mem_loc_result = bswap_loc_descriptor (rtl, mode, mem_mode);
12403       break;
12404 
12405     case ROTATE:
12406     case ROTATERT:
12407       mem_loc_result = rotate_loc_descriptor (rtl, mode, mem_mode);
12408       break;
12409 
12410     case COMPARE:
12411     case TRUNCATE:
12412       /* In theory, we could implement the above.  */
12413       /* DWARF cannot represent the unsigned compare operations
12414 	 natively.  */
12415     case SS_MULT:
12416     case US_MULT:
12417     case SS_DIV:
12418     case US_DIV:
12419     case SS_PLUS:
12420     case US_PLUS:
12421     case SS_MINUS:
12422     case US_MINUS:
12423     case SS_NEG:
12424     case US_NEG:
12425     case SS_ABS:
12426     case SS_ASHIFT:
12427     case US_ASHIFT:
12428     case SS_TRUNCATE:
12429     case US_TRUNCATE:
12430     case UNORDERED:
12431     case ORDERED:
12432     case UNEQ:
12433     case UNGE:
12434     case UNGT:
12435     case UNLE:
12436     case UNLT:
12437     case LTGT:
12438     case FRACT_CONVERT:
12439     case UNSIGNED_FRACT_CONVERT:
12440     case SAT_FRACT:
12441     case UNSIGNED_SAT_FRACT:
12442     case SQRT:
12443     case ASM_OPERANDS:
12444     case VEC_MERGE:
12445     case VEC_SELECT:
12446     case VEC_CONCAT:
12447     case VEC_DUPLICATE:
12448     case UNSPEC:
12449     case HIGH:
12450     case FMA:
12451     case STRICT_LOW_PART:
12452     case CONST_VECTOR:
12453     case CONST_FIXED:
12454     case CLRSB:
12455       /* If delegitimize_address couldn't do anything with the UNSPEC, we
12456 	 can't express it in the debug info.  This can happen e.g. with some
12457 	 TLS UNSPECs.  */
12458       break;
12459 
12460     case CONST_STRING:
12461       resolve_one_addr (&rtl, NULL);
12462       goto symref;
12463 
12464     default:
12465 #ifdef ENABLE_CHECKING
12466       print_rtl (stderr, rtl);
12467       gcc_unreachable ();
12468 #else
12469       break;
12470 #endif
12471     }
12472 
12473   if (mem_loc_result && initialized == VAR_INIT_STATUS_UNINITIALIZED)
12474     add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
12475 
12476   return mem_loc_result;
12477 }
12478 
12479 /* Return a descriptor that describes the concatenation of two locations.
12480    This is typically a complex variable.  */
12481 
12482 static dw_loc_descr_ref
12483 concat_loc_descriptor (rtx x0, rtx x1, enum var_init_status initialized)
12484 {
12485   dw_loc_descr_ref cc_loc_result = NULL;
12486   dw_loc_descr_ref x0_ref
12487     = loc_descriptor (x0, VOIDmode, VAR_INIT_STATUS_INITIALIZED);
12488   dw_loc_descr_ref x1_ref
12489     = loc_descriptor (x1, VOIDmode, VAR_INIT_STATUS_INITIALIZED);
12490 
12491   if (x0_ref == 0 || x1_ref == 0)
12492     return 0;
12493 
12494   cc_loc_result = x0_ref;
12495   add_loc_descr_op_piece (&cc_loc_result, GET_MODE_SIZE (GET_MODE (x0)));
12496 
12497   add_loc_descr (&cc_loc_result, x1_ref);
12498   add_loc_descr_op_piece (&cc_loc_result, GET_MODE_SIZE (GET_MODE (x1)));
12499 
12500   if (initialized == VAR_INIT_STATUS_UNINITIALIZED)
12501     add_loc_descr (&cc_loc_result, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
12502 
12503   return cc_loc_result;
12504 }
12505 
12506 /* Return a descriptor that describes the concatenation of N
12507    locations.  */
12508 
12509 static dw_loc_descr_ref
12510 concatn_loc_descriptor (rtx concatn, enum var_init_status initialized)
12511 {
12512   unsigned int i;
12513   dw_loc_descr_ref cc_loc_result = NULL;
12514   unsigned int n = XVECLEN (concatn, 0);
12515 
12516   for (i = 0; i < n; ++i)
12517     {
12518       dw_loc_descr_ref ref;
12519       rtx x = XVECEXP (concatn, 0, i);
12520 
12521       ref = loc_descriptor (x, VOIDmode, VAR_INIT_STATUS_INITIALIZED);
12522       if (ref == NULL)
12523 	return NULL;
12524 
12525       add_loc_descr (&cc_loc_result, ref);
12526       add_loc_descr_op_piece (&cc_loc_result, GET_MODE_SIZE (GET_MODE (x)));
12527     }
12528 
12529   if (cc_loc_result && initialized == VAR_INIT_STATUS_UNINITIALIZED)
12530     add_loc_descr (&cc_loc_result, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
12531 
12532   return cc_loc_result;
12533 }
12534 
12535 /* Helper function for loc_descriptor.  Return DW_OP_GNU_implicit_pointer
12536    for DEBUG_IMPLICIT_PTR RTL.  */
12537 
12538 static dw_loc_descr_ref
12539 implicit_ptr_descriptor (rtx rtl, HOST_WIDE_INT offset)
12540 {
12541   dw_loc_descr_ref ret;
12542   dw_die_ref ref;
12543 
12544   if (dwarf_strict)
12545     return NULL;
12546   gcc_assert (TREE_CODE (DEBUG_IMPLICIT_PTR_DECL (rtl)) == VAR_DECL
12547 	      || TREE_CODE (DEBUG_IMPLICIT_PTR_DECL (rtl)) == PARM_DECL
12548 	      || TREE_CODE (DEBUG_IMPLICIT_PTR_DECL (rtl)) == RESULT_DECL);
12549   ref = lookup_decl_die (DEBUG_IMPLICIT_PTR_DECL (rtl));
12550   ret = new_loc_descr (DW_OP_GNU_implicit_pointer, 0, offset);
12551   ret->dw_loc_oprnd2.val_class = dw_val_class_const;
12552   if (ref)
12553     {
12554       ret->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
12555       ret->dw_loc_oprnd1.v.val_die_ref.die = ref;
12556       ret->dw_loc_oprnd1.v.val_die_ref.external = 0;
12557     }
12558   else
12559     {
12560       ret->dw_loc_oprnd1.val_class = dw_val_class_decl_ref;
12561       ret->dw_loc_oprnd1.v.val_decl_ref = DEBUG_IMPLICIT_PTR_DECL (rtl);
12562     }
12563   return ret;
12564 }
12565 
12566 /* Output a proper Dwarf location descriptor for a variable or parameter
12567    which is either allocated in a register or in a memory location.  For a
12568    register, we just generate an OP_REG and the register number.  For a
12569    memory location we provide a Dwarf postfix expression describing how to
12570    generate the (dynamic) address of the object onto the address stack.
12571 
12572    MODE is mode of the decl if this loc_descriptor is going to be used in
12573    .debug_loc section where DW_OP_stack_value and DW_OP_implicit_value are
12574    allowed, VOIDmode otherwise.
12575 
12576    If we don't know how to describe it, return 0.  */
12577 
12578 static dw_loc_descr_ref
12579 loc_descriptor (rtx rtl, enum machine_mode mode,
12580 		enum var_init_status initialized)
12581 {
12582   dw_loc_descr_ref loc_result = NULL;
12583 
12584   switch (GET_CODE (rtl))
12585     {
12586     case SUBREG:
12587       /* The case of a subreg may arise when we have a local (register)
12588 	 variable or a formal (register) parameter which doesn't quite fill
12589 	 up an entire register.  For now, just assume that it is
12590 	 legitimate to make the Dwarf info refer to the whole register which
12591 	 contains the given subreg.  */
12592       if (REG_P (SUBREG_REG (rtl)) && subreg_lowpart_p (rtl))
12593 	loc_result = loc_descriptor (SUBREG_REG (rtl),
12594 				     GET_MODE (SUBREG_REG (rtl)), initialized);
12595       else
12596 	goto do_default;
12597       break;
12598 
12599     case REG:
12600       loc_result = reg_loc_descriptor (rtl, initialized);
12601       break;
12602 
12603     case MEM:
12604       loc_result = mem_loc_descriptor (XEXP (rtl, 0), get_address_mode (rtl),
12605 				       GET_MODE (rtl), initialized);
12606       if (loc_result == NULL)
12607 	loc_result = tls_mem_loc_descriptor (rtl);
12608       if (loc_result == NULL)
12609 	{
12610 	  rtx new_rtl = avoid_constant_pool_reference (rtl);
12611 	  if (new_rtl != rtl)
12612 	    loc_result = loc_descriptor (new_rtl, mode, initialized);
12613 	}
12614       break;
12615 
12616     case CONCAT:
12617       loc_result = concat_loc_descriptor (XEXP (rtl, 0), XEXP (rtl, 1),
12618 					  initialized);
12619       break;
12620 
12621     case CONCATN:
12622       loc_result = concatn_loc_descriptor (rtl, initialized);
12623       break;
12624 
12625     case VAR_LOCATION:
12626       /* Single part.  */
12627       if (GET_CODE (PAT_VAR_LOCATION_LOC (rtl)) != PARALLEL)
12628 	{
12629 	  rtx loc = PAT_VAR_LOCATION_LOC (rtl);
12630 	  if (GET_CODE (loc) == EXPR_LIST)
12631 	    loc = XEXP (loc, 0);
12632 	  loc_result = loc_descriptor (loc, mode, initialized);
12633 	  break;
12634 	}
12635 
12636       rtl = XEXP (rtl, 1);
12637       /* FALLTHRU */
12638 
12639     case PARALLEL:
12640       {
12641 	rtvec par_elems = XVEC (rtl, 0);
12642 	int num_elem = GET_NUM_ELEM (par_elems);
12643 	enum machine_mode mode;
12644 	int i;
12645 
12646 	/* Create the first one, so we have something to add to.  */
12647 	loc_result = loc_descriptor (XEXP (RTVEC_ELT (par_elems, 0), 0),
12648 				     VOIDmode, initialized);
12649 	if (loc_result == NULL)
12650 	  return NULL;
12651 	mode = GET_MODE (XEXP (RTVEC_ELT (par_elems, 0), 0));
12652 	add_loc_descr_op_piece (&loc_result, GET_MODE_SIZE (mode));
12653 	for (i = 1; i < num_elem; i++)
12654 	  {
12655 	    dw_loc_descr_ref temp;
12656 
12657 	    temp = loc_descriptor (XEXP (RTVEC_ELT (par_elems, i), 0),
12658 				   VOIDmode, initialized);
12659 	    if (temp == NULL)
12660 	      return NULL;
12661 	    add_loc_descr (&loc_result, temp);
12662 	    mode = GET_MODE (XEXP (RTVEC_ELT (par_elems, i), 0));
12663 	    add_loc_descr_op_piece (&loc_result, GET_MODE_SIZE (mode));
12664 	  }
12665       }
12666       break;
12667 
12668     case CONST_INT:
12669       if (mode != VOIDmode && mode != BLKmode)
12670 	loc_result = address_of_int_loc_descriptor (GET_MODE_SIZE (mode),
12671 						    INTVAL (rtl));
12672       break;
12673 
12674     case CONST_DOUBLE:
12675       if (mode == VOIDmode)
12676 	mode = GET_MODE (rtl);
12677 
12678       if (mode != VOIDmode && (dwarf_version >= 4 || !dwarf_strict))
12679 	{
12680 	  gcc_assert (mode == GET_MODE (rtl) || VOIDmode == GET_MODE (rtl));
12681 
12682 	  /* Note that a CONST_DOUBLE rtx could represent either an integer
12683 	     or a floating-point constant.  A CONST_DOUBLE is used whenever
12684 	     the constant requires more than one word in order to be
12685 	     adequately represented.  We output CONST_DOUBLEs as blocks.  */
12686 	  loc_result = new_loc_descr (DW_OP_implicit_value,
12687 				      GET_MODE_SIZE (mode), 0);
12688 	  if (SCALAR_FLOAT_MODE_P (mode))
12689 	    {
12690 	      unsigned int length = GET_MODE_SIZE (mode);
12691 	      unsigned char *array
12692                   = (unsigned char*) ggc_alloc_atomic (length);
12693 
12694 	      insert_float (rtl, array);
12695 	      loc_result->dw_loc_oprnd2.val_class = dw_val_class_vec;
12696 	      loc_result->dw_loc_oprnd2.v.val_vec.length = length / 4;
12697 	      loc_result->dw_loc_oprnd2.v.val_vec.elt_size = 4;
12698 	      loc_result->dw_loc_oprnd2.v.val_vec.array = array;
12699 	    }
12700 	  else
12701 	    {
12702 	      loc_result->dw_loc_oprnd2.val_class = dw_val_class_const_double;
12703 	      loc_result->dw_loc_oprnd2.v.val_double
12704 	        = rtx_to_double_int (rtl);
12705 	    }
12706 	}
12707       break;
12708 
12709     case CONST_VECTOR:
12710       if (mode == VOIDmode)
12711 	mode = GET_MODE (rtl);
12712 
12713       if (mode != VOIDmode && (dwarf_version >= 4 || !dwarf_strict))
12714 	{
12715 	  unsigned int elt_size = GET_MODE_UNIT_SIZE (GET_MODE (rtl));
12716 	  unsigned int length = CONST_VECTOR_NUNITS (rtl);
12717 	  unsigned char *array = (unsigned char *)
12718 	    ggc_alloc_atomic (length * elt_size);
12719 	  unsigned int i;
12720 	  unsigned char *p;
12721 
12722 	  gcc_assert (mode == GET_MODE (rtl) || VOIDmode == GET_MODE (rtl));
12723 	  switch (GET_MODE_CLASS (mode))
12724 	    {
12725 	    case MODE_VECTOR_INT:
12726 	      for (i = 0, p = array; i < length; i++, p += elt_size)
12727 		{
12728 		  rtx elt = CONST_VECTOR_ELT (rtl, i);
12729 		  double_int val = rtx_to_double_int (elt);
12730 
12731 		  if (elt_size <= sizeof (HOST_WIDE_INT))
12732 		    insert_int (double_int_to_shwi (val), elt_size, p);
12733 		  else
12734 		    {
12735 		      gcc_assert (elt_size == 2 * sizeof (HOST_WIDE_INT));
12736 		      insert_double (val, p);
12737 		    }
12738 		}
12739 	      break;
12740 
12741 	    case MODE_VECTOR_FLOAT:
12742 	      for (i = 0, p = array; i < length; i++, p += elt_size)
12743 		{
12744 		  rtx elt = CONST_VECTOR_ELT (rtl, i);
12745 		  insert_float (elt, p);
12746 		}
12747 	      break;
12748 
12749 	    default:
12750 	      gcc_unreachable ();
12751 	    }
12752 
12753 	  loc_result = new_loc_descr (DW_OP_implicit_value,
12754 				      length * elt_size, 0);
12755 	  loc_result->dw_loc_oprnd2.val_class = dw_val_class_vec;
12756 	  loc_result->dw_loc_oprnd2.v.val_vec.length = length;
12757 	  loc_result->dw_loc_oprnd2.v.val_vec.elt_size = elt_size;
12758 	  loc_result->dw_loc_oprnd2.v.val_vec.array = array;
12759 	}
12760       break;
12761 
12762     case CONST:
12763       if (mode == VOIDmode
12764 	  || GET_CODE (XEXP (rtl, 0)) == CONST_INT
12765 	  || GET_CODE (XEXP (rtl, 0)) == CONST_DOUBLE
12766 	  || GET_CODE (XEXP (rtl, 0)) == CONST_VECTOR)
12767 	{
12768 	  loc_result = loc_descriptor (XEXP (rtl, 0), mode, initialized);
12769 	  break;
12770 	}
12771       /* FALLTHROUGH */
12772     case SYMBOL_REF:
12773       if (!const_ok_for_output (rtl))
12774 	break;
12775     case LABEL_REF:
12776       if (mode != VOIDmode && GET_MODE_SIZE (mode) == DWARF2_ADDR_SIZE
12777 	  && (dwarf_version >= 4 || !dwarf_strict))
12778 	{
12779 	  loc_result = new_loc_descr (DW_OP_addr, 0, 0);
12780 	  loc_result->dw_loc_oprnd1.val_class = dw_val_class_addr;
12781 	  loc_result->dw_loc_oprnd1.v.val_addr = rtl;
12782 	  add_loc_descr (&loc_result, new_loc_descr (DW_OP_stack_value, 0, 0));
12783 	  VEC_safe_push (rtx, gc, used_rtx_array, rtl);
12784 	}
12785       break;
12786 
12787     case DEBUG_IMPLICIT_PTR:
12788       loc_result = implicit_ptr_descriptor (rtl, 0);
12789       break;
12790 
12791     case PLUS:
12792       if (GET_CODE (XEXP (rtl, 0)) == DEBUG_IMPLICIT_PTR
12793 	  && CONST_INT_P (XEXP (rtl, 1)))
12794 	{
12795 	  loc_result
12796 	    = implicit_ptr_descriptor (XEXP (rtl, 0), INTVAL (XEXP (rtl, 1)));
12797 	  break;
12798 	}
12799       /* FALLTHRU */
12800     do_default:
12801     default:
12802       if ((GET_MODE_CLASS (mode) == MODE_INT && GET_MODE (rtl) == mode
12803 	   && GET_MODE_SIZE (GET_MODE (rtl)) <= DWARF2_ADDR_SIZE
12804 	   && dwarf_version >= 4)
12805 	  || (!dwarf_strict && mode != VOIDmode && mode != BLKmode))
12806 	{
12807 	  /* Value expression.  */
12808 	  loc_result = mem_loc_descriptor (rtl, mode, VOIDmode, initialized);
12809 	  if (loc_result)
12810 	    add_loc_descr (&loc_result,
12811 			   new_loc_descr (DW_OP_stack_value, 0, 0));
12812 	}
12813       break;
12814     }
12815 
12816   return loc_result;
12817 }
12818 
12819 /* We need to figure out what section we should use as the base for the
12820    address ranges where a given location is valid.
12821    1. If this particular DECL has a section associated with it, use that.
12822    2. If this function has a section associated with it, use that.
12823    3. Otherwise, use the text section.
12824    XXX: If you split a variable across multiple sections, we won't notice.  */
12825 
12826 static const char *
12827 secname_for_decl (const_tree decl)
12828 {
12829   const char *secname;
12830 
12831   if (VAR_OR_FUNCTION_DECL_P (decl) && DECL_SECTION_NAME (decl))
12832     {
12833       tree sectree = DECL_SECTION_NAME (decl);
12834       secname = TREE_STRING_POINTER (sectree);
12835     }
12836   else if (current_function_decl && DECL_SECTION_NAME (current_function_decl))
12837     {
12838       tree sectree = DECL_SECTION_NAME (current_function_decl);
12839       secname = TREE_STRING_POINTER (sectree);
12840     }
12841   else if (cfun && in_cold_section_p)
12842     secname = crtl->subsections.cold_section_label;
12843   else
12844     secname = text_section_label;
12845 
12846   return secname;
12847 }
12848 
12849 /* Return true when DECL_BY_REFERENCE is defined and set for DECL.  */
12850 
12851 static bool
12852 decl_by_reference_p (tree decl)
12853 {
12854   return ((TREE_CODE (decl) == PARM_DECL || TREE_CODE (decl) == RESULT_DECL
12855   	   || TREE_CODE (decl) == VAR_DECL)
12856 	  && DECL_BY_REFERENCE (decl));
12857 }
12858 
12859 /* Helper function for dw_loc_list.  Compute proper Dwarf location descriptor
12860    for VARLOC.  */
12861 
12862 static dw_loc_descr_ref
12863 dw_loc_list_1 (tree loc, rtx varloc, int want_address,
12864 	       enum var_init_status initialized)
12865 {
12866   int have_address = 0;
12867   dw_loc_descr_ref descr;
12868   enum machine_mode mode;
12869 
12870   if (want_address != 2)
12871     {
12872       gcc_assert (GET_CODE (varloc) == VAR_LOCATION);
12873       /* Single part.  */
12874       if (GET_CODE (PAT_VAR_LOCATION_LOC (varloc)) != PARALLEL)
12875 	{
12876 	  varloc = PAT_VAR_LOCATION_LOC (varloc);
12877 	  if (GET_CODE (varloc) == EXPR_LIST)
12878 	    varloc = XEXP (varloc, 0);
12879 	  mode = GET_MODE (varloc);
12880 	  if (MEM_P (varloc))
12881 	    {
12882 	      rtx addr = XEXP (varloc, 0);
12883 	      descr = mem_loc_descriptor (addr, get_address_mode (varloc),
12884 					  mode, initialized);
12885 	      if (descr)
12886 		have_address = 1;
12887 	      else
12888 		{
12889 		  rtx x = avoid_constant_pool_reference (varloc);
12890 		  if (x != varloc)
12891 		    descr = mem_loc_descriptor (x, mode, VOIDmode,
12892 						initialized);
12893 		}
12894 	    }
12895 	  else
12896 	    descr = mem_loc_descriptor (varloc, mode, VOIDmode, initialized);
12897 	}
12898       else
12899 	return 0;
12900     }
12901   else
12902     {
12903       if (GET_CODE (varloc) == VAR_LOCATION)
12904 	mode = DECL_MODE (PAT_VAR_LOCATION_DECL (varloc));
12905       else
12906 	mode = DECL_MODE (loc);
12907       descr = loc_descriptor (varloc, mode, initialized);
12908       have_address = 1;
12909     }
12910 
12911   if (!descr)
12912     return 0;
12913 
12914   if (want_address == 2 && !have_address
12915       && (dwarf_version >= 4 || !dwarf_strict))
12916     {
12917       if (int_size_in_bytes (TREE_TYPE (loc)) > DWARF2_ADDR_SIZE)
12918 	{
12919 	  expansion_failed (loc, NULL_RTX,
12920 			    "DWARF address size mismatch");
12921 	  return 0;
12922 	}
12923       add_loc_descr (&descr, new_loc_descr (DW_OP_stack_value, 0, 0));
12924       have_address = 1;
12925     }
12926   /* Show if we can't fill the request for an address.  */
12927   if (want_address && !have_address)
12928     {
12929       expansion_failed (loc, NULL_RTX,
12930 			"Want address and only have value");
12931       return 0;
12932     }
12933 
12934   /* If we've got an address and don't want one, dereference.  */
12935   if (!want_address && have_address)
12936     {
12937       HOST_WIDE_INT size = int_size_in_bytes (TREE_TYPE (loc));
12938       enum dwarf_location_atom op;
12939 
12940       if (size > DWARF2_ADDR_SIZE || size == -1)
12941 	{
12942 	  expansion_failed (loc, NULL_RTX,
12943 			    "DWARF address size mismatch");
12944 	  return 0;
12945 	}
12946       else if (size == DWARF2_ADDR_SIZE)
12947 	op = DW_OP_deref;
12948       else
12949 	op = DW_OP_deref_size;
12950 
12951       add_loc_descr (&descr, new_loc_descr (op, size, 0));
12952     }
12953 
12954   return descr;
12955 }
12956 
12957 /* Create a DW_OP_piece or DW_OP_bit_piece for bitsize, or return NULL
12958    if it is not possible.  */
12959 
12960 static dw_loc_descr_ref
12961 new_loc_descr_op_bit_piece (HOST_WIDE_INT bitsize, HOST_WIDE_INT offset)
12962 {
12963   if ((bitsize % BITS_PER_UNIT) == 0 && offset == 0)
12964     return new_loc_descr (DW_OP_piece, bitsize / BITS_PER_UNIT, 0);
12965   else if (dwarf_version >= 3 || !dwarf_strict)
12966     return new_loc_descr (DW_OP_bit_piece, bitsize, offset);
12967   else
12968     return NULL;
12969 }
12970 
12971 /* Helper function for dw_loc_list.  Compute proper Dwarf location descriptor
12972    for VAR_LOC_NOTE for variable DECL that has been optimized by SRA.  */
12973 
12974 static dw_loc_descr_ref
12975 dw_sra_loc_expr (tree decl, rtx loc)
12976 {
12977   rtx p;
12978   unsigned int padsize = 0;
12979   dw_loc_descr_ref descr, *descr_tail;
12980   unsigned HOST_WIDE_INT decl_size;
12981   rtx varloc;
12982   enum var_init_status initialized;
12983 
12984   if (DECL_SIZE (decl) == NULL
12985       || !host_integerp (DECL_SIZE (decl), 1))
12986     return NULL;
12987 
12988   decl_size = tree_low_cst (DECL_SIZE (decl), 1);
12989   descr = NULL;
12990   descr_tail = &descr;
12991 
12992   for (p = loc; p; p = XEXP (p, 1))
12993     {
12994       unsigned int bitsize = decl_piece_bitsize (p);
12995       rtx loc_note = *decl_piece_varloc_ptr (p);
12996       dw_loc_descr_ref cur_descr;
12997       dw_loc_descr_ref *tail, last = NULL;
12998       unsigned int opsize = 0;
12999 
13000       if (loc_note == NULL_RTX
13001 	  || NOTE_VAR_LOCATION_LOC (loc_note) == NULL_RTX)
13002 	{
13003 	  padsize += bitsize;
13004 	  continue;
13005 	}
13006       initialized = NOTE_VAR_LOCATION_STATUS (loc_note);
13007       varloc = NOTE_VAR_LOCATION (loc_note);
13008       cur_descr = dw_loc_list_1 (decl, varloc, 2, initialized);
13009       if (cur_descr == NULL)
13010 	{
13011 	  padsize += bitsize;
13012 	  continue;
13013 	}
13014 
13015       /* Check that cur_descr either doesn't use
13016 	 DW_OP_*piece operations, or their sum is equal
13017 	 to bitsize.  Otherwise we can't embed it.  */
13018       for (tail = &cur_descr; *tail != NULL;
13019 	   tail = &(*tail)->dw_loc_next)
13020 	if ((*tail)->dw_loc_opc == DW_OP_piece)
13021 	  {
13022 	    opsize += (*tail)->dw_loc_oprnd1.v.val_unsigned
13023 		      * BITS_PER_UNIT;
13024 	    last = *tail;
13025 	  }
13026 	else if ((*tail)->dw_loc_opc == DW_OP_bit_piece)
13027 	  {
13028 	    opsize += (*tail)->dw_loc_oprnd1.v.val_unsigned;
13029 	    last = *tail;
13030 	  }
13031 
13032       if (last != NULL && opsize != bitsize)
13033 	{
13034 	  padsize += bitsize;
13035 	  continue;
13036 	}
13037 
13038       /* If there is a hole, add DW_OP_*piece after empty DWARF
13039 	 expression, which means that those bits are optimized out.  */
13040       if (padsize)
13041 	{
13042 	  if (padsize > decl_size)
13043 	    return NULL;
13044 	  decl_size -= padsize;
13045 	  *descr_tail = new_loc_descr_op_bit_piece (padsize, 0);
13046 	  if (*descr_tail == NULL)
13047 	    return NULL;
13048 	  descr_tail = &(*descr_tail)->dw_loc_next;
13049 	  padsize = 0;
13050 	}
13051       *descr_tail = cur_descr;
13052       descr_tail = tail;
13053       if (bitsize > decl_size)
13054 	return NULL;
13055       decl_size -= bitsize;
13056       if (last == NULL)
13057 	{
13058 	  HOST_WIDE_INT offset = 0;
13059 	  if (GET_CODE (varloc) == VAR_LOCATION
13060 	      && GET_CODE (PAT_VAR_LOCATION_LOC (varloc)) != PARALLEL)
13061 	    {
13062 	      varloc = PAT_VAR_LOCATION_LOC (varloc);
13063 	      if (GET_CODE (varloc) == EXPR_LIST)
13064 		varloc = XEXP (varloc, 0);
13065 	    }
13066 	  do
13067 	    {
13068 	      if (GET_CODE (varloc) == CONST
13069 		  || GET_CODE (varloc) == SIGN_EXTEND
13070 		  || GET_CODE (varloc) == ZERO_EXTEND)
13071 		varloc = XEXP (varloc, 0);
13072 	      else if (GET_CODE (varloc) == SUBREG)
13073 		varloc = SUBREG_REG (varloc);
13074 	      else
13075 		break;
13076 	    }
13077 	  while (1);
13078 	  /* DW_OP_bit_size offset should be zero for register
13079 	     or implicit location descriptions and empty location
13080 	     descriptions, but for memory addresses needs big endian
13081 	     adjustment.  */
13082 	  if (MEM_P (varloc))
13083 	    {
13084 	      unsigned HOST_WIDE_INT memsize
13085 		= MEM_SIZE (varloc) * BITS_PER_UNIT;
13086 	      if (memsize != bitsize)
13087 		{
13088 		  if (BYTES_BIG_ENDIAN != WORDS_BIG_ENDIAN
13089 		      && (memsize > BITS_PER_WORD || bitsize > BITS_PER_WORD))
13090 		    return NULL;
13091 		  if (memsize < bitsize)
13092 		    return NULL;
13093 		  if (BITS_BIG_ENDIAN)
13094 		    offset = memsize - bitsize;
13095 		}
13096 	    }
13097 
13098 	  *descr_tail = new_loc_descr_op_bit_piece (bitsize, offset);
13099 	  if (*descr_tail == NULL)
13100 	    return NULL;
13101 	  descr_tail = &(*descr_tail)->dw_loc_next;
13102 	}
13103     }
13104 
13105   /* If there were any non-empty expressions, add padding till the end of
13106      the decl.  */
13107   if (descr != NULL && decl_size != 0)
13108     {
13109       *descr_tail = new_loc_descr_op_bit_piece (decl_size, 0);
13110       if (*descr_tail == NULL)
13111 	return NULL;
13112     }
13113   return descr;
13114 }
13115 
13116 /* Return the dwarf representation of the location list LOC_LIST of
13117    DECL.  WANT_ADDRESS has the same meaning as in loc_list_from_tree
13118    function.  */
13119 
13120 static dw_loc_list_ref
13121 dw_loc_list (var_loc_list *loc_list, tree decl, int want_address)
13122 {
13123   const char *endname, *secname;
13124   rtx varloc;
13125   enum var_init_status initialized;
13126   struct var_loc_node *node;
13127   dw_loc_descr_ref descr;
13128   char label_id[MAX_ARTIFICIAL_LABEL_BYTES];
13129   dw_loc_list_ref list = NULL;
13130   dw_loc_list_ref *listp = &list;
13131 
13132   /* Now that we know what section we are using for a base,
13133      actually construct the list of locations.
13134      The first location information is what is passed to the
13135      function that creates the location list, and the remaining
13136      locations just get added on to that list.
13137      Note that we only know the start address for a location
13138      (IE location changes), so to build the range, we use
13139      the range [current location start, next location start].
13140      This means we have to special case the last node, and generate
13141      a range of [last location start, end of function label].  */
13142 
13143   secname = secname_for_decl (decl);
13144 
13145   for (node = loc_list->first; node; node = node->next)
13146     if (GET_CODE (node->loc) == EXPR_LIST
13147 	|| NOTE_VAR_LOCATION_LOC (node->loc) != NULL_RTX)
13148       {
13149 	if (GET_CODE (node->loc) == EXPR_LIST)
13150 	  {
13151 	    /* This requires DW_OP_{,bit_}piece, which is not usable
13152 	       inside DWARF expressions.  */
13153 	    if (want_address != 2)
13154 	      continue;
13155 	    descr = dw_sra_loc_expr (decl, node->loc);
13156 	    if (descr == NULL)
13157 	      continue;
13158 	  }
13159 	else
13160 	  {
13161 	    initialized = NOTE_VAR_LOCATION_STATUS (node->loc);
13162 	    varloc = NOTE_VAR_LOCATION (node->loc);
13163 	    descr = dw_loc_list_1 (decl, varloc, want_address, initialized);
13164 	  }
13165 	if (descr)
13166 	  {
13167 	    bool range_across_switch = false;
13168 	    /* If section switch happens in between node->label
13169 	       and node->next->label (or end of function) and
13170 	       we can't emit it as a single entry list,
13171 	       emit two ranges, first one ending at the end
13172 	       of first partition and second one starting at the
13173 	       beginning of second partition.  */
13174 	    if (node == loc_list->last_before_switch
13175 		&& (node != loc_list->first || loc_list->first->next)
13176 		&& current_function_decl)
13177 	      {
13178 		endname = cfun->fde->dw_fde_end;
13179 		range_across_switch = true;
13180 	      }
13181 	    /* The variable has a location between NODE->LABEL and
13182 	       NODE->NEXT->LABEL.  */
13183 	    else if (node->next)
13184 	      endname = node->next->label;
13185 	    /* If the variable has a location at the last label
13186 	       it keeps its location until the end of function.  */
13187 	    else if (!current_function_decl)
13188 	      endname = text_end_label;
13189 	    else
13190 	      {
13191 		ASM_GENERATE_INTERNAL_LABEL (label_id, FUNC_END_LABEL,
13192 					     current_function_funcdef_no);
13193 		endname = ggc_strdup (label_id);
13194 	      }
13195 
13196 	    *listp = new_loc_list (descr, node->label, endname, secname);
13197 	    if (TREE_CODE (decl) == PARM_DECL
13198 		&& node == loc_list->first
13199 		&& GET_CODE (node->loc) == NOTE
13200 		&& strcmp (node->label, endname) == 0)
13201 	      (*listp)->force = true;
13202 	    listp = &(*listp)->dw_loc_next;
13203 
13204 	    if (range_across_switch)
13205 	      {
13206 		if (GET_CODE (node->loc) == EXPR_LIST)
13207 		  descr = dw_sra_loc_expr (decl, node->loc);
13208 		else
13209 		  {
13210 		    initialized = NOTE_VAR_LOCATION_STATUS (node->loc);
13211 		    varloc = NOTE_VAR_LOCATION (node->loc);
13212 		    descr = dw_loc_list_1 (decl, varloc, want_address,
13213 					   initialized);
13214 		  }
13215 		gcc_assert (descr);
13216 		/* The variable has a location between NODE->LABEL and
13217 		   NODE->NEXT->LABEL.  */
13218 		if (node->next)
13219 		  endname = node->next->label;
13220 		else
13221 		  endname = cfun->fde->dw_fde_second_end;
13222 		*listp = new_loc_list (descr,
13223 				       cfun->fde->dw_fde_second_begin,
13224 				       endname, secname);
13225 		listp = &(*listp)->dw_loc_next;
13226 	      }
13227 	  }
13228       }
13229 
13230   /* Try to avoid the overhead of a location list emitting a location
13231      expression instead, but only if we didn't have more than one
13232      location entry in the first place.  If some entries were not
13233      representable, we don't want to pretend a single entry that was
13234      applies to the entire scope in which the variable is
13235      available.  */
13236   if (list && loc_list->first->next)
13237     gen_llsym (list);
13238 
13239   return list;
13240 }
13241 
13242 /* Return if the loc_list has only single element and thus can be represented
13243    as location description.   */
13244 
13245 static bool
13246 single_element_loc_list_p (dw_loc_list_ref list)
13247 {
13248   gcc_assert (!list->dw_loc_next || list->ll_symbol);
13249   return !list->ll_symbol;
13250 }
13251 
13252 /* To each location in list LIST add loc descr REF.  */
13253 
13254 static void
13255 add_loc_descr_to_each (dw_loc_list_ref list, dw_loc_descr_ref ref)
13256 {
13257   dw_loc_descr_ref copy;
13258   add_loc_descr (&list->expr, ref);
13259   list = list->dw_loc_next;
13260   while (list)
13261     {
13262       copy = ggc_alloc_dw_loc_descr_node ();
13263       memcpy (copy, ref, sizeof (dw_loc_descr_node));
13264       add_loc_descr (&list->expr, copy);
13265       while (copy->dw_loc_next)
13266 	{
13267 	  dw_loc_descr_ref new_copy = ggc_alloc_dw_loc_descr_node ();
13268 	  memcpy (new_copy, copy->dw_loc_next, sizeof (dw_loc_descr_node));
13269 	  copy->dw_loc_next = new_copy;
13270 	  copy = new_copy;
13271 	}
13272       list = list->dw_loc_next;
13273     }
13274 }
13275 
13276 /* Given two lists RET and LIST
13277    produce location list that is result of adding expression in LIST
13278    to expression in RET on each possition in program.
13279    Might be destructive on both RET and LIST.
13280 
13281    TODO: We handle only simple cases of RET or LIST having at most one
13282    element. General case would inolve sorting the lists in program order
13283    and merging them that will need some additional work.
13284    Adding that will improve quality of debug info especially for SRA-ed
13285    structures.  */
13286 
13287 static void
13288 add_loc_list (dw_loc_list_ref *ret, dw_loc_list_ref list)
13289 {
13290   if (!list)
13291     return;
13292   if (!*ret)
13293     {
13294       *ret = list;
13295       return;
13296     }
13297   if (!list->dw_loc_next)
13298     {
13299       add_loc_descr_to_each (*ret, list->expr);
13300       return;
13301     }
13302   if (!(*ret)->dw_loc_next)
13303     {
13304       add_loc_descr_to_each (list, (*ret)->expr);
13305       *ret = list;
13306       return;
13307     }
13308   expansion_failed (NULL_TREE, NULL_RTX,
13309 		    "Don't know how to merge two non-trivial"
13310 		    " location lists.\n");
13311   *ret = NULL;
13312   return;
13313 }
13314 
13315 /* LOC is constant expression.  Try a luck, look it up in constant
13316    pool and return its loc_descr of its address.  */
13317 
13318 static dw_loc_descr_ref
13319 cst_pool_loc_descr (tree loc)
13320 {
13321   /* Get an RTL for this, if something has been emitted.  */
13322   rtx rtl = lookup_constant_def (loc);
13323 
13324   if (!rtl || !MEM_P (rtl))
13325     {
13326       gcc_assert (!rtl);
13327       return 0;
13328     }
13329   gcc_assert (GET_CODE (XEXP (rtl, 0)) == SYMBOL_REF);
13330 
13331   /* TODO: We might get more coverage if we was actually delaying expansion
13332      of all expressions till end of compilation when constant pools are fully
13333      populated.  */
13334   if (!TREE_ASM_WRITTEN (SYMBOL_REF_DECL (XEXP (rtl, 0))))
13335     {
13336       expansion_failed (loc, NULL_RTX,
13337 			"CST value in contant pool but not marked.");
13338       return 0;
13339     }
13340   return mem_loc_descriptor (XEXP (rtl, 0), get_address_mode (rtl),
13341 			     GET_MODE (rtl), VAR_INIT_STATUS_INITIALIZED);
13342 }
13343 
13344 /* Return dw_loc_list representing address of addr_expr LOC
13345    by looking for innder INDIRECT_REF expression and turing it
13346    into simple arithmetics.  */
13347 
13348 static dw_loc_list_ref
13349 loc_list_for_address_of_addr_expr_of_indirect_ref (tree loc, bool toplev)
13350 {
13351   tree obj, offset;
13352   HOST_WIDE_INT bitsize, bitpos, bytepos;
13353   enum machine_mode mode;
13354   int volatilep;
13355   int unsignedp = TYPE_UNSIGNED (TREE_TYPE (loc));
13356   dw_loc_list_ref list_ret = NULL, list_ret1 = NULL;
13357 
13358   obj = get_inner_reference (TREE_OPERAND (loc, 0),
13359 			     &bitsize, &bitpos, &offset, &mode,
13360 			     &unsignedp, &volatilep, false);
13361   STRIP_NOPS (obj);
13362   if (bitpos % BITS_PER_UNIT)
13363     {
13364       expansion_failed (loc, NULL_RTX, "bitfield access");
13365       return 0;
13366     }
13367   if (!INDIRECT_REF_P (obj))
13368     {
13369       expansion_failed (obj,
13370 			NULL_RTX, "no indirect ref in inner refrence");
13371       return 0;
13372     }
13373   if (!offset && !bitpos)
13374     list_ret = loc_list_from_tree (TREE_OPERAND (obj, 0), toplev ? 2 : 1);
13375   else if (toplev
13376 	   && int_size_in_bytes (TREE_TYPE (loc)) <= DWARF2_ADDR_SIZE
13377 	   && (dwarf_version >= 4 || !dwarf_strict))
13378     {
13379       list_ret = loc_list_from_tree (TREE_OPERAND (obj, 0), 0);
13380       if (!list_ret)
13381 	return 0;
13382       if (offset)
13383 	{
13384 	  /* Variable offset.  */
13385 	  list_ret1 = loc_list_from_tree (offset, 0);
13386 	  if (list_ret1 == 0)
13387 	    return 0;
13388 	  add_loc_list (&list_ret, list_ret1);
13389 	  if (!list_ret)
13390 	    return 0;
13391 	  add_loc_descr_to_each (list_ret,
13392 				 new_loc_descr (DW_OP_plus, 0, 0));
13393 	}
13394       bytepos = bitpos / BITS_PER_UNIT;
13395       if (bytepos > 0)
13396 	add_loc_descr_to_each (list_ret,
13397 			       new_loc_descr (DW_OP_plus_uconst,
13398 					      bytepos, 0));
13399       else if (bytepos < 0)
13400 	loc_list_plus_const (list_ret, bytepos);
13401       add_loc_descr_to_each (list_ret,
13402 			     new_loc_descr (DW_OP_stack_value, 0, 0));
13403     }
13404   return list_ret;
13405 }
13406 
13407 
13408 /* Generate Dwarf location list representing LOC.
13409    If WANT_ADDRESS is false, expression computing LOC will be computed
13410    If WANT_ADDRESS is 1, expression computing address of LOC will be returned
13411    if WANT_ADDRESS is 2, expression computing address useable in location
13412      will be returned (i.e. DW_OP_reg can be used
13413      to refer to register values).  */
13414 
13415 static dw_loc_list_ref
13416 loc_list_from_tree (tree loc, int want_address)
13417 {
13418   dw_loc_descr_ref ret = NULL, ret1 = NULL;
13419   dw_loc_list_ref list_ret = NULL, list_ret1 = NULL;
13420   int have_address = 0;
13421   enum dwarf_location_atom op;
13422 
13423   /* ??? Most of the time we do not take proper care for sign/zero
13424      extending the values properly.  Hopefully this won't be a real
13425      problem...  */
13426 
13427   switch (TREE_CODE (loc))
13428     {
13429     case ERROR_MARK:
13430       expansion_failed (loc, NULL_RTX, "ERROR_MARK");
13431       return 0;
13432 
13433     case PLACEHOLDER_EXPR:
13434       /* This case involves extracting fields from an object to determine the
13435 	 position of other fields.  We don't try to encode this here.  The
13436 	 only user of this is Ada, which encodes the needed information using
13437 	 the names of types.  */
13438       expansion_failed (loc, NULL_RTX, "PLACEHOLDER_EXPR");
13439       return 0;
13440 
13441     case CALL_EXPR:
13442       expansion_failed (loc, NULL_RTX, "CALL_EXPR");
13443       /* There are no opcodes for these operations.  */
13444       return 0;
13445 
13446     case PREINCREMENT_EXPR:
13447     case PREDECREMENT_EXPR:
13448     case POSTINCREMENT_EXPR:
13449     case POSTDECREMENT_EXPR:
13450       expansion_failed (loc, NULL_RTX, "PRE/POST INDCREMENT/DECREMENT");
13451       /* There are no opcodes for these operations.  */
13452       return 0;
13453 
13454     case ADDR_EXPR:
13455       /* If we already want an address, see if there is INDIRECT_REF inside
13456          e.g. for &this->field.  */
13457       if (want_address)
13458 	{
13459 	  list_ret = loc_list_for_address_of_addr_expr_of_indirect_ref
13460 		       (loc, want_address == 2);
13461 	  if (list_ret)
13462 	    have_address = 1;
13463 	  else if (decl_address_ip_invariant_p (TREE_OPERAND (loc, 0))
13464 	  	   && (ret = cst_pool_loc_descr (loc)))
13465 	    have_address = 1;
13466 	}
13467         /* Otherwise, process the argument and look for the address.  */
13468       if (!list_ret && !ret)
13469         list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 1);
13470       else
13471 	{
13472 	  if (want_address)
13473 	    expansion_failed (loc, NULL_RTX, "need address of ADDR_EXPR");
13474 	  return NULL;
13475 	}
13476       break;
13477 
13478     case VAR_DECL:
13479       if (DECL_THREAD_LOCAL_P (loc))
13480 	{
13481 	  rtx rtl;
13482 	  enum dwarf_location_atom first_op;
13483 	  enum dwarf_location_atom second_op;
13484 	  bool dtprel = false;
13485 
13486 	  if (targetm.have_tls)
13487 	    {
13488 	      /* If this is not defined, we have no way to emit the
13489 		 data.  */
13490 	      if (!targetm.asm_out.output_dwarf_dtprel)
13491 		return 0;
13492 
13493 	       /* The way DW_OP_GNU_push_tls_address is specified, we
13494 	     	  can only look up addresses of objects in the current
13495 	     	  module.  We used DW_OP_addr as first op, but that's
13496 		  wrong, because DW_OP_addr is relocated by the debug
13497 		  info consumer, while DW_OP_GNU_push_tls_address
13498 		  operand shouldn't be.  */
13499 	      if (DECL_EXTERNAL (loc) && !targetm.binds_local_p (loc))
13500 		return 0;
13501 	      first_op = DWARF2_ADDR_SIZE == 4 ? DW_OP_const4u : DW_OP_const8u;
13502 	      dtprel = true;
13503 	      second_op = DW_OP_GNU_push_tls_address;
13504 	    }
13505 	  else
13506 	    {
13507 	      if (!targetm.emutls.debug_form_tls_address
13508 		  || !(dwarf_version >= 3 || !dwarf_strict))
13509 		return 0;
13510 	      /* We stuffed the control variable into the DECL_VALUE_EXPR
13511 		 to signal (via DECL_HAS_VALUE_EXPR_P) that the decl should
13512 		 no longer appear in gimple code.  We used the control
13513 		 variable in specific so that we could pick it up here.  */
13514 	      loc = DECL_VALUE_EXPR (loc);
13515 	      first_op = DW_OP_addr;
13516 	      second_op = DW_OP_form_tls_address;
13517 	    }
13518 
13519 	  rtl = rtl_for_decl_location (loc);
13520 	  if (rtl == NULL_RTX)
13521 	    return 0;
13522 
13523 	  if (!MEM_P (rtl))
13524 	    return 0;
13525 	  rtl = XEXP (rtl, 0);
13526 	  if (! CONSTANT_P (rtl))
13527 	    return 0;
13528 
13529 	  ret = new_loc_descr (first_op, 0, 0);
13530 	  ret->dw_loc_oprnd1.val_class = dw_val_class_addr;
13531 	  ret->dw_loc_oprnd1.v.val_addr = rtl;
13532 	  ret->dtprel = dtprel;
13533 
13534 	  ret1 = new_loc_descr (second_op, 0, 0);
13535 	  add_loc_descr (&ret, ret1);
13536 
13537 	  have_address = 1;
13538 	  break;
13539 	}
13540       /* FALLTHRU */
13541 
13542     case PARM_DECL:
13543     case RESULT_DECL:
13544       if (DECL_HAS_VALUE_EXPR_P (loc))
13545 	return loc_list_from_tree (DECL_VALUE_EXPR (loc),
13546 				   want_address);
13547       /* FALLTHRU */
13548 
13549     case FUNCTION_DECL:
13550       {
13551 	rtx rtl;
13552 	var_loc_list *loc_list = lookup_decl_loc (loc);
13553 
13554 	if (loc_list && loc_list->first)
13555 	  {
13556 	    list_ret = dw_loc_list (loc_list, loc, want_address);
13557 	    have_address = want_address != 0;
13558 	    break;
13559 	  }
13560 	rtl = rtl_for_decl_location (loc);
13561 	if (rtl == NULL_RTX)
13562 	  {
13563 	    expansion_failed (loc, NULL_RTX, "DECL has no RTL");
13564 	    return 0;
13565 	  }
13566 	else if (CONST_INT_P (rtl))
13567 	  {
13568 	    HOST_WIDE_INT val = INTVAL (rtl);
13569 	    if (TYPE_UNSIGNED (TREE_TYPE (loc)))
13570 	      val &= GET_MODE_MASK (DECL_MODE (loc));
13571 	    ret = int_loc_descriptor (val);
13572 	  }
13573 	else if (GET_CODE (rtl) == CONST_STRING)
13574 	  {
13575 	    expansion_failed (loc, NULL_RTX, "CONST_STRING");
13576 	    return 0;
13577 	  }
13578 	else if (CONSTANT_P (rtl) && const_ok_for_output (rtl))
13579 	  {
13580 	    ret = new_loc_descr (DW_OP_addr, 0, 0);
13581 	    ret->dw_loc_oprnd1.val_class = dw_val_class_addr;
13582 	    ret->dw_loc_oprnd1.v.val_addr = rtl;
13583 	  }
13584 	else
13585 	  {
13586 	    enum machine_mode mode, mem_mode;
13587 
13588 	    /* Certain constructs can only be represented at top-level.  */
13589 	    if (want_address == 2)
13590 	      {
13591 		ret = loc_descriptor (rtl, VOIDmode,
13592 				      VAR_INIT_STATUS_INITIALIZED);
13593 		have_address = 1;
13594 	      }
13595 	    else
13596 	      {
13597 		mode = GET_MODE (rtl);
13598 		mem_mode = VOIDmode;
13599 		if (MEM_P (rtl))
13600 		  {
13601 		    mem_mode = mode;
13602 		    mode = get_address_mode (rtl);
13603 		    rtl = XEXP (rtl, 0);
13604 		    have_address = 1;
13605 		  }
13606 		ret = mem_loc_descriptor (rtl, mode, mem_mode,
13607 					  VAR_INIT_STATUS_INITIALIZED);
13608 	      }
13609 	    if (!ret)
13610 	      expansion_failed (loc, rtl,
13611 				"failed to produce loc descriptor for rtl");
13612 	  }
13613       }
13614       break;
13615 
13616     case MEM_REF:
13617       /* ??? FIXME.  */
13618       if (!integer_zerop (TREE_OPERAND (loc, 1)))
13619 	return 0;
13620       /* Fallthru.  */
13621     case INDIRECT_REF:
13622       list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 0);
13623       have_address = 1;
13624       break;
13625 
13626     case COMPOUND_EXPR:
13627       return loc_list_from_tree (TREE_OPERAND (loc, 1), want_address);
13628 
13629     CASE_CONVERT:
13630     case VIEW_CONVERT_EXPR:
13631     case SAVE_EXPR:
13632     case MODIFY_EXPR:
13633       return loc_list_from_tree (TREE_OPERAND (loc, 0), want_address);
13634 
13635     case COMPONENT_REF:
13636     case BIT_FIELD_REF:
13637     case ARRAY_REF:
13638     case ARRAY_RANGE_REF:
13639     case REALPART_EXPR:
13640     case IMAGPART_EXPR:
13641       {
13642 	tree obj, offset;
13643 	HOST_WIDE_INT bitsize, bitpos, bytepos;
13644 	enum machine_mode mode;
13645 	int volatilep;
13646 	int unsignedp = TYPE_UNSIGNED (TREE_TYPE (loc));
13647 
13648 	obj = get_inner_reference (loc, &bitsize, &bitpos, &offset, &mode,
13649 				   &unsignedp, &volatilep, false);
13650 
13651 	gcc_assert (obj != loc);
13652 
13653 	list_ret = loc_list_from_tree (obj,
13654 				       want_address == 2
13655 				       && !bitpos && !offset ? 2 : 1);
13656 	/* TODO: We can extract value of the small expression via shifting even
13657 	   for nonzero bitpos.  */
13658 	if (list_ret == 0)
13659 	  return 0;
13660 	if (bitpos % BITS_PER_UNIT != 0 || bitsize % BITS_PER_UNIT != 0)
13661 	  {
13662 	    expansion_failed (loc, NULL_RTX,
13663 			      "bitfield access");
13664 	    return 0;
13665 	  }
13666 
13667 	if (offset != NULL_TREE)
13668 	  {
13669 	    /* Variable offset.  */
13670 	    list_ret1 = loc_list_from_tree (offset, 0);
13671 	    if (list_ret1 == 0)
13672 	      return 0;
13673 	    add_loc_list (&list_ret, list_ret1);
13674 	    if (!list_ret)
13675 	      return 0;
13676 	    add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_plus, 0, 0));
13677 	  }
13678 
13679 	bytepos = bitpos / BITS_PER_UNIT;
13680 	if (bytepos > 0)
13681 	  add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_plus_uconst, bytepos, 0));
13682 	else if (bytepos < 0)
13683 	  loc_list_plus_const (list_ret, bytepos);
13684 
13685 	have_address = 1;
13686 	break;
13687       }
13688 
13689     case INTEGER_CST:
13690       if ((want_address || !host_integerp (loc, 0))
13691 	  && (ret = cst_pool_loc_descr (loc)))
13692 	have_address = 1;
13693       else if (want_address == 2
13694 	       && host_integerp (loc, 0)
13695 	       && (ret = address_of_int_loc_descriptor
13696 	       		   (int_size_in_bytes (TREE_TYPE (loc)),
13697 	       		    tree_low_cst (loc, 0))))
13698 	have_address = 1;
13699       else if (host_integerp (loc, 0))
13700 	ret = int_loc_descriptor (tree_low_cst (loc, 0));
13701       else
13702 	{
13703 	  expansion_failed (loc, NULL_RTX,
13704 			    "Integer operand is not host integer");
13705 	  return 0;
13706 	}
13707       break;
13708 
13709     case CONSTRUCTOR:
13710     case REAL_CST:
13711     case STRING_CST:
13712     case COMPLEX_CST:
13713       if ((ret = cst_pool_loc_descr (loc)))
13714 	have_address = 1;
13715       else
13716       /* We can construct small constants here using int_loc_descriptor.  */
13717 	expansion_failed (loc, NULL_RTX,
13718 			  "constructor or constant not in constant pool");
13719       break;
13720 
13721     case TRUTH_AND_EXPR:
13722     case TRUTH_ANDIF_EXPR:
13723     case BIT_AND_EXPR:
13724       op = DW_OP_and;
13725       goto do_binop;
13726 
13727     case TRUTH_XOR_EXPR:
13728     case BIT_XOR_EXPR:
13729       op = DW_OP_xor;
13730       goto do_binop;
13731 
13732     case TRUTH_OR_EXPR:
13733     case TRUTH_ORIF_EXPR:
13734     case BIT_IOR_EXPR:
13735       op = DW_OP_or;
13736       goto do_binop;
13737 
13738     case FLOOR_DIV_EXPR:
13739     case CEIL_DIV_EXPR:
13740     case ROUND_DIV_EXPR:
13741     case TRUNC_DIV_EXPR:
13742       if (TYPE_UNSIGNED (TREE_TYPE (loc)))
13743 	return 0;
13744       op = DW_OP_div;
13745       goto do_binop;
13746 
13747     case MINUS_EXPR:
13748       op = DW_OP_minus;
13749       goto do_binop;
13750 
13751     case FLOOR_MOD_EXPR:
13752     case CEIL_MOD_EXPR:
13753     case ROUND_MOD_EXPR:
13754     case TRUNC_MOD_EXPR:
13755       if (TYPE_UNSIGNED (TREE_TYPE (loc)))
13756 	{
13757 	  op = DW_OP_mod;
13758 	  goto do_binop;
13759 	}
13760       list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 0);
13761       list_ret1 = loc_list_from_tree (TREE_OPERAND (loc, 1), 0);
13762       if (list_ret == 0 || list_ret1 == 0)
13763 	return 0;
13764 
13765       add_loc_list (&list_ret, list_ret1);
13766       if (list_ret == 0)
13767 	return 0;
13768       add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_over, 0, 0));
13769       add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_over, 0, 0));
13770       add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_div, 0, 0));
13771       add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_mul, 0, 0));
13772       add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_minus, 0, 0));
13773       break;
13774 
13775     case MULT_EXPR:
13776       op = DW_OP_mul;
13777       goto do_binop;
13778 
13779     case LSHIFT_EXPR:
13780       op = DW_OP_shl;
13781       goto do_binop;
13782 
13783     case RSHIFT_EXPR:
13784       op = (TYPE_UNSIGNED (TREE_TYPE (loc)) ? DW_OP_shr : DW_OP_shra);
13785       goto do_binop;
13786 
13787     case POINTER_PLUS_EXPR:
13788     case PLUS_EXPR:
13789       if (host_integerp (TREE_OPERAND (loc, 1), 0))
13790 	{
13791 	  list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 0);
13792 	  if (list_ret == 0)
13793 	    return 0;
13794 
13795 	  loc_list_plus_const (list_ret, tree_low_cst (TREE_OPERAND (loc, 1), 0));
13796 	  break;
13797 	}
13798 
13799       op = DW_OP_plus;
13800       goto do_binop;
13801 
13802     case LE_EXPR:
13803       if (TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (loc, 0))))
13804 	return 0;
13805 
13806       op = DW_OP_le;
13807       goto do_binop;
13808 
13809     case GE_EXPR:
13810       if (TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (loc, 0))))
13811 	return 0;
13812 
13813       op = DW_OP_ge;
13814       goto do_binop;
13815 
13816     case LT_EXPR:
13817       if (TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (loc, 0))))
13818 	return 0;
13819 
13820       op = DW_OP_lt;
13821       goto do_binop;
13822 
13823     case GT_EXPR:
13824       if (TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (loc, 0))))
13825 	return 0;
13826 
13827       op = DW_OP_gt;
13828       goto do_binop;
13829 
13830     case EQ_EXPR:
13831       op = DW_OP_eq;
13832       goto do_binop;
13833 
13834     case NE_EXPR:
13835       op = DW_OP_ne;
13836       goto do_binop;
13837 
13838     do_binop:
13839       list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 0);
13840       list_ret1 = loc_list_from_tree (TREE_OPERAND (loc, 1), 0);
13841       if (list_ret == 0 || list_ret1 == 0)
13842 	return 0;
13843 
13844       add_loc_list (&list_ret, list_ret1);
13845       if (list_ret == 0)
13846 	return 0;
13847       add_loc_descr_to_each (list_ret, new_loc_descr (op, 0, 0));
13848       break;
13849 
13850     case TRUTH_NOT_EXPR:
13851     case BIT_NOT_EXPR:
13852       op = DW_OP_not;
13853       goto do_unop;
13854 
13855     case ABS_EXPR:
13856       op = DW_OP_abs;
13857       goto do_unop;
13858 
13859     case NEGATE_EXPR:
13860       op = DW_OP_neg;
13861       goto do_unop;
13862 
13863     do_unop:
13864       list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 0);
13865       if (list_ret == 0)
13866 	return 0;
13867 
13868       add_loc_descr_to_each (list_ret, new_loc_descr (op, 0, 0));
13869       break;
13870 
13871     case MIN_EXPR:
13872     case MAX_EXPR:
13873       {
13874 	const enum tree_code code =
13875 	  TREE_CODE (loc) == MIN_EXPR ? GT_EXPR : LT_EXPR;
13876 
13877 	loc = build3 (COND_EXPR, TREE_TYPE (loc),
13878 		      build2 (code, integer_type_node,
13879 			      TREE_OPERAND (loc, 0), TREE_OPERAND (loc, 1)),
13880 		      TREE_OPERAND (loc, 1), TREE_OPERAND (loc, 0));
13881       }
13882 
13883       /* ... fall through ...  */
13884 
13885     case COND_EXPR:
13886       {
13887 	dw_loc_descr_ref lhs
13888 	  = loc_descriptor_from_tree (TREE_OPERAND (loc, 1), 0);
13889 	dw_loc_list_ref rhs
13890 	  = loc_list_from_tree (TREE_OPERAND (loc, 2), 0);
13891 	dw_loc_descr_ref bra_node, jump_node, tmp;
13892 
13893 	list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 0);
13894 	if (list_ret == 0 || lhs == 0 || rhs == 0)
13895 	  return 0;
13896 
13897 	bra_node = new_loc_descr (DW_OP_bra, 0, 0);
13898 	add_loc_descr_to_each (list_ret, bra_node);
13899 
13900 	add_loc_list (&list_ret, rhs);
13901 	jump_node = new_loc_descr (DW_OP_skip, 0, 0);
13902 	add_loc_descr_to_each (list_ret, jump_node);
13903 
13904 	add_loc_descr_to_each (list_ret, lhs);
13905 	bra_node->dw_loc_oprnd1.val_class = dw_val_class_loc;
13906 	bra_node->dw_loc_oprnd1.v.val_loc = lhs;
13907 
13908 	/* ??? Need a node to point the skip at.  Use a nop.  */
13909 	tmp = new_loc_descr (DW_OP_nop, 0, 0);
13910 	add_loc_descr_to_each (list_ret, tmp);
13911 	jump_node->dw_loc_oprnd1.val_class = dw_val_class_loc;
13912 	jump_node->dw_loc_oprnd1.v.val_loc = tmp;
13913       }
13914       break;
13915 
13916     case FIX_TRUNC_EXPR:
13917       return 0;
13918 
13919     default:
13920       /* Leave front-end specific codes as simply unknown.  This comes
13921 	 up, for instance, with the C STMT_EXPR.  */
13922       if ((unsigned int) TREE_CODE (loc)
13923 	  >= (unsigned int) LAST_AND_UNUSED_TREE_CODE)
13924 	{
13925 	  expansion_failed (loc, NULL_RTX,
13926 			    "language specific tree node");
13927 	  return 0;
13928 	}
13929 
13930 #ifdef ENABLE_CHECKING
13931       /* Otherwise this is a generic code; we should just lists all of
13932 	 these explicitly.  We forgot one.  */
13933       gcc_unreachable ();
13934 #else
13935       /* In a release build, we want to degrade gracefully: better to
13936 	 generate incomplete debugging information than to crash.  */
13937       return NULL;
13938 #endif
13939     }
13940 
13941   if (!ret && !list_ret)
13942     return 0;
13943 
13944   if (want_address == 2 && !have_address
13945       && (dwarf_version >= 4 || !dwarf_strict))
13946     {
13947       if (int_size_in_bytes (TREE_TYPE (loc)) > DWARF2_ADDR_SIZE)
13948 	{
13949 	  expansion_failed (loc, NULL_RTX,
13950 			    "DWARF address size mismatch");
13951 	  return 0;
13952 	}
13953       if (ret)
13954 	add_loc_descr (&ret, new_loc_descr (DW_OP_stack_value, 0, 0));
13955       else
13956 	add_loc_descr_to_each (list_ret,
13957 			       new_loc_descr (DW_OP_stack_value, 0, 0));
13958       have_address = 1;
13959     }
13960   /* Show if we can't fill the request for an address.  */
13961   if (want_address && !have_address)
13962     {
13963       expansion_failed (loc, NULL_RTX,
13964 			"Want address and only have value");
13965       return 0;
13966     }
13967 
13968   gcc_assert (!ret || !list_ret);
13969 
13970   /* If we've got an address and don't want one, dereference.  */
13971   if (!want_address && have_address)
13972     {
13973       HOST_WIDE_INT size = int_size_in_bytes (TREE_TYPE (loc));
13974 
13975       if (size > DWARF2_ADDR_SIZE || size == -1)
13976 	{
13977 	  expansion_failed (loc, NULL_RTX,
13978 			    "DWARF address size mismatch");
13979 	  return 0;
13980 	}
13981       else if (size == DWARF2_ADDR_SIZE)
13982 	op = DW_OP_deref;
13983       else
13984 	op = DW_OP_deref_size;
13985 
13986       if (ret)
13987 	add_loc_descr (&ret, new_loc_descr (op, size, 0));
13988       else
13989 	add_loc_descr_to_each (list_ret, new_loc_descr (op, size, 0));
13990     }
13991   if (ret)
13992     list_ret = new_loc_list (ret, NULL, NULL, NULL);
13993 
13994   return list_ret;
13995 }
13996 
13997 /* Same as above but return only single location expression.  */
13998 static dw_loc_descr_ref
13999 loc_descriptor_from_tree (tree loc, int want_address)
14000 {
14001   dw_loc_list_ref ret = loc_list_from_tree (loc, want_address);
14002   if (!ret)
14003     return NULL;
14004   if (ret->dw_loc_next)
14005     {
14006       expansion_failed (loc, NULL_RTX,
14007 			"Location list where only loc descriptor needed");
14008       return NULL;
14009     }
14010   return ret->expr;
14011 }
14012 
14013 /* Given a value, round it up to the lowest multiple of `boundary'
14014    which is not less than the value itself.  */
14015 
14016 static inline HOST_WIDE_INT
14017 ceiling (HOST_WIDE_INT value, unsigned int boundary)
14018 {
14019   return (((value + boundary - 1) / boundary) * boundary);
14020 }
14021 
14022 /* Given a pointer to what is assumed to be a FIELD_DECL node, return a
14023    pointer to the declared type for the relevant field variable, or return
14024    `integer_type_node' if the given node turns out to be an
14025    ERROR_MARK node.  */
14026 
14027 static inline tree
14028 field_type (const_tree decl)
14029 {
14030   tree type;
14031 
14032   if (TREE_CODE (decl) == ERROR_MARK)
14033     return integer_type_node;
14034 
14035   type = DECL_BIT_FIELD_TYPE (decl);
14036   if (type == NULL_TREE)
14037     type = TREE_TYPE (decl);
14038 
14039   return type;
14040 }
14041 
14042 /* Given a pointer to a tree node, return the alignment in bits for
14043    it, or else return BITS_PER_WORD if the node actually turns out to
14044    be an ERROR_MARK node.  */
14045 
14046 static inline unsigned
14047 simple_type_align_in_bits (const_tree type)
14048 {
14049   return (TREE_CODE (type) != ERROR_MARK) ? TYPE_ALIGN (type) : BITS_PER_WORD;
14050 }
14051 
14052 static inline unsigned
14053 simple_decl_align_in_bits (const_tree decl)
14054 {
14055   return (TREE_CODE (decl) != ERROR_MARK) ? DECL_ALIGN (decl) : BITS_PER_WORD;
14056 }
14057 
14058 /* Return the result of rounding T up to ALIGN.  */
14059 
14060 static inline double_int
14061 round_up_to_align (double_int t, unsigned int align)
14062 {
14063   double_int alignd = uhwi_to_double_int (align);
14064   t = double_int_add (t, alignd);
14065   t = double_int_add (t, double_int_minus_one);
14066   t = double_int_div (t, alignd, true, TRUNC_DIV_EXPR);
14067   t = double_int_mul (t, alignd);
14068   return t;
14069 }
14070 
14071 /* Given a pointer to a FIELD_DECL, compute and return the byte offset of the
14072    lowest addressed byte of the "containing object" for the given FIELD_DECL,
14073    or return 0 if we are unable to determine what that offset is, either
14074    because the argument turns out to be a pointer to an ERROR_MARK node, or
14075    because the offset is actually variable.  (We can't handle the latter case
14076    just yet).  */
14077 
14078 static HOST_WIDE_INT
14079 field_byte_offset (const_tree decl)
14080 {
14081   double_int object_offset_in_bits;
14082   double_int object_offset_in_bytes;
14083   double_int bitpos_int;
14084 
14085   if (TREE_CODE (decl) == ERROR_MARK)
14086     return 0;
14087 
14088   gcc_assert (TREE_CODE (decl) == FIELD_DECL);
14089 
14090   /* We cannot yet cope with fields whose positions are variable, so
14091      for now, when we see such things, we simply return 0.  Someday, we may
14092      be able to handle such cases, but it will be damn difficult.  */
14093   if (TREE_CODE (bit_position (decl)) != INTEGER_CST)
14094     return 0;
14095 
14096   bitpos_int = tree_to_double_int (bit_position (decl));
14097 
14098 #ifdef PCC_BITFIELD_TYPE_MATTERS
14099   if (PCC_BITFIELD_TYPE_MATTERS)
14100     {
14101       tree type;
14102       tree field_size_tree;
14103       double_int deepest_bitpos;
14104       double_int field_size_in_bits;
14105       unsigned int type_align_in_bits;
14106       unsigned int decl_align_in_bits;
14107       double_int type_size_in_bits;
14108 
14109       type = field_type (decl);
14110       type_size_in_bits = double_int_type_size_in_bits (type);
14111       type_align_in_bits = simple_type_align_in_bits (type);
14112 
14113       field_size_tree = DECL_SIZE (decl);
14114 
14115       /* The size could be unspecified if there was an error, or for
14116 	 a flexible array member.  */
14117       if (!field_size_tree)
14118 	field_size_tree = bitsize_zero_node;
14119 
14120       /* If the size of the field is not constant, use the type size.  */
14121       if (TREE_CODE (field_size_tree) == INTEGER_CST)
14122 	field_size_in_bits = tree_to_double_int (field_size_tree);
14123       else
14124 	field_size_in_bits = type_size_in_bits;
14125 
14126       decl_align_in_bits = simple_decl_align_in_bits (decl);
14127 
14128       /* The GCC front-end doesn't make any attempt to keep track of the
14129 	 starting bit offset (relative to the start of the containing
14130 	 structure type) of the hypothetical "containing object" for a
14131 	 bit-field.  Thus, when computing the byte offset value for the
14132 	 start of the "containing object" of a bit-field, we must deduce
14133 	 this information on our own. This can be rather tricky to do in
14134 	 some cases.  For example, handling the following structure type
14135 	 definition when compiling for an i386/i486 target (which only
14136 	 aligns long long's to 32-bit boundaries) can be very tricky:
14137 
14138 	 struct S { int field1; long long field2:31; };
14139 
14140 	 Fortunately, there is a simple rule-of-thumb which can be used
14141 	 in such cases.  When compiling for an i386/i486, GCC will
14142 	 allocate 8 bytes for the structure shown above.  It decides to
14143 	 do this based upon one simple rule for bit-field allocation.
14144 	 GCC allocates each "containing object" for each bit-field at
14145 	 the first (i.e. lowest addressed) legitimate alignment boundary
14146 	 (based upon the required minimum alignment for the declared
14147 	 type of the field) which it can possibly use, subject to the
14148 	 condition that there is still enough available space remaining
14149 	 in the containing object (when allocated at the selected point)
14150 	 to fully accommodate all of the bits of the bit-field itself.
14151 
14152 	 This simple rule makes it obvious why GCC allocates 8 bytes for
14153 	 each object of the structure type shown above.  When looking
14154 	 for a place to allocate the "containing object" for `field2',
14155 	 the compiler simply tries to allocate a 64-bit "containing
14156 	 object" at each successive 32-bit boundary (starting at zero)
14157 	 until it finds a place to allocate that 64- bit field such that
14158 	 at least 31 contiguous (and previously unallocated) bits remain
14159 	 within that selected 64 bit field.  (As it turns out, for the
14160 	 example above, the compiler finds it is OK to allocate the
14161 	 "containing object" 64-bit field at bit-offset zero within the
14162 	 structure type.)
14163 
14164 	 Here we attempt to work backwards from the limited set of facts
14165 	 we're given, and we try to deduce from those facts, where GCC
14166 	 must have believed that the containing object started (within
14167 	 the structure type). The value we deduce is then used (by the
14168 	 callers of this routine) to generate DW_AT_location and
14169 	 DW_AT_bit_offset attributes for fields (both bit-fields and, in
14170 	 the case of DW_AT_location, regular fields as well).  */
14171 
14172       /* Figure out the bit-distance from the start of the structure to
14173 	 the "deepest" bit of the bit-field.  */
14174       deepest_bitpos = double_int_add (bitpos_int, field_size_in_bits);
14175 
14176       /* This is the tricky part.  Use some fancy footwork to deduce
14177 	 where the lowest addressed bit of the containing object must
14178 	 be.  */
14179       object_offset_in_bits
14180 	= double_int_sub (deepest_bitpos, type_size_in_bits);
14181 
14182       /* Round up to type_align by default.  This works best for
14183 	 bitfields.  */
14184       object_offset_in_bits
14185 	= round_up_to_align (object_offset_in_bits, type_align_in_bits);
14186 
14187       if (double_int_ucmp (object_offset_in_bits, bitpos_int) > 0)
14188 	{
14189 	  object_offset_in_bits
14190 	    = double_int_sub (deepest_bitpos, type_size_in_bits);
14191 
14192 	  /* Round up to decl_align instead.  */
14193 	  object_offset_in_bits
14194 	    = round_up_to_align (object_offset_in_bits, decl_align_in_bits);
14195 	}
14196     }
14197   else
14198 #endif /* PCC_BITFIELD_TYPE_MATTERS */
14199     object_offset_in_bits = bitpos_int;
14200 
14201   object_offset_in_bytes
14202     = double_int_div (object_offset_in_bits,
14203 		      uhwi_to_double_int (BITS_PER_UNIT), true,
14204 		      TRUNC_DIV_EXPR);
14205   return double_int_to_shwi (object_offset_in_bytes);
14206 }
14207 
14208 /* The following routines define various Dwarf attributes and any data
14209    associated with them.  */
14210 
14211 /* Add a location description attribute value to a DIE.
14212 
14213    This emits location attributes suitable for whole variables and
14214    whole parameters.  Note that the location attributes for struct fields are
14215    generated by the routine `data_member_location_attribute' below.  */
14216 
14217 static inline void
14218 add_AT_location_description (dw_die_ref die, enum dwarf_attribute attr_kind,
14219 			     dw_loc_list_ref descr)
14220 {
14221   if (descr == 0)
14222     return;
14223   if (single_element_loc_list_p (descr))
14224     add_AT_loc (die, attr_kind, descr->expr);
14225   else
14226     add_AT_loc_list (die, attr_kind, descr);
14227 }
14228 
14229 /* Add DW_AT_accessibility attribute to DIE if needed.  */
14230 
14231 static void
14232 add_accessibility_attribute (dw_die_ref die, tree decl)
14233 {
14234   /* In DWARF3+ the default is DW_ACCESS_private only in DW_TAG_class_type
14235      children, otherwise the default is DW_ACCESS_public.  In DWARF2
14236      the default has always been DW_ACCESS_public.  */
14237   if (TREE_PROTECTED (decl))
14238     add_AT_unsigned (die, DW_AT_accessibility, DW_ACCESS_protected);
14239   else if (TREE_PRIVATE (decl))
14240     {
14241       if (dwarf_version == 2
14242 	  || die->die_parent == NULL
14243 	  || die->die_parent->die_tag != DW_TAG_class_type)
14244 	add_AT_unsigned (die, DW_AT_accessibility, DW_ACCESS_private);
14245     }
14246   else if (dwarf_version > 2
14247 	   && die->die_parent
14248 	   && die->die_parent->die_tag == DW_TAG_class_type)
14249     add_AT_unsigned (die, DW_AT_accessibility, DW_ACCESS_public);
14250 }
14251 
14252 /* Attach the specialized form of location attribute used for data members of
14253    struct and union types.  In the special case of a FIELD_DECL node which
14254    represents a bit-field, the "offset" part of this special location
14255    descriptor must indicate the distance in bytes from the lowest-addressed
14256    byte of the containing struct or union type to the lowest-addressed byte of
14257    the "containing object" for the bit-field.  (See the `field_byte_offset'
14258    function above).
14259 
14260    For any given bit-field, the "containing object" is a hypothetical object
14261    (of some integral or enum type) within which the given bit-field lives.  The
14262    type of this hypothetical "containing object" is always the same as the
14263    declared type of the individual bit-field itself (for GCC anyway... the
14264    DWARF spec doesn't actually mandate this).  Note that it is the size (in
14265    bytes) of the hypothetical "containing object" which will be given in the
14266    DW_AT_byte_size attribute for this bit-field.  (See the
14267    `byte_size_attribute' function below.)  It is also used when calculating the
14268    value of the DW_AT_bit_offset attribute.  (See the `bit_offset_attribute'
14269    function below.)  */
14270 
14271 static void
14272 add_data_member_location_attribute (dw_die_ref die, tree decl)
14273 {
14274   HOST_WIDE_INT offset;
14275   dw_loc_descr_ref loc_descr = 0;
14276 
14277   if (TREE_CODE (decl) == TREE_BINFO)
14278     {
14279       /* We're working on the TAG_inheritance for a base class.  */
14280       if (BINFO_VIRTUAL_P (decl) && is_cxx ())
14281 	{
14282 	  /* For C++ virtual bases we can't just use BINFO_OFFSET, as they
14283 	     aren't at a fixed offset from all (sub)objects of the same
14284 	     type.  We need to extract the appropriate offset from our
14285 	     vtable.  The following dwarf expression means
14286 
14287 	       BaseAddr = ObAddr + *((*ObAddr) - Offset)
14288 
14289 	     This is specific to the V3 ABI, of course.  */
14290 
14291 	  dw_loc_descr_ref tmp;
14292 
14293 	  /* Make a copy of the object address.  */
14294 	  tmp = new_loc_descr (DW_OP_dup, 0, 0);
14295 	  add_loc_descr (&loc_descr, tmp);
14296 
14297 	  /* Extract the vtable address.  */
14298 	  tmp = new_loc_descr (DW_OP_deref, 0, 0);
14299 	  add_loc_descr (&loc_descr, tmp);
14300 
14301 	  /* Calculate the address of the offset.  */
14302 	  offset = tree_low_cst (BINFO_VPTR_FIELD (decl), 0);
14303 	  gcc_assert (offset < 0);
14304 
14305 	  tmp = int_loc_descriptor (-offset);
14306 	  add_loc_descr (&loc_descr, tmp);
14307 	  tmp = new_loc_descr (DW_OP_minus, 0, 0);
14308 	  add_loc_descr (&loc_descr, tmp);
14309 
14310 	  /* Extract the offset.  */
14311 	  tmp = new_loc_descr (DW_OP_deref, 0, 0);
14312 	  add_loc_descr (&loc_descr, tmp);
14313 
14314 	  /* Add it to the object address.  */
14315 	  tmp = new_loc_descr (DW_OP_plus, 0, 0);
14316 	  add_loc_descr (&loc_descr, tmp);
14317 	}
14318       else
14319 	offset = tree_low_cst (BINFO_OFFSET (decl), 0);
14320     }
14321   else
14322     offset = field_byte_offset (decl);
14323 
14324   if (! loc_descr)
14325     {
14326       if (dwarf_version > 2)
14327 	{
14328 	  /* Don't need to output a location expression, just the constant. */
14329 	  if (offset < 0)
14330 	    add_AT_int (die, DW_AT_data_member_location, offset);
14331 	  else
14332 	    add_AT_unsigned (die, DW_AT_data_member_location, offset);
14333 	  return;
14334 	}
14335       else
14336 	{
14337 	  enum dwarf_location_atom op;
14338 
14339 	  /* The DWARF2 standard says that we should assume that the structure
14340 	     address is already on the stack, so we can specify a structure
14341 	     field address by using DW_OP_plus_uconst.  */
14342 
14343 #ifdef MIPS_DEBUGGING_INFO
14344 	  /* ??? The SGI dwarf reader does not handle the DW_OP_plus_uconst
14345 	     operator correctly.  It works only if we leave the offset on the
14346 	     stack.  */
14347 	  op = DW_OP_constu;
14348 #else
14349 	  op = DW_OP_plus_uconst;
14350 #endif
14351 
14352 	  loc_descr = new_loc_descr (op, offset, 0);
14353 	}
14354     }
14355 
14356   add_AT_loc (die, DW_AT_data_member_location, loc_descr);
14357 }
14358 
14359 /* Writes integer values to dw_vec_const array.  */
14360 
14361 static void
14362 insert_int (HOST_WIDE_INT val, unsigned int size, unsigned char *dest)
14363 {
14364   while (size != 0)
14365     {
14366       *dest++ = val & 0xff;
14367       val >>= 8;
14368       --size;
14369     }
14370 }
14371 
14372 /* Reads integers from dw_vec_const array.  Inverse of insert_int.  */
14373 
14374 static HOST_WIDE_INT
14375 extract_int (const unsigned char *src, unsigned int size)
14376 {
14377   HOST_WIDE_INT val = 0;
14378 
14379   src += size;
14380   while (size != 0)
14381     {
14382       val <<= 8;
14383       val |= *--src & 0xff;
14384       --size;
14385     }
14386   return val;
14387 }
14388 
14389 /* Writes double_int values to dw_vec_const array.  */
14390 
14391 static void
14392 insert_double (double_int val, unsigned char *dest)
14393 {
14394   unsigned char *p0 = dest;
14395   unsigned char *p1 = dest + sizeof (HOST_WIDE_INT);
14396 
14397   if (WORDS_BIG_ENDIAN)
14398     {
14399       p0 = p1;
14400       p1 = dest;
14401     }
14402 
14403   insert_int ((HOST_WIDE_INT) val.low, sizeof (HOST_WIDE_INT), p0);
14404   insert_int ((HOST_WIDE_INT) val.high, sizeof (HOST_WIDE_INT), p1);
14405 }
14406 
14407 /* Writes floating point values to dw_vec_const array.  */
14408 
14409 static void
14410 insert_float (const_rtx rtl, unsigned char *array)
14411 {
14412   REAL_VALUE_TYPE rv;
14413   long val[4];
14414   int i;
14415 
14416   REAL_VALUE_FROM_CONST_DOUBLE (rv, rtl);
14417   real_to_target (val, &rv, GET_MODE (rtl));
14418 
14419   /* real_to_target puts 32-bit pieces in each long.  Pack them.  */
14420   for (i = 0; i < GET_MODE_SIZE (GET_MODE (rtl)) / 4; i++)
14421     {
14422       insert_int (val[i], 4, array);
14423       array += 4;
14424     }
14425 }
14426 
14427 /* Attach a DW_AT_const_value attribute for a variable or a parameter which
14428    does not have a "location" either in memory or in a register.  These
14429    things can arise in GNU C when a constant is passed as an actual parameter
14430    to an inlined function.  They can also arise in C++ where declared
14431    constants do not necessarily get memory "homes".  */
14432 
14433 static bool
14434 add_const_value_attribute (dw_die_ref die, rtx rtl)
14435 {
14436   switch (GET_CODE (rtl))
14437     {
14438     case CONST_INT:
14439       {
14440 	HOST_WIDE_INT val = INTVAL (rtl);
14441 
14442 	if (val < 0)
14443 	  add_AT_int (die, DW_AT_const_value, val);
14444 	else
14445 	  add_AT_unsigned (die, DW_AT_const_value, (unsigned HOST_WIDE_INT) val);
14446       }
14447       return true;
14448 
14449     case CONST_DOUBLE:
14450       /* Note that a CONST_DOUBLE rtx could represent either an integer or a
14451 	 floating-point constant.  A CONST_DOUBLE is used whenever the
14452 	 constant requires more than one word in order to be adequately
14453 	 represented.  */
14454       {
14455 	enum machine_mode mode = GET_MODE (rtl);
14456 
14457 	if (SCALAR_FLOAT_MODE_P (mode))
14458 	  {
14459 	    unsigned int length = GET_MODE_SIZE (mode);
14460 	    unsigned char *array = (unsigned char *) ggc_alloc_atomic (length);
14461 
14462 	    insert_float (rtl, array);
14463 	    add_AT_vec (die, DW_AT_const_value, length / 4, 4, array);
14464 	  }
14465 	else
14466 	  add_AT_double (die, DW_AT_const_value,
14467 			 CONST_DOUBLE_HIGH (rtl), CONST_DOUBLE_LOW (rtl));
14468       }
14469       return true;
14470 
14471     case CONST_VECTOR:
14472       {
14473 	enum machine_mode mode = GET_MODE (rtl);
14474 	unsigned int elt_size = GET_MODE_UNIT_SIZE (mode);
14475 	unsigned int length = CONST_VECTOR_NUNITS (rtl);
14476 	unsigned char *array = (unsigned char *) ggc_alloc_atomic
14477 	  (length * elt_size);
14478 	unsigned int i;
14479 	unsigned char *p;
14480 
14481 	switch (GET_MODE_CLASS (mode))
14482 	  {
14483 	  case MODE_VECTOR_INT:
14484 	    for (i = 0, p = array; i < length; i++, p += elt_size)
14485 	      {
14486 		rtx elt = CONST_VECTOR_ELT (rtl, i);
14487 		double_int val = rtx_to_double_int (elt);
14488 
14489 		if (elt_size <= sizeof (HOST_WIDE_INT))
14490 		  insert_int (double_int_to_shwi (val), elt_size, p);
14491 		else
14492 		  {
14493 		    gcc_assert (elt_size == 2 * sizeof (HOST_WIDE_INT));
14494 		    insert_double (val, p);
14495 		  }
14496 	      }
14497 	    break;
14498 
14499 	  case MODE_VECTOR_FLOAT:
14500 	    for (i = 0, p = array; i < length; i++, p += elt_size)
14501 	      {
14502 		rtx elt = CONST_VECTOR_ELT (rtl, i);
14503 		insert_float (elt, p);
14504 	      }
14505 	    break;
14506 
14507 	  default:
14508 	    gcc_unreachable ();
14509 	  }
14510 
14511 	add_AT_vec (die, DW_AT_const_value, length, elt_size, array);
14512       }
14513       return true;
14514 
14515     case CONST_STRING:
14516       if (dwarf_version >= 4 || !dwarf_strict)
14517 	{
14518 	  dw_loc_descr_ref loc_result;
14519 	  resolve_one_addr (&rtl, NULL);
14520 	rtl_addr:
14521 	  loc_result = new_loc_descr (DW_OP_addr, 0, 0);
14522 	  loc_result->dw_loc_oprnd1.val_class = dw_val_class_addr;
14523 	  loc_result->dw_loc_oprnd1.v.val_addr = rtl;
14524 	  add_loc_descr (&loc_result, new_loc_descr (DW_OP_stack_value, 0, 0));
14525 	  add_AT_loc (die, DW_AT_location, loc_result);
14526 	  VEC_safe_push (rtx, gc, used_rtx_array, rtl);
14527 	  return true;
14528 	}
14529       return false;
14530 
14531     case CONST:
14532       if (CONSTANT_P (XEXP (rtl, 0)))
14533 	return add_const_value_attribute (die, XEXP (rtl, 0));
14534       /* FALLTHROUGH */
14535     case SYMBOL_REF:
14536       if (!const_ok_for_output (rtl))
14537 	return false;
14538     case LABEL_REF:
14539       if (dwarf_version >= 4 || !dwarf_strict)
14540 	goto rtl_addr;
14541       return false;
14542 
14543     case PLUS:
14544       /* In cases where an inlined instance of an inline function is passed
14545 	 the address of an `auto' variable (which is local to the caller) we
14546 	 can get a situation where the DECL_RTL of the artificial local
14547 	 variable (for the inlining) which acts as a stand-in for the
14548 	 corresponding formal parameter (of the inline function) will look
14549 	 like (plus:SI (reg:SI FRAME_PTR) (const_int ...)).  This is not
14550 	 exactly a compile-time constant expression, but it isn't the address
14551 	 of the (artificial) local variable either.  Rather, it represents the
14552 	 *value* which the artificial local variable always has during its
14553 	 lifetime.  We currently have no way to represent such quasi-constant
14554 	 values in Dwarf, so for now we just punt and generate nothing.  */
14555       return false;
14556 
14557     case HIGH:
14558     case CONST_FIXED:
14559       return false;
14560 
14561     case MEM:
14562       if (GET_CODE (XEXP (rtl, 0)) == CONST_STRING
14563 	  && MEM_READONLY_P (rtl)
14564 	  && GET_MODE (rtl) == BLKmode)
14565 	{
14566 	  add_AT_string (die, DW_AT_const_value, XSTR (XEXP (rtl, 0), 0));
14567 	  return true;
14568 	}
14569       return false;
14570 
14571     default:
14572       /* No other kinds of rtx should be possible here.  */
14573       gcc_unreachable ();
14574     }
14575   return false;
14576 }
14577 
14578 /* Determine whether the evaluation of EXPR references any variables
14579    or functions which aren't otherwise used (and therefore may not be
14580    output).  */
14581 static tree
14582 reference_to_unused (tree * tp, int * walk_subtrees,
14583 		     void * data ATTRIBUTE_UNUSED)
14584 {
14585   if (! EXPR_P (*tp) && ! CONSTANT_CLASS_P (*tp))
14586     *walk_subtrees = 0;
14587 
14588   if (DECL_P (*tp) && ! TREE_PUBLIC (*tp) && ! TREE_USED (*tp)
14589       && ! TREE_ASM_WRITTEN (*tp))
14590     return *tp;
14591   /* ???  The C++ FE emits debug information for using decls, so
14592      putting gcc_unreachable here falls over.  See PR31899.  For now
14593      be conservative.  */
14594   else if (!cgraph_global_info_ready
14595 	   && (TREE_CODE (*tp) == VAR_DECL || TREE_CODE (*tp) == FUNCTION_DECL))
14596     return *tp;
14597   else if (TREE_CODE (*tp) == VAR_DECL)
14598     {
14599       struct varpool_node *node = varpool_get_node (*tp);
14600       if (!node || !node->needed)
14601 	return *tp;
14602     }
14603   else if (TREE_CODE (*tp) == FUNCTION_DECL
14604 	   && (!DECL_EXTERNAL (*tp) || DECL_DECLARED_INLINE_P (*tp)))
14605     {
14606       /* The call graph machinery must have finished analyzing,
14607          optimizing and gimplifying the CU by now.
14608 	 So if *TP has no call graph node associated
14609 	 to it, it means *TP will not be emitted.  */
14610       if (!cgraph_get_node (*tp))
14611 	return *tp;
14612     }
14613   else if (TREE_CODE (*tp) == STRING_CST && !TREE_ASM_WRITTEN (*tp))
14614     return *tp;
14615 
14616   return NULL_TREE;
14617 }
14618 
14619 /* Generate an RTL constant from a decl initializer INIT with decl type TYPE,
14620    for use in a later add_const_value_attribute call.  */
14621 
14622 static rtx
14623 rtl_for_decl_init (tree init, tree type)
14624 {
14625   rtx rtl = NULL_RTX;
14626 
14627   STRIP_NOPS (init);
14628 
14629   /* If a variable is initialized with a string constant without embedded
14630      zeros, build CONST_STRING.  */
14631   if (TREE_CODE (init) == STRING_CST && TREE_CODE (type) == ARRAY_TYPE)
14632     {
14633       tree enttype = TREE_TYPE (type);
14634       tree domain = TYPE_DOMAIN (type);
14635       enum machine_mode mode = TYPE_MODE (enttype);
14636 
14637       if (GET_MODE_CLASS (mode) == MODE_INT && GET_MODE_SIZE (mode) == 1
14638 	  && domain
14639 	  && integer_zerop (TYPE_MIN_VALUE (domain))
14640 	  && compare_tree_int (TYPE_MAX_VALUE (domain),
14641 			       TREE_STRING_LENGTH (init) - 1) == 0
14642 	  && ((size_t) TREE_STRING_LENGTH (init)
14643 	      == strlen (TREE_STRING_POINTER (init)) + 1))
14644 	{
14645 	  rtl = gen_rtx_CONST_STRING (VOIDmode,
14646 				      ggc_strdup (TREE_STRING_POINTER (init)));
14647 	  rtl = gen_rtx_MEM (BLKmode, rtl);
14648 	  MEM_READONLY_P (rtl) = 1;
14649 	}
14650     }
14651   /* Other aggregates, and complex values, could be represented using
14652      CONCAT: FIXME!  */
14653   else if (AGGREGATE_TYPE_P (type)
14654 	   || (TREE_CODE (init) == VIEW_CONVERT_EXPR
14655 	       && AGGREGATE_TYPE_P (TREE_TYPE (TREE_OPERAND (init, 0))))
14656 	   || TREE_CODE (type) == COMPLEX_TYPE)
14657     ;
14658   /* Vectors only work if their mode is supported by the target.
14659      FIXME: generic vectors ought to work too.  */
14660   else if (TREE_CODE (type) == VECTOR_TYPE
14661 	   && !VECTOR_MODE_P (TYPE_MODE (type)))
14662     ;
14663   /* If the initializer is something that we know will expand into an
14664      immediate RTL constant, expand it now.  We must be careful not to
14665      reference variables which won't be output.  */
14666   else if (initializer_constant_valid_p (init, type)
14667 	   && ! walk_tree (&init, reference_to_unused, NULL, NULL))
14668     {
14669       /* Convert vector CONSTRUCTOR initializers to VECTOR_CST if
14670 	 possible.  */
14671       if (TREE_CODE (type) == VECTOR_TYPE)
14672 	switch (TREE_CODE (init))
14673 	  {
14674 	  case VECTOR_CST:
14675 	    break;
14676 	  case CONSTRUCTOR:
14677 	    if (TREE_CONSTANT (init))
14678 	      {
14679 		VEC(constructor_elt,gc) *elts = CONSTRUCTOR_ELTS (init);
14680 		bool constant_p = true;
14681 		tree value;
14682 		unsigned HOST_WIDE_INT ix;
14683 
14684 		/* Even when ctor is constant, it might contain non-*_CST
14685 		   elements (e.g. { 1.0/0.0 - 1.0/0.0, 0.0 }) and those don't
14686 		   belong into VECTOR_CST nodes.  */
14687 		FOR_EACH_CONSTRUCTOR_VALUE (elts, ix, value)
14688 		  if (!CONSTANT_CLASS_P (value))
14689 		    {
14690 		      constant_p = false;
14691 		      break;
14692 		    }
14693 
14694 		if (constant_p)
14695 		  {
14696 		    init = build_vector_from_ctor (type, elts);
14697 		    break;
14698 		  }
14699 	      }
14700 	    /* FALLTHRU */
14701 
14702 	  default:
14703 	    return NULL;
14704 	  }
14705 
14706       rtl = expand_expr (init, NULL_RTX, VOIDmode, EXPAND_INITIALIZER);
14707 
14708       /* If expand_expr returns a MEM, it wasn't immediate.  */
14709       gcc_assert (!rtl || !MEM_P (rtl));
14710     }
14711 
14712   return rtl;
14713 }
14714 
14715 /* Generate RTL for the variable DECL to represent its location.  */
14716 
14717 static rtx
14718 rtl_for_decl_location (tree decl)
14719 {
14720   rtx rtl;
14721 
14722   /* Here we have to decide where we are going to say the parameter "lives"
14723      (as far as the debugger is concerned).  We only have a couple of
14724      choices.  GCC provides us with DECL_RTL and with DECL_INCOMING_RTL.
14725 
14726      DECL_RTL normally indicates where the parameter lives during most of the
14727      activation of the function.  If optimization is enabled however, this
14728      could be either NULL or else a pseudo-reg.  Both of those cases indicate
14729      that the parameter doesn't really live anywhere (as far as the code
14730      generation parts of GCC are concerned) during most of the function's
14731      activation.  That will happen (for example) if the parameter is never
14732      referenced within the function.
14733 
14734      We could just generate a location descriptor here for all non-NULL
14735      non-pseudo values of DECL_RTL and ignore all of the rest, but we can be
14736      a little nicer than that if we also consider DECL_INCOMING_RTL in cases
14737      where DECL_RTL is NULL or is a pseudo-reg.
14738 
14739      Note however that we can only get away with using DECL_INCOMING_RTL as
14740      a backup substitute for DECL_RTL in certain limited cases.  In cases
14741      where DECL_ARG_TYPE (decl) indicates the same type as TREE_TYPE (decl),
14742      we can be sure that the parameter was passed using the same type as it is
14743      declared to have within the function, and that its DECL_INCOMING_RTL
14744      points us to a place where a value of that type is passed.
14745 
14746      In cases where DECL_ARG_TYPE (decl) and TREE_TYPE (decl) are different,
14747      we cannot (in general) use DECL_INCOMING_RTL as a substitute for DECL_RTL
14748      because in these cases DECL_INCOMING_RTL points us to a value of some
14749      type which is *different* from the type of the parameter itself.  Thus,
14750      if we tried to use DECL_INCOMING_RTL to generate a location attribute in
14751      such cases, the debugger would end up (for example) trying to fetch a
14752      `float' from a place which actually contains the first part of a
14753      `double'.  That would lead to really incorrect and confusing
14754      output at debug-time.
14755 
14756      So, in general, we *do not* use DECL_INCOMING_RTL as a backup for DECL_RTL
14757      in cases where DECL_ARG_TYPE (decl) != TREE_TYPE (decl).  There
14758      are a couple of exceptions however.  On little-endian machines we can
14759      get away with using DECL_INCOMING_RTL even when DECL_ARG_TYPE (decl) is
14760      not the same as TREE_TYPE (decl), but only when DECL_ARG_TYPE (decl) is
14761      an integral type that is smaller than TREE_TYPE (decl). These cases arise
14762      when (on a little-endian machine) a non-prototyped function has a
14763      parameter declared to be of type `short' or `char'.  In such cases,
14764      TREE_TYPE (decl) will be `short' or `char', DECL_ARG_TYPE (decl) will
14765      be `int', and DECL_INCOMING_RTL will point to the lowest-order byte of the
14766      passed `int' value.  If the debugger then uses that address to fetch
14767      a `short' or a `char' (on a little-endian machine) the result will be
14768      the correct data, so we allow for such exceptional cases below.
14769 
14770      Note that our goal here is to describe the place where the given formal
14771      parameter lives during most of the function's activation (i.e. between the
14772      end of the prologue and the start of the epilogue).  We'll do that as best
14773      as we can. Note however that if the given formal parameter is modified
14774      sometime during the execution of the function, then a stack backtrace (at
14775      debug-time) will show the function as having been called with the *new*
14776      value rather than the value which was originally passed in.  This happens
14777      rarely enough that it is not a major problem, but it *is* a problem, and
14778      I'd like to fix it.
14779 
14780      A future version of dwarf2out.c may generate two additional attributes for
14781      any given DW_TAG_formal_parameter DIE which will describe the "passed
14782      type" and the "passed location" for the given formal parameter in addition
14783      to the attributes we now generate to indicate the "declared type" and the
14784      "active location" for each parameter.  This additional set of attributes
14785      could be used by debuggers for stack backtraces. Separately, note that
14786      sometimes DECL_RTL can be NULL and DECL_INCOMING_RTL can be NULL also.
14787      This happens (for example) for inlined-instances of inline function formal
14788      parameters which are never referenced.  This really shouldn't be
14789      happening.  All PARM_DECL nodes should get valid non-NULL
14790      DECL_INCOMING_RTL values.  FIXME.  */
14791 
14792   /* Use DECL_RTL as the "location" unless we find something better.  */
14793   rtl = DECL_RTL_IF_SET (decl);
14794 
14795   /* When generating abstract instances, ignore everything except
14796      constants, symbols living in memory, and symbols living in
14797      fixed registers.  */
14798   if (! reload_completed)
14799     {
14800       if (rtl
14801 	  && (CONSTANT_P (rtl)
14802 	      || (MEM_P (rtl)
14803 	          && CONSTANT_P (XEXP (rtl, 0)))
14804 	      || (REG_P (rtl)
14805 	          && TREE_CODE (decl) == VAR_DECL
14806 		  && TREE_STATIC (decl))))
14807 	{
14808 	  rtl = targetm.delegitimize_address (rtl);
14809 	  return rtl;
14810 	}
14811       rtl = NULL_RTX;
14812     }
14813   else if (TREE_CODE (decl) == PARM_DECL)
14814     {
14815       if (rtl == NULL_RTX
14816 	  || is_pseudo_reg (rtl)
14817 	  || (MEM_P (rtl)
14818 	      && is_pseudo_reg (XEXP (rtl, 0))
14819 	      && DECL_INCOMING_RTL (decl)
14820 	      && MEM_P (DECL_INCOMING_RTL (decl))
14821 	      && GET_MODE (rtl) == GET_MODE (DECL_INCOMING_RTL (decl))))
14822 	{
14823 	  tree declared_type = TREE_TYPE (decl);
14824 	  tree passed_type = DECL_ARG_TYPE (decl);
14825 	  enum machine_mode dmode = TYPE_MODE (declared_type);
14826 	  enum machine_mode pmode = TYPE_MODE (passed_type);
14827 
14828 	  /* This decl represents a formal parameter which was optimized out.
14829 	     Note that DECL_INCOMING_RTL may be NULL in here, but we handle
14830 	     all cases where (rtl == NULL_RTX) just below.  */
14831 	  if (dmode == pmode)
14832 	    rtl = DECL_INCOMING_RTL (decl);
14833 	  else if ((rtl == NULL_RTX || is_pseudo_reg (rtl))
14834 		   && SCALAR_INT_MODE_P (dmode)
14835 		   && GET_MODE_SIZE (dmode) <= GET_MODE_SIZE (pmode)
14836 		   && DECL_INCOMING_RTL (decl))
14837 	    {
14838 	      rtx inc = DECL_INCOMING_RTL (decl);
14839 	      if (REG_P (inc))
14840 		rtl = inc;
14841 	      else if (MEM_P (inc))
14842 		{
14843 		  if (BYTES_BIG_ENDIAN)
14844 		    rtl = adjust_address_nv (inc, dmode,
14845 					     GET_MODE_SIZE (pmode)
14846 					     - GET_MODE_SIZE (dmode));
14847 		  else
14848 		    rtl = inc;
14849 		}
14850 	    }
14851 	}
14852 
14853       /* If the parm was passed in registers, but lives on the stack, then
14854 	 make a big endian correction if the mode of the type of the
14855 	 parameter is not the same as the mode of the rtl.  */
14856       /* ??? This is the same series of checks that are made in dbxout.c before
14857 	 we reach the big endian correction code there.  It isn't clear if all
14858 	 of these checks are necessary here, but keeping them all is the safe
14859 	 thing to do.  */
14860       else if (MEM_P (rtl)
14861 	       && XEXP (rtl, 0) != const0_rtx
14862 	       && ! CONSTANT_P (XEXP (rtl, 0))
14863 	       /* Not passed in memory.  */
14864 	       && !MEM_P (DECL_INCOMING_RTL (decl))
14865 	       /* Not passed by invisible reference.  */
14866 	       && (!REG_P (XEXP (rtl, 0))
14867 		   || REGNO (XEXP (rtl, 0)) == HARD_FRAME_POINTER_REGNUM
14868 		   || REGNO (XEXP (rtl, 0)) == STACK_POINTER_REGNUM
14869 #if !HARD_FRAME_POINTER_IS_ARG_POINTER
14870 		   || REGNO (XEXP (rtl, 0)) == ARG_POINTER_REGNUM
14871 #endif
14872 		     )
14873 	       /* Big endian correction check.  */
14874 	       && BYTES_BIG_ENDIAN
14875 	       && TYPE_MODE (TREE_TYPE (decl)) != GET_MODE (rtl)
14876 	       && (GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (decl)))
14877 		   < UNITS_PER_WORD))
14878 	{
14879 	  int offset = (UNITS_PER_WORD
14880 			- GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (decl))));
14881 
14882 	  rtl = gen_rtx_MEM (TYPE_MODE (TREE_TYPE (decl)),
14883 			     plus_constant (XEXP (rtl, 0), offset));
14884 	}
14885     }
14886   else if (TREE_CODE (decl) == VAR_DECL
14887 	   && rtl
14888 	   && MEM_P (rtl)
14889 	   && GET_MODE (rtl) != TYPE_MODE (TREE_TYPE (decl))
14890 	   && BYTES_BIG_ENDIAN)
14891     {
14892       int rsize = GET_MODE_SIZE (GET_MODE (rtl));
14893       int dsize = GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (decl)));
14894 
14895       /* If a variable is declared "register" yet is smaller than
14896 	 a register, then if we store the variable to memory, it
14897 	 looks like we're storing a register-sized value, when in
14898 	 fact we are not.  We need to adjust the offset of the
14899 	 storage location to reflect the actual value's bytes,
14900 	 else gdb will not be able to display it.  */
14901       if (rsize > dsize)
14902 	rtl = gen_rtx_MEM (TYPE_MODE (TREE_TYPE (decl)),
14903 			   plus_constant (XEXP (rtl, 0), rsize-dsize));
14904     }
14905 
14906   /* A variable with no DECL_RTL but a DECL_INITIAL is a compile-time constant,
14907      and will have been substituted directly into all expressions that use it.
14908      C does not have such a concept, but C++ and other languages do.  */
14909   if (!rtl && TREE_CODE (decl) == VAR_DECL && DECL_INITIAL (decl))
14910     rtl = rtl_for_decl_init (DECL_INITIAL (decl), TREE_TYPE (decl));
14911 
14912   if (rtl)
14913     rtl = targetm.delegitimize_address (rtl);
14914 
14915   /* If we don't look past the constant pool, we risk emitting a
14916      reference to a constant pool entry that isn't referenced from
14917      code, and thus is not emitted.  */
14918   if (rtl)
14919     rtl = avoid_constant_pool_reference (rtl);
14920 
14921   /* Try harder to get a rtl.  If this symbol ends up not being emitted
14922      in the current CU, resolve_addr will remove the expression referencing
14923      it.  */
14924   if (rtl == NULL_RTX
14925       && TREE_CODE (decl) == VAR_DECL
14926       && !DECL_EXTERNAL (decl)
14927       && TREE_STATIC (decl)
14928       && DECL_NAME (decl)
14929       && !DECL_HARD_REGISTER (decl)
14930       && DECL_MODE (decl) != VOIDmode)
14931     {
14932       rtl = make_decl_rtl_for_debug (decl);
14933       if (!MEM_P (rtl)
14934 	  || GET_CODE (XEXP (rtl, 0)) != SYMBOL_REF
14935 	  || SYMBOL_REF_DECL (XEXP (rtl, 0)) != decl)
14936 	rtl = NULL_RTX;
14937     }
14938 
14939   return rtl;
14940 }
14941 
14942 /* Check whether decl is a Fortran COMMON symbol.  If not, NULL_TREE is
14943    returned.  If so, the decl for the COMMON block is returned, and the
14944    value is the offset into the common block for the symbol.  */
14945 
14946 static tree
14947 fortran_common (tree decl, HOST_WIDE_INT *value)
14948 {
14949   tree val_expr, cvar;
14950   enum machine_mode mode;
14951   HOST_WIDE_INT bitsize, bitpos;
14952   tree offset;
14953   int volatilep = 0, unsignedp = 0;
14954 
14955   /* If the decl isn't a VAR_DECL, or if it isn't static, or if
14956      it does not have a value (the offset into the common area), or if it
14957      is thread local (as opposed to global) then it isn't common, and shouldn't
14958      be handled as such.  */
14959   if (TREE_CODE (decl) != VAR_DECL
14960       || !TREE_STATIC (decl)
14961       || !DECL_HAS_VALUE_EXPR_P (decl)
14962       || !is_fortran ())
14963     return NULL_TREE;
14964 
14965   val_expr = DECL_VALUE_EXPR (decl);
14966   if (TREE_CODE (val_expr) != COMPONENT_REF)
14967     return NULL_TREE;
14968 
14969   cvar = get_inner_reference (val_expr, &bitsize, &bitpos, &offset,
14970 			      &mode, &unsignedp, &volatilep, true);
14971 
14972   if (cvar == NULL_TREE
14973       || TREE_CODE (cvar) != VAR_DECL
14974       || DECL_ARTIFICIAL (cvar)
14975       || !TREE_PUBLIC (cvar))
14976     return NULL_TREE;
14977 
14978   *value = 0;
14979   if (offset != NULL)
14980     {
14981       if (!host_integerp (offset, 0))
14982 	return NULL_TREE;
14983       *value = tree_low_cst (offset, 0);
14984     }
14985   if (bitpos != 0)
14986     *value += bitpos / BITS_PER_UNIT;
14987 
14988   return cvar;
14989 }
14990 
14991 /* Generate *either* a DW_AT_location attribute or else a DW_AT_const_value
14992    data attribute for a variable or a parameter.  We generate the
14993    DW_AT_const_value attribute only in those cases where the given variable
14994    or parameter does not have a true "location" either in memory or in a
14995    register.  This can happen (for example) when a constant is passed as an
14996    actual argument in a call to an inline function.  (It's possible that
14997    these things can crop up in other ways also.)  Note that one type of
14998    constant value which can be passed into an inlined function is a constant
14999    pointer.  This can happen for example if an actual argument in an inlined
15000    function call evaluates to a compile-time constant address.
15001 
15002    CACHE_P is true if it is worth caching the location list for DECL,
15003    so that future calls can reuse it rather than regenerate it from scratch.
15004    This is true for BLOCK_NONLOCALIZED_VARS in inlined subroutines,
15005    since we will need to refer to them each time the function is inlined.  */
15006 
15007 static bool
15008 add_location_or_const_value_attribute (dw_die_ref die, tree decl, bool cache_p,
15009 				       enum dwarf_attribute attr)
15010 {
15011   rtx rtl;
15012   dw_loc_list_ref list;
15013   var_loc_list *loc_list;
15014   cached_dw_loc_list *cache;
15015   void **slot;
15016 
15017   if (TREE_CODE (decl) == ERROR_MARK)
15018     return false;
15019 
15020   gcc_assert (TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == PARM_DECL
15021 	      || TREE_CODE (decl) == RESULT_DECL);
15022 
15023   /* Try to get some constant RTL for this decl, and use that as the value of
15024      the location.  */
15025 
15026   rtl = rtl_for_decl_location (decl);
15027   if (rtl && (CONSTANT_P (rtl) || GET_CODE (rtl) == CONST_STRING)
15028       && add_const_value_attribute (die, rtl))
15029     return true;
15030 
15031   /* See if we have single element location list that is equivalent to
15032      a constant value.  That way we are better to use add_const_value_attribute
15033      rather than expanding constant value equivalent.  */
15034   loc_list = lookup_decl_loc (decl);
15035   if (loc_list
15036       && loc_list->first
15037       && loc_list->first->next == NULL
15038       && NOTE_P (loc_list->first->loc)
15039       && NOTE_VAR_LOCATION (loc_list->first->loc)
15040       && NOTE_VAR_LOCATION_LOC (loc_list->first->loc))
15041     {
15042       struct var_loc_node *node;
15043 
15044       node = loc_list->first;
15045       rtl = NOTE_VAR_LOCATION_LOC (node->loc);
15046       if (GET_CODE (rtl) == EXPR_LIST)
15047 	rtl = XEXP (rtl, 0);
15048       if ((CONSTANT_P (rtl) || GET_CODE (rtl) == CONST_STRING)
15049 	  && add_const_value_attribute (die, rtl))
15050 	 return true;
15051     }
15052   /* If this decl is from BLOCK_NONLOCALIZED_VARS, we might need its
15053      list several times.  See if we've already cached the contents.  */
15054   list = NULL;
15055   if (loc_list == NULL || cached_dw_loc_list_table == NULL)
15056     cache_p = false;
15057   if (cache_p)
15058     {
15059       cache = (cached_dw_loc_list *)
15060 	htab_find_with_hash (cached_dw_loc_list_table, decl, DECL_UID (decl));
15061       if (cache)
15062 	list = cache->loc_list;
15063     }
15064   if (list == NULL)
15065     {
15066       list = loc_list_from_tree (decl, decl_by_reference_p (decl) ? 0 : 2);
15067       /* It is usually worth caching this result if the decl is from
15068 	 BLOCK_NONLOCALIZED_VARS and if the list has at least two elements.  */
15069       if (cache_p && list && list->dw_loc_next)
15070 	{
15071 	  slot = htab_find_slot_with_hash (cached_dw_loc_list_table, decl,
15072 					   DECL_UID (decl), INSERT);
15073 	  cache = ggc_alloc_cleared_cached_dw_loc_list ();
15074 	  cache->decl_id = DECL_UID (decl);
15075 	  cache->loc_list = list;
15076 	  *slot = cache;
15077 	}
15078     }
15079   if (list)
15080     {
15081       add_AT_location_description (die, attr, list);
15082       return true;
15083     }
15084   /* None of that worked, so it must not really have a location;
15085      try adding a constant value attribute from the DECL_INITIAL.  */
15086   return tree_add_const_value_attribute_for_decl (die, decl);
15087 }
15088 
15089 /* Add VARIABLE and DIE into deferred locations list.  */
15090 
15091 static void
15092 defer_location (tree variable, dw_die_ref die)
15093 {
15094   deferred_locations entry;
15095   entry.variable = variable;
15096   entry.die = die;
15097   VEC_safe_push (deferred_locations, gc, deferred_locations_list, &entry);
15098 }
15099 
15100 /* Helper function for tree_add_const_value_attribute.  Natively encode
15101    initializer INIT into an array.  Return true if successful.  */
15102 
15103 static bool
15104 native_encode_initializer (tree init, unsigned char *array, int size)
15105 {
15106   tree type;
15107 
15108   if (init == NULL_TREE)
15109     return false;
15110 
15111   STRIP_NOPS (init);
15112   switch (TREE_CODE (init))
15113     {
15114     case STRING_CST:
15115       type = TREE_TYPE (init);
15116       if (TREE_CODE (type) == ARRAY_TYPE)
15117 	{
15118 	  tree enttype = TREE_TYPE (type);
15119 	  enum machine_mode mode = TYPE_MODE (enttype);
15120 
15121 	  if (GET_MODE_CLASS (mode) != MODE_INT || GET_MODE_SIZE (mode) != 1)
15122 	    return false;
15123 	  if (int_size_in_bytes (type) != size)
15124 	    return false;
15125 	  if (size > TREE_STRING_LENGTH (init))
15126 	    {
15127 	      memcpy (array, TREE_STRING_POINTER (init),
15128 		      TREE_STRING_LENGTH (init));
15129 	      memset (array + TREE_STRING_LENGTH (init),
15130 		      '\0', size - TREE_STRING_LENGTH (init));
15131 	    }
15132 	  else
15133 	    memcpy (array, TREE_STRING_POINTER (init), size);
15134 	  return true;
15135 	}
15136       return false;
15137     case CONSTRUCTOR:
15138       type = TREE_TYPE (init);
15139       if (int_size_in_bytes (type) != size)
15140 	return false;
15141       if (TREE_CODE (type) == ARRAY_TYPE)
15142 	{
15143 	  HOST_WIDE_INT min_index;
15144 	  unsigned HOST_WIDE_INT cnt;
15145 	  int curpos = 0, fieldsize;
15146 	  constructor_elt *ce;
15147 
15148 	  if (TYPE_DOMAIN (type) == NULL_TREE
15149 	      || !host_integerp (TYPE_MIN_VALUE (TYPE_DOMAIN (type)), 0))
15150 	    return false;
15151 
15152 	  fieldsize = int_size_in_bytes (TREE_TYPE (type));
15153 	  if (fieldsize <= 0)
15154 	    return false;
15155 
15156 	  min_index = tree_low_cst (TYPE_MIN_VALUE (TYPE_DOMAIN (type)), 0);
15157 	  memset (array, '\0', size);
15158 	  FOR_EACH_VEC_ELT (constructor_elt, CONSTRUCTOR_ELTS (init), cnt, ce)
15159 	    {
15160 	      tree val = ce->value;
15161 	      tree index = ce->index;
15162 	      int pos = curpos;
15163 	      if (index && TREE_CODE (index) == RANGE_EXPR)
15164 		pos = (tree_low_cst (TREE_OPERAND (index, 0), 0) - min_index)
15165 		      * fieldsize;
15166 	      else if (index)
15167 		pos = (tree_low_cst (index, 0) - min_index) * fieldsize;
15168 
15169 	      if (val)
15170 		{
15171 		  STRIP_NOPS (val);
15172 		  if (!native_encode_initializer (val, array + pos, fieldsize))
15173 		    return false;
15174 		}
15175 	      curpos = pos + fieldsize;
15176 	      if (index && TREE_CODE (index) == RANGE_EXPR)
15177 		{
15178 		  int count = tree_low_cst (TREE_OPERAND (index, 1), 0)
15179 			      - tree_low_cst (TREE_OPERAND (index, 0), 0);
15180 		  while (count-- > 0)
15181 		    {
15182 		      if (val)
15183 			memcpy (array + curpos, array + pos, fieldsize);
15184 		      curpos += fieldsize;
15185 		    }
15186 		}
15187 	      gcc_assert (curpos <= size);
15188 	    }
15189 	  return true;
15190 	}
15191       else if (TREE_CODE (type) == RECORD_TYPE
15192 	       || TREE_CODE (type) == UNION_TYPE)
15193 	{
15194 	  tree field = NULL_TREE;
15195 	  unsigned HOST_WIDE_INT cnt;
15196 	  constructor_elt *ce;
15197 
15198 	  if (int_size_in_bytes (type) != size)
15199 	    return false;
15200 
15201 	  if (TREE_CODE (type) == RECORD_TYPE)
15202 	    field = TYPE_FIELDS (type);
15203 
15204 	  FOR_EACH_VEC_ELT (constructor_elt, CONSTRUCTOR_ELTS (init), cnt, ce)
15205 	    {
15206 	      tree val = ce->value;
15207 	      int pos, fieldsize;
15208 
15209 	      if (ce->index != 0)
15210 		field = ce->index;
15211 
15212 	      if (val)
15213 		STRIP_NOPS (val);
15214 
15215 	      if (field == NULL_TREE || DECL_BIT_FIELD (field))
15216 		return false;
15217 
15218 	      if (TREE_CODE (TREE_TYPE (field)) == ARRAY_TYPE
15219 		  && TYPE_DOMAIN (TREE_TYPE (field))
15220 		  && ! TYPE_MAX_VALUE (TYPE_DOMAIN (TREE_TYPE (field))))
15221 		return false;
15222 	      else if (DECL_SIZE_UNIT (field) == NULL_TREE
15223 		       || !host_integerp (DECL_SIZE_UNIT (field), 0))
15224 		return false;
15225 	      fieldsize = tree_low_cst (DECL_SIZE_UNIT (field), 0);
15226 	      pos = int_byte_position (field);
15227 	      gcc_assert (pos + fieldsize <= size);
15228 	      if (val
15229 		  && !native_encode_initializer (val, array + pos, fieldsize))
15230 		return false;
15231 	    }
15232 	  return true;
15233 	}
15234       return false;
15235     case VIEW_CONVERT_EXPR:
15236     case NON_LVALUE_EXPR:
15237       return native_encode_initializer (TREE_OPERAND (init, 0), array, size);
15238     default:
15239       return native_encode_expr (init, array, size) == size;
15240     }
15241 }
15242 
15243 /* Attach a DW_AT_const_value attribute to DIE. The value of the
15244    attribute is the const value T.  */
15245 
15246 static bool
15247 tree_add_const_value_attribute (dw_die_ref die, tree t)
15248 {
15249   tree init;
15250   tree type = TREE_TYPE (t);
15251   rtx rtl;
15252 
15253   if (!t || !TREE_TYPE (t) || TREE_TYPE (t) == error_mark_node)
15254     return false;
15255 
15256   init = t;
15257   gcc_assert (!DECL_P (init));
15258 
15259   rtl = rtl_for_decl_init (init, type);
15260   if (rtl)
15261     return add_const_value_attribute (die, rtl);
15262   /* If the host and target are sane, try harder.  */
15263   else if (CHAR_BIT == 8 && BITS_PER_UNIT == 8
15264 	   && initializer_constant_valid_p (init, type))
15265     {
15266       HOST_WIDE_INT size = int_size_in_bytes (TREE_TYPE (init));
15267       if (size > 0 && (int) size == size)
15268 	{
15269 	  unsigned char *array = (unsigned char *)
15270 	    ggc_alloc_cleared_atomic (size);
15271 
15272 	  if (native_encode_initializer (init, array, size))
15273 	    {
15274 	      add_AT_vec (die, DW_AT_const_value, size, 1, array);
15275 	      return true;
15276 	    }
15277 	}
15278     }
15279   return false;
15280 }
15281 
15282 /* Attach a DW_AT_const_value attribute to VAR_DIE. The value of the
15283    attribute is the const value of T, where T is an integral constant
15284    variable with static storage duration
15285    (so it can't be a PARM_DECL or a RESULT_DECL).  */
15286 
15287 static bool
15288 tree_add_const_value_attribute_for_decl (dw_die_ref var_die, tree decl)
15289 {
15290 
15291   if (!decl
15292       || (TREE_CODE (decl) != VAR_DECL
15293 	  && TREE_CODE (decl) != CONST_DECL)
15294       || (TREE_CODE (decl) == VAR_DECL
15295 	  && !TREE_STATIC (decl)))
15296     return false;
15297 
15298     if (TREE_READONLY (decl)
15299 	&& ! TREE_THIS_VOLATILE (decl)
15300 	&& DECL_INITIAL (decl))
15301       /* OK */;
15302     else
15303       return false;
15304 
15305   /* Don't add DW_AT_const_value if abstract origin already has one.  */
15306   if (get_AT (var_die, DW_AT_const_value))
15307     return false;
15308 
15309   return tree_add_const_value_attribute (var_die, DECL_INITIAL (decl));
15310 }
15311 
15312 /* Convert the CFI instructions for the current function into a
15313    location list.  This is used for DW_AT_frame_base when we targeting
15314    a dwarf2 consumer that does not support the dwarf3
15315    DW_OP_call_frame_cfa.  OFFSET is a constant to be added to all CFA
15316    expressions.  */
15317 
15318 static dw_loc_list_ref
15319 convert_cfa_to_fb_loc_list (HOST_WIDE_INT offset)
15320 {
15321   int ix;
15322   dw_fde_ref fde;
15323   dw_loc_list_ref list, *list_tail;
15324   dw_cfi_ref cfi;
15325   dw_cfa_location last_cfa, next_cfa;
15326   const char *start_label, *last_label, *section;
15327   dw_cfa_location remember;
15328 
15329   fde = cfun->fde;
15330   gcc_assert (fde != NULL);
15331 
15332   section = secname_for_decl (current_function_decl);
15333   list_tail = &list;
15334   list = NULL;
15335 
15336   memset (&next_cfa, 0, sizeof (next_cfa));
15337   next_cfa.reg = INVALID_REGNUM;
15338   remember = next_cfa;
15339 
15340   start_label = fde->dw_fde_begin;
15341 
15342   /* ??? Bald assumption that the CIE opcode list does not contain
15343      advance opcodes.  */
15344   FOR_EACH_VEC_ELT (dw_cfi_ref, cie_cfi_vec, ix, cfi)
15345     lookup_cfa_1 (cfi, &next_cfa, &remember);
15346 
15347   last_cfa = next_cfa;
15348   last_label = start_label;
15349 
15350   if (fde->dw_fde_second_begin && fde->dw_fde_switch_cfi_index == 0)
15351     {
15352       /* If the first partition contained no CFI adjustments, the
15353 	 CIE opcodes apply to the whole first partition.  */
15354       *list_tail = new_loc_list (build_cfa_loc (&last_cfa, offset),
15355 				 fde->dw_fde_begin, fde->dw_fde_end, section);
15356       list_tail =&(*list_tail)->dw_loc_next;
15357       start_label = last_label = fde->dw_fde_second_begin;
15358     }
15359 
15360   FOR_EACH_VEC_ELT (dw_cfi_ref, fde->dw_fde_cfi, ix, cfi)
15361     {
15362       switch (cfi->dw_cfi_opc)
15363 	{
15364 	case DW_CFA_set_loc:
15365 	case DW_CFA_advance_loc1:
15366 	case DW_CFA_advance_loc2:
15367 	case DW_CFA_advance_loc4:
15368 	  if (!cfa_equal_p (&last_cfa, &next_cfa))
15369 	    {
15370 	      *list_tail = new_loc_list (build_cfa_loc (&last_cfa, offset),
15371 					 start_label, last_label, section);
15372 
15373 	      list_tail = &(*list_tail)->dw_loc_next;
15374 	      last_cfa = next_cfa;
15375 	      start_label = last_label;
15376 	    }
15377 	  last_label = cfi->dw_cfi_oprnd1.dw_cfi_addr;
15378 	  break;
15379 
15380 	case DW_CFA_advance_loc:
15381 	  /* The encoding is complex enough that we should never emit this.  */
15382 	  gcc_unreachable ();
15383 
15384 	default:
15385 	  lookup_cfa_1 (cfi, &next_cfa, &remember);
15386 	  break;
15387 	}
15388       if (ix + 1 == fde->dw_fde_switch_cfi_index)
15389 	{
15390 	  if (!cfa_equal_p (&last_cfa, &next_cfa))
15391 	    {
15392 	      *list_tail = new_loc_list (build_cfa_loc (&last_cfa, offset),
15393 					 start_label, last_label, section);
15394 
15395 	      list_tail = &(*list_tail)->dw_loc_next;
15396 	      last_cfa = next_cfa;
15397 	      start_label = last_label;
15398 	    }
15399 	  *list_tail = new_loc_list (build_cfa_loc (&last_cfa, offset),
15400 				     start_label, fde->dw_fde_end, section);
15401 	  list_tail = &(*list_tail)->dw_loc_next;
15402 	  start_label = last_label = fde->dw_fde_second_begin;
15403 	}
15404     }
15405 
15406   if (!cfa_equal_p (&last_cfa, &next_cfa))
15407     {
15408       *list_tail = new_loc_list (build_cfa_loc (&last_cfa, offset),
15409 				 start_label, last_label, section);
15410       list_tail = &(*list_tail)->dw_loc_next;
15411       start_label = last_label;
15412     }
15413 
15414   *list_tail = new_loc_list (build_cfa_loc (&next_cfa, offset),
15415 			     start_label,
15416 			     fde->dw_fde_second_begin
15417 			     ? fde->dw_fde_second_end : fde->dw_fde_end,
15418 			     section);
15419 
15420   if (list && list->dw_loc_next)
15421     gen_llsym (list);
15422 
15423   return list;
15424 }
15425 
15426 /* Compute a displacement from the "steady-state frame pointer" to the
15427    frame base (often the same as the CFA), and store it in
15428    frame_pointer_fb_offset.  OFFSET is added to the displacement
15429    before the latter is negated.  */
15430 
15431 static void
15432 compute_frame_pointer_to_fb_displacement (HOST_WIDE_INT offset)
15433 {
15434   rtx reg, elim;
15435 
15436 #ifdef FRAME_POINTER_CFA_OFFSET
15437   reg = frame_pointer_rtx;
15438   offset += FRAME_POINTER_CFA_OFFSET (current_function_decl);
15439 #else
15440   reg = arg_pointer_rtx;
15441   offset += ARG_POINTER_CFA_OFFSET (current_function_decl);
15442 #endif
15443 
15444   elim = eliminate_regs (reg, VOIDmode, NULL_RTX);
15445   if (GET_CODE (elim) == PLUS)
15446     {
15447       offset += INTVAL (XEXP (elim, 1));
15448       elim = XEXP (elim, 0);
15449     }
15450 
15451   frame_pointer_fb_offset = -offset;
15452 
15453   /* ??? AVR doesn't set up valid eliminations when there is no stack frame
15454      in which to eliminate.  This is because it's stack pointer isn't
15455      directly accessible as a register within the ISA.  To work around
15456      this, assume that while we cannot provide a proper value for
15457      frame_pointer_fb_offset, we won't need one either.  */
15458   frame_pointer_fb_offset_valid
15459     = ((SUPPORTS_STACK_ALIGNMENT
15460 	&& (elim == hard_frame_pointer_rtx
15461 	    || elim == stack_pointer_rtx))
15462        || elim == (frame_pointer_needed
15463 		   ? hard_frame_pointer_rtx
15464 		   : stack_pointer_rtx));
15465 }
15466 
15467 /* Generate a DW_AT_name attribute given some string value to be included as
15468    the value of the attribute.  */
15469 
15470 static void
15471 add_name_attribute (dw_die_ref die, const char *name_string)
15472 {
15473   if (name_string != NULL && *name_string != 0)
15474     {
15475       if (demangle_name_func)
15476 	name_string = (*demangle_name_func) (name_string);
15477 
15478       add_AT_string (die, DW_AT_name, name_string);
15479     }
15480 }
15481 
15482 /* Retrieve the descriptive type of TYPE, if any, make sure it has a
15483    DIE and attach a DW_AT_GNAT_descriptive_type attribute to the DIE
15484    of TYPE accordingly.
15485 
15486    ??? This is a temporary measure until after we're able to generate
15487    regular DWARF for the complex Ada type system.  */
15488 
15489 static void
15490 add_gnat_descriptive_type_attribute (dw_die_ref die, tree type,
15491 				     dw_die_ref context_die)
15492 {
15493   tree dtype;
15494   dw_die_ref dtype_die;
15495 
15496   if (!lang_hooks.types.descriptive_type)
15497     return;
15498 
15499   dtype = lang_hooks.types.descriptive_type (type);
15500   if (!dtype)
15501     return;
15502 
15503   dtype_die = lookup_type_die (dtype);
15504   if (!dtype_die)
15505     {
15506       gen_type_die (dtype, context_die);
15507       dtype_die = lookup_type_die (dtype);
15508       gcc_assert (dtype_die);
15509     }
15510 
15511   add_AT_die_ref (die, DW_AT_GNAT_descriptive_type, dtype_die);
15512 }
15513 
15514 /* Generate a DW_AT_comp_dir attribute for DIE.  */
15515 
15516 static void
15517 add_comp_dir_attribute (dw_die_ref die)
15518 {
15519   const char *wd = get_src_pwd ();
15520   char *wd1;
15521 
15522   if (wd == NULL)
15523     return;
15524 
15525   if (DWARF2_DIR_SHOULD_END_WITH_SEPARATOR)
15526     {
15527       int wdlen;
15528 
15529       wdlen = strlen (wd);
15530       wd1 = (char *) ggc_alloc_atomic (wdlen + 2);
15531       strcpy (wd1, wd);
15532       wd1 [wdlen] = DIR_SEPARATOR;
15533       wd1 [wdlen + 1] = 0;
15534       wd = wd1;
15535     }
15536 
15537     add_AT_string (die, DW_AT_comp_dir, remap_debug_filename (wd));
15538 }
15539 
15540 /* Return the default for DW_AT_lower_bound, or -1 if there is not any
15541    default.  */
15542 
15543 static int
15544 lower_bound_default (void)
15545 {
15546   switch (get_AT_unsigned (comp_unit_die (), DW_AT_language))
15547     {
15548     case DW_LANG_C:
15549     case DW_LANG_C89:
15550     case DW_LANG_C99:
15551     case DW_LANG_C_plus_plus:
15552     case DW_LANG_ObjC:
15553     case DW_LANG_ObjC_plus_plus:
15554     case DW_LANG_Java:
15555       return 0;
15556     case DW_LANG_Fortran77:
15557     case DW_LANG_Fortran90:
15558     case DW_LANG_Fortran95:
15559       return 1;
15560     case DW_LANG_UPC:
15561     case DW_LANG_D:
15562     case DW_LANG_Python:
15563       return dwarf_version >= 4 ? 0 : -1;
15564     case DW_LANG_Ada95:
15565     case DW_LANG_Ada83:
15566     case DW_LANG_Cobol74:
15567     case DW_LANG_Cobol85:
15568     case DW_LANG_Pascal83:
15569     case DW_LANG_Modula2:
15570     case DW_LANG_PLI:
15571       return dwarf_version >= 4 ? 1 : -1;
15572     default:
15573       return -1;
15574     }
15575 }
15576 
15577 /* Given a tree node describing an array bound (either lower or upper) output
15578    a representation for that bound.  */
15579 
15580 static void
15581 add_bound_info (dw_die_ref subrange_die, enum dwarf_attribute bound_attr, tree bound)
15582 {
15583   switch (TREE_CODE (bound))
15584     {
15585     case ERROR_MARK:
15586       return;
15587 
15588     /* All fixed-bounds are represented by INTEGER_CST nodes.  */
15589     case INTEGER_CST:
15590       {
15591 	unsigned int prec = simple_type_size_in_bits (TREE_TYPE (bound));
15592 	int dflt;
15593 
15594 	/* Use the default if possible.  */
15595 	if (bound_attr == DW_AT_lower_bound
15596 	    && host_integerp (bound, 0)
15597 	    && (dflt = lower_bound_default ()) != -1
15598 	    && tree_low_cst (bound, 0) == dflt)
15599 	  ;
15600 
15601 	/* Otherwise represent the bound as an unsigned value with the
15602 	   precision of its type.  The precision and signedness of the
15603 	   type will be necessary to re-interpret it unambiguously.  */
15604 	else if (prec < HOST_BITS_PER_WIDE_INT)
15605 	  {
15606 	    unsigned HOST_WIDE_INT mask
15607 	      = ((unsigned HOST_WIDE_INT) 1 << prec) - 1;
15608 	    add_AT_unsigned (subrange_die, bound_attr,
15609 		  	     TREE_INT_CST_LOW (bound) & mask);
15610 	  }
15611 	else if (prec == HOST_BITS_PER_WIDE_INT
15612 		 || TREE_INT_CST_HIGH (bound) == 0)
15613 	  add_AT_unsigned (subrange_die, bound_attr,
15614 		  	   TREE_INT_CST_LOW (bound));
15615 	else
15616 	  add_AT_double (subrange_die, bound_attr, TREE_INT_CST_HIGH (bound),
15617 		         TREE_INT_CST_LOW (bound));
15618       }
15619       break;
15620 
15621     CASE_CONVERT:
15622     case VIEW_CONVERT_EXPR:
15623       add_bound_info (subrange_die, bound_attr, TREE_OPERAND (bound, 0));
15624       break;
15625 
15626     case SAVE_EXPR:
15627       break;
15628 
15629     case VAR_DECL:
15630     case PARM_DECL:
15631     case RESULT_DECL:
15632       {
15633 	dw_die_ref decl_die = lookup_decl_die (bound);
15634 
15635 	/* ??? Can this happen, or should the variable have been bound
15636 	   first?  Probably it can, since I imagine that we try to create
15637 	   the types of parameters in the order in which they exist in
15638 	   the list, and won't have created a forward reference to a
15639 	   later parameter.  */
15640 	if (decl_die != NULL)
15641 	  {
15642 	    add_AT_die_ref (subrange_die, bound_attr, decl_die);
15643 	    break;
15644 	  }
15645       }
15646       /* FALLTHRU */
15647 
15648     default:
15649       {
15650 	/* Otherwise try to create a stack operation procedure to
15651 	   evaluate the value of the array bound.  */
15652 
15653 	dw_die_ref ctx, decl_die;
15654 	dw_loc_list_ref list;
15655 
15656 	list = loc_list_from_tree (bound, 2);
15657 	if (list == NULL || single_element_loc_list_p (list))
15658 	  {
15659 	    /* If DW_AT_*bound is not a reference nor constant, it is
15660 	       a DWARF expression rather than location description.
15661 	       For that loc_list_from_tree (bound, 0) is needed.
15662 	       If that fails to give a single element list,
15663 	       fall back to outputting this as a reference anyway.  */
15664 	    dw_loc_list_ref list2 = loc_list_from_tree (bound, 0);
15665 	    if (list2 && single_element_loc_list_p (list2))
15666 	      {
15667 		add_AT_loc (subrange_die, bound_attr, list2->expr);
15668 		break;
15669 	      }
15670 	  }
15671 	if (list == NULL)
15672 	  break;
15673 
15674 	if (current_function_decl == 0)
15675 	  ctx = comp_unit_die ();
15676 	else
15677 	  ctx = lookup_decl_die (current_function_decl);
15678 
15679 	decl_die = new_die (DW_TAG_variable, ctx, bound);
15680 	add_AT_flag (decl_die, DW_AT_artificial, 1);
15681 	add_type_attribute (decl_die, TREE_TYPE (bound), 1, 0, ctx);
15682 	add_AT_location_description (decl_die, DW_AT_location, list);
15683 	add_AT_die_ref (subrange_die, bound_attr, decl_die);
15684 	break;
15685       }
15686     }
15687 }
15688 
15689 /* Add subscript info to TYPE_DIE, describing an array TYPE, collapsing
15690    possibly nested array subscripts in a flat sequence if COLLAPSE_P is true.
15691    Note that the block of subscript information for an array type also
15692    includes information about the element type of the given array type.  */
15693 
15694 static void
15695 add_subscript_info (dw_die_ref type_die, tree type, bool collapse_p)
15696 {
15697   unsigned dimension_number;
15698   tree lower, upper;
15699   dw_die_ref subrange_die;
15700 
15701   for (dimension_number = 0;
15702        TREE_CODE (type) == ARRAY_TYPE && (dimension_number == 0 || collapse_p);
15703        type = TREE_TYPE (type), dimension_number++)
15704     {
15705       tree domain = TYPE_DOMAIN (type);
15706 
15707       if (TYPE_STRING_FLAG (type) && is_fortran () && dimension_number > 0)
15708 	break;
15709 
15710       /* Arrays come in three flavors: Unspecified bounds, fixed bounds,
15711 	 and (in GNU C only) variable bounds.  Handle all three forms
15712 	 here.  */
15713       subrange_die = new_die (DW_TAG_subrange_type, type_die, NULL);
15714       if (domain)
15715 	{
15716 	  /* We have an array type with specified bounds.  */
15717 	  lower = TYPE_MIN_VALUE (domain);
15718 	  upper = TYPE_MAX_VALUE (domain);
15719 
15720 	  /* Define the index type.  */
15721 	  if (TREE_TYPE (domain))
15722 	    {
15723 	      /* ??? This is probably an Ada unnamed subrange type.  Ignore the
15724 		 TREE_TYPE field.  We can't emit debug info for this
15725 		 because it is an unnamed integral type.  */
15726 	      if (TREE_CODE (domain) == INTEGER_TYPE
15727 		  && TYPE_NAME (domain) == NULL_TREE
15728 		  && TREE_CODE (TREE_TYPE (domain)) == INTEGER_TYPE
15729 		  && TYPE_NAME (TREE_TYPE (domain)) == NULL_TREE)
15730 		;
15731 	      else
15732 		add_type_attribute (subrange_die, TREE_TYPE (domain), 0, 0,
15733 				    type_die);
15734 	    }
15735 
15736 	  /* ??? If upper is NULL, the array has unspecified length,
15737 	     but it does have a lower bound.  This happens with Fortran
15738 	       dimension arr(N:*)
15739 	     Since the debugger is definitely going to need to know N
15740 	     to produce useful results, go ahead and output the lower
15741 	     bound solo, and hope the debugger can cope.  */
15742 
15743 	  add_bound_info (subrange_die, DW_AT_lower_bound, lower);
15744 	  if (upper)
15745 	    add_bound_info (subrange_die, DW_AT_upper_bound, upper);
15746 	}
15747 
15748       /* Otherwise we have an array type with an unspecified length.  The
15749 	 DWARF-2 spec does not say how to handle this; let's just leave out the
15750 	 bounds.  */
15751     }
15752 }
15753 
15754 static void
15755 add_byte_size_attribute (dw_die_ref die, tree tree_node)
15756 {
15757   unsigned size;
15758 
15759   switch (TREE_CODE (tree_node))
15760     {
15761     case ERROR_MARK:
15762       size = 0;
15763       break;
15764     case ENUMERAL_TYPE:
15765     case RECORD_TYPE:
15766     case UNION_TYPE:
15767     case QUAL_UNION_TYPE:
15768       size = int_size_in_bytes (tree_node);
15769       break;
15770     case FIELD_DECL:
15771       /* For a data member of a struct or union, the DW_AT_byte_size is
15772 	 generally given as the number of bytes normally allocated for an
15773 	 object of the *declared* type of the member itself.  This is true
15774 	 even for bit-fields.  */
15775       size = simple_type_size_in_bits (field_type (tree_node)) / BITS_PER_UNIT;
15776       break;
15777     default:
15778       gcc_unreachable ();
15779     }
15780 
15781   /* Note that `size' might be -1 when we get to this point.  If it is, that
15782      indicates that the byte size of the entity in question is variable.  We
15783      have no good way of expressing this fact in Dwarf at the present time,
15784      so just let the -1 pass on through.  */
15785   add_AT_unsigned (die, DW_AT_byte_size, size);
15786 }
15787 
15788 /* For a FIELD_DECL node which represents a bit-field, output an attribute
15789    which specifies the distance in bits from the highest order bit of the
15790    "containing object" for the bit-field to the highest order bit of the
15791    bit-field itself.
15792 
15793    For any given bit-field, the "containing object" is a hypothetical object
15794    (of some integral or enum type) within which the given bit-field lives.  The
15795    type of this hypothetical "containing object" is always the same as the
15796    declared type of the individual bit-field itself.  The determination of the
15797    exact location of the "containing object" for a bit-field is rather
15798    complicated.  It's handled by the `field_byte_offset' function (above).
15799 
15800    Note that it is the size (in bytes) of the hypothetical "containing object"
15801    which will be given in the DW_AT_byte_size attribute for this bit-field.
15802    (See `byte_size_attribute' above).  */
15803 
15804 static inline void
15805 add_bit_offset_attribute (dw_die_ref die, tree decl)
15806 {
15807   HOST_WIDE_INT object_offset_in_bytes = field_byte_offset (decl);
15808   tree type = DECL_BIT_FIELD_TYPE (decl);
15809   HOST_WIDE_INT bitpos_int;
15810   HOST_WIDE_INT highest_order_object_bit_offset;
15811   HOST_WIDE_INT highest_order_field_bit_offset;
15812   HOST_WIDE_INT bit_offset;
15813 
15814   /* Must be a field and a bit field.  */
15815   gcc_assert (type && TREE_CODE (decl) == FIELD_DECL);
15816 
15817   /* We can't yet handle bit-fields whose offsets are variable, so if we
15818      encounter such things, just return without generating any attribute
15819      whatsoever.  Likewise for variable or too large size.  */
15820   if (! host_integerp (bit_position (decl), 0)
15821       || ! host_integerp (DECL_SIZE (decl), 1))
15822     return;
15823 
15824   bitpos_int = int_bit_position (decl);
15825 
15826   /* Note that the bit offset is always the distance (in bits) from the
15827      highest-order bit of the "containing object" to the highest-order bit of
15828      the bit-field itself.  Since the "high-order end" of any object or field
15829      is different on big-endian and little-endian machines, the computation
15830      below must take account of these differences.  */
15831   highest_order_object_bit_offset = object_offset_in_bytes * BITS_PER_UNIT;
15832   highest_order_field_bit_offset = bitpos_int;
15833 
15834   if (! BYTES_BIG_ENDIAN)
15835     {
15836       highest_order_field_bit_offset += tree_low_cst (DECL_SIZE (decl), 0);
15837       highest_order_object_bit_offset += simple_type_size_in_bits (type);
15838     }
15839 
15840   bit_offset
15841     = (! BYTES_BIG_ENDIAN
15842        ? highest_order_object_bit_offset - highest_order_field_bit_offset
15843        : highest_order_field_bit_offset - highest_order_object_bit_offset);
15844 
15845   if (bit_offset < 0)
15846     add_AT_int (die, DW_AT_bit_offset, bit_offset);
15847   else
15848     add_AT_unsigned (die, DW_AT_bit_offset, (unsigned HOST_WIDE_INT) bit_offset);
15849 }
15850 
15851 /* For a FIELD_DECL node which represents a bit field, output an attribute
15852    which specifies the length in bits of the given field.  */
15853 
15854 static inline void
15855 add_bit_size_attribute (dw_die_ref die, tree decl)
15856 {
15857   /* Must be a field and a bit field.  */
15858   gcc_assert (TREE_CODE (decl) == FIELD_DECL
15859 	      && DECL_BIT_FIELD_TYPE (decl));
15860 
15861   if (host_integerp (DECL_SIZE (decl), 1))
15862     add_AT_unsigned (die, DW_AT_bit_size, tree_low_cst (DECL_SIZE (decl), 1));
15863 }
15864 
15865 /* If the compiled language is ANSI C, then add a 'prototyped'
15866    attribute, if arg types are given for the parameters of a function.  */
15867 
15868 static inline void
15869 add_prototyped_attribute (dw_die_ref die, tree func_type)
15870 {
15871   if (get_AT_unsigned (comp_unit_die (), DW_AT_language) == DW_LANG_C89
15872       && prototype_p (func_type))
15873     add_AT_flag (die, DW_AT_prototyped, 1);
15874 }
15875 
15876 /* Add an 'abstract_origin' attribute below a given DIE.  The DIE is found
15877    by looking in either the type declaration or object declaration
15878    equate table.  */
15879 
15880 static inline dw_die_ref
15881 add_abstract_origin_attribute (dw_die_ref die, tree origin)
15882 {
15883   dw_die_ref origin_die = NULL;
15884 
15885   if (TREE_CODE (origin) != FUNCTION_DECL)
15886     {
15887       /* We may have gotten separated from the block for the inlined
15888 	 function, if we're in an exception handler or some such; make
15889 	 sure that the abstract function has been written out.
15890 
15891 	 Doing this for nested functions is wrong, however; functions are
15892 	 distinct units, and our context might not even be inline.  */
15893       tree fn = origin;
15894 
15895       if (TYPE_P (fn))
15896 	fn = TYPE_STUB_DECL (fn);
15897 
15898       fn = decl_function_context (fn);
15899       if (fn)
15900 	dwarf2out_abstract_function (fn);
15901     }
15902 
15903   if (DECL_P (origin))
15904     origin_die = lookup_decl_die (origin);
15905   else if (TYPE_P (origin))
15906     origin_die = lookup_type_die (origin);
15907 
15908   /* XXX: Functions that are never lowered don't always have correct block
15909      trees (in the case of java, they simply have no block tree, in some other
15910      languages).  For these functions, there is nothing we can really do to
15911      output correct debug info for inlined functions in all cases.  Rather
15912      than die, we'll just produce deficient debug info now, in that we will
15913      have variables without a proper abstract origin.  In the future, when all
15914      functions are lowered, we should re-add a gcc_assert (origin_die)
15915      here.  */
15916 
15917   if (origin_die)
15918     add_AT_die_ref (die, DW_AT_abstract_origin, origin_die);
15919   return origin_die;
15920 }
15921 
15922 /* We do not currently support the pure_virtual attribute.  */
15923 
15924 static inline void
15925 add_pure_or_virtual_attribute (dw_die_ref die, tree func_decl)
15926 {
15927   if (DECL_VINDEX (func_decl))
15928     {
15929       add_AT_unsigned (die, DW_AT_virtuality, DW_VIRTUALITY_virtual);
15930 
15931       if (host_integerp (DECL_VINDEX (func_decl), 0))
15932 	add_AT_loc (die, DW_AT_vtable_elem_location,
15933 		    new_loc_descr (DW_OP_constu,
15934 				   tree_low_cst (DECL_VINDEX (func_decl), 0),
15935 				   0));
15936 
15937       /* GNU extension: Record what type this method came from originally.  */
15938       if (debug_info_level > DINFO_LEVEL_TERSE
15939 	  && DECL_CONTEXT (func_decl))
15940 	add_AT_die_ref (die, DW_AT_containing_type,
15941 			lookup_type_die (DECL_CONTEXT (func_decl)));
15942     }
15943 }
15944 
15945 /* Add a DW_AT_linkage_name or DW_AT_MIPS_linkage_name attribute for the
15946    given decl.  This used to be a vendor extension until after DWARF 4
15947    standardized it.  */
15948 
15949 static void
15950 add_linkage_attr (dw_die_ref die, tree decl)
15951 {
15952   const char *name = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl));
15953 
15954   /* Mimic what assemble_name_raw does with a leading '*'.  */
15955   if (name[0] == '*')
15956     name = &name[1];
15957 
15958   if (dwarf_version >= 4)
15959     add_AT_string (die, DW_AT_linkage_name, name);
15960   else
15961     add_AT_string (die, DW_AT_MIPS_linkage_name, name);
15962 }
15963 
15964 /* Add source coordinate attributes for the given decl.  */
15965 
15966 static void
15967 add_src_coords_attributes (dw_die_ref die, tree decl)
15968 {
15969   expanded_location s;
15970 
15971   if (DECL_SOURCE_LOCATION (decl) == UNKNOWN_LOCATION)
15972     return;
15973   s = expand_location (DECL_SOURCE_LOCATION (decl));
15974   add_AT_file (die, DW_AT_decl_file, lookup_filename (s.file));
15975   add_AT_unsigned (die, DW_AT_decl_line, s.line);
15976 }
15977 
15978 /* Add DW_AT_{,MIPS_}linkage_name attribute for the given decl.  */
15979 
15980 static void
15981 add_linkage_name (dw_die_ref die, tree decl)
15982 {
15983   if ((TREE_CODE (decl) == FUNCTION_DECL || TREE_CODE (decl) == VAR_DECL)
15984        && TREE_PUBLIC (decl)
15985        && !DECL_ABSTRACT (decl)
15986        && !(TREE_CODE (decl) == VAR_DECL && DECL_REGISTER (decl))
15987        && die->die_tag != DW_TAG_member)
15988     {
15989       /* Defer until we have an assembler name set.  */
15990       if (!DECL_ASSEMBLER_NAME_SET_P (decl))
15991 	{
15992 	  limbo_die_node *asm_name;
15993 
15994 	  asm_name = ggc_alloc_cleared_limbo_die_node ();
15995 	  asm_name->die = die;
15996 	  asm_name->created_for = decl;
15997 	  asm_name->next = deferred_asm_name;
15998 	  deferred_asm_name = asm_name;
15999 	}
16000       else if (DECL_ASSEMBLER_NAME (decl) != DECL_NAME (decl))
16001 	add_linkage_attr (die, decl);
16002     }
16003 }
16004 
16005 /* Add a DW_AT_name attribute and source coordinate attribute for the
16006    given decl, but only if it actually has a name.  */
16007 
16008 static void
16009 add_name_and_src_coords_attributes (dw_die_ref die, tree decl)
16010 {
16011   tree decl_name;
16012 
16013   decl_name = DECL_NAME (decl);
16014   if (decl_name != NULL && IDENTIFIER_POINTER (decl_name) != NULL)
16015     {
16016       const char *name = dwarf2_name (decl, 0);
16017       if (name)
16018 	add_name_attribute (die, name);
16019       if (! DECL_ARTIFICIAL (decl))
16020 	add_src_coords_attributes (die, decl);
16021 
16022       add_linkage_name (die, decl);
16023     }
16024 
16025 #ifdef VMS_DEBUGGING_INFO
16026   /* Get the function's name, as described by its RTL.  This may be different
16027      from the DECL_NAME name used in the source file.  */
16028   if (TREE_CODE (decl) == FUNCTION_DECL && TREE_ASM_WRITTEN (decl))
16029     {
16030       add_AT_addr (die, DW_AT_VMS_rtnbeg_pd_address,
16031 		   XEXP (DECL_RTL (decl), 0));
16032       VEC_safe_push (rtx, gc, used_rtx_array, XEXP (DECL_RTL (decl), 0));
16033     }
16034 #endif /* VMS_DEBUGGING_INFO */
16035 }
16036 
16037 #ifdef VMS_DEBUGGING_INFO
16038 /* Output the debug main pointer die for VMS */
16039 
16040 void
16041 dwarf2out_vms_debug_main_pointer (void)
16042 {
16043   char label[MAX_ARTIFICIAL_LABEL_BYTES];
16044   dw_die_ref die;
16045 
16046   /* Allocate the VMS debug main subprogram die.  */
16047   die = ggc_alloc_cleared_die_node ();
16048   die->die_tag = DW_TAG_subprogram;
16049   add_name_attribute (die, VMS_DEBUG_MAIN_POINTER);
16050   ASM_GENERATE_INTERNAL_LABEL (label, PROLOGUE_END_LABEL,
16051 			       current_function_funcdef_no);
16052   add_AT_lbl_id (die, DW_AT_entry_pc, label);
16053 
16054   /* Make it the first child of comp_unit_die ().  */
16055   die->die_parent = comp_unit_die ();
16056   if (comp_unit_die ()->die_child)
16057     {
16058       die->die_sib = comp_unit_die ()->die_child->die_sib;
16059       comp_unit_die ()->die_child->die_sib = die;
16060     }
16061   else
16062     {
16063       die->die_sib = die;
16064       comp_unit_die ()->die_child = die;
16065     }
16066 }
16067 #endif /* VMS_DEBUGGING_INFO */
16068 
16069 /* Push a new declaration scope.  */
16070 
16071 static void
16072 push_decl_scope (tree scope)
16073 {
16074   VEC_safe_push (tree, gc, decl_scope_table, scope);
16075 }
16076 
16077 /* Pop a declaration scope.  */
16078 
16079 static inline void
16080 pop_decl_scope (void)
16081 {
16082   VEC_pop (tree, decl_scope_table);
16083 }
16084 
16085 /* walk_tree helper function for uses_local_type, below.  */
16086 
16087 static tree
16088 uses_local_type_r (tree *tp, int *walk_subtrees, void *data ATTRIBUTE_UNUSED)
16089 {
16090   if (!TYPE_P (*tp))
16091     *walk_subtrees = 0;
16092   else
16093     {
16094       tree name = TYPE_NAME (*tp);
16095       if (name && DECL_P (name) && decl_function_context (name))
16096 	return *tp;
16097     }
16098   return NULL_TREE;
16099 }
16100 
16101 /* If TYPE involves a function-local type (including a local typedef to a
16102    non-local type), returns that type; otherwise returns NULL_TREE.  */
16103 
16104 static tree
16105 uses_local_type (tree type)
16106 {
16107   tree used = walk_tree_without_duplicates (&type, uses_local_type_r, NULL);
16108   return used;
16109 }
16110 
16111 /* Return the DIE for the scope that immediately contains this type.
16112    Non-named types that do not involve a function-local type get global
16113    scope.  Named types nested in namespaces or other types get their
16114    containing scope.  All other types (i.e. function-local named types) get
16115    the current active scope.  */
16116 
16117 static dw_die_ref
16118 scope_die_for (tree t, dw_die_ref context_die)
16119 {
16120   dw_die_ref scope_die = NULL;
16121   tree containing_scope;
16122 
16123   /* Non-types always go in the current scope.  */
16124   gcc_assert (TYPE_P (t));
16125 
16126   /* Use the scope of the typedef, rather than the scope of the type
16127      it refers to.  */
16128   if (TYPE_NAME (t) && DECL_P (TYPE_NAME (t)))
16129     containing_scope = DECL_CONTEXT (TYPE_NAME (t));
16130   else
16131     containing_scope = TYPE_CONTEXT (t);
16132 
16133   /* Use the containing namespace if there is one.  */
16134   if (containing_scope && TREE_CODE (containing_scope) == NAMESPACE_DECL)
16135     {
16136       if (context_die == lookup_decl_die (containing_scope))
16137 	/* OK */;
16138       else if (debug_info_level > DINFO_LEVEL_TERSE)
16139 	context_die = get_context_die (containing_scope);
16140       else
16141 	containing_scope = NULL_TREE;
16142     }
16143 
16144   /* Ignore function type "scopes" from the C frontend.  They mean that
16145      a tagged type is local to a parmlist of a function declarator, but
16146      that isn't useful to DWARF.  */
16147   if (containing_scope && TREE_CODE (containing_scope) == FUNCTION_TYPE)
16148     containing_scope = NULL_TREE;
16149 
16150   if (SCOPE_FILE_SCOPE_P (containing_scope))
16151     {
16152       /* If T uses a local type keep it local as well, to avoid references
16153 	 to function-local DIEs from outside the function.  */
16154       if (current_function_decl && uses_local_type (t))
16155 	scope_die = context_die;
16156       else
16157 	scope_die = comp_unit_die ();
16158     }
16159   else if (TYPE_P (containing_scope))
16160     {
16161       /* For types, we can just look up the appropriate DIE.  */
16162       if (debug_info_level > DINFO_LEVEL_TERSE)
16163 	scope_die = get_context_die (containing_scope);
16164       else
16165 	{
16166 	  scope_die = lookup_type_die_strip_naming_typedef (containing_scope);
16167 	  if (scope_die == NULL)
16168 	    scope_die = comp_unit_die ();
16169 	}
16170     }
16171   else
16172     scope_die = context_die;
16173 
16174   return scope_die;
16175 }
16176 
16177 /* Returns nonzero if CONTEXT_DIE is internal to a function.  */
16178 
16179 static inline int
16180 local_scope_p (dw_die_ref context_die)
16181 {
16182   for (; context_die; context_die = context_die->die_parent)
16183     if (context_die->die_tag == DW_TAG_inlined_subroutine
16184 	|| context_die->die_tag == DW_TAG_subprogram)
16185       return 1;
16186 
16187   return 0;
16188 }
16189 
16190 /* Returns nonzero if CONTEXT_DIE is a class.  */
16191 
16192 static inline int
16193 class_scope_p (dw_die_ref context_die)
16194 {
16195   return (context_die
16196 	  && (context_die->die_tag == DW_TAG_structure_type
16197 	      || context_die->die_tag == DW_TAG_class_type
16198 	      || context_die->die_tag == DW_TAG_interface_type
16199 	      || context_die->die_tag == DW_TAG_union_type));
16200 }
16201 
16202 /* Returns nonzero if CONTEXT_DIE is a class or namespace, for deciding
16203    whether or not to treat a DIE in this context as a declaration.  */
16204 
16205 static inline int
16206 class_or_namespace_scope_p (dw_die_ref context_die)
16207 {
16208   return (class_scope_p (context_die)
16209 	  || (context_die && context_die->die_tag == DW_TAG_namespace));
16210 }
16211 
16212 /* Many forms of DIEs require a "type description" attribute.  This
16213    routine locates the proper "type descriptor" die for the type given
16214    by 'type', and adds a DW_AT_type attribute below the given die.  */
16215 
16216 static void
16217 add_type_attribute (dw_die_ref object_die, tree type, int decl_const,
16218 		    int decl_volatile, dw_die_ref context_die)
16219 {
16220   enum tree_code code  = TREE_CODE (type);
16221   dw_die_ref type_die  = NULL;
16222 
16223   /* ??? If this type is an unnamed subrange type of an integral, floating-point
16224      or fixed-point type, use the inner type.  This is because we have no
16225      support for unnamed types in base_type_die.  This can happen if this is
16226      an Ada subrange type.  Correct solution is emit a subrange type die.  */
16227   if ((code == INTEGER_TYPE || code == REAL_TYPE || code == FIXED_POINT_TYPE)
16228       && TREE_TYPE (type) != 0 && TYPE_NAME (type) == 0)
16229     type = TREE_TYPE (type), code = TREE_CODE (type);
16230 
16231   if (code == ERROR_MARK
16232       /* Handle a special case.  For functions whose return type is void, we
16233 	 generate *no* type attribute.  (Note that no object may have type
16234 	 `void', so this only applies to function return types).  */
16235       || code == VOID_TYPE)
16236     return;
16237 
16238   type_die = modified_type_die (type,
16239 				decl_const || TYPE_READONLY (type),
16240 				decl_volatile || TYPE_VOLATILE (type),
16241 				context_die);
16242 
16243   if (type_die != NULL)
16244     add_AT_die_ref (object_die, DW_AT_type, type_die);
16245 }
16246 
16247 /* Given an object die, add the calling convention attribute for the
16248    function call type.  */
16249 static void
16250 add_calling_convention_attribute (dw_die_ref subr_die, tree decl)
16251 {
16252   enum dwarf_calling_convention value = DW_CC_normal;
16253 
16254   value = ((enum dwarf_calling_convention)
16255 	   targetm.dwarf_calling_convention (TREE_TYPE (decl)));
16256 
16257   if (is_fortran ()
16258       && !strcmp (IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl)), "MAIN__"))
16259     {
16260       /* DWARF 2 doesn't provide a way to identify a program's source-level
16261 	entry point.  DW_AT_calling_convention attributes are only meant
16262 	to describe functions' calling conventions.  However, lacking a
16263 	better way to signal the Fortran main program, we used this for
16264 	a long time, following existing custom.  Now, DWARF 4 has
16265 	DW_AT_main_subprogram, which we add below, but some tools still
16266 	rely on the old way, which we thus keep.  */
16267       value = DW_CC_program;
16268 
16269       if (dwarf_version >= 4 || !dwarf_strict)
16270 	add_AT_flag (subr_die, DW_AT_main_subprogram, 1);
16271     }
16272 
16273   /* Only add the attribute if the backend requests it, and
16274      is not DW_CC_normal.  */
16275   if (value && (value != DW_CC_normal))
16276     add_AT_unsigned (subr_die, DW_AT_calling_convention, value);
16277 }
16278 
16279 /* Given a tree pointer to a struct, class, union, or enum type node, return
16280    a pointer to the (string) tag name for the given type, or zero if the type
16281    was declared without a tag.  */
16282 
16283 static const char *
16284 type_tag (const_tree type)
16285 {
16286   const char *name = 0;
16287 
16288   if (TYPE_NAME (type) != 0)
16289     {
16290       tree t = 0;
16291 
16292       /* Find the IDENTIFIER_NODE for the type name.  */
16293       if (TREE_CODE (TYPE_NAME (type)) == IDENTIFIER_NODE
16294 	  && !TYPE_NAMELESS (type))
16295 	t = TYPE_NAME (type);
16296 
16297       /* The g++ front end makes the TYPE_NAME of *each* tagged type point to
16298 	 a TYPE_DECL node, regardless of whether or not a `typedef' was
16299 	 involved.  */
16300       else if (TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
16301 	       && ! DECL_IGNORED_P (TYPE_NAME (type)))
16302 	{
16303 	  /* We want to be extra verbose.  Don't call dwarf_name if
16304 	     DECL_NAME isn't set.  The default hook for decl_printable_name
16305 	     doesn't like that, and in this context it's correct to return
16306 	     0, instead of "<anonymous>" or the like.  */
16307 	  if (DECL_NAME (TYPE_NAME (type))
16308 	      && !DECL_NAMELESS (TYPE_NAME (type)))
16309 	    name = lang_hooks.dwarf_name (TYPE_NAME (type), 2);
16310 	}
16311 
16312       /* Now get the name as a string, or invent one.  */
16313       if (!name && t != 0)
16314 	name = IDENTIFIER_POINTER (t);
16315     }
16316 
16317   return (name == 0 || *name == '\0') ? 0 : name;
16318 }
16319 
16320 /* Return the type associated with a data member, make a special check
16321    for bit field types.  */
16322 
16323 static inline tree
16324 member_declared_type (const_tree member)
16325 {
16326   return (DECL_BIT_FIELD_TYPE (member)
16327 	  ? DECL_BIT_FIELD_TYPE (member) : TREE_TYPE (member));
16328 }
16329 
16330 /* Get the decl's label, as described by its RTL. This may be different
16331    from the DECL_NAME name used in the source file.  */
16332 
16333 #if 0
16334 static const char *
16335 decl_start_label (tree decl)
16336 {
16337   rtx x;
16338   const char *fnname;
16339 
16340   x = DECL_RTL (decl);
16341   gcc_assert (MEM_P (x));
16342 
16343   x = XEXP (x, 0);
16344   gcc_assert (GET_CODE (x) == SYMBOL_REF);
16345 
16346   fnname = XSTR (x, 0);
16347   return fnname;
16348 }
16349 #endif
16350 
16351 /* These routines generate the internal representation of the DIE's for
16352    the compilation unit.  Debugging information is collected by walking
16353    the declaration trees passed in from dwarf2out_decl().  */
16354 
16355 static void
16356 gen_array_type_die (tree type, dw_die_ref context_die)
16357 {
16358   dw_die_ref scope_die = scope_die_for (type, context_die);
16359   dw_die_ref array_die;
16360 
16361   /* GNU compilers represent multidimensional array types as sequences of one
16362      dimensional array types whose element types are themselves array types.
16363      We sometimes squish that down to a single array_type DIE with multiple
16364      subscripts in the Dwarf debugging info.  The draft Dwarf specification
16365      say that we are allowed to do this kind of compression in C, because
16366      there is no difference between an array of arrays and a multidimensional
16367      array.  We don't do this for Ada to remain as close as possible to the
16368      actual representation, which is especially important against the language
16369      flexibilty wrt arrays of variable size.  */
16370 
16371   bool collapse_nested_arrays = !is_ada ();
16372   tree element_type;
16373 
16374   /* Emit DW_TAG_string_type for Fortran character types (with kind 1 only, as
16375      DW_TAG_string_type doesn't have DW_AT_type attribute).  */
16376   if (TYPE_STRING_FLAG (type)
16377       && TREE_CODE (type) == ARRAY_TYPE
16378       && is_fortran ()
16379       && TYPE_MODE (TREE_TYPE (type)) == TYPE_MODE (char_type_node))
16380     {
16381       HOST_WIDE_INT size;
16382 
16383       array_die = new_die (DW_TAG_string_type, scope_die, type);
16384       add_name_attribute (array_die, type_tag (type));
16385       equate_type_number_to_die (type, array_die);
16386       size = int_size_in_bytes (type);
16387       if (size >= 0)
16388 	add_AT_unsigned (array_die, DW_AT_byte_size, size);
16389       else if (TYPE_DOMAIN (type) != NULL_TREE
16390 	       && TYPE_MAX_VALUE (TYPE_DOMAIN (type)) != NULL_TREE
16391 	       && DECL_P (TYPE_MAX_VALUE (TYPE_DOMAIN (type))))
16392 	{
16393 	  tree szdecl = TYPE_MAX_VALUE (TYPE_DOMAIN (type));
16394 	  dw_loc_list_ref loc = loc_list_from_tree (szdecl, 2);
16395 
16396 	  size = int_size_in_bytes (TREE_TYPE (szdecl));
16397 	  if (loc && size > 0)
16398 	    {
16399 	      add_AT_location_description (array_die, DW_AT_string_length, loc);
16400 	      if (size != DWARF2_ADDR_SIZE)
16401 		add_AT_unsigned (array_die, DW_AT_byte_size, size);
16402 	    }
16403 	}
16404       return;
16405     }
16406 
16407   /* ??? The SGI dwarf reader fails for array of array of enum types
16408      (e.g. const enum machine_mode insn_operand_mode[2][10]) unless the inner
16409      array type comes before the outer array type.  We thus call gen_type_die
16410      before we new_die and must prevent nested array types collapsing for this
16411      target.  */
16412 
16413 #ifdef MIPS_DEBUGGING_INFO
16414   gen_type_die (TREE_TYPE (type), context_die);
16415   collapse_nested_arrays = false;
16416 #endif
16417 
16418   array_die = new_die (DW_TAG_array_type, scope_die, type);
16419   add_name_attribute (array_die, type_tag (type));
16420   equate_type_number_to_die (type, array_die);
16421 
16422   if (TREE_CODE (type) == VECTOR_TYPE)
16423     add_AT_flag (array_die, DW_AT_GNU_vector, 1);
16424 
16425   /* For Fortran multidimensional arrays use DW_ORD_col_major ordering.  */
16426   if (is_fortran ()
16427       && TREE_CODE (type) == ARRAY_TYPE
16428       && TREE_CODE (TREE_TYPE (type)) == ARRAY_TYPE
16429       && !TYPE_STRING_FLAG (TREE_TYPE (type)))
16430     add_AT_unsigned (array_die, DW_AT_ordering, DW_ORD_col_major);
16431 
16432 #if 0
16433   /* We default the array ordering.  SDB will probably do
16434      the right things even if DW_AT_ordering is not present.  It's not even
16435      an issue until we start to get into multidimensional arrays anyway.  If
16436      SDB is ever caught doing the Wrong Thing for multi-dimensional arrays,
16437      then we'll have to put the DW_AT_ordering attribute back in.  (But if
16438      and when we find out that we need to put these in, we will only do so
16439      for multidimensional arrays.  */
16440   add_AT_unsigned (array_die, DW_AT_ordering, DW_ORD_row_major);
16441 #endif
16442 
16443 #ifdef MIPS_DEBUGGING_INFO
16444   /* The SGI compilers handle arrays of unknown bound by setting
16445      AT_declaration and not emitting any subrange DIEs.  */
16446   if (TREE_CODE (type) == ARRAY_TYPE
16447       && ! TYPE_DOMAIN (type))
16448     add_AT_flag (array_die, DW_AT_declaration, 1);
16449   else
16450 #endif
16451   if (TREE_CODE (type) == VECTOR_TYPE)
16452     {
16453       /* For VECTOR_TYPEs we use an array die with appropriate bounds.  */
16454       dw_die_ref subrange_die = new_die (DW_TAG_subrange_type, array_die, NULL);
16455       add_bound_info (subrange_die, DW_AT_lower_bound, size_zero_node);
16456       add_bound_info (subrange_die, DW_AT_upper_bound,
16457 		      size_int (TYPE_VECTOR_SUBPARTS (type) - 1));
16458     }
16459   else
16460     add_subscript_info (array_die, type, collapse_nested_arrays);
16461 
16462   /* Add representation of the type of the elements of this array type and
16463      emit the corresponding DIE if we haven't done it already.  */
16464   element_type = TREE_TYPE (type);
16465   if (collapse_nested_arrays)
16466     while (TREE_CODE (element_type) == ARRAY_TYPE)
16467       {
16468 	if (TYPE_STRING_FLAG (element_type) && is_fortran ())
16469 	  break;
16470 	element_type = TREE_TYPE (element_type);
16471       }
16472 
16473 #ifndef MIPS_DEBUGGING_INFO
16474   gen_type_die (element_type, context_die);
16475 #endif
16476 
16477   add_type_attribute (array_die, element_type, 0, 0, context_die);
16478 
16479   add_gnat_descriptive_type_attribute (array_die, type, context_die);
16480   if (TYPE_ARTIFICIAL (type))
16481     add_AT_flag (array_die, DW_AT_artificial, 1);
16482 
16483   if (get_AT (array_die, DW_AT_name))
16484     add_pubtype (type, array_die);
16485 }
16486 
16487 static dw_loc_descr_ref
16488 descr_info_loc (tree val, tree base_decl)
16489 {
16490   HOST_WIDE_INT size;
16491   dw_loc_descr_ref loc, loc2;
16492   enum dwarf_location_atom op;
16493 
16494   if (val == base_decl)
16495     return new_loc_descr (DW_OP_push_object_address, 0, 0);
16496 
16497   switch (TREE_CODE (val))
16498     {
16499     CASE_CONVERT:
16500       return descr_info_loc (TREE_OPERAND (val, 0), base_decl);
16501     case VAR_DECL:
16502       return loc_descriptor_from_tree (val, 0);
16503     case INTEGER_CST:
16504       if (host_integerp (val, 0))
16505 	return int_loc_descriptor (tree_low_cst (val, 0));
16506       break;
16507     case INDIRECT_REF:
16508       size = int_size_in_bytes (TREE_TYPE (val));
16509       if (size < 0)
16510 	break;
16511       loc = descr_info_loc (TREE_OPERAND (val, 0), base_decl);
16512       if (!loc)
16513 	break;
16514       if (size == DWARF2_ADDR_SIZE)
16515 	add_loc_descr (&loc, new_loc_descr (DW_OP_deref, 0, 0));
16516       else
16517 	add_loc_descr (&loc, new_loc_descr (DW_OP_deref_size, size, 0));
16518       return loc;
16519     case POINTER_PLUS_EXPR:
16520     case PLUS_EXPR:
16521       if (host_integerp (TREE_OPERAND (val, 1), 1)
16522 	  && (unsigned HOST_WIDE_INT) tree_low_cst (TREE_OPERAND (val, 1), 1)
16523 	     < 16384)
16524 	{
16525 	  loc = descr_info_loc (TREE_OPERAND (val, 0), base_decl);
16526 	  if (!loc)
16527 	    break;
16528 	  loc_descr_plus_const (&loc, tree_low_cst (TREE_OPERAND (val, 1), 0));
16529 	}
16530       else
16531 	{
16532 	  op = DW_OP_plus;
16533 	do_binop:
16534 	  loc = descr_info_loc (TREE_OPERAND (val, 0), base_decl);
16535 	  if (!loc)
16536 	    break;
16537 	  loc2 = descr_info_loc (TREE_OPERAND (val, 1), base_decl);
16538 	  if (!loc2)
16539 	    break;
16540 	  add_loc_descr (&loc, loc2);
16541 	  add_loc_descr (&loc2, new_loc_descr (op, 0, 0));
16542 	}
16543       return loc;
16544     case MINUS_EXPR:
16545       op = DW_OP_minus;
16546       goto do_binop;
16547     case MULT_EXPR:
16548       op = DW_OP_mul;
16549       goto do_binop;
16550     case EQ_EXPR:
16551       op = DW_OP_eq;
16552       goto do_binop;
16553     case NE_EXPR:
16554       op = DW_OP_ne;
16555       goto do_binop;
16556     default:
16557       break;
16558     }
16559   return NULL;
16560 }
16561 
16562 static void
16563 add_descr_info_field (dw_die_ref die, enum dwarf_attribute attr,
16564 		      tree val, tree base_decl)
16565 {
16566   dw_loc_descr_ref loc;
16567 
16568   if (host_integerp (val, 0))
16569     {
16570       add_AT_unsigned (die, attr, tree_low_cst (val, 0));
16571       return;
16572     }
16573 
16574   loc = descr_info_loc (val, base_decl);
16575   if (!loc)
16576     return;
16577 
16578   add_AT_loc (die, attr, loc);
16579 }
16580 
16581 /* This routine generates DIE for array with hidden descriptor, details
16582    are filled into *info by a langhook.  */
16583 
16584 static void
16585 gen_descr_array_type_die (tree type, struct array_descr_info *info,
16586 			  dw_die_ref context_die)
16587 {
16588   dw_die_ref scope_die = scope_die_for (type, context_die);
16589   dw_die_ref array_die;
16590   int dim;
16591 
16592   array_die = new_die (DW_TAG_array_type, scope_die, type);
16593   add_name_attribute (array_die, type_tag (type));
16594   equate_type_number_to_die (type, array_die);
16595 
16596   /* For Fortran multidimensional arrays use DW_ORD_col_major ordering.  */
16597   if (is_fortran ()
16598       && info->ndimensions >= 2)
16599     add_AT_unsigned (array_die, DW_AT_ordering, DW_ORD_col_major);
16600 
16601   if (info->data_location)
16602     add_descr_info_field (array_die, DW_AT_data_location, info->data_location,
16603 			  info->base_decl);
16604   if (info->associated)
16605     add_descr_info_field (array_die, DW_AT_associated, info->associated,
16606 			  info->base_decl);
16607   if (info->allocated)
16608     add_descr_info_field (array_die, DW_AT_allocated, info->allocated,
16609 			  info->base_decl);
16610 
16611   for (dim = 0; dim < info->ndimensions; dim++)
16612     {
16613       dw_die_ref subrange_die
16614 	= new_die (DW_TAG_subrange_type, array_die, NULL);
16615 
16616       if (info->dimen[dim].lower_bound)
16617 	{
16618 	  /* If it is the default value, omit it.  */
16619 	  int dflt;
16620 
16621 	  if (host_integerp (info->dimen[dim].lower_bound, 0)
16622 	      && (dflt = lower_bound_default ()) != -1
16623 	      && tree_low_cst (info->dimen[dim].lower_bound, 0) == dflt)
16624 	    ;
16625 	  else
16626 	    add_descr_info_field (subrange_die, DW_AT_lower_bound,
16627 				  info->dimen[dim].lower_bound,
16628 				  info->base_decl);
16629 	}
16630       if (info->dimen[dim].upper_bound)
16631 	add_descr_info_field (subrange_die, DW_AT_upper_bound,
16632 			      info->dimen[dim].upper_bound,
16633 			      info->base_decl);
16634       if (info->dimen[dim].stride)
16635 	add_descr_info_field (subrange_die, DW_AT_byte_stride,
16636 			      info->dimen[dim].stride,
16637 			      info->base_decl);
16638     }
16639 
16640   gen_type_die (info->element_type, context_die);
16641   add_type_attribute (array_die, info->element_type, 0, 0, context_die);
16642 
16643   if (get_AT (array_die, DW_AT_name))
16644     add_pubtype (type, array_die);
16645 }
16646 
16647 #if 0
16648 static void
16649 gen_entry_point_die (tree decl, dw_die_ref context_die)
16650 {
16651   tree origin = decl_ultimate_origin (decl);
16652   dw_die_ref decl_die = new_die (DW_TAG_entry_point, context_die, decl);
16653 
16654   if (origin != NULL)
16655     add_abstract_origin_attribute (decl_die, origin);
16656   else
16657     {
16658       add_name_and_src_coords_attributes (decl_die, decl);
16659       add_type_attribute (decl_die, TREE_TYPE (TREE_TYPE (decl)),
16660 			  0, 0, context_die);
16661     }
16662 
16663   if (DECL_ABSTRACT (decl))
16664     equate_decl_number_to_die (decl, decl_die);
16665   else
16666     add_AT_lbl_id (decl_die, DW_AT_low_pc, decl_start_label (decl));
16667 }
16668 #endif
16669 
16670 /* Walk through the list of incomplete types again, trying once more to
16671    emit full debugging info for them.  */
16672 
16673 static void
16674 retry_incomplete_types (void)
16675 {
16676   int i;
16677 
16678   for (i = VEC_length (tree, incomplete_types) - 1; i >= 0; i--)
16679     if (should_emit_struct_debug (VEC_index (tree, incomplete_types, i),
16680 				  DINFO_USAGE_DIR_USE))
16681       gen_type_die (VEC_index (tree, incomplete_types, i), comp_unit_die ());
16682 }
16683 
16684 /* Determine what tag to use for a record type.  */
16685 
16686 static enum dwarf_tag
16687 record_type_tag (tree type)
16688 {
16689   if (! lang_hooks.types.classify_record)
16690     return DW_TAG_structure_type;
16691 
16692   switch (lang_hooks.types.classify_record (type))
16693     {
16694     case RECORD_IS_STRUCT:
16695       return DW_TAG_structure_type;
16696 
16697     case RECORD_IS_CLASS:
16698       return DW_TAG_class_type;
16699 
16700     case RECORD_IS_INTERFACE:
16701       if (dwarf_version >= 3 || !dwarf_strict)
16702 	return DW_TAG_interface_type;
16703       return DW_TAG_structure_type;
16704 
16705     default:
16706       gcc_unreachable ();
16707     }
16708 }
16709 
16710 /* Generate a DIE to represent an enumeration type.  Note that these DIEs
16711    include all of the information about the enumeration values also. Each
16712    enumerated type name/value is listed as a child of the enumerated type
16713    DIE.  */
16714 
16715 static dw_die_ref
16716 gen_enumeration_type_die (tree type, dw_die_ref context_die)
16717 {
16718   dw_die_ref type_die = lookup_type_die (type);
16719 
16720   if (type_die == NULL)
16721     {
16722       type_die = new_die (DW_TAG_enumeration_type,
16723 			  scope_die_for (type, context_die), type);
16724       equate_type_number_to_die (type, type_die);
16725       add_name_attribute (type_die, type_tag (type));
16726       if (dwarf_version >= 4 || !dwarf_strict)
16727 	{
16728 	  if (ENUM_IS_SCOPED (type))
16729 	    add_AT_flag (type_die, DW_AT_enum_class, 1);
16730 	  if (ENUM_IS_OPAQUE (type))
16731 	    add_AT_flag (type_die, DW_AT_declaration, 1);
16732 	}
16733     }
16734   else if (! TYPE_SIZE (type))
16735     return type_die;
16736   else
16737     remove_AT (type_die, DW_AT_declaration);
16738 
16739   /* Handle a GNU C/C++ extension, i.e. incomplete enum types.  If the
16740      given enum type is incomplete, do not generate the DW_AT_byte_size
16741      attribute or the DW_AT_element_list attribute.  */
16742   if (TYPE_SIZE (type))
16743     {
16744       tree link;
16745 
16746       TREE_ASM_WRITTEN (type) = 1;
16747       add_byte_size_attribute (type_die, type);
16748       if (TYPE_STUB_DECL (type) != NULL_TREE)
16749 	{
16750 	  add_src_coords_attributes (type_die, TYPE_STUB_DECL (type));
16751 	  add_accessibility_attribute (type_die, TYPE_STUB_DECL (type));
16752 	}
16753 
16754       /* If the first reference to this type was as the return type of an
16755 	 inline function, then it may not have a parent.  Fix this now.  */
16756       if (type_die->die_parent == NULL)
16757 	add_child_die (scope_die_for (type, context_die), type_die);
16758 
16759       for (link = TYPE_VALUES (type);
16760 	   link != NULL; link = TREE_CHAIN (link))
16761 	{
16762 	  dw_die_ref enum_die = new_die (DW_TAG_enumerator, type_die, link);
16763 	  tree value = TREE_VALUE (link);
16764 
16765 	  add_name_attribute (enum_die,
16766 			      IDENTIFIER_POINTER (TREE_PURPOSE (link)));
16767 
16768 	  if (TREE_CODE (value) == CONST_DECL)
16769 	    value = DECL_INITIAL (value);
16770 
16771 	  if (host_integerp (value, TYPE_UNSIGNED (TREE_TYPE (value))))
16772 	    /* DWARF2 does not provide a way of indicating whether or
16773 	       not enumeration constants are signed or unsigned.  GDB
16774 	       always assumes the values are signed, so we output all
16775 	       values as if they were signed.  That means that
16776 	       enumeration constants with very large unsigned values
16777 	       will appear to have negative values in the debugger.  */
16778 	    add_AT_int (enum_die, DW_AT_const_value,
16779 			tree_low_cst (value, tree_int_cst_sgn (value) > 0));
16780 	}
16781 
16782       add_gnat_descriptive_type_attribute (type_die, type, context_die);
16783       if (TYPE_ARTIFICIAL (type))
16784 	add_AT_flag (type_die, DW_AT_artificial, 1);
16785     }
16786   else
16787     add_AT_flag (type_die, DW_AT_declaration, 1);
16788 
16789   if (get_AT (type_die, DW_AT_name))
16790     add_pubtype (type, type_die);
16791 
16792   return type_die;
16793 }
16794 
16795 /* Generate a DIE to represent either a real live formal parameter decl or to
16796    represent just the type of some formal parameter position in some function
16797    type.
16798 
16799    Note that this routine is a bit unusual because its argument may be a
16800    ..._DECL node (i.e. either a PARM_DECL or perhaps a VAR_DECL which
16801    represents an inlining of some PARM_DECL) or else some sort of a ..._TYPE
16802    node.  If it's the former then this function is being called to output a
16803    DIE to represent a formal parameter object (or some inlining thereof).  If
16804    it's the latter, then this function is only being called to output a
16805    DW_TAG_formal_parameter DIE to stand as a placeholder for some formal
16806    argument type of some subprogram type.
16807    If EMIT_NAME_P is true, name and source coordinate attributes
16808    are emitted.  */
16809 
16810 static dw_die_ref
16811 gen_formal_parameter_die (tree node, tree origin, bool emit_name_p,
16812 			  dw_die_ref context_die)
16813 {
16814   tree node_or_origin = node ? node : origin;
16815   tree ultimate_origin;
16816   dw_die_ref parm_die
16817     = new_die (DW_TAG_formal_parameter, context_die, node);
16818 
16819   switch (TREE_CODE_CLASS (TREE_CODE (node_or_origin)))
16820     {
16821     case tcc_declaration:
16822       ultimate_origin = decl_ultimate_origin (node_or_origin);
16823       if (node || ultimate_origin)
16824 	origin = ultimate_origin;
16825       if (origin != NULL)
16826 	add_abstract_origin_attribute (parm_die, origin);
16827       else if (emit_name_p)
16828 	add_name_and_src_coords_attributes (parm_die, node);
16829       if (origin == NULL
16830 	  || (! DECL_ABSTRACT (node_or_origin)
16831 	      && variably_modified_type_p (TREE_TYPE (node_or_origin),
16832 					   decl_function_context
16833 							    (node_or_origin))))
16834 	{
16835 	  tree type = TREE_TYPE (node_or_origin);
16836 	  if (decl_by_reference_p (node_or_origin))
16837 	    add_type_attribute (parm_die, TREE_TYPE (type), 0, 0,
16838 				context_die);
16839 	  else
16840 	    add_type_attribute (parm_die, type,
16841 				TREE_READONLY (node_or_origin),
16842 				TREE_THIS_VOLATILE (node_or_origin),
16843 				context_die);
16844 	}
16845       if (origin == NULL && DECL_ARTIFICIAL (node))
16846 	add_AT_flag (parm_die, DW_AT_artificial, 1);
16847 
16848       if (node && node != origin)
16849         equate_decl_number_to_die (node, parm_die);
16850       if (! DECL_ABSTRACT (node_or_origin))
16851 	add_location_or_const_value_attribute (parm_die, node_or_origin,
16852 					       node == NULL, DW_AT_location);
16853 
16854       break;
16855 
16856     case tcc_type:
16857       /* We were called with some kind of a ..._TYPE node.  */
16858       add_type_attribute (parm_die, node_or_origin, 0, 0, context_die);
16859       break;
16860 
16861     default:
16862       gcc_unreachable ();
16863     }
16864 
16865   return parm_die;
16866 }
16867 
16868 /* Generate and return a DW_TAG_GNU_formal_parameter_pack. Also generate
16869    children DW_TAG_formal_parameter DIEs representing the arguments of the
16870    parameter pack.
16871 
16872    PARM_PACK must be a function parameter pack.
16873    PACK_ARG is the first argument of the parameter pack. Its TREE_CHAIN
16874    must point to the subsequent arguments of the function PACK_ARG belongs to.
16875    SUBR_DIE is the DIE of the function PACK_ARG belongs to.
16876    If NEXT_ARG is non NULL, *NEXT_ARG is set to the function argument
16877    following the last one for which a DIE was generated.  */
16878 
16879 static dw_die_ref
16880 gen_formal_parameter_pack_die  (tree parm_pack,
16881 				tree pack_arg,
16882 				dw_die_ref subr_die,
16883 				tree *next_arg)
16884 {
16885   tree arg;
16886   dw_die_ref parm_pack_die;
16887 
16888   gcc_assert (parm_pack
16889 	      && lang_hooks.function_parameter_pack_p (parm_pack)
16890 	      && subr_die);
16891 
16892   parm_pack_die = new_die (DW_TAG_GNU_formal_parameter_pack, subr_die, parm_pack);
16893   add_src_coords_attributes (parm_pack_die, parm_pack);
16894 
16895   for (arg = pack_arg; arg; arg = DECL_CHAIN (arg))
16896     {
16897       if (! lang_hooks.decls.function_parm_expanded_from_pack_p (arg,
16898 								 parm_pack))
16899 	break;
16900       gen_formal_parameter_die (arg, NULL,
16901 				false /* Don't emit name attribute.  */,
16902 				parm_pack_die);
16903     }
16904   if (next_arg)
16905     *next_arg = arg;
16906   return parm_pack_die;
16907 }
16908 
16909 /* Generate a special type of DIE used as a stand-in for a trailing ellipsis
16910    at the end of an (ANSI prototyped) formal parameters list.  */
16911 
16912 static void
16913 gen_unspecified_parameters_die (tree decl_or_type, dw_die_ref context_die)
16914 {
16915   new_die (DW_TAG_unspecified_parameters, context_die, decl_or_type);
16916 }
16917 
16918 /* Generate a list of nameless DW_TAG_formal_parameter DIEs (and perhaps a
16919    DW_TAG_unspecified_parameters DIE) to represent the types of the formal
16920    parameters as specified in some function type specification (except for
16921    those which appear as part of a function *definition*).  */
16922 
16923 static void
16924 gen_formal_types_die (tree function_or_method_type, dw_die_ref context_die)
16925 {
16926   tree link;
16927   tree formal_type = NULL;
16928   tree first_parm_type;
16929   tree arg;
16930 
16931   if (TREE_CODE (function_or_method_type) == FUNCTION_DECL)
16932     {
16933       arg = DECL_ARGUMENTS (function_or_method_type);
16934       function_or_method_type = TREE_TYPE (function_or_method_type);
16935     }
16936   else
16937     arg = NULL_TREE;
16938 
16939   first_parm_type = TYPE_ARG_TYPES (function_or_method_type);
16940 
16941   /* Make our first pass over the list of formal parameter types and output a
16942      DW_TAG_formal_parameter DIE for each one.  */
16943   for (link = first_parm_type; link; )
16944     {
16945       dw_die_ref parm_die;
16946 
16947       formal_type = TREE_VALUE (link);
16948       if (formal_type == void_type_node)
16949 	break;
16950 
16951       /* Output a (nameless) DIE to represent the formal parameter itself.  */
16952       parm_die = gen_formal_parameter_die (formal_type, NULL,
16953 					   true /* Emit name attribute.  */,
16954 					   context_die);
16955       if (TREE_CODE (function_or_method_type) == METHOD_TYPE
16956 	  && link == first_parm_type)
16957 	{
16958 	  add_AT_flag (parm_die, DW_AT_artificial, 1);
16959 	  if (dwarf_version >= 3 || !dwarf_strict)
16960 	    add_AT_die_ref (context_die, DW_AT_object_pointer, parm_die);
16961 	}
16962       else if (arg && DECL_ARTIFICIAL (arg))
16963 	add_AT_flag (parm_die, DW_AT_artificial, 1);
16964 
16965       link = TREE_CHAIN (link);
16966       if (arg)
16967 	arg = DECL_CHAIN (arg);
16968     }
16969 
16970   /* If this function type has an ellipsis, add a
16971      DW_TAG_unspecified_parameters DIE to the end of the parameter list.  */
16972   if (formal_type != void_type_node)
16973     gen_unspecified_parameters_die (function_or_method_type, context_die);
16974 
16975   /* Make our second (and final) pass over the list of formal parameter types
16976      and output DIEs to represent those types (as necessary).  */
16977   for (link = TYPE_ARG_TYPES (function_or_method_type);
16978        link && TREE_VALUE (link);
16979        link = TREE_CHAIN (link))
16980     gen_type_die (TREE_VALUE (link), context_die);
16981 }
16982 
16983 /* We want to generate the DIE for TYPE so that we can generate the
16984    die for MEMBER, which has been defined; we will need to refer back
16985    to the member declaration nested within TYPE.  If we're trying to
16986    generate minimal debug info for TYPE, processing TYPE won't do the
16987    trick; we need to attach the member declaration by hand.  */
16988 
16989 static void
16990 gen_type_die_for_member (tree type, tree member, dw_die_ref context_die)
16991 {
16992   gen_type_die (type, context_die);
16993 
16994   /* If we're trying to avoid duplicate debug info, we may not have
16995      emitted the member decl for this function.  Emit it now.  */
16996   if (TYPE_STUB_DECL (type)
16997       && TYPE_DECL_SUPPRESS_DEBUG (TYPE_STUB_DECL (type))
16998       && ! lookup_decl_die (member))
16999     {
17000       dw_die_ref type_die;
17001       gcc_assert (!decl_ultimate_origin (member));
17002 
17003       push_decl_scope (type);
17004       type_die = lookup_type_die_strip_naming_typedef (type);
17005       if (TREE_CODE (member) == FUNCTION_DECL)
17006 	gen_subprogram_die (member, type_die);
17007       else if (TREE_CODE (member) == FIELD_DECL)
17008 	{
17009 	  /* Ignore the nameless fields that are used to skip bits but handle
17010 	     C++ anonymous unions and structs.  */
17011 	  if (DECL_NAME (member) != NULL_TREE
17012 	      || TREE_CODE (TREE_TYPE (member)) == UNION_TYPE
17013 	      || TREE_CODE (TREE_TYPE (member)) == RECORD_TYPE)
17014 	    {
17015 	      gen_type_die (member_declared_type (member), type_die);
17016 	      gen_field_die (member, type_die);
17017 	    }
17018 	}
17019       else
17020 	gen_variable_die (member, NULL_TREE, type_die);
17021 
17022       pop_decl_scope ();
17023     }
17024 }
17025 
17026 /* Generate the DWARF2 info for the "abstract" instance of a function which we
17027    may later generate inlined and/or out-of-line instances of.  */
17028 
17029 static void
17030 dwarf2out_abstract_function (tree decl)
17031 {
17032   dw_die_ref old_die;
17033   tree save_fn;
17034   tree context;
17035   int was_abstract;
17036   htab_t old_decl_loc_table;
17037   htab_t old_cached_dw_loc_list_table;
17038   int old_call_site_count, old_tail_call_site_count;
17039   struct call_arg_loc_node *old_call_arg_locations;
17040 
17041   /* Make sure we have the actual abstract inline, not a clone.  */
17042   decl = DECL_ORIGIN (decl);
17043 
17044   old_die = lookup_decl_die (decl);
17045   if (old_die && get_AT (old_die, DW_AT_inline))
17046     /* We've already generated the abstract instance.  */
17047     return;
17048 
17049   /* We can be called while recursively when seeing block defining inlined subroutine
17050      DIE.  Be sure to not clobber the outer location table nor use it or we would
17051      get locations in abstract instantces.  */
17052   old_decl_loc_table = decl_loc_table;
17053   decl_loc_table = NULL;
17054   old_cached_dw_loc_list_table = cached_dw_loc_list_table;
17055   cached_dw_loc_list_table = NULL;
17056   old_call_arg_locations = call_arg_locations;
17057   call_arg_locations = NULL;
17058   old_call_site_count = call_site_count;
17059   call_site_count = -1;
17060   old_tail_call_site_count = tail_call_site_count;
17061   tail_call_site_count = -1;
17062 
17063   /* Be sure we've emitted the in-class declaration DIE (if any) first, so
17064      we don't get confused by DECL_ABSTRACT.  */
17065   if (debug_info_level > DINFO_LEVEL_TERSE)
17066     {
17067       context = decl_class_context (decl);
17068       if (context)
17069 	gen_type_die_for_member
17070 	  (context, decl, decl_function_context (decl) ? NULL : comp_unit_die ());
17071     }
17072 
17073   /* Pretend we've just finished compiling this function.  */
17074   save_fn = current_function_decl;
17075   current_function_decl = decl;
17076   push_cfun (DECL_STRUCT_FUNCTION (decl));
17077 
17078   was_abstract = DECL_ABSTRACT (decl);
17079   set_decl_abstract_flags (decl, 1);
17080   dwarf2out_decl (decl);
17081   if (! was_abstract)
17082     set_decl_abstract_flags (decl, 0);
17083 
17084   current_function_decl = save_fn;
17085   decl_loc_table = old_decl_loc_table;
17086   cached_dw_loc_list_table = old_cached_dw_loc_list_table;
17087   call_arg_locations = old_call_arg_locations;
17088   call_site_count = old_call_site_count;
17089   tail_call_site_count = old_tail_call_site_count;
17090   pop_cfun ();
17091 }
17092 
17093 /* Helper function of premark_used_types() which gets called through
17094    htab_traverse.
17095 
17096    Marks the DIE of a given type in *SLOT as perennial, so it never gets
17097    marked as unused by prune_unused_types.  */
17098 
17099 static int
17100 premark_used_types_helper (void **slot, void *data ATTRIBUTE_UNUSED)
17101 {
17102   tree type;
17103   dw_die_ref die;
17104 
17105   type = (tree) *slot;
17106   die = lookup_type_die (type);
17107   if (die != NULL)
17108     die->die_perennial_p = 1;
17109   return 1;
17110 }
17111 
17112 /* Helper function of premark_types_used_by_global_vars which gets called
17113    through htab_traverse.
17114 
17115    Marks the DIE of a given type in *SLOT as perennial, so it never gets
17116    marked as unused by prune_unused_types. The DIE of the type is marked
17117    only if the global variable using the type will actually be emitted.  */
17118 
17119 static int
17120 premark_types_used_by_global_vars_helper (void **slot,
17121 					  void *data ATTRIBUTE_UNUSED)
17122 {
17123   struct types_used_by_vars_entry *entry;
17124   dw_die_ref die;
17125 
17126   entry = (struct types_used_by_vars_entry *) *slot;
17127   gcc_assert (entry->type != NULL
17128 	      && entry->var_decl != NULL);
17129   die = lookup_type_die (entry->type);
17130   if (die)
17131     {
17132       /* Ask cgraph if the global variable really is to be emitted.
17133          If yes, then we'll keep the DIE of ENTRY->TYPE.  */
17134       struct varpool_node *node = varpool_get_node (entry->var_decl);
17135       if (node && node->needed)
17136 	{
17137 	  die->die_perennial_p = 1;
17138 	  /* Keep the parent DIEs as well.  */
17139 	  while ((die = die->die_parent) && die->die_perennial_p == 0)
17140 	    die->die_perennial_p = 1;
17141 	}
17142     }
17143   return 1;
17144 }
17145 
17146 /* Mark all members of used_types_hash as perennial.  */
17147 
17148 static void
17149 premark_used_types (void)
17150 {
17151   if (cfun && cfun->used_types_hash)
17152     htab_traverse (cfun->used_types_hash, premark_used_types_helper, NULL);
17153 }
17154 
17155 /* Mark all members of types_used_by_vars_entry as perennial.  */
17156 
17157 static void
17158 premark_types_used_by_global_vars (void)
17159 {
17160   if (types_used_by_vars_hash)
17161     htab_traverse (types_used_by_vars_hash,
17162 		   premark_types_used_by_global_vars_helper, NULL);
17163 }
17164 
17165 /* Generate a DW_TAG_GNU_call_site DIE in function DECL under SUBR_DIE
17166    for CA_LOC call arg loc node.  */
17167 
17168 static dw_die_ref
17169 gen_call_site_die (tree decl, dw_die_ref subr_die,
17170 		   struct call_arg_loc_node *ca_loc)
17171 {
17172   dw_die_ref stmt_die = NULL, die;
17173   tree block = ca_loc->block;
17174 
17175   while (block
17176 	 && block != DECL_INITIAL (decl)
17177 	 && TREE_CODE (block) == BLOCK)
17178     {
17179       if (VEC_length (dw_die_ref, block_map) > BLOCK_NUMBER (block))
17180 	stmt_die = VEC_index (dw_die_ref, block_map, BLOCK_NUMBER (block));
17181       if (stmt_die)
17182 	break;
17183       block = BLOCK_SUPERCONTEXT (block);
17184     }
17185   if (stmt_die == NULL)
17186     stmt_die = subr_die;
17187   die = new_die (DW_TAG_GNU_call_site, stmt_die, NULL_TREE);
17188   add_AT_lbl_id (die, DW_AT_low_pc, ca_loc->label);
17189   if (ca_loc->tail_call_p)
17190     add_AT_flag (die, DW_AT_GNU_tail_call, 1);
17191   if (ca_loc->symbol_ref)
17192     {
17193       dw_die_ref tdie = lookup_decl_die (SYMBOL_REF_DECL (ca_loc->symbol_ref));
17194       if (tdie)
17195 	add_AT_die_ref (die, DW_AT_abstract_origin, tdie);
17196       else
17197 	add_AT_addr (die, DW_AT_abstract_origin, ca_loc->symbol_ref);
17198     }
17199   return die;
17200 }
17201 
17202 /* Generate a DIE to represent a declared function (either file-scope or
17203    block-local).  */
17204 
17205 static void
17206 gen_subprogram_die (tree decl, dw_die_ref context_die)
17207 {
17208   tree origin = decl_ultimate_origin (decl);
17209   dw_die_ref subr_die;
17210   tree outer_scope;
17211   dw_die_ref old_die = lookup_decl_die (decl);
17212   int declaration = (current_function_decl != decl
17213 		     || class_or_namespace_scope_p (context_die));
17214 
17215   premark_used_types ();
17216 
17217   /* It is possible to have both DECL_ABSTRACT and DECLARATION be true if we
17218      started to generate the abstract instance of an inline, decided to output
17219      its containing class, and proceeded to emit the declaration of the inline
17220      from the member list for the class.  If so, DECLARATION takes priority;
17221      we'll get back to the abstract instance when done with the class.  */
17222 
17223   /* The class-scope declaration DIE must be the primary DIE.  */
17224   if (origin && declaration && class_or_namespace_scope_p (context_die))
17225     {
17226       origin = NULL;
17227       gcc_assert (!old_die);
17228     }
17229 
17230   /* Now that the C++ front end lazily declares artificial member fns, we
17231      might need to retrofit the declaration into its class.  */
17232   if (!declaration && !origin && !old_die
17233       && DECL_CONTEXT (decl) && TYPE_P (DECL_CONTEXT (decl))
17234       && !class_or_namespace_scope_p (context_die)
17235       && debug_info_level > DINFO_LEVEL_TERSE)
17236     old_die = force_decl_die (decl);
17237 
17238   if (origin != NULL)
17239     {
17240       gcc_assert (!declaration || local_scope_p (context_die));
17241 
17242       /* Fixup die_parent for the abstract instance of a nested
17243 	 inline function.  */
17244       if (old_die && old_die->die_parent == NULL)
17245 	add_child_die (context_die, old_die);
17246 
17247       subr_die = new_die (DW_TAG_subprogram, context_die, decl);
17248       add_abstract_origin_attribute (subr_die, origin);
17249       /*  This is where the actual code for a cloned function is.
17250 	  Let's emit linkage name attribute for it.  This helps
17251 	  debuggers to e.g, set breakpoints into
17252 	  constructors/destructors when the user asks "break
17253 	  K::K".  */
17254       add_linkage_name (subr_die, decl);
17255     }
17256   else if (old_die)
17257     {
17258       expanded_location s = expand_location (DECL_SOURCE_LOCATION (decl));
17259       struct dwarf_file_data * file_index = lookup_filename (s.file);
17260 
17261       if (!get_AT_flag (old_die, DW_AT_declaration)
17262 	  /* We can have a normal definition following an inline one in the
17263 	     case of redefinition of GNU C extern inlines.
17264 	     It seems reasonable to use AT_specification in this case.  */
17265 	  && !get_AT (old_die, DW_AT_inline))
17266 	{
17267 	  /* Detect and ignore this case, where we are trying to output
17268 	     something we have already output.  */
17269 	  return;
17270 	}
17271 
17272       /* If the definition comes from the same place as the declaration,
17273 	 maybe use the old DIE.  We always want the DIE for this function
17274 	 that has the *_pc attributes to be under comp_unit_die so the
17275 	 debugger can find it.  We also need to do this for abstract
17276 	 instances of inlines, since the spec requires the out-of-line copy
17277 	 to have the same parent.  For local class methods, this doesn't
17278 	 apply; we just use the old DIE.  */
17279       if ((is_cu_die (old_die->die_parent) || context_die == NULL)
17280 	  && (DECL_ARTIFICIAL (decl)
17281 	      || (get_AT_file (old_die, DW_AT_decl_file) == file_index
17282 		  && (get_AT_unsigned (old_die, DW_AT_decl_line)
17283 		      == (unsigned) s.line))))
17284 	{
17285 	  subr_die = old_die;
17286 
17287 	  /* Clear out the declaration attribute and the formal parameters.
17288 	     Do not remove all children, because it is possible that this
17289 	     declaration die was forced using force_decl_die(). In such
17290 	     cases die that forced declaration die (e.g. TAG_imported_module)
17291 	     is one of the children that we do not want to remove.  */
17292 	  remove_AT (subr_die, DW_AT_declaration);
17293 	  remove_AT (subr_die, DW_AT_object_pointer);
17294 	  remove_child_TAG (subr_die, DW_TAG_formal_parameter);
17295 	}
17296       else
17297 	{
17298 	  subr_die = new_die (DW_TAG_subprogram, context_die, decl);
17299 	  add_AT_specification (subr_die, old_die);
17300 	  if (get_AT_file (old_die, DW_AT_decl_file) != file_index)
17301 	    add_AT_file (subr_die, DW_AT_decl_file, file_index);
17302 	  if (get_AT_unsigned (old_die, DW_AT_decl_line) != (unsigned) s.line)
17303 	    add_AT_unsigned (subr_die, DW_AT_decl_line, s.line);
17304 	}
17305     }
17306   else
17307     {
17308       subr_die = new_die (DW_TAG_subprogram, context_die, decl);
17309 
17310       if (TREE_PUBLIC (decl))
17311 	add_AT_flag (subr_die, DW_AT_external, 1);
17312 
17313       add_name_and_src_coords_attributes (subr_die, decl);
17314       if (debug_info_level > DINFO_LEVEL_TERSE)
17315 	{
17316 	  add_prototyped_attribute (subr_die, TREE_TYPE (decl));
17317 	  add_type_attribute (subr_die, TREE_TYPE (TREE_TYPE (decl)),
17318 			      0, 0, context_die);
17319 	}
17320 
17321       add_pure_or_virtual_attribute (subr_die, decl);
17322       if (DECL_ARTIFICIAL (decl))
17323 	add_AT_flag (subr_die, DW_AT_artificial, 1);
17324 
17325       add_accessibility_attribute (subr_die, decl);
17326     }
17327 
17328   if (declaration)
17329     {
17330       if (!old_die || !get_AT (old_die, DW_AT_inline))
17331 	{
17332 	  add_AT_flag (subr_die, DW_AT_declaration, 1);
17333 
17334 	  /* If this is an explicit function declaration then generate
17335 	     a DW_AT_explicit attribute.  */
17336 	  if (lang_hooks.decls.function_decl_explicit_p (decl)
17337 	      && (dwarf_version >= 3 || !dwarf_strict))
17338 	    add_AT_flag (subr_die, DW_AT_explicit, 1);
17339 
17340 	  /* The first time we see a member function, it is in the context of
17341 	     the class to which it belongs.  We make sure of this by emitting
17342 	     the class first.  The next time is the definition, which is
17343 	     handled above.  The two may come from the same source text.
17344 
17345 	     Note that force_decl_die() forces function declaration die. It is
17346 	     later reused to represent definition.  */
17347 	  equate_decl_number_to_die (decl, subr_die);
17348 	}
17349     }
17350   else if (DECL_ABSTRACT (decl))
17351     {
17352       if (DECL_DECLARED_INLINE_P (decl))
17353 	{
17354 	  if (cgraph_function_possibly_inlined_p (decl))
17355 	    add_AT_unsigned (subr_die, DW_AT_inline, DW_INL_declared_inlined);
17356 	  else
17357 	    add_AT_unsigned (subr_die, DW_AT_inline, DW_INL_declared_not_inlined);
17358 	}
17359       else
17360 	{
17361 	  if (cgraph_function_possibly_inlined_p (decl))
17362 	    add_AT_unsigned (subr_die, DW_AT_inline, DW_INL_inlined);
17363 	  else
17364 	    add_AT_unsigned (subr_die, DW_AT_inline, DW_INL_not_inlined);
17365 	}
17366 
17367       if (DECL_DECLARED_INLINE_P (decl)
17368 	  && lookup_attribute ("artificial", DECL_ATTRIBUTES (decl)))
17369 	add_AT_flag (subr_die, DW_AT_artificial, 1);
17370 
17371       equate_decl_number_to_die (decl, subr_die);
17372     }
17373   else if (!DECL_EXTERNAL (decl))
17374     {
17375       HOST_WIDE_INT cfa_fb_offset;
17376 
17377       if (!old_die || !get_AT (old_die, DW_AT_inline))
17378 	equate_decl_number_to_die (decl, subr_die);
17379 
17380       if (!flag_reorder_blocks_and_partition)
17381 	{
17382 	  dw_fde_ref fde = cfun->fde;
17383 	  if (fde->dw_fde_begin)
17384 	    {
17385 	      /* We have already generated the labels.  */
17386 	      add_AT_lbl_id (subr_die, DW_AT_low_pc, fde->dw_fde_begin);
17387 	      add_AT_lbl_id (subr_die, DW_AT_high_pc, fde->dw_fde_end);
17388 	    }
17389 	  else
17390 	    {
17391 	      /* Create start/end labels and add the range.  */
17392 	      char label_id[MAX_ARTIFICIAL_LABEL_BYTES];
17393 	      ASM_GENERATE_INTERNAL_LABEL (label_id, FUNC_BEGIN_LABEL,
17394 					   current_function_funcdef_no);
17395 	      add_AT_lbl_id (subr_die, DW_AT_low_pc, label_id);
17396 	      ASM_GENERATE_INTERNAL_LABEL (label_id, FUNC_END_LABEL,
17397 					   current_function_funcdef_no);
17398 	      add_AT_lbl_id (subr_die, DW_AT_high_pc, label_id);
17399 	    }
17400 
17401 #if VMS_DEBUGGING_INFO
17402       /* HP OpenVMS Industry Standard 64: DWARF Extensions
17403 	 Section 2.3 Prologue and Epilogue Attributes:
17404 	 When a breakpoint is set on entry to a function, it is generally
17405 	 desirable for execution to be suspended, not on the very first
17406 	 instruction of the function, but rather at a point after the
17407 	 function's frame has been set up, after any language defined local
17408 	 declaration processing has been completed, and before execution of
17409 	 the first statement of the function begins. Debuggers generally
17410 	 cannot properly determine where this point is.  Similarly for a
17411 	 breakpoint set on exit from a function. The prologue and epilogue
17412 	 attributes allow a compiler to communicate the location(s) to use.  */
17413 
17414       {
17415         if (fde->dw_fde_vms_end_prologue)
17416           add_AT_vms_delta (subr_die, DW_AT_HP_prologue,
17417 	    fde->dw_fde_begin, fde->dw_fde_vms_end_prologue);
17418 
17419         if (fde->dw_fde_vms_begin_epilogue)
17420           add_AT_vms_delta (subr_die, DW_AT_HP_epilogue,
17421 	    fde->dw_fde_begin, fde->dw_fde_vms_begin_epilogue);
17422       }
17423 #endif
17424 
17425 	  add_pubname (decl, subr_die);
17426 	}
17427       else
17428 	{
17429 	  /* Generate pubnames entries for the split function code ranges.  */
17430 	  dw_fde_ref fde = cfun->fde;
17431 
17432 	  if (fde->dw_fde_second_begin)
17433 	    {
17434 	      if (dwarf_version >= 3 || !dwarf_strict)
17435 		{
17436 		  /* We should use ranges for non-contiguous code section
17437 		     addresses.  Use the actual code range for the initial
17438 		     section, since the HOT/COLD labels might precede an
17439 		     alignment offset.  */
17440 		  bool range_list_added = false;
17441 		  add_ranges_by_labels (subr_die, fde->dw_fde_begin,
17442 					fde->dw_fde_end, &range_list_added);
17443 		  add_ranges_by_labels (subr_die, fde->dw_fde_second_begin,
17444 					fde->dw_fde_second_end,
17445 					&range_list_added);
17446 		  add_pubname (decl, subr_die);
17447 		  if (range_list_added)
17448 		    add_ranges (NULL);
17449 		}
17450 	      else
17451 		{
17452 		  /* There is no real support in DW2 for this .. so we make
17453 		     a work-around.  First, emit the pub name for the segment
17454 		     containing the function label.  Then make and emit a
17455 		     simplified subprogram DIE for the second segment with the
17456 		     name pre-fixed by __hot/cold_sect_of_.  We use the same
17457 		     linkage name for the second die so that gdb will find both
17458 		     sections when given "b foo".  */
17459 		  const char *name = NULL;
17460 		  tree decl_name = DECL_NAME (decl);
17461 		  dw_die_ref seg_die;
17462 
17463 		  /* Do the 'primary' section.   */
17464 		  add_AT_lbl_id (subr_die, DW_AT_low_pc,
17465 				 fde->dw_fde_begin);
17466 		  add_AT_lbl_id (subr_die, DW_AT_high_pc,
17467 				 fde->dw_fde_end);
17468 		  /* Add it.   */
17469 		  add_pubname (decl, subr_die);
17470 
17471 		  /* Build a minimal DIE for the secondary section.  */
17472 		  seg_die = new_die (DW_TAG_subprogram,
17473 				     subr_die->die_parent, decl);
17474 
17475 		  if (TREE_PUBLIC (decl))
17476 		    add_AT_flag (seg_die, DW_AT_external, 1);
17477 
17478 		  if (decl_name != NULL
17479 		      && IDENTIFIER_POINTER (decl_name) != NULL)
17480 		    {
17481 		      name = dwarf2_name (decl, 1);
17482 		      if (! DECL_ARTIFICIAL (decl))
17483 			add_src_coords_attributes (seg_die, decl);
17484 
17485 		      add_linkage_name (seg_die, decl);
17486 		    }
17487 		  gcc_assert (name != NULL);
17488 		  add_pure_or_virtual_attribute (seg_die, decl);
17489 		  if (DECL_ARTIFICIAL (decl))
17490 		    add_AT_flag (seg_die, DW_AT_artificial, 1);
17491 
17492 		  name = concat ("__second_sect_of_", name, NULL);
17493 		  add_AT_lbl_id (seg_die, DW_AT_low_pc,
17494 				 fde->dw_fde_second_begin);
17495 		  add_AT_lbl_id (seg_die, DW_AT_high_pc,
17496 				 fde->dw_fde_second_end);
17497 		  add_name_attribute (seg_die, name);
17498 		  add_pubname_string (name, seg_die);
17499 		}
17500 	    }
17501 	  else
17502 	    {
17503 	      add_AT_lbl_id (subr_die, DW_AT_low_pc, fde->dw_fde_begin);
17504 	      add_AT_lbl_id (subr_die, DW_AT_high_pc, fde->dw_fde_end);
17505 	      add_pubname (decl, subr_die);
17506 	    }
17507 	}
17508 
17509 #ifdef MIPS_DEBUGGING_INFO
17510       /* Add a reference to the FDE for this routine.  */
17511       add_AT_fde_ref (subr_die, DW_AT_MIPS_fde, cfun->fde->fde_index);
17512 #endif
17513 
17514       cfa_fb_offset = CFA_FRAME_BASE_OFFSET (decl);
17515 
17516       /* We define the "frame base" as the function's CFA.  This is more
17517 	 convenient for several reasons: (1) It's stable across the prologue
17518 	 and epilogue, which makes it better than just a frame pointer,
17519 	 (2) With dwarf3, there exists a one-byte encoding that allows us
17520 	 to reference the .debug_frame data by proxy, but failing that,
17521 	 (3) We can at least reuse the code inspection and interpretation
17522 	 code that determines the CFA position at various points in the
17523 	 function.  */
17524       if (dwarf_version >= 3)
17525 	{
17526 	  dw_loc_descr_ref op = new_loc_descr (DW_OP_call_frame_cfa, 0, 0);
17527 	  add_AT_loc (subr_die, DW_AT_frame_base, op);
17528 	}
17529       else
17530 	{
17531 	  dw_loc_list_ref list = convert_cfa_to_fb_loc_list (cfa_fb_offset);
17532 	  if (list->dw_loc_next)
17533 	    add_AT_loc_list (subr_die, DW_AT_frame_base, list);
17534 	  else
17535 	    add_AT_loc (subr_die, DW_AT_frame_base, list->expr);
17536 	}
17537 
17538       /* Compute a displacement from the "steady-state frame pointer" to
17539 	 the CFA.  The former is what all stack slots and argument slots
17540 	 will reference in the rtl; the later is what we've told the
17541 	 debugger about.  We'll need to adjust all frame_base references
17542 	 by this displacement.  */
17543       compute_frame_pointer_to_fb_displacement (cfa_fb_offset);
17544 
17545       if (cfun->static_chain_decl)
17546 	add_AT_location_description (subr_die, DW_AT_static_link,
17547 		 loc_list_from_tree (cfun->static_chain_decl, 2));
17548     }
17549 
17550   /* Generate child dies for template paramaters.  */
17551   if (debug_info_level > DINFO_LEVEL_TERSE)
17552     gen_generic_params_dies (decl);
17553 
17554   /* Now output descriptions of the arguments for this function. This gets
17555      (unnecessarily?) complex because of the fact that the DECL_ARGUMENT list
17556      for a FUNCTION_DECL doesn't indicate cases where there was a trailing
17557      `...' at the end of the formal parameter list.  In order to find out if
17558      there was a trailing ellipsis or not, we must instead look at the type
17559      associated with the FUNCTION_DECL.  This will be a node of type
17560      FUNCTION_TYPE. If the chain of type nodes hanging off of this
17561      FUNCTION_TYPE node ends with a void_type_node then there should *not* be
17562      an ellipsis at the end.  */
17563 
17564   /* In the case where we are describing a mere function declaration, all we
17565      need to do here (and all we *can* do here) is to describe the *types* of
17566      its formal parameters.  */
17567   if (debug_info_level <= DINFO_LEVEL_TERSE)
17568     ;
17569   else if (declaration)
17570     gen_formal_types_die (decl, subr_die);
17571   else
17572     {
17573       /* Generate DIEs to represent all known formal parameters.  */
17574       tree parm = DECL_ARGUMENTS (decl);
17575       tree generic_decl = lang_hooks.decls.get_generic_function_decl (decl);
17576       tree generic_decl_parm = generic_decl
17577 				? DECL_ARGUMENTS (generic_decl)
17578 				: NULL;
17579 
17580       /* Now we want to walk the list of parameters of the function and
17581 	 emit their relevant DIEs.
17582 
17583 	 We consider the case of DECL being an instance of a generic function
17584 	 as well as it being a normal function.
17585 
17586 	 If DECL is an instance of a generic function we walk the
17587 	 parameters of the generic function declaration _and_ the parameters of
17588 	 DECL itself. This is useful because we want to emit specific DIEs for
17589 	 function parameter packs and those are declared as part of the
17590 	 generic function declaration. In that particular case,
17591 	 the parameter pack yields a DW_TAG_GNU_formal_parameter_pack DIE.
17592 	 That DIE has children DIEs representing the set of arguments
17593 	 of the pack. Note that the set of pack arguments can be empty.
17594 	 In that case, the DW_TAG_GNU_formal_parameter_pack DIE will not have any
17595 	 children DIE.
17596 
17597 	 Otherwise, we just consider the parameters of DECL.  */
17598       while (generic_decl_parm || parm)
17599 	{
17600 	  if (generic_decl_parm
17601 	      && lang_hooks.function_parameter_pack_p (generic_decl_parm))
17602 	    gen_formal_parameter_pack_die (generic_decl_parm,
17603 					   parm, subr_die,
17604 					   &parm);
17605 	  else if (parm)
17606 	    {
17607 	      dw_die_ref parm_die = gen_decl_die (parm, NULL, subr_die);
17608 
17609 	      if (parm == DECL_ARGUMENTS (decl)
17610 		  && TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE
17611 		  && parm_die
17612 		  && (dwarf_version >= 3 || !dwarf_strict))
17613 		add_AT_die_ref (subr_die, DW_AT_object_pointer, parm_die);
17614 
17615 	      parm = DECL_CHAIN (parm);
17616 	    }
17617 
17618 	  if (generic_decl_parm)
17619 	    generic_decl_parm = DECL_CHAIN (generic_decl_parm);
17620 	}
17621 
17622       /* Decide whether we need an unspecified_parameters DIE at the end.
17623 	 There are 2 more cases to do this for: 1) the ansi ... declaration -
17624 	 this is detectable when the end of the arg list is not a
17625 	 void_type_node 2) an unprototyped function declaration (not a
17626 	 definition).  This just means that we have no info about the
17627 	 parameters at all.  */
17628       if (prototype_p (TREE_TYPE (decl)))
17629 	{
17630 	  /* This is the prototyped case, check for....  */
17631 	  if (stdarg_p (TREE_TYPE (decl)))
17632 	    gen_unspecified_parameters_die (decl, subr_die);
17633 	}
17634       else if (DECL_INITIAL (decl) == NULL_TREE)
17635 	gen_unspecified_parameters_die (decl, subr_die);
17636     }
17637 
17638   /* Output Dwarf info for all of the stuff within the body of the function
17639      (if it has one - it may be just a declaration).  */
17640   outer_scope = DECL_INITIAL (decl);
17641 
17642   /* OUTER_SCOPE is a pointer to the outermost BLOCK node created to represent
17643      a function.  This BLOCK actually represents the outermost binding contour
17644      for the function, i.e. the contour in which the function's formal
17645      parameters and labels get declared. Curiously, it appears that the front
17646      end doesn't actually put the PARM_DECL nodes for the current function onto
17647      the BLOCK_VARS list for this outer scope, but are strung off of the
17648      DECL_ARGUMENTS list for the function instead.
17649 
17650      The BLOCK_VARS list for the `outer_scope' does provide us with a list of
17651      the LABEL_DECL nodes for the function however, and we output DWARF info
17652      for those in decls_for_scope.  Just within the `outer_scope' there will be
17653      a BLOCK node representing the function's outermost pair of curly braces,
17654      and any blocks used for the base and member initializers of a C++
17655      constructor function.  */
17656   if (! declaration && TREE_CODE (outer_scope) != ERROR_MARK)
17657     {
17658       int call_site_note_count = 0;
17659       int tail_call_site_note_count = 0;
17660 
17661       /* Emit a DW_TAG_variable DIE for a named return value.  */
17662       if (DECL_NAME (DECL_RESULT (decl)))
17663 	gen_decl_die (DECL_RESULT (decl), NULL, subr_die);
17664 
17665       current_function_has_inlines = 0;
17666       decls_for_scope (outer_scope, subr_die, 0);
17667 
17668       if (call_arg_locations && !dwarf_strict)
17669 	{
17670 	  struct call_arg_loc_node *ca_loc;
17671 	  for (ca_loc = call_arg_locations; ca_loc; ca_loc = ca_loc->next)
17672 	    {
17673 	      dw_die_ref die = NULL;
17674 	      rtx tloc = NULL_RTX, tlocc = NULL_RTX;
17675 	      rtx arg, next_arg;
17676 
17677 	      for (arg = NOTE_VAR_LOCATION (ca_loc->call_arg_loc_note);
17678 		   arg; arg = next_arg)
17679 		{
17680 		  dw_loc_descr_ref reg, val;
17681 		  enum machine_mode mode = GET_MODE (XEXP (XEXP (arg, 0), 1));
17682 		  dw_die_ref cdie, tdie = NULL;
17683 
17684 		  next_arg = XEXP (arg, 1);
17685 		  if (REG_P (XEXP (XEXP (arg, 0), 0))
17686 		      && next_arg
17687 		      && MEM_P (XEXP (XEXP (next_arg, 0), 0))
17688 		      && REG_P (XEXP (XEXP (XEXP (next_arg, 0), 0), 0))
17689 		      && REGNO (XEXP (XEXP (arg, 0), 0))
17690 			 == REGNO (XEXP (XEXP (XEXP (next_arg, 0), 0), 0)))
17691 		    next_arg = XEXP (next_arg, 1);
17692 		  if (mode == VOIDmode)
17693 		    {
17694 		      mode = GET_MODE (XEXP (XEXP (arg, 0), 0));
17695 		      if (mode == VOIDmode)
17696 			mode = GET_MODE (XEXP (arg, 0));
17697 		    }
17698 		  if (mode == VOIDmode || mode == BLKmode)
17699 		    continue;
17700 		  if (XEXP (XEXP (arg, 0), 0) == pc_rtx)
17701 		    {
17702 		      gcc_assert (ca_loc->symbol_ref == NULL_RTX);
17703 		      tloc = XEXP (XEXP (arg, 0), 1);
17704 		      continue;
17705 		    }
17706 		  else if (GET_CODE (XEXP (XEXP (arg, 0), 0)) == CLOBBER
17707 			   && XEXP (XEXP (XEXP (arg, 0), 0), 0) == pc_rtx)
17708 		    {
17709 		      gcc_assert (ca_loc->symbol_ref == NULL_RTX);
17710 		      tlocc = XEXP (XEXP (arg, 0), 1);
17711 		      continue;
17712 		    }
17713 		  reg = NULL;
17714 		  if (REG_P (XEXP (XEXP (arg, 0), 0)))
17715 		    reg = reg_loc_descriptor (XEXP (XEXP (arg, 0), 0),
17716 					      VAR_INIT_STATUS_INITIALIZED);
17717 		  else if (MEM_P (XEXP (XEXP (arg, 0), 0)))
17718 		    {
17719 		      rtx mem = XEXP (XEXP (arg, 0), 0);
17720 		      reg = mem_loc_descriptor (XEXP (mem, 0),
17721 						get_address_mode (mem),
17722 						GET_MODE (mem),
17723 						VAR_INIT_STATUS_INITIALIZED);
17724 		    }
17725 		  else if (GET_CODE (XEXP (XEXP (arg, 0), 0))
17726 			   == DEBUG_PARAMETER_REF)
17727 		    {
17728 		      tree tdecl
17729 			= DEBUG_PARAMETER_REF_DECL (XEXP (XEXP (arg, 0), 0));
17730 		      tdie = lookup_decl_die (tdecl);
17731 		      if (tdie == NULL)
17732 			continue;
17733 		    }
17734 		  else
17735 		    continue;
17736 		  if (reg == NULL
17737 		      && GET_CODE (XEXP (XEXP (arg, 0), 0))
17738 			 != DEBUG_PARAMETER_REF)
17739 		    continue;
17740 		  val = mem_loc_descriptor (XEXP (XEXP (arg, 0), 1), mode,
17741 					    VOIDmode,
17742 					    VAR_INIT_STATUS_INITIALIZED);
17743 		  if (val == NULL)
17744 		    continue;
17745 		  if (die == NULL)
17746 		    die = gen_call_site_die (decl, subr_die, ca_loc);
17747 		  cdie = new_die (DW_TAG_GNU_call_site_parameter, die,
17748 				  NULL_TREE);
17749 		  if (reg != NULL)
17750 		    add_AT_loc (cdie, DW_AT_location, reg);
17751 		  else if (tdie != NULL)
17752 		    add_AT_die_ref (cdie, DW_AT_abstract_origin, tdie);
17753 		  add_AT_loc (cdie, DW_AT_GNU_call_site_value, val);
17754 		  if (next_arg != XEXP (arg, 1))
17755 		    {
17756 		      mode = GET_MODE (XEXP (XEXP (XEXP (arg, 1), 0), 1));
17757 		      if (mode == VOIDmode)
17758 			mode = GET_MODE (XEXP (XEXP (XEXP (arg, 1), 0), 0));
17759 		      val = mem_loc_descriptor (XEXP (XEXP (XEXP (arg, 1),
17760 							    0), 1),
17761 						mode, VOIDmode,
17762 						VAR_INIT_STATUS_INITIALIZED);
17763 		      if (val != NULL)
17764 			add_AT_loc (cdie, DW_AT_GNU_call_site_data_value, val);
17765 		    }
17766 		}
17767 	      if (die == NULL
17768 		  && (ca_loc->symbol_ref || tloc))
17769 		die = gen_call_site_die (decl, subr_die, ca_loc);
17770 	      if (die != NULL && (tloc != NULL_RTX || tlocc != NULL_RTX))
17771 		{
17772 		  dw_loc_descr_ref tval = NULL;
17773 
17774 		  if (tloc != NULL_RTX)
17775 		    tval = mem_loc_descriptor (tloc,
17776 					       GET_MODE (tloc) == VOIDmode
17777 					       ? Pmode : GET_MODE (tloc),
17778 					       VOIDmode,
17779 					       VAR_INIT_STATUS_INITIALIZED);
17780 		  if (tval)
17781 		    add_AT_loc (die, DW_AT_GNU_call_site_target, tval);
17782 		  else if (tlocc != NULL_RTX)
17783 		    {
17784 		      tval = mem_loc_descriptor (tlocc,
17785 						 GET_MODE (tlocc) == VOIDmode
17786 						 ? Pmode : GET_MODE (tlocc),
17787 						 VOIDmode,
17788 						 VAR_INIT_STATUS_INITIALIZED);
17789 		      if (tval)
17790 			add_AT_loc (die, DW_AT_GNU_call_site_target_clobbered,
17791 				    tval);
17792 		    }
17793 		}
17794 	      if (die != NULL)
17795 		{
17796 		  call_site_note_count++;
17797 		  if (ca_loc->tail_call_p)
17798 		    tail_call_site_note_count++;
17799 		}
17800 	    }
17801 	}
17802       call_arg_locations = NULL;
17803       call_arg_loc_last = NULL;
17804       if (tail_call_site_count >= 0
17805 	  && tail_call_site_count == tail_call_site_note_count
17806 	  && !dwarf_strict)
17807 	{
17808 	  if (call_site_count >= 0
17809 	      && call_site_count == call_site_note_count)
17810 	    add_AT_flag (subr_die, DW_AT_GNU_all_call_sites, 1);
17811 	  else
17812 	    add_AT_flag (subr_die, DW_AT_GNU_all_tail_call_sites, 1);
17813 	}
17814       call_site_count = -1;
17815       tail_call_site_count = -1;
17816     }
17817   /* Add the calling convention attribute if requested.  */
17818   add_calling_convention_attribute (subr_die, decl);
17819 
17820 }
17821 
17822 /* Returns a hash value for X (which really is a die_struct).  */
17823 
17824 static hashval_t
17825 common_block_die_table_hash (const void *x)
17826 {
17827   const_dw_die_ref d = (const_dw_die_ref) x;
17828   return (hashval_t) d->decl_id ^ htab_hash_pointer (d->die_parent);
17829 }
17830 
17831 /* Return nonzero if decl_id and die_parent of die_struct X is the same
17832    as decl_id and die_parent of die_struct Y.  */
17833 
17834 static int
17835 common_block_die_table_eq (const void *x, const void *y)
17836 {
17837   const_dw_die_ref d = (const_dw_die_ref) x;
17838   const_dw_die_ref e = (const_dw_die_ref) y;
17839   return d->decl_id == e->decl_id && d->die_parent == e->die_parent;
17840 }
17841 
17842 /* Generate a DIE to represent a declared data object.
17843    Either DECL or ORIGIN must be non-null.  */
17844 
17845 static void
17846 gen_variable_die (tree decl, tree origin, dw_die_ref context_die)
17847 {
17848   HOST_WIDE_INT off;
17849   tree com_decl;
17850   tree decl_or_origin = decl ? decl : origin;
17851   tree ultimate_origin;
17852   dw_die_ref var_die;
17853   dw_die_ref old_die = decl ? lookup_decl_die (decl) : NULL;
17854   dw_die_ref origin_die;
17855   bool declaration = (DECL_EXTERNAL (decl_or_origin)
17856 		      || class_or_namespace_scope_p (context_die));
17857   bool specialization_p = false;
17858 
17859   ultimate_origin = decl_ultimate_origin (decl_or_origin);
17860   if (decl || ultimate_origin)
17861     origin = ultimate_origin;
17862   com_decl = fortran_common (decl_or_origin, &off);
17863 
17864   /* Symbol in common gets emitted as a child of the common block, in the form
17865      of a data member.  */
17866   if (com_decl)
17867     {
17868       dw_die_ref com_die;
17869       dw_loc_list_ref loc;
17870       die_node com_die_arg;
17871 
17872       var_die = lookup_decl_die (decl_or_origin);
17873       if (var_die)
17874 	{
17875 	  if (get_AT (var_die, DW_AT_location) == NULL)
17876 	    {
17877 	      loc = loc_list_from_tree (com_decl, off ? 1 : 2);
17878 	      if (loc)
17879 		{
17880 		  if (off)
17881 		    {
17882 		      /* Optimize the common case.  */
17883 		      if (single_element_loc_list_p (loc)
17884 			  && loc->expr->dw_loc_opc == DW_OP_addr
17885 			  && loc->expr->dw_loc_next == NULL
17886 			  && GET_CODE (loc->expr->dw_loc_oprnd1.v.val_addr)
17887 			     == SYMBOL_REF)
17888 			loc->expr->dw_loc_oprnd1.v.val_addr
17889 			  = plus_constant (loc->expr->dw_loc_oprnd1.v.val_addr, off);
17890 			else
17891 			  loc_list_plus_const (loc, off);
17892 		    }
17893 		  add_AT_location_description (var_die, DW_AT_location, loc);
17894 		  remove_AT (var_die, DW_AT_declaration);
17895 		}
17896 	    }
17897 	  return;
17898 	}
17899 
17900       if (common_block_die_table == NULL)
17901 	common_block_die_table
17902 	  = htab_create_ggc (10, common_block_die_table_hash,
17903 			     common_block_die_table_eq, NULL);
17904 
17905       com_die_arg.decl_id = DECL_UID (com_decl);
17906       com_die_arg.die_parent = context_die;
17907       com_die = (dw_die_ref) htab_find (common_block_die_table, &com_die_arg);
17908       loc = loc_list_from_tree (com_decl, 2);
17909       if (com_die == NULL)
17910 	{
17911 	  const char *cnam
17912 	    = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (com_decl));
17913 	  void **slot;
17914 
17915 	  com_die = new_die (DW_TAG_common_block, context_die, decl);
17916 	  add_name_and_src_coords_attributes (com_die, com_decl);
17917 	  if (loc)
17918 	    {
17919 	      add_AT_location_description (com_die, DW_AT_location, loc);
17920 	      /* Avoid sharing the same loc descriptor between
17921 		 DW_TAG_common_block and DW_TAG_variable.  */
17922 	      loc = loc_list_from_tree (com_decl, 2);
17923 	    }
17924           else if (DECL_EXTERNAL (decl))
17925 	    add_AT_flag (com_die, DW_AT_declaration, 1);
17926 	  add_pubname_string (cnam, com_die); /* ??? needed? */
17927 	  com_die->decl_id = DECL_UID (com_decl);
17928 	  slot = htab_find_slot (common_block_die_table, com_die, INSERT);
17929 	  *slot = (void *) com_die;
17930 	}
17931       else if (get_AT (com_die, DW_AT_location) == NULL && loc)
17932 	{
17933 	  add_AT_location_description (com_die, DW_AT_location, loc);
17934 	  loc = loc_list_from_tree (com_decl, 2);
17935 	  remove_AT (com_die, DW_AT_declaration);
17936 	}
17937       var_die = new_die (DW_TAG_variable, com_die, decl);
17938       add_name_and_src_coords_attributes (var_die, decl);
17939       add_type_attribute (var_die, TREE_TYPE (decl), TREE_READONLY (decl),
17940 			  TREE_THIS_VOLATILE (decl), context_die);
17941       add_AT_flag (var_die, DW_AT_external, 1);
17942       if (loc)
17943 	{
17944 	  if (off)
17945 	    {
17946 	      /* Optimize the common case.  */
17947 	      if (single_element_loc_list_p (loc)
17948 		  && loc->expr->dw_loc_opc == DW_OP_addr
17949 		  && loc->expr->dw_loc_next == NULL
17950 		  && GET_CODE (loc->expr->dw_loc_oprnd1.v.val_addr) == SYMBOL_REF)
17951 		loc->expr->dw_loc_oprnd1.v.val_addr
17952 		  = plus_constant (loc->expr->dw_loc_oprnd1.v.val_addr, off);
17953 	      else
17954 		loc_list_plus_const (loc, off);
17955 	    }
17956 	  add_AT_location_description (var_die, DW_AT_location, loc);
17957 	}
17958       else if (DECL_EXTERNAL (decl))
17959 	add_AT_flag (var_die, DW_AT_declaration, 1);
17960       equate_decl_number_to_die (decl, var_die);
17961       return;
17962     }
17963 
17964   /* If the compiler emitted a definition for the DECL declaration
17965      and if we already emitted a DIE for it, don't emit a second
17966      DIE for it again. Allow re-declarations of DECLs that are
17967      inside functions, though.  */
17968   if (old_die && declaration && !local_scope_p (context_die))
17969     return;
17970 
17971   /* For static data members, the declaration in the class is supposed
17972      to have DW_TAG_member tag; the specification should still be
17973      DW_TAG_variable referencing the DW_TAG_member DIE.  */
17974   if (declaration && class_scope_p (context_die))
17975     var_die = new_die (DW_TAG_member, context_die, decl);
17976   else
17977     var_die = new_die (DW_TAG_variable, context_die, decl);
17978 
17979   origin_die = NULL;
17980   if (origin != NULL)
17981     origin_die = add_abstract_origin_attribute (var_die, origin);
17982 
17983   /* Loop unrolling can create multiple blocks that refer to the same
17984      static variable, so we must test for the DW_AT_declaration flag.
17985 
17986      ??? Loop unrolling/reorder_blocks should perhaps be rewritten to
17987      copy decls and set the DECL_ABSTRACT flag on them instead of
17988      sharing them.
17989 
17990      ??? Duplicated blocks have been rewritten to use .debug_ranges.
17991 
17992      ??? The declare_in_namespace support causes us to get two DIEs for one
17993      variable, both of which are declarations.  We want to avoid considering
17994      one to be a specification, so we must test that this DIE is not a
17995      declaration.  */
17996   else if (old_die && TREE_STATIC (decl) && ! declaration
17997 	   && get_AT_flag (old_die, DW_AT_declaration) == 1)
17998     {
17999       /* This is a definition of a C++ class level static.  */
18000       add_AT_specification (var_die, old_die);
18001       specialization_p = true;
18002       if (DECL_NAME (decl))
18003 	{
18004 	  expanded_location s = expand_location (DECL_SOURCE_LOCATION (decl));
18005 	  struct dwarf_file_data * file_index = lookup_filename (s.file);
18006 
18007 	  if (get_AT_file (old_die, DW_AT_decl_file) != file_index)
18008 	    add_AT_file (var_die, DW_AT_decl_file, file_index);
18009 
18010 	  if (get_AT_unsigned (old_die, DW_AT_decl_line) != (unsigned) s.line)
18011 	    add_AT_unsigned (var_die, DW_AT_decl_line, s.line);
18012 
18013 	  if (old_die->die_tag == DW_TAG_member)
18014 	    add_linkage_name (var_die, decl);
18015 	}
18016     }
18017   else
18018     add_name_and_src_coords_attributes (var_die, decl);
18019 
18020   if ((origin == NULL && !specialization_p)
18021       || (origin != NULL
18022 	  && !DECL_ABSTRACT (decl_or_origin)
18023 	  && variably_modified_type_p (TREE_TYPE (decl_or_origin),
18024 				       decl_function_context
18025 							(decl_or_origin))))
18026     {
18027       tree type = TREE_TYPE (decl_or_origin);
18028 
18029       if (decl_by_reference_p (decl_or_origin))
18030 	add_type_attribute (var_die, TREE_TYPE (type), 0, 0, context_die);
18031       else
18032 	add_type_attribute (var_die, type, TREE_READONLY (decl_or_origin),
18033 			    TREE_THIS_VOLATILE (decl_or_origin), context_die);
18034     }
18035 
18036   if (origin == NULL && !specialization_p)
18037     {
18038       if (TREE_PUBLIC (decl))
18039 	add_AT_flag (var_die, DW_AT_external, 1);
18040 
18041       if (DECL_ARTIFICIAL (decl))
18042 	add_AT_flag (var_die, DW_AT_artificial, 1);
18043 
18044       add_accessibility_attribute (var_die, decl);
18045     }
18046 
18047   if (declaration)
18048     add_AT_flag (var_die, DW_AT_declaration, 1);
18049 
18050   if (decl && (DECL_ABSTRACT (decl) || declaration || old_die == NULL))
18051     equate_decl_number_to_die (decl, var_die);
18052 
18053   if (! declaration
18054       && (! DECL_ABSTRACT (decl_or_origin)
18055 	  /* Local static vars are shared between all clones/inlines,
18056 	     so emit DW_AT_location on the abstract DIE if DECL_RTL is
18057 	     already set.  */
18058 	  || (TREE_CODE (decl_or_origin) == VAR_DECL
18059 	      && TREE_STATIC (decl_or_origin)
18060 	      && DECL_RTL_SET_P (decl_or_origin)))
18061       /* When abstract origin already has DW_AT_location attribute, no need
18062 	 to add it again.  */
18063       && (origin_die == NULL || get_AT (origin_die, DW_AT_location) == NULL))
18064     {
18065       if (TREE_CODE (decl_or_origin) == VAR_DECL && TREE_STATIC (decl_or_origin)
18066           && !TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (decl_or_origin)))
18067 	defer_location (decl_or_origin, var_die);
18068       else
18069         add_location_or_const_value_attribute (var_die, decl_or_origin,
18070 					       decl == NULL, DW_AT_location);
18071       add_pubname (decl_or_origin, var_die);
18072     }
18073   else
18074     tree_add_const_value_attribute_for_decl (var_die, decl_or_origin);
18075 }
18076 
18077 /* Generate a DIE to represent a named constant.  */
18078 
18079 static void
18080 gen_const_die (tree decl, dw_die_ref context_die)
18081 {
18082   dw_die_ref const_die;
18083   tree type = TREE_TYPE (decl);
18084 
18085   const_die = new_die (DW_TAG_constant, context_die, decl);
18086   add_name_and_src_coords_attributes (const_die, decl);
18087   add_type_attribute (const_die, type, 1, 0, context_die);
18088   if (TREE_PUBLIC (decl))
18089     add_AT_flag (const_die, DW_AT_external, 1);
18090   if (DECL_ARTIFICIAL (decl))
18091     add_AT_flag (const_die, DW_AT_artificial, 1);
18092   tree_add_const_value_attribute_for_decl (const_die, decl);
18093 }
18094 
18095 /* Generate a DIE to represent a label identifier.  */
18096 
18097 static void
18098 gen_label_die (tree decl, dw_die_ref context_die)
18099 {
18100   tree origin = decl_ultimate_origin (decl);
18101   dw_die_ref lbl_die = new_die (DW_TAG_label, context_die, decl);
18102   rtx insn;
18103   char label[MAX_ARTIFICIAL_LABEL_BYTES];
18104 
18105   if (origin != NULL)
18106     add_abstract_origin_attribute (lbl_die, origin);
18107   else
18108     add_name_and_src_coords_attributes (lbl_die, decl);
18109 
18110   if (DECL_ABSTRACT (decl))
18111     equate_decl_number_to_die (decl, lbl_die);
18112   else
18113     {
18114       insn = DECL_RTL_IF_SET (decl);
18115 
18116       /* Deleted labels are programmer specified labels which have been
18117 	 eliminated because of various optimizations.  We still emit them
18118 	 here so that it is possible to put breakpoints on them.  */
18119       if (insn
18120 	  && (LABEL_P (insn)
18121 	      || ((NOTE_P (insn)
18122 	           && NOTE_KIND (insn) == NOTE_INSN_DELETED_LABEL))))
18123 	{
18124 	  /* When optimization is enabled (via -O) some parts of the compiler
18125 	     (e.g. jump.c and cse.c) may try to delete CODE_LABEL insns which
18126 	     represent source-level labels which were explicitly declared by
18127 	     the user.  This really shouldn't be happening though, so catch
18128 	     it if it ever does happen.  */
18129 	  gcc_assert (!INSN_DELETED_P (insn));
18130 
18131 	  ASM_GENERATE_INTERNAL_LABEL (label, "L", CODE_LABEL_NUMBER (insn));
18132 	  add_AT_lbl_id (lbl_die, DW_AT_low_pc, label);
18133 	}
18134       else if (insn
18135 	       && NOTE_P (insn)
18136 	       && NOTE_KIND (insn) == NOTE_INSN_DELETED_DEBUG_LABEL
18137 	       && CODE_LABEL_NUMBER (insn) != -1)
18138 	{
18139 	  ASM_GENERATE_INTERNAL_LABEL (label, "LDL", CODE_LABEL_NUMBER (insn));
18140 	  add_AT_lbl_id (lbl_die, DW_AT_low_pc, label);
18141 	}
18142     }
18143 }
18144 
18145 /* A helper function for gen_inlined_subroutine_die.  Add source coordinate
18146    attributes to the DIE for a block STMT, to describe where the inlined
18147    function was called from.  This is similar to add_src_coords_attributes.  */
18148 
18149 static inline void
18150 add_call_src_coords_attributes (tree stmt, dw_die_ref die)
18151 {
18152   expanded_location s = expand_location (BLOCK_SOURCE_LOCATION (stmt));
18153 
18154   if (dwarf_version >= 3 || !dwarf_strict)
18155     {
18156       add_AT_file (die, DW_AT_call_file, lookup_filename (s.file));
18157       add_AT_unsigned (die, DW_AT_call_line, s.line);
18158     }
18159 }
18160 
18161 
18162 /* A helper function for gen_lexical_block_die and gen_inlined_subroutine_die.
18163    Add low_pc and high_pc attributes to the DIE for a block STMT.  */
18164 
18165 static inline void
18166 add_high_low_attributes (tree stmt, dw_die_ref die)
18167 {
18168   char label[MAX_ARTIFICIAL_LABEL_BYTES];
18169 
18170   if (BLOCK_FRAGMENT_CHAIN (stmt)
18171       && (dwarf_version >= 3 || !dwarf_strict))
18172     {
18173       tree chain;
18174 
18175       if (inlined_function_outer_scope_p (stmt))
18176 	{
18177 	  ASM_GENERATE_INTERNAL_LABEL (label, BLOCK_BEGIN_LABEL,
18178 				       BLOCK_NUMBER (stmt));
18179 	  add_AT_lbl_id (die, DW_AT_entry_pc, label);
18180 	}
18181 
18182       add_AT_range_list (die, DW_AT_ranges, add_ranges (stmt));
18183 
18184       chain = BLOCK_FRAGMENT_CHAIN (stmt);
18185       do
18186 	{
18187 	  add_ranges (chain);
18188 	  chain = BLOCK_FRAGMENT_CHAIN (chain);
18189 	}
18190       while (chain);
18191       add_ranges (NULL);
18192     }
18193   else
18194     {
18195       ASM_GENERATE_INTERNAL_LABEL (label, BLOCK_BEGIN_LABEL,
18196 				   BLOCK_NUMBER (stmt));
18197       add_AT_lbl_id (die, DW_AT_low_pc, label);
18198       ASM_GENERATE_INTERNAL_LABEL (label, BLOCK_END_LABEL,
18199 				   BLOCK_NUMBER (stmt));
18200       add_AT_lbl_id (die, DW_AT_high_pc, label);
18201     }
18202 }
18203 
18204 /* Generate a DIE for a lexical block.  */
18205 
18206 static void
18207 gen_lexical_block_die (tree stmt, dw_die_ref context_die, int depth)
18208 {
18209   dw_die_ref stmt_die = new_die (DW_TAG_lexical_block, context_die, stmt);
18210 
18211   if (call_arg_locations)
18212     {
18213       if (VEC_length (dw_die_ref, block_map) <= BLOCK_NUMBER (stmt))
18214 	VEC_safe_grow_cleared (dw_die_ref, heap, block_map,
18215 			       BLOCK_NUMBER (stmt) + 1);
18216       VEC_replace (dw_die_ref, block_map, BLOCK_NUMBER (stmt), stmt_die);
18217     }
18218 
18219   if (! BLOCK_ABSTRACT (stmt) && TREE_ASM_WRITTEN (stmt))
18220     add_high_low_attributes (stmt, stmt_die);
18221 
18222   decls_for_scope (stmt, stmt_die, depth);
18223 }
18224 
18225 /* Generate a DIE for an inlined subprogram.  */
18226 
18227 static void
18228 gen_inlined_subroutine_die (tree stmt, dw_die_ref context_die, int depth)
18229 {
18230   tree decl;
18231 
18232   /* The instance of function that is effectively being inlined shall not
18233      be abstract.  */
18234   gcc_assert (! BLOCK_ABSTRACT (stmt));
18235 
18236   decl = block_ultimate_origin (stmt);
18237 
18238   /* Emit info for the abstract instance first, if we haven't yet.  We
18239      must emit this even if the block is abstract, otherwise when we
18240      emit the block below (or elsewhere), we may end up trying to emit
18241      a die whose origin die hasn't been emitted, and crashing.  */
18242   dwarf2out_abstract_function (decl);
18243 
18244   if (! BLOCK_ABSTRACT (stmt))
18245     {
18246       dw_die_ref subr_die
18247 	= new_die (DW_TAG_inlined_subroutine, context_die, stmt);
18248 
18249       if (call_arg_locations)
18250 	{
18251 	  if (VEC_length (dw_die_ref, block_map) <= BLOCK_NUMBER (stmt))
18252 	    VEC_safe_grow_cleared (dw_die_ref, heap, block_map,
18253 				   BLOCK_NUMBER (stmt) + 1);
18254 	  VEC_replace (dw_die_ref, block_map, BLOCK_NUMBER (stmt), subr_die);
18255 	}
18256       add_abstract_origin_attribute (subr_die, decl);
18257       if (TREE_ASM_WRITTEN (stmt))
18258         add_high_low_attributes (stmt, subr_die);
18259       add_call_src_coords_attributes (stmt, subr_die);
18260 
18261       decls_for_scope (stmt, subr_die, depth);
18262       current_function_has_inlines = 1;
18263     }
18264 }
18265 
18266 /* Generate a DIE for a field in a record, or structure.  */
18267 
18268 static void
18269 gen_field_die (tree decl, dw_die_ref context_die)
18270 {
18271   dw_die_ref decl_die;
18272 
18273   if (TREE_TYPE (decl) == error_mark_node)
18274     return;
18275 
18276   decl_die = new_die (DW_TAG_member, context_die, decl);
18277   add_name_and_src_coords_attributes (decl_die, decl);
18278   add_type_attribute (decl_die, member_declared_type (decl),
18279 		      TREE_READONLY (decl), TREE_THIS_VOLATILE (decl),
18280 		      context_die);
18281 
18282   if (DECL_BIT_FIELD_TYPE (decl))
18283     {
18284       add_byte_size_attribute (decl_die, decl);
18285       add_bit_size_attribute (decl_die, decl);
18286       add_bit_offset_attribute (decl_die, decl);
18287     }
18288 
18289   if (TREE_CODE (DECL_FIELD_CONTEXT (decl)) != UNION_TYPE)
18290     add_data_member_location_attribute (decl_die, decl);
18291 
18292   if (DECL_ARTIFICIAL (decl))
18293     add_AT_flag (decl_die, DW_AT_artificial, 1);
18294 
18295   add_accessibility_attribute (decl_die, decl);
18296 
18297   /* Equate decl number to die, so that we can look up this decl later on.  */
18298   equate_decl_number_to_die (decl, decl_die);
18299 }
18300 
18301 #if 0
18302 /* Don't generate either pointer_type DIEs or reference_type DIEs here.
18303    Use modified_type_die instead.
18304    We keep this code here just in case these types of DIEs may be needed to
18305    represent certain things in other languages (e.g. Pascal) someday.  */
18306 
18307 static void
18308 gen_pointer_type_die (tree type, dw_die_ref context_die)
18309 {
18310   dw_die_ref ptr_die
18311     = new_die (DW_TAG_pointer_type, scope_die_for (type, context_die), type);
18312 
18313   equate_type_number_to_die (type, ptr_die);
18314   add_type_attribute (ptr_die, TREE_TYPE (type), 0, 0, context_die);
18315   add_AT_unsigned (mod_type_die, DW_AT_byte_size, PTR_SIZE);
18316 }
18317 
18318 /* Don't generate either pointer_type DIEs or reference_type DIEs here.
18319    Use modified_type_die instead.
18320    We keep this code here just in case these types of DIEs may be needed to
18321    represent certain things in other languages (e.g. Pascal) someday.  */
18322 
18323 static void
18324 gen_reference_type_die (tree type, dw_die_ref context_die)
18325 {
18326   dw_die_ref ref_die, scope_die = scope_die_for (type, context_die);
18327 
18328   if (TYPE_REF_IS_RVALUE (type) && dwarf_version >= 4)
18329     ref_die = new_die (DW_TAG_rvalue_reference_type, scope_die, type);
18330   else
18331     ref_die = new_die (DW_TAG_reference_type, scope_die, type);
18332 
18333   equate_type_number_to_die (type, ref_die);
18334   add_type_attribute (ref_die, TREE_TYPE (type), 0, 0, context_die);
18335   add_AT_unsigned (mod_type_die, DW_AT_byte_size, PTR_SIZE);
18336 }
18337 #endif
18338 
18339 /* Generate a DIE for a pointer to a member type.  */
18340 
18341 static void
18342 gen_ptr_to_mbr_type_die (tree type, dw_die_ref context_die)
18343 {
18344   dw_die_ref ptr_die
18345     = new_die (DW_TAG_ptr_to_member_type,
18346 	       scope_die_for (type, context_die), type);
18347 
18348   equate_type_number_to_die (type, ptr_die);
18349   add_AT_die_ref (ptr_die, DW_AT_containing_type,
18350 		  lookup_type_die (TYPE_OFFSET_BASETYPE (type)));
18351   add_type_attribute (ptr_die, TREE_TYPE (type), 0, 0, context_die);
18352 }
18353 
18354 typedef const char *dchar_p; /* For DEF_VEC_P.  */
18355 DEF_VEC_P(dchar_p);
18356 DEF_VEC_ALLOC_P(dchar_p,heap);
18357 
18358 static char *producer_string;
18359 
18360 /* Return a heap allocated producer string including command line options
18361    if -grecord-gcc-switches.  */
18362 
18363 static char *
18364 gen_producer_string (void)
18365 {
18366   size_t j;
18367   VEC(dchar_p, heap) *switches = NULL;
18368   const char *language_string = lang_hooks.name;
18369   char *producer, *tail;
18370   const char *p;
18371   size_t len = dwarf_record_gcc_switches ? 0 : 3;
18372   size_t plen = strlen (language_string) + 1 + strlen (version_string);
18373 
18374   for (j = 1; dwarf_record_gcc_switches && j < save_decoded_options_count; j++)
18375     switch (save_decoded_options[j].opt_index)
18376       {
18377       case OPT_o:
18378       case OPT_d:
18379       case OPT_dumpbase:
18380       case OPT_dumpdir:
18381       case OPT_auxbase:
18382       case OPT_auxbase_strip:
18383       case OPT_quiet:
18384       case OPT_version:
18385       case OPT_v:
18386       case OPT_w:
18387       case OPT_L:
18388       case OPT_D:
18389       case OPT_I:
18390       case OPT_U:
18391       case OPT_SPECIAL_unknown:
18392       case OPT_SPECIAL_ignore:
18393       case OPT_SPECIAL_program_name:
18394       case OPT_SPECIAL_input_file:
18395       case OPT_grecord_gcc_switches:
18396       case OPT_gno_record_gcc_switches:
18397       case OPT__output_pch_:
18398       case OPT_fdiagnostics_show_location_:
18399       case OPT_fdiagnostics_show_option:
18400       case OPT_fverbose_asm:
18401       case OPT____:
18402       case OPT__sysroot_:
18403       case OPT_nostdinc:
18404       case OPT_nostdinc__:
18405 	/* Ignore these.  */
18406 	continue;
18407       default:
18408         gcc_checking_assert (save_decoded_options[j].canonical_option[0][0]
18409 			     == '-');
18410         switch (save_decoded_options[j].canonical_option[0][1])
18411 	  {
18412 	  case 'M':
18413 	  case 'i':
18414 	  case 'W':
18415 	    continue;
18416 	  case 'f':
18417 	    if (strncmp (save_decoded_options[j].canonical_option[0] + 2,
18418 			 "dump", 4) == 0)
18419 	      continue;
18420 	    break;
18421 	  default:
18422 	    break;
18423 	  }
18424 	VEC_safe_push (dchar_p, heap, switches,
18425 		       save_decoded_options[j].orig_option_with_args_text);
18426 	len += strlen (save_decoded_options[j].orig_option_with_args_text) + 1;
18427 	break;
18428       }
18429 
18430   producer = XNEWVEC (char, plen + 1 + len + 1);
18431   tail = producer;
18432   sprintf (tail, "%s %s", language_string, version_string);
18433   tail += plen;
18434 
18435   if (!dwarf_record_gcc_switches)
18436     {
18437 #ifdef MIPS_DEBUGGING_INFO
18438       /* The MIPS/SGI compilers place the 'cc' command line options in the
18439 	 producer string.  The SGI debugger looks for -g, -g1, -g2, or -g3;
18440 	 if they do not appear in the producer string, the debugger reaches
18441 	 the conclusion that the object file is stripped and has no debugging
18442 	 information.  To get the MIPS/SGI debugger to believe that there is
18443 	 debugging information in the object file, we add a -g to the producer
18444 	 string.  */
18445       if (debug_info_level > DINFO_LEVEL_TERSE)
18446 	{
18447 	  memcpy (tail, " -g", 3);
18448 	  tail += 3;
18449 	}
18450 #endif
18451     }
18452 
18453   FOR_EACH_VEC_ELT (dchar_p, switches, j, p)
18454     {
18455       len = strlen (p);
18456       *tail = ' ';
18457       memcpy (tail + 1, p, len);
18458       tail += len + 1;
18459     }
18460 
18461   *tail = '\0';
18462   VEC_free (dchar_p, heap, switches);
18463   return producer;
18464 }
18465 
18466 /* Generate the DIE for the compilation unit.  */
18467 
18468 static dw_die_ref
18469 gen_compile_unit_die (const char *filename)
18470 {
18471   dw_die_ref die;
18472   const char *language_string = lang_hooks.name;
18473   int language;
18474 
18475   die = new_die (DW_TAG_compile_unit, NULL, NULL);
18476 
18477   if (filename)
18478     {
18479       add_name_attribute (die, filename);
18480       /* Don't add cwd for <built-in>.  */
18481       if (!IS_ABSOLUTE_PATH (filename) && filename[0] != '<')
18482 	add_comp_dir_attribute (die);
18483     }
18484 
18485   if (producer_string == NULL)
18486     producer_string = gen_producer_string ();
18487   add_AT_string (die, DW_AT_producer, producer_string);
18488 
18489   /* If our producer is LTO try to figure out a common language to use
18490      from the global list of translation units.  */
18491   if (strcmp (language_string, "GNU GIMPLE") == 0)
18492     {
18493       unsigned i;
18494       tree t;
18495       const char *common_lang = NULL;
18496 
18497       FOR_EACH_VEC_ELT (tree, all_translation_units, i, t)
18498 	{
18499 	  if (!TRANSLATION_UNIT_LANGUAGE (t))
18500 	    continue;
18501 	  if (!common_lang)
18502 	    common_lang = TRANSLATION_UNIT_LANGUAGE (t);
18503 	  else if (strcmp (common_lang, TRANSLATION_UNIT_LANGUAGE (t)) == 0)
18504 	    ;
18505 	  else if (strncmp (common_lang, "GNU C", 5) == 0
18506 		   && strncmp (TRANSLATION_UNIT_LANGUAGE (t), "GNU C", 5) == 0)
18507 	    /* Mixing C and C++ is ok, use C++ in that case.  */
18508 	    common_lang = "GNU C++";
18509 	  else
18510 	    {
18511 	      /* Fall back to C.  */
18512 	      common_lang = NULL;
18513 	      break;
18514 	    }
18515 	}
18516 
18517       if (common_lang)
18518 	language_string = common_lang;
18519     }
18520 
18521   language = DW_LANG_C89;
18522   if (strcmp (language_string, "GNU C++") == 0)
18523     language = DW_LANG_C_plus_plus;
18524   else if (strcmp (language_string, "GNU F77") == 0)
18525     language = DW_LANG_Fortran77;
18526   else if (strcmp (language_string, "GNU Pascal") == 0)
18527     language = DW_LANG_Pascal83;
18528   else if (dwarf_version >= 3 || !dwarf_strict)
18529     {
18530       if (strcmp (language_string, "GNU Ada") == 0)
18531 	language = DW_LANG_Ada95;
18532       else if (strcmp (language_string, "GNU Fortran") == 0)
18533 	language = DW_LANG_Fortran95;
18534       else if (strcmp (language_string, "GNU Java") == 0)
18535 	language = DW_LANG_Java;
18536       else if (strcmp (language_string, "GNU Objective-C") == 0)
18537 	language = DW_LANG_ObjC;
18538       else if (strcmp (language_string, "GNU Objective-C++") == 0)
18539 	language = DW_LANG_ObjC_plus_plus;
18540       else if (dwarf_version >= 5 || !dwarf_strict)
18541 	{
18542 	  if (strcmp (language_string, "GNU Go") == 0)
18543 	    language = DW_LANG_Go;
18544 	}
18545     }
18546 
18547   add_AT_unsigned (die, DW_AT_language, language);
18548 
18549   switch (language)
18550     {
18551     case DW_LANG_Fortran77:
18552     case DW_LANG_Fortran90:
18553     case DW_LANG_Fortran95:
18554       /* Fortran has case insensitive identifiers and the front-end
18555 	 lowercases everything.  */
18556       add_AT_unsigned (die, DW_AT_identifier_case, DW_ID_down_case);
18557       break;
18558     default:
18559       /* The default DW_ID_case_sensitive doesn't need to be specified.  */
18560       break;
18561     }
18562   return die;
18563 }
18564 
18565 /* Generate the DIE for a base class.  */
18566 
18567 static void
18568 gen_inheritance_die (tree binfo, tree access, dw_die_ref context_die)
18569 {
18570   dw_die_ref die = new_die (DW_TAG_inheritance, context_die, binfo);
18571 
18572   add_type_attribute (die, BINFO_TYPE (binfo), 0, 0, context_die);
18573   add_data_member_location_attribute (die, binfo);
18574 
18575   if (BINFO_VIRTUAL_P (binfo))
18576     add_AT_unsigned (die, DW_AT_virtuality, DW_VIRTUALITY_virtual);
18577 
18578   /* In DWARF3+ the default is DW_ACCESS_private only in DW_TAG_class_type
18579      children, otherwise the default is DW_ACCESS_public.  In DWARF2
18580      the default has always been DW_ACCESS_private.  */
18581   if (access == access_public_node)
18582     {
18583       if (dwarf_version == 2
18584 	  || context_die->die_tag == DW_TAG_class_type)
18585       add_AT_unsigned (die, DW_AT_accessibility, DW_ACCESS_public);
18586     }
18587   else if (access == access_protected_node)
18588     add_AT_unsigned (die, DW_AT_accessibility, DW_ACCESS_protected);
18589   else if (dwarf_version > 2
18590 	   && context_die->die_tag != DW_TAG_class_type)
18591     add_AT_unsigned (die, DW_AT_accessibility, DW_ACCESS_private);
18592 }
18593 
18594 /* Generate a DIE for a class member.  */
18595 
18596 static void
18597 gen_member_die (tree type, dw_die_ref context_die)
18598 {
18599   tree member;
18600   tree binfo = TYPE_BINFO (type);
18601   dw_die_ref child;
18602 
18603   /* If this is not an incomplete type, output descriptions of each of its
18604      members. Note that as we output the DIEs necessary to represent the
18605      members of this record or union type, we will also be trying to output
18606      DIEs to represent the *types* of those members. However the `type'
18607      function (above) will specifically avoid generating type DIEs for member
18608      types *within* the list of member DIEs for this (containing) type except
18609      for those types (of members) which are explicitly marked as also being
18610      members of this (containing) type themselves.  The g++ front- end can
18611      force any given type to be treated as a member of some other (containing)
18612      type by setting the TYPE_CONTEXT of the given (member) type to point to
18613      the TREE node representing the appropriate (containing) type.  */
18614 
18615   /* First output info about the base classes.  */
18616   if (binfo)
18617     {
18618       VEC(tree,gc) *accesses = BINFO_BASE_ACCESSES (binfo);
18619       int i;
18620       tree base;
18621 
18622       for (i = 0; BINFO_BASE_ITERATE (binfo, i, base); i++)
18623 	gen_inheritance_die (base,
18624 			     (accesses ? VEC_index (tree, accesses, i)
18625 			      : access_public_node), context_die);
18626     }
18627 
18628   /* Now output info about the data members and type members.  */
18629   for (member = TYPE_FIELDS (type); member; member = DECL_CHAIN (member))
18630     {
18631       /* If we thought we were generating minimal debug info for TYPE
18632 	 and then changed our minds, some of the member declarations
18633 	 may have already been defined.  Don't define them again, but
18634 	 do put them in the right order.  */
18635 
18636       child = lookup_decl_die (member);
18637       if (child)
18638 	splice_child_die (context_die, child);
18639       else
18640 	gen_decl_die (member, NULL, context_die);
18641     }
18642 
18643   /* Now output info about the function members (if any).  */
18644   for (member = TYPE_METHODS (type); member; member = DECL_CHAIN (member))
18645     {
18646       /* Don't include clones in the member list.  */
18647       if (DECL_ABSTRACT_ORIGIN (member))
18648 	continue;
18649 
18650       child = lookup_decl_die (member);
18651       if (child)
18652 	splice_child_die (context_die, child);
18653       else
18654 	gen_decl_die (member, NULL, context_die);
18655     }
18656 }
18657 
18658 /* Generate a DIE for a structure or union type.  If TYPE_DECL_SUPPRESS_DEBUG
18659    is set, we pretend that the type was never defined, so we only get the
18660    member DIEs needed by later specification DIEs.  */
18661 
18662 static void
18663 gen_struct_or_union_type_die (tree type, dw_die_ref context_die,
18664 				enum debug_info_usage usage)
18665 {
18666   dw_die_ref type_die = lookup_type_die (type);
18667   dw_die_ref scope_die = 0;
18668   int nested = 0;
18669   int complete = (TYPE_SIZE (type)
18670 		  && (! TYPE_STUB_DECL (type)
18671 		      || ! TYPE_DECL_SUPPRESS_DEBUG (TYPE_STUB_DECL (type))));
18672   int ns_decl = (context_die && context_die->die_tag == DW_TAG_namespace);
18673   complete = complete && should_emit_struct_debug (type, usage);
18674 
18675   if (type_die && ! complete)
18676     return;
18677 
18678   if (TYPE_CONTEXT (type) != NULL_TREE
18679       && (AGGREGATE_TYPE_P (TYPE_CONTEXT (type))
18680 	  || TREE_CODE (TYPE_CONTEXT (type)) == NAMESPACE_DECL))
18681     nested = 1;
18682 
18683   scope_die = scope_die_for (type, context_die);
18684 
18685   if (! type_die || (nested && is_cu_die (scope_die)))
18686     /* First occurrence of type or toplevel definition of nested class.  */
18687     {
18688       dw_die_ref old_die = type_die;
18689 
18690       type_die = new_die (TREE_CODE (type) == RECORD_TYPE
18691 			  ? record_type_tag (type) : DW_TAG_union_type,
18692 			  scope_die, type);
18693       equate_type_number_to_die (type, type_die);
18694       if (old_die)
18695 	add_AT_specification (type_die, old_die);
18696       else
18697 	add_name_attribute (type_die, type_tag (type));
18698     }
18699   else
18700     remove_AT (type_die, DW_AT_declaration);
18701 
18702   /* Generate child dies for template paramaters.  */
18703   if (debug_info_level > DINFO_LEVEL_TERSE
18704       && COMPLETE_TYPE_P (type))
18705     schedule_generic_params_dies_gen (type);
18706 
18707   /* If this type has been completed, then give it a byte_size attribute and
18708      then give a list of members.  */
18709   if (complete && !ns_decl)
18710     {
18711       /* Prevent infinite recursion in cases where the type of some member of
18712 	 this type is expressed in terms of this type itself.  */
18713       TREE_ASM_WRITTEN (type) = 1;
18714       add_byte_size_attribute (type_die, type);
18715       if (TYPE_STUB_DECL (type) != NULL_TREE)
18716 	{
18717 	  add_src_coords_attributes (type_die, TYPE_STUB_DECL (type));
18718 	  add_accessibility_attribute (type_die, TYPE_STUB_DECL (type));
18719 	}
18720 
18721       /* If the first reference to this type was as the return type of an
18722 	 inline function, then it may not have a parent.  Fix this now.  */
18723       if (type_die->die_parent == NULL)
18724 	add_child_die (scope_die, type_die);
18725 
18726       push_decl_scope (type);
18727       gen_member_die (type, type_die);
18728       pop_decl_scope ();
18729 
18730       add_gnat_descriptive_type_attribute (type_die, type, context_die);
18731       if (TYPE_ARTIFICIAL (type))
18732 	add_AT_flag (type_die, DW_AT_artificial, 1);
18733 
18734       /* GNU extension: Record what type our vtable lives in.  */
18735       if (TYPE_VFIELD (type))
18736 	{
18737 	  tree vtype = DECL_FCONTEXT (TYPE_VFIELD (type));
18738 
18739 	  gen_type_die (vtype, context_die);
18740 	  add_AT_die_ref (type_die, DW_AT_containing_type,
18741 			  lookup_type_die (vtype));
18742 	}
18743     }
18744   else
18745     {
18746       add_AT_flag (type_die, DW_AT_declaration, 1);
18747 
18748       /* We don't need to do this for function-local types.  */
18749       if (TYPE_STUB_DECL (type)
18750 	  && ! decl_function_context (TYPE_STUB_DECL (type)))
18751 	VEC_safe_push (tree, gc, incomplete_types, type);
18752     }
18753 
18754   if (get_AT (type_die, DW_AT_name))
18755     add_pubtype (type, type_die);
18756 }
18757 
18758 /* Generate a DIE for a subroutine _type_.  */
18759 
18760 static void
18761 gen_subroutine_type_die (tree type, dw_die_ref context_die)
18762 {
18763   tree return_type = TREE_TYPE (type);
18764   dw_die_ref subr_die
18765     = new_die (DW_TAG_subroutine_type,
18766 	       scope_die_for (type, context_die), type);
18767 
18768   equate_type_number_to_die (type, subr_die);
18769   add_prototyped_attribute (subr_die, type);
18770   add_type_attribute (subr_die, return_type, 0, 0, context_die);
18771   gen_formal_types_die (type, subr_die);
18772 
18773   if (get_AT (subr_die, DW_AT_name))
18774     add_pubtype (type, subr_die);
18775 }
18776 
18777 /* Generate a DIE for a type definition.  */
18778 
18779 static void
18780 gen_typedef_die (tree decl, dw_die_ref context_die)
18781 {
18782   dw_die_ref type_die;
18783   tree origin;
18784 
18785   if (TREE_ASM_WRITTEN (decl))
18786     return;
18787 
18788   TREE_ASM_WRITTEN (decl) = 1;
18789   type_die = new_die (DW_TAG_typedef, context_die, decl);
18790   origin = decl_ultimate_origin (decl);
18791   if (origin != NULL)
18792     add_abstract_origin_attribute (type_die, origin);
18793   else
18794     {
18795       tree type;
18796 
18797       add_name_and_src_coords_attributes (type_die, decl);
18798       if (DECL_ORIGINAL_TYPE (decl))
18799 	{
18800 	  type = DECL_ORIGINAL_TYPE (decl);
18801 
18802 	  gcc_assert (type != TREE_TYPE (decl));
18803 	  equate_type_number_to_die (TREE_TYPE (decl), type_die);
18804 	}
18805       else
18806 	{
18807 	  type = TREE_TYPE (decl);
18808 
18809 	  if (is_naming_typedef_decl (TYPE_NAME (type)))
18810 	    {
18811 	      /* Here, we are in the case of decl being a typedef naming
18812 	         an anonymous type, e.g:
18813 	             typedef struct {...} foo;
18814 	         In that case TREE_TYPE (decl) is not a typedef variant
18815 	         type and TYPE_NAME of the anonymous type is set to the
18816 	         TYPE_DECL of the typedef. This construct is emitted by
18817 	         the C++ FE.
18818 
18819 	         TYPE is the anonymous struct named by the typedef
18820 	         DECL. As we need the DW_AT_type attribute of the
18821 	         DW_TAG_typedef to point to the DIE of TYPE, let's
18822 	         generate that DIE right away. add_type_attribute
18823 	         called below will then pick (via lookup_type_die) that
18824 	         anonymous struct DIE.  */
18825 	      if (!TREE_ASM_WRITTEN (type))
18826 	        gen_tagged_type_die (type, context_die, DINFO_USAGE_DIR_USE);
18827 
18828 	      /* This is a GNU Extension.  We are adding a
18829 		 DW_AT_linkage_name attribute to the DIE of the
18830 		 anonymous struct TYPE.  The value of that attribute
18831 		 is the name of the typedef decl naming the anonymous
18832 		 struct.  This greatly eases the work of consumers of
18833 		 this debug info.  */
18834 	      add_linkage_attr (lookup_type_die (type), decl);
18835 	    }
18836 	}
18837 
18838       add_type_attribute (type_die, type, TREE_READONLY (decl),
18839 			  TREE_THIS_VOLATILE (decl), context_die);
18840 
18841       if (is_naming_typedef_decl (decl))
18842 	/* We want that all subsequent calls to lookup_type_die with
18843 	   TYPE in argument yield the DW_TAG_typedef we have just
18844 	   created.  */
18845 	equate_type_number_to_die (type, type_die);
18846 
18847       add_accessibility_attribute (type_die, decl);
18848     }
18849 
18850   if (DECL_ABSTRACT (decl))
18851     equate_decl_number_to_die (decl, type_die);
18852 
18853   if (get_AT (type_die, DW_AT_name))
18854     add_pubtype (decl, type_die);
18855 }
18856 
18857 /* Generate a DIE for a struct, class, enum or union type.  */
18858 
18859 static void
18860 gen_tagged_type_die (tree type,
18861 		     dw_die_ref context_die,
18862 		     enum debug_info_usage usage)
18863 {
18864   int need_pop;
18865 
18866   if (type == NULL_TREE
18867       || !is_tagged_type (type))
18868     return;
18869 
18870   /* If this is a nested type whose containing class hasn't been written
18871      out yet, writing it out will cover this one, too.  This does not apply
18872      to instantiations of member class templates; they need to be added to
18873      the containing class as they are generated.  FIXME: This hurts the
18874      idea of combining type decls from multiple TUs, since we can't predict
18875      what set of template instantiations we'll get.  */
18876   if (TYPE_CONTEXT (type)
18877       && AGGREGATE_TYPE_P (TYPE_CONTEXT (type))
18878       && ! TREE_ASM_WRITTEN (TYPE_CONTEXT (type)))
18879     {
18880       gen_type_die_with_usage (TYPE_CONTEXT (type), context_die, usage);
18881 
18882       if (TREE_ASM_WRITTEN (type))
18883 	return;
18884 
18885       /* If that failed, attach ourselves to the stub.  */
18886       push_decl_scope (TYPE_CONTEXT (type));
18887       context_die = lookup_type_die (TYPE_CONTEXT (type));
18888       need_pop = 1;
18889     }
18890   else if (TYPE_CONTEXT (type) != NULL_TREE
18891 	   && (TREE_CODE (TYPE_CONTEXT (type)) == FUNCTION_DECL))
18892     {
18893       /* If this type is local to a function that hasn't been written
18894 	 out yet, use a NULL context for now; it will be fixed up in
18895 	 decls_for_scope.  */
18896       context_die = lookup_decl_die (TYPE_CONTEXT (type));
18897       /* A declaration DIE doesn't count; nested types need to go in the
18898 	 specification.  */
18899       if (context_die && is_declaration_die (context_die))
18900 	context_die = NULL;
18901       need_pop = 0;
18902     }
18903   else
18904     {
18905       context_die = declare_in_namespace (type, context_die);
18906       need_pop = 0;
18907     }
18908 
18909   if (TREE_CODE (type) == ENUMERAL_TYPE)
18910     {
18911       /* This might have been written out by the call to
18912 	 declare_in_namespace.  */
18913       if (!TREE_ASM_WRITTEN (type))
18914 	gen_enumeration_type_die (type, context_die);
18915     }
18916   else
18917     gen_struct_or_union_type_die (type, context_die, usage);
18918 
18919   if (need_pop)
18920     pop_decl_scope ();
18921 
18922   /* Don't set TREE_ASM_WRITTEN on an incomplete struct; we want to fix
18923      it up if it is ever completed.  gen_*_type_die will set it for us
18924      when appropriate.  */
18925 }
18926 
18927 /* Generate a type description DIE.  */
18928 
18929 static void
18930 gen_type_die_with_usage (tree type, dw_die_ref context_die,
18931 			 enum debug_info_usage usage)
18932 {
18933   struct array_descr_info info;
18934 
18935   if (type == NULL_TREE || type == error_mark_node)
18936     return;
18937 
18938   if (TYPE_NAME (type) != NULL_TREE
18939       && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
18940       && is_redundant_typedef (TYPE_NAME (type))
18941       && DECL_ORIGINAL_TYPE (TYPE_NAME (type)))
18942     /* The DECL of this type is a typedef we don't want to emit debug
18943        info for but we want debug info for its underlying typedef.
18944        This can happen for e.g, the injected-class-name of a C++
18945        type.  */
18946     type = DECL_ORIGINAL_TYPE (TYPE_NAME (type));
18947 
18948   /* If TYPE is a typedef type variant, let's generate debug info
18949      for the parent typedef which TYPE is a type of.  */
18950   if (typedef_variant_p (type))
18951     {
18952       if (TREE_ASM_WRITTEN (type))
18953 	return;
18954 
18955       /* Prevent broken recursion; we can't hand off to the same type.  */
18956       gcc_assert (DECL_ORIGINAL_TYPE (TYPE_NAME (type)) != type);
18957 
18958       /* Give typedefs the right scope.  */
18959       context_die = scope_die_for (type, context_die);
18960 
18961       TREE_ASM_WRITTEN (type) = 1;
18962 
18963       gen_decl_die (TYPE_NAME (type), NULL, context_die);
18964       return;
18965     }
18966 
18967   /* If type is an anonymous tagged type named by a typedef, let's
18968      generate debug info for the typedef.  */
18969   if (is_naming_typedef_decl (TYPE_NAME (type)))
18970     {
18971       /* Use the DIE of the containing namespace as the parent DIE of
18972          the type description DIE we want to generate.  */
18973       if (DECL_CONTEXT (TYPE_NAME (type))
18974 	  && TREE_CODE (DECL_CONTEXT (TYPE_NAME (type))) == NAMESPACE_DECL)
18975 	context_die = get_context_die (DECL_CONTEXT (TYPE_NAME (type)));
18976 
18977       gen_decl_die (TYPE_NAME (type), NULL, context_die);
18978       return;
18979     }
18980 
18981   /* If this is an array type with hidden descriptor, handle it first.  */
18982   if (!TREE_ASM_WRITTEN (type)
18983       && lang_hooks.types.get_array_descr_info
18984       && lang_hooks.types.get_array_descr_info (type, &info)
18985       && (dwarf_version >= 3 || !dwarf_strict))
18986     {
18987       gen_descr_array_type_die (type, &info, context_die);
18988       TREE_ASM_WRITTEN (type) = 1;
18989       return;
18990     }
18991 
18992   /* We are going to output a DIE to represent the unqualified version
18993      of this type (i.e. without any const or volatile qualifiers) so
18994      get the main variant (i.e. the unqualified version) of this type
18995      now.  (Vectors are special because the debugging info is in the
18996      cloned type itself).  */
18997   if (TREE_CODE (type) != VECTOR_TYPE)
18998     type = type_main_variant (type);
18999 
19000   if (TREE_ASM_WRITTEN (type))
19001     return;
19002 
19003   switch (TREE_CODE (type))
19004     {
19005     case ERROR_MARK:
19006       break;
19007 
19008     case POINTER_TYPE:
19009     case REFERENCE_TYPE:
19010       /* We must set TREE_ASM_WRITTEN in case this is a recursive type.  This
19011 	 ensures that the gen_type_die recursion will terminate even if the
19012 	 type is recursive.  Recursive types are possible in Ada.  */
19013       /* ??? We could perhaps do this for all types before the switch
19014 	 statement.  */
19015       TREE_ASM_WRITTEN (type) = 1;
19016 
19017       /* For these types, all that is required is that we output a DIE (or a
19018 	 set of DIEs) to represent the "basis" type.  */
19019       gen_type_die_with_usage (TREE_TYPE (type), context_die,
19020 				DINFO_USAGE_IND_USE);
19021       break;
19022 
19023     case OFFSET_TYPE:
19024       /* This code is used for C++ pointer-to-data-member types.
19025 	 Output a description of the relevant class type.  */
19026       gen_type_die_with_usage (TYPE_OFFSET_BASETYPE (type), context_die,
19027 					DINFO_USAGE_IND_USE);
19028 
19029       /* Output a description of the type of the object pointed to.  */
19030       gen_type_die_with_usage (TREE_TYPE (type), context_die,
19031 					DINFO_USAGE_IND_USE);
19032 
19033       /* Now output a DIE to represent this pointer-to-data-member type
19034 	 itself.  */
19035       gen_ptr_to_mbr_type_die (type, context_die);
19036       break;
19037 
19038     case FUNCTION_TYPE:
19039       /* Force out return type (in case it wasn't forced out already).  */
19040       gen_type_die_with_usage (TREE_TYPE (type), context_die,
19041 					DINFO_USAGE_DIR_USE);
19042       gen_subroutine_type_die (type, context_die);
19043       break;
19044 
19045     case METHOD_TYPE:
19046       /* Force out return type (in case it wasn't forced out already).  */
19047       gen_type_die_with_usage (TREE_TYPE (type), context_die,
19048 					DINFO_USAGE_DIR_USE);
19049       gen_subroutine_type_die (type, context_die);
19050       break;
19051 
19052     case ARRAY_TYPE:
19053       gen_array_type_die (type, context_die);
19054       break;
19055 
19056     case VECTOR_TYPE:
19057       gen_array_type_die (type, context_die);
19058       break;
19059 
19060     case ENUMERAL_TYPE:
19061     case RECORD_TYPE:
19062     case UNION_TYPE:
19063     case QUAL_UNION_TYPE:
19064       gen_tagged_type_die (type, context_die, usage);
19065       return;
19066 
19067     case VOID_TYPE:
19068     case INTEGER_TYPE:
19069     case REAL_TYPE:
19070     case FIXED_POINT_TYPE:
19071     case COMPLEX_TYPE:
19072     case BOOLEAN_TYPE:
19073       /* No DIEs needed for fundamental types.  */
19074       break;
19075 
19076     case NULLPTR_TYPE:
19077     case LANG_TYPE:
19078       /* Just use DW_TAG_unspecified_type.  */
19079       {
19080         dw_die_ref type_die = lookup_type_die (type);
19081         if (type_die == NULL)
19082           {
19083 	    tree name = TYPE_NAME (type);
19084 	    if (TREE_CODE (name) == TYPE_DECL)
19085 	      name = DECL_NAME (name);
19086             type_die = new_die (DW_TAG_unspecified_type, comp_unit_die (), type);
19087             add_name_attribute (type_die, IDENTIFIER_POINTER (name));
19088             equate_type_number_to_die (type, type_die);
19089           }
19090       }
19091       break;
19092 
19093     default:
19094       gcc_unreachable ();
19095     }
19096 
19097   TREE_ASM_WRITTEN (type) = 1;
19098 }
19099 
19100 static void
19101 gen_type_die (tree type, dw_die_ref context_die)
19102 {
19103   gen_type_die_with_usage (type, context_die, DINFO_USAGE_DIR_USE);
19104 }
19105 
19106 /* Generate a DW_TAG_lexical_block DIE followed by DIEs to represent all of the
19107    things which are local to the given block.  */
19108 
19109 static void
19110 gen_block_die (tree stmt, dw_die_ref context_die, int depth)
19111 {
19112   int must_output_die = 0;
19113   bool inlined_func;
19114 
19115   /* Ignore blocks that are NULL.  */
19116   if (stmt == NULL_TREE)
19117     return;
19118 
19119   inlined_func = inlined_function_outer_scope_p (stmt);
19120 
19121   /* If the block is one fragment of a non-contiguous block, do not
19122      process the variables, since they will have been done by the
19123      origin block.  Do process subblocks.  */
19124   if (BLOCK_FRAGMENT_ORIGIN (stmt))
19125     {
19126       tree sub;
19127 
19128       for (sub = BLOCK_SUBBLOCKS (stmt); sub; sub = BLOCK_CHAIN (sub))
19129 	gen_block_die (sub, context_die, depth + 1);
19130 
19131       return;
19132     }
19133 
19134   /* Determine if we need to output any Dwarf DIEs at all to represent this
19135      block.  */
19136   if (inlined_func)
19137     /* The outer scopes for inlinings *must* always be represented.  We
19138        generate DW_TAG_inlined_subroutine DIEs for them.  (See below.) */
19139     must_output_die = 1;
19140   else
19141     {
19142       /* Determine if this block directly contains any "significant"
19143 	 local declarations which we will need to output DIEs for.  */
19144       if (debug_info_level > DINFO_LEVEL_TERSE)
19145 	/* We are not in terse mode so *any* local declaration counts
19146 	   as being a "significant" one.  */
19147 	must_output_die = ((BLOCK_VARS (stmt) != NULL
19148 			    || BLOCK_NUM_NONLOCALIZED_VARS (stmt))
19149 			   && (TREE_USED (stmt)
19150 			       || TREE_ASM_WRITTEN (stmt)
19151 			       || BLOCK_ABSTRACT (stmt)));
19152       else if ((TREE_USED (stmt)
19153 		|| TREE_ASM_WRITTEN (stmt)
19154 		|| BLOCK_ABSTRACT (stmt))
19155       	       && !dwarf2out_ignore_block (stmt))
19156 	must_output_die = 1;
19157     }
19158 
19159   /* It would be a waste of space to generate a Dwarf DW_TAG_lexical_block
19160      DIE for any block which contains no significant local declarations at
19161      all.  Rather, in such cases we just call `decls_for_scope' so that any
19162      needed Dwarf info for any sub-blocks will get properly generated. Note
19163      that in terse mode, our definition of what constitutes a "significant"
19164      local declaration gets restricted to include only inlined function
19165      instances and local (nested) function definitions.  */
19166   if (must_output_die)
19167     {
19168       if (inlined_func)
19169 	{
19170 	  /* If STMT block is abstract, that means we have been called
19171 	     indirectly from dwarf2out_abstract_function.
19172 	     That function rightfully marks the descendent blocks (of
19173 	     the abstract function it is dealing with) as being abstract,
19174 	     precisely to prevent us from emitting any
19175 	     DW_TAG_inlined_subroutine DIE as a descendent
19176 	     of an abstract function instance. So in that case, we should
19177 	     not call gen_inlined_subroutine_die.
19178 
19179 	     Later though, when cgraph asks dwarf2out to emit info
19180 	     for the concrete instance of the function decl into which
19181 	     the concrete instance of STMT got inlined, the later will lead
19182 	     to the generation of a DW_TAG_inlined_subroutine DIE.  */
19183 	  if (! BLOCK_ABSTRACT (stmt))
19184 	    gen_inlined_subroutine_die (stmt, context_die, depth);
19185 	}
19186       else
19187 	gen_lexical_block_die (stmt, context_die, depth);
19188     }
19189   else
19190     decls_for_scope (stmt, context_die, depth);
19191 }
19192 
19193 /* Process variable DECL (or variable with origin ORIGIN) within
19194    block STMT and add it to CONTEXT_DIE.  */
19195 static void
19196 process_scope_var (tree stmt, tree decl, tree origin, dw_die_ref context_die)
19197 {
19198   dw_die_ref die;
19199   tree decl_or_origin = decl ? decl : origin;
19200 
19201   if (TREE_CODE (decl_or_origin) == FUNCTION_DECL)
19202     die = lookup_decl_die (decl_or_origin);
19203   else if (TREE_CODE (decl_or_origin) == TYPE_DECL
19204            && TYPE_DECL_IS_STUB (decl_or_origin))
19205     die = lookup_type_die (TREE_TYPE (decl_or_origin));
19206   else
19207     die = NULL;
19208 
19209   if (die != NULL && die->die_parent == NULL)
19210     add_child_die (context_die, die);
19211   else if (TREE_CODE (decl_or_origin) == IMPORTED_DECL)
19212     dwarf2out_imported_module_or_decl_1 (decl_or_origin, DECL_NAME (decl_or_origin),
19213 					 stmt, context_die);
19214   else
19215     gen_decl_die (decl, origin, context_die);
19216 }
19217 
19218 /* Generate all of the decls declared within a given scope and (recursively)
19219    all of its sub-blocks.  */
19220 
19221 static void
19222 decls_for_scope (tree stmt, dw_die_ref context_die, int depth)
19223 {
19224   tree decl;
19225   unsigned int i;
19226   tree subblocks;
19227 
19228   /* Ignore NULL blocks.  */
19229   if (stmt == NULL_TREE)
19230     return;
19231 
19232   /* Output the DIEs to represent all of the data objects and typedefs
19233      declared directly within this block but not within any nested
19234      sub-blocks.  Also, nested function and tag DIEs have been
19235      generated with a parent of NULL; fix that up now.  */
19236   for (decl = BLOCK_VARS (stmt); decl != NULL; decl = DECL_CHAIN (decl))
19237     process_scope_var (stmt, decl, NULL_TREE, context_die);
19238   for (i = 0; i < BLOCK_NUM_NONLOCALIZED_VARS (stmt); i++)
19239     process_scope_var (stmt, NULL, BLOCK_NONLOCALIZED_VAR (stmt, i),
19240     		       context_die);
19241 
19242   /* If we're at -g1, we're not interested in subblocks.  */
19243   if (debug_info_level <= DINFO_LEVEL_TERSE)
19244     return;
19245 
19246   /* Output the DIEs to represent all sub-blocks (and the items declared
19247      therein) of this block.  */
19248   for (subblocks = BLOCK_SUBBLOCKS (stmt);
19249        subblocks != NULL;
19250        subblocks = BLOCK_CHAIN (subblocks))
19251     gen_block_die (subblocks, context_die, depth + 1);
19252 }
19253 
19254 /* Is this a typedef we can avoid emitting?  */
19255 
19256 static inline int
19257 is_redundant_typedef (const_tree decl)
19258 {
19259   if (TYPE_DECL_IS_STUB (decl))
19260     return 1;
19261 
19262   if (DECL_ARTIFICIAL (decl)
19263       && DECL_CONTEXT (decl)
19264       && is_tagged_type (DECL_CONTEXT (decl))
19265       && TREE_CODE (TYPE_NAME (DECL_CONTEXT (decl))) == TYPE_DECL
19266       && DECL_NAME (decl) == DECL_NAME (TYPE_NAME (DECL_CONTEXT (decl))))
19267     /* Also ignore the artificial member typedef for the class name.  */
19268     return 1;
19269 
19270   return 0;
19271 }
19272 
19273 /* Return TRUE if TYPE is a typedef that names a type for linkage
19274    purposes. This kind of typedefs is produced by the C++ FE for
19275    constructs like:
19276 
19277    typedef struct {...} foo;
19278 
19279    In that case, there is no typedef variant type produced for foo.
19280    Rather, the TREE_TYPE of the TYPE_DECL of foo is the anonymous
19281    struct type.  */
19282 
19283 static bool
19284 is_naming_typedef_decl (const_tree decl)
19285 {
19286   if (decl == NULL_TREE
19287       || TREE_CODE (decl) != TYPE_DECL
19288       || !is_tagged_type (TREE_TYPE (decl))
19289       || DECL_IS_BUILTIN (decl)
19290       || is_redundant_typedef (decl)
19291       /* It looks like Ada produces TYPE_DECLs that are very similar
19292          to C++ naming typedefs but that have different
19293          semantics. Let's be specific to c++ for now.  */
19294       || !is_cxx ())
19295     return FALSE;
19296 
19297   return (DECL_ORIGINAL_TYPE (decl) == NULL_TREE
19298 	  && TYPE_NAME (TREE_TYPE (decl)) == decl
19299 	  && (TYPE_STUB_DECL (TREE_TYPE (decl))
19300 	      != TYPE_NAME (TREE_TYPE (decl))));
19301 }
19302 
19303 /* Returns the DIE for a context.  */
19304 
19305 static inline dw_die_ref
19306 get_context_die (tree context)
19307 {
19308   if (context)
19309     {
19310       /* Find die that represents this context.  */
19311       if (TYPE_P (context))
19312 	{
19313 	  context = TYPE_MAIN_VARIANT (context);
19314 	  return strip_naming_typedef (context, force_type_die (context));
19315 	}
19316       else
19317 	return force_decl_die (context);
19318     }
19319   return comp_unit_die ();
19320 }
19321 
19322 /* Returns the DIE for decl.  A DIE will always be returned.  */
19323 
19324 static dw_die_ref
19325 force_decl_die (tree decl)
19326 {
19327   dw_die_ref decl_die;
19328   unsigned saved_external_flag;
19329   tree save_fn = NULL_TREE;
19330   decl_die = lookup_decl_die (decl);
19331   if (!decl_die)
19332     {
19333       dw_die_ref context_die = get_context_die (DECL_CONTEXT (decl));
19334 
19335       decl_die = lookup_decl_die (decl);
19336       if (decl_die)
19337 	return decl_die;
19338 
19339       switch (TREE_CODE (decl))
19340 	{
19341 	case FUNCTION_DECL:
19342 	  /* Clear current_function_decl, so that gen_subprogram_die thinks
19343 	     that this is a declaration. At this point, we just want to force
19344 	     declaration die.  */
19345 	  save_fn = current_function_decl;
19346 	  current_function_decl = NULL_TREE;
19347 	  gen_subprogram_die (decl, context_die);
19348 	  current_function_decl = save_fn;
19349 	  break;
19350 
19351 	case VAR_DECL:
19352 	  /* Set external flag to force declaration die. Restore it after
19353 	   gen_decl_die() call.  */
19354 	  saved_external_flag = DECL_EXTERNAL (decl);
19355 	  DECL_EXTERNAL (decl) = 1;
19356 	  gen_decl_die (decl, NULL, context_die);
19357 	  DECL_EXTERNAL (decl) = saved_external_flag;
19358 	  break;
19359 
19360 	case NAMESPACE_DECL:
19361 	  if (dwarf_version >= 3 || !dwarf_strict)
19362 	    dwarf2out_decl (decl);
19363 	  else
19364 	    /* DWARF2 has neither DW_TAG_module, nor DW_TAG_namespace.  */
19365 	    decl_die = comp_unit_die ();
19366 	  break;
19367 
19368 	case TRANSLATION_UNIT_DECL:
19369 	  decl_die = comp_unit_die ();
19370 	  break;
19371 
19372 	default:
19373 	  gcc_unreachable ();
19374 	}
19375 
19376       /* We should be able to find the DIE now.  */
19377       if (!decl_die)
19378 	decl_die = lookup_decl_die (decl);
19379       gcc_assert (decl_die);
19380     }
19381 
19382   return decl_die;
19383 }
19384 
19385 /* Returns the DIE for TYPE, that must not be a base type.  A DIE is
19386    always returned.  */
19387 
19388 static dw_die_ref
19389 force_type_die (tree type)
19390 {
19391   dw_die_ref type_die;
19392 
19393   type_die = lookup_type_die (type);
19394   if (!type_die)
19395     {
19396       dw_die_ref context_die = get_context_die (TYPE_CONTEXT (type));
19397 
19398       type_die = modified_type_die (type, TYPE_READONLY (type),
19399 				    TYPE_VOLATILE (type), context_die);
19400       gcc_assert (type_die);
19401     }
19402   return type_die;
19403 }
19404 
19405 /* Force out any required namespaces to be able to output DECL,
19406    and return the new context_die for it, if it's changed.  */
19407 
19408 static dw_die_ref
19409 setup_namespace_context (tree thing, dw_die_ref context_die)
19410 {
19411   tree context = (DECL_P (thing)
19412 		  ? DECL_CONTEXT (thing) : TYPE_CONTEXT (thing));
19413   if (context && TREE_CODE (context) == NAMESPACE_DECL)
19414     /* Force out the namespace.  */
19415     context_die = force_decl_die (context);
19416 
19417   return context_die;
19418 }
19419 
19420 /* Emit a declaration DIE for THING (which is either a DECL or a tagged
19421    type) within its namespace, if appropriate.
19422 
19423    For compatibility with older debuggers, namespace DIEs only contain
19424    declarations; all definitions are emitted at CU scope.  */
19425 
19426 static dw_die_ref
19427 declare_in_namespace (tree thing, dw_die_ref context_die)
19428 {
19429   dw_die_ref ns_context;
19430 
19431   if (debug_info_level <= DINFO_LEVEL_TERSE)
19432     return context_die;
19433 
19434   /* If this decl is from an inlined function, then don't try to emit it in its
19435      namespace, as we will get confused.  It would have already been emitted
19436      when the abstract instance of the inline function was emitted anyways.  */
19437   if (DECL_P (thing) && DECL_ABSTRACT_ORIGIN (thing))
19438     return context_die;
19439 
19440   ns_context = setup_namespace_context (thing, context_die);
19441 
19442   if (ns_context != context_die)
19443     {
19444       if (is_fortran ())
19445 	return ns_context;
19446       if (DECL_P (thing))
19447 	gen_decl_die (thing, NULL, ns_context);
19448       else
19449 	gen_type_die (thing, ns_context);
19450     }
19451   return context_die;
19452 }
19453 
19454 /* Generate a DIE for a namespace or namespace alias.  */
19455 
19456 static void
19457 gen_namespace_die (tree decl, dw_die_ref context_die)
19458 {
19459   dw_die_ref namespace_die;
19460 
19461   /* Namespace aliases have a DECL_ABSTRACT_ORIGIN of the namespace
19462      they are an alias of.  */
19463   if (DECL_ABSTRACT_ORIGIN (decl) == NULL)
19464     {
19465       /* Output a real namespace or module.  */
19466       context_die = setup_namespace_context (decl, comp_unit_die ());
19467       namespace_die = new_die (is_fortran ()
19468 			       ? DW_TAG_module : DW_TAG_namespace,
19469 			       context_die, decl);
19470       /* For Fortran modules defined in different CU don't add src coords.  */
19471       if (namespace_die->die_tag == DW_TAG_module && DECL_EXTERNAL (decl))
19472 	{
19473 	  const char *name = dwarf2_name (decl, 0);
19474 	  if (name)
19475 	    add_name_attribute (namespace_die, name);
19476 	}
19477       else
19478 	add_name_and_src_coords_attributes (namespace_die, decl);
19479       if (DECL_EXTERNAL (decl))
19480 	add_AT_flag (namespace_die, DW_AT_declaration, 1);
19481       equate_decl_number_to_die (decl, namespace_die);
19482     }
19483   else
19484     {
19485       /* Output a namespace alias.  */
19486 
19487       /* Force out the namespace we are an alias of, if necessary.  */
19488       dw_die_ref origin_die
19489 	= force_decl_die (DECL_ABSTRACT_ORIGIN (decl));
19490 
19491       if (DECL_FILE_SCOPE_P (decl)
19492 	  || TREE_CODE (DECL_CONTEXT (decl)) == NAMESPACE_DECL)
19493 	context_die = setup_namespace_context (decl, comp_unit_die ());
19494       /* Now create the namespace alias DIE.  */
19495       namespace_die = new_die (DW_TAG_imported_declaration, context_die, decl);
19496       add_name_and_src_coords_attributes (namespace_die, decl);
19497       add_AT_die_ref (namespace_die, DW_AT_import, origin_die);
19498       equate_decl_number_to_die (decl, namespace_die);
19499     }
19500 }
19501 
19502 /* Generate Dwarf debug information for a decl described by DECL.
19503    The return value is currently only meaningful for PARM_DECLs,
19504    for all other decls it returns NULL.  */
19505 
19506 static dw_die_ref
19507 gen_decl_die (tree decl, tree origin, dw_die_ref context_die)
19508 {
19509   tree decl_or_origin = decl ? decl : origin;
19510   tree class_origin = NULL, ultimate_origin;
19511 
19512   if (DECL_P (decl_or_origin) && DECL_IGNORED_P (decl_or_origin))
19513     return NULL;
19514 
19515   switch (TREE_CODE (decl_or_origin))
19516     {
19517     case ERROR_MARK:
19518       break;
19519 
19520     case CONST_DECL:
19521       if (!is_fortran () && !is_ada ())
19522 	{
19523 	  /* The individual enumerators of an enum type get output when we output
19524 	     the Dwarf representation of the relevant enum type itself.  */
19525 	  break;
19526 	}
19527 
19528       /* Emit its type.  */
19529       gen_type_die (TREE_TYPE (decl), context_die);
19530 
19531       /* And its containing namespace.  */
19532       context_die = declare_in_namespace (decl, context_die);
19533 
19534       gen_const_die (decl, context_die);
19535       break;
19536 
19537     case FUNCTION_DECL:
19538       /* Don't output any DIEs to represent mere function declarations,
19539 	 unless they are class members or explicit block externs.  */
19540       if (DECL_INITIAL (decl_or_origin) == NULL_TREE
19541           && DECL_FILE_SCOPE_P (decl_or_origin)
19542 	  && (current_function_decl == NULL_TREE
19543 	      || DECL_ARTIFICIAL (decl_or_origin)))
19544 	break;
19545 
19546 #if 0
19547       /* FIXME */
19548       /* This doesn't work because the C frontend sets DECL_ABSTRACT_ORIGIN
19549 	 on local redeclarations of global functions.  That seems broken.  */
19550       if (current_function_decl != decl)
19551 	/* This is only a declaration.  */;
19552 #endif
19553 
19554       /* If we're emitting a clone, emit info for the abstract instance.  */
19555       if (origin || DECL_ORIGIN (decl) != decl)
19556 	dwarf2out_abstract_function (origin
19557 				     ? DECL_ORIGIN (origin)
19558 				     : DECL_ABSTRACT_ORIGIN (decl));
19559 
19560       /* If we're emitting an out-of-line copy of an inline function,
19561 	 emit info for the abstract instance and set up to refer to it.  */
19562       else if (cgraph_function_possibly_inlined_p (decl)
19563 	       && ! DECL_ABSTRACT (decl)
19564 	       && ! class_or_namespace_scope_p (context_die)
19565 	       /* dwarf2out_abstract_function won't emit a die if this is just
19566 		  a declaration.  We must avoid setting DECL_ABSTRACT_ORIGIN in
19567 		  that case, because that works only if we have a die.  */
19568 	       && DECL_INITIAL (decl) != NULL_TREE)
19569 	{
19570 	  dwarf2out_abstract_function (decl);
19571 	  set_decl_origin_self (decl);
19572 	}
19573 
19574       /* Otherwise we're emitting the primary DIE for this decl.  */
19575       else if (debug_info_level > DINFO_LEVEL_TERSE)
19576 	{
19577 	  /* Before we describe the FUNCTION_DECL itself, make sure that we
19578 	     have its containing type.  */
19579 	  if (!origin)
19580 	    origin = decl_class_context (decl);
19581 	  if (origin != NULL_TREE)
19582 	    gen_type_die (origin, context_die);
19583 
19584 	  /* And its return type.  */
19585 	  gen_type_die (TREE_TYPE (TREE_TYPE (decl)), context_die);
19586 
19587 	  /* And its virtual context.  */
19588 	  if (DECL_VINDEX (decl) != NULL_TREE)
19589 	    gen_type_die (DECL_CONTEXT (decl), context_die);
19590 
19591 	  /* Make sure we have a member DIE for decl.  */
19592 	  if (origin != NULL_TREE)
19593 	    gen_type_die_for_member (origin, decl, context_die);
19594 
19595 	  /* And its containing namespace.  */
19596 	  context_die = declare_in_namespace (decl, context_die);
19597 	}
19598 
19599       /* Now output a DIE to represent the function itself.  */
19600       if (decl)
19601         gen_subprogram_die (decl, context_die);
19602       break;
19603 
19604     case TYPE_DECL:
19605       /* If we are in terse mode, don't generate any DIEs to represent any
19606 	 actual typedefs.  */
19607       if (debug_info_level <= DINFO_LEVEL_TERSE)
19608 	break;
19609 
19610       /* In the special case of a TYPE_DECL node representing the declaration
19611 	 of some type tag, if the given TYPE_DECL is marked as having been
19612 	 instantiated from some other (original) TYPE_DECL node (e.g. one which
19613 	 was generated within the original definition of an inline function) we
19614 	 used to generate a special (abbreviated) DW_TAG_structure_type,
19615 	 DW_TAG_union_type, or DW_TAG_enumeration_type DIE here.  But nothing
19616 	 should be actually referencing those DIEs, as variable DIEs with that
19617 	 type would be emitted already in the abstract origin, so it was always
19618 	 removed during unused type prunning.  Don't add anything in this
19619 	 case.  */
19620       if (TYPE_DECL_IS_STUB (decl) && decl_ultimate_origin (decl) != NULL_TREE)
19621 	break;
19622 
19623       if (is_redundant_typedef (decl))
19624 	gen_type_die (TREE_TYPE (decl), context_die);
19625       else
19626 	/* Output a DIE to represent the typedef itself.  */
19627 	gen_typedef_die (decl, context_die);
19628       break;
19629 
19630     case LABEL_DECL:
19631       if (debug_info_level >= DINFO_LEVEL_NORMAL)
19632 	gen_label_die (decl, context_die);
19633       break;
19634 
19635     case VAR_DECL:
19636     case RESULT_DECL:
19637       /* If we are in terse mode, don't generate any DIEs to represent any
19638 	 variable declarations or definitions.  */
19639       if (debug_info_level <= DINFO_LEVEL_TERSE)
19640 	break;
19641 
19642       /* Output any DIEs that are needed to specify the type of this data
19643 	 object.  */
19644       if (decl_by_reference_p (decl_or_origin))
19645 	gen_type_die (TREE_TYPE (TREE_TYPE (decl_or_origin)), context_die);
19646       else
19647 	gen_type_die (TREE_TYPE (decl_or_origin), context_die);
19648 
19649       /* And its containing type.  */
19650       class_origin = decl_class_context (decl_or_origin);
19651       if (class_origin != NULL_TREE)
19652 	gen_type_die_for_member (class_origin, decl_or_origin, context_die);
19653 
19654       /* And its containing namespace.  */
19655       context_die = declare_in_namespace (decl_or_origin, context_die);
19656 
19657       /* Now output the DIE to represent the data object itself.  This gets
19658 	 complicated because of the possibility that the VAR_DECL really
19659 	 represents an inlined instance of a formal parameter for an inline
19660 	 function.  */
19661       ultimate_origin = decl_ultimate_origin (decl_or_origin);
19662       if (ultimate_origin != NULL_TREE
19663 	  && TREE_CODE (ultimate_origin) == PARM_DECL)
19664 	gen_formal_parameter_die (decl, origin,
19665 				  true /* Emit name attribute.  */,
19666 				  context_die);
19667       else
19668 	gen_variable_die (decl, origin, context_die);
19669       break;
19670 
19671     case FIELD_DECL:
19672       /* Ignore the nameless fields that are used to skip bits but handle C++
19673 	 anonymous unions and structs.  */
19674       if (DECL_NAME (decl) != NULL_TREE
19675 	  || TREE_CODE (TREE_TYPE (decl)) == UNION_TYPE
19676 	  || TREE_CODE (TREE_TYPE (decl)) == RECORD_TYPE)
19677 	{
19678 	  gen_type_die (member_declared_type (decl), context_die);
19679 	  gen_field_die (decl, context_die);
19680 	}
19681       break;
19682 
19683     case PARM_DECL:
19684       if (DECL_BY_REFERENCE (decl_or_origin))
19685 	gen_type_die (TREE_TYPE (TREE_TYPE (decl_or_origin)), context_die);
19686       else
19687 	gen_type_die (TREE_TYPE (decl_or_origin), context_die);
19688       return gen_formal_parameter_die (decl, origin,
19689 				       true /* Emit name attribute.  */,
19690 				       context_die);
19691 
19692     case NAMESPACE_DECL:
19693     case IMPORTED_DECL:
19694       if (dwarf_version >= 3 || !dwarf_strict)
19695 	gen_namespace_die (decl, context_die);
19696       break;
19697 
19698     default:
19699       /* Probably some frontend-internal decl.  Assume we don't care.  */
19700       gcc_assert ((int)TREE_CODE (decl) > NUM_TREE_CODES);
19701       break;
19702     }
19703 
19704   return NULL;
19705 }
19706 
19707 /* Output debug information for global decl DECL.  Called from toplev.c after
19708    compilation proper has finished.  */
19709 
19710 static void
19711 dwarf2out_global_decl (tree decl)
19712 {
19713   /* Output DWARF2 information for file-scope tentative data object
19714      declarations, file-scope (extern) function declarations (which
19715      had no corresponding body) and file-scope tagged type declarations
19716      and definitions which have not yet been forced out.  */
19717   if (TREE_CODE (decl) != FUNCTION_DECL || !DECL_INITIAL (decl))
19718     dwarf2out_decl (decl);
19719 }
19720 
19721 /* Output debug information for type decl DECL.  Called from toplev.c
19722    and from language front ends (to record built-in types).  */
19723 static void
19724 dwarf2out_type_decl (tree decl, int local)
19725 {
19726   if (!local)
19727     dwarf2out_decl (decl);
19728 }
19729 
19730 /* Output debug information for imported module or decl DECL.
19731    NAME is non-NULL name in the lexical block if the decl has been renamed.
19732    LEXICAL_BLOCK is the lexical block (which TREE_CODE is a BLOCK)
19733    that DECL belongs to.
19734    LEXICAL_BLOCK_DIE is the DIE of LEXICAL_BLOCK.  */
19735 static void
19736 dwarf2out_imported_module_or_decl_1 (tree decl,
19737 				     tree name,
19738 				     tree lexical_block,
19739 				     dw_die_ref lexical_block_die)
19740 {
19741   expanded_location xloc;
19742   dw_die_ref imported_die = NULL;
19743   dw_die_ref at_import_die;
19744 
19745   if (TREE_CODE (decl) == IMPORTED_DECL)
19746     {
19747       xloc = expand_location (DECL_SOURCE_LOCATION (decl));
19748       decl = IMPORTED_DECL_ASSOCIATED_DECL (decl);
19749       gcc_assert (decl);
19750     }
19751   else
19752     xloc = expand_location (input_location);
19753 
19754   if (TREE_CODE (decl) == TYPE_DECL || TREE_CODE (decl) == CONST_DECL)
19755     {
19756       at_import_die = force_type_die (TREE_TYPE (decl));
19757       /* For namespace N { typedef void T; } using N::T; base_type_die
19758 	 returns NULL, but DW_TAG_imported_declaration requires
19759 	 the DW_AT_import tag.  Force creation of DW_TAG_typedef.  */
19760       if (!at_import_die)
19761 	{
19762 	  gcc_assert (TREE_CODE (decl) == TYPE_DECL);
19763 	  gen_typedef_die (decl, get_context_die (DECL_CONTEXT (decl)));
19764 	  at_import_die = lookup_type_die (TREE_TYPE (decl));
19765 	  gcc_assert (at_import_die);
19766 	}
19767     }
19768   else
19769     {
19770       at_import_die = lookup_decl_die (decl);
19771       if (!at_import_die)
19772 	{
19773 	  /* If we're trying to avoid duplicate debug info, we may not have
19774 	     emitted the member decl for this field.  Emit it now.  */
19775 	  if (TREE_CODE (decl) == FIELD_DECL)
19776 	    {
19777 	      tree type = DECL_CONTEXT (decl);
19778 
19779 	      if (TYPE_CONTEXT (type)
19780 		  && TYPE_P (TYPE_CONTEXT (type))
19781 		  && !should_emit_struct_debug (TYPE_CONTEXT (type),
19782 						DINFO_USAGE_DIR_USE))
19783 		return;
19784 	      gen_type_die_for_member (type, decl,
19785 				       get_context_die (TYPE_CONTEXT (type)));
19786 	    }
19787 	  at_import_die = force_decl_die (decl);
19788 	}
19789     }
19790 
19791   if (TREE_CODE (decl) == NAMESPACE_DECL)
19792     {
19793       if (dwarf_version >= 3 || !dwarf_strict)
19794 	imported_die = new_die (DW_TAG_imported_module,
19795 				lexical_block_die,
19796 				lexical_block);
19797       else
19798 	return;
19799     }
19800   else
19801     imported_die = new_die (DW_TAG_imported_declaration,
19802 			    lexical_block_die,
19803 			    lexical_block);
19804 
19805   add_AT_file (imported_die, DW_AT_decl_file, lookup_filename (xloc.file));
19806   add_AT_unsigned (imported_die, DW_AT_decl_line, xloc.line);
19807   if (name)
19808     add_AT_string (imported_die, DW_AT_name,
19809 		   IDENTIFIER_POINTER (name));
19810   add_AT_die_ref (imported_die, DW_AT_import, at_import_die);
19811 }
19812 
19813 /* Output debug information for imported module or decl DECL.
19814    NAME is non-NULL name in context if the decl has been renamed.
19815    CHILD is true if decl is one of the renamed decls as part of
19816    importing whole module.  */
19817 
19818 static void
19819 dwarf2out_imported_module_or_decl (tree decl, tree name, tree context,
19820 				   bool child)
19821 {
19822   /* dw_die_ref at_import_die;  */
19823   dw_die_ref scope_die;
19824 
19825   if (debug_info_level <= DINFO_LEVEL_TERSE)
19826     return;
19827 
19828   gcc_assert (decl);
19829 
19830   /* To emit DW_TAG_imported_module or DW_TAG_imported_decl, we need two DIEs.
19831      We need decl DIE for reference and scope die. First, get DIE for the decl
19832      itself.  */
19833 
19834   /* Get the scope die for decl context. Use comp_unit_die for global module
19835      or decl. If die is not found for non globals, force new die.  */
19836   if (context
19837       && TYPE_P (context)
19838       && !should_emit_struct_debug (context, DINFO_USAGE_DIR_USE))
19839     return;
19840 
19841   if (!(dwarf_version >= 3 || !dwarf_strict))
19842     return;
19843 
19844   scope_die = get_context_die (context);
19845 
19846   if (child)
19847     {
19848       gcc_assert (scope_die->die_child);
19849       gcc_assert (scope_die->die_child->die_tag == DW_TAG_imported_module);
19850       gcc_assert (TREE_CODE (decl) != NAMESPACE_DECL);
19851       scope_die = scope_die->die_child;
19852     }
19853 
19854   /* OK, now we have DIEs for decl as well as scope. Emit imported die.  */
19855   dwarf2out_imported_module_or_decl_1 (decl, name, context, scope_die);
19856 
19857 }
19858 
19859 /* Write the debugging output for DECL.  */
19860 
19861 void
19862 dwarf2out_decl (tree decl)
19863 {
19864   dw_die_ref context_die = comp_unit_die ();
19865 
19866   switch (TREE_CODE (decl))
19867     {
19868     case ERROR_MARK:
19869       return;
19870 
19871     case FUNCTION_DECL:
19872       /* What we would really like to do here is to filter out all mere
19873 	 file-scope declarations of file-scope functions which are never
19874 	 referenced later within this translation unit (and keep all of ones
19875 	 that *are* referenced later on) but we aren't clairvoyant, so we have
19876 	 no idea which functions will be referenced in the future (i.e. later
19877 	 on within the current translation unit). So here we just ignore all
19878 	 file-scope function declarations which are not also definitions.  If
19879 	 and when the debugger needs to know something about these functions,
19880 	 it will have to hunt around and find the DWARF information associated
19881 	 with the definition of the function.
19882 
19883 	 We can't just check DECL_EXTERNAL to find out which FUNCTION_DECL
19884 	 nodes represent definitions and which ones represent mere
19885 	 declarations.  We have to check DECL_INITIAL instead. That's because
19886 	 the C front-end supports some weird semantics for "extern inline"
19887 	 function definitions.  These can get inlined within the current
19888 	 translation unit (and thus, we need to generate Dwarf info for their
19889 	 abstract instances so that the Dwarf info for the concrete inlined
19890 	 instances can have something to refer to) but the compiler never
19891 	 generates any out-of-lines instances of such things (despite the fact
19892 	 that they *are* definitions).
19893 
19894 	 The important point is that the C front-end marks these "extern
19895 	 inline" functions as DECL_EXTERNAL, but we need to generate DWARF for
19896 	 them anyway. Note that the C++ front-end also plays some similar games
19897 	 for inline function definitions appearing within include files which
19898 	 also contain `#pragma interface' pragmas.  */
19899       if (DECL_INITIAL (decl) == NULL_TREE)
19900 	return;
19901 
19902       /* If we're a nested function, initially use a parent of NULL; if we're
19903 	 a plain function, this will be fixed up in decls_for_scope.  If
19904 	 we're a method, it will be ignored, since we already have a DIE.  */
19905       if (decl_function_context (decl)
19906 	  /* But if we're in terse mode, we don't care about scope.  */
19907 	  && debug_info_level > DINFO_LEVEL_TERSE)
19908 	context_die = NULL;
19909       break;
19910 
19911     case VAR_DECL:
19912       /* Ignore this VAR_DECL if it refers to a file-scope extern data object
19913 	 declaration and if the declaration was never even referenced from
19914 	 within this entire compilation unit.  We suppress these DIEs in
19915 	 order to save space in the .debug section (by eliminating entries
19916 	 which are probably useless).  Note that we must not suppress
19917 	 block-local extern declarations (whether used or not) because that
19918 	 would screw-up the debugger's name lookup mechanism and cause it to
19919 	 miss things which really ought to be in scope at a given point.  */
19920       if (DECL_EXTERNAL (decl) && !TREE_USED (decl))
19921 	return;
19922 
19923       /* For local statics lookup proper context die.  */
19924       if (TREE_STATIC (decl)
19925 	  && DECL_CONTEXT (decl)
19926 	  && TREE_CODE (DECL_CONTEXT (decl)) == FUNCTION_DECL)
19927 	context_die = lookup_decl_die (DECL_CONTEXT (decl));
19928 
19929       /* If we are in terse mode, don't generate any DIEs to represent any
19930 	 variable declarations or definitions.  */
19931       if (debug_info_level <= DINFO_LEVEL_TERSE)
19932 	return;
19933       break;
19934 
19935     case CONST_DECL:
19936       if (debug_info_level <= DINFO_LEVEL_TERSE)
19937 	return;
19938       if (!is_fortran () && !is_ada ())
19939 	return;
19940       if (TREE_STATIC (decl) && decl_function_context (decl))
19941 	context_die = lookup_decl_die (DECL_CONTEXT (decl));
19942       break;
19943 
19944     case NAMESPACE_DECL:
19945     case IMPORTED_DECL:
19946       if (debug_info_level <= DINFO_LEVEL_TERSE)
19947 	return;
19948       if (lookup_decl_die (decl) != NULL)
19949 	return;
19950       break;
19951 
19952     case TYPE_DECL:
19953       /* Don't emit stubs for types unless they are needed by other DIEs.  */
19954       if (TYPE_DECL_SUPPRESS_DEBUG (decl))
19955 	return;
19956 
19957       /* Don't bother trying to generate any DIEs to represent any of the
19958 	 normal built-in types for the language we are compiling.  */
19959       if (DECL_IS_BUILTIN (decl))
19960 	return;
19961 
19962       /* If we are in terse mode, don't generate any DIEs for types.  */
19963       if (debug_info_level <= DINFO_LEVEL_TERSE)
19964 	return;
19965 
19966       /* If we're a function-scope tag, initially use a parent of NULL;
19967 	 this will be fixed up in decls_for_scope.  */
19968       if (decl_function_context (decl))
19969 	context_die = NULL;
19970 
19971       break;
19972 
19973     default:
19974       return;
19975     }
19976 
19977   gen_decl_die (decl, NULL, context_die);
19978 }
19979 
19980 /* Write the debugging output for DECL.  */
19981 
19982 static void
19983 dwarf2out_function_decl (tree decl)
19984 {
19985   dwarf2out_decl (decl);
19986   call_arg_locations = NULL;
19987   call_arg_loc_last = NULL;
19988   call_site_count = -1;
19989   tail_call_site_count = -1;
19990   VEC_free (dw_die_ref, heap, block_map);
19991   htab_empty (decl_loc_table);
19992   htab_empty (cached_dw_loc_list_table);
19993 }
19994 
19995 /* Output a marker (i.e. a label) for the beginning of the generated code for
19996    a lexical block.  */
19997 
19998 static void
19999 dwarf2out_begin_block (unsigned int line ATTRIBUTE_UNUSED,
20000 		       unsigned int blocknum)
20001 {
20002   switch_to_section (current_function_section ());
20003   ASM_OUTPUT_DEBUG_LABEL (asm_out_file, BLOCK_BEGIN_LABEL, blocknum);
20004 }
20005 
20006 /* Output a marker (i.e. a label) for the end of the generated code for a
20007    lexical block.  */
20008 
20009 static void
20010 dwarf2out_end_block (unsigned int line ATTRIBUTE_UNUSED, unsigned int blocknum)
20011 {
20012   switch_to_section (current_function_section ());
20013   ASM_OUTPUT_DEBUG_LABEL (asm_out_file, BLOCK_END_LABEL, blocknum);
20014 }
20015 
20016 /* Returns nonzero if it is appropriate not to emit any debugging
20017    information for BLOCK, because it doesn't contain any instructions.
20018 
20019    Don't allow this for blocks with nested functions or local classes
20020    as we would end up with orphans, and in the presence of scheduling
20021    we may end up calling them anyway.  */
20022 
20023 static bool
20024 dwarf2out_ignore_block (const_tree block)
20025 {
20026   tree decl;
20027   unsigned int i;
20028 
20029   for (decl = BLOCK_VARS (block); decl; decl = DECL_CHAIN (decl))
20030     if (TREE_CODE (decl) == FUNCTION_DECL
20031 	|| (TREE_CODE (decl) == TYPE_DECL && TYPE_DECL_IS_STUB (decl)))
20032       return 0;
20033   for (i = 0; i < BLOCK_NUM_NONLOCALIZED_VARS (block); i++)
20034     {
20035       decl = BLOCK_NONLOCALIZED_VAR (block, i);
20036       if (TREE_CODE (decl) == FUNCTION_DECL
20037 	  || (TREE_CODE (decl) == TYPE_DECL && TYPE_DECL_IS_STUB (decl)))
20038       return 0;
20039     }
20040 
20041   return 1;
20042 }
20043 
20044 /* Hash table routines for file_hash.  */
20045 
20046 static int
20047 file_table_eq (const void *p1_p, const void *p2_p)
20048 {
20049   const struct dwarf_file_data *const p1 =
20050     (const struct dwarf_file_data *) p1_p;
20051   const char *const p2 = (const char *) p2_p;
20052   return filename_cmp (p1->filename, p2) == 0;
20053 }
20054 
20055 static hashval_t
20056 file_table_hash (const void *p_p)
20057 {
20058   const struct dwarf_file_data *const p = (const struct dwarf_file_data *) p_p;
20059   return htab_hash_string (p->filename);
20060 }
20061 
20062 /* Lookup FILE_NAME (in the list of filenames that we know about here in
20063    dwarf2out.c) and return its "index".  The index of each (known) filename is
20064    just a unique number which is associated with only that one filename.  We
20065    need such numbers for the sake of generating labels (in the .debug_sfnames
20066    section) and references to those files numbers (in the .debug_srcinfo
20067    and.debug_macinfo sections).  If the filename given as an argument is not
20068    found in our current list, add it to the list and assign it the next
20069    available unique index number.  In order to speed up searches, we remember
20070    the index of the filename was looked up last.  This handles the majority of
20071    all searches.  */
20072 
20073 static struct dwarf_file_data *
20074 lookup_filename (const char *file_name)
20075 {
20076   void ** slot;
20077   struct dwarf_file_data * created;
20078 
20079   /* Check to see if the file name that was searched on the previous
20080      call matches this file name.  If so, return the index.  */
20081   if (file_table_last_lookup
20082       && (file_name == file_table_last_lookup->filename
20083 	  || filename_cmp (file_table_last_lookup->filename, file_name) == 0))
20084     return file_table_last_lookup;
20085 
20086   /* Didn't match the previous lookup, search the table.  */
20087   slot = htab_find_slot_with_hash (file_table, file_name,
20088 				   htab_hash_string (file_name), INSERT);
20089   if (*slot)
20090     return (struct dwarf_file_data *) *slot;
20091 
20092   created = ggc_alloc_dwarf_file_data ();
20093   created->filename = file_name;
20094   created->emitted_number = 0;
20095   *slot = created;
20096   return created;
20097 }
20098 
20099 /* If the assembler will construct the file table, then translate the compiler
20100    internal file table number into the assembler file table number, and emit
20101    a .file directive if we haven't already emitted one yet.  The file table
20102    numbers are different because we prune debug info for unused variables and
20103    types, which may include filenames.  */
20104 
20105 static int
20106 maybe_emit_file (struct dwarf_file_data * fd)
20107 {
20108   if (! fd->emitted_number)
20109     {
20110       if (last_emitted_file)
20111 	fd->emitted_number = last_emitted_file->emitted_number + 1;
20112       else
20113 	fd->emitted_number = 1;
20114       last_emitted_file = fd;
20115 
20116       if (DWARF2_ASM_LINE_DEBUG_INFO)
20117 	{
20118 	  fprintf (asm_out_file, "\t.file %u ", fd->emitted_number);
20119 	  output_quoted_string (asm_out_file,
20120 				remap_debug_filename (fd->filename));
20121 	  fputc ('\n', asm_out_file);
20122 	}
20123     }
20124 
20125   return fd->emitted_number;
20126 }
20127 
20128 /* Schedule generation of a DW_AT_const_value attribute to DIE.
20129    That generation should happen after function debug info has been
20130    generated. The value of the attribute is the constant value of ARG.  */
20131 
20132 static void
20133 append_entry_to_tmpl_value_parm_die_table (dw_die_ref die, tree arg)
20134 {
20135   die_arg_entry entry;
20136 
20137   if (!die || !arg)
20138     return;
20139 
20140   if (!tmpl_value_parm_die_table)
20141     tmpl_value_parm_die_table
20142       = VEC_alloc (die_arg_entry, gc, 32);
20143 
20144   entry.die = die;
20145   entry.arg = arg;
20146   VEC_safe_push (die_arg_entry, gc,
20147 		 tmpl_value_parm_die_table,
20148 		 &entry);
20149 }
20150 
20151 /* Return TRUE if T is an instance of generic type, FALSE
20152    otherwise.  */
20153 
20154 static bool
20155 generic_type_p (tree t)
20156 {
20157   if (t == NULL_TREE || !TYPE_P (t))
20158     return false;
20159   return lang_hooks.get_innermost_generic_parms (t) != NULL_TREE;
20160 }
20161 
20162 /* Schedule the generation of the generic parameter dies for the
20163   instance of generic type T. The proper generation itself is later
20164   done by gen_scheduled_generic_parms_dies. */
20165 
20166 static void
20167 schedule_generic_params_dies_gen (tree t)
20168 {
20169   if (!generic_type_p (t))
20170     return;
20171 
20172   if (generic_type_instances == NULL)
20173     generic_type_instances = VEC_alloc (tree, gc, 256);
20174 
20175   VEC_safe_push (tree, gc, generic_type_instances, t);
20176 }
20177 
20178 /* Add a DW_AT_const_value attribute to DIEs that were scheduled
20179    by append_entry_to_tmpl_value_parm_die_table. This function must
20180    be called after function DIEs have been generated.  */
20181 
20182 static void
20183 gen_remaining_tmpl_value_param_die_attribute (void)
20184 {
20185   if (tmpl_value_parm_die_table)
20186     {
20187       unsigned i;
20188       die_arg_entry *e;
20189 
20190       FOR_EACH_VEC_ELT (die_arg_entry, tmpl_value_parm_die_table, i, e)
20191 	tree_add_const_value_attribute (e->die, e->arg);
20192     }
20193 }
20194 
20195 /* Generate generic parameters DIEs for instances of generic types
20196    that have been previously scheduled by
20197    schedule_generic_params_dies_gen. This function must be called
20198    after all the types of the CU have been laid out.  */
20199 
20200 static void
20201 gen_scheduled_generic_parms_dies (void)
20202 {
20203   unsigned i;
20204   tree t;
20205 
20206   if (generic_type_instances == NULL)
20207     return;
20208 
20209   FOR_EACH_VEC_ELT (tree, generic_type_instances, i, t)
20210     gen_generic_params_dies (t);
20211 }
20212 
20213 
20214 /* Replace DW_AT_name for the decl with name.  */
20215 
20216 static void
20217 dwarf2out_set_name (tree decl, tree name)
20218 {
20219   dw_die_ref die;
20220   dw_attr_ref attr;
20221   const char *dname;
20222 
20223   die = TYPE_SYMTAB_DIE (decl);
20224   if (!die)
20225     return;
20226 
20227   dname = dwarf2_name (name, 0);
20228   if (!dname)
20229     return;
20230 
20231   attr = get_AT (die, DW_AT_name);
20232   if (attr)
20233     {
20234       struct indirect_string_node *node;
20235 
20236       node = find_AT_string (dname);
20237       /* replace the string.  */
20238       attr->dw_attr_val.v.val_str = node;
20239     }
20240 
20241   else
20242     add_name_attribute (die, dname);
20243 }
20244 
20245 /* Called by the final INSN scan whenever we see a var location.  We
20246    use it to drop labels in the right places, and throw the location in
20247    our lookup table.  */
20248 
20249 static void
20250 dwarf2out_var_location (rtx loc_note)
20251 {
20252   char loclabel[MAX_ARTIFICIAL_LABEL_BYTES + 2];
20253   struct var_loc_node *newloc;
20254   rtx next_real, next_note;
20255   static const char *last_label;
20256   static const char *last_postcall_label;
20257   static bool last_in_cold_section_p;
20258   static rtx expected_next_loc_note;
20259   tree decl;
20260   bool var_loc_p;
20261 
20262   if (!NOTE_P (loc_note))
20263     {
20264       if (CALL_P (loc_note))
20265 	{
20266 	  call_site_count++;
20267 	  if (SIBLING_CALL_P (loc_note))
20268 	    tail_call_site_count++;
20269 	}
20270       return;
20271     }
20272 
20273   var_loc_p = NOTE_KIND (loc_note) == NOTE_INSN_VAR_LOCATION;
20274   if (var_loc_p && !DECL_P (NOTE_VAR_LOCATION_DECL (loc_note)))
20275     return;
20276 
20277   /* Optimize processing a large consecutive sequence of location
20278      notes so we don't spend too much time in next_real_insn.  If the
20279      next insn is another location note, remember the next_real_insn
20280      calculation for next time.  */
20281   next_real = cached_next_real_insn;
20282   if (next_real)
20283     {
20284       if (expected_next_loc_note != loc_note)
20285 	next_real = NULL_RTX;
20286     }
20287 
20288   next_note = NEXT_INSN (loc_note);
20289   if (! next_note
20290       || INSN_DELETED_P (next_note)
20291       || GET_CODE (next_note) != NOTE
20292       || (NOTE_KIND (next_note) != NOTE_INSN_VAR_LOCATION
20293 	  && NOTE_KIND (next_note) != NOTE_INSN_CALL_ARG_LOCATION))
20294     next_note = NULL_RTX;
20295 
20296   if (! next_real)
20297     next_real = next_real_insn (loc_note);
20298 
20299   if (next_note)
20300     {
20301       expected_next_loc_note = next_note;
20302       cached_next_real_insn = next_real;
20303     }
20304   else
20305     cached_next_real_insn = NULL_RTX;
20306 
20307   /* If there are no instructions which would be affected by this note,
20308      don't do anything.  */
20309   if (var_loc_p
20310       && next_real == NULL_RTX
20311       && !NOTE_DURING_CALL_P (loc_note))
20312     return;
20313 
20314   if (next_real == NULL_RTX)
20315     next_real = get_last_insn ();
20316 
20317   /* If there were any real insns between note we processed last time
20318      and this note (or if it is the first note), clear
20319      last_{,postcall_}label so that they are not reused this time.  */
20320   if (last_var_location_insn == NULL_RTX
20321       || last_var_location_insn != next_real
20322       || last_in_cold_section_p != in_cold_section_p)
20323     {
20324       last_label = NULL;
20325       last_postcall_label = NULL;
20326     }
20327 
20328   if (var_loc_p)
20329     {
20330       decl = NOTE_VAR_LOCATION_DECL (loc_note);
20331       newloc = add_var_loc_to_decl (decl, loc_note,
20332 				    NOTE_DURING_CALL_P (loc_note)
20333 				    ? last_postcall_label : last_label);
20334       if (newloc == NULL)
20335 	return;
20336     }
20337   else
20338     {
20339       decl = NULL_TREE;
20340       newloc = NULL;
20341     }
20342 
20343   /* If there were no real insns between note we processed last time
20344      and this note, use the label we emitted last time.  Otherwise
20345      create a new label and emit it.  */
20346   if (last_label == NULL)
20347     {
20348       ASM_GENERATE_INTERNAL_LABEL (loclabel, "LVL", loclabel_num);
20349       ASM_OUTPUT_DEBUG_LABEL (asm_out_file, "LVL", loclabel_num);
20350       loclabel_num++;
20351       last_label = ggc_strdup (loclabel);
20352     }
20353 
20354   if (!var_loc_p)
20355     {
20356       struct call_arg_loc_node *ca_loc
20357 	= ggc_alloc_cleared_call_arg_loc_node ();
20358       rtx prev = prev_real_insn (loc_note), x;
20359       ca_loc->call_arg_loc_note = loc_note;
20360       ca_loc->next = NULL;
20361       ca_loc->label = last_label;
20362       gcc_assert (prev
20363 		  && (CALL_P (prev)
20364 		      || (NONJUMP_INSN_P (prev)
20365 			  && GET_CODE (PATTERN (prev)) == SEQUENCE
20366 			  && CALL_P (XVECEXP (PATTERN (prev), 0, 0)))));
20367       if (!CALL_P (prev))
20368 	prev = XVECEXP (PATTERN (prev), 0, 0);
20369       ca_loc->tail_call_p = SIBLING_CALL_P (prev);
20370       x = PATTERN (prev);
20371       if (GET_CODE (x) == PARALLEL)
20372 	x = XVECEXP (x, 0, 0);
20373       if (GET_CODE (x) == SET)
20374 	x = SET_SRC (x);
20375       if (GET_CODE (x) == CALL && MEM_P (XEXP (x, 0)))
20376 	{
20377 	  x = XEXP (XEXP (x, 0), 0);
20378 	  if (GET_CODE (x) == SYMBOL_REF
20379 	      && SYMBOL_REF_DECL (x)
20380 	      && TREE_CODE (SYMBOL_REF_DECL (x)) == FUNCTION_DECL)
20381 	    ca_loc->symbol_ref = x;
20382 	}
20383       ca_loc->block = insn_scope (prev);
20384       if (call_arg_locations)
20385 	call_arg_loc_last->next = ca_loc;
20386       else
20387 	call_arg_locations = ca_loc;
20388       call_arg_loc_last = ca_loc;
20389     }
20390   else if (!NOTE_DURING_CALL_P (loc_note))
20391     newloc->label = last_label;
20392   else
20393     {
20394       if (!last_postcall_label)
20395 	{
20396 	  sprintf (loclabel, "%s-1", last_label);
20397 	  last_postcall_label = ggc_strdup (loclabel);
20398 	}
20399       newloc->label = last_postcall_label;
20400     }
20401 
20402   last_var_location_insn = next_real;
20403   last_in_cold_section_p = in_cold_section_p;
20404 }
20405 
20406 /* Note in one location list that text section has changed.  */
20407 
20408 static int
20409 var_location_switch_text_section_1 (void **slot, void *data ATTRIBUTE_UNUSED)
20410 {
20411   var_loc_list *list = (var_loc_list *) *slot;
20412   if (list->first)
20413     list->last_before_switch
20414       = list->last->next ? list->last->next : list->last;
20415   return 1;
20416 }
20417 
20418 /* Note in all location lists that text section has changed.  */
20419 
20420 static void
20421 var_location_switch_text_section (void)
20422 {
20423   if (decl_loc_table == NULL)
20424     return;
20425 
20426   htab_traverse (decl_loc_table, var_location_switch_text_section_1, NULL);
20427 }
20428 
20429 /* Create a new line number table.  */
20430 
20431 static dw_line_info_table *
20432 new_line_info_table (void)
20433 {
20434   dw_line_info_table *table;
20435 
20436   table = ggc_alloc_cleared_dw_line_info_table_struct ();
20437   table->file_num = 1;
20438   table->line_num = 1;
20439   table->is_stmt = DWARF_LINE_DEFAULT_IS_STMT_START;
20440 
20441   return table;
20442 }
20443 
20444 /* Lookup the "current" table into which we emit line info, so
20445    that we don't have to do it for every source line.  */
20446 
20447 static void
20448 set_cur_line_info_table (section *sec)
20449 {
20450   dw_line_info_table *table;
20451 
20452   if (sec == text_section)
20453     table = text_section_line_info;
20454   else if (sec == cold_text_section)
20455     {
20456       table = cold_text_section_line_info;
20457       if (!table)
20458 	{
20459 	  cold_text_section_line_info = table = new_line_info_table ();
20460 	  table->end_label = cold_end_label;
20461 	}
20462     }
20463   else
20464     {
20465       const char *end_label;
20466 
20467       if (flag_reorder_blocks_and_partition)
20468 	{
20469 	  if (in_cold_section_p)
20470 	    end_label = crtl->subsections.cold_section_end_label;
20471 	  else
20472 	    end_label = crtl->subsections.hot_section_end_label;
20473 	}
20474       else
20475 	{
20476 	  char label[MAX_ARTIFICIAL_LABEL_BYTES];
20477 	  ASM_GENERATE_INTERNAL_LABEL (label, FUNC_END_LABEL,
20478 				       current_function_funcdef_no);
20479 	  end_label = ggc_strdup (label);
20480 	}
20481 
20482       table = new_line_info_table ();
20483       table->end_label = end_label;
20484 
20485       VEC_safe_push (dw_line_info_table_p, gc, separate_line_info, table);
20486     }
20487 
20488   if (DWARF2_ASM_LINE_DEBUG_INFO)
20489     table->is_stmt = (cur_line_info_table
20490 		      ? cur_line_info_table->is_stmt
20491 		      : DWARF_LINE_DEFAULT_IS_STMT_START);
20492   cur_line_info_table = table;
20493 }
20494 
20495 
20496 /* We need to reset the locations at the beginning of each
20497    function. We can't do this in the end_function hook, because the
20498    declarations that use the locations won't have been output when
20499    that hook is called.  Also compute have_multiple_function_sections here.  */
20500 
20501 static void
20502 dwarf2out_begin_function (tree fun)
20503 {
20504   section *sec = function_section (fun);
20505 
20506   if (sec != text_section)
20507     have_multiple_function_sections = true;
20508 
20509   if (flag_reorder_blocks_and_partition && !cold_text_section)
20510     {
20511       gcc_assert (current_function_decl == fun);
20512       cold_text_section = unlikely_text_section ();
20513       switch_to_section (cold_text_section);
20514       ASM_OUTPUT_LABEL (asm_out_file, cold_text_section_label);
20515       switch_to_section (sec);
20516     }
20517 
20518   dwarf2out_note_section_used ();
20519   call_site_count = 0;
20520   tail_call_site_count = 0;
20521 
20522   set_cur_line_info_table (sec);
20523 }
20524 
20525 /* Add OPCODE+VAL as an entry at the end of the opcode array in TABLE.  */
20526 
20527 static void
20528 push_dw_line_info_entry (dw_line_info_table *table,
20529 			 enum dw_line_info_opcode opcode, unsigned int val)
20530 {
20531   dw_line_info_entry e;
20532   e.opcode = opcode;
20533   e.val = val;
20534   VEC_safe_push (dw_line_info_entry, gc, table->entries, &e);
20535 }
20536 
20537 /* Output a label to mark the beginning of a source code line entry
20538    and record information relating to this source line, in
20539    'line_info_table' for later output of the .debug_line section.  */
20540 /* ??? The discriminator parameter ought to be unsigned.  */
20541 
20542 static void
20543 dwarf2out_source_line (unsigned int line, const char *filename,
20544                        int discriminator, bool is_stmt)
20545 {
20546   unsigned int file_num;
20547   dw_line_info_table *table;
20548 
20549   if (debug_info_level < DINFO_LEVEL_NORMAL || line == 0)
20550     return;
20551 
20552   /* The discriminator column was added in dwarf4.  Simplify the below
20553      by simply removing it if we're not supposed to output it.  */
20554   if (dwarf_version < 4 && dwarf_strict)
20555     discriminator = 0;
20556 
20557   table = cur_line_info_table;
20558   file_num = maybe_emit_file (lookup_filename (filename));
20559 
20560   /* ??? TODO: Elide duplicate line number entries.  Traditionally,
20561      the debugger has used the second (possibly duplicate) line number
20562      at the beginning of the function to mark the end of the prologue.
20563      We could eliminate any other duplicates within the function.  For
20564      Dwarf3, we ought to include the DW_LNS_set_prologue_end mark in
20565      that second line number entry.  */
20566   /* Recall that this end-of-prologue indication is *not* the same thing
20567      as the end_prologue debug hook.  The NOTE_INSN_PROLOGUE_END note,
20568      to which the hook corresponds, follows the last insn that was
20569      emitted by gen_prologue.  What we need is to preceed the first insn
20570      that had been emitted after NOTE_INSN_FUNCTION_BEG, i.e. the first
20571      insn that corresponds to something the user wrote.  These may be
20572      very different locations once scheduling is enabled.  */
20573 
20574   if (0 && file_num == table->file_num
20575       && line == table->line_num
20576       && discriminator == table->discrim_num
20577       && is_stmt == table->is_stmt)
20578     return;
20579 
20580   switch_to_section (current_function_section ());
20581 
20582   /* If requested, emit something human-readable.  */
20583   if (flag_debug_asm)
20584     fprintf (asm_out_file, "\t%s %s:%d\n", ASM_COMMENT_START, filename, line);
20585 
20586   if (DWARF2_ASM_LINE_DEBUG_INFO)
20587     {
20588       /* Emit the .loc directive understood by GNU as.  */
20589       /* "\t.loc %u %u 0 is_stmt %u discriminator %u",
20590 	 file_num, line, is_stmt, discriminator */
20591       fputs ("\t.loc ", asm_out_file);
20592       fprint_ul (asm_out_file, file_num);
20593       putc (' ', asm_out_file);
20594       fprint_ul (asm_out_file, line);
20595       putc (' ', asm_out_file);
20596       putc ('0', asm_out_file);
20597 
20598       if (is_stmt != table->is_stmt)
20599 	{
20600 	  fputs (" is_stmt ", asm_out_file);
20601 	  putc (is_stmt ? '1' : '0', asm_out_file);
20602 	}
20603       if (SUPPORTS_DISCRIMINATOR && discriminator != 0)
20604 	{
20605 	  gcc_assert (discriminator > 0);
20606 	  fputs (" discriminator ", asm_out_file);
20607 	  fprint_ul (asm_out_file, (unsigned long) discriminator);
20608 	}
20609       putc ('\n', asm_out_file);
20610     }
20611   else
20612     {
20613       unsigned int label_num = ++line_info_label_num;
20614 
20615       targetm.asm_out.internal_label (asm_out_file, LINE_CODE_LABEL, label_num);
20616 
20617       push_dw_line_info_entry (table, LI_set_address, label_num);
20618       if (file_num != table->file_num)
20619 	push_dw_line_info_entry (table, LI_set_file, file_num);
20620       if (discriminator != table->discrim_num)
20621 	push_dw_line_info_entry (table, LI_set_discriminator, discriminator);
20622       if (is_stmt != table->is_stmt)
20623 	push_dw_line_info_entry (table, LI_negate_stmt, 0);
20624       push_dw_line_info_entry (table, LI_set_line, line);
20625     }
20626 
20627   table->file_num = file_num;
20628   table->line_num = line;
20629   table->discrim_num = discriminator;
20630   table->is_stmt = is_stmt;
20631   table->in_use = true;
20632 }
20633 
20634 /* Record the beginning of a new source file.  */
20635 
20636 static void
20637 dwarf2out_start_source_file (unsigned int lineno, const char *filename)
20638 {
20639   if (flag_eliminate_dwarf2_dups && ! use_debug_types)
20640     {
20641       /* Record the beginning of the file for break_out_includes.  */
20642       dw_die_ref bincl_die;
20643 
20644       bincl_die = new_die (DW_TAG_GNU_BINCL, comp_unit_die (), NULL);
20645       add_AT_string (bincl_die, DW_AT_name, remap_debug_filename (filename));
20646     }
20647 
20648   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
20649     {
20650       macinfo_entry e;
20651       e.code = DW_MACINFO_start_file;
20652       e.lineno = lineno;
20653       e.info = ggc_strdup (filename);
20654       VEC_safe_push (macinfo_entry, gc, macinfo_table, &e);
20655     }
20656 }
20657 
20658 /* Record the end of a source file.  */
20659 
20660 static void
20661 dwarf2out_end_source_file (unsigned int lineno ATTRIBUTE_UNUSED)
20662 {
20663   if (flag_eliminate_dwarf2_dups && ! use_debug_types)
20664     /* Record the end of the file for break_out_includes.  */
20665     new_die (DW_TAG_GNU_EINCL, comp_unit_die (), NULL);
20666 
20667   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
20668     {
20669       macinfo_entry e;
20670       e.code = DW_MACINFO_end_file;
20671       e.lineno = lineno;
20672       e.info = NULL;
20673       VEC_safe_push (macinfo_entry, gc, macinfo_table, &e);
20674     }
20675 }
20676 
20677 /* Called from debug_define in toplev.c.  The `buffer' parameter contains
20678    the tail part of the directive line, i.e. the part which is past the
20679    initial whitespace, #, whitespace, directive-name, whitespace part.  */
20680 
20681 static void
20682 dwarf2out_define (unsigned int lineno ATTRIBUTE_UNUSED,
20683 		  const char *buffer ATTRIBUTE_UNUSED)
20684 {
20685   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
20686     {
20687       macinfo_entry e;
20688       /* Insert a dummy first entry to be able to optimize the whole
20689 	 predefined macro block using DW_MACRO_GNU_transparent_include.  */
20690       if (VEC_empty (macinfo_entry, macinfo_table) && lineno <= 1)
20691 	{
20692 	  e.code = 0;
20693 	  e.lineno = 0;
20694 	  e.info = NULL;
20695 	  VEC_safe_push (macinfo_entry, gc, macinfo_table, &e);
20696 	}
20697       e.code = DW_MACINFO_define;
20698       e.lineno = lineno;
20699       e.info = ggc_strdup (buffer);
20700       VEC_safe_push (macinfo_entry, gc, macinfo_table, &e);
20701     }
20702 }
20703 
20704 /* Called from debug_undef in toplev.c.  The `buffer' parameter contains
20705    the tail part of the directive line, i.e. the part which is past the
20706    initial whitespace, #, whitespace, directive-name, whitespace part.  */
20707 
20708 static void
20709 dwarf2out_undef (unsigned int lineno ATTRIBUTE_UNUSED,
20710 		 const char *buffer ATTRIBUTE_UNUSED)
20711 {
20712   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
20713     {
20714       macinfo_entry e;
20715       /* Insert a dummy first entry to be able to optimize the whole
20716 	 predefined macro block using DW_MACRO_GNU_transparent_include.  */
20717       if (VEC_empty (macinfo_entry, macinfo_table) && lineno <= 1)
20718 	{
20719 	  e.code = 0;
20720 	  e.lineno = 0;
20721 	  e.info = NULL;
20722 	  VEC_safe_push (macinfo_entry, gc, macinfo_table, &e);
20723 	}
20724       e.code = DW_MACINFO_undef;
20725       e.lineno = lineno;
20726       e.info = ggc_strdup (buffer);
20727       VEC_safe_push (macinfo_entry, gc, macinfo_table, &e);
20728     }
20729 }
20730 
20731 /* Routines to manipulate hash table of CUs.  */
20732 
20733 static hashval_t
20734 htab_macinfo_hash (const void *of)
20735 {
20736   const macinfo_entry *const entry =
20737     (const macinfo_entry *) of;
20738 
20739   return htab_hash_string (entry->info);
20740 }
20741 
20742 static int
20743 htab_macinfo_eq (const void *of1, const void *of2)
20744 {
20745   const macinfo_entry *const entry1 = (const macinfo_entry *) of1;
20746   const macinfo_entry *const entry2 = (const macinfo_entry *) of2;
20747 
20748   return !strcmp (entry1->info, entry2->info);
20749 }
20750 
20751 /* Output a single .debug_macinfo entry.  */
20752 
20753 static void
20754 output_macinfo_op (macinfo_entry *ref)
20755 {
20756   int file_num;
20757   size_t len;
20758   struct indirect_string_node *node;
20759   char label[MAX_ARTIFICIAL_LABEL_BYTES];
20760   struct dwarf_file_data *fd;
20761 
20762   switch (ref->code)
20763     {
20764     case DW_MACINFO_start_file:
20765       fd = lookup_filename (ref->info);
20766       file_num = maybe_emit_file (fd);
20767       dw2_asm_output_data (1, DW_MACINFO_start_file, "Start new file");
20768       dw2_asm_output_data_uleb128 (ref->lineno,
20769 				   "Included from line number %lu",
20770 				   (unsigned long) ref->lineno);
20771       dw2_asm_output_data_uleb128 (file_num, "file %s", ref->info);
20772       break;
20773     case DW_MACINFO_end_file:
20774       dw2_asm_output_data (1, DW_MACINFO_end_file, "End file");
20775       break;
20776     case DW_MACINFO_define:
20777     case DW_MACINFO_undef:
20778       len = strlen (ref->info) + 1;
20779       if (!dwarf_strict
20780 	  && len > DWARF_OFFSET_SIZE
20781 	  && !DWARF2_INDIRECT_STRING_SUPPORT_MISSING_ON_TARGET
20782 	  && (debug_str_section->common.flags & SECTION_MERGE) != 0)
20783 	{
20784 	  ref->code = ref->code == DW_MACINFO_define
20785 		      ? DW_MACRO_GNU_define_indirect
20786 		      : DW_MACRO_GNU_undef_indirect;
20787 	  output_macinfo_op (ref);
20788 	  return;
20789 	}
20790       dw2_asm_output_data (1, ref->code,
20791 			   ref->code == DW_MACINFO_define
20792 			   ? "Define macro" : "Undefine macro");
20793       dw2_asm_output_data_uleb128 (ref->lineno, "At line number %lu",
20794 				   (unsigned long) ref->lineno);
20795       dw2_asm_output_nstring (ref->info, -1, "The macro");
20796       break;
20797     case DW_MACRO_GNU_define_indirect:
20798     case DW_MACRO_GNU_undef_indirect:
20799       node = find_AT_string (ref->info);
20800       if (node->form != DW_FORM_strp)
20801 	{
20802 	  char label[32];
20803 	  ASM_GENERATE_INTERNAL_LABEL (label, "LASF", dw2_string_counter);
20804 	  ++dw2_string_counter;
20805 	  node->label = xstrdup (label);
20806 	  node->form = DW_FORM_strp;
20807 	}
20808       dw2_asm_output_data (1, ref->code,
20809 			   ref->code == DW_MACRO_GNU_define_indirect
20810 			   ? "Define macro indirect"
20811 			   : "Undefine macro indirect");
20812       dw2_asm_output_data_uleb128 (ref->lineno, "At line number %lu",
20813 				   (unsigned long) ref->lineno);
20814       dw2_asm_output_offset (DWARF_OFFSET_SIZE, node->label,
20815 			     debug_str_section, "The macro: \"%s\"",
20816 			     ref->info);
20817       break;
20818     case DW_MACRO_GNU_transparent_include:
20819       dw2_asm_output_data (1, ref->code, "Transparent include");
20820       ASM_GENERATE_INTERNAL_LABEL (label,
20821 				   DEBUG_MACRO_SECTION_LABEL, ref->lineno);
20822       dw2_asm_output_offset (DWARF_OFFSET_SIZE, label, NULL, NULL);
20823       break;
20824     default:
20825       fprintf (asm_out_file, "%s unrecognized macinfo code %lu\n",
20826 	       ASM_COMMENT_START, (unsigned long) ref->code);
20827       break;
20828     }
20829 }
20830 
20831 /* Attempt to make a sequence of define/undef macinfo ops shareable with
20832    other compilation unit .debug_macinfo sections.  IDX is the first
20833    index of a define/undef, return the number of ops that should be
20834    emitted in a comdat .debug_macinfo section and emit
20835    a DW_MACRO_GNU_transparent_include entry referencing it.
20836    If the define/undef entry should be emitted normally, return 0.  */
20837 
20838 static unsigned
20839 optimize_macinfo_range (unsigned int idx, VEC (macinfo_entry, gc) *files,
20840 			htab_t *macinfo_htab)
20841 {
20842   macinfo_entry *first, *second, *cur, *inc;
20843   char linebuf[sizeof (HOST_WIDE_INT) * 3 + 1];
20844   unsigned char checksum[16];
20845   struct md5_ctx ctx;
20846   char *grp_name, *tail;
20847   const char *base;
20848   unsigned int i, count, encoded_filename_len, linebuf_len;
20849   void **slot;
20850 
20851   first = VEC_index (macinfo_entry, macinfo_table, idx);
20852   second = VEC_index (macinfo_entry, macinfo_table, idx + 1);
20853 
20854   /* Optimize only if there are at least two consecutive define/undef ops,
20855      and either all of them are before first DW_MACINFO_start_file
20856      with lineno {0,1} (i.e. predefined macro block), or all of them are
20857      in some included header file.  */
20858   if (second->code != DW_MACINFO_define && second->code != DW_MACINFO_undef)
20859     return 0;
20860   if (VEC_empty (macinfo_entry, files))
20861     {
20862       if (first->lineno > 1 || second->lineno > 1)
20863 	return 0;
20864     }
20865   else if (first->lineno == 0)
20866     return 0;
20867 
20868   /* Find the last define/undef entry that can be grouped together
20869      with first and at the same time compute md5 checksum of their
20870      codes, linenumbers and strings.  */
20871   md5_init_ctx (&ctx);
20872   for (i = idx; VEC_iterate (macinfo_entry, macinfo_table, i, cur); i++)
20873     if (cur->code != DW_MACINFO_define && cur->code != DW_MACINFO_undef)
20874       break;
20875     else if (VEC_empty (macinfo_entry, files) && cur->lineno > 1)
20876       break;
20877     else
20878       {
20879 	unsigned char code = cur->code;
20880 	md5_process_bytes (&code, 1, &ctx);
20881 	checksum_uleb128 (cur->lineno, &ctx);
20882 	md5_process_bytes (cur->info, strlen (cur->info) + 1, &ctx);
20883       }
20884   md5_finish_ctx (&ctx, checksum);
20885   count = i - idx;
20886 
20887   /* From the containing include filename (if any) pick up just
20888      usable characters from its basename.  */
20889   if (VEC_empty (macinfo_entry, files))
20890     base = "";
20891   else
20892     base = lbasename (VEC_last (macinfo_entry, files)->info);
20893   for (encoded_filename_len = 0, i = 0; base[i]; i++)
20894     if (ISIDNUM (base[i]) || base[i] == '.')
20895       encoded_filename_len++;
20896   /* Count . at the end.  */
20897   if (encoded_filename_len)
20898     encoded_filename_len++;
20899 
20900   sprintf (linebuf, HOST_WIDE_INT_PRINT_UNSIGNED, first->lineno);
20901   linebuf_len = strlen (linebuf);
20902 
20903   /* The group name format is: wmN.[<encoded filename>.]<lineno>.<md5sum>  */
20904   grp_name = XALLOCAVEC (char, 4 + encoded_filename_len + linebuf_len + 1
20905 			 + 16 * 2 + 1);
20906   memcpy (grp_name, DWARF_OFFSET_SIZE == 4 ? "wm4." : "wm8.", 4);
20907   tail = grp_name + 4;
20908   if (encoded_filename_len)
20909     {
20910       for (i = 0; base[i]; i++)
20911 	if (ISIDNUM (base[i]) || base[i] == '.')
20912 	  *tail++ = base[i];
20913       *tail++ = '.';
20914     }
20915   memcpy (tail, linebuf, linebuf_len);
20916   tail += linebuf_len;
20917   *tail++ = '.';
20918   for (i = 0; i < 16; i++)
20919     sprintf (tail + i * 2, "%02x", checksum[i] & 0xff);
20920 
20921   /* Construct a macinfo_entry for DW_MACRO_GNU_transparent_include
20922      in the empty vector entry before the first define/undef.  */
20923   inc = VEC_index (macinfo_entry, macinfo_table, idx - 1);
20924   inc->code = DW_MACRO_GNU_transparent_include;
20925   inc->lineno = 0;
20926   inc->info = ggc_strdup (grp_name);
20927   if (*macinfo_htab == NULL)
20928     *macinfo_htab = htab_create (10, htab_macinfo_hash, htab_macinfo_eq, NULL);
20929   /* Avoid emitting duplicates.  */
20930   slot = htab_find_slot (*macinfo_htab, inc, INSERT);
20931   if (*slot != NULL)
20932     {
20933       inc->code = 0;
20934       inc->info = NULL;
20935       /* If such an entry has been used before, just emit
20936 	 a DW_MACRO_GNU_transparent_include op.  */
20937       inc = (macinfo_entry *) *slot;
20938       output_macinfo_op (inc);
20939       /* And clear all macinfo_entry in the range to avoid emitting them
20940 	 in the second pass.  */
20941       for (i = idx;
20942 	   VEC_iterate (macinfo_entry, macinfo_table, i, cur)
20943 	   && i < idx + count;
20944 	   i++)
20945 	{
20946 	  cur->code = 0;
20947 	  cur->info = NULL;
20948 	}
20949     }
20950   else
20951     {
20952       *slot = inc;
20953       inc->lineno = htab_elements (*macinfo_htab);
20954       output_macinfo_op (inc);
20955     }
20956   return count;
20957 }
20958 
20959 /* Output macinfo section(s).  */
20960 
20961 static void
20962 output_macinfo (void)
20963 {
20964   unsigned i;
20965   unsigned long length = VEC_length (macinfo_entry, macinfo_table);
20966   macinfo_entry *ref;
20967   VEC (macinfo_entry, gc) *files = NULL;
20968   htab_t macinfo_htab = NULL;
20969 
20970   if (! length)
20971     return;
20972 
20973   /* output_macinfo* uses these interchangeably.  */
20974   gcc_assert ((int) DW_MACINFO_define == (int) DW_MACRO_GNU_define
20975 	      && (int) DW_MACINFO_undef == (int) DW_MACRO_GNU_undef
20976 	      && (int) DW_MACINFO_start_file == (int) DW_MACRO_GNU_start_file
20977 	      && (int) DW_MACINFO_end_file == (int) DW_MACRO_GNU_end_file);
20978 
20979   /* For .debug_macro emit the section header.  */
20980   if (!dwarf_strict)
20981     {
20982       dw2_asm_output_data (2, 4, "DWARF macro version number");
20983       if (DWARF_OFFSET_SIZE == 8)
20984 	dw2_asm_output_data (1, 3, "Flags: 64-bit, lineptr present");
20985       else
20986 	dw2_asm_output_data (1, 2, "Flags: 32-bit, lineptr present");
20987       dw2_asm_output_offset (DWARF_OFFSET_SIZE, debug_line_section_label,
20988 			     debug_line_section, NULL);
20989     }
20990 
20991   /* In the first loop, it emits the primary .debug_macinfo section
20992      and after each emitted op the macinfo_entry is cleared.
20993      If a longer range of define/undef ops can be optimized using
20994      DW_MACRO_GNU_transparent_include, the
20995      DW_MACRO_GNU_transparent_include op is emitted and kept in
20996      the vector before the first define/undef in the range and the
20997      whole range of define/undef ops is not emitted and kept.  */
20998   for (i = 0; VEC_iterate (macinfo_entry, macinfo_table, i, ref); i++)
20999     {
21000       switch (ref->code)
21001 	{
21002 	case DW_MACINFO_start_file:
21003 	  VEC_safe_push (macinfo_entry, gc, files, ref);
21004 	  break;
21005 	case DW_MACINFO_end_file:
21006 	  if (!VEC_empty (macinfo_entry, files))
21007 	    VEC_pop (macinfo_entry, files);
21008 	  break;
21009 	case DW_MACINFO_define:
21010 	case DW_MACINFO_undef:
21011 	  if (!dwarf_strict
21012 	      && HAVE_COMDAT_GROUP
21013 	      && VEC_length (macinfo_entry, files) != 1
21014 	      && i > 0
21015 	      && i + 1 < length
21016 	      && VEC_index (macinfo_entry, macinfo_table, i - 1)->code == 0)
21017 	    {
21018 	      unsigned count = optimize_macinfo_range (i, files, &macinfo_htab);
21019 	      if (count)
21020 		{
21021 		  i += count - 1;
21022 		  continue;
21023 		}
21024 	    }
21025 	  break;
21026 	case 0:
21027 	  /* A dummy entry may be inserted at the beginning to be able
21028 	     to optimize the whole block of predefined macros.  */
21029 	  if (i == 0)
21030 	    continue;
21031 	default:
21032 	  break;
21033 	}
21034       output_macinfo_op (ref);
21035       ref->info = NULL;
21036       ref->code = 0;
21037     }
21038 
21039   if (macinfo_htab == NULL)
21040     return;
21041 
21042   htab_delete (macinfo_htab);
21043 
21044   /* If any DW_MACRO_GNU_transparent_include were used, on those
21045      DW_MACRO_GNU_transparent_include entries terminate the
21046      current chain and switch to a new comdat .debug_macinfo
21047      section and emit the define/undef entries within it.  */
21048   for (i = 0; VEC_iterate (macinfo_entry, macinfo_table, i, ref); i++)
21049     switch (ref->code)
21050       {
21051       case 0:
21052 	continue;
21053       case DW_MACRO_GNU_transparent_include:
21054 	{
21055 	  char label[MAX_ARTIFICIAL_LABEL_BYTES];
21056 	  tree comdat_key = get_identifier (ref->info);
21057 	  /* Terminate the previous .debug_macinfo section.  */
21058 	  dw2_asm_output_data (1, 0, "End compilation unit");
21059 	  targetm.asm_out.named_section (DEBUG_MACRO_SECTION,
21060 					 SECTION_DEBUG
21061 					 | SECTION_LINKONCE,
21062 					 comdat_key);
21063 	  ASM_GENERATE_INTERNAL_LABEL (label,
21064 				       DEBUG_MACRO_SECTION_LABEL,
21065 				       ref->lineno);
21066 	  ASM_OUTPUT_LABEL (asm_out_file, label);
21067 	  ref->code = 0;
21068 	  ref->info = NULL;
21069 	  dw2_asm_output_data (2, 4, "DWARF macro version number");
21070 	  if (DWARF_OFFSET_SIZE == 8)
21071 	    dw2_asm_output_data (1, 1, "Flags: 64-bit");
21072 	  else
21073 	    dw2_asm_output_data (1, 0, "Flags: 32-bit");
21074 	}
21075 	break;
21076       case DW_MACINFO_define:
21077       case DW_MACINFO_undef:
21078 	output_macinfo_op (ref);
21079 	ref->code = 0;
21080 	ref->info = NULL;
21081 	break;
21082       default:
21083 	gcc_unreachable ();
21084       }
21085 }
21086 
21087 /* Set up for Dwarf output at the start of compilation.  */
21088 
21089 static void
21090 dwarf2out_init (const char *filename ATTRIBUTE_UNUSED)
21091 {
21092   /* Allocate the file_table.  */
21093   file_table = htab_create_ggc (50, file_table_hash,
21094 				file_table_eq, NULL);
21095 
21096   /* Allocate the decl_die_table.  */
21097   decl_die_table = htab_create_ggc (10, decl_die_table_hash,
21098 				    decl_die_table_eq, NULL);
21099 
21100   /* Allocate the decl_loc_table.  */
21101   decl_loc_table = htab_create_ggc (10, decl_loc_table_hash,
21102 				    decl_loc_table_eq, NULL);
21103 
21104   /* Allocate the cached_dw_loc_list_table.  */
21105   cached_dw_loc_list_table
21106     = htab_create_ggc (10, cached_dw_loc_list_table_hash,
21107 		       cached_dw_loc_list_table_eq, NULL);
21108 
21109   /* Allocate the initial hunk of the decl_scope_table.  */
21110   decl_scope_table = VEC_alloc (tree, gc, 256);
21111 
21112   /* Allocate the initial hunk of the abbrev_die_table.  */
21113   abbrev_die_table = ggc_alloc_cleared_vec_dw_die_ref
21114     (ABBREV_DIE_TABLE_INCREMENT);
21115   abbrev_die_table_allocated = ABBREV_DIE_TABLE_INCREMENT;
21116   /* Zero-th entry is allocated, but unused.  */
21117   abbrev_die_table_in_use = 1;
21118 
21119   /* Allocate the pubtypes and pubnames vectors.  */
21120   pubname_table = VEC_alloc (pubname_entry, gc, 32);
21121   pubtype_table = VEC_alloc (pubname_entry, gc, 32);
21122 
21123   incomplete_types = VEC_alloc (tree, gc, 64);
21124 
21125   used_rtx_array = VEC_alloc (rtx, gc, 32);
21126 
21127   debug_info_section = get_section (DEBUG_INFO_SECTION,
21128 				    SECTION_DEBUG, NULL);
21129   debug_abbrev_section = get_section (DEBUG_ABBREV_SECTION,
21130 				      SECTION_DEBUG, NULL);
21131   debug_aranges_section = get_section (DEBUG_ARANGES_SECTION,
21132 				       SECTION_DEBUG, NULL);
21133   debug_macinfo_section = get_section (dwarf_strict
21134 				       ? DEBUG_MACINFO_SECTION
21135 				       : DEBUG_MACRO_SECTION,
21136 				       SECTION_DEBUG, NULL);
21137   debug_line_section = get_section (DEBUG_LINE_SECTION,
21138 				    SECTION_DEBUG, NULL);
21139   debug_loc_section = get_section (DEBUG_LOC_SECTION,
21140 				   SECTION_DEBUG, NULL);
21141   debug_pubnames_section = get_section (DEBUG_PUBNAMES_SECTION,
21142 					SECTION_DEBUG, NULL);
21143   debug_pubtypes_section = get_section (DEBUG_PUBTYPES_SECTION,
21144 					SECTION_DEBUG, NULL);
21145   debug_str_section = get_section (DEBUG_STR_SECTION,
21146 				   DEBUG_STR_SECTION_FLAGS, NULL);
21147   debug_ranges_section = get_section (DEBUG_RANGES_SECTION,
21148 				      SECTION_DEBUG, NULL);
21149   debug_frame_section = get_section (DEBUG_FRAME_SECTION,
21150 				     SECTION_DEBUG, NULL);
21151 
21152   ASM_GENERATE_INTERNAL_LABEL (text_end_label, TEXT_END_LABEL, 0);
21153   ASM_GENERATE_INTERNAL_LABEL (abbrev_section_label,
21154 			       DEBUG_ABBREV_SECTION_LABEL, 0);
21155   ASM_GENERATE_INTERNAL_LABEL (text_section_label, TEXT_SECTION_LABEL, 0);
21156   ASM_GENERATE_INTERNAL_LABEL (cold_text_section_label,
21157 			       COLD_TEXT_SECTION_LABEL, 0);
21158   ASM_GENERATE_INTERNAL_LABEL (cold_end_label, COLD_END_LABEL, 0);
21159 
21160   ASM_GENERATE_INTERNAL_LABEL (debug_info_section_label,
21161 			       DEBUG_INFO_SECTION_LABEL, 0);
21162   ASM_GENERATE_INTERNAL_LABEL (debug_line_section_label,
21163 			       DEBUG_LINE_SECTION_LABEL, 0);
21164   ASM_GENERATE_INTERNAL_LABEL (ranges_section_label,
21165 			       DEBUG_RANGES_SECTION_LABEL, 0);
21166   ASM_GENERATE_INTERNAL_LABEL (macinfo_section_label,
21167 			       dwarf_strict
21168 			       ? DEBUG_MACINFO_SECTION_LABEL
21169 			       : DEBUG_MACRO_SECTION_LABEL, 0);
21170 
21171   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
21172     macinfo_table = VEC_alloc (macinfo_entry, gc, 64);
21173 
21174   switch_to_section (text_section);
21175   ASM_OUTPUT_LABEL (asm_out_file, text_section_label);
21176 
21177   /* Make sure the line number table for .text always exists.  */
21178   text_section_line_info = new_line_info_table ();
21179   text_section_line_info->end_label = text_end_label;
21180 }
21181 
21182 /* Called before cgraph_optimize starts outputtting functions, variables
21183    and toplevel asms into assembly.  */
21184 
21185 static void
21186 dwarf2out_assembly_start (void)
21187 {
21188   if (HAVE_GAS_CFI_SECTIONS_DIRECTIVE
21189       && dwarf2out_do_cfi_asm ()
21190       && (!(flag_unwind_tables || flag_exceptions)
21191 	  || targetm_common.except_unwind_info (&global_options) != UI_DWARF2))
21192     fprintf (asm_out_file, "\t.cfi_sections\t.debug_frame\n");
21193 }
21194 
21195 /* A helper function for dwarf2out_finish called through
21196    htab_traverse.  Emit one queued .debug_str string.  */
21197 
21198 static int
21199 output_indirect_string (void **h, void *v ATTRIBUTE_UNUSED)
21200 {
21201   struct indirect_string_node *node = (struct indirect_string_node *) *h;
21202 
21203   if (node->form == DW_FORM_strp)
21204     {
21205       switch_to_section (debug_str_section);
21206       ASM_OUTPUT_LABEL (asm_out_file, node->label);
21207       assemble_string (node->str, strlen (node->str) + 1);
21208     }
21209 
21210   return 1;
21211 }
21212 
21213 #if ENABLE_ASSERT_CHECKING
21214 /* Verify that all marks are clear.  */
21215 
21216 static void
21217 verify_marks_clear (dw_die_ref die)
21218 {
21219   dw_die_ref c;
21220 
21221   gcc_assert (! die->die_mark);
21222   FOR_EACH_CHILD (die, c, verify_marks_clear (c));
21223 }
21224 #endif /* ENABLE_ASSERT_CHECKING */
21225 
21226 /* Clear the marks for a die and its children.
21227    Be cool if the mark isn't set.  */
21228 
21229 static void
21230 prune_unmark_dies (dw_die_ref die)
21231 {
21232   dw_die_ref c;
21233 
21234   if (die->die_mark)
21235     die->die_mark = 0;
21236   FOR_EACH_CHILD (die, c, prune_unmark_dies (c));
21237 }
21238 
21239 /* Given DIE that we're marking as used, find any other dies
21240    it references as attributes and mark them as used.  */
21241 
21242 static void
21243 prune_unused_types_walk_attribs (dw_die_ref die)
21244 {
21245   dw_attr_ref a;
21246   unsigned ix;
21247 
21248   FOR_EACH_VEC_ELT (dw_attr_node, die->die_attr, ix, a)
21249     {
21250       if (a->dw_attr_val.val_class == dw_val_class_die_ref)
21251 	{
21252 	  /* A reference to another DIE.
21253 	     Make sure that it will get emitted.
21254 	     If it was broken out into a comdat group, don't follow it.  */
21255           if (! use_debug_types
21256               || a->dw_attr == DW_AT_specification
21257               || a->dw_attr_val.v.val_die_ref.die->die_id.die_type_node == NULL)
21258 	    prune_unused_types_mark (a->dw_attr_val.v.val_die_ref.die, 1);
21259 	}
21260       /* Set the string's refcount to 0 so that prune_unused_types_mark
21261 	 accounts properly for it.  */
21262       if (AT_class (a) == dw_val_class_str)
21263 	a->dw_attr_val.v.val_str->refcount = 0;
21264     }
21265 }
21266 
21267 /* Mark the generic parameters and arguments children DIEs of DIE.  */
21268 
21269 static void
21270 prune_unused_types_mark_generic_parms_dies (dw_die_ref die)
21271 {
21272   dw_die_ref c;
21273 
21274   if (die == NULL || die->die_child == NULL)
21275     return;
21276   c = die->die_child;
21277   do
21278     {
21279       switch (c->die_tag)
21280 	{
21281 	case DW_TAG_template_type_param:
21282 	case DW_TAG_template_value_param:
21283 	case DW_TAG_GNU_template_template_param:
21284 	case DW_TAG_GNU_template_parameter_pack:
21285 	  prune_unused_types_mark (c, 1);
21286 	  break;
21287 	default:
21288 	  break;
21289 	}
21290       c = c->die_sib;
21291     } while (c && c != die->die_child);
21292 }
21293 
21294 /* Mark DIE as being used.  If DOKIDS is true, then walk down
21295    to DIE's children.  */
21296 
21297 static void
21298 prune_unused_types_mark (dw_die_ref die, int dokids)
21299 {
21300   dw_die_ref c;
21301 
21302   if (die->die_mark == 0)
21303     {
21304       /* We haven't done this node yet.  Mark it as used.  */
21305       die->die_mark = 1;
21306       /* If this is the DIE of a generic type instantiation,
21307 	 mark the children DIEs that describe its generic parms and
21308 	 args.  */
21309       prune_unused_types_mark_generic_parms_dies (die);
21310 
21311       /* We also have to mark its parents as used.
21312 	 (But we don't want to mark our parents' kids due to this.)  */
21313       if (die->die_parent)
21314 	prune_unused_types_mark (die->die_parent, 0);
21315 
21316       /* Mark any referenced nodes.  */
21317       prune_unused_types_walk_attribs (die);
21318 
21319       /* If this node is a specification,
21320 	 also mark the definition, if it exists.  */
21321       if (get_AT_flag (die, DW_AT_declaration) && die->die_definition)
21322 	prune_unused_types_mark (die->die_definition, 1);
21323     }
21324 
21325   if (dokids && die->die_mark != 2)
21326     {
21327       /* We need to walk the children, but haven't done so yet.
21328 	 Remember that we've walked the kids.  */
21329       die->die_mark = 2;
21330 
21331       /* If this is an array type, we need to make sure our
21332 	 kids get marked, even if they're types.  If we're
21333 	 breaking out types into comdat sections, do this
21334 	 for all type definitions.  */
21335       if (die->die_tag == DW_TAG_array_type
21336           || (use_debug_types
21337               && is_type_die (die) && ! is_declaration_die (die)))
21338 	FOR_EACH_CHILD (die, c, prune_unused_types_mark (c, 1));
21339       else
21340 	FOR_EACH_CHILD (die, c, prune_unused_types_walk (c));
21341     }
21342 }
21343 
21344 /* For local classes, look if any static member functions were emitted
21345    and if so, mark them.  */
21346 
21347 static void
21348 prune_unused_types_walk_local_classes (dw_die_ref die)
21349 {
21350   dw_die_ref c;
21351 
21352   if (die->die_mark == 2)
21353     return;
21354 
21355   switch (die->die_tag)
21356     {
21357     case DW_TAG_structure_type:
21358     case DW_TAG_union_type:
21359     case DW_TAG_class_type:
21360       break;
21361 
21362     case DW_TAG_subprogram:
21363       if (!get_AT_flag (die, DW_AT_declaration)
21364 	  || die->die_definition != NULL)
21365 	prune_unused_types_mark (die, 1);
21366       return;
21367 
21368     default:
21369       return;
21370     }
21371 
21372   /* Mark children.  */
21373   FOR_EACH_CHILD (die, c, prune_unused_types_walk_local_classes (c));
21374 }
21375 
21376 /* Walk the tree DIE and mark types that we actually use.  */
21377 
21378 static void
21379 prune_unused_types_walk (dw_die_ref die)
21380 {
21381   dw_die_ref c;
21382 
21383   /* Don't do anything if this node is already marked and
21384      children have been marked as well.  */
21385   if (die->die_mark == 2)
21386     return;
21387 
21388   switch (die->die_tag)
21389     {
21390     case DW_TAG_structure_type:
21391     case DW_TAG_union_type:
21392     case DW_TAG_class_type:
21393       if (die->die_perennial_p)
21394 	break;
21395 
21396       for (c = die->die_parent; c; c = c->die_parent)
21397 	if (c->die_tag == DW_TAG_subprogram)
21398 	  break;
21399 
21400       /* Finding used static member functions inside of classes
21401 	 is needed just for local classes, because for other classes
21402 	 static member function DIEs with DW_AT_specification
21403 	 are emitted outside of the DW_TAG_*_type.  If we ever change
21404 	 it, we'd need to call this even for non-local classes.  */
21405       if (c)
21406 	prune_unused_types_walk_local_classes (die);
21407 
21408       /* It's a type node --- don't mark it.  */
21409       return;
21410 
21411     case DW_TAG_const_type:
21412     case DW_TAG_packed_type:
21413     case DW_TAG_pointer_type:
21414     case DW_TAG_reference_type:
21415     case DW_TAG_rvalue_reference_type:
21416     case DW_TAG_volatile_type:
21417     case DW_TAG_typedef:
21418     case DW_TAG_array_type:
21419     case DW_TAG_interface_type:
21420     case DW_TAG_friend:
21421     case DW_TAG_variant_part:
21422     case DW_TAG_enumeration_type:
21423     case DW_TAG_subroutine_type:
21424     case DW_TAG_string_type:
21425     case DW_TAG_set_type:
21426     case DW_TAG_subrange_type:
21427     case DW_TAG_ptr_to_member_type:
21428     case DW_TAG_file_type:
21429       if (die->die_perennial_p)
21430 	break;
21431 
21432       /* It's a type node --- don't mark it.  */
21433       return;
21434 
21435     default:
21436       /* Mark everything else.  */
21437       break;
21438   }
21439 
21440   if (die->die_mark == 0)
21441     {
21442       die->die_mark = 1;
21443 
21444       /* Now, mark any dies referenced from here.  */
21445       prune_unused_types_walk_attribs (die);
21446     }
21447 
21448   die->die_mark = 2;
21449 
21450   /* Mark children.  */
21451   FOR_EACH_CHILD (die, c, prune_unused_types_walk (c));
21452 }
21453 
21454 /* Increment the string counts on strings referred to from DIE's
21455    attributes.  */
21456 
21457 static void
21458 prune_unused_types_update_strings (dw_die_ref die)
21459 {
21460   dw_attr_ref a;
21461   unsigned ix;
21462 
21463   FOR_EACH_VEC_ELT (dw_attr_node, die->die_attr, ix, a)
21464     if (AT_class (a) == dw_val_class_str)
21465       {
21466 	struct indirect_string_node *s = a->dw_attr_val.v.val_str;
21467 	s->refcount++;
21468 	/* Avoid unnecessarily putting strings that are used less than
21469 	   twice in the hash table.  */
21470 	if (s->refcount
21471 	    == ((DEBUG_STR_SECTION_FLAGS & SECTION_MERGE) ? 1 : 2))
21472 	  {
21473 	    void ** slot;
21474 	    slot = htab_find_slot_with_hash (debug_str_hash, s->str,
21475 					     htab_hash_string (s->str),
21476 					     INSERT);
21477 	    gcc_assert (*slot == NULL);
21478 	    *slot = s;
21479 	  }
21480       }
21481 }
21482 
21483 /* Remove from the tree DIE any dies that aren't marked.  */
21484 
21485 static void
21486 prune_unused_types_prune (dw_die_ref die)
21487 {
21488   dw_die_ref c;
21489 
21490   gcc_assert (die->die_mark);
21491   prune_unused_types_update_strings (die);
21492 
21493   if (! die->die_child)
21494     return;
21495 
21496   c = die->die_child;
21497   do {
21498     dw_die_ref prev = c;
21499     for (c = c->die_sib; ! c->die_mark; c = c->die_sib)
21500       if (c == die->die_child)
21501 	{
21502 	  /* No marked children between 'prev' and the end of the list.  */
21503 	  if (prev == c)
21504 	    /* No marked children at all.  */
21505 	    die->die_child = NULL;
21506 	  else
21507 	    {
21508 	      prev->die_sib = c->die_sib;
21509 	      die->die_child = prev;
21510 	    }
21511 	  return;
21512 	}
21513 
21514     if (c != prev->die_sib)
21515       prev->die_sib = c;
21516     prune_unused_types_prune (c);
21517   } while (c != die->die_child);
21518 }
21519 
21520 /* Remove dies representing declarations that we never use.  */
21521 
21522 static void
21523 prune_unused_types (void)
21524 {
21525   unsigned int i;
21526   limbo_die_node *node;
21527   comdat_type_node *ctnode;
21528   pubname_ref pub;
21529   dw_die_ref base_type;
21530 
21531 #if ENABLE_ASSERT_CHECKING
21532   /* All the marks should already be clear.  */
21533   verify_marks_clear (comp_unit_die ());
21534   for (node = limbo_die_list; node; node = node->next)
21535     verify_marks_clear (node->die);
21536   for (ctnode = comdat_type_list; ctnode; ctnode = ctnode->next)
21537     verify_marks_clear (ctnode->root_die);
21538 #endif /* ENABLE_ASSERT_CHECKING */
21539 
21540   /* Mark types that are used in global variables.  */
21541   premark_types_used_by_global_vars ();
21542 
21543   /* Set the mark on nodes that are actually used.  */
21544   prune_unused_types_walk (comp_unit_die ());
21545   for (node = limbo_die_list; node; node = node->next)
21546     prune_unused_types_walk (node->die);
21547   for (ctnode = comdat_type_list; ctnode; ctnode = ctnode->next)
21548     {
21549       prune_unused_types_walk (ctnode->root_die);
21550       prune_unused_types_mark (ctnode->type_die, 1);
21551     }
21552 
21553   /* Also set the mark on nodes referenced from the
21554      pubname_table.  */
21555   FOR_EACH_VEC_ELT (pubname_entry, pubname_table, i, pub)
21556     prune_unused_types_mark (pub->die, 1);
21557   for (i = 0; VEC_iterate (dw_die_ref, base_types, i, base_type); i++)
21558     prune_unused_types_mark (base_type, 1);
21559 
21560   if (debug_str_hash)
21561     htab_empty (debug_str_hash);
21562   prune_unused_types_prune (comp_unit_die ());
21563   for (node = limbo_die_list; node; node = node->next)
21564     prune_unused_types_prune (node->die);
21565   for (ctnode = comdat_type_list; ctnode; ctnode = ctnode->next)
21566     prune_unused_types_prune (ctnode->root_die);
21567 
21568   /* Leave the marks clear.  */
21569   prune_unmark_dies (comp_unit_die ());
21570   for (node = limbo_die_list; node; node = node->next)
21571     prune_unmark_dies (node->die);
21572   for (ctnode = comdat_type_list; ctnode; ctnode = ctnode->next)
21573     prune_unmark_dies (ctnode->root_die);
21574 }
21575 
21576 /* Set the parameter to true if there are any relative pathnames in
21577    the file table.  */
21578 static int
21579 file_table_relative_p (void ** slot, void *param)
21580 {
21581   bool *p = (bool *) param;
21582   struct dwarf_file_data *d = (struct dwarf_file_data *) *slot;
21583   if (!IS_ABSOLUTE_PATH (d->filename))
21584     {
21585       *p = true;
21586       return 0;
21587     }
21588   return 1;
21589 }
21590 
21591 /* Routines to manipulate hash table of comdat type units.  */
21592 
21593 static hashval_t
21594 htab_ct_hash (const void *of)
21595 {
21596   hashval_t h;
21597   const comdat_type_node *const type_node = (const comdat_type_node *) of;
21598 
21599   memcpy (&h, type_node->signature, sizeof (h));
21600   return h;
21601 }
21602 
21603 static int
21604 htab_ct_eq (const void *of1, const void *of2)
21605 {
21606   const comdat_type_node *const type_node_1 = (const comdat_type_node *) of1;
21607   const comdat_type_node *const type_node_2 = (const comdat_type_node *) of2;
21608 
21609   return (! memcmp (type_node_1->signature, type_node_2->signature,
21610                     DWARF_TYPE_SIGNATURE_SIZE));
21611 }
21612 
21613 /* Move a DW_AT_{,MIPS_}linkage_name attribute just added to dw_die_ref
21614    to the location it would have been added, should we know its
21615    DECL_ASSEMBLER_NAME when we added other attributes.  This will
21616    probably improve compactness of debug info, removing equivalent
21617    abbrevs, and hide any differences caused by deferring the
21618    computation of the assembler name, triggered by e.g. PCH.  */
21619 
21620 static inline void
21621 move_linkage_attr (dw_die_ref die)
21622 {
21623   unsigned ix = VEC_length (dw_attr_node, die->die_attr);
21624   dw_attr_node linkage = *VEC_index (dw_attr_node, die->die_attr, ix - 1);
21625 
21626   gcc_assert (linkage.dw_attr == DW_AT_linkage_name
21627 	      || linkage.dw_attr == DW_AT_MIPS_linkage_name);
21628 
21629   while (--ix > 0)
21630     {
21631       dw_attr_node *prev = VEC_index (dw_attr_node, die->die_attr, ix - 1);
21632 
21633       if (prev->dw_attr == DW_AT_decl_line || prev->dw_attr == DW_AT_name)
21634 	break;
21635     }
21636 
21637   if (ix != VEC_length (dw_attr_node, die->die_attr) - 1)
21638     {
21639       VEC_pop (dw_attr_node, die->die_attr);
21640       VEC_quick_insert (dw_attr_node, die->die_attr, ix, &linkage);
21641     }
21642 }
21643 
21644 /* Helper function for resolve_addr, mark DW_TAG_base_type nodes
21645    referenced from typed stack ops and count how often they are used.  */
21646 
21647 static void
21648 mark_base_types (dw_loc_descr_ref loc)
21649 {
21650   dw_die_ref base_type = NULL;
21651 
21652   for (; loc; loc = loc->dw_loc_next)
21653     {
21654       switch (loc->dw_loc_opc)
21655 	{
21656 	case DW_OP_GNU_regval_type:
21657 	case DW_OP_GNU_deref_type:
21658 	  base_type = loc->dw_loc_oprnd2.v.val_die_ref.die;
21659 	  break;
21660 	case DW_OP_GNU_convert:
21661 	case DW_OP_GNU_reinterpret:
21662 	  if (loc->dw_loc_oprnd1.val_class == dw_val_class_unsigned_const)
21663 	    continue;
21664 	  /* FALLTHRU */
21665 	case DW_OP_GNU_const_type:
21666 	  base_type = loc->dw_loc_oprnd1.v.val_die_ref.die;
21667 	  break;
21668 	case DW_OP_GNU_entry_value:
21669 	  mark_base_types (loc->dw_loc_oprnd1.v.val_loc);
21670 	  continue;
21671 	default:
21672 	  continue;
21673 	}
21674       gcc_assert (base_type->die_parent == comp_unit_die ());
21675       if (base_type->die_mark)
21676 	base_type->die_mark++;
21677       else
21678 	{
21679 	  VEC_safe_push (dw_die_ref, heap, base_types, base_type);
21680 	  base_type->die_mark = 1;
21681 	}
21682     }
21683 }
21684 
21685 /* Comparison function for sorting marked base types.  */
21686 
21687 static int
21688 base_type_cmp (const void *x, const void *y)
21689 {
21690   dw_die_ref dx = *(const dw_die_ref *) x;
21691   dw_die_ref dy = *(const dw_die_ref *) y;
21692   unsigned int byte_size1, byte_size2;
21693   unsigned int encoding1, encoding2;
21694   if (dx->die_mark > dy->die_mark)
21695     return -1;
21696   if (dx->die_mark < dy->die_mark)
21697     return 1;
21698   byte_size1 = get_AT_unsigned (dx, DW_AT_byte_size);
21699   byte_size2 = get_AT_unsigned (dy, DW_AT_byte_size);
21700   if (byte_size1 < byte_size2)
21701     return 1;
21702   if (byte_size1 > byte_size2)
21703     return -1;
21704   encoding1 = get_AT_unsigned (dx, DW_AT_encoding);
21705   encoding2 = get_AT_unsigned (dy, DW_AT_encoding);
21706   if (encoding1 < encoding2)
21707     return 1;
21708   if (encoding1 > encoding2)
21709     return -1;
21710   return 0;
21711 }
21712 
21713 /* Move base types marked by mark_base_types as early as possible
21714    in the CU, sorted by decreasing usage count both to make the
21715    uleb128 references as small as possible and to make sure they
21716    will have die_offset already computed by calc_die_sizes when
21717    sizes of typed stack loc ops is computed.  */
21718 
21719 static void
21720 move_marked_base_types (void)
21721 {
21722   unsigned int i;
21723   dw_die_ref base_type, die, c;
21724 
21725   if (VEC_empty (dw_die_ref, base_types))
21726     return;
21727 
21728   /* Sort by decreasing usage count, they will be added again in that
21729      order later on.  */
21730   VEC_qsort (dw_die_ref, base_types, base_type_cmp);
21731   die = comp_unit_die ();
21732   c = die->die_child;
21733   do
21734     {
21735       dw_die_ref prev = c;
21736       c = c->die_sib;
21737       while (c->die_mark)
21738 	{
21739 	  remove_child_with_prev (c, prev);
21740 	  /* As base types got marked, there must be at least
21741 	     one node other than DW_TAG_base_type.  */
21742 	  gcc_assert (c != c->die_sib);
21743 	  c = c->die_sib;
21744 	}
21745     }
21746   while (c != die->die_child);
21747   gcc_assert (die->die_child);
21748   c = die->die_child;
21749   for (i = 0; VEC_iterate (dw_die_ref, base_types, i, base_type); i++)
21750     {
21751       base_type->die_mark = 0;
21752       base_type->die_sib = c->die_sib;
21753       c->die_sib = base_type;
21754       c = base_type;
21755     }
21756 }
21757 
21758 /* Helper function for resolve_addr, attempt to resolve
21759    one CONST_STRING, return non-zero if not successful.  Similarly verify that
21760    SYMBOL_REFs refer to variables emitted in the current CU.  */
21761 
21762 static int
21763 resolve_one_addr (rtx *addr, void *data ATTRIBUTE_UNUSED)
21764 {
21765   rtx rtl = *addr;
21766 
21767   if (GET_CODE (rtl) == CONST_STRING)
21768     {
21769       size_t len = strlen (XSTR (rtl, 0)) + 1;
21770       tree t = build_string (len, XSTR (rtl, 0));
21771       tree tlen = size_int (len - 1);
21772       TREE_TYPE (t)
21773 	= build_array_type (char_type_node, build_index_type (tlen));
21774       rtl = lookup_constant_def (t);
21775       if (!rtl || !MEM_P (rtl))
21776 	return 1;
21777       rtl = XEXP (rtl, 0);
21778       VEC_safe_push (rtx, gc, used_rtx_array, rtl);
21779       *addr = rtl;
21780       return 0;
21781     }
21782 
21783   if (GET_CODE (rtl) == SYMBOL_REF
21784       && SYMBOL_REF_DECL (rtl))
21785     {
21786       if (TREE_CONSTANT_POOL_ADDRESS_P (rtl))
21787 	{
21788 	  if (!TREE_ASM_WRITTEN (DECL_INITIAL (SYMBOL_REF_DECL (rtl))))
21789 	    return 1;
21790 	}
21791       else if (!TREE_ASM_WRITTEN (SYMBOL_REF_DECL (rtl)))
21792 	return 1;
21793     }
21794 
21795   if (GET_CODE (rtl) == CONST
21796       && for_each_rtx (&XEXP (rtl, 0), resolve_one_addr, NULL))
21797     return 1;
21798 
21799   return 0;
21800 }
21801 
21802 /* Helper function for resolve_addr, handle one location
21803    expression, return false if at least one CONST_STRING or SYMBOL_REF in
21804    the location list couldn't be resolved.  */
21805 
21806 static bool
21807 resolve_addr_in_expr (dw_loc_descr_ref loc)
21808 {
21809   dw_loc_descr_ref keep = NULL;
21810   for (; loc; loc = loc->dw_loc_next)
21811     switch (loc->dw_loc_opc)
21812       {
21813       case DW_OP_addr:
21814 	if (resolve_one_addr (&loc->dw_loc_oprnd1.v.val_addr, NULL))
21815 	  return false;
21816 	break;
21817       case DW_OP_const4u:
21818       case DW_OP_const8u:
21819 	if (loc->dtprel
21820 	    && resolve_one_addr (&loc->dw_loc_oprnd1.v.val_addr, NULL))
21821 	  return false;
21822 	break;
21823       case DW_OP_plus_uconst:
21824 	if (size_of_loc_descr (loc)
21825 	    > size_of_int_loc_descriptor (loc->dw_loc_oprnd1.v.val_unsigned)
21826 	      + 1
21827 	    && loc->dw_loc_oprnd1.v.val_unsigned > 0)
21828 	  {
21829 	    dw_loc_descr_ref repl
21830 	      = int_loc_descriptor (loc->dw_loc_oprnd1.v.val_unsigned);
21831 	    add_loc_descr (&repl, new_loc_descr (DW_OP_plus, 0, 0));
21832 	    add_loc_descr (&repl, loc->dw_loc_next);
21833 	    *loc = *repl;
21834 	  }
21835 	break;
21836       case DW_OP_implicit_value:
21837 	if (loc->dw_loc_oprnd2.val_class == dw_val_class_addr
21838 	    && resolve_one_addr (&loc->dw_loc_oprnd2.v.val_addr, NULL))
21839 	  return false;
21840 	break;
21841       case DW_OP_GNU_implicit_pointer:
21842       case DW_OP_GNU_parameter_ref:
21843 	if (loc->dw_loc_oprnd1.val_class == dw_val_class_decl_ref)
21844 	  {
21845 	    dw_die_ref ref
21846 	      = lookup_decl_die (loc->dw_loc_oprnd1.v.val_decl_ref);
21847 	    if (ref == NULL)
21848 	      return false;
21849 	    loc->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
21850 	    loc->dw_loc_oprnd1.v.val_die_ref.die = ref;
21851 	    loc->dw_loc_oprnd1.v.val_die_ref.external = 0;
21852 	  }
21853 	break;
21854       case DW_OP_GNU_const_type:
21855       case DW_OP_GNU_regval_type:
21856       case DW_OP_GNU_deref_type:
21857       case DW_OP_GNU_convert:
21858       case DW_OP_GNU_reinterpret:
21859 	while (loc->dw_loc_next
21860 	       && loc->dw_loc_next->dw_loc_opc == DW_OP_GNU_convert)
21861 	  {
21862 	    dw_die_ref base1, base2;
21863 	    unsigned enc1, enc2, size1, size2;
21864 	    if (loc->dw_loc_opc == DW_OP_GNU_regval_type
21865 		|| loc->dw_loc_opc == DW_OP_GNU_deref_type)
21866 	      base1 = loc->dw_loc_oprnd2.v.val_die_ref.die;
21867 	    else if (loc->dw_loc_oprnd1.val_class
21868 		     == dw_val_class_unsigned_const)
21869 	      break;
21870 	    else
21871 	      base1 = loc->dw_loc_oprnd1.v.val_die_ref.die;
21872 	    if (loc->dw_loc_next->dw_loc_oprnd1.val_class
21873 		== dw_val_class_unsigned_const)
21874 	      break;
21875 	    base2 = loc->dw_loc_next->dw_loc_oprnd1.v.val_die_ref.die;
21876 	    gcc_assert (base1->die_tag == DW_TAG_base_type
21877 			&& base2->die_tag == DW_TAG_base_type);
21878 	    enc1 = get_AT_unsigned (base1, DW_AT_encoding);
21879 	    enc2 = get_AT_unsigned (base2, DW_AT_encoding);
21880 	    size1 = get_AT_unsigned (base1, DW_AT_byte_size);
21881 	    size2 = get_AT_unsigned (base2, DW_AT_byte_size);
21882 	    if (size1 == size2
21883 		&& (((enc1 == DW_ATE_unsigned || enc1 == DW_ATE_signed)
21884 		     && (enc2 == DW_ATE_unsigned || enc2 == DW_ATE_signed)
21885 		     && loc != keep)
21886 		    || enc1 == enc2))
21887 	      {
21888 		/* Optimize away next DW_OP_GNU_convert after
21889 		   adjusting LOC's base type die reference.  */
21890 		if (loc->dw_loc_opc == DW_OP_GNU_regval_type
21891 		    || loc->dw_loc_opc == DW_OP_GNU_deref_type)
21892 		  loc->dw_loc_oprnd2.v.val_die_ref.die = base2;
21893 		else
21894 		  loc->dw_loc_oprnd1.v.val_die_ref.die = base2;
21895 		loc->dw_loc_next = loc->dw_loc_next->dw_loc_next;
21896 		continue;
21897 	      }
21898 	    /* Don't change integer DW_OP_GNU_convert after e.g. floating
21899 	       point typed stack entry.  */
21900 	    else if (enc1 != DW_ATE_unsigned && enc1 != DW_ATE_signed)
21901 	      keep = loc->dw_loc_next;
21902 	    break;
21903 	  }
21904 	break;
21905       default:
21906 	break;
21907       }
21908   return true;
21909 }
21910 
21911 /* Resolve DW_OP_addr and DW_AT_const_value CONST_STRING arguments to
21912    an address in .rodata section if the string literal is emitted there,
21913    or remove the containing location list or replace DW_AT_const_value
21914    with DW_AT_location and empty location expression, if it isn't found
21915    in .rodata.  Similarly for SYMBOL_REFs, keep only those that refer
21916    to something that has been emitted in the current CU.  */
21917 
21918 static void
21919 resolve_addr (dw_die_ref die)
21920 {
21921   dw_die_ref c;
21922   dw_attr_ref a;
21923   dw_loc_list_ref *curr, *start, loc;
21924   unsigned ix;
21925 
21926   FOR_EACH_VEC_ELT (dw_attr_node, die->die_attr, ix, a)
21927     switch (AT_class (a))
21928       {
21929       case dw_val_class_loc_list:
21930 	start = curr = AT_loc_list_ptr (a);
21931 	loc = *curr;
21932 	gcc_assert (loc);
21933 	/* The same list can be referenced more than once.  See if we have
21934 	   already recorded the result from a previous pass.  */
21935 	if (loc->replaced)
21936 	  *curr = loc->dw_loc_next;
21937 	else if (!loc->resolved_addr)
21938 	  {
21939 	    /* As things stand, we do not expect or allow one die to
21940 	       reference a suffix of another die's location list chain.
21941 	       References must be identical or completely separate.
21942 	       There is therefore no need to cache the result of this
21943 	       pass on any list other than the first; doing so
21944 	       would lead to unnecessary writes.  */
21945 	    while (*curr)
21946 	      {
21947 		gcc_assert (!(*curr)->replaced && !(*curr)->resolved_addr);
21948 		if (!resolve_addr_in_expr ((*curr)->expr))
21949 		  {
21950 		    dw_loc_list_ref next = (*curr)->dw_loc_next;
21951 		    if (next && (*curr)->ll_symbol)
21952 		      {
21953 			gcc_assert (!next->ll_symbol);
21954 			next->ll_symbol = (*curr)->ll_symbol;
21955 		      }
21956 		    *curr = next;
21957 		  }
21958 		else
21959 		  {
21960 		    mark_base_types ((*curr)->expr);
21961 		    curr = &(*curr)->dw_loc_next;
21962 		  }
21963 	      }
21964 	    if (loc == *start)
21965 	      loc->resolved_addr = 1;
21966 	    else
21967 	      {
21968 		loc->replaced = 1;
21969 		loc->dw_loc_next = *start;
21970 	      }
21971 	  }
21972 	if (!*start)
21973 	  {
21974 	    remove_AT (die, a->dw_attr);
21975 	    ix--;
21976 	  }
21977 	break;
21978       case dw_val_class_loc:
21979 	{
21980 	  dw_loc_descr_ref l = AT_loc (a);
21981 	  /* For -gdwarf-2 don't attempt to optimize
21982 	     DW_AT_data_member_location containing
21983 	     DW_OP_plus_uconst - older consumers might
21984 	     rely on it being that op instead of a more complex,
21985 	     but shorter, location description.  */
21986 	  if ((dwarf_version > 2
21987 	       || a->dw_attr != DW_AT_data_member_location
21988 	       || l == NULL
21989 	       || l->dw_loc_opc != DW_OP_plus_uconst
21990 	       || l->dw_loc_next != NULL)
21991 	      && !resolve_addr_in_expr (l))
21992 	    {
21993 	      remove_AT (die, a->dw_attr);
21994 	      ix--;
21995 	    }
21996 	  else
21997 	    mark_base_types (l);
21998 	}
21999 	break;
22000       case dw_val_class_addr:
22001 	if (a->dw_attr == DW_AT_const_value
22002 	    && resolve_one_addr (&a->dw_attr_val.v.val_addr, NULL))
22003 	  {
22004 	    remove_AT (die, a->dw_attr);
22005 	    ix--;
22006 	  }
22007 	if (die->die_tag == DW_TAG_GNU_call_site
22008 	    && a->dw_attr == DW_AT_abstract_origin)
22009 	  {
22010 	    tree tdecl = SYMBOL_REF_DECL (a->dw_attr_val.v.val_addr);
22011 	    dw_die_ref tdie = lookup_decl_die (tdecl);
22012 	    if (tdie == NULL
22013 		&& DECL_EXTERNAL (tdecl)
22014 		&& DECL_ABSTRACT_ORIGIN (tdecl) == NULL_TREE)
22015 	      {
22016 		force_decl_die (tdecl);
22017 		tdie = lookup_decl_die (tdecl);
22018 	      }
22019 	    if (tdie)
22020 	      {
22021 		a->dw_attr_val.val_class = dw_val_class_die_ref;
22022 		a->dw_attr_val.v.val_die_ref.die = tdie;
22023 		a->dw_attr_val.v.val_die_ref.external = 0;
22024 	      }
22025 	    else
22026 	      {
22027 		remove_AT (die, a->dw_attr);
22028 		ix--;
22029 	      }
22030 	  }
22031 	break;
22032       default:
22033 	break;
22034       }
22035 
22036   FOR_EACH_CHILD (die, c, resolve_addr (c));
22037 }
22038 
22039 /* Helper routines for optimize_location_lists.
22040    This pass tries to share identical local lists in .debug_loc
22041    section.  */
22042 
22043 /* Iteratively hash operands of LOC opcode.  */
22044 
22045 static inline hashval_t
22046 hash_loc_operands (dw_loc_descr_ref loc, hashval_t hash)
22047 {
22048   dw_val_ref val1 = &loc->dw_loc_oprnd1;
22049   dw_val_ref val2 = &loc->dw_loc_oprnd2;
22050 
22051   switch (loc->dw_loc_opc)
22052     {
22053     case DW_OP_const4u:
22054     case DW_OP_const8u:
22055       if (loc->dtprel)
22056 	goto hash_addr;
22057       /* FALLTHRU */
22058     case DW_OP_const1u:
22059     case DW_OP_const1s:
22060     case DW_OP_const2u:
22061     case DW_OP_const2s:
22062     case DW_OP_const4s:
22063     case DW_OP_const8s:
22064     case DW_OP_constu:
22065     case DW_OP_consts:
22066     case DW_OP_pick:
22067     case DW_OP_plus_uconst:
22068     case DW_OP_breg0:
22069     case DW_OP_breg1:
22070     case DW_OP_breg2:
22071     case DW_OP_breg3:
22072     case DW_OP_breg4:
22073     case DW_OP_breg5:
22074     case DW_OP_breg6:
22075     case DW_OP_breg7:
22076     case DW_OP_breg8:
22077     case DW_OP_breg9:
22078     case DW_OP_breg10:
22079     case DW_OP_breg11:
22080     case DW_OP_breg12:
22081     case DW_OP_breg13:
22082     case DW_OP_breg14:
22083     case DW_OP_breg15:
22084     case DW_OP_breg16:
22085     case DW_OP_breg17:
22086     case DW_OP_breg18:
22087     case DW_OP_breg19:
22088     case DW_OP_breg20:
22089     case DW_OP_breg21:
22090     case DW_OP_breg22:
22091     case DW_OP_breg23:
22092     case DW_OP_breg24:
22093     case DW_OP_breg25:
22094     case DW_OP_breg26:
22095     case DW_OP_breg27:
22096     case DW_OP_breg28:
22097     case DW_OP_breg29:
22098     case DW_OP_breg30:
22099     case DW_OP_breg31:
22100     case DW_OP_regx:
22101     case DW_OP_fbreg:
22102     case DW_OP_piece:
22103     case DW_OP_deref_size:
22104     case DW_OP_xderef_size:
22105       hash = iterative_hash_object (val1->v.val_int, hash);
22106       break;
22107     case DW_OP_skip:
22108     case DW_OP_bra:
22109       {
22110 	int offset;
22111 
22112 	gcc_assert (val1->val_class == dw_val_class_loc);
22113 	offset = val1->v.val_loc->dw_loc_addr - (loc->dw_loc_addr + 3);
22114 	hash = iterative_hash_object (offset, hash);
22115       }
22116       break;
22117     case DW_OP_implicit_value:
22118       hash = iterative_hash_object (val1->v.val_unsigned, hash);
22119       switch (val2->val_class)
22120 	{
22121 	case dw_val_class_const:
22122 	  hash = iterative_hash_object (val2->v.val_int, hash);
22123 	  break;
22124 	case dw_val_class_vec:
22125 	  {
22126 	    unsigned int elt_size = val2->v.val_vec.elt_size;
22127 	    unsigned int len = val2->v.val_vec.length;
22128 
22129 	    hash = iterative_hash_object (elt_size, hash);
22130 	    hash = iterative_hash_object (len, hash);
22131 	    hash = iterative_hash (val2->v.val_vec.array,
22132 				   len * elt_size, hash);
22133 	  }
22134 	  break;
22135 	case dw_val_class_const_double:
22136 	  hash = iterative_hash_object (val2->v.val_double.low, hash);
22137 	  hash = iterative_hash_object (val2->v.val_double.high, hash);
22138 	  break;
22139 	case dw_val_class_addr:
22140 	  hash = iterative_hash_rtx (val2->v.val_addr, hash);
22141 	  break;
22142 	default:
22143 	  gcc_unreachable ();
22144 	}
22145       break;
22146     case DW_OP_bregx:
22147     case DW_OP_bit_piece:
22148       hash = iterative_hash_object (val1->v.val_int, hash);
22149       hash = iterative_hash_object (val2->v.val_int, hash);
22150       break;
22151     case DW_OP_addr:
22152     hash_addr:
22153       if (loc->dtprel)
22154 	{
22155 	  unsigned char dtprel = 0xd1;
22156 	  hash = iterative_hash_object (dtprel, hash);
22157 	}
22158       hash = iterative_hash_rtx (val1->v.val_addr, hash);
22159       break;
22160     case DW_OP_GNU_implicit_pointer:
22161       hash = iterative_hash_object (val2->v.val_int, hash);
22162       break;
22163     case DW_OP_GNU_entry_value:
22164       hash = hash_loc_operands (val1->v.val_loc, hash);
22165       break;
22166     case DW_OP_GNU_regval_type:
22167     case DW_OP_GNU_deref_type:
22168       {
22169 	unsigned int byte_size
22170 	  = get_AT_unsigned (val2->v.val_die_ref.die, DW_AT_byte_size);
22171 	unsigned int encoding
22172 	  = get_AT_unsigned (val2->v.val_die_ref.die, DW_AT_encoding);
22173 	hash = iterative_hash_object (val1->v.val_int, hash);
22174 	hash = iterative_hash_object (byte_size, hash);
22175 	hash = iterative_hash_object (encoding, hash);
22176       }
22177       break;
22178     case DW_OP_GNU_convert:
22179     case DW_OP_GNU_reinterpret:
22180       if (val1->val_class == dw_val_class_unsigned_const)
22181 	{
22182 	  hash = iterative_hash_object (val1->v.val_unsigned, hash);
22183 	  break;
22184 	}
22185       /* FALLTHRU */
22186     case DW_OP_GNU_const_type:
22187       {
22188 	unsigned int byte_size
22189 	  = get_AT_unsigned (val1->v.val_die_ref.die, DW_AT_byte_size);
22190 	unsigned int encoding
22191 	  = get_AT_unsigned (val1->v.val_die_ref.die, DW_AT_encoding);
22192 	hash = iterative_hash_object (byte_size, hash);
22193 	hash = iterative_hash_object (encoding, hash);
22194 	if (loc->dw_loc_opc != DW_OP_GNU_const_type)
22195 	  break;
22196 	hash = iterative_hash_object (val2->val_class, hash);
22197 	switch (val2->val_class)
22198 	  {
22199 	  case dw_val_class_const:
22200 	    hash = iterative_hash_object (val2->v.val_int, hash);
22201 	    break;
22202 	  case dw_val_class_vec:
22203 	    {
22204 	      unsigned int elt_size = val2->v.val_vec.elt_size;
22205 	      unsigned int len = val2->v.val_vec.length;
22206 
22207 	      hash = iterative_hash_object (elt_size, hash);
22208 	      hash = iterative_hash_object (len, hash);
22209 	      hash = iterative_hash (val2->v.val_vec.array,
22210 				     len * elt_size, hash);
22211 	    }
22212 	    break;
22213 	  case dw_val_class_const_double:
22214 	    hash = iterative_hash_object (val2->v.val_double.low, hash);
22215 	    hash = iterative_hash_object (val2->v.val_double.high, hash);
22216 	    break;
22217 	  default:
22218 	    gcc_unreachable ();
22219 	  }
22220       }
22221       break;
22222 
22223     default:
22224       /* Other codes have no operands.  */
22225       break;
22226     }
22227   return hash;
22228 }
22229 
22230 /* Iteratively hash the whole DWARF location expression LOC.  */
22231 
22232 static inline hashval_t
22233 hash_locs (dw_loc_descr_ref loc, hashval_t hash)
22234 {
22235   dw_loc_descr_ref l;
22236   bool sizes_computed = false;
22237   /* Compute sizes, so that DW_OP_skip/DW_OP_bra can be checksummed.  */
22238   size_of_locs (loc);
22239 
22240   for (l = loc; l != NULL; l = l->dw_loc_next)
22241     {
22242       enum dwarf_location_atom opc = l->dw_loc_opc;
22243       hash = iterative_hash_object (opc, hash);
22244       if ((opc == DW_OP_skip || opc == DW_OP_bra) && !sizes_computed)
22245 	{
22246 	  size_of_locs (loc);
22247 	  sizes_computed = true;
22248 	}
22249       hash = hash_loc_operands (l, hash);
22250     }
22251   return hash;
22252 }
22253 
22254 /* Compute hash of the whole location list LIST_HEAD.  */
22255 
22256 static inline void
22257 hash_loc_list (dw_loc_list_ref list_head)
22258 {
22259   dw_loc_list_ref curr = list_head;
22260   hashval_t hash = 0;
22261 
22262   for (curr = list_head; curr != NULL; curr = curr->dw_loc_next)
22263     {
22264       hash = iterative_hash (curr->begin, strlen (curr->begin) + 1, hash);
22265       hash = iterative_hash (curr->end, strlen (curr->end) + 1, hash);
22266       if (curr->section)
22267 	hash = iterative_hash (curr->section, strlen (curr->section) + 1,
22268 			       hash);
22269       hash = hash_locs (curr->expr, hash);
22270     }
22271   list_head->hash = hash;
22272 }
22273 
22274 /* Return true if X and Y opcodes have the same operands.  */
22275 
22276 static inline bool
22277 compare_loc_operands (dw_loc_descr_ref x, dw_loc_descr_ref y)
22278 {
22279   dw_val_ref valx1 = &x->dw_loc_oprnd1;
22280   dw_val_ref valx2 = &x->dw_loc_oprnd2;
22281   dw_val_ref valy1 = &y->dw_loc_oprnd1;
22282   dw_val_ref valy2 = &y->dw_loc_oprnd2;
22283 
22284   switch (x->dw_loc_opc)
22285     {
22286     case DW_OP_const4u:
22287     case DW_OP_const8u:
22288       if (x->dtprel)
22289 	goto hash_addr;
22290       /* FALLTHRU */
22291     case DW_OP_const1u:
22292     case DW_OP_const1s:
22293     case DW_OP_const2u:
22294     case DW_OP_const2s:
22295     case DW_OP_const4s:
22296     case DW_OP_const8s:
22297     case DW_OP_constu:
22298     case DW_OP_consts:
22299     case DW_OP_pick:
22300     case DW_OP_plus_uconst:
22301     case DW_OP_breg0:
22302     case DW_OP_breg1:
22303     case DW_OP_breg2:
22304     case DW_OP_breg3:
22305     case DW_OP_breg4:
22306     case DW_OP_breg5:
22307     case DW_OP_breg6:
22308     case DW_OP_breg7:
22309     case DW_OP_breg8:
22310     case DW_OP_breg9:
22311     case DW_OP_breg10:
22312     case DW_OP_breg11:
22313     case DW_OP_breg12:
22314     case DW_OP_breg13:
22315     case DW_OP_breg14:
22316     case DW_OP_breg15:
22317     case DW_OP_breg16:
22318     case DW_OP_breg17:
22319     case DW_OP_breg18:
22320     case DW_OP_breg19:
22321     case DW_OP_breg20:
22322     case DW_OP_breg21:
22323     case DW_OP_breg22:
22324     case DW_OP_breg23:
22325     case DW_OP_breg24:
22326     case DW_OP_breg25:
22327     case DW_OP_breg26:
22328     case DW_OP_breg27:
22329     case DW_OP_breg28:
22330     case DW_OP_breg29:
22331     case DW_OP_breg30:
22332     case DW_OP_breg31:
22333     case DW_OP_regx:
22334     case DW_OP_fbreg:
22335     case DW_OP_piece:
22336     case DW_OP_deref_size:
22337     case DW_OP_xderef_size:
22338       return valx1->v.val_int == valy1->v.val_int;
22339     case DW_OP_skip:
22340     case DW_OP_bra:
22341       gcc_assert (valx1->val_class == dw_val_class_loc
22342 		  && valy1->val_class == dw_val_class_loc
22343 		  && x->dw_loc_addr == y->dw_loc_addr);
22344       return valx1->v.val_loc->dw_loc_addr == valy1->v.val_loc->dw_loc_addr;
22345     case DW_OP_implicit_value:
22346       if (valx1->v.val_unsigned != valy1->v.val_unsigned
22347 	  || valx2->val_class != valy2->val_class)
22348 	return false;
22349       switch (valx2->val_class)
22350 	{
22351 	case dw_val_class_const:
22352 	  return valx2->v.val_int == valy2->v.val_int;
22353 	case dw_val_class_vec:
22354 	  return valx2->v.val_vec.elt_size == valy2->v.val_vec.elt_size
22355 		 && valx2->v.val_vec.length == valy2->v.val_vec.length
22356 		 && memcmp (valx2->v.val_vec.array, valy2->v.val_vec.array,
22357 			    valx2->v.val_vec.elt_size
22358 			    * valx2->v.val_vec.length) == 0;
22359 	case dw_val_class_const_double:
22360 	  return valx2->v.val_double.low == valy2->v.val_double.low
22361 		 && valx2->v.val_double.high == valy2->v.val_double.high;
22362 	case dw_val_class_addr:
22363 	  return rtx_equal_p (valx2->v.val_addr, valy2->v.val_addr);
22364 	default:
22365 	  gcc_unreachable ();
22366 	}
22367     case DW_OP_bregx:
22368     case DW_OP_bit_piece:
22369       return valx1->v.val_int == valy1->v.val_int
22370 	     && valx2->v.val_int == valy2->v.val_int;
22371     case DW_OP_addr:
22372     hash_addr:
22373       return rtx_equal_p (valx1->v.val_addr, valy1->v.val_addr);
22374     case DW_OP_GNU_implicit_pointer:
22375       return valx1->val_class == dw_val_class_die_ref
22376 	     && valx1->val_class == valy1->val_class
22377 	     && valx1->v.val_die_ref.die == valy1->v.val_die_ref.die
22378 	     && valx2->v.val_int == valy2->v.val_int;
22379     case DW_OP_GNU_entry_value:
22380       return compare_loc_operands (valx1->v.val_loc, valy1->v.val_loc);
22381     case DW_OP_GNU_const_type:
22382       if (valx1->v.val_die_ref.die != valy1->v.val_die_ref.die
22383 	  || valx2->val_class != valy2->val_class)
22384 	return false;
22385       switch (valx2->val_class)
22386 	{
22387 	case dw_val_class_const:
22388 	  return valx2->v.val_int == valy2->v.val_int;
22389 	case dw_val_class_vec:
22390 	  return valx2->v.val_vec.elt_size == valy2->v.val_vec.elt_size
22391 		 && valx2->v.val_vec.length == valy2->v.val_vec.length
22392 		 && memcmp (valx2->v.val_vec.array, valy2->v.val_vec.array,
22393 			    valx2->v.val_vec.elt_size
22394 			    * valx2->v.val_vec.length) == 0;
22395 	case dw_val_class_const_double:
22396 	  return valx2->v.val_double.low == valy2->v.val_double.low
22397 		 && valx2->v.val_double.high == valy2->v.val_double.high;
22398 	default:
22399 	  gcc_unreachable ();
22400 	}
22401     case DW_OP_GNU_regval_type:
22402     case DW_OP_GNU_deref_type:
22403       return valx1->v.val_int == valy1->v.val_int
22404 	     && valx2->v.val_die_ref.die == valy2->v.val_die_ref.die;
22405     case DW_OP_GNU_convert:
22406     case DW_OP_GNU_reinterpret:
22407       if (valx1->val_class != valy1->val_class)
22408 	return false;
22409       if (valx1->val_class == dw_val_class_unsigned_const)
22410 	return valx1->v.val_unsigned == valy1->v.val_unsigned;
22411       return valx1->v.val_die_ref.die == valy1->v.val_die_ref.die;
22412     case DW_OP_GNU_parameter_ref:
22413       return valx1->val_class == dw_val_class_die_ref
22414 	     && valx1->val_class == valy1->val_class
22415 	     && valx1->v.val_die_ref.die == valy1->v.val_die_ref.die;
22416     default:
22417       /* Other codes have no operands.  */
22418       return true;
22419     }
22420 }
22421 
22422 /* Return true if DWARF location expressions X and Y are the same.  */
22423 
22424 static inline bool
22425 compare_locs (dw_loc_descr_ref x, dw_loc_descr_ref y)
22426 {
22427   for (; x != NULL && y != NULL; x = x->dw_loc_next, y = y->dw_loc_next)
22428     if (x->dw_loc_opc != y->dw_loc_opc
22429 	|| x->dtprel != y->dtprel
22430 	|| !compare_loc_operands (x, y))
22431       break;
22432   return x == NULL && y == NULL;
22433 }
22434 
22435 /* Return precomputed hash of location list X.  */
22436 
22437 static hashval_t
22438 loc_list_hash (const void *x)
22439 {
22440   return ((const struct dw_loc_list_struct *) x)->hash;
22441 }
22442 
22443 /* Return 1 if location lists X and Y are the same.  */
22444 
22445 static int
22446 loc_list_eq (const void *x, const void *y)
22447 {
22448   const struct dw_loc_list_struct *a = (const struct dw_loc_list_struct *) x;
22449   const struct dw_loc_list_struct *b = (const struct dw_loc_list_struct *) y;
22450   if (a == b)
22451     return 1;
22452   if (a->hash != b->hash)
22453     return 0;
22454   for (; a != NULL && b != NULL; a = a->dw_loc_next, b = b->dw_loc_next)
22455     if (strcmp (a->begin, b->begin) != 0
22456 	|| strcmp (a->end, b->end) != 0
22457 	|| (a->section == NULL) != (b->section == NULL)
22458 	|| (a->section && strcmp (a->section, b->section) != 0)
22459 	|| !compare_locs (a->expr, b->expr))
22460       break;
22461   return a == NULL && b == NULL;
22462 }
22463 
22464 /* Recursively optimize location lists referenced from DIE
22465    children and share them whenever possible.  */
22466 
22467 static void
22468 optimize_location_lists_1 (dw_die_ref die, htab_t htab)
22469 {
22470   dw_die_ref c;
22471   dw_attr_ref a;
22472   unsigned ix;
22473   void **slot;
22474 
22475   FOR_EACH_VEC_ELT (dw_attr_node, die->die_attr, ix, a)
22476     if (AT_class (a) == dw_val_class_loc_list)
22477       {
22478 	dw_loc_list_ref list = AT_loc_list (a);
22479 	/* TODO: perform some optimizations here, before hashing
22480 	   it and storing into the hash table.  */
22481 	hash_loc_list (list);
22482 	slot = htab_find_slot_with_hash (htab, list, list->hash,
22483 					 INSERT);
22484 	if (*slot == NULL)
22485 	  *slot = (void *) list;
22486 	else
22487 	  a->dw_attr_val.v.val_loc_list = (dw_loc_list_ref) *slot;
22488       }
22489 
22490   FOR_EACH_CHILD (die, c, optimize_location_lists_1 (c, htab));
22491 }
22492 
22493 /* Optimize location lists referenced from DIE
22494    children and share them whenever possible.  */
22495 
22496 static void
22497 optimize_location_lists (dw_die_ref die)
22498 {
22499   htab_t htab = htab_create (500, loc_list_hash, loc_list_eq, NULL);
22500   optimize_location_lists_1 (die, htab);
22501   htab_delete (htab);
22502 }
22503 
22504 /* Output stuff that dwarf requires at the end of every file,
22505    and generate the DWARF-2 debugging info.  */
22506 
22507 static void
22508 dwarf2out_finish (const char *filename)
22509 {
22510   limbo_die_node *node, *next_node;
22511   comdat_type_node *ctnode;
22512   htab_t comdat_type_table;
22513   unsigned int i;
22514 
22515   /* PCH might result in DW_AT_producer string being restored from the
22516      header compilation, fix it up if needed.  */
22517   dw_attr_ref producer = get_AT (comp_unit_die (), DW_AT_producer);
22518   if (strcmp (AT_string (producer), producer_string) != 0)
22519     {
22520       struct indirect_string_node *node = find_AT_string (producer_string);
22521       producer->dw_attr_val.v.val_str = node;
22522     }
22523 
22524   gen_scheduled_generic_parms_dies ();
22525   gen_remaining_tmpl_value_param_die_attribute ();
22526 
22527   /* Add the name for the main input file now.  We delayed this from
22528      dwarf2out_init to avoid complications with PCH.  */
22529   add_name_attribute (comp_unit_die (), remap_debug_filename (filename));
22530   if (!IS_ABSOLUTE_PATH (filename))
22531     add_comp_dir_attribute (comp_unit_die ());
22532   else if (get_AT (comp_unit_die (), DW_AT_comp_dir) == NULL)
22533     {
22534       bool p = false;
22535       htab_traverse (file_table, file_table_relative_p, &p);
22536       if (p)
22537 	add_comp_dir_attribute (comp_unit_die ());
22538     }
22539 
22540   for (i = 0; i < VEC_length (deferred_locations, deferred_locations_list); i++)
22541     {
22542       add_location_or_const_value_attribute (
22543         VEC_index (deferred_locations, deferred_locations_list, i)->die,
22544         VEC_index (deferred_locations, deferred_locations_list, i)->variable,
22545 	false,
22546 	DW_AT_location);
22547     }
22548 
22549   /* Traverse the limbo die list, and add parent/child links.  The only
22550      dies without parents that should be here are concrete instances of
22551      inline functions, and the comp_unit_die.  We can ignore the comp_unit_die.
22552      For concrete instances, we can get the parent die from the abstract
22553      instance.  */
22554   for (node = limbo_die_list; node; node = next_node)
22555     {
22556       dw_die_ref die = node->die;
22557       next_node = node->next;
22558 
22559       if (die->die_parent == NULL)
22560 	{
22561 	  dw_die_ref origin = get_AT_ref (die, DW_AT_abstract_origin);
22562 
22563 	  if (origin && origin->die_parent)
22564 	    add_child_die (origin->die_parent, die);
22565 	  else if (is_cu_die (die))
22566 	    ;
22567 	  else if (seen_error ())
22568 	    /* It's OK to be confused by errors in the input.  */
22569 	    add_child_die (comp_unit_die (), die);
22570 	  else
22571 	    {
22572 	      /* In certain situations, the lexical block containing a
22573 		 nested function can be optimized away, which results
22574 		 in the nested function die being orphaned.  Likewise
22575 		 with the return type of that nested function.  Force
22576 		 this to be a child of the containing function.
22577 
22578 		 It may happen that even the containing function got fully
22579 		 inlined and optimized out.  In that case we are lost and
22580 		 assign the empty child.  This should not be big issue as
22581 		 the function is likely unreachable too.  */
22582 	      gcc_assert (node->created_for);
22583 
22584 	      if (DECL_P (node->created_for))
22585 		origin = get_context_die (DECL_CONTEXT (node->created_for));
22586 	      else if (TYPE_P (node->created_for))
22587 		origin = scope_die_for (node->created_for, comp_unit_die ());
22588 	      else
22589 		origin = comp_unit_die ();
22590 
22591 	      add_child_die (origin, die);
22592 	    }
22593 	}
22594     }
22595 
22596   limbo_die_list = NULL;
22597 
22598 #if ENABLE_ASSERT_CHECKING
22599   {
22600     dw_die_ref die = comp_unit_die (), c;
22601     FOR_EACH_CHILD (die, c, gcc_assert (! c->die_mark));
22602   }
22603 #endif
22604   resolve_addr (comp_unit_die ());
22605   move_marked_base_types ();
22606 
22607   for (node = deferred_asm_name; node; node = node->next)
22608     {
22609       tree decl = node->created_for;
22610       /* When generating LTO bytecode we can not generate new assembler
22611          names at this point and all important decls got theirs via
22612 	 free-lang-data.  */
22613       if ((!flag_generate_lto || DECL_ASSEMBLER_NAME_SET_P (decl))
22614 	  && DECL_ASSEMBLER_NAME (decl) != DECL_NAME (decl))
22615 	{
22616 	  add_linkage_attr (node->die, decl);
22617 	  move_linkage_attr (node->die);
22618 	}
22619     }
22620 
22621   deferred_asm_name = NULL;
22622 
22623   /* Walk through the list of incomplete types again, trying once more to
22624      emit full debugging info for them.  */
22625   retry_incomplete_types ();
22626 
22627   if (flag_eliminate_unused_debug_types)
22628     prune_unused_types ();
22629 
22630   /* Generate separate CUs for each of the include files we've seen.
22631      They will go into limbo_die_list.  */
22632   if (flag_eliminate_dwarf2_dups && ! use_debug_types)
22633     break_out_includes (comp_unit_die ());
22634 
22635   /* Generate separate COMDAT sections for type DIEs. */
22636   if (use_debug_types)
22637     {
22638       break_out_comdat_types (comp_unit_die ());
22639 
22640       /* Each new type_unit DIE was added to the limbo die list when created.
22641          Since these have all been added to comdat_type_list, clear the
22642          limbo die list.  */
22643       limbo_die_list = NULL;
22644 
22645       /* For each new comdat type unit, copy declarations for incomplete
22646          types to make the new unit self-contained (i.e., no direct
22647          references to the main compile unit).  */
22648       for (ctnode = comdat_type_list; ctnode != NULL; ctnode = ctnode->next)
22649         copy_decls_for_unworthy_types (ctnode->root_die);
22650       copy_decls_for_unworthy_types (comp_unit_die ());
22651 
22652       /* In the process of copying declarations from one unit to another,
22653          we may have left some declarations behind that are no longer
22654          referenced.  Prune them.  */
22655       prune_unused_types ();
22656     }
22657 
22658   /* Traverse the DIE's and add add sibling attributes to those DIE's
22659      that have children.  */
22660   add_sibling_attributes (comp_unit_die ());
22661   for (node = limbo_die_list; node; node = node->next)
22662     add_sibling_attributes (node->die);
22663   for (ctnode = comdat_type_list; ctnode != NULL; ctnode = ctnode->next)
22664     add_sibling_attributes (ctnode->root_die);
22665 
22666   /* Output a terminator label for the .text section.  */
22667   switch_to_section (text_section);
22668   targetm.asm_out.internal_label (asm_out_file, TEXT_END_LABEL, 0);
22669   if (cold_text_section)
22670     {
22671       switch_to_section (cold_text_section);
22672       targetm.asm_out.internal_label (asm_out_file, COLD_END_LABEL, 0);
22673     }
22674 
22675   /* We can only use the low/high_pc attributes if all of the code was
22676      in .text.  */
22677   if (!have_multiple_function_sections
22678       || (dwarf_version < 3 && dwarf_strict))
22679     {
22680       /* Don't add if the CU has no associated code.  */
22681       if (text_section_used)
22682 	{
22683 	  add_AT_lbl_id (comp_unit_die (), DW_AT_low_pc, text_section_label);
22684 	  add_AT_lbl_id (comp_unit_die (), DW_AT_high_pc, text_end_label);
22685 	}
22686     }
22687   else
22688     {
22689       unsigned fde_idx;
22690       dw_fde_ref fde;
22691       bool range_list_added = false;
22692 
22693       if (text_section_used)
22694 	add_ranges_by_labels (comp_unit_die (), text_section_label,
22695 			      text_end_label, &range_list_added);
22696       if (cold_text_section_used)
22697 	add_ranges_by_labels (comp_unit_die (), cold_text_section_label,
22698 			      cold_end_label, &range_list_added);
22699 
22700       FOR_EACH_VEC_ELT (dw_fde_ref, fde_vec, fde_idx, fde)
22701 	{
22702 	  if (!fde->in_std_section)
22703 	    add_ranges_by_labels (comp_unit_die (), fde->dw_fde_begin,
22704 				  fde->dw_fde_end, &range_list_added);
22705 	  if (fde->dw_fde_second_begin && !fde->second_in_std_section)
22706 	    add_ranges_by_labels (comp_unit_die (), fde->dw_fde_second_begin,
22707 				  fde->dw_fde_second_end, &range_list_added);
22708 	}
22709 
22710       if (range_list_added)
22711 	{
22712 	  /* We need to give .debug_loc and .debug_ranges an appropriate
22713 	     "base address".  Use zero so that these addresses become
22714 	     absolute.  Historically, we've emitted the unexpected
22715 	     DW_AT_entry_pc instead of DW_AT_low_pc for this purpose.
22716 	     Emit both to give time for other tools to adapt.  */
22717 	  add_AT_addr (comp_unit_die (), DW_AT_low_pc, const0_rtx);
22718 	  if (! dwarf_strict && dwarf_version < 4)
22719 	    add_AT_addr (comp_unit_die (), DW_AT_entry_pc, const0_rtx);
22720 
22721 	  add_ranges (NULL);
22722 	}
22723     }
22724 
22725   if (debug_info_level >= DINFO_LEVEL_NORMAL)
22726     add_AT_lineptr (comp_unit_die (), DW_AT_stmt_list,
22727 		    debug_line_section_label);
22728 
22729   if (have_macinfo)
22730     add_AT_macptr (comp_unit_die (),
22731 		   dwarf_strict ? DW_AT_macro_info : DW_AT_GNU_macros,
22732 		   macinfo_section_label);
22733 
22734   if (have_location_lists)
22735     optimize_location_lists (comp_unit_die ());
22736 
22737   /* Output all of the compilation units.  We put the main one last so that
22738      the offsets are available to output_pubnames.  */
22739   for (node = limbo_die_list; node; node = node->next)
22740     output_comp_unit (node->die, 0);
22741 
22742   comdat_type_table = htab_create (100, htab_ct_hash, htab_ct_eq, NULL);
22743   for (ctnode = comdat_type_list; ctnode != NULL; ctnode = ctnode->next)
22744     {
22745       void **slot = htab_find_slot (comdat_type_table, ctnode, INSERT);
22746 
22747       /* Don't output duplicate types.  */
22748       if (*slot != HTAB_EMPTY_ENTRY)
22749         continue;
22750 
22751       /* Add a pointer to the line table for the main compilation unit
22752          so that the debugger can make sense of DW_AT_decl_file
22753          attributes.  */
22754       if (debug_info_level >= DINFO_LEVEL_NORMAL)
22755         add_AT_lineptr (ctnode->root_die, DW_AT_stmt_list,
22756 		        debug_line_section_label);
22757 
22758       output_comdat_type_unit (ctnode);
22759       *slot = ctnode;
22760     }
22761   htab_delete (comdat_type_table);
22762 
22763   /* Output the main compilation unit if non-empty or if .debug_macinfo
22764      or .debug_macro will be emitted.  */
22765   output_comp_unit (comp_unit_die (), have_macinfo);
22766 
22767   /* Output the abbreviation table.  */
22768   if (abbrev_die_table_in_use != 1)
22769     {
22770       switch_to_section (debug_abbrev_section);
22771       ASM_OUTPUT_LABEL (asm_out_file, abbrev_section_label);
22772       output_abbrev_section ();
22773     }
22774 
22775   /* Output location list section if necessary.  */
22776   if (have_location_lists)
22777     {
22778       /* Output the location lists info.  */
22779       switch_to_section (debug_loc_section);
22780       ASM_GENERATE_INTERNAL_LABEL (loc_section_label,
22781 				   DEBUG_LOC_SECTION_LABEL, 0);
22782       ASM_OUTPUT_LABEL (asm_out_file, loc_section_label);
22783       output_location_lists (comp_unit_die ());
22784     }
22785 
22786   /* Output public names table if necessary.  */
22787   if (!VEC_empty (pubname_entry, pubname_table))
22788     {
22789       gcc_assert (info_section_emitted);
22790       switch_to_section (debug_pubnames_section);
22791       output_pubnames (pubname_table);
22792     }
22793 
22794   /* Output public types table if necessary.  */
22795   /* ??? Only defined by DWARF3, but emitted by Darwin for DWARF2.
22796      It shouldn't hurt to emit it always, since pure DWARF2 consumers
22797      simply won't look for the section.  */
22798   if (!VEC_empty (pubname_entry, pubtype_table))
22799     {
22800       bool empty = false;
22801 
22802       if (flag_eliminate_unused_debug_types)
22803 	{
22804 	  /* The pubtypes table might be emptied by pruning unused items.  */
22805 	  unsigned i;
22806 	  pubname_ref p;
22807 	  empty = true;
22808 	  FOR_EACH_VEC_ELT (pubname_entry, pubtype_table, i, p)
22809 	    if (p->die->die_offset != 0)
22810 	      {
22811 		empty = false;
22812 		break;
22813 	      }
22814 	}
22815       if (!empty)
22816 	{
22817 	  gcc_assert (info_section_emitted);
22818 	  switch_to_section (debug_pubtypes_section);
22819 	  output_pubnames (pubtype_table);
22820 	}
22821     }
22822 
22823   /* Output the address range information if a CU (.debug_info section)
22824      was emitted.  We output an empty table even if we had no functions
22825      to put in it.  This because the consumer has no way to tell the
22826      difference between an empty table that we omitted and failure to
22827      generate a table that would have contained data.  */
22828   if (info_section_emitted)
22829     {
22830       unsigned long aranges_length = size_of_aranges ();
22831 
22832       switch_to_section (debug_aranges_section);
22833       output_aranges (aranges_length);
22834     }
22835 
22836   /* Output ranges section if necessary.  */
22837   if (ranges_table_in_use)
22838     {
22839       switch_to_section (debug_ranges_section);
22840       ASM_OUTPUT_LABEL (asm_out_file, ranges_section_label);
22841       output_ranges ();
22842     }
22843 
22844   /* Have to end the macro section.  */
22845   if (have_macinfo)
22846     {
22847       switch_to_section (debug_macinfo_section);
22848       ASM_OUTPUT_LABEL (asm_out_file, macinfo_section_label);
22849       output_macinfo ();
22850       dw2_asm_output_data (1, 0, "End compilation unit");
22851     }
22852 
22853   /* Output the source line correspondence table.  We must do this
22854      even if there is no line information.  Otherwise, on an empty
22855      translation unit, we will generate a present, but empty,
22856      .debug_info section.  IRIX 6.5 `nm' will then complain when
22857      examining the file.  This is done late so that any filenames
22858      used by the debug_info section are marked as 'used'.  */
22859   switch_to_section (debug_line_section);
22860   ASM_OUTPUT_LABEL (asm_out_file, debug_line_section_label);
22861   if (! DWARF2_ASM_LINE_DEBUG_INFO)
22862     output_line_info ();
22863 
22864   /* If we emitted any DW_FORM_strp form attribute, output the string
22865      table too.  */
22866   if (debug_str_hash)
22867     htab_traverse (debug_str_hash, output_indirect_string, NULL);
22868 }
22869 
22870 #include "gt-dwarf2out.h"
22871