OSDN Git Service

* zh_CN.po: Update.
[pf3gnuchains/gcc-fork.git] / gcc / dwarf2out.c
1 /* Output Dwarf2 format symbol table information from GCC.
2    Copyright (C) 1992, 1993, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
3    2003, 2004, 2005 Free Software Foundation, Inc.
4    Contributed by Gary Funck (gary@intrepid.com).
5    Derived from DWARF 1 implementation of Ron Guilmette (rfg@monkeys.com).
6    Extensively modified by Jason Merrill (jason@cygnus.com).
7
8 This file is part of GCC.
9
10 GCC is free software; you can redistribute it and/or modify it under
11 the terms of the GNU General Public License as published by the Free
12 Software Foundation; either version 2, or (at your option) any later
13 version.
14
15 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
16 WARRANTY; without even the implied warranty of MERCHANTABILITY or
17 FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
18 for more details.
19
20 You should have received a copy of the GNU General Public License
21 along with GCC; see the file COPYING.  If not, write to the Free
22 Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
23 02110-1301, USA.  */
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 #include "config.h"
38 #include "system.h"
39 #include "coretypes.h"
40 #include "tm.h"
41 #include "tree.h"
42 #include "version.h"
43 #include "flags.h"
44 #include "real.h"
45 #include "rtl.h"
46 #include "hard-reg-set.h"
47 #include "regs.h"
48 #include "insn-config.h"
49 #include "reload.h"
50 #include "function.h"
51 #include "output.h"
52 #include "expr.h"
53 #include "libfuncs.h"
54 #include "except.h"
55 #include "dwarf2.h"
56 #include "dwarf2out.h"
57 #include "dwarf2asm.h"
58 #include "toplev.h"
59 #include "varray.h"
60 #include "ggc.h"
61 #include "md5.h"
62 #include "tm_p.h"
63 #include "diagnostic.h"
64 #include "debug.h"
65 #include "target.h"
66 #include "langhooks.h"
67 #include "hashtab.h"
68 #include "cgraph.h"
69 #include "input.h"
70
71 #ifdef DWARF2_DEBUGGING_INFO
72 static void dwarf2out_source_line (unsigned int, const char *);
73 #endif
74
75 /* DWARF2 Abbreviation Glossary:
76    CFA = Canonical Frame Address
77            a fixed address on the stack which identifies a call frame.
78            We define it to be the value of SP just before the call insn.
79            The CFA register and offset, which may change during the course
80            of the function, are used to calculate its value at runtime.
81    CFI = Call Frame Instruction
82            an instruction for the DWARF2 abstract machine
83    CIE = Common Information Entry
84            information describing information common to one or more FDEs
85    DIE = Debugging Information Entry
86    FDE = Frame Description Entry
87            information describing the stack call frame, in particular,
88            how to restore registers
89
90    DW_CFA_... = DWARF2 CFA call frame instruction
91    DW_TAG_... = DWARF2 DIE tag */
92
93 /* Decide whether we want to emit frame unwind information for the current
94    translation unit.  */
95
96 int
97 dwarf2out_do_frame (void)
98 {
99   return (write_symbols == DWARF2_DEBUG
100           || write_symbols == VMS_AND_DWARF2_DEBUG
101 #ifdef DWARF2_FRAME_INFO
102           || DWARF2_FRAME_INFO
103 #endif
104 #ifdef DWARF2_UNWIND_INFO
105           || flag_unwind_tables
106           || (flag_exceptions && ! USING_SJLJ_EXCEPTIONS)
107 #endif
108           );
109 }
110
111 /* The size of the target's pointer type.  */
112 #ifndef PTR_SIZE
113 #define PTR_SIZE (POINTER_SIZE / BITS_PER_UNIT)
114 #endif
115
116 DEF_VEC_P(rtx);
117 DEF_VEC_ALLOC_P(rtx,gc);
118
119 /* Array of RTXes referenced by the debugging information, which therefore
120    must be kept around forever.  */
121 static GTY(()) VEC(rtx,gc) *used_rtx_array;
122
123 /* A pointer to the base of a list of incomplete types which might be
124    completed at some later time.  incomplete_types_list needs to be a
125    VEC(tree,gc) because we want to tell the garbage collector about
126    it.  */
127 static GTY(()) VEC(tree,gc) *incomplete_types;
128
129 /* A pointer to the base of a table of references to declaration
130    scopes.  This table is a display which tracks the nesting
131    of declaration scopes at the current scope and containing
132    scopes.  This table is used to find the proper place to
133    define type declaration DIE's.  */
134 static GTY(()) VEC(tree,gc) *decl_scope_table;
135
136 /* Pointers to various DWARF2 sections.  */
137 static GTY(()) section *debug_info_section;
138 static GTY(()) section *debug_abbrev_section;
139 static GTY(()) section *debug_aranges_section;
140 static GTY(()) section *debug_macinfo_section;
141 static GTY(()) section *debug_line_section;
142 static GTY(()) section *debug_loc_section;
143 static GTY(()) section *debug_pubnames_section;
144 static GTY(()) section *debug_str_section;
145 static GTY(()) section *debug_ranges_section;
146
147 /* How to start an assembler comment.  */
148 #ifndef ASM_COMMENT_START
149 #define ASM_COMMENT_START ";#"
150 #endif
151
152 typedef struct dw_cfi_struct *dw_cfi_ref;
153 typedef struct dw_fde_struct *dw_fde_ref;
154 typedef union  dw_cfi_oprnd_struct *dw_cfi_oprnd_ref;
155
156 /* Call frames are described using a sequence of Call Frame
157    Information instructions.  The register number, offset
158    and address fields are provided as possible operands;
159    their use is selected by the opcode field.  */
160
161 enum dw_cfi_oprnd_type {
162   dw_cfi_oprnd_unused,
163   dw_cfi_oprnd_reg_num,
164   dw_cfi_oprnd_offset,
165   dw_cfi_oprnd_addr,
166   dw_cfi_oprnd_loc
167 };
168
169 typedef union dw_cfi_oprnd_struct GTY(())
170 {
171   unsigned int GTY ((tag ("dw_cfi_oprnd_reg_num"))) dw_cfi_reg_num;
172   HOST_WIDE_INT GTY ((tag ("dw_cfi_oprnd_offset"))) dw_cfi_offset;
173   const char * GTY ((tag ("dw_cfi_oprnd_addr"))) dw_cfi_addr;
174   struct dw_loc_descr_struct * GTY ((tag ("dw_cfi_oprnd_loc"))) dw_cfi_loc;
175 }
176 dw_cfi_oprnd;
177
178 typedef struct dw_cfi_struct GTY(())
179 {
180   dw_cfi_ref dw_cfi_next;
181   enum dwarf_call_frame_info dw_cfi_opc;
182   dw_cfi_oprnd GTY ((desc ("dw_cfi_oprnd1_desc (%1.dw_cfi_opc)")))
183     dw_cfi_oprnd1;
184   dw_cfi_oprnd GTY ((desc ("dw_cfi_oprnd2_desc (%1.dw_cfi_opc)")))
185     dw_cfi_oprnd2;
186 }
187 dw_cfi_node;
188
189 /* This is how we define the location of the CFA. We use to handle it
190    as REG + OFFSET all the time,  but now it can be more complex.
191    It can now be either REG + CFA_OFFSET or *(REG + BASE_OFFSET) + CFA_OFFSET.
192    Instead of passing around REG and OFFSET, we pass a copy
193    of this structure.  */
194 typedef struct cfa_loc GTY(())
195 {
196   HOST_WIDE_INT offset;
197   HOST_WIDE_INT base_offset;
198   unsigned int reg;
199   int indirect;            /* 1 if CFA is accessed via a dereference.  */
200 } dw_cfa_location;
201
202 /* All call frame descriptions (FDE's) in the GCC generated DWARF
203    refer to a single Common Information Entry (CIE), defined at
204    the beginning of the .debug_frame section.  This use of a single
205    CIE obviates the need to keep track of multiple CIE's
206    in the DWARF generation routines below.  */
207
208 typedef struct dw_fde_struct GTY(())
209 {
210   tree decl;
211   const char *dw_fde_begin;
212   const char *dw_fde_current_label;
213   const char *dw_fde_end;
214   const char *dw_fde_hot_section_label;
215   const char *dw_fde_hot_section_end_label;
216   const char *dw_fde_unlikely_section_label;
217   const char *dw_fde_unlikely_section_end_label;
218   bool dw_fde_switched_sections;
219   dw_cfi_ref dw_fde_cfi;
220   unsigned funcdef_number;
221   unsigned all_throwers_are_sibcalls : 1;
222   unsigned nothrow : 1;
223   unsigned uses_eh_lsda : 1;
224 }
225 dw_fde_node;
226
227 /* Maximum size (in bytes) of an artificially generated label.  */
228 #define MAX_ARTIFICIAL_LABEL_BYTES      30
229
230 /* The size of addresses as they appear in the Dwarf 2 data.
231    Some architectures use word addresses to refer to code locations,
232    but Dwarf 2 info always uses byte addresses.  On such machines,
233    Dwarf 2 addresses need to be larger than the architecture's
234    pointers.  */
235 #ifndef DWARF2_ADDR_SIZE
236 #define DWARF2_ADDR_SIZE (POINTER_SIZE / BITS_PER_UNIT)
237 #endif
238
239 /* The size in bytes of a DWARF field indicating an offset or length
240    relative to a debug info section, specified to be 4 bytes in the
241    DWARF-2 specification.  The SGI/MIPS ABI defines it to be the same
242    as PTR_SIZE.  */
243
244 #ifndef DWARF_OFFSET_SIZE
245 #define DWARF_OFFSET_SIZE 4
246 #endif
247
248 /* According to the (draft) DWARF 3 specification, the initial length
249    should either be 4 or 12 bytes.  When it's 12 bytes, the first 4
250    bytes are 0xffffffff, followed by the length stored in the next 8
251    bytes.
252
253    However, the SGI/MIPS ABI uses an initial length which is equal to
254    DWARF_OFFSET_SIZE.  It is defined (elsewhere) accordingly.  */
255
256 #ifndef DWARF_INITIAL_LENGTH_SIZE
257 #define DWARF_INITIAL_LENGTH_SIZE (DWARF_OFFSET_SIZE == 4 ? 4 : 12)
258 #endif
259
260 #define DWARF_VERSION 2
261
262 /* Round SIZE up to the nearest BOUNDARY.  */
263 #define DWARF_ROUND(SIZE,BOUNDARY) \
264   ((((SIZE) + (BOUNDARY) - 1) / (BOUNDARY)) * (BOUNDARY))
265
266 /* Offsets recorded in opcodes are a multiple of this alignment factor.  */
267 #ifndef DWARF_CIE_DATA_ALIGNMENT
268 #ifdef STACK_GROWS_DOWNWARD
269 #define DWARF_CIE_DATA_ALIGNMENT (-((int) UNITS_PER_WORD))
270 #else
271 #define DWARF_CIE_DATA_ALIGNMENT ((int) UNITS_PER_WORD)
272 #endif
273 #endif
274
275 /* A pointer to the base of a table that contains frame description
276    information for each routine.  */
277 static GTY((length ("fde_table_allocated"))) dw_fde_ref fde_table;
278
279 /* Number of elements currently allocated for fde_table.  */
280 static GTY(()) unsigned fde_table_allocated;
281
282 /* Number of elements in fde_table currently in use.  */
283 static GTY(()) unsigned fde_table_in_use;
284
285 /* Size (in elements) of increments by which we may expand the
286    fde_table.  */
287 #define FDE_TABLE_INCREMENT 256
288
289 /* A list of call frame insns for the CIE.  */
290 static GTY(()) dw_cfi_ref cie_cfi_head;
291
292 #if defined (DWARF2_DEBUGGING_INFO) || defined (DWARF2_UNWIND_INFO)
293 /* Some DWARF extensions (e.g., MIPS/SGI) implement a subprogram
294    attribute that accelerates the lookup of the FDE associated
295    with the subprogram.  This variable holds the table index of the FDE
296    associated with the current function (body) definition.  */
297 static unsigned current_funcdef_fde;
298 #endif
299
300 struct indirect_string_node GTY(())
301 {
302   const char *str;
303   unsigned int refcount;
304   unsigned int form;
305   char *label;
306 };
307
308 static GTY ((param_is (struct indirect_string_node))) htab_t debug_str_hash;
309
310 static GTY(()) int dw2_string_counter;
311 static GTY(()) unsigned long dwarf2out_cfi_label_num;
312
313 #if defined (DWARF2_DEBUGGING_INFO) || defined (DWARF2_UNWIND_INFO)
314
315 /* Forward declarations for functions defined in this file.  */
316
317 static char *stripattributes (const char *);
318 static const char *dwarf_cfi_name (unsigned);
319 static dw_cfi_ref new_cfi (void);
320 static void add_cfi (dw_cfi_ref *, dw_cfi_ref);
321 static void add_fde_cfi (const char *, dw_cfi_ref);
322 static void lookup_cfa_1 (dw_cfi_ref, dw_cfa_location *);
323 static void lookup_cfa (dw_cfa_location *);
324 static void reg_save (const char *, unsigned, unsigned, HOST_WIDE_INT);
325 static void initial_return_save (rtx);
326 static HOST_WIDE_INT stack_adjust_offset (rtx);
327 static void output_cfi (dw_cfi_ref, dw_fde_ref, int);
328 static void output_call_frame_info (int);
329 static void dwarf2out_stack_adjust (rtx, bool);
330 static void flush_queued_reg_saves (void);
331 static bool clobbers_queued_reg_save (rtx);
332 static void dwarf2out_frame_debug_expr (rtx, const char *);
333
334 /* Support for complex CFA locations.  */
335 static void output_cfa_loc (dw_cfi_ref);
336 static void get_cfa_from_loc_descr (dw_cfa_location *,
337                                     struct dw_loc_descr_struct *);
338 static struct dw_loc_descr_struct *build_cfa_loc
339  (dw_cfa_location *);
340 static void def_cfa_1 (const char *, dw_cfa_location *);
341
342 /* How to start an assembler comment.  */
343 #ifndef ASM_COMMENT_START
344 #define ASM_COMMENT_START ";#"
345 #endif
346
347 /* Data and reference forms for relocatable data.  */
348 #define DW_FORM_data (DWARF_OFFSET_SIZE == 8 ? DW_FORM_data8 : DW_FORM_data4)
349 #define DW_FORM_ref (DWARF_OFFSET_SIZE == 8 ? DW_FORM_ref8 : DW_FORM_ref4)
350
351 #ifndef DEBUG_FRAME_SECTION
352 #define DEBUG_FRAME_SECTION     ".debug_frame"
353 #endif
354
355 #ifndef FUNC_BEGIN_LABEL
356 #define FUNC_BEGIN_LABEL        "LFB"
357 #endif
358
359 #ifndef FUNC_END_LABEL
360 #define FUNC_END_LABEL          "LFE"
361 #endif
362
363 #ifndef FRAME_BEGIN_LABEL
364 #define FRAME_BEGIN_LABEL       "Lframe"
365 #endif
366 #define CIE_AFTER_SIZE_LABEL    "LSCIE"
367 #define CIE_END_LABEL           "LECIE"
368 #define FDE_LABEL               "LSFDE"
369 #define FDE_AFTER_SIZE_LABEL    "LASFDE"
370 #define FDE_END_LABEL           "LEFDE"
371 #define LINE_NUMBER_BEGIN_LABEL "LSLT"
372 #define LINE_NUMBER_END_LABEL   "LELT"
373 #define LN_PROLOG_AS_LABEL      "LASLTP"
374 #define LN_PROLOG_END_LABEL     "LELTP"
375 #define DIE_LABEL_PREFIX        "DW"
376
377 /* The DWARF 2 CFA column which tracks the return address.  Normally this
378    is the column for PC, or the first column after all of the hard
379    registers.  */
380 #ifndef DWARF_FRAME_RETURN_COLUMN
381 #ifdef PC_REGNUM
382 #define DWARF_FRAME_RETURN_COLUMN       DWARF_FRAME_REGNUM (PC_REGNUM)
383 #else
384 #define DWARF_FRAME_RETURN_COLUMN       DWARF_FRAME_REGISTERS
385 #endif
386 #endif
387
388 /* The mapping from gcc register number to DWARF 2 CFA column number.  By
389    default, we just provide columns for all registers.  */
390 #ifndef DWARF_FRAME_REGNUM
391 #define DWARF_FRAME_REGNUM(REG) DBX_REGISTER_NUMBER (REG)
392 #endif
393 \f
394 /* Hook used by __throw.  */
395
396 rtx
397 expand_builtin_dwarf_sp_column (void)
398 {
399   return GEN_INT (DWARF_FRAME_REGNUM (STACK_POINTER_REGNUM));
400 }
401
402 /* Return a pointer to a copy of the section string name S with all
403    attributes stripped off, and an asterisk prepended (for assemble_name).  */
404
405 static inline char *
406 stripattributes (const char *s)
407 {
408   char *stripped = xmalloc (strlen (s) + 2);
409   char *p = stripped;
410
411   *p++ = '*';
412
413   while (*s && *s != ',')
414     *p++ = *s++;
415
416   *p = '\0';
417   return stripped;
418 }
419
420 /* Generate code to initialize the register size table.  */
421
422 void
423 expand_builtin_init_dwarf_reg_sizes (tree address)
424 {
425   int i;
426   enum machine_mode mode = TYPE_MODE (char_type_node);
427   rtx addr = expand_expr (address, NULL_RTX, VOIDmode, 0);
428   rtx mem = gen_rtx_MEM (BLKmode, addr);
429   bool wrote_return_column = false;
430
431   for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
432     if (DWARF_FRAME_REGNUM (i) < DWARF_FRAME_REGISTERS)
433       {
434         HOST_WIDE_INT offset = DWARF_FRAME_REGNUM (i) * GET_MODE_SIZE (mode);
435         enum machine_mode save_mode = reg_raw_mode[i];
436         HOST_WIDE_INT size;
437
438         if (HARD_REGNO_CALL_PART_CLOBBERED (i, save_mode))
439           save_mode = choose_hard_reg_mode (i, 1, true);
440         if (DWARF_FRAME_REGNUM (i) == DWARF_FRAME_RETURN_COLUMN)
441           {
442             if (save_mode == VOIDmode)
443               continue;
444             wrote_return_column = true;
445           }
446         size = GET_MODE_SIZE (save_mode);
447         if (offset < 0)
448           continue;
449
450         emit_move_insn (adjust_address (mem, mode, offset),
451                         gen_int_mode (size, mode));
452       }
453
454 #ifdef DWARF_ALT_FRAME_RETURN_COLUMN
455   gcc_assert (wrote_return_column);
456   i = DWARF_ALT_FRAME_RETURN_COLUMN;
457   wrote_return_column = false;
458 #else
459   i = DWARF_FRAME_RETURN_COLUMN;
460 #endif
461
462   if (! wrote_return_column)
463     {
464       enum machine_mode save_mode = Pmode;
465       HOST_WIDE_INT offset = i * GET_MODE_SIZE (mode);
466       HOST_WIDE_INT size = GET_MODE_SIZE (save_mode);
467       emit_move_insn (adjust_address (mem, mode, offset), GEN_INT (size));
468     }
469 }
470
471 /* Convert a DWARF call frame info. operation to its string name */
472
473 static const char *
474 dwarf_cfi_name (unsigned int cfi_opc)
475 {
476   switch (cfi_opc)
477     {
478     case DW_CFA_advance_loc:
479       return "DW_CFA_advance_loc";
480     case DW_CFA_offset:
481       return "DW_CFA_offset";
482     case DW_CFA_restore:
483       return "DW_CFA_restore";
484     case DW_CFA_nop:
485       return "DW_CFA_nop";
486     case DW_CFA_set_loc:
487       return "DW_CFA_set_loc";
488     case DW_CFA_advance_loc1:
489       return "DW_CFA_advance_loc1";
490     case DW_CFA_advance_loc2:
491       return "DW_CFA_advance_loc2";
492     case DW_CFA_advance_loc4:
493       return "DW_CFA_advance_loc4";
494     case DW_CFA_offset_extended:
495       return "DW_CFA_offset_extended";
496     case DW_CFA_restore_extended:
497       return "DW_CFA_restore_extended";
498     case DW_CFA_undefined:
499       return "DW_CFA_undefined";
500     case DW_CFA_same_value:
501       return "DW_CFA_same_value";
502     case DW_CFA_register:
503       return "DW_CFA_register";
504     case DW_CFA_remember_state:
505       return "DW_CFA_remember_state";
506     case DW_CFA_restore_state:
507       return "DW_CFA_restore_state";
508     case DW_CFA_def_cfa:
509       return "DW_CFA_def_cfa";
510     case DW_CFA_def_cfa_register:
511       return "DW_CFA_def_cfa_register";
512     case DW_CFA_def_cfa_offset:
513       return "DW_CFA_def_cfa_offset";
514
515     /* DWARF 3 */
516     case DW_CFA_def_cfa_expression:
517       return "DW_CFA_def_cfa_expression";
518     case DW_CFA_expression:
519       return "DW_CFA_expression";
520     case DW_CFA_offset_extended_sf:
521       return "DW_CFA_offset_extended_sf";
522     case DW_CFA_def_cfa_sf:
523       return "DW_CFA_def_cfa_sf";
524     case DW_CFA_def_cfa_offset_sf:
525       return "DW_CFA_def_cfa_offset_sf";
526
527     /* SGI/MIPS specific */
528     case DW_CFA_MIPS_advance_loc8:
529       return "DW_CFA_MIPS_advance_loc8";
530
531     /* GNU extensions */
532     case DW_CFA_GNU_window_save:
533       return "DW_CFA_GNU_window_save";
534     case DW_CFA_GNU_args_size:
535       return "DW_CFA_GNU_args_size";
536     case DW_CFA_GNU_negative_offset_extended:
537       return "DW_CFA_GNU_negative_offset_extended";
538
539     default:
540       return "DW_CFA_<unknown>";
541     }
542 }
543
544 /* Return a pointer to a newly allocated Call Frame Instruction.  */
545
546 static inline dw_cfi_ref
547 new_cfi (void)
548 {
549   dw_cfi_ref cfi = ggc_alloc (sizeof (dw_cfi_node));
550
551   cfi->dw_cfi_next = NULL;
552   cfi->dw_cfi_oprnd1.dw_cfi_reg_num = 0;
553   cfi->dw_cfi_oprnd2.dw_cfi_reg_num = 0;
554
555   return cfi;
556 }
557
558 /* Add a Call Frame Instruction to list of instructions.  */
559
560 static inline void
561 add_cfi (dw_cfi_ref *list_head, dw_cfi_ref cfi)
562 {
563   dw_cfi_ref *p;
564
565   /* Find the end of the chain.  */
566   for (p = list_head; (*p) != NULL; p = &(*p)->dw_cfi_next)
567     ;
568
569   *p = cfi;
570 }
571
572 /* Generate a new label for the CFI info to refer to.  */
573
574 char *
575 dwarf2out_cfi_label (void)
576 {
577   static char label[20];
578
579   ASM_GENERATE_INTERNAL_LABEL (label, "LCFI", dwarf2out_cfi_label_num++);
580   ASM_OUTPUT_LABEL (asm_out_file, label);
581   return label;
582 }
583
584 /* Add CFI to the current fde at the PC value indicated by LABEL if specified,
585    or to the CIE if LABEL is NULL.  */
586
587 static void
588 add_fde_cfi (const char *label, dw_cfi_ref cfi)
589 {
590   if (label)
591     {
592       dw_fde_ref fde = &fde_table[fde_table_in_use - 1];
593
594       if (*label == 0)
595         label = dwarf2out_cfi_label ();
596
597       if (fde->dw_fde_current_label == NULL
598           || strcmp (label, fde->dw_fde_current_label) != 0)
599         {
600           dw_cfi_ref xcfi;
601
602           fde->dw_fde_current_label = label = xstrdup (label);
603
604           /* Set the location counter to the new label.  */
605           xcfi = new_cfi ();
606           xcfi->dw_cfi_opc = DW_CFA_advance_loc4;
607           xcfi->dw_cfi_oprnd1.dw_cfi_addr = label;
608           add_cfi (&fde->dw_fde_cfi, xcfi);
609         }
610
611       add_cfi (&fde->dw_fde_cfi, cfi);
612     }
613
614   else
615     add_cfi (&cie_cfi_head, cfi);
616 }
617
618 /* Subroutine of lookup_cfa.  */
619
620 static void
621 lookup_cfa_1 (dw_cfi_ref cfi, dw_cfa_location *loc)
622 {
623   switch (cfi->dw_cfi_opc)
624     {
625     case DW_CFA_def_cfa_offset:
626       loc->offset = cfi->dw_cfi_oprnd1.dw_cfi_offset;
627       break;
628     case DW_CFA_def_cfa_offset_sf:
629       loc->offset
630         = cfi->dw_cfi_oprnd1.dw_cfi_offset * DWARF_CIE_DATA_ALIGNMENT;
631       break;
632     case DW_CFA_def_cfa_register:
633       loc->reg = cfi->dw_cfi_oprnd1.dw_cfi_reg_num;
634       break;
635     case DW_CFA_def_cfa:
636       loc->reg = cfi->dw_cfi_oprnd1.dw_cfi_reg_num;
637       loc->offset = cfi->dw_cfi_oprnd2.dw_cfi_offset;
638       break;
639     case DW_CFA_def_cfa_sf:
640       loc->reg = cfi->dw_cfi_oprnd1.dw_cfi_reg_num;
641       loc->offset
642         = cfi->dw_cfi_oprnd2.dw_cfi_offset * DWARF_CIE_DATA_ALIGNMENT;
643       break;
644     case DW_CFA_def_cfa_expression:
645       get_cfa_from_loc_descr (loc, cfi->dw_cfi_oprnd1.dw_cfi_loc);
646       break;
647     default:
648       break;
649     }
650 }
651
652 /* Find the previous value for the CFA.  */
653
654 static void
655 lookup_cfa (dw_cfa_location *loc)
656 {
657   dw_cfi_ref cfi;
658
659   loc->reg = INVALID_REGNUM;
660   loc->offset = 0;
661   loc->indirect = 0;
662   loc->base_offset = 0;
663
664   for (cfi = cie_cfi_head; cfi; cfi = cfi->dw_cfi_next)
665     lookup_cfa_1 (cfi, loc);
666
667   if (fde_table_in_use)
668     {
669       dw_fde_ref fde = &fde_table[fde_table_in_use - 1];
670       for (cfi = fde->dw_fde_cfi; cfi; cfi = cfi->dw_cfi_next)
671         lookup_cfa_1 (cfi, loc);
672     }
673 }
674
675 /* The current rule for calculating the DWARF2 canonical frame address.  */
676 static dw_cfa_location cfa;
677
678 /* The register used for saving registers to the stack, and its offset
679    from the CFA.  */
680 static dw_cfa_location cfa_store;
681
682 /* The running total of the size of arguments pushed onto the stack.  */
683 static HOST_WIDE_INT args_size;
684
685 /* The last args_size we actually output.  */
686 static HOST_WIDE_INT old_args_size;
687
688 /* Entry point to update the canonical frame address (CFA).
689    LABEL is passed to add_fde_cfi.  The value of CFA is now to be
690    calculated from REG+OFFSET.  */
691
692 void
693 dwarf2out_def_cfa (const char *label, unsigned int reg, HOST_WIDE_INT offset)
694 {
695   dw_cfa_location loc;
696   loc.indirect = 0;
697   loc.base_offset = 0;
698   loc.reg = reg;
699   loc.offset = offset;
700   def_cfa_1 (label, &loc);
701 }
702
703 /* Determine if two dw_cfa_location structures define the same data.  */
704
705 static bool
706 cfa_equal_p (const dw_cfa_location *loc1, const dw_cfa_location *loc2)
707 {
708   return (loc1->reg == loc2->reg
709           && loc1->offset == loc2->offset
710           && loc1->indirect == loc2->indirect
711           && (loc1->indirect == 0
712               || loc1->base_offset == loc2->base_offset));
713 }
714
715 /* This routine does the actual work.  The CFA is now calculated from
716    the dw_cfa_location structure.  */
717
718 static void
719 def_cfa_1 (const char *label, dw_cfa_location *loc_p)
720 {
721   dw_cfi_ref cfi;
722   dw_cfa_location old_cfa, loc;
723
724   cfa = *loc_p;
725   loc = *loc_p;
726
727   if (cfa_store.reg == loc.reg && loc.indirect == 0)
728     cfa_store.offset = loc.offset;
729
730   loc.reg = DWARF_FRAME_REGNUM (loc.reg);
731   lookup_cfa (&old_cfa);
732
733   /* If nothing changed, no need to issue any call frame instructions.  */
734   if (cfa_equal_p (&loc, &old_cfa))
735     return;
736
737   cfi = new_cfi ();
738
739   if (loc.reg == old_cfa.reg && !loc.indirect)
740     {
741       /* Construct a "DW_CFA_def_cfa_offset <offset>" instruction, indicating
742          the CFA register did not change but the offset did.  */
743       if (loc.offset < 0)
744         {
745           HOST_WIDE_INT f_offset = loc.offset / DWARF_CIE_DATA_ALIGNMENT;
746           gcc_assert (f_offset * DWARF_CIE_DATA_ALIGNMENT == loc.offset);
747
748           cfi->dw_cfi_opc = DW_CFA_def_cfa_offset_sf;
749           cfi->dw_cfi_oprnd1.dw_cfi_offset = f_offset;
750         }
751       else
752         {
753           cfi->dw_cfi_opc = DW_CFA_def_cfa_offset;
754           cfi->dw_cfi_oprnd1.dw_cfi_offset = loc.offset;
755         }
756     }
757
758 #ifndef MIPS_DEBUGGING_INFO  /* SGI dbx thinks this means no offset.  */
759   else if (loc.offset == old_cfa.offset
760            && old_cfa.reg != INVALID_REGNUM
761            && !loc.indirect)
762     {
763       /* Construct a "DW_CFA_def_cfa_register <register>" instruction,
764          indicating the CFA register has changed to <register> but the
765          offset has not changed.  */
766       cfi->dw_cfi_opc = DW_CFA_def_cfa_register;
767       cfi->dw_cfi_oprnd1.dw_cfi_reg_num = loc.reg;
768     }
769 #endif
770
771   else if (loc.indirect == 0)
772     {
773       /* Construct a "DW_CFA_def_cfa <register> <offset>" instruction,
774          indicating the CFA register has changed to <register> with
775          the specified offset.  */
776       if (loc.offset < 0)
777         {
778           HOST_WIDE_INT f_offset = loc.offset / DWARF_CIE_DATA_ALIGNMENT;
779           gcc_assert (f_offset * DWARF_CIE_DATA_ALIGNMENT == loc.offset);
780
781           cfi->dw_cfi_opc = DW_CFA_def_cfa_sf;
782           cfi->dw_cfi_oprnd1.dw_cfi_reg_num = loc.reg;
783           cfi->dw_cfi_oprnd2.dw_cfi_offset = f_offset;
784         }
785       else
786         {
787           cfi->dw_cfi_opc = DW_CFA_def_cfa;
788           cfi->dw_cfi_oprnd1.dw_cfi_reg_num = loc.reg;
789           cfi->dw_cfi_oprnd2.dw_cfi_offset = loc.offset;
790         }
791     }
792   else
793     {
794       /* Construct a DW_CFA_def_cfa_expression instruction to
795          calculate the CFA using a full location expression since no
796          register-offset pair is available.  */
797       struct dw_loc_descr_struct *loc_list;
798
799       cfi->dw_cfi_opc = DW_CFA_def_cfa_expression;
800       loc_list = build_cfa_loc (&loc);
801       cfi->dw_cfi_oprnd1.dw_cfi_loc = loc_list;
802     }
803
804   add_fde_cfi (label, cfi);
805 }
806
807 /* Add the CFI for saving a register.  REG is the CFA column number.
808    LABEL is passed to add_fde_cfi.
809    If SREG is -1, the register is saved at OFFSET from the CFA;
810    otherwise it is saved in SREG.  */
811
812 static void
813 reg_save (const char *label, unsigned int reg, unsigned int sreg, HOST_WIDE_INT offset)
814 {
815   dw_cfi_ref cfi = new_cfi ();
816
817   cfi->dw_cfi_oprnd1.dw_cfi_reg_num = reg;
818
819   if (sreg == INVALID_REGNUM)
820     {
821       if (reg & ~0x3f)
822         /* The register number won't fit in 6 bits, so we have to use
823            the long form.  */
824         cfi->dw_cfi_opc = DW_CFA_offset_extended;
825       else
826         cfi->dw_cfi_opc = DW_CFA_offset;
827
828 #ifdef ENABLE_CHECKING
829       {
830         /* If we get an offset that is not a multiple of
831            DWARF_CIE_DATA_ALIGNMENT, there is either a bug in the
832            definition of DWARF_CIE_DATA_ALIGNMENT, or a bug in the machine
833            description.  */
834         HOST_WIDE_INT check_offset = offset / DWARF_CIE_DATA_ALIGNMENT;
835
836         gcc_assert (check_offset * DWARF_CIE_DATA_ALIGNMENT == offset);
837       }
838 #endif
839       offset /= DWARF_CIE_DATA_ALIGNMENT;
840       if (offset < 0)
841         cfi->dw_cfi_opc = DW_CFA_offset_extended_sf;
842
843       cfi->dw_cfi_oprnd2.dw_cfi_offset = offset;
844     }
845   else if (sreg == reg)
846     cfi->dw_cfi_opc = DW_CFA_same_value;
847   else
848     {
849       cfi->dw_cfi_opc = DW_CFA_register;
850       cfi->dw_cfi_oprnd2.dw_cfi_reg_num = sreg;
851     }
852
853   add_fde_cfi (label, cfi);
854 }
855
856 /* Add the CFI for saving a register window.  LABEL is passed to reg_save.
857    This CFI tells the unwinder that it needs to restore the window registers
858    from the previous frame's window save area.
859
860    ??? Perhaps we should note in the CIE where windows are saved (instead of
861    assuming 0(cfa)) and what registers are in the window.  */
862
863 void
864 dwarf2out_window_save (const char *label)
865 {
866   dw_cfi_ref cfi = new_cfi ();
867
868   cfi->dw_cfi_opc = DW_CFA_GNU_window_save;
869   add_fde_cfi (label, cfi);
870 }
871
872 /* Add a CFI to update the running total of the size of arguments
873    pushed onto the stack.  */
874
875 void
876 dwarf2out_args_size (const char *label, HOST_WIDE_INT size)
877 {
878   dw_cfi_ref cfi;
879
880   if (size == old_args_size)
881     return;
882
883   old_args_size = size;
884
885   cfi = new_cfi ();
886   cfi->dw_cfi_opc = DW_CFA_GNU_args_size;
887   cfi->dw_cfi_oprnd1.dw_cfi_offset = size;
888   add_fde_cfi (label, cfi);
889 }
890
891 /* Entry point for saving a register to the stack.  REG is the GCC register
892    number.  LABEL and OFFSET are passed to reg_save.  */
893
894 void
895 dwarf2out_reg_save (const char *label, unsigned int reg, HOST_WIDE_INT offset)
896 {
897   reg_save (label, DWARF_FRAME_REGNUM (reg), INVALID_REGNUM, offset);
898 }
899
900 /* Entry point for saving the return address in the stack.
901    LABEL and OFFSET are passed to reg_save.  */
902
903 void
904 dwarf2out_return_save (const char *label, HOST_WIDE_INT offset)
905 {
906   reg_save (label, DWARF_FRAME_RETURN_COLUMN, INVALID_REGNUM, offset);
907 }
908
909 /* Entry point for saving the return address in a register.
910    LABEL and SREG are passed to reg_save.  */
911
912 void
913 dwarf2out_return_reg (const char *label, unsigned int sreg)
914 {
915   reg_save (label, DWARF_FRAME_RETURN_COLUMN, DWARF_FRAME_REGNUM (sreg), 0);
916 }
917
918 /* Record the initial position of the return address.  RTL is
919    INCOMING_RETURN_ADDR_RTX.  */
920
921 static void
922 initial_return_save (rtx rtl)
923 {
924   unsigned int reg = INVALID_REGNUM;
925   HOST_WIDE_INT offset = 0;
926
927   switch (GET_CODE (rtl))
928     {
929     case REG:
930       /* RA is in a register.  */
931       reg = DWARF_FRAME_REGNUM (REGNO (rtl));
932       break;
933
934     case MEM:
935       /* RA is on the stack.  */
936       rtl = XEXP (rtl, 0);
937       switch (GET_CODE (rtl))
938         {
939         case REG:
940           gcc_assert (REGNO (rtl) == STACK_POINTER_REGNUM);
941           offset = 0;
942           break;
943
944         case PLUS:
945           gcc_assert (REGNO (XEXP (rtl, 0)) == STACK_POINTER_REGNUM);
946           offset = INTVAL (XEXP (rtl, 1));
947           break;
948
949         case MINUS:
950           gcc_assert (REGNO (XEXP (rtl, 0)) == STACK_POINTER_REGNUM);
951           offset = -INTVAL (XEXP (rtl, 1));
952           break;
953
954         default:
955           gcc_unreachable ();
956         }
957
958       break;
959
960     case PLUS:
961       /* The return address is at some offset from any value we can
962          actually load.  For instance, on the SPARC it is in %i7+8. Just
963          ignore the offset for now; it doesn't matter for unwinding frames.  */
964       gcc_assert (GET_CODE (XEXP (rtl, 1)) == CONST_INT);
965       initial_return_save (XEXP (rtl, 0));
966       return;
967
968     default:
969       gcc_unreachable ();
970     }
971
972   if (reg != DWARF_FRAME_RETURN_COLUMN)
973     reg_save (NULL, DWARF_FRAME_RETURN_COLUMN, reg, offset - cfa.offset);
974 }
975
976 /* Given a SET, calculate the amount of stack adjustment it
977    contains.  */
978
979 static HOST_WIDE_INT
980 stack_adjust_offset (rtx pattern)
981 {
982   rtx src = SET_SRC (pattern);
983   rtx dest = SET_DEST (pattern);
984   HOST_WIDE_INT offset = 0;
985   enum rtx_code code;
986
987   if (dest == stack_pointer_rtx)
988     {
989       /* (set (reg sp) (plus (reg sp) (const_int))) */
990       code = GET_CODE (src);
991       if (! (code == PLUS || code == MINUS)
992           || XEXP (src, 0) != stack_pointer_rtx
993           || GET_CODE (XEXP (src, 1)) != CONST_INT)
994         return 0;
995
996       offset = INTVAL (XEXP (src, 1));
997       if (code == PLUS)
998         offset = -offset;
999     }
1000   else if (MEM_P (dest))
1001     {
1002       /* (set (mem (pre_dec (reg sp))) (foo)) */
1003       src = XEXP (dest, 0);
1004       code = GET_CODE (src);
1005
1006       switch (code)
1007         {
1008         case PRE_MODIFY:
1009         case POST_MODIFY:
1010           if (XEXP (src, 0) == stack_pointer_rtx)
1011             {
1012               rtx val = XEXP (XEXP (src, 1), 1);
1013               /* We handle only adjustments by constant amount.  */
1014               gcc_assert (GET_CODE (XEXP (src, 1)) == PLUS
1015                           && GET_CODE (val) == CONST_INT);
1016               offset = -INTVAL (val);
1017               break;
1018             }
1019           return 0;
1020
1021         case PRE_DEC:
1022         case POST_DEC:
1023           if (XEXP (src, 0) == stack_pointer_rtx)
1024             {
1025               offset = GET_MODE_SIZE (GET_MODE (dest));
1026               break;
1027             }
1028           return 0;
1029
1030         case PRE_INC:
1031         case POST_INC:
1032           if (XEXP (src, 0) == stack_pointer_rtx)
1033             {
1034               offset = -GET_MODE_SIZE (GET_MODE (dest));
1035               break;
1036             }
1037           return 0;
1038
1039         default:
1040           return 0;
1041         }
1042     }
1043   else
1044     return 0;
1045
1046   return offset;
1047 }
1048
1049 /* Check INSN to see if it looks like a push or a stack adjustment, and
1050    make a note of it if it does.  EH uses this information to find out how
1051    much extra space it needs to pop off the stack.  */
1052
1053 static void
1054 dwarf2out_stack_adjust (rtx insn, bool after_p)
1055 {
1056   HOST_WIDE_INT offset;
1057   const char *label;
1058   int i;
1059
1060   /* Don't handle epilogues at all.  Certainly it would be wrong to do so
1061      with this function.  Proper support would require all frame-related
1062      insns to be marked, and to be able to handle saving state around
1063      epilogues textually in the middle of the function.  */
1064   if (prologue_epilogue_contains (insn) || sibcall_epilogue_contains (insn))
1065     return;
1066
1067   /* If only calls can throw, and we have a frame pointer,
1068      save up adjustments until we see the CALL_INSN.  */
1069   if (!flag_asynchronous_unwind_tables && cfa.reg != STACK_POINTER_REGNUM)
1070     {
1071       if (CALL_P (insn) && !after_p)
1072         {
1073           /* Extract the size of the args from the CALL rtx itself.  */
1074           insn = PATTERN (insn);
1075           if (GET_CODE (insn) == PARALLEL)
1076             insn = XVECEXP (insn, 0, 0);
1077           if (GET_CODE (insn) == SET)
1078             insn = SET_SRC (insn);
1079           gcc_assert (GET_CODE (insn) == CALL);
1080           dwarf2out_args_size ("", INTVAL (XEXP (insn, 1)));
1081         }
1082       return;
1083     }
1084
1085   if (CALL_P (insn) && !after_p)
1086     {
1087       if (!flag_asynchronous_unwind_tables)
1088         dwarf2out_args_size ("", args_size);
1089       return;
1090     }
1091   else if (BARRIER_P (insn))
1092     {
1093       /* When we see a BARRIER, we know to reset args_size to 0.  Usually
1094          the compiler will have already emitted a stack adjustment, but
1095          doesn't bother for calls to noreturn functions.  */
1096 #ifdef STACK_GROWS_DOWNWARD
1097       offset = -args_size;
1098 #else
1099       offset = args_size;
1100 #endif
1101     }
1102   else if (GET_CODE (PATTERN (insn)) == SET)
1103     offset = stack_adjust_offset (PATTERN (insn));
1104   else if (GET_CODE (PATTERN (insn)) == PARALLEL
1105            || GET_CODE (PATTERN (insn)) == SEQUENCE)
1106     {
1107       /* There may be stack adjustments inside compound insns.  Search
1108          for them.  */
1109       for (offset = 0, i = XVECLEN (PATTERN (insn), 0) - 1; i >= 0; i--)
1110         if (GET_CODE (XVECEXP (PATTERN (insn), 0, i)) == SET)
1111           offset += stack_adjust_offset (XVECEXP (PATTERN (insn), 0, i));
1112     }
1113   else
1114     return;
1115
1116   if (offset == 0)
1117     return;
1118
1119   if (cfa.reg == STACK_POINTER_REGNUM)
1120     cfa.offset += offset;
1121
1122 #ifndef STACK_GROWS_DOWNWARD
1123   offset = -offset;
1124 #endif
1125
1126   args_size += offset;
1127   if (args_size < 0)
1128     args_size = 0;
1129
1130   label = dwarf2out_cfi_label ();
1131   def_cfa_1 (label, &cfa);
1132   if (flag_asynchronous_unwind_tables)
1133     dwarf2out_args_size (label, args_size);
1134 }
1135
1136 #endif
1137
1138 /* We delay emitting a register save until either (a) we reach the end
1139    of the prologue or (b) the register is clobbered.  This clusters
1140    register saves so that there are fewer pc advances.  */
1141
1142 struct queued_reg_save GTY(())
1143 {
1144   struct queued_reg_save *next;
1145   rtx reg;
1146   HOST_WIDE_INT cfa_offset;
1147   rtx saved_reg;
1148 };
1149
1150 static GTY(()) struct queued_reg_save *queued_reg_saves;
1151
1152 /* The caller's ORIG_REG is saved in SAVED_IN_REG.  */
1153 struct reg_saved_in_data GTY(()) {
1154   rtx orig_reg;
1155   rtx saved_in_reg;
1156 };
1157
1158 /* A list of registers saved in other registers.
1159    The list intentionally has a small maximum capacity of 4; if your
1160    port needs more than that, you might consider implementing a
1161    more efficient data structure.  */
1162 static GTY(()) struct reg_saved_in_data regs_saved_in_regs[4];
1163 static GTY(()) size_t num_regs_saved_in_regs;
1164
1165 #if defined (DWARF2_DEBUGGING_INFO) || defined (DWARF2_UNWIND_INFO)
1166 static const char *last_reg_save_label;
1167
1168 /* Add an entry to QUEUED_REG_SAVES saying that REG is now saved at
1169    SREG, or if SREG is NULL then it is saved at OFFSET to the CFA.  */
1170
1171 static void
1172 queue_reg_save (const char *label, rtx reg, rtx sreg, HOST_WIDE_INT offset)
1173 {
1174   struct queued_reg_save *q;
1175
1176   /* Duplicates waste space, but it's also necessary to remove them
1177      for correctness, since the queue gets output in reverse
1178      order.  */
1179   for (q = queued_reg_saves; q != NULL; q = q->next)
1180     if (REGNO (q->reg) == REGNO (reg))
1181       break;
1182
1183   if (q == NULL)
1184     {
1185       q = ggc_alloc (sizeof (*q));
1186       q->next = queued_reg_saves;
1187       queued_reg_saves = q;
1188     }
1189
1190   q->reg = reg;
1191   q->cfa_offset = offset;
1192   q->saved_reg = sreg;
1193
1194   last_reg_save_label = label;
1195 }
1196
1197 /* Output all the entries in QUEUED_REG_SAVES.  */
1198
1199 static void
1200 flush_queued_reg_saves (void)
1201 {
1202   struct queued_reg_save *q;
1203
1204   for (q = queued_reg_saves; q; q = q->next)
1205     {
1206       size_t i;
1207       unsigned int reg, sreg;
1208
1209       for (i = 0; i < num_regs_saved_in_regs; i++)
1210         if (REGNO (regs_saved_in_regs[i].orig_reg) == REGNO (q->reg))
1211           break;
1212       if (q->saved_reg && i == num_regs_saved_in_regs)
1213         {
1214           gcc_assert (i != ARRAY_SIZE (regs_saved_in_regs));
1215           num_regs_saved_in_regs++;
1216         }
1217       if (i != num_regs_saved_in_regs)
1218         {
1219           regs_saved_in_regs[i].orig_reg = q->reg;
1220           regs_saved_in_regs[i].saved_in_reg = q->saved_reg;
1221         }
1222
1223       reg = DWARF_FRAME_REGNUM (REGNO (q->reg));
1224       if (q->saved_reg)
1225         sreg = DWARF_FRAME_REGNUM (REGNO (q->saved_reg));
1226       else
1227         sreg = INVALID_REGNUM;
1228       reg_save (last_reg_save_label, reg, sreg, q->cfa_offset);
1229     }
1230
1231   queued_reg_saves = NULL;
1232   last_reg_save_label = NULL;
1233 }
1234
1235 /* Does INSN clobber any register which QUEUED_REG_SAVES lists a saved
1236    location for?  Or, does it clobber a register which we've previously
1237    said that some other register is saved in, and for which we now
1238    have a new location for?  */
1239
1240 static bool
1241 clobbers_queued_reg_save (rtx insn)
1242 {
1243   struct queued_reg_save *q;
1244
1245   for (q = queued_reg_saves; q; q = q->next)
1246     {
1247       size_t i;
1248       if (modified_in_p (q->reg, insn))
1249         return true;
1250       for (i = 0; i < num_regs_saved_in_regs; i++)
1251         if (REGNO (q->reg) == REGNO (regs_saved_in_regs[i].orig_reg)
1252             && modified_in_p (regs_saved_in_regs[i].saved_in_reg, insn))
1253           return true;
1254     }
1255
1256   return false;
1257 }
1258
1259 /* Entry point for saving the first register into the second.  */
1260
1261 void
1262 dwarf2out_reg_save_reg (const char *label, rtx reg, rtx sreg)
1263 {
1264   size_t i;
1265   unsigned int regno, sregno;
1266
1267   for (i = 0; i < num_regs_saved_in_regs; i++)
1268     if (REGNO (regs_saved_in_regs[i].orig_reg) == REGNO (reg))
1269       break;
1270   if (i == num_regs_saved_in_regs)
1271     {
1272       gcc_assert (i != ARRAY_SIZE (regs_saved_in_regs));
1273       num_regs_saved_in_regs++;
1274     }
1275   regs_saved_in_regs[i].orig_reg = reg;
1276   regs_saved_in_regs[i].saved_in_reg = sreg;
1277
1278   regno = DWARF_FRAME_REGNUM (REGNO (reg));
1279   sregno = DWARF_FRAME_REGNUM (REGNO (sreg));
1280   reg_save (label, regno, sregno, 0);
1281 }
1282
1283 /* What register, if any, is currently saved in REG?  */
1284
1285 static rtx
1286 reg_saved_in (rtx reg)
1287 {
1288   unsigned int regn = REGNO (reg);
1289   size_t i;
1290   struct queued_reg_save *q;
1291
1292   for (q = queued_reg_saves; q; q = q->next)
1293     if (q->saved_reg && regn == REGNO (q->saved_reg))
1294       return q->reg;
1295
1296   for (i = 0; i < num_regs_saved_in_regs; i++)
1297     if (regs_saved_in_regs[i].saved_in_reg
1298         && regn == REGNO (regs_saved_in_regs[i].saved_in_reg))
1299       return regs_saved_in_regs[i].orig_reg;
1300
1301   return NULL_RTX;
1302 }
1303
1304
1305 /* A temporary register holding an integral value used in adjusting SP
1306    or setting up the store_reg.  The "offset" field holds the integer
1307    value, not an offset.  */
1308 static dw_cfa_location cfa_temp;
1309
1310 /* Record call frame debugging information for an expression EXPR,
1311    which either sets SP or FP (adjusting how we calculate the frame
1312    address) or saves a register to the stack or another register.
1313    LABEL indicates the address of EXPR.
1314
1315    This function encodes a state machine mapping rtxes to actions on
1316    cfa, cfa_store, and cfa_temp.reg.  We describe these rules so
1317    users need not read the source code.
1318
1319   The High-Level Picture
1320
1321   Changes in the register we use to calculate the CFA: Currently we
1322   assume that if you copy the CFA register into another register, we
1323   should take the other one as the new CFA register; this seems to
1324   work pretty well.  If it's wrong for some target, it's simple
1325   enough not to set RTX_FRAME_RELATED_P on the insn in question.
1326
1327   Changes in the register we use for saving registers to the stack:
1328   This is usually SP, but not always.  Again, we deduce that if you
1329   copy SP into another register (and SP is not the CFA register),
1330   then the new register is the one we will be using for register
1331   saves.  This also seems to work.
1332
1333   Register saves: There's not much guesswork about this one; if
1334   RTX_FRAME_RELATED_P is set on an insn which modifies memory, it's a
1335   register save, and the register used to calculate the destination
1336   had better be the one we think we're using for this purpose.
1337   It's also assumed that a copy from a call-saved register to another
1338   register is saving that register if RTX_FRAME_RELATED_P is set on
1339   that instruction.  If the copy is from a call-saved register to
1340   the *same* register, that means that the register is now the same
1341   value as in the caller.
1342
1343   Except: If the register being saved is the CFA register, and the
1344   offset is nonzero, we are saving the CFA, so we assume we have to
1345   use DW_CFA_def_cfa_expression.  If the offset is 0, we assume that
1346   the intent is to save the value of SP from the previous frame.
1347
1348   In addition, if a register has previously been saved to a different
1349   register,
1350
1351   Invariants / Summaries of Rules
1352
1353   cfa          current rule for calculating the CFA.  It usually
1354                consists of a register and an offset.
1355   cfa_store    register used by prologue code to save things to the stack
1356                cfa_store.offset is the offset from the value of
1357                cfa_store.reg to the actual CFA
1358   cfa_temp     register holding an integral value.  cfa_temp.offset
1359                stores the value, which will be used to adjust the
1360                stack pointer.  cfa_temp is also used like cfa_store,
1361                to track stores to the stack via fp or a temp reg.
1362
1363   Rules  1- 4: Setting a register's value to cfa.reg or an expression
1364                with cfa.reg as the first operand changes the cfa.reg and its
1365                cfa.offset.  Rule 1 and 4 also set cfa_temp.reg and
1366                cfa_temp.offset.
1367
1368   Rules  6- 9: Set a non-cfa.reg register value to a constant or an
1369                expression yielding a constant.  This sets cfa_temp.reg
1370                and cfa_temp.offset.
1371
1372   Rule 5:      Create a new register cfa_store used to save items to the
1373                stack.
1374
1375   Rules 10-14: Save a register to the stack.  Define offset as the
1376                difference of the original location and cfa_store's
1377                location (or cfa_temp's location if cfa_temp is used).
1378
1379   The Rules
1380
1381   "{a,b}" indicates a choice of a xor b.
1382   "<reg>:cfa.reg" indicates that <reg> must equal cfa.reg.
1383
1384   Rule 1:
1385   (set <reg1> <reg2>:cfa.reg)
1386   effects: cfa.reg = <reg1>
1387            cfa.offset unchanged
1388            cfa_temp.reg = <reg1>
1389            cfa_temp.offset = cfa.offset
1390
1391   Rule 2:
1392   (set sp ({minus,plus,losum} {sp,fp}:cfa.reg
1393                               {<const_int>,<reg>:cfa_temp.reg}))
1394   effects: cfa.reg = sp if fp used
1395            cfa.offset += {+/- <const_int>, cfa_temp.offset} if cfa.reg==sp
1396            cfa_store.offset += {+/- <const_int>, cfa_temp.offset}
1397              if cfa_store.reg==sp
1398
1399   Rule 3:
1400   (set fp ({minus,plus,losum} <reg>:cfa.reg <const_int>))
1401   effects: cfa.reg = fp
1402            cfa_offset += +/- <const_int>
1403
1404   Rule 4:
1405   (set <reg1> ({plus,losum} <reg2>:cfa.reg <const_int>))
1406   constraints: <reg1> != fp
1407                <reg1> != sp
1408   effects: cfa.reg = <reg1>
1409            cfa_temp.reg = <reg1>
1410            cfa_temp.offset = cfa.offset
1411
1412   Rule 5:
1413   (set <reg1> (plus <reg2>:cfa_temp.reg sp:cfa.reg))
1414   constraints: <reg1> != fp
1415                <reg1> != sp
1416   effects: cfa_store.reg = <reg1>
1417            cfa_store.offset = cfa.offset - cfa_temp.offset
1418
1419   Rule 6:
1420   (set <reg> <const_int>)
1421   effects: cfa_temp.reg = <reg>
1422            cfa_temp.offset = <const_int>
1423
1424   Rule 7:
1425   (set <reg1>:cfa_temp.reg (ior <reg2>:cfa_temp.reg <const_int>))
1426   effects: cfa_temp.reg = <reg1>
1427            cfa_temp.offset |= <const_int>
1428
1429   Rule 8:
1430   (set <reg> (high <exp>))
1431   effects: none
1432
1433   Rule 9:
1434   (set <reg> (lo_sum <exp> <const_int>))
1435   effects: cfa_temp.reg = <reg>
1436            cfa_temp.offset = <const_int>
1437
1438   Rule 10:
1439   (set (mem (pre_modify sp:cfa_store (???? <reg1> <const_int>))) <reg2>)
1440   effects: cfa_store.offset -= <const_int>
1441            cfa.offset = cfa_store.offset if cfa.reg == sp
1442            cfa.reg = sp
1443            cfa.base_offset = -cfa_store.offset
1444
1445   Rule 11:
1446   (set (mem ({pre_inc,pre_dec} sp:cfa_store.reg)) <reg>)
1447   effects: cfa_store.offset += -/+ mode_size(mem)
1448            cfa.offset = cfa_store.offset if cfa.reg == sp
1449            cfa.reg = sp
1450            cfa.base_offset = -cfa_store.offset
1451
1452   Rule 12:
1453   (set (mem ({minus,plus,losum} <reg1>:{cfa_store,cfa_temp} <const_int>))
1454
1455        <reg2>)
1456   effects: cfa.reg = <reg1>
1457            cfa.base_offset = -/+ <const_int> - {cfa_store,cfa_temp}.offset
1458
1459   Rule 13:
1460   (set (mem <reg1>:{cfa_store,cfa_temp}) <reg2>)
1461   effects: cfa.reg = <reg1>
1462            cfa.base_offset = -{cfa_store,cfa_temp}.offset
1463
1464   Rule 14:
1465   (set (mem (postinc <reg1>:cfa_temp <const_int>)) <reg2>)
1466   effects: cfa.reg = <reg1>
1467            cfa.base_offset = -cfa_temp.offset
1468            cfa_temp.offset -= mode_size(mem)
1469
1470   Rule 15:
1471   (set <reg> {unspec, unspec_volatile})
1472   effects: target-dependent  */
1473
1474 static void
1475 dwarf2out_frame_debug_expr (rtx expr, const char *label)
1476 {
1477   rtx src, dest;
1478   HOST_WIDE_INT offset;
1479
1480   /* If RTX_FRAME_RELATED_P is set on a PARALLEL, process each member of
1481      the PARALLEL independently. The first element is always processed if
1482      it is a SET. This is for backward compatibility.   Other elements
1483      are processed only if they are SETs and the RTX_FRAME_RELATED_P
1484      flag is set in them.  */
1485   if (GET_CODE (expr) == PARALLEL || GET_CODE (expr) == SEQUENCE)
1486     {
1487       int par_index;
1488       int limit = XVECLEN (expr, 0);
1489
1490       for (par_index = 0; par_index < limit; par_index++)
1491         if (GET_CODE (XVECEXP (expr, 0, par_index)) == SET
1492             && (RTX_FRAME_RELATED_P (XVECEXP (expr, 0, par_index))
1493                 || par_index == 0))
1494           dwarf2out_frame_debug_expr (XVECEXP (expr, 0, par_index), label);
1495
1496       return;
1497     }
1498
1499   gcc_assert (GET_CODE (expr) == SET);
1500
1501   src = SET_SRC (expr);
1502   dest = SET_DEST (expr);
1503
1504   if (REG_P (src))
1505     {
1506       rtx rsi = reg_saved_in (src);
1507       if (rsi)
1508         src = rsi;
1509     }
1510
1511   switch (GET_CODE (dest))
1512     {
1513     case REG:
1514       switch (GET_CODE (src))
1515         {
1516           /* Setting FP from SP.  */
1517         case REG:
1518           if (cfa.reg == (unsigned) REGNO (src))
1519             {
1520               /* Rule 1 */
1521               /* Update the CFA rule wrt SP or FP.  Make sure src is
1522                  relative to the current CFA register.
1523
1524                  We used to require that dest be either SP or FP, but the
1525                  ARM copies SP to a temporary register, and from there to
1526                  FP.  So we just rely on the backends to only set
1527                  RTX_FRAME_RELATED_P on appropriate insns.  */
1528               cfa.reg = REGNO (dest);
1529               cfa_temp.reg = cfa.reg;
1530               cfa_temp.offset = cfa.offset;
1531             }
1532           else
1533             {
1534               /* Saving a register in a register.  */
1535               gcc_assert (!fixed_regs [REGNO (dest)]
1536                           /* For the SPARC and its register window.  */
1537                           || (DWARF_FRAME_REGNUM (REGNO (src))
1538                               == DWARF_FRAME_RETURN_COLUMN));
1539               queue_reg_save (label, src, dest, 0);
1540             }
1541           break;
1542
1543         case PLUS:
1544         case MINUS:
1545         case LO_SUM:
1546           if (dest == stack_pointer_rtx)
1547             {
1548               /* Rule 2 */
1549               /* Adjusting SP.  */
1550               switch (GET_CODE (XEXP (src, 1)))
1551                 {
1552                 case CONST_INT:
1553                   offset = INTVAL (XEXP (src, 1));
1554                   break;
1555                 case REG:
1556                   gcc_assert ((unsigned) REGNO (XEXP (src, 1))
1557                               == cfa_temp.reg);
1558                   offset = cfa_temp.offset;
1559                   break;
1560                 default:
1561                   gcc_unreachable ();
1562                 }
1563
1564               if (XEXP (src, 0) == hard_frame_pointer_rtx)
1565                 {
1566                   /* Restoring SP from FP in the epilogue.  */
1567                   gcc_assert (cfa.reg == (unsigned) HARD_FRAME_POINTER_REGNUM);
1568                   cfa.reg = STACK_POINTER_REGNUM;
1569                 }
1570               else if (GET_CODE (src) == LO_SUM)
1571                 /* Assume we've set the source reg of the LO_SUM from sp.  */
1572                 ;
1573               else
1574                 gcc_assert (XEXP (src, 0) == stack_pointer_rtx);
1575
1576               if (GET_CODE (src) != MINUS)
1577                 offset = -offset;
1578               if (cfa.reg == STACK_POINTER_REGNUM)
1579                 cfa.offset += offset;
1580               if (cfa_store.reg == STACK_POINTER_REGNUM)
1581                 cfa_store.offset += offset;
1582             }
1583           else if (dest == hard_frame_pointer_rtx)
1584             {
1585               /* Rule 3 */
1586               /* Either setting the FP from an offset of the SP,
1587                  or adjusting the FP */
1588               gcc_assert (frame_pointer_needed);
1589
1590               gcc_assert (REG_P (XEXP (src, 0))
1591                           && (unsigned) REGNO (XEXP (src, 0)) == cfa.reg
1592                           && GET_CODE (XEXP (src, 1)) == CONST_INT);
1593               offset = INTVAL (XEXP (src, 1));
1594               if (GET_CODE (src) != MINUS)
1595                 offset = -offset;
1596               cfa.offset += offset;
1597               cfa.reg = HARD_FRAME_POINTER_REGNUM;
1598             }
1599           else
1600             {
1601               gcc_assert (GET_CODE (src) != MINUS);
1602
1603               /* Rule 4 */
1604               if (REG_P (XEXP (src, 0))
1605                   && REGNO (XEXP (src, 0)) == cfa.reg
1606                   && GET_CODE (XEXP (src, 1)) == CONST_INT)
1607                 {
1608                   /* Setting a temporary CFA register that will be copied
1609                      into the FP later on.  */
1610                   offset = - INTVAL (XEXP (src, 1));
1611                   cfa.offset += offset;
1612                   cfa.reg = REGNO (dest);
1613                   /* Or used to save regs to the stack.  */
1614                   cfa_temp.reg = cfa.reg;
1615                   cfa_temp.offset = cfa.offset;
1616                 }
1617
1618               /* Rule 5 */
1619               else if (REG_P (XEXP (src, 0))
1620                        && REGNO (XEXP (src, 0)) == cfa_temp.reg
1621                        && XEXP (src, 1) == stack_pointer_rtx)
1622                 {
1623                   /* Setting a scratch register that we will use instead
1624                      of SP for saving registers to the stack.  */
1625                   gcc_assert (cfa.reg == STACK_POINTER_REGNUM);
1626                   cfa_store.reg = REGNO (dest);
1627                   cfa_store.offset = cfa.offset - cfa_temp.offset;
1628                 }
1629
1630               /* Rule 9 */
1631               else if (GET_CODE (src) == LO_SUM
1632                        && GET_CODE (XEXP (src, 1)) == CONST_INT)
1633                 {
1634                   cfa_temp.reg = REGNO (dest);
1635                   cfa_temp.offset = INTVAL (XEXP (src, 1));
1636                 }
1637               else
1638                 gcc_unreachable ();
1639             }
1640           break;
1641
1642           /* Rule 6 */
1643         case CONST_INT:
1644           cfa_temp.reg = REGNO (dest);
1645           cfa_temp.offset = INTVAL (src);
1646           break;
1647
1648           /* Rule 7 */
1649         case IOR:
1650           gcc_assert (REG_P (XEXP (src, 0))
1651                       && (unsigned) REGNO (XEXP (src, 0)) == cfa_temp.reg
1652                       && GET_CODE (XEXP (src, 1)) == CONST_INT);
1653
1654           if ((unsigned) REGNO (dest) != cfa_temp.reg)
1655             cfa_temp.reg = REGNO (dest);
1656           cfa_temp.offset |= INTVAL (XEXP (src, 1));
1657           break;
1658
1659           /* Skip over HIGH, assuming it will be followed by a LO_SUM,
1660              which will fill in all of the bits.  */
1661           /* Rule 8 */
1662         case HIGH:
1663           break;
1664
1665           /* Rule 15 */
1666         case UNSPEC:
1667         case UNSPEC_VOLATILE:
1668           gcc_assert (targetm.dwarf_handle_frame_unspec);
1669           targetm.dwarf_handle_frame_unspec (label, expr, XINT (src, 1));
1670           return;
1671
1672         default:
1673           gcc_unreachable ();
1674         }
1675
1676       def_cfa_1 (label, &cfa);
1677       break;
1678
1679     case MEM:
1680       gcc_assert (REG_P (src));
1681
1682       /* Saving a register to the stack.  Make sure dest is relative to the
1683          CFA register.  */
1684       switch (GET_CODE (XEXP (dest, 0)))
1685         {
1686           /* Rule 10 */
1687           /* With a push.  */
1688         case PRE_MODIFY:
1689           /* We can't handle variable size modifications.  */
1690           gcc_assert (GET_CODE (XEXP (XEXP (XEXP (dest, 0), 1), 1))
1691                       == CONST_INT);
1692           offset = -INTVAL (XEXP (XEXP (XEXP (dest, 0), 1), 1));
1693
1694           gcc_assert (REGNO (XEXP (XEXP (dest, 0), 0)) == STACK_POINTER_REGNUM
1695                       && cfa_store.reg == STACK_POINTER_REGNUM);
1696
1697           cfa_store.offset += offset;
1698           if (cfa.reg == STACK_POINTER_REGNUM)
1699             cfa.offset = cfa_store.offset;
1700
1701           offset = -cfa_store.offset;
1702           break;
1703
1704           /* Rule 11 */
1705         case PRE_INC:
1706         case PRE_DEC:
1707           offset = GET_MODE_SIZE (GET_MODE (dest));
1708           if (GET_CODE (XEXP (dest, 0)) == PRE_INC)
1709             offset = -offset;
1710
1711           gcc_assert (REGNO (XEXP (XEXP (dest, 0), 0)) == STACK_POINTER_REGNUM
1712                       && cfa_store.reg == STACK_POINTER_REGNUM);
1713
1714           cfa_store.offset += offset;
1715           if (cfa.reg == STACK_POINTER_REGNUM)
1716             cfa.offset = cfa_store.offset;
1717
1718           offset = -cfa_store.offset;
1719           break;
1720
1721           /* Rule 12 */
1722           /* With an offset.  */
1723         case PLUS:
1724         case MINUS:
1725         case LO_SUM:
1726           {
1727             int regno;
1728
1729             gcc_assert (GET_CODE (XEXP (XEXP (dest, 0), 1)) == CONST_INT
1730                         && REG_P (XEXP (XEXP (dest, 0), 0)));
1731             offset = INTVAL (XEXP (XEXP (dest, 0), 1));
1732             if (GET_CODE (XEXP (dest, 0)) == MINUS)
1733               offset = -offset;
1734
1735             regno = REGNO (XEXP (XEXP (dest, 0), 0));
1736
1737             if (cfa_store.reg == (unsigned) regno)
1738               offset -= cfa_store.offset;
1739             else
1740               {
1741                 gcc_assert (cfa_temp.reg == (unsigned) regno);
1742                 offset -= cfa_temp.offset;
1743               }
1744           }
1745           break;
1746
1747           /* Rule 13 */
1748           /* Without an offset.  */
1749         case REG:
1750           {
1751             int regno = REGNO (XEXP (dest, 0));
1752
1753             if (cfa_store.reg == (unsigned) regno)
1754               offset = -cfa_store.offset;
1755             else
1756               {
1757                 gcc_assert (cfa_temp.reg == (unsigned) regno);
1758                 offset = -cfa_temp.offset;
1759               }
1760           }
1761           break;
1762
1763           /* Rule 14 */
1764         case POST_INC:
1765           gcc_assert (cfa_temp.reg
1766                       == (unsigned) REGNO (XEXP (XEXP (dest, 0), 0)));
1767           offset = -cfa_temp.offset;
1768           cfa_temp.offset -= GET_MODE_SIZE (GET_MODE (dest));
1769           break;
1770
1771         default:
1772           gcc_unreachable ();
1773         }
1774
1775       if (REGNO (src) != STACK_POINTER_REGNUM
1776           && REGNO (src) != HARD_FRAME_POINTER_REGNUM
1777           && (unsigned) REGNO (src) == cfa.reg)
1778         {
1779           /* We're storing the current CFA reg into the stack.  */
1780
1781           if (cfa.offset == 0)
1782             {
1783               /* If the source register is exactly the CFA, assume
1784                  we're saving SP like any other register; this happens
1785                  on the ARM.  */
1786               def_cfa_1 (label, &cfa);
1787               queue_reg_save (label, stack_pointer_rtx, NULL_RTX, offset);
1788               break;
1789             }
1790           else
1791             {
1792               /* Otherwise, we'll need to look in the stack to
1793                  calculate the CFA.  */
1794               rtx x = XEXP (dest, 0);
1795
1796               if (!REG_P (x))
1797                 x = XEXP (x, 0);
1798               gcc_assert (REG_P (x));
1799
1800               cfa.reg = REGNO (x);
1801               cfa.base_offset = offset;
1802               cfa.indirect = 1;
1803               def_cfa_1 (label, &cfa);
1804               break;
1805             }
1806         }
1807
1808       def_cfa_1 (label, &cfa);
1809       queue_reg_save (label, src, NULL_RTX, offset);
1810       break;
1811
1812     default:
1813       gcc_unreachable ();
1814     }
1815 }
1816
1817 /* Record call frame debugging information for INSN, which either
1818    sets SP or FP (adjusting how we calculate the frame address) or saves a
1819    register to the stack.  If INSN is NULL_RTX, initialize our state.
1820
1821    If AFTER_P is false, we're being called before the insn is emitted,
1822    otherwise after.  Call instructions get invoked twice.  */
1823
1824 void
1825 dwarf2out_frame_debug (rtx insn, bool after_p)
1826 {
1827   const char *label;
1828   rtx src;
1829
1830   if (insn == NULL_RTX)
1831     {
1832       size_t i;
1833
1834       /* Flush any queued register saves.  */
1835       flush_queued_reg_saves ();
1836
1837       /* Set up state for generating call frame debug info.  */
1838       lookup_cfa (&cfa);
1839       gcc_assert (cfa.reg
1840                   == (unsigned long)DWARF_FRAME_REGNUM (STACK_POINTER_REGNUM));
1841
1842       cfa.reg = STACK_POINTER_REGNUM;
1843       cfa_store = cfa;
1844       cfa_temp.reg = -1;
1845       cfa_temp.offset = 0;
1846
1847       for (i = 0; i < num_regs_saved_in_regs; i++)
1848         {
1849           regs_saved_in_regs[i].orig_reg = NULL_RTX;
1850           regs_saved_in_regs[i].saved_in_reg = NULL_RTX;
1851         }
1852       num_regs_saved_in_regs = 0;
1853       return;
1854     }
1855
1856   if (!NONJUMP_INSN_P (insn) || clobbers_queued_reg_save (insn))
1857     flush_queued_reg_saves ();
1858
1859   if (! RTX_FRAME_RELATED_P (insn))
1860     {
1861       if (!ACCUMULATE_OUTGOING_ARGS)
1862         dwarf2out_stack_adjust (insn, after_p);
1863       return;
1864     }
1865
1866   label = dwarf2out_cfi_label ();
1867   src = find_reg_note (insn, REG_FRAME_RELATED_EXPR, NULL_RTX);
1868   if (src)
1869     insn = XEXP (src, 0);
1870   else
1871     insn = PATTERN (insn);
1872
1873   dwarf2out_frame_debug_expr (insn, label);
1874 }
1875
1876 #endif
1877
1878 /* Describe for the GTY machinery what parts of dw_cfi_oprnd1 are used.  */
1879 static enum dw_cfi_oprnd_type dw_cfi_oprnd1_desc
1880  (enum dwarf_call_frame_info cfi);
1881
1882 static enum dw_cfi_oprnd_type
1883 dw_cfi_oprnd1_desc (enum dwarf_call_frame_info cfi)
1884 {
1885   switch (cfi)
1886     {
1887     case DW_CFA_nop:
1888     case DW_CFA_GNU_window_save:
1889       return dw_cfi_oprnd_unused;
1890
1891     case DW_CFA_set_loc:
1892     case DW_CFA_advance_loc1:
1893     case DW_CFA_advance_loc2:
1894     case DW_CFA_advance_loc4:
1895     case DW_CFA_MIPS_advance_loc8:
1896       return dw_cfi_oprnd_addr;
1897
1898     case DW_CFA_offset:
1899     case DW_CFA_offset_extended:
1900     case DW_CFA_def_cfa:
1901     case DW_CFA_offset_extended_sf:
1902     case DW_CFA_def_cfa_sf:
1903     case DW_CFA_restore_extended:
1904     case DW_CFA_undefined:
1905     case DW_CFA_same_value:
1906     case DW_CFA_def_cfa_register:
1907     case DW_CFA_register:
1908       return dw_cfi_oprnd_reg_num;
1909
1910     case DW_CFA_def_cfa_offset:
1911     case DW_CFA_GNU_args_size:
1912     case DW_CFA_def_cfa_offset_sf:
1913       return dw_cfi_oprnd_offset;
1914
1915     case DW_CFA_def_cfa_expression:
1916     case DW_CFA_expression:
1917       return dw_cfi_oprnd_loc;
1918
1919     default:
1920       gcc_unreachable ();
1921     }
1922 }
1923
1924 /* Describe for the GTY machinery what parts of dw_cfi_oprnd2 are used.  */
1925 static enum dw_cfi_oprnd_type dw_cfi_oprnd2_desc
1926  (enum dwarf_call_frame_info cfi);
1927
1928 static enum dw_cfi_oprnd_type
1929 dw_cfi_oprnd2_desc (enum dwarf_call_frame_info cfi)
1930 {
1931   switch (cfi)
1932     {
1933     case DW_CFA_def_cfa:
1934     case DW_CFA_def_cfa_sf:
1935     case DW_CFA_offset:
1936     case DW_CFA_offset_extended_sf:
1937     case DW_CFA_offset_extended:
1938       return dw_cfi_oprnd_offset;
1939
1940     case DW_CFA_register:
1941       return dw_cfi_oprnd_reg_num;
1942
1943     default:
1944       return dw_cfi_oprnd_unused;
1945     }
1946 }
1947
1948 #if defined (DWARF2_DEBUGGING_INFO) || defined (DWARF2_UNWIND_INFO)
1949
1950 /* Switch to eh_frame_section.  If we don't have an eh_frame_section,
1951    switch to the data section instead, and write out a synthetic label
1952    for collect2.  */
1953
1954 static void
1955 switch_to_eh_frame_section (void)
1956 {
1957   tree label;
1958
1959 #ifdef EH_FRAME_SECTION_NAME
1960   if (eh_frame_section == 0)
1961     {
1962       int flags;
1963
1964       if (EH_TABLES_CAN_BE_READ_ONLY)
1965         {
1966           int fde_encoding;
1967           int per_encoding;
1968           int lsda_encoding;
1969
1970           fde_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/1,
1971                                                        /*global=*/0);
1972           per_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/2,
1973                                                        /*global=*/1);
1974           lsda_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/0,
1975                                                         /*global=*/0);
1976           flags = ((! flag_pic
1977                     || ((fde_encoding & 0x70) != DW_EH_PE_absptr
1978                         && (fde_encoding & 0x70) != DW_EH_PE_aligned
1979                         && (per_encoding & 0x70) != DW_EH_PE_absptr
1980                         && (per_encoding & 0x70) != DW_EH_PE_aligned
1981                         && (lsda_encoding & 0x70) != DW_EH_PE_absptr
1982                         && (lsda_encoding & 0x70) != DW_EH_PE_aligned))
1983                    ? 0 : SECTION_WRITE);
1984         }
1985       else
1986         flags = SECTION_WRITE;
1987       eh_frame_section = get_section (EH_FRAME_SECTION_NAME, flags, NULL);
1988     }
1989 #endif
1990
1991   if (eh_frame_section)
1992     switch_to_section (eh_frame_section);
1993   else
1994     {
1995       /* We have no special eh_frame section.  Put the information in
1996          the data section and emit special labels to guide collect2.  */
1997       switch_to_section (data_section);
1998       label = get_file_function_name ('F');
1999       ASM_OUTPUT_ALIGN (asm_out_file, floor_log2 (PTR_SIZE));
2000       targetm.asm_out.globalize_label (asm_out_file,
2001                                        IDENTIFIER_POINTER (label));
2002       ASM_OUTPUT_LABEL (asm_out_file, IDENTIFIER_POINTER (label));
2003     }
2004 }
2005
2006 /* Map register numbers held in the call frame info that gcc has
2007    collected using DWARF_FRAME_REGNUM to those that should be output in
2008    .debug_frame and .eh_frame.  */
2009 #ifndef DWARF2_FRAME_REG_OUT
2010 #define DWARF2_FRAME_REG_OUT(REGNO, FOR_EH) (REGNO)
2011 #endif
2012
2013 /* Output a Call Frame Information opcode and its operand(s).  */
2014
2015 static void
2016 output_cfi (dw_cfi_ref cfi, dw_fde_ref fde, int for_eh)
2017 {
2018   unsigned long r;
2019   if (cfi->dw_cfi_opc == DW_CFA_advance_loc)
2020     dw2_asm_output_data (1, (cfi->dw_cfi_opc
2021                              | (cfi->dw_cfi_oprnd1.dw_cfi_offset & 0x3f)),
2022                          "DW_CFA_advance_loc " HOST_WIDE_INT_PRINT_HEX,
2023                          cfi->dw_cfi_oprnd1.dw_cfi_offset);
2024   else if (cfi->dw_cfi_opc == DW_CFA_offset)
2025     {
2026       r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, for_eh);
2027       dw2_asm_output_data (1, (cfi->dw_cfi_opc | (r & 0x3f)),
2028                            "DW_CFA_offset, column 0x%lx", r);
2029       dw2_asm_output_data_uleb128 (cfi->dw_cfi_oprnd2.dw_cfi_offset, NULL);
2030     }
2031   else if (cfi->dw_cfi_opc == DW_CFA_restore)
2032     {
2033       r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, for_eh);
2034       dw2_asm_output_data (1, (cfi->dw_cfi_opc | (r & 0x3f)),
2035                            "DW_CFA_restore, column 0x%lx", r);
2036     }
2037   else
2038     {
2039       dw2_asm_output_data (1, cfi->dw_cfi_opc,
2040                            "%s", dwarf_cfi_name (cfi->dw_cfi_opc));
2041
2042       switch (cfi->dw_cfi_opc)
2043         {
2044         case DW_CFA_set_loc:
2045           if (for_eh)
2046             dw2_asm_output_encoded_addr_rtx (
2047                 ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/1, /*global=*/0),
2048                 gen_rtx_SYMBOL_REF (Pmode, cfi->dw_cfi_oprnd1.dw_cfi_addr),
2049                 false, NULL);
2050           else
2051             dw2_asm_output_addr (DWARF2_ADDR_SIZE,
2052                                  cfi->dw_cfi_oprnd1.dw_cfi_addr, NULL);
2053           break;
2054
2055         case DW_CFA_advance_loc1:
2056           dw2_asm_output_delta (1, cfi->dw_cfi_oprnd1.dw_cfi_addr,
2057                                 fde->dw_fde_current_label, NULL);
2058           fde->dw_fde_current_label = cfi->dw_cfi_oprnd1.dw_cfi_addr;
2059           break;
2060
2061         case DW_CFA_advance_loc2:
2062           dw2_asm_output_delta (2, cfi->dw_cfi_oprnd1.dw_cfi_addr,
2063                                 fde->dw_fde_current_label, NULL);
2064           fde->dw_fde_current_label = cfi->dw_cfi_oprnd1.dw_cfi_addr;
2065           break;
2066
2067         case DW_CFA_advance_loc4:
2068           dw2_asm_output_delta (4, cfi->dw_cfi_oprnd1.dw_cfi_addr,
2069                                 fde->dw_fde_current_label, NULL);
2070           fde->dw_fde_current_label = cfi->dw_cfi_oprnd1.dw_cfi_addr;
2071           break;
2072
2073         case DW_CFA_MIPS_advance_loc8:
2074           dw2_asm_output_delta (8, cfi->dw_cfi_oprnd1.dw_cfi_addr,
2075                                 fde->dw_fde_current_label, NULL);
2076           fde->dw_fde_current_label = cfi->dw_cfi_oprnd1.dw_cfi_addr;
2077           break;
2078
2079         case DW_CFA_offset_extended:
2080         case DW_CFA_def_cfa:
2081           r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, for_eh);
2082           dw2_asm_output_data_uleb128 (r, NULL);
2083           dw2_asm_output_data_uleb128 (cfi->dw_cfi_oprnd2.dw_cfi_offset, NULL);
2084           break;
2085
2086         case DW_CFA_offset_extended_sf:
2087         case DW_CFA_def_cfa_sf:
2088           r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, for_eh);
2089           dw2_asm_output_data_uleb128 (r, NULL);
2090           dw2_asm_output_data_sleb128 (cfi->dw_cfi_oprnd2.dw_cfi_offset, NULL);
2091           break;
2092
2093         case DW_CFA_restore_extended:
2094         case DW_CFA_undefined:
2095         case DW_CFA_same_value:
2096         case DW_CFA_def_cfa_register:
2097           r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, for_eh);
2098           dw2_asm_output_data_uleb128 (r, NULL);
2099           break;
2100
2101         case DW_CFA_register:
2102           r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, for_eh);
2103           dw2_asm_output_data_uleb128 (r, NULL);
2104           r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd2.dw_cfi_reg_num, for_eh);
2105           dw2_asm_output_data_uleb128 (r, NULL);
2106           break;
2107
2108         case DW_CFA_def_cfa_offset:
2109         case DW_CFA_GNU_args_size:
2110           dw2_asm_output_data_uleb128 (cfi->dw_cfi_oprnd1.dw_cfi_offset, NULL);
2111           break;
2112
2113         case DW_CFA_def_cfa_offset_sf:
2114           dw2_asm_output_data_sleb128 (cfi->dw_cfi_oprnd1.dw_cfi_offset, NULL);
2115           break;
2116
2117         case DW_CFA_GNU_window_save:
2118           break;
2119
2120         case DW_CFA_def_cfa_expression:
2121         case DW_CFA_expression:
2122           output_cfa_loc (cfi);
2123           break;
2124
2125         case DW_CFA_GNU_negative_offset_extended:
2126           /* Obsoleted by DW_CFA_offset_extended_sf.  */
2127           gcc_unreachable ();
2128
2129         default:
2130           break;
2131         }
2132     }
2133 }
2134
2135 /* Output the call frame information used to record information
2136    that relates to calculating the frame pointer, and records the
2137    location of saved registers.  */
2138
2139 static void
2140 output_call_frame_info (int for_eh)
2141 {
2142   unsigned int i;
2143   dw_fde_ref fde;
2144   dw_cfi_ref cfi;
2145   char l1[20], l2[20], section_start_label[20];
2146   bool any_lsda_needed = false;
2147   char augmentation[6];
2148   int augmentation_size;
2149   int fde_encoding = DW_EH_PE_absptr;
2150   int per_encoding = DW_EH_PE_absptr;
2151   int lsda_encoding = DW_EH_PE_absptr;
2152   int return_reg;
2153
2154   /* Don't emit a CIE if there won't be any FDEs.  */
2155   if (fde_table_in_use == 0)
2156     return;
2157
2158   /* If we make FDEs linkonce, we may have to emit an empty label for
2159      an FDE that wouldn't otherwise be emitted.  We want to avoid
2160      having an FDE kept around when the function it refers to is
2161      discarded.  Example where this matters: a primary function
2162      template in C++ requires EH information, but an explicit
2163      specialization doesn't.  */
2164   if (TARGET_USES_WEAK_UNWIND_INFO
2165       && ! flag_asynchronous_unwind_tables
2166       && for_eh)
2167     for (i = 0; i < fde_table_in_use; i++)
2168       if ((fde_table[i].nothrow || fde_table[i].all_throwers_are_sibcalls)
2169           && !fde_table[i].uses_eh_lsda
2170           && ! DECL_WEAK (fde_table[i].decl))
2171         targetm.asm_out.unwind_label (asm_out_file, fde_table[i].decl,
2172                                       for_eh, /* empty */ 1);
2173
2174   /* If we don't have any functions we'll want to unwind out of, don't
2175      emit any EH unwind information.  Note that if exceptions aren't
2176      enabled, we won't have collected nothrow information, and if we
2177      asked for asynchronous tables, we always want this info.  */
2178   if (for_eh)
2179     {
2180       bool any_eh_needed = !flag_exceptions || flag_asynchronous_unwind_tables;
2181
2182       for (i = 0; i < fde_table_in_use; i++)
2183         if (fde_table[i].uses_eh_lsda)
2184           any_eh_needed = any_lsda_needed = true;
2185         else if (TARGET_USES_WEAK_UNWIND_INFO && DECL_WEAK (fde_table[i].decl))
2186           any_eh_needed = true;
2187         else if (! fde_table[i].nothrow
2188                  && ! fde_table[i].all_throwers_are_sibcalls)
2189           any_eh_needed = true;
2190
2191       if (! any_eh_needed)
2192         return;
2193     }
2194
2195   /* We're going to be generating comments, so turn on app.  */
2196   if (flag_debug_asm)
2197     app_enable ();
2198
2199   if (for_eh)
2200     switch_to_eh_frame_section ();
2201   else
2202     switch_to_section (get_section (DEBUG_FRAME_SECTION, SECTION_DEBUG, NULL));
2203
2204   ASM_GENERATE_INTERNAL_LABEL (section_start_label, FRAME_BEGIN_LABEL, for_eh);
2205   ASM_OUTPUT_LABEL (asm_out_file, section_start_label);
2206
2207   /* Output the CIE.  */
2208   ASM_GENERATE_INTERNAL_LABEL (l1, CIE_AFTER_SIZE_LABEL, for_eh);
2209   ASM_GENERATE_INTERNAL_LABEL (l2, CIE_END_LABEL, for_eh);
2210   dw2_asm_output_delta (for_eh ? 4 : DWARF_OFFSET_SIZE, l2, l1,
2211                         "Length of Common Information Entry");
2212   ASM_OUTPUT_LABEL (asm_out_file, l1);
2213
2214   /* Now that the CIE pointer is PC-relative for EH,
2215      use 0 to identify the CIE.  */
2216   dw2_asm_output_data ((for_eh ? 4 : DWARF_OFFSET_SIZE),
2217                        (for_eh ? 0 : DW_CIE_ID),
2218                        "CIE Identifier Tag");
2219
2220   dw2_asm_output_data (1, DW_CIE_VERSION, "CIE Version");
2221
2222   augmentation[0] = 0;
2223   augmentation_size = 0;
2224   if (for_eh)
2225     {
2226       char *p;
2227
2228       /* Augmentation:
2229          z      Indicates that a uleb128 is present to size the
2230                 augmentation section.
2231          L      Indicates the encoding (and thus presence) of
2232                 an LSDA pointer in the FDE augmentation.
2233          R      Indicates a non-default pointer encoding for
2234                 FDE code pointers.
2235          P      Indicates the presence of an encoding + language
2236                 personality routine in the CIE augmentation.  */
2237
2238       fde_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/1, /*global=*/0);
2239       per_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/2, /*global=*/1);
2240       lsda_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/0, /*global=*/0);
2241
2242       p = augmentation + 1;
2243       if (eh_personality_libfunc)
2244         {
2245           *p++ = 'P';
2246           augmentation_size += 1 + size_of_encoded_value (per_encoding);
2247         }
2248       if (any_lsda_needed)
2249         {
2250           *p++ = 'L';
2251           augmentation_size += 1;
2252         }
2253       if (fde_encoding != DW_EH_PE_absptr)
2254         {
2255           *p++ = 'R';
2256           augmentation_size += 1;
2257         }
2258       if (p > augmentation + 1)
2259         {
2260           augmentation[0] = 'z';
2261           *p = '\0';
2262         }
2263
2264       /* Ug.  Some platforms can't do unaligned dynamic relocations at all.  */
2265       if (eh_personality_libfunc && per_encoding == DW_EH_PE_aligned)
2266         {
2267           int offset = (  4             /* Length */
2268                         + 4             /* CIE Id */
2269                         + 1             /* CIE version */
2270                         + strlen (augmentation) + 1     /* Augmentation */
2271                         + size_of_uleb128 (1)           /* Code alignment */
2272                         + size_of_sleb128 (DWARF_CIE_DATA_ALIGNMENT)
2273                         + 1             /* RA column */
2274                         + 1             /* Augmentation size */
2275                         + 1             /* Personality encoding */ );
2276           int pad = -offset & (PTR_SIZE - 1);
2277
2278           augmentation_size += pad;
2279
2280           /* Augmentations should be small, so there's scarce need to
2281              iterate for a solution.  Die if we exceed one uleb128 byte.  */
2282           gcc_assert (size_of_uleb128 (augmentation_size) == 1);
2283         }
2284     }
2285
2286   dw2_asm_output_nstring (augmentation, -1, "CIE Augmentation");
2287   dw2_asm_output_data_uleb128 (1, "CIE Code Alignment Factor");
2288   dw2_asm_output_data_sleb128 (DWARF_CIE_DATA_ALIGNMENT,
2289                                "CIE Data Alignment Factor");
2290
2291   return_reg = DWARF2_FRAME_REG_OUT (DWARF_FRAME_RETURN_COLUMN, for_eh);
2292   if (DW_CIE_VERSION == 1)
2293     dw2_asm_output_data (1, return_reg, "CIE RA Column");
2294   else
2295     dw2_asm_output_data_uleb128 (return_reg, "CIE RA Column");
2296
2297   if (augmentation[0])
2298     {
2299       dw2_asm_output_data_uleb128 (augmentation_size, "Augmentation size");
2300       if (eh_personality_libfunc)
2301         {
2302           dw2_asm_output_data (1, per_encoding, "Personality (%s)",
2303                                eh_data_format_name (per_encoding));
2304           dw2_asm_output_encoded_addr_rtx (per_encoding,
2305                                            eh_personality_libfunc,
2306                                            true, NULL);
2307         }
2308
2309       if (any_lsda_needed)
2310         dw2_asm_output_data (1, lsda_encoding, "LSDA Encoding (%s)",
2311                              eh_data_format_name (lsda_encoding));
2312
2313       if (fde_encoding != DW_EH_PE_absptr)
2314         dw2_asm_output_data (1, fde_encoding, "FDE Encoding (%s)",
2315                              eh_data_format_name (fde_encoding));
2316     }
2317
2318   for (cfi = cie_cfi_head; cfi != NULL; cfi = cfi->dw_cfi_next)
2319     output_cfi (cfi, NULL, for_eh);
2320
2321   /* Pad the CIE out to an address sized boundary.  */
2322   ASM_OUTPUT_ALIGN (asm_out_file,
2323                     floor_log2 (for_eh ? PTR_SIZE : DWARF2_ADDR_SIZE));
2324   ASM_OUTPUT_LABEL (asm_out_file, l2);
2325
2326   /* Loop through all of the FDE's.  */
2327   for (i = 0; i < fde_table_in_use; i++)
2328     {
2329       fde = &fde_table[i];
2330
2331       /* Don't emit EH unwind info for leaf functions that don't need it.  */
2332       if (for_eh && !flag_asynchronous_unwind_tables && flag_exceptions
2333           && (fde->nothrow || fde->all_throwers_are_sibcalls)
2334           && ! (TARGET_USES_WEAK_UNWIND_INFO && DECL_WEAK (fde_table[i].decl))
2335           && !fde->uses_eh_lsda)
2336         continue;
2337
2338       targetm.asm_out.unwind_label (asm_out_file, fde->decl, for_eh, /* empty */ 0);
2339       targetm.asm_out.internal_label (asm_out_file, FDE_LABEL, for_eh + i * 2);
2340       ASM_GENERATE_INTERNAL_LABEL (l1, FDE_AFTER_SIZE_LABEL, for_eh + i * 2);
2341       ASM_GENERATE_INTERNAL_LABEL (l2, FDE_END_LABEL, for_eh + i * 2);
2342       dw2_asm_output_delta (for_eh ? 4 : DWARF_OFFSET_SIZE, l2, l1,
2343                             "FDE Length");
2344       ASM_OUTPUT_LABEL (asm_out_file, l1);
2345
2346       if (for_eh)
2347         dw2_asm_output_delta (4, l1, section_start_label, "FDE CIE offset");
2348       else
2349         dw2_asm_output_offset (DWARF_OFFSET_SIZE, section_start_label,
2350                                "FDE CIE offset");
2351
2352       if (for_eh)
2353         {
2354           rtx sym_ref = gen_rtx_SYMBOL_REF (Pmode, fde->dw_fde_begin);
2355           SYMBOL_REF_FLAGS (sym_ref) |= SYMBOL_FLAG_LOCAL;
2356           dw2_asm_output_encoded_addr_rtx (fde_encoding,
2357                                            sym_ref,
2358                                            false,
2359                                            "FDE initial location");
2360           if (fde->dw_fde_switched_sections)
2361             {
2362               rtx sym_ref2 = gen_rtx_SYMBOL_REF (Pmode, 
2363                                       fde->dw_fde_unlikely_section_label);
2364               rtx sym_ref3= gen_rtx_SYMBOL_REF (Pmode, 
2365                                       fde->dw_fde_hot_section_label);
2366               SYMBOL_REF_FLAGS (sym_ref2) |= SYMBOL_FLAG_LOCAL;
2367               SYMBOL_REF_FLAGS (sym_ref3) |= SYMBOL_FLAG_LOCAL;
2368               dw2_asm_output_encoded_addr_rtx (fde_encoding, sym_ref3, false,
2369                                                "FDE initial location");
2370               dw2_asm_output_delta (size_of_encoded_value (fde_encoding),
2371                                     fde->dw_fde_hot_section_end_label,
2372                                     fde->dw_fde_hot_section_label,
2373                                     "FDE address range");
2374               dw2_asm_output_encoded_addr_rtx (fde_encoding, sym_ref2, false,
2375                                                "FDE initial location");
2376               dw2_asm_output_delta (size_of_encoded_value (fde_encoding),
2377                                     fde->dw_fde_unlikely_section_end_label,
2378                                     fde->dw_fde_unlikely_section_label,
2379                                     "FDE address range");
2380             }
2381           else
2382             dw2_asm_output_delta (size_of_encoded_value (fde_encoding),
2383                                   fde->dw_fde_end, fde->dw_fde_begin,
2384                                   "FDE address range");
2385         }
2386       else
2387         {
2388           dw2_asm_output_addr (DWARF2_ADDR_SIZE, fde->dw_fde_begin,
2389                                "FDE initial location");
2390           if (fde->dw_fde_switched_sections)
2391             {
2392               dw2_asm_output_addr (DWARF2_ADDR_SIZE,
2393                                    fde->dw_fde_hot_section_label,
2394                                    "FDE initial location");
2395               dw2_asm_output_delta (DWARF2_ADDR_SIZE,
2396                                     fde->dw_fde_hot_section_end_label,
2397                                     fde->dw_fde_hot_section_label,
2398                                     "FDE address range");
2399               dw2_asm_output_addr (DWARF2_ADDR_SIZE,
2400                                    fde->dw_fde_unlikely_section_label,
2401                                    "FDE initial location");
2402               dw2_asm_output_delta (DWARF2_ADDR_SIZE, 
2403                                     fde->dw_fde_unlikely_section_end_label,
2404                                     fde->dw_fde_unlikely_section_label,
2405                                     "FDE address range");
2406             }
2407           else
2408             dw2_asm_output_delta (DWARF2_ADDR_SIZE,
2409                                   fde->dw_fde_end, fde->dw_fde_begin,
2410                                   "FDE address range");
2411         }
2412
2413       if (augmentation[0])
2414         {
2415           if (any_lsda_needed)
2416             {
2417               int size = size_of_encoded_value (lsda_encoding);
2418
2419               if (lsda_encoding == DW_EH_PE_aligned)
2420                 {
2421                   int offset = (  4             /* Length */
2422                                 + 4             /* CIE offset */
2423                                 + 2 * size_of_encoded_value (fde_encoding)
2424                                 + 1             /* Augmentation size */ );
2425                   int pad = -offset & (PTR_SIZE - 1);
2426
2427                   size += pad;
2428                   gcc_assert (size_of_uleb128 (size) == 1);
2429                 }
2430
2431               dw2_asm_output_data_uleb128 (size, "Augmentation size");
2432
2433               if (fde->uses_eh_lsda)
2434                 {
2435                   ASM_GENERATE_INTERNAL_LABEL (l1, "LLSDA",
2436                                                fde->funcdef_number);
2437                   dw2_asm_output_encoded_addr_rtx (
2438                         lsda_encoding, gen_rtx_SYMBOL_REF (Pmode, l1),
2439                         false, "Language Specific Data Area");
2440                 }
2441               else
2442                 {
2443                   if (lsda_encoding == DW_EH_PE_aligned)
2444                     ASM_OUTPUT_ALIGN (asm_out_file, floor_log2 (PTR_SIZE));
2445                   dw2_asm_output_data
2446                     (size_of_encoded_value (lsda_encoding), 0,
2447                      "Language Specific Data Area (none)");
2448                 }
2449             }
2450           else
2451             dw2_asm_output_data_uleb128 (0, "Augmentation size");
2452         }
2453
2454       /* Loop through the Call Frame Instructions associated with
2455          this FDE.  */
2456       fde->dw_fde_current_label = fde->dw_fde_begin;
2457       for (cfi = fde->dw_fde_cfi; cfi != NULL; cfi = cfi->dw_cfi_next)
2458         output_cfi (cfi, fde, for_eh);
2459
2460       /* Pad the FDE out to an address sized boundary.  */
2461       ASM_OUTPUT_ALIGN (asm_out_file,
2462                         floor_log2 ((for_eh ? PTR_SIZE : DWARF2_ADDR_SIZE)));
2463       ASM_OUTPUT_LABEL (asm_out_file, l2);
2464     }
2465
2466   if (for_eh && targetm.terminate_dw2_eh_frame_info)
2467     dw2_asm_output_data (4, 0, "End of Table");
2468 #ifdef MIPS_DEBUGGING_INFO
2469   /* Work around Irix 6 assembler bug whereby labels at the end of a section
2470      get a value of 0.  Putting .align 0 after the label fixes it.  */
2471   ASM_OUTPUT_ALIGN (asm_out_file, 0);
2472 #endif
2473
2474   /* Turn off app to make assembly quicker.  */
2475   if (flag_debug_asm)
2476     app_disable ();
2477 }
2478
2479 /* Output a marker (i.e. a label) for the beginning of a function, before
2480    the prologue.  */
2481
2482 void
2483 dwarf2out_begin_prologue (unsigned int line ATTRIBUTE_UNUSED,
2484                           const char *file ATTRIBUTE_UNUSED)
2485 {
2486   char label[MAX_ARTIFICIAL_LABEL_BYTES];
2487   char * dup_label;
2488   dw_fde_ref fde;
2489
2490   current_function_func_begin_label = NULL;
2491
2492 #ifdef TARGET_UNWIND_INFO
2493   /* ??? current_function_func_begin_label is also used by except.c
2494      for call-site information.  We must emit this label if it might
2495      be used.  */
2496   if ((! flag_exceptions || USING_SJLJ_EXCEPTIONS)
2497       && ! dwarf2out_do_frame ())
2498     return;
2499 #else
2500   if (! dwarf2out_do_frame ())
2501     return;
2502 #endif
2503
2504   switch_to_section (function_section (current_function_decl));
2505   ASM_GENERATE_INTERNAL_LABEL (label, FUNC_BEGIN_LABEL,
2506                                current_function_funcdef_no);
2507   ASM_OUTPUT_DEBUG_LABEL (asm_out_file, FUNC_BEGIN_LABEL,
2508                           current_function_funcdef_no);
2509   dup_label = xstrdup (label);
2510   current_function_func_begin_label = dup_label;
2511
2512 #ifdef TARGET_UNWIND_INFO
2513   /* We can elide the fde allocation if we're not emitting debug info.  */
2514   if (! dwarf2out_do_frame ())
2515     return;
2516 #endif
2517
2518   /* Expand the fde table if necessary.  */
2519   if (fde_table_in_use == fde_table_allocated)
2520     {
2521       fde_table_allocated += FDE_TABLE_INCREMENT;
2522       fde_table = ggc_realloc (fde_table,
2523                                fde_table_allocated * sizeof (dw_fde_node));
2524       memset (fde_table + fde_table_in_use, 0,
2525               FDE_TABLE_INCREMENT * sizeof (dw_fde_node));
2526     }
2527
2528   /* Record the FDE associated with this function.  */
2529   current_funcdef_fde = fde_table_in_use;
2530
2531   /* Add the new FDE at the end of the fde_table.  */
2532   fde = &fde_table[fde_table_in_use++];
2533   fde->decl = current_function_decl;
2534   fde->dw_fde_begin = dup_label;
2535   fde->dw_fde_current_label = NULL;
2536   fde->dw_fde_hot_section_label = NULL;
2537   fde->dw_fde_hot_section_end_label = NULL;
2538   fde->dw_fde_unlikely_section_label = NULL;
2539   fde->dw_fde_unlikely_section_end_label = NULL;
2540   fde->dw_fde_switched_sections = false;
2541   fde->dw_fde_end = NULL;
2542   fde->dw_fde_cfi = NULL;
2543   fde->funcdef_number = current_function_funcdef_no;
2544   fde->nothrow = TREE_NOTHROW (current_function_decl);
2545   fde->uses_eh_lsda = cfun->uses_eh_lsda;
2546   fde->all_throwers_are_sibcalls = cfun->all_throwers_are_sibcalls;
2547
2548   args_size = old_args_size = 0;
2549
2550   /* We only want to output line number information for the genuine dwarf2
2551      prologue case, not the eh frame case.  */
2552 #ifdef DWARF2_DEBUGGING_INFO
2553   if (file)
2554     dwarf2out_source_line (line, file);
2555 #endif
2556 }
2557
2558 /* Output a marker (i.e. a label) for the absolute end of the generated code
2559    for a function definition.  This gets called *after* the epilogue code has
2560    been generated.  */
2561
2562 void
2563 dwarf2out_end_epilogue (unsigned int line ATTRIBUTE_UNUSED,
2564                         const char *file ATTRIBUTE_UNUSED)
2565 {
2566   dw_fde_ref fde;
2567   char label[MAX_ARTIFICIAL_LABEL_BYTES];
2568
2569   /* Output a label to mark the endpoint of the code generated for this
2570      function.  */
2571   ASM_GENERATE_INTERNAL_LABEL (label, FUNC_END_LABEL,
2572                                current_function_funcdef_no);
2573   ASM_OUTPUT_LABEL (asm_out_file, label);
2574   fde = &fde_table[fde_table_in_use - 1];
2575   fde->dw_fde_end = xstrdup (label);
2576 }
2577
2578 void
2579 dwarf2out_frame_init (void)
2580 {
2581   /* Allocate the initial hunk of the fde_table.  */
2582   fde_table = ggc_alloc_cleared (FDE_TABLE_INCREMENT * sizeof (dw_fde_node));
2583   fde_table_allocated = FDE_TABLE_INCREMENT;
2584   fde_table_in_use = 0;
2585
2586   /* Generate the CFA instructions common to all FDE's.  Do it now for the
2587      sake of lookup_cfa.  */
2588
2589 #ifdef DWARF2_UNWIND_INFO
2590   /* On entry, the Canonical Frame Address is at SP.  */
2591   dwarf2out_def_cfa (NULL, STACK_POINTER_REGNUM, INCOMING_FRAME_SP_OFFSET);
2592   initial_return_save (INCOMING_RETURN_ADDR_RTX);
2593 #endif
2594 }
2595
2596 void
2597 dwarf2out_frame_finish (void)
2598 {
2599   /* Output call frame information.  */
2600   if (write_symbols == DWARF2_DEBUG
2601       || write_symbols == VMS_AND_DWARF2_DEBUG
2602 #ifdef DWARF2_FRAME_INFO
2603       || DWARF2_FRAME_INFO
2604 #endif
2605       )
2606     output_call_frame_info (0);
2607
2608 #ifndef TARGET_UNWIND_INFO
2609   /* Output another copy for the unwinder.  */
2610   if (! USING_SJLJ_EXCEPTIONS && (flag_unwind_tables || flag_exceptions))
2611     output_call_frame_info (1);
2612 #endif
2613 }
2614 #endif
2615 \f
2616 /* And now, the subset of the debugging information support code necessary
2617    for emitting location expressions.  */
2618
2619 /* We need some way to distinguish DW_OP_addr with a direct symbol
2620    relocation from DW_OP_addr with a dtp-relative symbol relocation.  */
2621 #define INTERNAL_DW_OP_tls_addr         (0x100 + DW_OP_addr)
2622
2623
2624 typedef struct dw_val_struct *dw_val_ref;
2625 typedef struct die_struct *dw_die_ref;
2626 typedef struct dw_loc_descr_struct *dw_loc_descr_ref;
2627 typedef struct dw_loc_list_struct *dw_loc_list_ref;
2628
2629 /* Each DIE may have a series of attribute/value pairs.  Values
2630    can take on several forms.  The forms that are used in this
2631    implementation are listed below.  */
2632
2633 enum dw_val_class
2634 {
2635   dw_val_class_addr,
2636   dw_val_class_offset,
2637   dw_val_class_loc,
2638   dw_val_class_loc_list,
2639   dw_val_class_range_list,
2640   dw_val_class_const,
2641   dw_val_class_unsigned_const,
2642   dw_val_class_long_long,
2643   dw_val_class_vec,
2644   dw_val_class_flag,
2645   dw_val_class_die_ref,
2646   dw_val_class_fde_ref,
2647   dw_val_class_lbl_id,
2648   dw_val_class_lbl_offset,
2649   dw_val_class_str
2650 };
2651
2652 /* Describe a double word constant value.  */
2653 /* ??? Every instance of long_long in the code really means CONST_DOUBLE.  */
2654
2655 typedef struct dw_long_long_struct GTY(())
2656 {
2657   unsigned long hi;
2658   unsigned long low;
2659 }
2660 dw_long_long_const;
2661
2662 /* Describe a floating point constant value, or a vector constant value.  */
2663
2664 typedef struct dw_vec_struct GTY(())
2665 {
2666   unsigned char * GTY((length ("%h.length"))) array;
2667   unsigned length;
2668   unsigned elt_size;
2669 }
2670 dw_vec_const;
2671
2672 /* The dw_val_node describes an attribute's value, as it is
2673    represented internally.  */
2674
2675 typedef struct dw_val_struct GTY(())
2676 {
2677   enum dw_val_class val_class;
2678   union dw_val_struct_union
2679     {
2680       rtx GTY ((tag ("dw_val_class_addr"))) val_addr;
2681       unsigned HOST_WIDE_INT GTY ((tag ("dw_val_class_offset"))) val_offset;
2682       dw_loc_list_ref GTY ((tag ("dw_val_class_loc_list"))) val_loc_list;
2683       dw_loc_descr_ref GTY ((tag ("dw_val_class_loc"))) val_loc;
2684       HOST_WIDE_INT GTY ((default)) val_int;
2685       unsigned HOST_WIDE_INT GTY ((tag ("dw_val_class_unsigned_const"))) val_unsigned;
2686       dw_long_long_const GTY ((tag ("dw_val_class_long_long"))) val_long_long;
2687       dw_vec_const GTY ((tag ("dw_val_class_vec"))) val_vec;
2688       struct dw_val_die_union
2689         {
2690           dw_die_ref die;
2691           int external;
2692         } GTY ((tag ("dw_val_class_die_ref"))) val_die_ref;
2693       unsigned GTY ((tag ("dw_val_class_fde_ref"))) val_fde_index;
2694       struct indirect_string_node * GTY ((tag ("dw_val_class_str"))) val_str;
2695       char * GTY ((tag ("dw_val_class_lbl_id"))) val_lbl_id;
2696       unsigned char GTY ((tag ("dw_val_class_flag"))) val_flag;
2697     }
2698   GTY ((desc ("%1.val_class"))) v;
2699 }
2700 dw_val_node;
2701
2702 /* Locations in memory are described using a sequence of stack machine
2703    operations.  */
2704
2705 typedef struct dw_loc_descr_struct GTY(())
2706 {
2707   dw_loc_descr_ref dw_loc_next;
2708   enum dwarf_location_atom dw_loc_opc;
2709   dw_val_node dw_loc_oprnd1;
2710   dw_val_node dw_loc_oprnd2;
2711   int dw_loc_addr;
2712 }
2713 dw_loc_descr_node;
2714
2715 /* Location lists are ranges + location descriptions for that range,
2716    so you can track variables that are in different places over
2717    their entire life.  */
2718 typedef struct dw_loc_list_struct GTY(())
2719 {
2720   dw_loc_list_ref dw_loc_next;
2721   const char *begin; /* Label for begin address of range */
2722   const char *end;  /* Label for end address of range */
2723   char *ll_symbol; /* Label for beginning of location list.
2724                       Only on head of list */
2725   const char *section; /* Section this loclist is relative to */
2726   dw_loc_descr_ref expr;
2727 } dw_loc_list_node;
2728
2729 #if defined (DWARF2_DEBUGGING_INFO) || defined (DWARF2_UNWIND_INFO)
2730
2731 static const char *dwarf_stack_op_name (unsigned);
2732 static dw_loc_descr_ref new_loc_descr (enum dwarf_location_atom,
2733                                        unsigned HOST_WIDE_INT, unsigned HOST_WIDE_INT);
2734 static void add_loc_descr (dw_loc_descr_ref *, dw_loc_descr_ref);
2735 static unsigned long size_of_loc_descr (dw_loc_descr_ref);
2736 static unsigned long size_of_locs (dw_loc_descr_ref);
2737 static void output_loc_operands (dw_loc_descr_ref);
2738 static void output_loc_sequence (dw_loc_descr_ref);
2739
2740 /* Convert a DWARF stack opcode into its string name.  */
2741
2742 static const char *
2743 dwarf_stack_op_name (unsigned int op)
2744 {
2745   switch (op)
2746     {
2747     case DW_OP_addr:
2748     case INTERNAL_DW_OP_tls_addr:
2749       return "DW_OP_addr";
2750     case DW_OP_deref:
2751       return "DW_OP_deref";
2752     case DW_OP_const1u:
2753       return "DW_OP_const1u";
2754     case DW_OP_const1s:
2755       return "DW_OP_const1s";
2756     case DW_OP_const2u:
2757       return "DW_OP_const2u";
2758     case DW_OP_const2s:
2759       return "DW_OP_const2s";
2760     case DW_OP_const4u:
2761       return "DW_OP_const4u";
2762     case DW_OP_const4s:
2763       return "DW_OP_const4s";
2764     case DW_OP_const8u:
2765       return "DW_OP_const8u";
2766     case DW_OP_const8s:
2767       return "DW_OP_const8s";
2768     case DW_OP_constu:
2769       return "DW_OP_constu";
2770     case DW_OP_consts:
2771       return "DW_OP_consts";
2772     case DW_OP_dup:
2773       return "DW_OP_dup";
2774     case DW_OP_drop:
2775       return "DW_OP_drop";
2776     case DW_OP_over:
2777       return "DW_OP_over";
2778     case DW_OP_pick:
2779       return "DW_OP_pick";
2780     case DW_OP_swap:
2781       return "DW_OP_swap";
2782     case DW_OP_rot:
2783       return "DW_OP_rot";
2784     case DW_OP_xderef:
2785       return "DW_OP_xderef";
2786     case DW_OP_abs:
2787       return "DW_OP_abs";
2788     case DW_OP_and:
2789       return "DW_OP_and";
2790     case DW_OP_div:
2791       return "DW_OP_div";
2792     case DW_OP_minus:
2793       return "DW_OP_minus";
2794     case DW_OP_mod:
2795       return "DW_OP_mod";
2796     case DW_OP_mul:
2797       return "DW_OP_mul";
2798     case DW_OP_neg:
2799       return "DW_OP_neg";
2800     case DW_OP_not:
2801       return "DW_OP_not";
2802     case DW_OP_or:
2803       return "DW_OP_or";
2804     case DW_OP_plus:
2805       return "DW_OP_plus";
2806     case DW_OP_plus_uconst:
2807       return "DW_OP_plus_uconst";
2808     case DW_OP_shl:
2809       return "DW_OP_shl";
2810     case DW_OP_shr:
2811       return "DW_OP_shr";
2812     case DW_OP_shra:
2813       return "DW_OP_shra";
2814     case DW_OP_xor:
2815       return "DW_OP_xor";
2816     case DW_OP_bra:
2817       return "DW_OP_bra";
2818     case DW_OP_eq:
2819       return "DW_OP_eq";
2820     case DW_OP_ge:
2821       return "DW_OP_ge";
2822     case DW_OP_gt:
2823       return "DW_OP_gt";
2824     case DW_OP_le:
2825       return "DW_OP_le";
2826     case DW_OP_lt:
2827       return "DW_OP_lt";
2828     case DW_OP_ne:
2829       return "DW_OP_ne";
2830     case DW_OP_skip:
2831       return "DW_OP_skip";
2832     case DW_OP_lit0:
2833       return "DW_OP_lit0";
2834     case DW_OP_lit1:
2835       return "DW_OP_lit1";
2836     case DW_OP_lit2:
2837       return "DW_OP_lit2";
2838     case DW_OP_lit3:
2839       return "DW_OP_lit3";
2840     case DW_OP_lit4:
2841       return "DW_OP_lit4";
2842     case DW_OP_lit5:
2843       return "DW_OP_lit5";
2844     case DW_OP_lit6:
2845       return "DW_OP_lit6";
2846     case DW_OP_lit7:
2847       return "DW_OP_lit7";
2848     case DW_OP_lit8:
2849       return "DW_OP_lit8";
2850     case DW_OP_lit9:
2851       return "DW_OP_lit9";
2852     case DW_OP_lit10:
2853       return "DW_OP_lit10";
2854     case DW_OP_lit11:
2855       return "DW_OP_lit11";
2856     case DW_OP_lit12:
2857       return "DW_OP_lit12";
2858     case DW_OP_lit13:
2859       return "DW_OP_lit13";
2860     case DW_OP_lit14:
2861       return "DW_OP_lit14";
2862     case DW_OP_lit15:
2863       return "DW_OP_lit15";
2864     case DW_OP_lit16:
2865       return "DW_OP_lit16";
2866     case DW_OP_lit17:
2867       return "DW_OP_lit17";
2868     case DW_OP_lit18:
2869       return "DW_OP_lit18";
2870     case DW_OP_lit19:
2871       return "DW_OP_lit19";
2872     case DW_OP_lit20:
2873       return "DW_OP_lit20";
2874     case DW_OP_lit21:
2875       return "DW_OP_lit21";
2876     case DW_OP_lit22:
2877       return "DW_OP_lit22";
2878     case DW_OP_lit23:
2879       return "DW_OP_lit23";
2880     case DW_OP_lit24:
2881       return "DW_OP_lit24";
2882     case DW_OP_lit25:
2883       return "DW_OP_lit25";
2884     case DW_OP_lit26:
2885       return "DW_OP_lit26";
2886     case DW_OP_lit27:
2887       return "DW_OP_lit27";
2888     case DW_OP_lit28:
2889       return "DW_OP_lit28";
2890     case DW_OP_lit29:
2891       return "DW_OP_lit29";
2892     case DW_OP_lit30:
2893       return "DW_OP_lit30";
2894     case DW_OP_lit31:
2895       return "DW_OP_lit31";
2896     case DW_OP_reg0:
2897       return "DW_OP_reg0";
2898     case DW_OP_reg1:
2899       return "DW_OP_reg1";
2900     case DW_OP_reg2:
2901       return "DW_OP_reg2";
2902     case DW_OP_reg3:
2903       return "DW_OP_reg3";
2904     case DW_OP_reg4:
2905       return "DW_OP_reg4";
2906     case DW_OP_reg5:
2907       return "DW_OP_reg5";
2908     case DW_OP_reg6:
2909       return "DW_OP_reg6";
2910     case DW_OP_reg7:
2911       return "DW_OP_reg7";
2912     case DW_OP_reg8:
2913       return "DW_OP_reg8";
2914     case DW_OP_reg9:
2915       return "DW_OP_reg9";
2916     case DW_OP_reg10:
2917       return "DW_OP_reg10";
2918     case DW_OP_reg11:
2919       return "DW_OP_reg11";
2920     case DW_OP_reg12:
2921       return "DW_OP_reg12";
2922     case DW_OP_reg13:
2923       return "DW_OP_reg13";
2924     case DW_OP_reg14:
2925       return "DW_OP_reg14";
2926     case DW_OP_reg15:
2927       return "DW_OP_reg15";
2928     case DW_OP_reg16:
2929       return "DW_OP_reg16";
2930     case DW_OP_reg17:
2931       return "DW_OP_reg17";
2932     case DW_OP_reg18:
2933       return "DW_OP_reg18";
2934     case DW_OP_reg19:
2935       return "DW_OP_reg19";
2936     case DW_OP_reg20:
2937       return "DW_OP_reg20";
2938     case DW_OP_reg21:
2939       return "DW_OP_reg21";
2940     case DW_OP_reg22:
2941       return "DW_OP_reg22";
2942     case DW_OP_reg23:
2943       return "DW_OP_reg23";
2944     case DW_OP_reg24:
2945       return "DW_OP_reg24";
2946     case DW_OP_reg25:
2947       return "DW_OP_reg25";
2948     case DW_OP_reg26:
2949       return "DW_OP_reg26";
2950     case DW_OP_reg27:
2951       return "DW_OP_reg27";
2952     case DW_OP_reg28:
2953       return "DW_OP_reg28";
2954     case DW_OP_reg29:
2955       return "DW_OP_reg29";
2956     case DW_OP_reg30:
2957       return "DW_OP_reg30";
2958     case DW_OP_reg31:
2959       return "DW_OP_reg31";
2960     case DW_OP_breg0:
2961       return "DW_OP_breg0";
2962     case DW_OP_breg1:
2963       return "DW_OP_breg1";
2964     case DW_OP_breg2:
2965       return "DW_OP_breg2";
2966     case DW_OP_breg3:
2967       return "DW_OP_breg3";
2968     case DW_OP_breg4:
2969       return "DW_OP_breg4";
2970     case DW_OP_breg5:
2971       return "DW_OP_breg5";
2972     case DW_OP_breg6:
2973       return "DW_OP_breg6";
2974     case DW_OP_breg7:
2975       return "DW_OP_breg7";
2976     case DW_OP_breg8:
2977       return "DW_OP_breg8";
2978     case DW_OP_breg9:
2979       return "DW_OP_breg9";
2980     case DW_OP_breg10:
2981       return "DW_OP_breg10";
2982     case DW_OP_breg11:
2983       return "DW_OP_breg11";
2984     case DW_OP_breg12:
2985       return "DW_OP_breg12";
2986     case DW_OP_breg13:
2987       return "DW_OP_breg13";
2988     case DW_OP_breg14:
2989       return "DW_OP_breg14";
2990     case DW_OP_breg15:
2991       return "DW_OP_breg15";
2992     case DW_OP_breg16:
2993       return "DW_OP_breg16";
2994     case DW_OP_breg17:
2995       return "DW_OP_breg17";
2996     case DW_OP_breg18:
2997       return "DW_OP_breg18";
2998     case DW_OP_breg19:
2999       return "DW_OP_breg19";
3000     case DW_OP_breg20:
3001       return "DW_OP_breg20";
3002     case DW_OP_breg21:
3003       return "DW_OP_breg21";
3004     case DW_OP_breg22:
3005       return "DW_OP_breg22";
3006     case DW_OP_breg23:
3007       return "DW_OP_breg23";
3008     case DW_OP_breg24:
3009       return "DW_OP_breg24";
3010     case DW_OP_breg25:
3011       return "DW_OP_breg25";
3012     case DW_OP_breg26:
3013       return "DW_OP_breg26";
3014     case DW_OP_breg27:
3015       return "DW_OP_breg27";
3016     case DW_OP_breg28:
3017       return "DW_OP_breg28";
3018     case DW_OP_breg29:
3019       return "DW_OP_breg29";
3020     case DW_OP_breg30:
3021       return "DW_OP_breg30";
3022     case DW_OP_breg31:
3023       return "DW_OP_breg31";
3024     case DW_OP_regx:
3025       return "DW_OP_regx";
3026     case DW_OP_fbreg:
3027       return "DW_OP_fbreg";
3028     case DW_OP_bregx:
3029       return "DW_OP_bregx";
3030     case DW_OP_piece:
3031       return "DW_OP_piece";
3032     case DW_OP_deref_size:
3033       return "DW_OP_deref_size";
3034     case DW_OP_xderef_size:
3035       return "DW_OP_xderef_size";
3036     case DW_OP_nop:
3037       return "DW_OP_nop";
3038     case DW_OP_push_object_address:
3039       return "DW_OP_push_object_address";
3040     case DW_OP_call2:
3041       return "DW_OP_call2";
3042     case DW_OP_call4:
3043       return "DW_OP_call4";
3044     case DW_OP_call_ref:
3045       return "DW_OP_call_ref";
3046     case DW_OP_GNU_push_tls_address:
3047       return "DW_OP_GNU_push_tls_address";
3048     default:
3049       return "OP_<unknown>";
3050     }
3051 }
3052
3053 /* Return a pointer to a newly allocated location description.  Location
3054    descriptions are simple expression terms that can be strung
3055    together to form more complicated location (address) descriptions.  */
3056
3057 static inline dw_loc_descr_ref
3058 new_loc_descr (enum dwarf_location_atom op, unsigned HOST_WIDE_INT oprnd1,
3059                unsigned HOST_WIDE_INT oprnd2)
3060 {
3061   dw_loc_descr_ref descr = ggc_alloc_cleared (sizeof (dw_loc_descr_node));
3062
3063   descr->dw_loc_opc = op;
3064   descr->dw_loc_oprnd1.val_class = dw_val_class_unsigned_const;
3065   descr->dw_loc_oprnd1.v.val_unsigned = oprnd1;
3066   descr->dw_loc_oprnd2.val_class = dw_val_class_unsigned_const;
3067   descr->dw_loc_oprnd2.v.val_unsigned = oprnd2;
3068
3069   return descr;
3070 }
3071
3072 /* Add a location description term to a location description expression.  */
3073
3074 static inline void
3075 add_loc_descr (dw_loc_descr_ref *list_head, dw_loc_descr_ref descr)
3076 {
3077   dw_loc_descr_ref *d;
3078
3079   /* Find the end of the chain.  */
3080   for (d = list_head; (*d) != NULL; d = &(*d)->dw_loc_next)
3081     ;
3082
3083   *d = descr;
3084 }
3085
3086 /* Return the size of a location descriptor.  */
3087
3088 static unsigned long
3089 size_of_loc_descr (dw_loc_descr_ref loc)
3090 {
3091   unsigned long size = 1;
3092
3093   switch (loc->dw_loc_opc)
3094     {
3095     case DW_OP_addr:
3096     case INTERNAL_DW_OP_tls_addr:
3097       size += DWARF2_ADDR_SIZE;
3098       break;
3099     case DW_OP_const1u:
3100     case DW_OP_const1s:
3101       size += 1;
3102       break;
3103     case DW_OP_const2u:
3104     case DW_OP_const2s:
3105       size += 2;
3106       break;
3107     case DW_OP_const4u:
3108     case DW_OP_const4s:
3109       size += 4;
3110       break;
3111     case DW_OP_const8u:
3112     case DW_OP_const8s:
3113       size += 8;
3114       break;
3115     case DW_OP_constu:
3116       size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
3117       break;
3118     case DW_OP_consts:
3119       size += size_of_sleb128 (loc->dw_loc_oprnd1.v.val_int);
3120       break;
3121     case DW_OP_pick:
3122       size += 1;
3123       break;
3124     case DW_OP_plus_uconst:
3125       size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
3126       break;
3127     case DW_OP_skip:
3128     case DW_OP_bra:
3129       size += 2;
3130       break;
3131     case DW_OP_breg0:
3132     case DW_OP_breg1:
3133     case DW_OP_breg2:
3134     case DW_OP_breg3:
3135     case DW_OP_breg4:
3136     case DW_OP_breg5:
3137     case DW_OP_breg6:
3138     case DW_OP_breg7:
3139     case DW_OP_breg8:
3140     case DW_OP_breg9:
3141     case DW_OP_breg10:
3142     case DW_OP_breg11:
3143     case DW_OP_breg12:
3144     case DW_OP_breg13:
3145     case DW_OP_breg14:
3146     case DW_OP_breg15:
3147     case DW_OP_breg16:
3148     case DW_OP_breg17:
3149     case DW_OP_breg18:
3150     case DW_OP_breg19:
3151     case DW_OP_breg20:
3152     case DW_OP_breg21:
3153     case DW_OP_breg22:
3154     case DW_OP_breg23:
3155     case DW_OP_breg24:
3156     case DW_OP_breg25:
3157     case DW_OP_breg26:
3158     case DW_OP_breg27:
3159     case DW_OP_breg28:
3160     case DW_OP_breg29:
3161     case DW_OP_breg30:
3162     case DW_OP_breg31:
3163       size += size_of_sleb128 (loc->dw_loc_oprnd1.v.val_int);
3164       break;
3165     case DW_OP_regx:
3166       size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
3167       break;
3168     case DW_OP_fbreg:
3169       size += size_of_sleb128 (loc->dw_loc_oprnd1.v.val_int);
3170       break;
3171     case DW_OP_bregx:
3172       size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
3173       size += size_of_sleb128 (loc->dw_loc_oprnd2.v.val_int);
3174       break;
3175     case DW_OP_piece:
3176       size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
3177       break;
3178     case DW_OP_deref_size:
3179     case DW_OP_xderef_size:
3180       size += 1;
3181       break;
3182     case DW_OP_call2:
3183       size += 2;
3184       break;
3185     case DW_OP_call4:
3186       size += 4;
3187       break;
3188     case DW_OP_call_ref:
3189       size += DWARF2_ADDR_SIZE;
3190       break;
3191     default:
3192       break;
3193     }
3194
3195   return size;
3196 }
3197
3198 /* Return the size of a series of location descriptors.  */
3199
3200 static unsigned long
3201 size_of_locs (dw_loc_descr_ref loc)
3202 {
3203   unsigned long size;
3204
3205   for (size = 0; loc != NULL; loc = loc->dw_loc_next)
3206     {
3207       loc->dw_loc_addr = size;
3208       size += size_of_loc_descr (loc);
3209     }
3210
3211   return size;
3212 }
3213
3214 /* Output location description stack opcode's operands (if any).  */
3215
3216 static void
3217 output_loc_operands (dw_loc_descr_ref loc)
3218 {
3219   dw_val_ref val1 = &loc->dw_loc_oprnd1;
3220   dw_val_ref val2 = &loc->dw_loc_oprnd2;
3221
3222   switch (loc->dw_loc_opc)
3223     {
3224 #ifdef DWARF2_DEBUGGING_INFO
3225     case DW_OP_addr:
3226       dw2_asm_output_addr_rtx (DWARF2_ADDR_SIZE, val1->v.val_addr, NULL);
3227       break;
3228     case DW_OP_const2u:
3229     case DW_OP_const2s:
3230       dw2_asm_output_data (2, val1->v.val_int, NULL);
3231       break;
3232     case DW_OP_const4u:
3233     case DW_OP_const4s:
3234       dw2_asm_output_data (4, val1->v.val_int, NULL);
3235       break;
3236     case DW_OP_const8u:
3237     case DW_OP_const8s:
3238       gcc_assert (HOST_BITS_PER_LONG >= 64);
3239       dw2_asm_output_data (8, val1->v.val_int, NULL);
3240       break;
3241     case DW_OP_skip:
3242     case DW_OP_bra:
3243       {
3244         int offset;
3245
3246         gcc_assert (val1->val_class == dw_val_class_loc);
3247         offset = val1->v.val_loc->dw_loc_addr - (loc->dw_loc_addr + 3);
3248
3249         dw2_asm_output_data (2, offset, NULL);
3250       }
3251       break;
3252 #else
3253     case DW_OP_addr:
3254     case DW_OP_const2u:
3255     case DW_OP_const2s:
3256     case DW_OP_const4u:
3257     case DW_OP_const4s:
3258     case DW_OP_const8u:
3259     case DW_OP_const8s:
3260     case DW_OP_skip:
3261     case DW_OP_bra:
3262       /* We currently don't make any attempt to make sure these are
3263          aligned properly like we do for the main unwind info, so
3264          don't support emitting things larger than a byte if we're
3265          only doing unwinding.  */
3266       gcc_unreachable ();
3267 #endif
3268     case DW_OP_const1u:
3269     case DW_OP_const1s:
3270       dw2_asm_output_data (1, val1->v.val_int, NULL);
3271       break;
3272     case DW_OP_constu:
3273       dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
3274       break;
3275     case DW_OP_consts:
3276       dw2_asm_output_data_sleb128 (val1->v.val_int, NULL);
3277       break;
3278     case DW_OP_pick:
3279       dw2_asm_output_data (1, val1->v.val_int, NULL);
3280       break;
3281     case DW_OP_plus_uconst:
3282       dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
3283       break;
3284     case DW_OP_breg0:
3285     case DW_OP_breg1:
3286     case DW_OP_breg2:
3287     case DW_OP_breg3:
3288     case DW_OP_breg4:
3289     case DW_OP_breg5:
3290     case DW_OP_breg6:
3291     case DW_OP_breg7:
3292     case DW_OP_breg8:
3293     case DW_OP_breg9:
3294     case DW_OP_breg10:
3295     case DW_OP_breg11:
3296     case DW_OP_breg12:
3297     case DW_OP_breg13:
3298     case DW_OP_breg14:
3299     case DW_OP_breg15:
3300     case DW_OP_breg16:
3301     case DW_OP_breg17:
3302     case DW_OP_breg18:
3303     case DW_OP_breg19:
3304     case DW_OP_breg20:
3305     case DW_OP_breg21:
3306     case DW_OP_breg22:
3307     case DW_OP_breg23:
3308     case DW_OP_breg24:
3309     case DW_OP_breg25:
3310     case DW_OP_breg26:
3311     case DW_OP_breg27:
3312     case DW_OP_breg28:
3313     case DW_OP_breg29:
3314     case DW_OP_breg30:
3315     case DW_OP_breg31:
3316       dw2_asm_output_data_sleb128 (val1->v.val_int, NULL);
3317       break;
3318     case DW_OP_regx:
3319       dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
3320       break;
3321     case DW_OP_fbreg:
3322       dw2_asm_output_data_sleb128 (val1->v.val_int, NULL);
3323       break;
3324     case DW_OP_bregx:
3325       dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
3326       dw2_asm_output_data_sleb128 (val2->v.val_int, NULL);
3327       break;
3328     case DW_OP_piece:
3329       dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
3330       break;
3331     case DW_OP_deref_size:
3332     case DW_OP_xderef_size:
3333       dw2_asm_output_data (1, val1->v.val_int, NULL);
3334       break;
3335
3336     case INTERNAL_DW_OP_tls_addr:
3337       if (targetm.asm_out.output_dwarf_dtprel)
3338         {
3339           targetm.asm_out.output_dwarf_dtprel (asm_out_file,
3340                                                DWARF2_ADDR_SIZE,
3341                                                val1->v.val_addr);
3342           fputc ('\n', asm_out_file);
3343         }
3344       else
3345         gcc_unreachable ();
3346       break;
3347
3348     default:
3349       /* Other codes have no operands.  */
3350       break;
3351     }
3352 }
3353
3354 /* Output a sequence of location operations.  */
3355
3356 static void
3357 output_loc_sequence (dw_loc_descr_ref loc)
3358 {
3359   for (; loc != NULL; loc = loc->dw_loc_next)
3360     {
3361       /* Output the opcode.  */
3362       dw2_asm_output_data (1, loc->dw_loc_opc,
3363                            "%s", dwarf_stack_op_name (loc->dw_loc_opc));
3364
3365       /* Output the operand(s) (if any).  */
3366       output_loc_operands (loc);
3367     }
3368 }
3369
3370 /* This routine will generate the correct assembly data for a location
3371    description based on a cfi entry with a complex address.  */
3372
3373 static void
3374 output_cfa_loc (dw_cfi_ref cfi)
3375 {
3376   dw_loc_descr_ref loc;
3377   unsigned long size;
3378
3379   /* Output the size of the block.  */
3380   loc = cfi->dw_cfi_oprnd1.dw_cfi_loc;
3381   size = size_of_locs (loc);
3382   dw2_asm_output_data_uleb128 (size, NULL);
3383
3384   /* Now output the operations themselves.  */
3385   output_loc_sequence (loc);
3386 }
3387
3388 /* This function builds a dwarf location descriptor sequence from
3389    a dw_cfa_location.  */
3390
3391 static struct dw_loc_descr_struct *
3392 build_cfa_loc (dw_cfa_location *cfa)
3393 {
3394   struct dw_loc_descr_struct *head, *tmp;
3395
3396   if (cfa->indirect)
3397     {
3398       if (cfa->base_offset)
3399         {
3400           if (cfa->reg <= 31)
3401             head = new_loc_descr (DW_OP_breg0 + cfa->reg, cfa->base_offset, 0);
3402           else
3403             head = new_loc_descr (DW_OP_bregx, cfa->reg, cfa->base_offset);
3404         }
3405       else if (cfa->reg <= 31)
3406         head = new_loc_descr (DW_OP_reg0 + cfa->reg, 0, 0);
3407       else
3408         head = new_loc_descr (DW_OP_regx, cfa->reg, 0);
3409
3410       head->dw_loc_oprnd1.val_class = dw_val_class_const;
3411       tmp = new_loc_descr (DW_OP_deref, 0, 0);
3412       add_loc_descr (&head, tmp);
3413       if (cfa->offset != 0)
3414         {
3415           tmp = new_loc_descr (DW_OP_plus_uconst, cfa->offset, 0);
3416           add_loc_descr (&head, tmp);
3417         }
3418     }
3419   else
3420     {
3421       if (cfa->offset == 0)
3422         if (cfa->reg <= 31)
3423           head = new_loc_descr (DW_OP_reg0 + cfa->reg, 0, 0);
3424         else
3425           head = new_loc_descr (DW_OP_regx, cfa->reg, 0);
3426       else if (cfa->reg <= 31)
3427         head = new_loc_descr (DW_OP_breg0 + cfa->reg, cfa->offset, 0);
3428       else
3429         head = new_loc_descr (DW_OP_bregx, cfa->reg, cfa->offset);
3430     }
3431
3432   return head;
3433 }
3434
3435 /* This function fills in aa dw_cfa_location structure from a dwarf location
3436    descriptor sequence.  */
3437
3438 static void
3439 get_cfa_from_loc_descr (dw_cfa_location *cfa, struct dw_loc_descr_struct *loc)
3440 {
3441   struct dw_loc_descr_struct *ptr;
3442   cfa->offset = 0;
3443   cfa->base_offset = 0;
3444   cfa->indirect = 0;
3445   cfa->reg = -1;
3446
3447   for (ptr = loc; ptr != NULL; ptr = ptr->dw_loc_next)
3448     {
3449       enum dwarf_location_atom op = ptr->dw_loc_opc;
3450
3451       switch (op)
3452         {
3453         case DW_OP_reg0:
3454         case DW_OP_reg1:
3455         case DW_OP_reg2:
3456         case DW_OP_reg3:
3457         case DW_OP_reg4:
3458         case DW_OP_reg5:
3459         case DW_OP_reg6:
3460         case DW_OP_reg7:
3461         case DW_OP_reg8:
3462         case DW_OP_reg9:
3463         case DW_OP_reg10:
3464         case DW_OP_reg11:
3465         case DW_OP_reg12:
3466         case DW_OP_reg13:
3467         case DW_OP_reg14:
3468         case DW_OP_reg15:
3469         case DW_OP_reg16:
3470         case DW_OP_reg17:
3471         case DW_OP_reg18:
3472         case DW_OP_reg19:
3473         case DW_OP_reg20:
3474         case DW_OP_reg21:
3475         case DW_OP_reg22:
3476         case DW_OP_reg23:
3477         case DW_OP_reg24:
3478         case DW_OP_reg25:
3479         case DW_OP_reg26:
3480         case DW_OP_reg27:
3481         case DW_OP_reg28:
3482         case DW_OP_reg29:
3483         case DW_OP_reg30:
3484         case DW_OP_reg31:
3485           cfa->reg = op - DW_OP_reg0;
3486           break;
3487         case DW_OP_regx:
3488           cfa->reg = ptr->dw_loc_oprnd1.v.val_int;
3489           break;
3490         case DW_OP_breg0:
3491         case DW_OP_breg1:
3492         case DW_OP_breg2:
3493         case DW_OP_breg3:
3494         case DW_OP_breg4:
3495         case DW_OP_breg5:
3496         case DW_OP_breg6:
3497         case DW_OP_breg7:
3498         case DW_OP_breg8:
3499         case DW_OP_breg9:
3500         case DW_OP_breg10:
3501         case DW_OP_breg11:
3502         case DW_OP_breg12:
3503         case DW_OP_breg13:
3504         case DW_OP_breg14:
3505         case DW_OP_breg15:
3506         case DW_OP_breg16:
3507         case DW_OP_breg17:
3508         case DW_OP_breg18:
3509         case DW_OP_breg19:
3510         case DW_OP_breg20:
3511         case DW_OP_breg21:
3512         case DW_OP_breg22:
3513         case DW_OP_breg23:
3514         case DW_OP_breg24:
3515         case DW_OP_breg25:
3516         case DW_OP_breg26:
3517         case DW_OP_breg27:
3518         case DW_OP_breg28:
3519         case DW_OP_breg29:
3520         case DW_OP_breg30:
3521         case DW_OP_breg31:
3522           cfa->reg = op - DW_OP_breg0;
3523           cfa->base_offset = ptr->dw_loc_oprnd1.v.val_int;
3524           break;
3525         case DW_OP_bregx:
3526           cfa->reg = ptr->dw_loc_oprnd1.v.val_int;
3527           cfa->base_offset = ptr->dw_loc_oprnd2.v.val_int;
3528           break;
3529         case DW_OP_deref:
3530           cfa->indirect = 1;
3531           break;
3532         case DW_OP_plus_uconst:
3533           cfa->offset = ptr->dw_loc_oprnd1.v.val_unsigned;
3534           break;
3535         default:
3536           internal_error ("DW_LOC_OP %s not implemented",
3537                           dwarf_stack_op_name (ptr->dw_loc_opc));
3538         }
3539     }
3540 }
3541 #endif /* .debug_frame support */
3542 \f
3543 /* And now, the support for symbolic debugging information.  */
3544 #ifdef DWARF2_DEBUGGING_INFO
3545
3546 /* .debug_str support.  */
3547 static int output_indirect_string (void **, void *);
3548
3549 static void dwarf2out_init (const char *);
3550 static void dwarf2out_finish (const char *);
3551 static void dwarf2out_define (unsigned int, const char *);
3552 static void dwarf2out_undef (unsigned int, const char *);
3553 static void dwarf2out_start_source_file (unsigned, const char *);
3554 static void dwarf2out_end_source_file (unsigned);
3555 static void dwarf2out_begin_block (unsigned, unsigned);
3556 static void dwarf2out_end_block (unsigned, unsigned);
3557 static bool dwarf2out_ignore_block (tree);
3558 static void dwarf2out_global_decl (tree);
3559 static void dwarf2out_type_decl (tree, int);
3560 static void dwarf2out_imported_module_or_decl (tree, tree);
3561 static void dwarf2out_abstract_function (tree);
3562 static void dwarf2out_var_location (rtx);
3563 static void dwarf2out_begin_function (tree);
3564 static void dwarf2out_switch_text_section (void);
3565
3566 /* The debug hooks structure.  */
3567
3568 const struct gcc_debug_hooks dwarf2_debug_hooks =
3569 {
3570   dwarf2out_init,
3571   dwarf2out_finish,
3572   dwarf2out_define,
3573   dwarf2out_undef,
3574   dwarf2out_start_source_file,
3575   dwarf2out_end_source_file,
3576   dwarf2out_begin_block,
3577   dwarf2out_end_block,
3578   dwarf2out_ignore_block,
3579   dwarf2out_source_line,
3580   dwarf2out_begin_prologue,
3581   debug_nothing_int_charstar,   /* end_prologue */
3582   dwarf2out_end_epilogue,
3583   dwarf2out_begin_function,
3584   debug_nothing_int,            /* end_function */
3585   dwarf2out_decl,               /* function_decl */
3586   dwarf2out_global_decl,
3587   dwarf2out_type_decl,          /* type_decl */
3588   dwarf2out_imported_module_or_decl,
3589   debug_nothing_tree,           /* deferred_inline_function */
3590   /* The DWARF 2 backend tries to reduce debugging bloat by not
3591      emitting the abstract description of inline functions until
3592      something tries to reference them.  */
3593   dwarf2out_abstract_function,  /* outlining_inline_function */
3594   debug_nothing_rtx,            /* label */
3595   debug_nothing_int,            /* handle_pch */
3596   dwarf2out_var_location,
3597   dwarf2out_switch_text_section,
3598   1                             /* start_end_main_source_file */
3599 };
3600 #endif
3601 \f
3602 /* NOTE: In the comments in this file, many references are made to
3603    "Debugging Information Entries".  This term is abbreviated as `DIE'
3604    throughout the remainder of this file.  */
3605
3606 /* An internal representation of the DWARF output is built, and then
3607    walked to generate the DWARF debugging info.  The walk of the internal
3608    representation is done after the entire program has been compiled.
3609    The types below are used to describe the internal representation.  */
3610
3611 /* Various DIE's use offsets relative to the beginning of the
3612    .debug_info section to refer to each other.  */
3613
3614 typedef long int dw_offset;
3615
3616 /* Define typedefs here to avoid circular dependencies.  */
3617
3618 typedef struct dw_attr_struct *dw_attr_ref;
3619 typedef struct dw_line_info_struct *dw_line_info_ref;
3620 typedef struct dw_separate_line_info_struct *dw_separate_line_info_ref;
3621 typedef struct pubname_struct *pubname_ref;
3622 typedef struct dw_ranges_struct *dw_ranges_ref;
3623
3624 /* Each entry in the line_info_table maintains the file and
3625    line number associated with the label generated for that
3626    entry.  The label gives the PC value associated with
3627    the line number entry.  */
3628
3629 typedef struct dw_line_info_struct GTY(())
3630 {
3631   unsigned long dw_file_num;
3632   unsigned long dw_line_num;
3633 }
3634 dw_line_info_entry;
3635
3636 /* Line information for functions in separate sections; each one gets its
3637    own sequence.  */
3638 typedef struct dw_separate_line_info_struct GTY(())
3639 {
3640   unsigned long dw_file_num;
3641   unsigned long dw_line_num;
3642   unsigned long function;
3643 }
3644 dw_separate_line_info_entry;
3645
3646 /* Each DIE attribute has a field specifying the attribute kind,
3647    a link to the next attribute in the chain, and an attribute value.
3648    Attributes are typically linked below the DIE they modify.  */
3649
3650 typedef struct dw_attr_struct GTY(())
3651 {
3652   enum dwarf_attribute dw_attr;
3653   dw_attr_ref dw_attr_next;
3654   dw_val_node dw_attr_val;
3655 }
3656 dw_attr_node;
3657
3658 /* The Debugging Information Entry (DIE) structure */
3659
3660 typedef struct die_struct GTY(())
3661 {
3662   enum dwarf_tag die_tag;
3663   char *die_symbol;
3664   dw_attr_ref die_attr;
3665   dw_die_ref die_parent;
3666   dw_die_ref die_child;
3667   dw_die_ref die_sib;
3668   dw_die_ref die_definition; /* ref from a specification to its definition */
3669   dw_offset die_offset;
3670   unsigned long die_abbrev;
3671   int die_mark;
3672   unsigned int decl_id;
3673 }
3674 die_node;
3675
3676 /* The pubname structure */
3677
3678 typedef struct pubname_struct GTY(())
3679 {
3680   dw_die_ref die;
3681   char *name;
3682 }
3683 pubname_entry;
3684
3685 struct dw_ranges_struct GTY(())
3686 {
3687   int block_num;
3688 };
3689
3690 /* The limbo die list structure.  */
3691 typedef struct limbo_die_struct GTY(())
3692 {
3693   dw_die_ref die;
3694   tree created_for;
3695   struct limbo_die_struct *next;
3696 }
3697 limbo_die_node;
3698
3699 /* How to start an assembler comment.  */
3700 #ifndef ASM_COMMENT_START
3701 #define ASM_COMMENT_START ";#"
3702 #endif
3703
3704 /* Define a macro which returns nonzero for a TYPE_DECL which was
3705    implicitly generated for a tagged type.
3706
3707    Note that unlike the gcc front end (which generates a NULL named
3708    TYPE_DECL node for each complete tagged type, each array type, and
3709    each function type node created) the g++ front end generates a
3710    _named_ TYPE_DECL node for each tagged type node created.
3711    These TYPE_DECLs have DECL_ARTIFICIAL set, so we know not to
3712    generate a DW_TAG_typedef DIE for them.  */
3713
3714 #define TYPE_DECL_IS_STUB(decl)                         \
3715   (DECL_NAME (decl) == NULL_TREE                        \
3716    || (DECL_ARTIFICIAL (decl)                           \
3717        && is_tagged_type (TREE_TYPE (decl))             \
3718        && ((decl == TYPE_STUB_DECL (TREE_TYPE (decl)))  \
3719            /* This is necessary for stub decls that     \
3720               appear in nested inline functions.  */    \
3721            || (DECL_ABSTRACT_ORIGIN (decl) != NULL_TREE \
3722                && (decl_ultimate_origin (decl)          \
3723                    == TYPE_STUB_DECL (TREE_TYPE (decl)))))))
3724
3725 /* Information concerning the compilation unit's programming
3726    language, and compiler version.  */
3727
3728 /* Fixed size portion of the DWARF compilation unit header.  */
3729 #define DWARF_COMPILE_UNIT_HEADER_SIZE \
3730   (DWARF_INITIAL_LENGTH_SIZE + DWARF_OFFSET_SIZE + 3)
3731
3732 /* Fixed size portion of public names info.  */
3733 #define DWARF_PUBNAMES_HEADER_SIZE (2 * DWARF_OFFSET_SIZE + 2)
3734
3735 /* Fixed size portion of the address range info.  */
3736 #define DWARF_ARANGES_HEADER_SIZE                                       \
3737   (DWARF_ROUND (DWARF_INITIAL_LENGTH_SIZE + DWARF_OFFSET_SIZE + 4,      \
3738                 DWARF2_ADDR_SIZE * 2)                                   \
3739    - DWARF_INITIAL_LENGTH_SIZE)
3740
3741 /* Size of padding portion in the address range info.  It must be
3742    aligned to twice the pointer size.  */
3743 #define DWARF_ARANGES_PAD_SIZE \
3744   (DWARF_ROUND (DWARF_INITIAL_LENGTH_SIZE + DWARF_OFFSET_SIZE + 4, \
3745                 DWARF2_ADDR_SIZE * 2) \
3746    - (DWARF_INITIAL_LENGTH_SIZE + DWARF_OFFSET_SIZE + 4))
3747
3748 /* Use assembler line directives if available.  */
3749 #ifndef DWARF2_ASM_LINE_DEBUG_INFO
3750 #ifdef HAVE_AS_DWARF2_DEBUG_LINE
3751 #define DWARF2_ASM_LINE_DEBUG_INFO 1
3752 #else
3753 #define DWARF2_ASM_LINE_DEBUG_INFO 0
3754 #endif
3755 #endif
3756
3757 /* Minimum line offset in a special line info. opcode.
3758    This value was chosen to give a reasonable range of values.  */
3759 #define DWARF_LINE_BASE  -10
3760
3761 /* First special line opcode - leave room for the standard opcodes.  */
3762 #define DWARF_LINE_OPCODE_BASE  10
3763
3764 /* Range of line offsets in a special line info. opcode.  */
3765 #define DWARF_LINE_RANGE  (254-DWARF_LINE_OPCODE_BASE+1)
3766
3767 /* Flag that indicates the initial value of the is_stmt_start flag.
3768    In the present implementation, we do not mark any lines as
3769    the beginning of a source statement, because that information
3770    is not made available by the GCC front-end.  */
3771 #define DWARF_LINE_DEFAULT_IS_STMT_START 1
3772
3773 #ifdef DWARF2_DEBUGGING_INFO
3774 /* This location is used by calc_die_sizes() to keep track
3775    the offset of each DIE within the .debug_info section.  */
3776 static unsigned long next_die_offset;
3777 #endif
3778
3779 /* Record the root of the DIE's built for the current compilation unit.  */
3780 static GTY(()) dw_die_ref comp_unit_die;
3781
3782 /* A list of DIEs with a NULL parent waiting to be relocated.  */
3783 static GTY(()) limbo_die_node *limbo_die_list;
3784
3785 /* Filenames referenced by this compilation unit.  */
3786 static GTY(()) varray_type file_table;
3787 static GTY(()) varray_type file_table_emitted;
3788 static GTY(()) size_t file_table_last_lookup_index;
3789
3790 /* A hash table of references to DIE's that describe declarations.
3791    The key is a DECL_UID() which is a unique number identifying each decl.  */
3792 static GTY ((param_is (struct die_struct))) htab_t decl_die_table;
3793
3794 /* Node of the variable location list.  */
3795 struct var_loc_node GTY ((chain_next ("%h.next")))
3796 {
3797   rtx GTY (()) var_loc_note;
3798   const char * GTY (()) label;
3799   const char * GTY (()) section_label;
3800   struct var_loc_node * GTY (()) next;
3801 };
3802
3803 /* Variable location list.  */
3804 struct var_loc_list_def GTY (())
3805 {
3806   struct var_loc_node * GTY (()) first;
3807
3808   /* Do not mark the last element of the chained list because
3809      it is marked through the chain.  */
3810   struct var_loc_node * GTY ((skip ("%h"))) last;
3811
3812   /* DECL_UID of the variable decl.  */
3813   unsigned int decl_id;
3814 };
3815 typedef struct var_loc_list_def var_loc_list;
3816
3817
3818 /* Table of decl location linked lists.  */
3819 static GTY ((param_is (var_loc_list))) htab_t decl_loc_table;
3820
3821 /* A pointer to the base of a list of references to DIE's that
3822    are uniquely identified by their tag, presence/absence of
3823    children DIE's, and list of attribute/value pairs.  */
3824 static GTY((length ("abbrev_die_table_allocated")))
3825   dw_die_ref *abbrev_die_table;
3826
3827 /* Number of elements currently allocated for abbrev_die_table.  */
3828 static GTY(()) unsigned abbrev_die_table_allocated;
3829
3830 /* Number of elements in type_die_table currently in use.  */
3831 static GTY(()) unsigned abbrev_die_table_in_use;
3832
3833 /* Size (in elements) of increments by which we may expand the
3834    abbrev_die_table.  */
3835 #define ABBREV_DIE_TABLE_INCREMENT 256
3836
3837 /* A pointer to the base of a table that contains line information
3838    for each source code line in .text in the compilation unit.  */
3839 static GTY((length ("line_info_table_allocated")))
3840      dw_line_info_ref line_info_table;
3841
3842 /* Number of elements currently allocated for line_info_table.  */
3843 static GTY(()) unsigned line_info_table_allocated;
3844
3845 /* Number of elements in line_info_table currently in use.  */
3846 static GTY(()) unsigned line_info_table_in_use;
3847
3848 /* True if the compilation unit contains more than one .text section.  */
3849 static GTY(()) bool have_switched_text_section = false;
3850
3851 /* A pointer to the base of a table that contains line information
3852    for each source code line outside of .text in the compilation unit.  */
3853 static GTY ((length ("separate_line_info_table_allocated")))
3854      dw_separate_line_info_ref separate_line_info_table;
3855
3856 /* Number of elements currently allocated for separate_line_info_table.  */
3857 static GTY(()) unsigned separate_line_info_table_allocated;
3858
3859 /* Number of elements in separate_line_info_table currently in use.  */
3860 static GTY(()) unsigned separate_line_info_table_in_use;
3861
3862 /* Size (in elements) of increments by which we may expand the
3863    line_info_table.  */
3864 #define LINE_INFO_TABLE_INCREMENT 1024
3865
3866 /* A pointer to the base of a table that contains a list of publicly
3867    accessible names.  */
3868 static GTY ((length ("pubname_table_allocated"))) pubname_ref pubname_table;
3869
3870 /* Number of elements currently allocated for pubname_table.  */
3871 static GTY(()) unsigned pubname_table_allocated;
3872
3873 /* Number of elements in pubname_table currently in use.  */
3874 static GTY(()) unsigned pubname_table_in_use;
3875
3876 /* Size (in elements) of increments by which we may expand the
3877    pubname_table.  */
3878 #define PUBNAME_TABLE_INCREMENT 64
3879
3880 /* Array of dies for which we should generate .debug_arange info.  */
3881 static GTY((length ("arange_table_allocated"))) dw_die_ref *arange_table;
3882
3883 /* Number of elements currently allocated for arange_table.  */
3884 static GTY(()) unsigned arange_table_allocated;
3885
3886 /* Number of elements in arange_table currently in use.  */
3887 static GTY(()) unsigned arange_table_in_use;
3888
3889 /* Size (in elements) of increments by which we may expand the
3890    arange_table.  */
3891 #define ARANGE_TABLE_INCREMENT 64
3892
3893 /* Array of dies for which we should generate .debug_ranges info.  */
3894 static GTY ((length ("ranges_table_allocated"))) dw_ranges_ref ranges_table;
3895
3896 /* Number of elements currently allocated for ranges_table.  */
3897 static GTY(()) unsigned ranges_table_allocated;
3898
3899 /* Number of elements in ranges_table currently in use.  */
3900 static GTY(()) unsigned ranges_table_in_use;
3901
3902 /* Size (in elements) of increments by which we may expand the
3903    ranges_table.  */
3904 #define RANGES_TABLE_INCREMENT 64
3905
3906 /* Whether we have location lists that need outputting */
3907 static GTY(()) unsigned have_location_lists;
3908
3909 /* Unique label counter.  */
3910 static GTY(()) unsigned int loclabel_num;
3911
3912 #ifdef DWARF2_DEBUGGING_INFO
3913 /* Record whether the function being analyzed contains inlined functions.  */
3914 static int current_function_has_inlines;
3915 #endif
3916 #if 0 && defined (MIPS_DEBUGGING_INFO)
3917 static int comp_unit_has_inlines;
3918 #endif
3919
3920 /* Number of file tables emitted in maybe_emit_file().  */
3921 static GTY(()) int emitcount = 0;
3922
3923 /* Number of internal labels generated by gen_internal_sym().  */
3924 static GTY(()) int label_num;
3925
3926 #ifdef DWARF2_DEBUGGING_INFO
3927
3928 /* Offset from the "steady-state frame pointer" to the CFA,
3929    within the current function.  */
3930 static HOST_WIDE_INT frame_pointer_cfa_offset;
3931
3932 /* Forward declarations for functions defined in this file.  */
3933
3934 static int is_pseudo_reg (rtx);
3935 static tree type_main_variant (tree);
3936 static int is_tagged_type (tree);
3937 static const char *dwarf_tag_name (unsigned);
3938 static const char *dwarf_attr_name (unsigned);
3939 static const char *dwarf_form_name (unsigned);
3940 static tree decl_ultimate_origin (tree);
3941 static tree block_ultimate_origin (tree);
3942 static tree decl_class_context (tree);
3943 static void add_dwarf_attr (dw_die_ref, dw_attr_ref);
3944 static inline enum dw_val_class AT_class (dw_attr_ref);
3945 static void add_AT_flag (dw_die_ref, enum dwarf_attribute, unsigned);
3946 static inline unsigned AT_flag (dw_attr_ref);
3947 static void add_AT_int (dw_die_ref, enum dwarf_attribute, HOST_WIDE_INT);
3948 static inline HOST_WIDE_INT AT_int (dw_attr_ref);
3949 static void add_AT_unsigned (dw_die_ref, enum dwarf_attribute, unsigned HOST_WIDE_INT);
3950 static inline unsigned HOST_WIDE_INT AT_unsigned (dw_attr_ref);
3951 static void add_AT_long_long (dw_die_ref, enum dwarf_attribute, unsigned long,
3952                               unsigned long);
3953 static inline void add_AT_vec (dw_die_ref, enum dwarf_attribute, unsigned int,
3954                                unsigned int, unsigned char *);
3955 static hashval_t debug_str_do_hash (const void *);
3956 static int debug_str_eq (const void *, const void *);
3957 static void add_AT_string (dw_die_ref, enum dwarf_attribute, const char *);
3958 static inline const char *AT_string (dw_attr_ref);
3959 static int AT_string_form (dw_attr_ref);
3960 static void add_AT_die_ref (dw_die_ref, enum dwarf_attribute, dw_die_ref);
3961 static void add_AT_specification (dw_die_ref, dw_die_ref);
3962 static inline dw_die_ref AT_ref (dw_attr_ref);
3963 static inline int AT_ref_external (dw_attr_ref);
3964 static inline void set_AT_ref_external (dw_attr_ref, int);
3965 static void add_AT_fde_ref (dw_die_ref, enum dwarf_attribute, unsigned);
3966 static void add_AT_loc (dw_die_ref, enum dwarf_attribute, dw_loc_descr_ref);
3967 static inline dw_loc_descr_ref AT_loc (dw_attr_ref);
3968 static void add_AT_loc_list (dw_die_ref, enum dwarf_attribute,
3969                              dw_loc_list_ref);
3970 static inline dw_loc_list_ref AT_loc_list (dw_attr_ref);
3971 static void add_AT_addr (dw_die_ref, enum dwarf_attribute, rtx);
3972 static inline rtx AT_addr (dw_attr_ref);
3973 static void add_AT_lbl_id (dw_die_ref, enum dwarf_attribute, const char *);
3974 static void add_AT_lbl_offset (dw_die_ref, enum dwarf_attribute, const char *);
3975 static void add_AT_offset (dw_die_ref, enum dwarf_attribute,
3976                            unsigned HOST_WIDE_INT);
3977 static void add_AT_range_list (dw_die_ref, enum dwarf_attribute,
3978                                unsigned long);
3979 static inline const char *AT_lbl (dw_attr_ref);
3980 static dw_attr_ref get_AT (dw_die_ref, enum dwarf_attribute);
3981 static const char *get_AT_low_pc (dw_die_ref);
3982 static const char *get_AT_hi_pc (dw_die_ref);
3983 static const char *get_AT_string (dw_die_ref, enum dwarf_attribute);
3984 static int get_AT_flag (dw_die_ref, enum dwarf_attribute);
3985 static unsigned get_AT_unsigned (dw_die_ref, enum dwarf_attribute);
3986 static inline dw_die_ref get_AT_ref (dw_die_ref, enum dwarf_attribute);
3987 static bool is_c_family (void);
3988 static bool is_cxx (void);
3989 static bool is_java (void);
3990 static bool is_fortran (void);
3991 static bool is_ada (void);
3992 static void remove_AT (dw_die_ref, enum dwarf_attribute);
3993 static void remove_child_TAG (dw_die_ref, enum dwarf_tag);
3994 static inline void free_die (dw_die_ref);
3995 static void remove_children (dw_die_ref);
3996 static void add_child_die (dw_die_ref, dw_die_ref);
3997 static dw_die_ref new_die (enum dwarf_tag, dw_die_ref, tree);
3998 static dw_die_ref lookup_type_die (tree);
3999 static void equate_type_number_to_die (tree, dw_die_ref);
4000 static hashval_t decl_die_table_hash (const void *);
4001 static int decl_die_table_eq (const void *, const void *);
4002 static dw_die_ref lookup_decl_die (tree);
4003 static hashval_t decl_loc_table_hash (const void *);
4004 static int decl_loc_table_eq (const void *, const void *);
4005 static var_loc_list *lookup_decl_loc (tree);
4006 static void equate_decl_number_to_die (tree, dw_die_ref);
4007 static void add_var_loc_to_decl (tree, struct var_loc_node *);
4008 static void print_spaces (FILE *);
4009 static void print_die (dw_die_ref, FILE *);
4010 static void print_dwarf_line_table (FILE *);
4011 static void reverse_die_lists (dw_die_ref);
4012 static void reverse_all_dies (dw_die_ref);
4013 static dw_die_ref push_new_compile_unit (dw_die_ref, dw_die_ref);
4014 static dw_die_ref pop_compile_unit (dw_die_ref);
4015 static void loc_checksum (dw_loc_descr_ref, struct md5_ctx *);
4016 static void attr_checksum (dw_attr_ref, struct md5_ctx *, int *);
4017 static void die_checksum (dw_die_ref, struct md5_ctx *, int *);
4018 static int same_loc_p (dw_loc_descr_ref, dw_loc_descr_ref, int *);
4019 static int same_dw_val_p (dw_val_node *, dw_val_node *, int *);
4020 static int same_attr_p (dw_attr_ref, dw_attr_ref, int *);
4021 static int same_die_p (dw_die_ref, dw_die_ref, int *);
4022 static int same_die_p_wrap (dw_die_ref, dw_die_ref);
4023 static void compute_section_prefix (dw_die_ref);
4024 static int is_type_die (dw_die_ref);
4025 static int is_comdat_die (dw_die_ref);
4026 static int is_symbol_die (dw_die_ref);
4027 static void assign_symbol_names (dw_die_ref);
4028 static void break_out_includes (dw_die_ref);
4029 static hashval_t htab_cu_hash (const void *);
4030 static int htab_cu_eq (const void *, const void *);
4031 static void htab_cu_del (void *);
4032 static int check_duplicate_cu (dw_die_ref, htab_t, unsigned *);
4033 static void record_comdat_symbol_number (dw_die_ref, htab_t, unsigned);
4034 static void add_sibling_attributes (dw_die_ref);
4035 static void build_abbrev_table (dw_die_ref);
4036 static void output_location_lists (dw_die_ref);
4037 static int constant_size (long unsigned);
4038 static unsigned long size_of_die (dw_die_ref);
4039 static void calc_die_sizes (dw_die_ref);
4040 static void mark_dies (dw_die_ref);
4041 static void unmark_dies (dw_die_ref);
4042 static void unmark_all_dies (dw_die_ref);
4043 static unsigned long size_of_pubnames (void);
4044 static unsigned long size_of_aranges (void);
4045 static enum dwarf_form value_format (dw_attr_ref);
4046 static void output_value_format (dw_attr_ref);
4047 static void output_abbrev_section (void);
4048 static void output_die_symbol (dw_die_ref);
4049 static void output_die (dw_die_ref);
4050 static void output_compilation_unit_header (void);
4051 static void output_comp_unit (dw_die_ref, int);
4052 static const char *dwarf2_name (tree, int);
4053 static void add_pubname (tree, dw_die_ref);
4054 static void output_pubnames (void);
4055 static void add_arange (tree, dw_die_ref);
4056 static void output_aranges (void);
4057 static unsigned int add_ranges (tree);
4058 static void output_ranges (void);
4059 static void output_line_info (void);
4060 static void output_file_names (void);
4061 static dw_die_ref base_type_die (tree);
4062 static tree root_type (tree);
4063 static int is_base_type (tree);
4064 static bool is_subrange_type (tree);
4065 static dw_die_ref subrange_type_die (tree, dw_die_ref);
4066 static dw_die_ref modified_type_die (tree, int, int, dw_die_ref);
4067 static int type_is_enum (tree);
4068 static unsigned int dbx_reg_number (rtx);
4069 static void add_loc_descr_op_piece (dw_loc_descr_ref *, int);
4070 static dw_loc_descr_ref reg_loc_descriptor (rtx);
4071 static dw_loc_descr_ref one_reg_loc_descriptor (unsigned int);
4072 static dw_loc_descr_ref multiple_reg_loc_descriptor (rtx, rtx);
4073 static dw_loc_descr_ref int_loc_descriptor (HOST_WIDE_INT);
4074 static dw_loc_descr_ref based_loc_descr (rtx, HOST_WIDE_INT);
4075 static int is_based_loc (rtx);
4076 static dw_loc_descr_ref mem_loc_descriptor (rtx, enum machine_mode mode);
4077 static dw_loc_descr_ref concat_loc_descriptor (rtx, rtx);
4078 static dw_loc_descr_ref loc_descriptor (rtx);
4079 static dw_loc_descr_ref loc_descriptor_from_tree_1 (tree, int);
4080 static dw_loc_descr_ref loc_descriptor_from_tree (tree);
4081 static HOST_WIDE_INT ceiling (HOST_WIDE_INT, unsigned int);
4082 static tree field_type (tree);
4083 static unsigned int simple_type_align_in_bits (tree);
4084 static unsigned int simple_decl_align_in_bits (tree);
4085 static unsigned HOST_WIDE_INT simple_type_size_in_bits (tree);
4086 static HOST_WIDE_INT field_byte_offset (tree);
4087 static void add_AT_location_description (dw_die_ref, enum dwarf_attribute,
4088                                          dw_loc_descr_ref);
4089 static void add_data_member_location_attribute (dw_die_ref, tree);
4090 static void add_const_value_attribute (dw_die_ref, rtx);
4091 static void insert_int (HOST_WIDE_INT, unsigned, unsigned char *);
4092 static HOST_WIDE_INT extract_int (const unsigned char *, unsigned);
4093 static void insert_float (rtx, unsigned char *);
4094 static rtx rtl_for_decl_location (tree);
4095 static void add_location_or_const_value_attribute (dw_die_ref, tree,
4096                                                    enum dwarf_attribute);
4097 static void tree_add_const_value_attribute (dw_die_ref, tree);
4098 static void add_name_attribute (dw_die_ref, const char *);
4099 static void add_comp_dir_attribute (dw_die_ref);
4100 static void add_bound_info (dw_die_ref, enum dwarf_attribute, tree);
4101 static void add_subscript_info (dw_die_ref, tree);
4102 static void add_byte_size_attribute (dw_die_ref, tree);
4103 static void add_bit_offset_attribute (dw_die_ref, tree);
4104 static void add_bit_size_attribute (dw_die_ref, tree);
4105 static void add_prototyped_attribute (dw_die_ref, tree);
4106 static void add_abstract_origin_attribute (dw_die_ref, tree);
4107 static void add_pure_or_virtual_attribute (dw_die_ref, tree);
4108 static void add_src_coords_attributes (dw_die_ref, tree);
4109 static void add_name_and_src_coords_attributes (dw_die_ref, tree);
4110 static void push_decl_scope (tree);
4111 static void pop_decl_scope (void);
4112 static dw_die_ref scope_die_for (tree, dw_die_ref);
4113 static inline int local_scope_p (dw_die_ref);
4114 static inline int class_or_namespace_scope_p (dw_die_ref);
4115 static void add_type_attribute (dw_die_ref, tree, int, int, dw_die_ref);
4116 static void add_calling_convention_attribute (dw_die_ref, tree);
4117 static const char *type_tag (tree);
4118 static tree member_declared_type (tree);
4119 #if 0
4120 static const char *decl_start_label (tree);
4121 #endif
4122 static void gen_array_type_die (tree, dw_die_ref);
4123 #if 0
4124 static void gen_entry_point_die (tree, dw_die_ref);
4125 #endif
4126 static void gen_inlined_enumeration_type_die (tree, dw_die_ref);
4127 static void gen_inlined_structure_type_die (tree, dw_die_ref);
4128 static void gen_inlined_union_type_die (tree, dw_die_ref);
4129 static dw_die_ref gen_enumeration_type_die (tree, dw_die_ref);
4130 static dw_die_ref gen_formal_parameter_die (tree, dw_die_ref);
4131 static void gen_unspecified_parameters_die (tree, dw_die_ref);
4132 static void gen_formal_types_die (tree, dw_die_ref);
4133 static void gen_subprogram_die (tree, dw_die_ref);
4134 static void gen_variable_die (tree, dw_die_ref);
4135 static void gen_label_die (tree, dw_die_ref);
4136 static void gen_lexical_block_die (tree, dw_die_ref, int);
4137 static void gen_inlined_subroutine_die (tree, dw_die_ref, int);
4138 static void gen_field_die (tree, dw_die_ref);
4139 static void gen_ptr_to_mbr_type_die (tree, dw_die_ref);
4140 static dw_die_ref gen_compile_unit_die (const char *);
4141 static void gen_string_type_die (tree, dw_die_ref);
4142 static void gen_inheritance_die (tree, tree, dw_die_ref);
4143 static void gen_member_die (tree, dw_die_ref);
4144 static void gen_struct_or_union_type_die (tree, dw_die_ref);
4145 static void gen_subroutine_type_die (tree, dw_die_ref);
4146 static void gen_typedef_die (tree, dw_die_ref);
4147 static void gen_type_die (tree, dw_die_ref);
4148 static void gen_tagged_type_instantiation_die (tree, dw_die_ref);
4149 static void gen_block_die (tree, dw_die_ref, int);
4150 static void decls_for_scope (tree, dw_die_ref, int);
4151 static int is_redundant_typedef (tree);
4152 static void gen_namespace_die (tree);
4153 static void gen_decl_die (tree, dw_die_ref);
4154 static dw_die_ref force_decl_die (tree);
4155 static dw_die_ref force_type_die (tree);
4156 static dw_die_ref setup_namespace_context (tree, dw_die_ref);
4157 static void declare_in_namespace (tree, dw_die_ref);
4158 static unsigned lookup_filename (const char *);
4159 static void init_file_table (void);
4160 static void retry_incomplete_types (void);
4161 static void gen_type_die_for_member (tree, tree, dw_die_ref);
4162 static void splice_child_die (dw_die_ref, dw_die_ref);
4163 static int file_info_cmp (const void *, const void *);
4164 static dw_loc_list_ref new_loc_list (dw_loc_descr_ref, const char *,
4165                                      const char *, const char *, unsigned);
4166 static void add_loc_descr_to_loc_list (dw_loc_list_ref *, dw_loc_descr_ref,
4167                                        const char *, const char *,
4168                                        const char *);
4169 static void output_loc_list (dw_loc_list_ref);
4170 static char *gen_internal_sym (const char *);
4171
4172 static void prune_unmark_dies (dw_die_ref);
4173 static void prune_unused_types_mark (dw_die_ref, int);
4174 static void prune_unused_types_walk (dw_die_ref);
4175 static void prune_unused_types_walk_attribs (dw_die_ref);
4176 static void prune_unused_types_prune (dw_die_ref);
4177 static void prune_unused_types (void);
4178 static int maybe_emit_file (int);
4179
4180 /* Section names used to hold DWARF debugging information.  */
4181 #ifndef DEBUG_INFO_SECTION
4182 #define DEBUG_INFO_SECTION      ".debug_info"
4183 #endif
4184 #ifndef DEBUG_ABBREV_SECTION
4185 #define DEBUG_ABBREV_SECTION    ".debug_abbrev"
4186 #endif
4187 #ifndef DEBUG_ARANGES_SECTION
4188 #define DEBUG_ARANGES_SECTION   ".debug_aranges"
4189 #endif
4190 #ifndef DEBUG_MACINFO_SECTION
4191 #define DEBUG_MACINFO_SECTION   ".debug_macinfo"
4192 #endif
4193 #ifndef DEBUG_LINE_SECTION
4194 #define DEBUG_LINE_SECTION      ".debug_line"
4195 #endif
4196 #ifndef DEBUG_LOC_SECTION
4197 #define DEBUG_LOC_SECTION       ".debug_loc"
4198 #endif
4199 #ifndef DEBUG_PUBNAMES_SECTION
4200 #define DEBUG_PUBNAMES_SECTION  ".debug_pubnames"
4201 #endif
4202 #ifndef DEBUG_STR_SECTION
4203 #define DEBUG_STR_SECTION       ".debug_str"
4204 #endif
4205 #ifndef DEBUG_RANGES_SECTION
4206 #define DEBUG_RANGES_SECTION    ".debug_ranges"
4207 #endif
4208
4209 /* Standard ELF section names for compiled code and data.  */
4210 #ifndef TEXT_SECTION_NAME
4211 #define TEXT_SECTION_NAME       ".text"
4212 #endif
4213
4214 /* Section flags for .debug_str section.  */
4215 #define DEBUG_STR_SECTION_FLAGS \
4216   (HAVE_GAS_SHF_MERGE && flag_merge_constants                   \
4217    ? SECTION_DEBUG | SECTION_MERGE | SECTION_STRINGS | 1        \
4218    : SECTION_DEBUG)
4219
4220 /* Labels we insert at beginning sections we can reference instead of
4221    the section names themselves.  */
4222
4223 #ifndef TEXT_SECTION_LABEL
4224 #define TEXT_SECTION_LABEL              "Ltext"
4225 #endif
4226 #ifndef COLD_TEXT_SECTION_LABEL
4227 #define COLD_TEXT_SECTION_LABEL         "Ltext_cold"
4228 #endif
4229 #ifndef DEBUG_LINE_SECTION_LABEL
4230 #define DEBUG_LINE_SECTION_LABEL        "Ldebug_line"
4231 #endif
4232 #ifndef DEBUG_INFO_SECTION_LABEL
4233 #define DEBUG_INFO_SECTION_LABEL        "Ldebug_info"
4234 #endif
4235 #ifndef DEBUG_ABBREV_SECTION_LABEL
4236 #define DEBUG_ABBREV_SECTION_LABEL      "Ldebug_abbrev"
4237 #endif
4238 #ifndef DEBUG_LOC_SECTION_LABEL
4239 #define DEBUG_LOC_SECTION_LABEL         "Ldebug_loc"
4240 #endif
4241 #ifndef DEBUG_RANGES_SECTION_LABEL
4242 #define DEBUG_RANGES_SECTION_LABEL      "Ldebug_ranges"
4243 #endif
4244 #ifndef DEBUG_MACINFO_SECTION_LABEL
4245 #define DEBUG_MACINFO_SECTION_LABEL     "Ldebug_macinfo"
4246 #endif
4247
4248 /* Definitions of defaults for formats and names of various special
4249    (artificial) labels which may be generated within this file (when the -g
4250    options is used and DWARF2_DEBUGGING_INFO is in effect.
4251    If necessary, these may be overridden from within the tm.h file, but
4252    typically, overriding these defaults is unnecessary.  */
4253
4254 static char text_end_label[MAX_ARTIFICIAL_LABEL_BYTES];
4255 static char text_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
4256 static char cold_text_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
4257 static char cold_end_label[MAX_ARTIFICIAL_LABEL_BYTES]; 
4258 static char abbrev_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
4259 static char debug_info_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
4260 static char debug_line_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
4261 static char macinfo_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
4262 static char loc_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
4263 static char ranges_section_label[2 * MAX_ARTIFICIAL_LABEL_BYTES];
4264
4265 #ifndef TEXT_END_LABEL
4266 #define TEXT_END_LABEL          "Letext"
4267 #endif
4268 #ifndef COLD_END_LABEL
4269 #define COLD_END_LABEL          "Letext_cold"
4270 #endif
4271 #ifndef BLOCK_BEGIN_LABEL
4272 #define BLOCK_BEGIN_LABEL       "LBB"
4273 #endif
4274 #ifndef BLOCK_END_LABEL
4275 #define BLOCK_END_LABEL         "LBE"
4276 #endif
4277 #ifndef LINE_CODE_LABEL
4278 #define LINE_CODE_LABEL         "LM"
4279 #endif
4280 #ifndef SEPARATE_LINE_CODE_LABEL
4281 #define SEPARATE_LINE_CODE_LABEL        "LSM"
4282 #endif
4283 \f
4284 /* We allow a language front-end to designate a function that is to be
4285    called to "demangle" any name before it is put into a DIE.  */
4286
4287 static const char *(*demangle_name_func) (const char *);
4288
4289 void
4290 dwarf2out_set_demangle_name_func (const char *(*func) (const char *))
4291 {
4292   demangle_name_func = func;
4293 }
4294
4295 /* Test if rtl node points to a pseudo register.  */
4296
4297 static inline int
4298 is_pseudo_reg (rtx rtl)
4299 {
4300   return ((REG_P (rtl) && REGNO (rtl) >= FIRST_PSEUDO_REGISTER)
4301           || (GET_CODE (rtl) == SUBREG
4302               && REGNO (SUBREG_REG (rtl)) >= FIRST_PSEUDO_REGISTER));
4303 }
4304
4305 /* Return a reference to a type, with its const and volatile qualifiers
4306    removed.  */
4307
4308 static inline tree
4309 type_main_variant (tree type)
4310 {
4311   type = TYPE_MAIN_VARIANT (type);
4312
4313   /* ??? There really should be only one main variant among any group of
4314      variants of a given type (and all of the MAIN_VARIANT values for all
4315      members of the group should point to that one type) but sometimes the C
4316      front-end messes this up for array types, so we work around that bug
4317      here.  */
4318   if (TREE_CODE (type) == ARRAY_TYPE)
4319     while (type != TYPE_MAIN_VARIANT (type))
4320       type = TYPE_MAIN_VARIANT (type);
4321
4322   return type;
4323 }
4324
4325 /* Return nonzero if the given type node represents a tagged type.  */
4326
4327 static inline int
4328 is_tagged_type (tree type)
4329 {
4330   enum tree_code code = TREE_CODE (type);
4331
4332   return (code == RECORD_TYPE || code == UNION_TYPE
4333           || code == QUAL_UNION_TYPE || code == ENUMERAL_TYPE);
4334 }
4335
4336 /* Convert a DIE tag into its string name.  */
4337
4338 static const char *
4339 dwarf_tag_name (unsigned int tag)
4340 {
4341   switch (tag)
4342     {
4343     case DW_TAG_padding:
4344       return "DW_TAG_padding";
4345     case DW_TAG_array_type:
4346       return "DW_TAG_array_type";
4347     case DW_TAG_class_type:
4348       return "DW_TAG_class_type";
4349     case DW_TAG_entry_point:
4350       return "DW_TAG_entry_point";
4351     case DW_TAG_enumeration_type:
4352       return "DW_TAG_enumeration_type";
4353     case DW_TAG_formal_parameter:
4354       return "DW_TAG_formal_parameter";
4355     case DW_TAG_imported_declaration:
4356       return "DW_TAG_imported_declaration";
4357     case DW_TAG_label:
4358       return "DW_TAG_label";
4359     case DW_TAG_lexical_block:
4360       return "DW_TAG_lexical_block";
4361     case DW_TAG_member:
4362       return "DW_TAG_member";
4363     case DW_TAG_pointer_type:
4364       return "DW_TAG_pointer_type";
4365     case DW_TAG_reference_type:
4366       return "DW_TAG_reference_type";
4367     case DW_TAG_compile_unit:
4368       return "DW_TAG_compile_unit";
4369     case DW_TAG_string_type:
4370       return "DW_TAG_string_type";
4371     case DW_TAG_structure_type:
4372       return "DW_TAG_structure_type";
4373     case DW_TAG_subroutine_type:
4374       return "DW_TAG_subroutine_type";
4375     case DW_TAG_typedef:
4376       return "DW_TAG_typedef";
4377     case DW_TAG_union_type:
4378       return "DW_TAG_union_type";
4379     case DW_TAG_unspecified_parameters:
4380       return "DW_TAG_unspecified_parameters";
4381     case DW_TAG_variant:
4382       return "DW_TAG_variant";
4383     case DW_TAG_common_block:
4384       return "DW_TAG_common_block";
4385     case DW_TAG_common_inclusion:
4386       return "DW_TAG_common_inclusion";
4387     case DW_TAG_inheritance:
4388       return "DW_TAG_inheritance";
4389     case DW_TAG_inlined_subroutine:
4390       return "DW_TAG_inlined_subroutine";
4391     case DW_TAG_module:
4392       return "DW_TAG_module";
4393     case DW_TAG_ptr_to_member_type:
4394       return "DW_TAG_ptr_to_member_type";
4395     case DW_TAG_set_type:
4396       return "DW_TAG_set_type";
4397     case DW_TAG_subrange_type:
4398       return "DW_TAG_subrange_type";
4399     case DW_TAG_with_stmt:
4400       return "DW_TAG_with_stmt";
4401     case DW_TAG_access_declaration:
4402       return "DW_TAG_access_declaration";
4403     case DW_TAG_base_type:
4404       return "DW_TAG_base_type";
4405     case DW_TAG_catch_block:
4406       return "DW_TAG_catch_block";
4407     case DW_TAG_const_type:
4408       return "DW_TAG_const_type";
4409     case DW_TAG_constant:
4410       return "DW_TAG_constant";
4411     case DW_TAG_enumerator:
4412       return "DW_TAG_enumerator";
4413     case DW_TAG_file_type:
4414       return "DW_TAG_file_type";
4415     case DW_TAG_friend:
4416       return "DW_TAG_friend";
4417     case DW_TAG_namelist:
4418       return "DW_TAG_namelist";
4419     case DW_TAG_namelist_item:
4420       return "DW_TAG_namelist_item";
4421     case DW_TAG_namespace:
4422       return "DW_TAG_namespace";
4423     case DW_TAG_packed_type:
4424       return "DW_TAG_packed_type";
4425     case DW_TAG_subprogram:
4426       return "DW_TAG_subprogram";
4427     case DW_TAG_template_type_param:
4428       return "DW_TAG_template_type_param";
4429     case DW_TAG_template_value_param:
4430       return "DW_TAG_template_value_param";
4431     case DW_TAG_thrown_type:
4432       return "DW_TAG_thrown_type";
4433     case DW_TAG_try_block:
4434       return "DW_TAG_try_block";
4435     case DW_TAG_variant_part:
4436       return "DW_TAG_variant_part";
4437     case DW_TAG_variable:
4438       return "DW_TAG_variable";
4439     case DW_TAG_volatile_type:
4440       return "DW_TAG_volatile_type";
4441     case DW_TAG_imported_module:
4442       return "DW_TAG_imported_module";
4443     case DW_TAG_MIPS_loop:
4444       return "DW_TAG_MIPS_loop";
4445     case DW_TAG_format_label:
4446       return "DW_TAG_format_label";
4447     case DW_TAG_function_template:
4448       return "DW_TAG_function_template";
4449     case DW_TAG_class_template:
4450       return "DW_TAG_class_template";
4451     case DW_TAG_GNU_BINCL:
4452       return "DW_TAG_GNU_BINCL";
4453     case DW_TAG_GNU_EINCL:
4454       return "DW_TAG_GNU_EINCL";
4455     default:
4456       return "DW_TAG_<unknown>";
4457     }
4458 }
4459
4460 /* Convert a DWARF attribute code into its string name.  */
4461
4462 static const char *
4463 dwarf_attr_name (unsigned int attr)
4464 {
4465   switch (attr)
4466     {
4467     case DW_AT_sibling:
4468       return "DW_AT_sibling";
4469     case DW_AT_location:
4470       return "DW_AT_location";
4471     case DW_AT_name:
4472       return "DW_AT_name";
4473     case DW_AT_ordering:
4474       return "DW_AT_ordering";
4475     case DW_AT_subscr_data:
4476       return "DW_AT_subscr_data";
4477     case DW_AT_byte_size:
4478       return "DW_AT_byte_size";
4479     case DW_AT_bit_offset:
4480       return "DW_AT_bit_offset";
4481     case DW_AT_bit_size:
4482       return "DW_AT_bit_size";
4483     case DW_AT_element_list:
4484       return "DW_AT_element_list";
4485     case DW_AT_stmt_list:
4486       return "DW_AT_stmt_list";
4487     case DW_AT_low_pc:
4488       return "DW_AT_low_pc";
4489     case DW_AT_high_pc:
4490       return "DW_AT_high_pc";
4491     case DW_AT_language:
4492       return "DW_AT_language";
4493     case DW_AT_member:
4494       return "DW_AT_member";
4495     case DW_AT_discr:
4496       return "DW_AT_discr";
4497     case DW_AT_discr_value:
4498       return "DW_AT_discr_value";
4499     case DW_AT_visibility:
4500       return "DW_AT_visibility";
4501     case DW_AT_import:
4502       return "DW_AT_import";
4503     case DW_AT_string_length:
4504       return "DW_AT_string_length";
4505     case DW_AT_common_reference:
4506       return "DW_AT_common_reference";
4507     case DW_AT_comp_dir:
4508       return "DW_AT_comp_dir";
4509     case DW_AT_const_value:
4510       return "DW_AT_const_value";
4511     case DW_AT_containing_type:
4512       return "DW_AT_containing_type";
4513     case DW_AT_default_value:
4514       return "DW_AT_default_value";
4515     case DW_AT_inline:
4516       return "DW_AT_inline";
4517     case DW_AT_is_optional:
4518       return "DW_AT_is_optional";
4519     case DW_AT_lower_bound:
4520       return "DW_AT_lower_bound";
4521     case DW_AT_producer:
4522       return "DW_AT_producer";
4523     case DW_AT_prototyped:
4524       return "DW_AT_prototyped";
4525     case DW_AT_return_addr:
4526       return "DW_AT_return_addr";
4527     case DW_AT_start_scope:
4528       return "DW_AT_start_scope";
4529     case DW_AT_stride_size:
4530       return "DW_AT_stride_size";
4531     case DW_AT_upper_bound:
4532       return "DW_AT_upper_bound";
4533     case DW_AT_abstract_origin:
4534       return "DW_AT_abstract_origin";
4535     case DW_AT_accessibility:
4536       return "DW_AT_accessibility";
4537     case DW_AT_address_class:
4538       return "DW_AT_address_class";
4539     case DW_AT_artificial:
4540       return "DW_AT_artificial";
4541     case DW_AT_base_types:
4542       return "DW_AT_base_types";
4543     case DW_AT_calling_convention:
4544       return "DW_AT_calling_convention";
4545     case DW_AT_count:
4546       return "DW_AT_count";
4547     case DW_AT_data_member_location:
4548       return "DW_AT_data_member_location";
4549     case DW_AT_decl_column:
4550       return "DW_AT_decl_column";
4551     case DW_AT_decl_file:
4552       return "DW_AT_decl_file";
4553     case DW_AT_decl_line:
4554       return "DW_AT_decl_line";
4555     case DW_AT_declaration:
4556       return "DW_AT_declaration";
4557     case DW_AT_discr_list:
4558       return "DW_AT_discr_list";
4559     case DW_AT_encoding:
4560       return "DW_AT_encoding";
4561     case DW_AT_external:
4562       return "DW_AT_external";
4563     case DW_AT_frame_base:
4564       return "DW_AT_frame_base";
4565     case DW_AT_friend:
4566       return "DW_AT_friend";
4567     case DW_AT_identifier_case:
4568       return "DW_AT_identifier_case";
4569     case DW_AT_macro_info:
4570       return "DW_AT_macro_info";
4571     case DW_AT_namelist_items:
4572       return "DW_AT_namelist_items";
4573     case DW_AT_priority:
4574       return "DW_AT_priority";
4575     case DW_AT_segment:
4576       return "DW_AT_segment";
4577     case DW_AT_specification:
4578       return "DW_AT_specification";
4579     case DW_AT_static_link:
4580       return "DW_AT_static_link";
4581     case DW_AT_type:
4582       return "DW_AT_type";
4583     case DW_AT_use_location:
4584       return "DW_AT_use_location";
4585     case DW_AT_variable_parameter:
4586       return "DW_AT_variable_parameter";
4587     case DW_AT_virtuality:
4588       return "DW_AT_virtuality";
4589     case DW_AT_vtable_elem_location:
4590       return "DW_AT_vtable_elem_location";
4591
4592     case DW_AT_allocated:
4593       return "DW_AT_allocated";
4594     case DW_AT_associated:
4595       return "DW_AT_associated";
4596     case DW_AT_data_location:
4597       return "DW_AT_data_location";
4598     case DW_AT_stride:
4599       return "DW_AT_stride";
4600     case DW_AT_entry_pc:
4601       return "DW_AT_entry_pc";
4602     case DW_AT_use_UTF8:
4603       return "DW_AT_use_UTF8";
4604     case DW_AT_extension:
4605       return "DW_AT_extension";
4606     case DW_AT_ranges:
4607       return "DW_AT_ranges";
4608     case DW_AT_trampoline:
4609       return "DW_AT_trampoline";
4610     case DW_AT_call_column:
4611       return "DW_AT_call_column";
4612     case DW_AT_call_file:
4613       return "DW_AT_call_file";
4614     case DW_AT_call_line:
4615       return "DW_AT_call_line";
4616
4617     case DW_AT_MIPS_fde:
4618       return "DW_AT_MIPS_fde";
4619     case DW_AT_MIPS_loop_begin:
4620       return "DW_AT_MIPS_loop_begin";
4621     case DW_AT_MIPS_tail_loop_begin:
4622       return "DW_AT_MIPS_tail_loop_begin";
4623     case DW_AT_MIPS_epilog_begin:
4624       return "DW_AT_MIPS_epilog_begin";
4625     case DW_AT_MIPS_loop_unroll_factor:
4626       return "DW_AT_MIPS_loop_unroll_factor";
4627     case DW_AT_MIPS_software_pipeline_depth:
4628       return "DW_AT_MIPS_software_pipeline_depth";
4629     case DW_AT_MIPS_linkage_name:
4630       return "DW_AT_MIPS_linkage_name";
4631     case DW_AT_MIPS_stride:
4632       return "DW_AT_MIPS_stride";
4633     case DW_AT_MIPS_abstract_name:
4634       return "DW_AT_MIPS_abstract_name";
4635     case DW_AT_MIPS_clone_origin:
4636       return "DW_AT_MIPS_clone_origin";
4637     case DW_AT_MIPS_has_inlines:
4638       return "DW_AT_MIPS_has_inlines";
4639
4640     case DW_AT_sf_names:
4641       return "DW_AT_sf_names";
4642     case DW_AT_src_info:
4643       return "DW_AT_src_info";
4644     case DW_AT_mac_info:
4645       return "DW_AT_mac_info";
4646     case DW_AT_src_coords:
4647       return "DW_AT_src_coords";
4648     case DW_AT_body_begin:
4649       return "DW_AT_body_begin";
4650     case DW_AT_body_end:
4651       return "DW_AT_body_end";
4652     case DW_AT_GNU_vector:
4653       return "DW_AT_GNU_vector";
4654
4655     case DW_AT_VMS_rtnbeg_pd_address:
4656       return "DW_AT_VMS_rtnbeg_pd_address";
4657
4658     default:
4659       return "DW_AT_<unknown>";
4660     }
4661 }
4662
4663 /* Convert a DWARF value form code into its string name.  */
4664
4665 static const char *
4666 dwarf_form_name (unsigned int form)
4667 {
4668   switch (form)
4669     {
4670     case DW_FORM_addr:
4671       return "DW_FORM_addr";
4672     case DW_FORM_block2:
4673       return "DW_FORM_block2";
4674     case DW_FORM_block4:
4675       return "DW_FORM_block4";
4676     case DW_FORM_data2:
4677       return "DW_FORM_data2";
4678     case DW_FORM_data4:
4679       return "DW_FORM_data4";
4680     case DW_FORM_data8:
4681       return "DW_FORM_data8";
4682     case DW_FORM_string:
4683       return "DW_FORM_string";
4684     case DW_FORM_block:
4685       return "DW_FORM_block";
4686     case DW_FORM_block1:
4687       return "DW_FORM_block1";
4688     case DW_FORM_data1:
4689       return "DW_FORM_data1";
4690     case DW_FORM_flag:
4691       return "DW_FORM_flag";
4692     case DW_FORM_sdata:
4693       return "DW_FORM_sdata";
4694     case DW_FORM_strp:
4695       return "DW_FORM_strp";
4696     case DW_FORM_udata:
4697       return "DW_FORM_udata";
4698     case DW_FORM_ref_addr:
4699       return "DW_FORM_ref_addr";
4700     case DW_FORM_ref1:
4701       return "DW_FORM_ref1";
4702     case DW_FORM_ref2:
4703       return "DW_FORM_ref2";
4704     case DW_FORM_ref4:
4705       return "DW_FORM_ref4";
4706     case DW_FORM_ref8:
4707       return "DW_FORM_ref8";
4708     case DW_FORM_ref_udata:
4709       return "DW_FORM_ref_udata";
4710     case DW_FORM_indirect:
4711       return "DW_FORM_indirect";
4712     default:
4713       return "DW_FORM_<unknown>";
4714     }
4715 }
4716 \f
4717 /* Determine the "ultimate origin" of a decl.  The decl may be an inlined
4718    instance of an inlined instance of a decl which is local to an inline
4719    function, so we have to trace all of the way back through the origin chain
4720    to find out what sort of node actually served as the original seed for the
4721    given block.  */
4722
4723 static tree
4724 decl_ultimate_origin (tree decl)
4725 {
4726   if (!CODE_CONTAINS_STRUCT (TREE_CODE (decl), TS_DECL_COMMON))
4727     return NULL_TREE;
4728
4729   /* output_inline_function sets DECL_ABSTRACT_ORIGIN for all the
4730      nodes in the function to point to themselves; ignore that if
4731      we're trying to output the abstract instance of this function.  */
4732   if (DECL_ABSTRACT (decl) && DECL_ABSTRACT_ORIGIN (decl) == decl)
4733     return NULL_TREE;
4734
4735   /* Since the DECL_ABSTRACT_ORIGIN for a DECL is supposed to be the
4736      most distant ancestor, this should never happen.  */
4737   gcc_assert (!DECL_FROM_INLINE (DECL_ORIGIN (decl)));
4738
4739   return DECL_ABSTRACT_ORIGIN (decl);
4740 }
4741
4742 /* Determine the "ultimate origin" of a block.  The block may be an inlined
4743    instance of an inlined instance of a block which is local to an inline
4744    function, so we have to trace all of the way back through the origin chain
4745    to find out what sort of node actually served as the original seed for the
4746    given block.  */
4747
4748 static tree
4749 block_ultimate_origin (tree block)
4750 {
4751   tree immediate_origin = BLOCK_ABSTRACT_ORIGIN (block);
4752
4753   /* output_inline_function sets BLOCK_ABSTRACT_ORIGIN for all the
4754      nodes in the function to point to themselves; ignore that if
4755      we're trying to output the abstract instance of this function.  */
4756   if (BLOCK_ABSTRACT (block) && immediate_origin == block)
4757     return NULL_TREE;
4758
4759   if (immediate_origin == NULL_TREE)
4760     return NULL_TREE;
4761   else
4762     {
4763       tree ret_val;
4764       tree lookahead = immediate_origin;
4765
4766       do
4767         {
4768           ret_val = lookahead;
4769           lookahead = (TREE_CODE (ret_val) == BLOCK
4770                        ? BLOCK_ABSTRACT_ORIGIN (ret_val) : NULL);
4771         }
4772       while (lookahead != NULL && lookahead != ret_val);
4773       
4774       /* The block's abstract origin chain may not be the *ultimate* origin of
4775          the block. It could lead to a DECL that has an abstract origin set.
4776          If so, we want that DECL's abstract origin (which is what DECL_ORIGIN
4777          will give us if it has one).  Note that DECL's abstract origins are
4778          supposed to be the most distant ancestor (or so decl_ultimate_origin
4779          claims), so we don't need to loop following the DECL origins.  */
4780       if (DECL_P (ret_val))
4781         return DECL_ORIGIN (ret_val);
4782
4783       return ret_val;
4784     }
4785 }
4786
4787 /* Get the class to which DECL belongs, if any.  In g++, the DECL_CONTEXT
4788    of a virtual function may refer to a base class, so we check the 'this'
4789    parameter.  */
4790
4791 static tree
4792 decl_class_context (tree decl)
4793 {
4794   tree context = NULL_TREE;
4795
4796   if (TREE_CODE (decl) != FUNCTION_DECL || ! DECL_VINDEX (decl))
4797     context = DECL_CONTEXT (decl);
4798   else
4799     context = TYPE_MAIN_VARIANT
4800       (TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (TREE_TYPE (decl)))));
4801
4802   if (context && !TYPE_P (context))
4803     context = NULL_TREE;
4804
4805   return context;
4806 }
4807 \f
4808 /* Add an attribute/value pair to a DIE.  We build the lists up in reverse
4809    addition order, and correct that in reverse_all_dies.  */
4810
4811 static inline void
4812 add_dwarf_attr (dw_die_ref die, dw_attr_ref attr)
4813 {
4814   if (die != NULL && attr != NULL)
4815     {
4816       attr->dw_attr_next = die->die_attr;
4817       die->die_attr = attr;
4818     }
4819 }
4820
4821 static inline enum dw_val_class
4822 AT_class (dw_attr_ref a)
4823 {
4824   return a->dw_attr_val.val_class;
4825 }
4826
4827 /* Add a flag value attribute to a DIE.  */
4828
4829 static inline void
4830 add_AT_flag (dw_die_ref die, enum dwarf_attribute attr_kind, unsigned int flag)
4831 {
4832   dw_attr_ref attr = ggc_alloc (sizeof (dw_attr_node));
4833
4834   attr->dw_attr_next = NULL;
4835   attr->dw_attr = attr_kind;
4836   attr->dw_attr_val.val_class = dw_val_class_flag;
4837   attr->dw_attr_val.v.val_flag = flag;
4838   add_dwarf_attr (die, attr);
4839 }
4840
4841 static inline unsigned
4842 AT_flag (dw_attr_ref a)
4843 {
4844   gcc_assert (a && AT_class (a) == dw_val_class_flag);
4845   return a->dw_attr_val.v.val_flag;
4846 }
4847
4848 /* Add a signed integer attribute value to a DIE.  */
4849
4850 static inline void
4851 add_AT_int (dw_die_ref die, enum dwarf_attribute attr_kind, HOST_WIDE_INT int_val)
4852 {
4853   dw_attr_ref attr = ggc_alloc (sizeof (dw_attr_node));
4854
4855   attr->dw_attr_next = NULL;
4856   attr->dw_attr = attr_kind;
4857   attr->dw_attr_val.val_class = dw_val_class_const;
4858   attr->dw_attr_val.v.val_int = int_val;
4859   add_dwarf_attr (die, attr);
4860 }
4861
4862 static inline HOST_WIDE_INT
4863 AT_int (dw_attr_ref a)
4864 {
4865   gcc_assert (a && AT_class (a) == dw_val_class_const);
4866   return a->dw_attr_val.v.val_int;
4867 }
4868
4869 /* Add an unsigned integer attribute value to a DIE.  */
4870
4871 static inline void
4872 add_AT_unsigned (dw_die_ref die, enum dwarf_attribute attr_kind,
4873                  unsigned HOST_WIDE_INT unsigned_val)
4874 {
4875   dw_attr_ref attr = ggc_alloc (sizeof (dw_attr_node));
4876
4877   attr->dw_attr_next = NULL;
4878   attr->dw_attr = attr_kind;
4879   attr->dw_attr_val.val_class = dw_val_class_unsigned_const;
4880   attr->dw_attr_val.v.val_unsigned = unsigned_val;
4881   add_dwarf_attr (die, attr);
4882 }
4883
4884 static inline unsigned HOST_WIDE_INT
4885 AT_unsigned (dw_attr_ref a)
4886 {
4887   gcc_assert (a && AT_class (a) == dw_val_class_unsigned_const);
4888   return a->dw_attr_val.v.val_unsigned;
4889 }
4890
4891 /* Add an unsigned double integer attribute value to a DIE.  */
4892
4893 static inline void
4894 add_AT_long_long (dw_die_ref die, enum dwarf_attribute attr_kind,
4895                   long unsigned int val_hi, long unsigned int val_low)
4896 {
4897   dw_attr_ref attr = ggc_alloc (sizeof (dw_attr_node));
4898
4899   attr->dw_attr_next = NULL;
4900   attr->dw_attr = attr_kind;
4901   attr->dw_attr_val.val_class = dw_val_class_long_long;
4902   attr->dw_attr_val.v.val_long_long.hi = val_hi;
4903   attr->dw_attr_val.v.val_long_long.low = val_low;
4904   add_dwarf_attr (die, attr);
4905 }
4906
4907 /* Add a floating point attribute value to a DIE and return it.  */
4908
4909 static inline void
4910 add_AT_vec (dw_die_ref die, enum dwarf_attribute attr_kind,
4911             unsigned int length, unsigned int elt_size, unsigned char *array)
4912 {
4913   dw_attr_ref attr = ggc_alloc (sizeof (dw_attr_node));
4914
4915   attr->dw_attr_next = NULL;
4916   attr->dw_attr = attr_kind;
4917   attr->dw_attr_val.val_class = dw_val_class_vec;
4918   attr->dw_attr_val.v.val_vec.length = length;
4919   attr->dw_attr_val.v.val_vec.elt_size = elt_size;
4920   attr->dw_attr_val.v.val_vec.array = array;
4921   add_dwarf_attr (die, attr);
4922 }
4923
4924 /* Hash and equality functions for debug_str_hash.  */
4925
4926 static hashval_t
4927 debug_str_do_hash (const void *x)
4928 {
4929   return htab_hash_string (((const struct indirect_string_node *)x)->str);
4930 }
4931
4932 static int
4933 debug_str_eq (const void *x1, const void *x2)
4934 {
4935   return strcmp ((((const struct indirect_string_node *)x1)->str),
4936                  (const char *)x2) == 0;
4937 }
4938
4939 /* Add a string attribute value to a DIE.  */
4940
4941 static inline void
4942 add_AT_string (dw_die_ref die, enum dwarf_attribute attr_kind, const char *str)
4943 {
4944   dw_attr_ref attr = ggc_alloc (sizeof (dw_attr_node));
4945   struct indirect_string_node *node;
4946   void **slot;
4947
4948   if (! debug_str_hash)
4949     debug_str_hash = htab_create_ggc (10, debug_str_do_hash,
4950                                       debug_str_eq, NULL);
4951
4952   slot = htab_find_slot_with_hash (debug_str_hash, str,
4953                                    htab_hash_string (str), INSERT);
4954   if (*slot == NULL)
4955     *slot = ggc_alloc_cleared (sizeof (struct indirect_string_node));
4956   node = (struct indirect_string_node *) *slot;
4957   node->str = ggc_strdup (str);
4958   node->refcount++;
4959
4960   attr->dw_attr_next = NULL;
4961   attr->dw_attr = attr_kind;
4962   attr->dw_attr_val.val_class = dw_val_class_str;
4963   attr->dw_attr_val.v.val_str = node;
4964   add_dwarf_attr (die, attr);
4965 }
4966
4967 static inline const char *
4968 AT_string (dw_attr_ref a)
4969 {
4970   gcc_assert (a && AT_class (a) == dw_val_class_str);
4971   return a->dw_attr_val.v.val_str->str;
4972 }
4973
4974 /* Find out whether a string should be output inline in DIE
4975    or out-of-line in .debug_str section.  */
4976
4977 static int
4978 AT_string_form (dw_attr_ref a)
4979 {
4980   struct indirect_string_node *node;
4981   unsigned int len;
4982   char label[32];
4983
4984   gcc_assert (a && AT_class (a) == dw_val_class_str);
4985
4986   node = a->dw_attr_val.v.val_str;
4987   if (node->form)
4988     return node->form;
4989
4990   len = strlen (node->str) + 1;
4991
4992   /* If the string is shorter or equal to the size of the reference, it is
4993      always better to put it inline.  */
4994   if (len <= DWARF_OFFSET_SIZE || node->refcount == 0)
4995     return node->form = DW_FORM_string;
4996
4997   /* If we cannot expect the linker to merge strings in .debug_str
4998      section, only put it into .debug_str if it is worth even in this
4999      single module.  */
5000   if ((debug_str_section->common.flags & SECTION_MERGE) == 0
5001       && (len - DWARF_OFFSET_SIZE) * node->refcount <= len)
5002     return node->form = DW_FORM_string;
5003
5004   ASM_GENERATE_INTERNAL_LABEL (label, "LASF", dw2_string_counter);
5005   ++dw2_string_counter;
5006   node->label = xstrdup (label);
5007
5008   return node->form = DW_FORM_strp;
5009 }
5010
5011 /* Add a DIE reference attribute value to a DIE.  */
5012
5013 static inline void
5014 add_AT_die_ref (dw_die_ref die, enum dwarf_attribute attr_kind, dw_die_ref targ_die)
5015 {
5016   dw_attr_ref attr = ggc_alloc (sizeof (dw_attr_node));
5017
5018   attr->dw_attr_next = NULL;
5019   attr->dw_attr = attr_kind;
5020   attr->dw_attr_val.val_class = dw_val_class_die_ref;
5021   attr->dw_attr_val.v.val_die_ref.die = targ_die;
5022   attr->dw_attr_val.v.val_die_ref.external = 0;
5023   add_dwarf_attr (die, attr);
5024 }
5025
5026 /* Add an AT_specification attribute to a DIE, and also make the back
5027    pointer from the specification to the definition.  */
5028
5029 static inline void
5030 add_AT_specification (dw_die_ref die, dw_die_ref targ_die)
5031 {
5032   add_AT_die_ref (die, DW_AT_specification, targ_die);
5033   gcc_assert (!targ_die->die_definition);
5034   targ_die->die_definition = die;
5035 }
5036
5037 static inline dw_die_ref
5038 AT_ref (dw_attr_ref a)
5039 {
5040   gcc_assert (a && AT_class (a) == dw_val_class_die_ref);
5041   return a->dw_attr_val.v.val_die_ref.die;
5042 }
5043
5044 static inline int
5045 AT_ref_external (dw_attr_ref a)
5046 {
5047   if (a && AT_class (a) == dw_val_class_die_ref)
5048     return a->dw_attr_val.v.val_die_ref.external;
5049
5050   return 0;
5051 }
5052
5053 static inline void
5054 set_AT_ref_external (dw_attr_ref a, int i)
5055 {
5056   gcc_assert (a && AT_class (a) == dw_val_class_die_ref);
5057   a->dw_attr_val.v.val_die_ref.external = i;
5058 }
5059
5060 /* Add an FDE reference attribute value to a DIE.  */
5061
5062 static inline void
5063 add_AT_fde_ref (dw_die_ref die, enum dwarf_attribute attr_kind, unsigned int targ_fde)
5064 {
5065   dw_attr_ref attr = ggc_alloc (sizeof (dw_attr_node));
5066
5067   attr->dw_attr_next = NULL;
5068   attr->dw_attr = attr_kind;
5069   attr->dw_attr_val.val_class = dw_val_class_fde_ref;
5070   attr->dw_attr_val.v.val_fde_index = targ_fde;
5071   add_dwarf_attr (die, attr);
5072 }
5073
5074 /* Add a location description attribute value to a DIE.  */
5075
5076 static inline void
5077 add_AT_loc (dw_die_ref die, enum dwarf_attribute attr_kind, dw_loc_descr_ref loc)
5078 {
5079   dw_attr_ref attr = ggc_alloc (sizeof (dw_attr_node));
5080
5081   attr->dw_attr_next = NULL;
5082   attr->dw_attr = attr_kind;
5083   attr->dw_attr_val.val_class = dw_val_class_loc;
5084   attr->dw_attr_val.v.val_loc = loc;
5085   add_dwarf_attr (die, attr);
5086 }
5087
5088 static inline dw_loc_descr_ref
5089 AT_loc (dw_attr_ref a)
5090 {
5091   gcc_assert (a && AT_class (a) == dw_val_class_loc);
5092   return a->dw_attr_val.v.val_loc;
5093 }
5094
5095 static inline void
5096 add_AT_loc_list (dw_die_ref die, enum dwarf_attribute attr_kind, dw_loc_list_ref loc_list)
5097 {
5098   dw_attr_ref attr = ggc_alloc (sizeof (dw_attr_node));
5099
5100   attr->dw_attr_next = NULL;
5101   attr->dw_attr = attr_kind;
5102   attr->dw_attr_val.val_class = dw_val_class_loc_list;
5103   attr->dw_attr_val.v.val_loc_list = loc_list;
5104   add_dwarf_attr (die, attr);
5105   have_location_lists = 1;
5106 }
5107
5108 static inline dw_loc_list_ref
5109 AT_loc_list (dw_attr_ref a)
5110 {
5111   gcc_assert (a && AT_class (a) == dw_val_class_loc_list);
5112   return a->dw_attr_val.v.val_loc_list;
5113 }
5114
5115 /* Add an address constant attribute value to a DIE.  */
5116
5117 static inline void
5118 add_AT_addr (dw_die_ref die, enum dwarf_attribute attr_kind, rtx addr)
5119 {
5120   dw_attr_ref attr = ggc_alloc (sizeof (dw_attr_node));
5121
5122   attr->dw_attr_next = NULL;
5123   attr->dw_attr = attr_kind;
5124   attr->dw_attr_val.val_class = dw_val_class_addr;
5125   attr->dw_attr_val.v.val_addr = addr;
5126   add_dwarf_attr (die, attr);
5127 }
5128
5129 static inline rtx
5130 AT_addr (dw_attr_ref a)
5131 {
5132   gcc_assert (a && AT_class (a) == dw_val_class_addr);
5133   return a->dw_attr_val.v.val_addr;
5134 }
5135
5136 /* Add a label identifier attribute value to a DIE.  */
5137
5138 static inline void
5139 add_AT_lbl_id (dw_die_ref die, enum dwarf_attribute attr_kind, const char *lbl_id)
5140 {
5141   dw_attr_ref attr = ggc_alloc (sizeof (dw_attr_node));
5142
5143   attr->dw_attr_next = NULL;
5144   attr->dw_attr = attr_kind;
5145   attr->dw_attr_val.val_class = dw_val_class_lbl_id;
5146   attr->dw_attr_val.v.val_lbl_id = xstrdup (lbl_id);
5147   add_dwarf_attr (die, attr);
5148 }
5149
5150 /* Add a section offset attribute value to a DIE.  */
5151
5152 static inline void
5153 add_AT_lbl_offset (dw_die_ref die, enum dwarf_attribute attr_kind, const char *label)
5154 {
5155   dw_attr_ref attr = ggc_alloc (sizeof (dw_attr_node));
5156
5157   attr->dw_attr_next = NULL;
5158   attr->dw_attr = attr_kind;
5159   attr->dw_attr_val.val_class = dw_val_class_lbl_offset;
5160   attr->dw_attr_val.v.val_lbl_id = xstrdup (label);
5161   add_dwarf_attr (die, attr);
5162 }
5163
5164 /* Add an offset attribute value to a DIE.  */
5165
5166 static inline void
5167 add_AT_offset (dw_die_ref die, enum dwarf_attribute attr_kind,
5168                unsigned HOST_WIDE_INT offset)
5169 {
5170   dw_attr_ref attr = ggc_alloc (sizeof (dw_attr_node));
5171
5172   attr->dw_attr_next = NULL;
5173   attr->dw_attr = attr_kind;
5174   attr->dw_attr_val.val_class = dw_val_class_offset;
5175   attr->dw_attr_val.v.val_offset = offset;
5176   add_dwarf_attr (die, attr);
5177 }
5178
5179 /* Add an range_list attribute value to a DIE.  */
5180
5181 static void
5182 add_AT_range_list (dw_die_ref die, enum dwarf_attribute attr_kind,
5183                    long unsigned int offset)
5184 {
5185   dw_attr_ref attr = ggc_alloc (sizeof (dw_attr_node));
5186
5187   attr->dw_attr_next = NULL;
5188   attr->dw_attr = attr_kind;
5189   attr->dw_attr_val.val_class = dw_val_class_range_list;
5190   attr->dw_attr_val.v.val_offset = offset;
5191   add_dwarf_attr (die, attr);
5192 }
5193
5194 static inline const char *
5195 AT_lbl (dw_attr_ref a)
5196 {
5197   gcc_assert (a && (AT_class (a) == dw_val_class_lbl_id
5198                     || AT_class (a) == dw_val_class_lbl_offset));
5199   return a->dw_attr_val.v.val_lbl_id;
5200 }
5201
5202 /* Get the attribute of type attr_kind.  */
5203
5204 static dw_attr_ref
5205 get_AT (dw_die_ref die, enum dwarf_attribute attr_kind)
5206 {
5207   dw_attr_ref a;
5208   dw_die_ref spec = NULL;
5209
5210   if (die != NULL)
5211     {
5212       for (a = die->die_attr; a != NULL; a = a->dw_attr_next)
5213         if (a->dw_attr == attr_kind)
5214           return a;
5215         else if (a->dw_attr == DW_AT_specification
5216                  || a->dw_attr == DW_AT_abstract_origin)
5217           spec = AT_ref (a);
5218
5219       if (spec)
5220         return get_AT (spec, attr_kind);
5221     }
5222
5223   return NULL;
5224 }
5225
5226 /* Return the "low pc" attribute value, typically associated with a subprogram
5227    DIE.  Return null if the "low pc" attribute is either not present, or if it
5228    cannot be represented as an assembler label identifier.  */
5229
5230 static inline const char *
5231 get_AT_low_pc (dw_die_ref die)
5232 {
5233   dw_attr_ref a = get_AT (die, DW_AT_low_pc);
5234
5235   return a ? AT_lbl (a) : NULL;
5236 }
5237
5238 /* Return the "high pc" attribute value, typically associated with a subprogram
5239    DIE.  Return null if the "high pc" attribute is either not present, or if it
5240    cannot be represented as an assembler label identifier.  */
5241
5242 static inline const char *
5243 get_AT_hi_pc (dw_die_ref die)
5244 {
5245   dw_attr_ref a = get_AT (die, DW_AT_high_pc);
5246
5247   return a ? AT_lbl (a) : NULL;
5248 }
5249
5250 /* Return the value of the string attribute designated by ATTR_KIND, or
5251    NULL if it is not present.  */
5252
5253 static inline const char *
5254 get_AT_string (dw_die_ref die, enum dwarf_attribute attr_kind)
5255 {
5256   dw_attr_ref a = get_AT (die, attr_kind);
5257
5258   return a ? AT_string (a) : NULL;
5259 }
5260
5261 /* Return the value of the flag attribute designated by ATTR_KIND, or -1
5262    if it is not present.  */
5263
5264 static inline int
5265 get_AT_flag (dw_die_ref die, enum dwarf_attribute attr_kind)
5266 {
5267   dw_attr_ref a = get_AT (die, attr_kind);
5268
5269   return a ? AT_flag (a) : 0;
5270 }
5271
5272 /* Return the value of the unsigned attribute designated by ATTR_KIND, or 0
5273    if it is not present.  */
5274
5275 static inline unsigned
5276 get_AT_unsigned (dw_die_ref die, enum dwarf_attribute attr_kind)
5277 {
5278   dw_attr_ref a = get_AT (die, attr_kind);
5279
5280   return a ? AT_unsigned (a) : 0;
5281 }
5282
5283 static inline dw_die_ref
5284 get_AT_ref (dw_die_ref die, enum dwarf_attribute attr_kind)
5285 {
5286   dw_attr_ref a = get_AT (die, attr_kind);
5287
5288   return a ? AT_ref (a) : NULL;
5289 }
5290
5291 /* Return TRUE if the language is C or C++.  */
5292
5293 static inline bool
5294 is_c_family (void)
5295 {
5296   unsigned int lang = get_AT_unsigned (comp_unit_die, DW_AT_language);
5297
5298   return (lang == DW_LANG_C || lang == DW_LANG_C89
5299           || lang == DW_LANG_C_plus_plus);
5300 }
5301
5302 /* Return TRUE if the language is C++.  */
5303
5304 static inline bool
5305 is_cxx (void)
5306 {
5307   return (get_AT_unsigned (comp_unit_die, DW_AT_language)
5308           == DW_LANG_C_plus_plus);
5309 }
5310
5311 /* Return TRUE if the language is Fortran.  */
5312
5313 static inline bool
5314 is_fortran (void)
5315 {
5316   unsigned int lang = get_AT_unsigned (comp_unit_die, DW_AT_language);
5317
5318   return (lang == DW_LANG_Fortran77
5319           || lang == DW_LANG_Fortran90
5320           || lang == DW_LANG_Fortran95);
5321 }
5322
5323 /* Return TRUE if the language is Java.  */
5324
5325 static inline bool
5326 is_java (void)
5327 {
5328   unsigned int lang = get_AT_unsigned (comp_unit_die, DW_AT_language);
5329
5330   return lang == DW_LANG_Java;
5331 }
5332
5333 /* Return TRUE if the language is Ada.  */
5334
5335 static inline bool
5336 is_ada (void)
5337 {
5338   unsigned int lang = get_AT_unsigned (comp_unit_die, DW_AT_language);
5339
5340   return lang == DW_LANG_Ada95 || lang == DW_LANG_Ada83;
5341 }
5342
5343 /* Free up the memory used by A.  */
5344
5345 static inline void free_AT (dw_attr_ref);
5346 static inline void
5347 free_AT (dw_attr_ref a)
5348 {
5349   if (AT_class (a) == dw_val_class_str)
5350     if (a->dw_attr_val.v.val_str->refcount)
5351       a->dw_attr_val.v.val_str->refcount--;
5352 }
5353
5354 /* Remove the specified attribute if present.  */
5355
5356 static void
5357 remove_AT (dw_die_ref die, enum dwarf_attribute attr_kind)
5358 {
5359   dw_attr_ref *p;
5360   dw_attr_ref removed = NULL;
5361
5362   if (die != NULL)
5363     {
5364       for (p = &(die->die_attr); *p; p = &((*p)->dw_attr_next))
5365         if ((*p)->dw_attr == attr_kind)
5366           {
5367             removed = *p;
5368             *p = (*p)->dw_attr_next;
5369             break;
5370           }
5371
5372       if (removed != 0)
5373         free_AT (removed);
5374     }
5375 }
5376
5377 /* Remove child die whose die_tag is specified tag.  */
5378
5379 static void
5380 remove_child_TAG (dw_die_ref die, enum dwarf_tag tag)
5381 {
5382   dw_die_ref current, prev, next;
5383   current = die->die_child;
5384   prev = NULL;
5385   while (current != NULL)
5386     {
5387       if (current->die_tag == tag)
5388         {
5389           next = current->die_sib;
5390           if (prev == NULL)
5391             die->die_child = next;
5392           else
5393             prev->die_sib = next;
5394           free_die (current);
5395           current = next;
5396         }
5397       else
5398         {
5399           prev = current;
5400           current = current->die_sib;
5401         }
5402     }
5403 }
5404
5405 /* Free up the memory used by DIE.  */
5406
5407 static inline void
5408 free_die (dw_die_ref die)
5409 {
5410   remove_children (die);
5411 }
5412
5413 /* Discard the children of this DIE.  */
5414
5415 static void
5416 remove_children (dw_die_ref die)
5417 {
5418   dw_die_ref child_die = die->die_child;
5419
5420   die->die_child = NULL;
5421
5422   while (child_die != NULL)
5423     {
5424       dw_die_ref tmp_die = child_die;
5425       dw_attr_ref a;
5426
5427       child_die = child_die->die_sib;
5428
5429       for (a = tmp_die->die_attr; a != NULL;)
5430         {
5431           dw_attr_ref tmp_a = a;
5432
5433           a = a->dw_attr_next;
5434           free_AT (tmp_a);
5435         }
5436
5437       free_die (tmp_die);
5438     }
5439 }
5440
5441 /* Add a child DIE below its parent.  We build the lists up in reverse
5442    addition order, and correct that in reverse_all_dies.  */
5443
5444 static inline void
5445 add_child_die (dw_die_ref die, dw_die_ref child_die)
5446 {
5447   if (die != NULL && child_die != NULL)
5448     {
5449       gcc_assert (die != child_die);
5450
5451       child_die->die_parent = die;
5452       child_die->die_sib = die->die_child;
5453       die->die_child = child_die;
5454     }
5455 }
5456
5457 /* Move CHILD, which must be a child of PARENT or the DIE for which PARENT
5458    is the specification, to the front of PARENT's list of children.  */
5459
5460 static void
5461 splice_child_die (dw_die_ref parent, dw_die_ref child)
5462 {
5463   dw_die_ref *p;
5464
5465   /* We want the declaration DIE from inside the class, not the
5466      specification DIE at toplevel.  */
5467   if (child->die_parent != parent)
5468     {
5469       dw_die_ref tmp = get_AT_ref (child, DW_AT_specification);
5470
5471       if (tmp)
5472         child = tmp;
5473     }
5474
5475   gcc_assert (child->die_parent == parent
5476               || (child->die_parent
5477                   == get_AT_ref (parent, DW_AT_specification)));
5478
5479   for (p = &(child->die_parent->die_child); *p; p = &((*p)->die_sib))
5480     if (*p == child)
5481       {
5482         *p = child->die_sib;
5483         break;
5484       }
5485
5486   child->die_parent = parent;
5487   child->die_sib = parent->die_child;
5488   parent->die_child = child;
5489 }
5490
5491 /* Return a pointer to a newly created DIE node.  */
5492
5493 static inline dw_die_ref
5494 new_die (enum dwarf_tag tag_value, dw_die_ref parent_die, tree t)
5495 {
5496   dw_die_ref die = ggc_alloc_cleared (sizeof (die_node));
5497
5498   die->die_tag = tag_value;
5499
5500   if (parent_die != NULL)
5501     add_child_die (parent_die, die);
5502   else
5503     {
5504       limbo_die_node *limbo_node;
5505
5506       limbo_node = ggc_alloc_cleared (sizeof (limbo_die_node));
5507       limbo_node->die = die;
5508       limbo_node->created_for = t;
5509       limbo_node->next = limbo_die_list;
5510       limbo_die_list = limbo_node;
5511     }
5512
5513   return die;
5514 }
5515
5516 /* Return the DIE associated with the given type specifier.  */
5517
5518 static inline dw_die_ref
5519 lookup_type_die (tree type)
5520 {
5521   return TYPE_SYMTAB_DIE (type);
5522 }
5523
5524 /* Equate a DIE to a given type specifier.  */
5525
5526 static inline void
5527 equate_type_number_to_die (tree type, dw_die_ref type_die)
5528 {
5529   TYPE_SYMTAB_DIE (type) = type_die;
5530 }
5531
5532 /* Returns a hash value for X (which really is a die_struct).  */
5533
5534 static hashval_t
5535 decl_die_table_hash (const void *x)
5536 {
5537   return (hashval_t) ((const dw_die_ref) x)->decl_id;
5538 }
5539
5540 /* Return nonzero if decl_id of die_struct X is the same as UID of decl *Y.  */
5541
5542 static int
5543 decl_die_table_eq (const void *x, const void *y)
5544 {
5545   return (((const dw_die_ref) x)->decl_id == DECL_UID ((const tree) y));
5546 }
5547
5548 /* Return the DIE associated with a given declaration.  */
5549
5550 static inline dw_die_ref
5551 lookup_decl_die (tree decl)
5552 {
5553   return htab_find_with_hash (decl_die_table, decl, DECL_UID (decl));
5554 }
5555
5556 /* Returns a hash value for X (which really is a var_loc_list).  */
5557
5558 static hashval_t
5559 decl_loc_table_hash (const void *x)
5560 {
5561   return (hashval_t) ((const var_loc_list *) x)->decl_id;
5562 }
5563
5564 /* Return nonzero if decl_id of var_loc_list X is the same as
5565    UID of decl *Y.  */
5566
5567 static int
5568 decl_loc_table_eq (const void *x, const void *y)
5569 {
5570   return (((const var_loc_list *) x)->decl_id == DECL_UID ((const tree) y));
5571 }
5572
5573 /* Return the var_loc list associated with a given declaration.  */
5574
5575 static inline var_loc_list *
5576 lookup_decl_loc (tree decl)
5577 {
5578   return htab_find_with_hash (decl_loc_table, decl, DECL_UID (decl));
5579 }
5580
5581 /* Equate a DIE to a particular declaration.  */
5582
5583 static void
5584 equate_decl_number_to_die (tree decl, dw_die_ref decl_die)
5585 {
5586   unsigned int decl_id = DECL_UID (decl);
5587   void **slot;
5588
5589   slot = htab_find_slot_with_hash (decl_die_table, decl, decl_id, INSERT);
5590   *slot = decl_die;
5591   decl_die->decl_id = decl_id;
5592 }
5593
5594 /* Add a variable location node to the linked list for DECL.  */
5595
5596 static void
5597 add_var_loc_to_decl (tree decl, struct var_loc_node *loc)
5598 {
5599   unsigned int decl_id = DECL_UID (decl);
5600   var_loc_list *temp;
5601   void **slot;
5602
5603   slot = htab_find_slot_with_hash (decl_loc_table, decl, decl_id, INSERT);
5604   if (*slot == NULL)
5605     {
5606       temp = ggc_alloc_cleared (sizeof (var_loc_list));
5607       temp->decl_id = decl_id;
5608       *slot = temp;
5609     }
5610   else
5611     temp = *slot;
5612
5613   if (temp->last)
5614     {
5615       /* If the current location is the same as the end of the list,
5616          we have nothing to do.  */
5617       if (!rtx_equal_p (NOTE_VAR_LOCATION_LOC (temp->last->var_loc_note),
5618                         NOTE_VAR_LOCATION_LOC (loc->var_loc_note)))
5619         {
5620           /* Add LOC to the end of list and update LAST.  */
5621           temp->last->next = loc;
5622           temp->last = loc;
5623         }
5624     }
5625   /* Do not add empty location to the beginning of the list.  */
5626   else if (NOTE_VAR_LOCATION_LOC (loc->var_loc_note) != NULL_RTX)
5627     {
5628       temp->first = loc;
5629       temp->last = loc;
5630     }
5631 }
5632 \f
5633 /* Keep track of the number of spaces used to indent the
5634    output of the debugging routines that print the structure of
5635    the DIE internal representation.  */
5636 static int print_indent;
5637
5638 /* Indent the line the number of spaces given by print_indent.  */
5639
5640 static inline void
5641 print_spaces (FILE *outfile)
5642 {
5643   fprintf (outfile, "%*s", print_indent, "");
5644 }
5645
5646 /* Print the information associated with a given DIE, and its children.
5647    This routine is a debugging aid only.  */
5648
5649 static void
5650 print_die (dw_die_ref die, FILE *outfile)
5651 {
5652   dw_attr_ref a;
5653   dw_die_ref c;
5654
5655   print_spaces (outfile);
5656   fprintf (outfile, "DIE %4lu: %s\n",
5657            die->die_offset, dwarf_tag_name (die->die_tag));
5658   print_spaces (outfile);
5659   fprintf (outfile, "  abbrev id: %lu", die->die_abbrev);
5660   fprintf (outfile, " offset: %lu\n", die->die_offset);
5661
5662   for (a = die->die_attr; a != NULL; a = a->dw_attr_next)
5663     {
5664       print_spaces (outfile);
5665       fprintf (outfile, "  %s: ", dwarf_attr_name (a->dw_attr));
5666
5667       switch (AT_class (a))
5668         {
5669         case dw_val_class_addr:
5670           fprintf (outfile, "address");
5671           break;
5672         case dw_val_class_offset:
5673           fprintf (outfile, "offset");
5674           break;
5675         case dw_val_class_loc:
5676           fprintf (outfile, "location descriptor");
5677           break;
5678         case dw_val_class_loc_list:
5679           fprintf (outfile, "location list -> label:%s",
5680                    AT_loc_list (a)->ll_symbol);
5681           break;
5682         case dw_val_class_range_list:
5683           fprintf (outfile, "range list");
5684           break;
5685         case dw_val_class_const:
5686           fprintf (outfile, HOST_WIDE_INT_PRINT_DEC, AT_int (a));
5687           break;
5688         case dw_val_class_unsigned_const:
5689           fprintf (outfile, HOST_WIDE_INT_PRINT_UNSIGNED, AT_unsigned (a));
5690           break;
5691         case dw_val_class_long_long:
5692           fprintf (outfile, "constant (%lu,%lu)",
5693                    a->dw_attr_val.v.val_long_long.hi,
5694                    a->dw_attr_val.v.val_long_long.low);
5695           break;
5696         case dw_val_class_vec:
5697           fprintf (outfile, "floating-point or vector constant");
5698           break;
5699         case dw_val_class_flag:
5700           fprintf (outfile, "%u", AT_flag (a));
5701           break;
5702         case dw_val_class_die_ref:
5703           if (AT_ref (a) != NULL)
5704             {
5705               if (AT_ref (a)->die_symbol)
5706                 fprintf (outfile, "die -> label: %s", AT_ref (a)->die_symbol);
5707               else
5708                 fprintf (outfile, "die -> %lu", AT_ref (a)->die_offset);
5709             }
5710           else
5711             fprintf (outfile, "die -> <null>");
5712           break;
5713         case dw_val_class_lbl_id:
5714         case dw_val_class_lbl_offset:
5715           fprintf (outfile, "label: %s", AT_lbl (a));
5716           break;
5717         case dw_val_class_str:
5718           if (AT_string (a) != NULL)
5719             fprintf (outfile, "\"%s\"", AT_string (a));
5720           else
5721             fprintf (outfile, "<null>");
5722           break;
5723         default:
5724           break;
5725         }
5726
5727       fprintf (outfile, "\n");
5728     }
5729
5730   if (die->die_child != NULL)
5731     {
5732       print_indent += 4;
5733       for (c = die->die_child; c != NULL; c = c->die_sib)
5734         print_die (c, outfile);
5735
5736       print_indent -= 4;
5737     }
5738   if (print_indent == 0)
5739     fprintf (outfile, "\n");
5740 }
5741
5742 /* Print the contents of the source code line number correspondence table.
5743    This routine is a debugging aid only.  */
5744
5745 static void
5746 print_dwarf_line_table (FILE *outfile)
5747 {
5748   unsigned i;
5749   dw_line_info_ref line_info;
5750
5751   fprintf (outfile, "\n\nDWARF source line information\n");
5752   for (i = 1; i < line_info_table_in_use; i++)
5753     {
5754       line_info = &line_info_table[i];
5755       fprintf (outfile, "%5d: ", i);
5756       fprintf (outfile, "%-20s",
5757                VARRAY_CHAR_PTR (file_table, line_info->dw_file_num));
5758       fprintf (outfile, "%6ld", line_info->dw_line_num);
5759       fprintf (outfile, "\n");
5760     }
5761
5762   fprintf (outfile, "\n\n");
5763 }
5764
5765 /* Print the information collected for a given DIE.  */
5766
5767 void
5768 debug_dwarf_die (dw_die_ref die)
5769 {
5770   print_die (die, stderr);
5771 }
5772
5773 /* Print all DWARF information collected for the compilation unit.
5774    This routine is a debugging aid only.  */
5775
5776 void
5777 debug_dwarf (void)
5778 {
5779   print_indent = 0;
5780   print_die (comp_unit_die, stderr);
5781   if (! DWARF2_ASM_LINE_DEBUG_INFO)
5782     print_dwarf_line_table (stderr);
5783 }
5784 \f
5785 /* We build up the lists of children and attributes by pushing new ones
5786    onto the beginning of the list.  Reverse the lists for DIE so that
5787    they are in order of addition.  */
5788
5789 static void
5790 reverse_die_lists (dw_die_ref die)
5791 {
5792   dw_die_ref c, cp, cn;
5793   dw_attr_ref a, ap, an;
5794
5795   for (a = die->die_attr, ap = 0; a; a = an)
5796     {
5797       an = a->dw_attr_next;
5798       a->dw_attr_next = ap;
5799       ap = a;
5800     }
5801
5802   die->die_attr = ap;
5803
5804   for (c = die->die_child, cp = 0; c; c = cn)
5805     {
5806       cn = c->die_sib;
5807       c->die_sib = cp;
5808       cp = c;
5809     }
5810
5811   die->die_child = cp;
5812 }
5813
5814 /* reverse_die_lists only reverses the single die you pass it. Since we used to
5815    reverse all dies in add_sibling_attributes, which runs through all the dies,
5816    it would reverse all the dies.  Now, however, since we don't call
5817    reverse_die_lists in add_sibling_attributes, we need a routine to
5818    recursively reverse all the dies. This is that routine.  */
5819
5820 static void
5821 reverse_all_dies (dw_die_ref die)
5822 {
5823   dw_die_ref c;
5824
5825   reverse_die_lists (die);
5826
5827   for (c = die->die_child; c; c = c->die_sib)
5828     reverse_all_dies (c);
5829 }
5830
5831 /* Start a new compilation unit DIE for an include file.  OLD_UNIT is the CU
5832    for the enclosing include file, if any.  BINCL_DIE is the DW_TAG_GNU_BINCL
5833    DIE that marks the start of the DIEs for this include file.  */
5834
5835 static dw_die_ref
5836 push_new_compile_unit (dw_die_ref old_unit, dw_die_ref bincl_die)
5837 {
5838   const char *filename = get_AT_string (bincl_die, DW_AT_name);
5839   dw_die_ref new_unit = gen_compile_unit_die (filename);
5840
5841   new_unit->die_sib = old_unit;
5842   return new_unit;
5843 }
5844
5845 /* Close an include-file CU and reopen the enclosing one.  */
5846
5847 static dw_die_ref
5848 pop_compile_unit (dw_die_ref old_unit)
5849 {
5850   dw_die_ref new_unit = old_unit->die_sib;
5851
5852   old_unit->die_sib = NULL;
5853   return new_unit;
5854 }
5855
5856 #define CHECKSUM(FOO) md5_process_bytes (&(FOO), sizeof (FOO), ctx)
5857 #define CHECKSUM_STRING(FOO) md5_process_bytes ((FOO), strlen (FOO), ctx)
5858
5859 /* Calculate the checksum of a location expression.  */
5860
5861 static inline void
5862 loc_checksum (dw_loc_descr_ref loc, struct md5_ctx *ctx)
5863 {
5864   CHECKSUM (loc->dw_loc_opc);
5865   CHECKSUM (loc->dw_loc_oprnd1);
5866   CHECKSUM (loc->dw_loc_oprnd2);
5867 }
5868
5869 /* Calculate the checksum of an attribute.  */
5870
5871 static void
5872 attr_checksum (dw_attr_ref at, struct md5_ctx *ctx, int *mark)
5873 {
5874   dw_loc_descr_ref loc;
5875   rtx r;
5876
5877   CHECKSUM (at->dw_attr);
5878
5879   /* We don't care about differences in file numbering.  */
5880   if (at->dw_attr == DW_AT_decl_file
5881       /* Or that this was compiled with a different compiler snapshot; if
5882          the output is the same, that's what matters.  */
5883       || at->dw_attr == DW_AT_producer)
5884     return;
5885
5886   switch (AT_class (at))
5887     {
5888     case dw_val_class_const:
5889       CHECKSUM (at->dw_attr_val.v.val_int);
5890       break;
5891     case dw_val_class_unsigned_const:
5892       CHECKSUM (at->dw_attr_val.v.val_unsigned);
5893       break;
5894     case dw_val_class_long_long:
5895       CHECKSUM (at->dw_attr_val.v.val_long_long);
5896       break;
5897     case dw_val_class_vec:
5898       CHECKSUM (at->dw_attr_val.v.val_vec);
5899       break;
5900     case dw_val_class_flag:
5901       CHECKSUM (at->dw_attr_val.v.val_flag);
5902       break;
5903     case dw_val_class_str:
5904       CHECKSUM_STRING (AT_string (at));
5905       break;
5906
5907     case dw_val_class_addr:
5908       r = AT_addr (at);
5909       gcc_assert (GET_CODE (r) == SYMBOL_REF);
5910       CHECKSUM_STRING (XSTR (r, 0));
5911       break;
5912
5913     case dw_val_class_offset:
5914       CHECKSUM (at->dw_attr_val.v.val_offset);
5915       break;
5916
5917     case dw_val_class_loc:
5918       for (loc = AT_loc (at); loc; loc = loc->dw_loc_next)
5919         loc_checksum (loc, ctx);
5920       break;
5921
5922     case dw_val_class_die_ref:
5923       die_checksum (AT_ref (at), ctx, mark);
5924       break;
5925
5926     case dw_val_class_fde_ref:
5927     case dw_val_class_lbl_id:
5928     case dw_val_class_lbl_offset:
5929       break;
5930
5931     default:
5932       break;
5933     }
5934 }
5935
5936 /* Calculate the checksum of a DIE.  */
5937
5938 static void
5939 die_checksum (dw_die_ref die, struct md5_ctx *ctx, int *mark)
5940 {
5941   dw_die_ref c;
5942   dw_attr_ref a;
5943
5944   /* To avoid infinite recursion.  */
5945   if (die->die_mark)
5946     {
5947       CHECKSUM (die->die_mark);
5948       return;
5949     }
5950   die->die_mark = ++(*mark);
5951
5952   CHECKSUM (die->die_tag);
5953
5954   for (a = die->die_attr; a; a = a->dw_attr_next)
5955     attr_checksum (a, ctx, mark);
5956
5957   for (c = die->die_child; c; c = c->die_sib)
5958     die_checksum (c, ctx, mark);
5959 }
5960
5961 #undef CHECKSUM
5962 #undef CHECKSUM_STRING
5963
5964 /* Do the location expressions look same?  */
5965 static inline int
5966 same_loc_p (dw_loc_descr_ref loc1, dw_loc_descr_ref loc2, int *mark)
5967 {
5968   return loc1->dw_loc_opc == loc2->dw_loc_opc
5969          && same_dw_val_p (&loc1->dw_loc_oprnd1, &loc2->dw_loc_oprnd1, mark)
5970          && same_dw_val_p (&loc1->dw_loc_oprnd2, &loc2->dw_loc_oprnd2, mark);
5971 }
5972
5973 /* Do the values look the same?  */
5974 static int
5975 same_dw_val_p (dw_val_node *v1, dw_val_node *v2, int *mark)
5976 {
5977   dw_loc_descr_ref loc1, loc2;
5978   rtx r1, r2;
5979
5980   if (v1->val_class != v2->val_class)
5981     return 0;
5982
5983   switch (v1->val_class)
5984     {
5985     case dw_val_class_const:
5986       return v1->v.val_int == v2->v.val_int;
5987     case dw_val_class_unsigned_const:
5988       return v1->v.val_unsigned == v2->v.val_unsigned;
5989     case dw_val_class_long_long:
5990       return v1->v.val_long_long.hi == v2->v.val_long_long.hi
5991              && v1->v.val_long_long.low == v2->v.val_long_long.low;
5992     case dw_val_class_vec:
5993       if (v1->v.val_vec.length != v2->v.val_vec.length
5994           || v1->v.val_vec.elt_size != v2->v.val_vec.elt_size)
5995         return 0;
5996       if (memcmp (v1->v.val_vec.array, v2->v.val_vec.array,
5997                   v1->v.val_vec.length * v1->v.val_vec.elt_size))
5998         return 0;
5999       return 1;
6000     case dw_val_class_flag:
6001       return v1->v.val_flag == v2->v.val_flag;
6002     case dw_val_class_str:
6003       return !strcmp(v1->v.val_str->str, v2->v.val_str->str);
6004
6005     case dw_val_class_addr:
6006       r1 = v1->v.val_addr;
6007       r2 = v2->v.val_addr;
6008       if (GET_CODE (r1) != GET_CODE (r2))
6009         return 0;
6010       gcc_assert (GET_CODE (r1) == SYMBOL_REF);
6011       return !strcmp (XSTR (r1, 0), XSTR (r2, 0));
6012
6013     case dw_val_class_offset:
6014       return v1->v.val_offset == v2->v.val_offset;
6015
6016     case dw_val_class_loc:
6017       for (loc1 = v1->v.val_loc, loc2 = v2->v.val_loc;
6018            loc1 && loc2;
6019            loc1 = loc1->dw_loc_next, loc2 = loc2->dw_loc_next)
6020         if (!same_loc_p (loc1, loc2, mark))
6021           return 0;
6022       return !loc1 && !loc2;
6023
6024     case dw_val_class_die_ref:
6025       return same_die_p (v1->v.val_die_ref.die, v2->v.val_die_ref.die, mark);
6026
6027     case dw_val_class_fde_ref:
6028     case dw_val_class_lbl_id:
6029     case dw_val_class_lbl_offset:
6030       return 1;
6031
6032     default:
6033       return 1;
6034     }
6035 }
6036
6037 /* Do the attributes look the same?  */
6038
6039 static int
6040 same_attr_p (dw_attr_ref at1, dw_attr_ref at2, int *mark)
6041 {
6042   if (at1->dw_attr != at2->dw_attr)
6043     return 0;
6044
6045   /* We don't care about differences in file numbering.  */
6046   if (at1->dw_attr == DW_AT_decl_file
6047       /* Or that this was compiled with a different compiler snapshot; if
6048          the output is the same, that's what matters.  */
6049       || at1->dw_attr == DW_AT_producer)
6050     return 1;
6051
6052   return same_dw_val_p (&at1->dw_attr_val, &at2->dw_attr_val, mark);
6053 }
6054
6055 /* Do the dies look the same?  */
6056
6057 static int
6058 same_die_p (dw_die_ref die1, dw_die_ref die2, int *mark)
6059 {
6060   dw_die_ref c1, c2;
6061   dw_attr_ref a1, a2;
6062
6063   /* To avoid infinite recursion.  */
6064   if (die1->die_mark)
6065     return die1->die_mark == die2->die_mark;
6066   die1->die_mark = die2->die_mark = ++(*mark);
6067
6068   if (die1->die_tag != die2->die_tag)
6069     return 0;
6070
6071   for (a1 = die1->die_attr, a2 = die2->die_attr;
6072        a1 && a2;
6073        a1 = a1->dw_attr_next, a2 = a2->dw_attr_next)
6074     if (!same_attr_p (a1, a2, mark))
6075       return 0;
6076   if (a1 || a2)
6077     return 0;
6078
6079   for (c1 = die1->die_child, c2 = die2->die_child;
6080        c1 && c2;
6081        c1 = c1->die_sib, c2 = c2->die_sib)
6082     if (!same_die_p (c1, c2, mark))
6083       return 0;
6084   if (c1 || c2)
6085     return 0;
6086
6087   return 1;
6088 }
6089
6090 /* Do the dies look the same?  Wrapper around same_die_p.  */
6091
6092 static int
6093 same_die_p_wrap (dw_die_ref die1, dw_die_ref die2)
6094 {
6095   int mark = 0;
6096   int ret = same_die_p (die1, die2, &mark);
6097
6098   unmark_all_dies (die1);
6099   unmark_all_dies (die2);
6100
6101   return ret;
6102 }
6103
6104 /* The prefix to attach to symbols on DIEs in the current comdat debug
6105    info section.  */
6106 static char *comdat_symbol_id;
6107
6108 /* The index of the current symbol within the current comdat CU.  */
6109 static unsigned int comdat_symbol_number;
6110
6111 /* Calculate the MD5 checksum of the compilation unit DIE UNIT_DIE and its
6112    children, and set comdat_symbol_id accordingly.  */
6113
6114 static void
6115 compute_section_prefix (dw_die_ref unit_die)
6116 {
6117   const char *die_name = get_AT_string (unit_die, DW_AT_name);
6118   const char *base = die_name ? lbasename (die_name) : "anonymous";
6119   char *name = alloca (strlen (base) + 64);
6120   char *p;
6121   int i, mark;
6122   unsigned char checksum[16];
6123   struct md5_ctx ctx;
6124
6125   /* Compute the checksum of the DIE, then append part of it as hex digits to
6126      the name filename of the unit.  */
6127
6128   md5_init_ctx (&ctx);
6129   mark = 0;
6130   die_checksum (unit_die, &ctx, &mark);
6131   unmark_all_dies (unit_die);
6132   md5_finish_ctx (&ctx, checksum);
6133
6134   sprintf (name, "%s.", base);
6135   clean_symbol_name (name);
6136
6137   p = name + strlen (name);
6138   for (i = 0; i < 4; i++)
6139     {
6140       sprintf (p, "%.2x", checksum[i]);
6141       p += 2;
6142     }
6143
6144   comdat_symbol_id = unit_die->die_symbol = xstrdup (name);
6145   comdat_symbol_number = 0;
6146 }
6147
6148 /* Returns nonzero if DIE represents a type, in the sense of TYPE_P.  */
6149
6150 static int
6151 is_type_die (dw_die_ref die)
6152 {
6153   switch (die->die_tag)
6154     {
6155     case DW_TAG_array_type:
6156     case DW_TAG_class_type:
6157     case DW_TAG_enumeration_type:
6158     case DW_TAG_pointer_type:
6159     case DW_TAG_reference_type:
6160     case DW_TAG_string_type:
6161     case DW_TAG_structure_type:
6162     case DW_TAG_subroutine_type:
6163     case DW_TAG_union_type:
6164     case DW_TAG_ptr_to_member_type:
6165     case DW_TAG_set_type:
6166     case DW_TAG_subrange_type:
6167     case DW_TAG_base_type:
6168     case DW_TAG_const_type:
6169     case DW_TAG_file_type:
6170     case DW_TAG_packed_type:
6171     case DW_TAG_volatile_type:
6172     case DW_TAG_typedef:
6173       return 1;
6174     default:
6175       return 0;
6176     }
6177 }
6178
6179 /* Returns 1 iff C is the sort of DIE that should go into a COMDAT CU.
6180    Basically, we want to choose the bits that are likely to be shared between
6181    compilations (types) and leave out the bits that are specific to individual
6182    compilations (functions).  */
6183
6184 static int
6185 is_comdat_die (dw_die_ref c)
6186 {
6187   /* I think we want to leave base types and __vtbl_ptr_type in the main CU, as
6188      we do for stabs.  The advantage is a greater likelihood of sharing between
6189      objects that don't include headers in the same order (and therefore would
6190      put the base types in a different comdat).  jason 8/28/00 */
6191
6192   if (c->die_tag == DW_TAG_base_type)
6193     return 0;
6194
6195   if (c->die_tag == DW_TAG_pointer_type
6196       || c->die_tag == DW_TAG_reference_type
6197       || c->die_tag == DW_TAG_const_type
6198       || c->die_tag == DW_TAG_volatile_type)
6199     {
6200       dw_die_ref t = get_AT_ref (c, DW_AT_type);
6201
6202       return t ? is_comdat_die (t) : 0;
6203     }
6204
6205   return is_type_die (c);
6206 }
6207
6208 /* Returns 1 iff C is the sort of DIE that might be referred to from another
6209    compilation unit.  */
6210
6211 static int
6212 is_symbol_die (dw_die_ref c)
6213 {
6214   return (is_type_die (c)
6215           || (get_AT (c, DW_AT_declaration)
6216               && !get_AT (c, DW_AT_specification)));
6217 }
6218
6219 static char *
6220 gen_internal_sym (const char *prefix)
6221 {
6222   char buf[256];
6223
6224   ASM_GENERATE_INTERNAL_LABEL (buf, prefix, label_num++);
6225   return xstrdup (buf);
6226 }
6227
6228 /* Assign symbols to all worthy DIEs under DIE.  */
6229
6230 static void
6231 assign_symbol_names (dw_die_ref die)
6232 {
6233   dw_die_ref c;
6234
6235   if (is_symbol_die (die))
6236     {
6237       if (comdat_symbol_id)
6238         {
6239           char *p = alloca (strlen (comdat_symbol_id) + 64);
6240
6241           sprintf (p, "%s.%s.%x", DIE_LABEL_PREFIX,
6242                    comdat_symbol_id, comdat_symbol_number++);
6243           die->die_symbol = xstrdup (p);
6244         }
6245       else
6246         die->die_symbol = gen_internal_sym ("LDIE");
6247     }
6248
6249   for (c = die->die_child; c != NULL; c = c->die_sib)
6250     assign_symbol_names (c);
6251 }
6252
6253 struct cu_hash_table_entry
6254 {
6255   dw_die_ref cu;
6256   unsigned min_comdat_num, max_comdat_num;
6257   struct cu_hash_table_entry *next;
6258 };
6259
6260 /* Routines to manipulate hash table of CUs.  */
6261 static hashval_t
6262 htab_cu_hash (const void *of)
6263 {
6264   const struct cu_hash_table_entry *entry = of;
6265
6266   return htab_hash_string (entry->cu->die_symbol);
6267 }
6268
6269 static int
6270 htab_cu_eq (const void *of1, const void *of2)
6271 {
6272   const struct cu_hash_table_entry *entry1 = of1;
6273   const struct die_struct *entry2 = of2;
6274
6275   return !strcmp (entry1->cu->die_symbol, entry2->die_symbol);
6276 }
6277
6278 static void
6279 htab_cu_del (void *what)
6280 {
6281   struct cu_hash_table_entry *next, *entry = what;
6282
6283   while (entry)
6284     {
6285       next = entry->next;
6286       free (entry);
6287       entry = next;
6288     }
6289 }
6290
6291 /* Check whether we have already seen this CU and set up SYM_NUM
6292    accordingly.  */
6293 static int
6294 check_duplicate_cu (dw_die_ref cu, htab_t htable, unsigned int *sym_num)
6295 {
6296   struct cu_hash_table_entry dummy;
6297   struct cu_hash_table_entry **slot, *entry, *last = &dummy;
6298
6299   dummy.max_comdat_num = 0;
6300
6301   slot = (struct cu_hash_table_entry **)
6302     htab_find_slot_with_hash (htable, cu, htab_hash_string (cu->die_symbol),
6303         INSERT);
6304   entry = *slot;
6305
6306   for (; entry; last = entry, entry = entry->next)
6307     {
6308       if (same_die_p_wrap (cu, entry->cu))
6309         break;
6310     }
6311
6312   if (entry)
6313     {
6314       *sym_num = entry->min_comdat_num;
6315       return 1;
6316     }
6317
6318   entry = xcalloc (1, sizeof (struct cu_hash_table_entry));
6319   entry->cu = cu;
6320   entry->min_comdat_num = *sym_num = last->max_comdat_num;
6321   entry->next = *slot;
6322   *slot = entry;
6323
6324   return 0;
6325 }
6326
6327 /* Record SYM_NUM to record of CU in HTABLE.  */
6328 static void
6329 record_comdat_symbol_number (dw_die_ref cu, htab_t htable, unsigned int sym_num)
6330 {
6331   struct cu_hash_table_entry **slot, *entry;
6332
6333   slot = (struct cu_hash_table_entry **)
6334     htab_find_slot_with_hash (htable, cu, htab_hash_string (cu->die_symbol),
6335         NO_INSERT);
6336   entry = *slot;
6337
6338   entry->max_comdat_num = sym_num;
6339 }
6340
6341 /* Traverse the DIE (which is always comp_unit_die), and set up
6342    additional compilation units for each of the include files we see
6343    bracketed by BINCL/EINCL.  */
6344
6345 static void
6346 break_out_includes (dw_die_ref die)
6347 {
6348   dw_die_ref *ptr;
6349   dw_die_ref unit = NULL;
6350   limbo_die_node *node, **pnode;
6351   htab_t cu_hash_table;
6352
6353   for (ptr = &(die->die_child); *ptr;)
6354     {
6355       dw_die_ref c = *ptr;
6356
6357       if (c->die_tag == DW_TAG_GNU_BINCL || c->die_tag == DW_TAG_GNU_EINCL
6358           || (unit && is_comdat_die (c)))
6359         {
6360           /* This DIE is for a secondary CU; remove it from the main one.  */
6361           *ptr = c->die_sib;
6362
6363           if (c->die_tag == DW_TAG_GNU_BINCL)
6364             {
6365               unit = push_new_compile_unit (unit, c);
6366               free_die (c);
6367             }
6368           else if (c->die_tag == DW_TAG_GNU_EINCL)
6369             {
6370               unit = pop_compile_unit (unit);
6371               free_die (c);
6372             }
6373           else
6374             add_child_die (unit, c);
6375         }
6376       else
6377         {
6378           /* Leave this DIE in the main CU.  */
6379           ptr = &(c->die_sib);
6380           continue;
6381         }
6382     }
6383
6384 #if 0
6385   /* We can only use this in debugging, since the frontend doesn't check
6386      to make sure that we leave every include file we enter.  */
6387   gcc_assert (!unit);
6388 #endif
6389
6390   assign_symbol_names (die);
6391   cu_hash_table = htab_create (10, htab_cu_hash, htab_cu_eq, htab_cu_del);
6392   for (node = limbo_die_list, pnode = &limbo_die_list;
6393        node;
6394        node = node->next)
6395     {
6396       int is_dupl;
6397
6398       compute_section_prefix (node->die);
6399       is_dupl = check_duplicate_cu (node->die, cu_hash_table,
6400                         &comdat_symbol_number);
6401       assign_symbol_names (node->die);
6402       if (is_dupl)
6403         *pnode = node->next;
6404       else
6405         {
6406           pnode = &node->next;
6407           record_comdat_symbol_number (node->die, cu_hash_table,
6408                 comdat_symbol_number);
6409         }
6410     }
6411   htab_delete (cu_hash_table);
6412 }
6413
6414 /* Traverse the DIE and add a sibling attribute if it may have the
6415    effect of speeding up access to siblings.  To save some space,
6416    avoid generating sibling attributes for DIE's without children.  */
6417
6418 static void
6419 add_sibling_attributes (dw_die_ref die)
6420 {
6421   dw_die_ref c;
6422
6423   if (die->die_tag != DW_TAG_compile_unit
6424       && die->die_sib && die->die_child != NULL)
6425     /* Add the sibling link to the front of the attribute list.  */
6426     add_AT_die_ref (die, DW_AT_sibling, die->die_sib);
6427
6428   for (c = die->die_child; c != NULL; c = c->die_sib)
6429     add_sibling_attributes (c);
6430 }
6431
6432 /* Output all location lists for the DIE and its children.  */
6433
6434 static void
6435 output_location_lists (dw_die_ref die)
6436 {
6437   dw_die_ref c;
6438   dw_attr_ref d_attr;
6439
6440   for (d_attr = die->die_attr; d_attr; d_attr = d_attr->dw_attr_next)
6441     if (AT_class (d_attr) == dw_val_class_loc_list)
6442       output_loc_list (AT_loc_list (d_attr));
6443
6444   for (c = die->die_child; c != NULL; c = c->die_sib)
6445     output_location_lists (c);
6446
6447 }
6448
6449 /* The format of each DIE (and its attribute value pairs) is encoded in an
6450    abbreviation table.  This routine builds the abbreviation table and assigns
6451    a unique abbreviation id for each abbreviation entry.  The children of each
6452    die are visited recursively.  */
6453
6454 static void
6455 build_abbrev_table (dw_die_ref die)
6456 {
6457   unsigned long abbrev_id;
6458   unsigned int n_alloc;
6459   dw_die_ref c;
6460   dw_attr_ref d_attr, a_attr;
6461
6462   /* Scan the DIE references, and mark as external any that refer to
6463      DIEs from other CUs (i.e. those which are not marked).  */
6464   for (d_attr = die->die_attr; d_attr; d_attr = d_attr->dw_attr_next)
6465     if (AT_class (d_attr) == dw_val_class_die_ref
6466         && AT_ref (d_attr)->die_mark == 0)
6467       {
6468         gcc_assert (AT_ref (d_attr)->die_symbol);
6469
6470         set_AT_ref_external (d_attr, 1);
6471       }
6472
6473   for (abbrev_id = 1; abbrev_id < abbrev_die_table_in_use; ++abbrev_id)
6474     {
6475       dw_die_ref abbrev = abbrev_die_table[abbrev_id];
6476
6477       if (abbrev->die_tag == die->die_tag)
6478         {
6479           if ((abbrev->die_child != NULL) == (die->die_child != NULL))
6480             {
6481               a_attr = abbrev->die_attr;
6482               d_attr = die->die_attr;
6483
6484               while (a_attr != NULL && d_attr != NULL)
6485                 {
6486                   if ((a_attr->dw_attr != d_attr->dw_attr)
6487                       || (value_format (a_attr) != value_format (d_attr)))
6488                     break;
6489
6490                   a_attr = a_attr->dw_attr_next;
6491                   d_attr = d_attr->dw_attr_next;
6492                 }
6493
6494               if (a_attr == NULL && d_attr == NULL)
6495                 break;
6496             }
6497         }
6498     }
6499
6500   if (abbrev_id >= abbrev_die_table_in_use)
6501     {
6502       if (abbrev_die_table_in_use >= abbrev_die_table_allocated)
6503         {
6504           n_alloc = abbrev_die_table_allocated + ABBREV_DIE_TABLE_INCREMENT;
6505           abbrev_die_table = ggc_realloc (abbrev_die_table,
6506                                           sizeof (dw_die_ref) * n_alloc);
6507
6508           memset (&abbrev_die_table[abbrev_die_table_allocated], 0,
6509                  (n_alloc - abbrev_die_table_allocated) * sizeof (dw_die_ref));
6510           abbrev_die_table_allocated = n_alloc;
6511         }
6512
6513       ++abbrev_die_table_in_use;
6514       abbrev_die_table[abbrev_id] = die;
6515     }
6516
6517   die->die_abbrev = abbrev_id;
6518   for (c = die->die_child; c != NULL; c = c->die_sib)
6519     build_abbrev_table (c);
6520 }
6521 \f
6522 /* Return the power-of-two number of bytes necessary to represent VALUE.  */
6523
6524 static int
6525 constant_size (long unsigned int value)
6526 {
6527   int log;
6528
6529   if (value == 0)
6530     log = 0;
6531   else
6532     log = floor_log2 (value);
6533
6534   log = log / 8;
6535   log = 1 << (floor_log2 (log) + 1);
6536
6537   return log;
6538 }
6539
6540 /* Return the size of a DIE as it is represented in the
6541    .debug_info section.  */
6542
6543 static unsigned long
6544 size_of_die (dw_die_ref die)
6545 {
6546   unsigned long size = 0;
6547   dw_attr_ref a;
6548
6549   size += size_of_uleb128 (die->die_abbrev);
6550   for (a = die->die_attr; a != NULL; a = a->dw_attr_next)
6551     {
6552       switch (AT_class (a))
6553         {
6554         case dw_val_class_addr:
6555           size += DWARF2_ADDR_SIZE;
6556           break;
6557         case dw_val_class_offset:
6558           size += DWARF_OFFSET_SIZE;
6559           break;
6560         case dw_val_class_loc:
6561           {
6562             unsigned long lsize = size_of_locs (AT_loc (a));
6563
6564             /* Block length.  */
6565             size += constant_size (lsize);
6566             size += lsize;
6567           }
6568           break;
6569         case dw_val_class_loc_list:
6570           size += DWARF_OFFSET_SIZE;
6571           break;
6572         case dw_val_class_range_list:
6573           size += DWARF_OFFSET_SIZE;
6574           break;
6575         case dw_val_class_const:
6576           size += size_of_sleb128 (AT_int (a));
6577           break;
6578         case dw_val_class_unsigned_const:
6579           size += constant_size (AT_unsigned (a));
6580           break;
6581         case dw_val_class_long_long:
6582           size += 1 + 2*HOST_BITS_PER_LONG/HOST_BITS_PER_CHAR; /* block */
6583           break;
6584         case dw_val_class_vec:
6585           size += 1 + (a->dw_attr_val.v.val_vec.length
6586                        * a->dw_attr_val.v.val_vec.elt_size); /* block */
6587           break;
6588         case dw_val_class_flag:
6589           size += 1;
6590           break;
6591         case dw_val_class_die_ref:
6592           if (AT_ref_external (a))
6593             size += DWARF2_ADDR_SIZE;
6594           else
6595             size += DWARF_OFFSET_SIZE;
6596           break;
6597         case dw_val_class_fde_ref:
6598           size += DWARF_OFFSET_SIZE;
6599           break;
6600         case dw_val_class_lbl_id:
6601           size += DWARF2_ADDR_SIZE;
6602           break;
6603         case dw_val_class_lbl_offset:
6604           size += DWARF_OFFSET_SIZE;
6605           break;
6606         case dw_val_class_str:
6607           if (AT_string_form (a) == DW_FORM_strp)
6608             size += DWARF_OFFSET_SIZE;
6609           else
6610             size += strlen (a->dw_attr_val.v.val_str->str) + 1;
6611           break;
6612         default:
6613           gcc_unreachable ();
6614         }
6615     }
6616
6617   return size;
6618 }
6619
6620 /* Size the debugging information associated with a given DIE.  Visits the
6621    DIE's children recursively.  Updates the global variable next_die_offset, on
6622    each time through.  Uses the current value of next_die_offset to update the
6623    die_offset field in each DIE.  */
6624
6625 static void
6626 calc_die_sizes (dw_die_ref die)
6627 {
6628   dw_die_ref c;
6629
6630   die->die_offset = next_die_offset;
6631   next_die_offset += size_of_die (die);
6632
6633   for (c = die->die_child; c != NULL; c = c->die_sib)
6634     calc_die_sizes (c);
6635
6636   if (die->die_child != NULL)
6637     /* Count the null byte used to terminate sibling lists.  */
6638     next_die_offset += 1;
6639 }
6640
6641 /* Set the marks for a die and its children.  We do this so
6642    that we know whether or not a reference needs to use FORM_ref_addr; only
6643    DIEs in the same CU will be marked.  We used to clear out the offset
6644    and use that as the flag, but ran into ordering problems.  */
6645
6646 static void
6647 mark_dies (dw_die_ref die)
6648 {
6649   dw_die_ref c;
6650
6651   gcc_assert (!die->die_mark);
6652
6653   die->die_mark = 1;
6654   for (c = die->die_child; c; c = c->die_sib)
6655     mark_dies (c);
6656 }
6657
6658 /* Clear the marks for a die and its children.  */
6659
6660 static void
6661 unmark_dies (dw_die_ref die)
6662 {
6663   dw_die_ref c;
6664
6665   gcc_assert (die->die_mark);
6666
6667   die->die_mark = 0;
6668   for (c = die->die_child; c; c = c->die_sib)
6669     unmark_dies (c);
6670 }
6671
6672 /* Clear the marks for a die, its children and referred dies.  */
6673
6674 static void
6675 unmark_all_dies (dw_die_ref die)
6676 {
6677   dw_die_ref c;
6678   dw_attr_ref a;
6679
6680   if (!die->die_mark)
6681     return;
6682   die->die_mark = 0;
6683
6684   for (c = die->die_child; c; c = c->die_sib)
6685     unmark_all_dies (c);
6686
6687   for (a = die->die_attr; a; a = a->dw_attr_next)
6688     if (AT_class (a) == dw_val_class_die_ref)
6689       unmark_all_dies (AT_ref (a));
6690 }
6691
6692 /* Return the size of the .debug_pubnames table  generated for the
6693    compilation unit.  */
6694
6695 static unsigned long
6696 size_of_pubnames (void)
6697 {
6698   unsigned long size;
6699   unsigned i;
6700
6701   size = DWARF_PUBNAMES_HEADER_SIZE;
6702   for (i = 0; i < pubname_table_in_use; i++)
6703     {
6704       pubname_ref p = &pubname_table[i];
6705       size += DWARF_OFFSET_SIZE + strlen (p->name) + 1;
6706     }
6707
6708   size += DWARF_OFFSET_SIZE;
6709   return size;
6710 }
6711
6712 /* Return the size of the information in the .debug_aranges section.  */
6713
6714 static unsigned long
6715 size_of_aranges (void)
6716 {
6717   unsigned long size;
6718
6719   size = DWARF_ARANGES_HEADER_SIZE;
6720
6721   /* Count the address/length pair for this compilation unit.  */
6722   size += 2 * DWARF2_ADDR_SIZE;
6723   size += 2 * DWARF2_ADDR_SIZE * arange_table_in_use;
6724
6725   /* Count the two zero words used to terminated the address range table.  */
6726   size += 2 * DWARF2_ADDR_SIZE;
6727   return size;
6728 }
6729 \f
6730 /* Select the encoding of an attribute value.  */
6731
6732 static enum dwarf_form
6733 value_format (dw_attr_ref a)
6734 {
6735   switch (a->dw_attr_val.val_class)
6736     {
6737     case dw_val_class_addr:
6738       return DW_FORM_addr;
6739     case dw_val_class_range_list:
6740     case dw_val_class_offset:
6741       switch (DWARF_OFFSET_SIZE)
6742         {
6743         case 4:
6744           return DW_FORM_data4;
6745         case 8:
6746           return DW_FORM_data8;
6747         default:
6748           gcc_unreachable ();
6749         }
6750     case dw_val_class_loc_list:
6751       /* FIXME: Could be DW_FORM_data8, with a > 32 bit size
6752          .debug_loc section */
6753       return DW_FORM_data4;
6754     case dw_val_class_loc:
6755       switch (constant_size (size_of_locs (AT_loc (a))))
6756         {
6757         case 1:
6758           return DW_FORM_block1;
6759         case 2:
6760           return DW_FORM_block2;
6761         default:
6762           gcc_unreachable ();
6763         }
6764     case dw_val_class_const:
6765       return DW_FORM_sdata;
6766     case dw_val_class_unsigned_const:
6767       switch (constant_size (AT_unsigned (a)))
6768         {
6769         case 1:
6770           return DW_FORM_data1;
6771         case 2:
6772           return DW_FORM_data2;
6773         case 4:
6774           return DW_FORM_data4;
6775         case 8:
6776           return DW_FORM_data8;
6777         default:
6778           gcc_unreachable ();
6779         }
6780     case dw_val_class_long_long:
6781       return DW_FORM_block1;
6782     case dw_val_class_vec:
6783       return DW_FORM_block1;
6784     case dw_val_class_flag:
6785       return DW_FORM_flag;
6786     case dw_val_class_die_ref:
6787       if (AT_ref_external (a))
6788         return DW_FORM_ref_addr;
6789       else
6790         return DW_FORM_ref;
6791     case dw_val_class_fde_ref:
6792       return DW_FORM_data;
6793     case dw_val_class_lbl_id:
6794       return DW_FORM_addr;
6795     case dw_val_class_lbl_offset:
6796       return DW_FORM_data;
6797     case dw_val_class_str:
6798       return AT_string_form (a);
6799
6800     default:
6801       gcc_unreachable ();
6802     }
6803 }
6804
6805 /* Output the encoding of an attribute value.  */
6806
6807 static void
6808 output_value_format (dw_attr_ref a)
6809 {
6810   enum dwarf_form form = value_format (a);
6811
6812   dw2_asm_output_data_uleb128 (form, "(%s)", dwarf_form_name (form));
6813 }
6814
6815 /* Output the .debug_abbrev section which defines the DIE abbreviation
6816    table.  */
6817
6818 static void
6819 output_abbrev_section (void)
6820 {
6821   unsigned long abbrev_id;
6822
6823   dw_attr_ref a_attr;
6824
6825   for (abbrev_id = 1; abbrev_id < abbrev_die_table_in_use; ++abbrev_id)
6826     {
6827       dw_die_ref abbrev = abbrev_die_table[abbrev_id];
6828
6829       dw2_asm_output_data_uleb128 (abbrev_id, "(abbrev code)");
6830       dw2_asm_output_data_uleb128 (abbrev->die_tag, "(TAG: %s)",
6831                                    dwarf_tag_name (abbrev->die_tag));
6832
6833       if (abbrev->die_child != NULL)
6834         dw2_asm_output_data (1, DW_children_yes, "DW_children_yes");
6835       else
6836         dw2_asm_output_data (1, DW_children_no, "DW_children_no");
6837
6838       for (a_attr = abbrev->die_attr; a_attr != NULL;
6839            a_attr = a_attr->dw_attr_next)
6840         {
6841           dw2_asm_output_data_uleb128 (a_attr->dw_attr, "(%s)",
6842                                        dwarf_attr_name (a_attr->dw_attr));
6843           output_value_format (a_attr);
6844         }
6845
6846       dw2_asm_output_data (1, 0, NULL);
6847       dw2_asm_output_data (1, 0, NULL);
6848     }
6849
6850   /* Terminate the table.  */
6851   dw2_asm_output_data (1, 0, NULL);
6852 }
6853
6854 /* Output a symbol we can use to refer to this DIE from another CU.  */
6855
6856 static inline void
6857 output_die_symbol (dw_die_ref die)
6858 {
6859   char *sym = die->die_symbol;
6860
6861   if (sym == 0)
6862     return;
6863
6864   if (strncmp (sym, DIE_LABEL_PREFIX, sizeof (DIE_LABEL_PREFIX) - 1) == 0)
6865     /* We make these global, not weak; if the target doesn't support
6866        .linkonce, it doesn't support combining the sections, so debugging
6867        will break.  */
6868     targetm.asm_out.globalize_label (asm_out_file, sym);
6869
6870   ASM_OUTPUT_LABEL (asm_out_file, sym);
6871 }
6872
6873 /* Return a new location list, given the begin and end range, and the
6874    expression. gensym tells us whether to generate a new internal symbol for
6875    this location list node, which is done for the head of the list only.  */
6876
6877 static inline dw_loc_list_ref
6878 new_loc_list (dw_loc_descr_ref expr, const char *begin, const char *end,
6879               const char *section, unsigned int gensym)
6880 {
6881   dw_loc_list_ref retlist = ggc_alloc_cleared (sizeof (dw_loc_list_node));
6882
6883   retlist->begin = begin;
6884   retlist->end = end;
6885   retlist->expr = expr;
6886   retlist->section = section;
6887   if (gensym)
6888     retlist->ll_symbol = gen_internal_sym ("LLST");
6889
6890   return retlist;
6891 }
6892
6893 /* Add a location description expression to a location list.  */
6894
6895 static inline void
6896 add_loc_descr_to_loc_list (dw_loc_list_ref *list_head, dw_loc_descr_ref descr,
6897                            const char *begin, const char *end,
6898                            const char *section)
6899 {
6900   dw_loc_list_ref *d;
6901
6902   /* Find the end of the chain.  */
6903   for (d = list_head; (*d) != NULL; d = &(*d)->dw_loc_next)
6904     ;
6905
6906   /* Add a new location list node to the list.  */
6907   *d = new_loc_list (descr, begin, end, section, 0);
6908 }
6909
6910 static void
6911 dwarf2out_switch_text_section (void)
6912 {
6913   dw_fde_ref fde;
6914
6915   gcc_assert (cfun);
6916
6917   fde = &fde_table[fde_table_in_use - 1];
6918   fde->dw_fde_switched_sections = true;
6919   fde->dw_fde_hot_section_label = cfun->hot_section_label;
6920   fde->dw_fde_hot_section_end_label = cfun->hot_section_end_label;
6921   fde->dw_fde_unlikely_section_label = cfun->cold_section_label;
6922   fde->dw_fde_unlikely_section_end_label = cfun->cold_section_end_label;
6923   have_switched_text_section = true;
6924 }
6925
6926 /* Output the location list given to us.  */
6927
6928 static void
6929 output_loc_list (dw_loc_list_ref list_head)
6930 {
6931   dw_loc_list_ref curr = list_head;
6932
6933   ASM_OUTPUT_LABEL (asm_out_file, list_head->ll_symbol);
6934
6935   /* Walk the location list, and output each range + expression.  */
6936   for (curr = list_head; curr != NULL; curr = curr->dw_loc_next)
6937     {
6938       unsigned long size;
6939       if (!separate_line_info_table_in_use && !have_switched_text_section)
6940         {
6941           dw2_asm_output_delta (DWARF2_ADDR_SIZE, curr->begin, curr->section,
6942                                 "Location list begin address (%s)",
6943                                 list_head->ll_symbol);
6944           dw2_asm_output_delta (DWARF2_ADDR_SIZE, curr->end, curr->section,
6945                                 "Location list end address (%s)",
6946                                 list_head->ll_symbol);
6947         }
6948       else
6949         {
6950           dw2_asm_output_addr (DWARF2_ADDR_SIZE, curr->begin,
6951                                "Location list begin address (%s)",
6952                                list_head->ll_symbol);
6953           dw2_asm_output_addr (DWARF2_ADDR_SIZE, curr->end,
6954                                "Location list end address (%s)",
6955                                list_head->ll_symbol);
6956         }
6957       size = size_of_locs (curr->expr);
6958
6959       /* Output the block length for this list of location operations.  */
6960       gcc_assert (size <= 0xffff);
6961       dw2_asm_output_data (2, size, "%s", "Location expression size");
6962
6963       output_loc_sequence (curr->expr);
6964     }
6965
6966   dw2_asm_output_data (DWARF2_ADDR_SIZE, 0,
6967                        "Location list terminator begin (%s)",
6968                        list_head->ll_symbol);
6969   dw2_asm_output_data (DWARF2_ADDR_SIZE, 0,
6970                        "Location list terminator end (%s)",
6971                        list_head->ll_symbol);
6972 }
6973
6974 /* Output the DIE and its attributes.  Called recursively to generate
6975    the definitions of each child DIE.  */
6976
6977 static void
6978 output_die (dw_die_ref die)
6979 {
6980   dw_attr_ref a;
6981   dw_die_ref c;
6982   unsigned long size;
6983
6984   /* If someone in another CU might refer to us, set up a symbol for
6985      them to point to.  */
6986   if (die->die_symbol)
6987     output_die_symbol (die);
6988
6989   dw2_asm_output_data_uleb128 (die->die_abbrev, "(DIE (0x%lx) %s)",
6990                                die->die_offset, dwarf_tag_name (die->die_tag));
6991
6992   for (a = die->die_attr; a != NULL; a = a->dw_attr_next)
6993     {
6994       const char *name = dwarf_attr_name (a->dw_attr);
6995
6996       switch (AT_class (a))
6997         {
6998         case dw_val_class_addr:
6999           dw2_asm_output_addr_rtx (DWARF2_ADDR_SIZE, AT_addr (a), "%s", name);
7000           break;
7001
7002         case dw_val_class_offset:
7003           dw2_asm_output_data (DWARF_OFFSET_SIZE, a->dw_attr_val.v.val_offset,
7004                                "%s", name);
7005           break;
7006
7007         case dw_val_class_range_list:
7008           {
7009             char *p = strchr (ranges_section_label, '\0');
7010
7011             sprintf (p, "+" HOST_WIDE_INT_PRINT_HEX,
7012                      a->dw_attr_val.v.val_offset);
7013             dw2_asm_output_offset (DWARF_OFFSET_SIZE, ranges_section_label,
7014                                    "%s", name);
7015             *p = '\0';
7016           }
7017           break;
7018
7019         case dw_val_class_loc:
7020           size = size_of_locs (AT_loc (a));
7021
7022           /* Output the block length for this list of location operations.  */
7023           dw2_asm_output_data (constant_size (size), size, "%s", name);
7024
7025           output_loc_sequence (AT_loc (a));
7026           break;
7027
7028         case dw_val_class_const:
7029           /* ??? It would be slightly more efficient to use a scheme like is
7030              used for unsigned constants below, but gdb 4.x does not sign
7031              extend.  Gdb 5.x does sign extend.  */
7032           dw2_asm_output_data_sleb128 (AT_int (a), "%s", name);
7033           break;
7034
7035         case dw_val_class_unsigned_const:
7036           dw2_asm_output_data (constant_size (AT_unsigned (a)),
7037                                AT_unsigned (a), "%s", name);
7038           break;
7039
7040         case dw_val_class_long_long:
7041           {
7042             unsigned HOST_WIDE_INT first, second;
7043
7044             dw2_asm_output_data (1,
7045                                  2 * HOST_BITS_PER_LONG / HOST_BITS_PER_CHAR,
7046                                  "%s", name);
7047
7048             if (WORDS_BIG_ENDIAN)
7049               {
7050                 first = a->dw_attr_val.v.val_long_long.hi;
7051                 second = a->dw_attr_val.v.val_long_long.low;
7052               }
7053             else
7054               {
7055                 first = a->dw_attr_val.v.val_long_long.low;
7056                 second = a->dw_attr_val.v.val_long_long.hi;
7057               }
7058
7059             dw2_asm_output_data (HOST_BITS_PER_LONG / HOST_BITS_PER_CHAR,
7060                                  first, "long long constant");
7061             dw2_asm_output_data (HOST_BITS_PER_LONG / HOST_BITS_PER_CHAR,
7062                                  second, NULL);
7063           }
7064           break;
7065
7066         case dw_val_class_vec:
7067           {
7068             unsigned int elt_size = a->dw_attr_val.v.val_vec.elt_size;
7069             unsigned int len = a->dw_attr_val.v.val_vec.length;
7070             unsigned int i;
7071             unsigned char *p;
7072
7073             dw2_asm_output_data (1, len * elt_size, "%s", name);
7074             if (elt_size > sizeof (HOST_WIDE_INT))
7075               {
7076                 elt_size /= 2;
7077                 len *= 2;
7078               }
7079             for (i = 0, p = a->dw_attr_val.v.val_vec.array;
7080                  i < len;
7081                  i++, p += elt_size)
7082               dw2_asm_output_data (elt_size, extract_int (p, elt_size),
7083                                    "fp or vector constant word %u", i);
7084             break;
7085           }
7086
7087         case dw_val_class_flag:
7088           dw2_asm_output_data (1, AT_flag (a), "%s", name);
7089           break;
7090
7091         case dw_val_class_loc_list:
7092           {
7093             char *sym = AT_loc_list (a)->ll_symbol;
7094
7095             gcc_assert (sym);
7096             dw2_asm_output_offset (DWARF_OFFSET_SIZE, sym, "%s", name);
7097           }
7098           break;
7099
7100         case dw_val_class_die_ref:
7101           if (AT_ref_external (a))
7102             {
7103               char *sym = AT_ref (a)->die_symbol;
7104
7105               gcc_assert (sym);
7106               dw2_asm_output_offset (DWARF2_ADDR_SIZE, sym, "%s", name);
7107             }
7108           else
7109             {
7110               gcc_assert (AT_ref (a)->die_offset);
7111               dw2_asm_output_data (DWARF_OFFSET_SIZE, AT_ref (a)->die_offset,
7112                                    "%s", name);
7113             }
7114           break;
7115
7116         case dw_val_class_fde_ref:
7117           {
7118             char l1[20];
7119
7120             ASM_GENERATE_INTERNAL_LABEL (l1, FDE_LABEL,
7121                                          a->dw_attr_val.v.val_fde_index * 2);
7122             dw2_asm_output_offset (DWARF_OFFSET_SIZE, l1, "%s", name);
7123           }
7124           break;
7125
7126         case dw_val_class_lbl_id:
7127           dw2_asm_output_addr (DWARF2_ADDR_SIZE, AT_lbl (a), "%s", name);
7128           break;
7129
7130         case dw_val_class_lbl_offset:
7131           dw2_asm_output_offset (DWARF_OFFSET_SIZE, AT_lbl (a), "%s", name);
7132           break;
7133
7134         case dw_val_class_str:
7135           if (AT_string_form (a) == DW_FORM_strp)
7136             dw2_asm_output_offset (DWARF_OFFSET_SIZE,
7137                                    a->dw_attr_val.v.val_str->label,
7138                                    "%s: \"%s\"", name, AT_string (a));
7139           else
7140             dw2_asm_output_nstring (AT_string (a), -1, "%s", name);
7141           break;
7142
7143         default:
7144           gcc_unreachable ();
7145         }
7146     }
7147
7148   for (c = die->die_child; c != NULL; c = c->die_sib)
7149     output_die (c);
7150
7151   /* Add null byte to terminate sibling list.  */
7152   if (die->die_child != NULL)
7153     dw2_asm_output_data (1, 0, "end of children of DIE 0x%lx",
7154                          die->die_offset);
7155 }
7156
7157 /* Output the compilation unit that appears at the beginning of the
7158    .debug_info section, and precedes the DIE descriptions.  */
7159
7160 static void
7161 output_compilation_unit_header (void)
7162 {
7163   if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
7164     dw2_asm_output_data (4, 0xffffffff,
7165       "Initial length escape value indicating 64-bit DWARF extension");
7166   dw2_asm_output_data (DWARF_OFFSET_SIZE,
7167                        next_die_offset - DWARF_INITIAL_LENGTH_SIZE,
7168                        "Length of Compilation Unit Info");
7169   dw2_asm_output_data (2, DWARF_VERSION, "DWARF version number");
7170   dw2_asm_output_offset (DWARF_OFFSET_SIZE, abbrev_section_label,
7171                          "Offset Into Abbrev. Section");
7172   dw2_asm_output_data (1, DWARF2_ADDR_SIZE, "Pointer Size (in bytes)");
7173 }
7174
7175 /* Output the compilation unit DIE and its children.  */
7176
7177 static void
7178 output_comp_unit (dw_die_ref die, int output_if_empty)
7179 {
7180   const char *secname;
7181   char *oldsym, *tmp;
7182
7183   /* Unless we are outputting main CU, we may throw away empty ones.  */
7184   if (!output_if_empty && die->die_child == NULL)
7185     return;
7186
7187   /* Even if there are no children of this DIE, we must output the information
7188      about the compilation unit.  Otherwise, on an empty translation unit, we
7189      will generate a present, but empty, .debug_info section.  IRIX 6.5 `nm'
7190      will then complain when examining the file.  First mark all the DIEs in
7191      this CU so we know which get local refs.  */
7192   mark_dies (die);
7193
7194   build_abbrev_table (die);
7195
7196   /* Initialize the beginning DIE offset - and calculate sizes/offsets.  */
7197   next_die_offset = DWARF_COMPILE_UNIT_HEADER_SIZE;
7198   calc_die_sizes (die);
7199
7200   oldsym = die->die_symbol;
7201   if (oldsym)
7202     {
7203       tmp = alloca (strlen (oldsym) + 24);
7204
7205       sprintf (tmp, ".gnu.linkonce.wi.%s", oldsym);
7206       secname = tmp;
7207       die->die_symbol = NULL;
7208       switch_to_section (get_section (secname, SECTION_DEBUG, NULL));
7209     }
7210   else
7211     switch_to_section (debug_info_section);
7212
7213   /* Output debugging information.  */
7214   output_compilation_unit_header ();
7215   output_die (die);
7216
7217   /* Leave the marks on the main CU, so we can check them in
7218      output_pubnames.  */
7219   if (oldsym)
7220     {
7221       unmark_dies (die);
7222       die->die_symbol = oldsym;
7223     }
7224 }
7225
7226 /* The DWARF2 pubname for a nested thingy looks like "A::f".  The
7227    output of lang_hooks.decl_printable_name for C++ looks like
7228    "A::f(int)".  Let's drop the argument list, and maybe the scope.  */
7229
7230 static const char *
7231 dwarf2_name (tree decl, int scope)
7232 {
7233   return lang_hooks.decl_printable_name (decl, scope ? 1 : 0);
7234 }
7235
7236 /* Add a new entry to .debug_pubnames if appropriate.  */
7237
7238 static void
7239 add_pubname (tree decl, dw_die_ref die)
7240 {
7241   pubname_ref p;
7242
7243   if (! TREE_PUBLIC (decl))
7244     return;
7245
7246   if (pubname_table_in_use == pubname_table_allocated)
7247     {
7248       pubname_table_allocated += PUBNAME_TABLE_INCREMENT;
7249       pubname_table
7250         = ggc_realloc (pubname_table,
7251                        (pubname_table_allocated * sizeof (pubname_entry)));
7252       memset (pubname_table + pubname_table_in_use, 0,
7253               PUBNAME_TABLE_INCREMENT * sizeof (pubname_entry));
7254     }
7255
7256   p = &pubname_table[pubname_table_in_use++];
7257   p->die = die;
7258   p->name = xstrdup (dwarf2_name (decl, 1));
7259 }
7260
7261 /* Output the public names table used to speed up access to externally
7262    visible names.  For now, only generate entries for externally
7263    visible procedures.  */
7264
7265 static void
7266 output_pubnames (void)
7267 {
7268   unsigned i;
7269   unsigned long pubnames_length = size_of_pubnames ();
7270
7271   if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
7272     dw2_asm_output_data (4, 0xffffffff,
7273       "Initial length escape value indicating 64-bit DWARF extension");
7274   dw2_asm_output_data (DWARF_OFFSET_SIZE, pubnames_length,
7275                        "Length of Public Names Info");
7276   dw2_asm_output_data (2, DWARF_VERSION, "DWARF Version");
7277   dw2_asm_output_offset (DWARF_OFFSET_SIZE, debug_info_section_label,
7278                          "Offset of Compilation Unit Info");
7279   dw2_asm_output_data (DWARF_OFFSET_SIZE, next_die_offset,
7280                        "Compilation Unit Length");
7281
7282   for (i = 0; i < pubname_table_in_use; i++)
7283     {
7284       pubname_ref pub = &pubname_table[i];
7285
7286       /* We shouldn't see pubnames for DIEs outside of the main CU.  */
7287       gcc_assert (pub->die->die_mark);
7288
7289       dw2_asm_output_data (DWARF_OFFSET_SIZE, pub->die->die_offset,
7290                            "DIE offset");
7291
7292       dw2_asm_output_nstring (pub->name, -1, "external name");
7293     }
7294
7295   dw2_asm_output_data (DWARF_OFFSET_SIZE, 0, NULL);
7296 }
7297
7298 /* Add a new entry to .debug_aranges if appropriate.  */
7299
7300 static void
7301 add_arange (tree decl, dw_die_ref die)
7302 {
7303   if (! DECL_SECTION_NAME (decl))
7304     return;
7305
7306   if (arange_table_in_use == arange_table_allocated)
7307     {
7308       arange_table_allocated += ARANGE_TABLE_INCREMENT;
7309       arange_table = ggc_realloc (arange_table,
7310                                   (arange_table_allocated
7311                                    * sizeof (dw_die_ref)));
7312       memset (arange_table + arange_table_in_use, 0,
7313               ARANGE_TABLE_INCREMENT * sizeof (dw_die_ref));
7314     }
7315
7316   arange_table[arange_table_in_use++] = die;
7317 }
7318
7319 /* Output the information that goes into the .debug_aranges table.
7320    Namely, define the beginning and ending address range of the
7321    text section generated for this compilation unit.  */
7322
7323 static void
7324 output_aranges (void)
7325 {
7326   unsigned i;
7327   unsigned long aranges_length = size_of_aranges ();
7328
7329   if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
7330     dw2_asm_output_data (4, 0xffffffff,
7331       "Initial length escape value indicating 64-bit DWARF extension");
7332   dw2_asm_output_data (DWARF_OFFSET_SIZE, aranges_length,
7333                        "Length of Address Ranges Info");
7334   dw2_asm_output_data (2, DWARF_VERSION, "DWARF Version");
7335   dw2_asm_output_offset (DWARF_OFFSET_SIZE, debug_info_section_label,
7336                          "Offset of Compilation Unit Info");
7337   dw2_asm_output_data (1, DWARF2_ADDR_SIZE, "Size of Address");
7338   dw2_asm_output_data (1, 0, "Size of Segment Descriptor");
7339
7340   /* We need to align to twice the pointer size here.  */
7341   if (DWARF_ARANGES_PAD_SIZE)
7342     {
7343       /* Pad using a 2 byte words so that padding is correct for any
7344          pointer size.  */
7345       dw2_asm_output_data (2, 0, "Pad to %d byte boundary",
7346                            2 * DWARF2_ADDR_SIZE);
7347       for (i = 2; i < (unsigned) DWARF_ARANGES_PAD_SIZE; i += 2)
7348         dw2_asm_output_data (2, 0, NULL);
7349     }
7350
7351   dw2_asm_output_addr (DWARF2_ADDR_SIZE, text_section_label, "Address");
7352   dw2_asm_output_delta (DWARF2_ADDR_SIZE, text_end_label,
7353                         text_section_label, "Length");
7354   if (flag_reorder_blocks_and_partition)
7355     {
7356       dw2_asm_output_addr (DWARF2_ADDR_SIZE, cold_text_section_label, 
7357                            "Address");
7358       dw2_asm_output_delta (DWARF2_ADDR_SIZE, cold_end_label,
7359                             cold_text_section_label, "Length");
7360     }
7361
7362   for (i = 0; i < arange_table_in_use; i++)
7363     {
7364       dw_die_ref die = arange_table[i];
7365
7366       /* We shouldn't see aranges for DIEs outside of the main CU.  */
7367       gcc_assert (die->die_mark);
7368
7369       if (die->die_tag == DW_TAG_subprogram)
7370         {
7371           dw2_asm_output_addr (DWARF2_ADDR_SIZE, get_AT_low_pc (die),
7372                                "Address");
7373           dw2_asm_output_delta (DWARF2_ADDR_SIZE, get_AT_hi_pc (die),
7374                                 get_AT_low_pc (die), "Length");
7375         }
7376       else
7377         {
7378           /* A static variable; extract the symbol from DW_AT_location.
7379              Note that this code isn't currently hit, as we only emit
7380              aranges for functions (jason 9/23/99).  */
7381           dw_attr_ref a = get_AT (die, DW_AT_location);
7382           dw_loc_descr_ref loc;
7383
7384           gcc_assert (a && AT_class (a) == dw_val_class_loc);
7385
7386           loc = AT_loc (a);
7387           gcc_assert (loc->dw_loc_opc == DW_OP_addr);
7388
7389           dw2_asm_output_addr_rtx (DWARF2_ADDR_SIZE,
7390                                    loc->dw_loc_oprnd1.v.val_addr, "Address");
7391           dw2_asm_output_data (DWARF2_ADDR_SIZE,
7392                                get_AT_unsigned (die, DW_AT_byte_size),
7393                                "Length");
7394         }
7395     }
7396
7397   /* Output the terminator words.  */
7398   dw2_asm_output_data (DWARF2_ADDR_SIZE, 0, NULL);
7399   dw2_asm_output_data (DWARF2_ADDR_SIZE, 0, NULL);
7400 }
7401
7402 /* Add a new entry to .debug_ranges.  Return the offset at which it
7403    was placed.  */
7404
7405 static unsigned int
7406 add_ranges (tree block)
7407 {
7408   unsigned int in_use = ranges_table_in_use;
7409
7410   if (in_use == ranges_table_allocated)
7411     {
7412       ranges_table_allocated += RANGES_TABLE_INCREMENT;
7413       ranges_table
7414         = ggc_realloc (ranges_table, (ranges_table_allocated
7415                                       * sizeof (struct dw_ranges_struct)));
7416       memset (ranges_table + ranges_table_in_use, 0,
7417               RANGES_TABLE_INCREMENT * sizeof (struct dw_ranges_struct));
7418     }
7419
7420   ranges_table[in_use].block_num = (block ? BLOCK_NUMBER (block) : 0);
7421   ranges_table_in_use = in_use + 1;
7422
7423   return in_use * 2 * DWARF2_ADDR_SIZE;
7424 }
7425
7426 static void
7427 output_ranges (void)
7428 {
7429   unsigned i;
7430   static const char *const start_fmt = "Offset 0x%x";
7431   const char *fmt = start_fmt;
7432
7433   for (i = 0; i < ranges_table_in_use; i++)
7434     {
7435       int block_num = ranges_table[i].block_num;
7436
7437       if (block_num)
7438         {
7439           char blabel[MAX_ARTIFICIAL_LABEL_BYTES];
7440           char elabel[MAX_ARTIFICIAL_LABEL_BYTES];
7441
7442           ASM_GENERATE_INTERNAL_LABEL (blabel, BLOCK_BEGIN_LABEL, block_num);
7443           ASM_GENERATE_INTERNAL_LABEL (elabel, BLOCK_END_LABEL, block_num);
7444
7445           /* If all code is in the text section, then the compilation
7446              unit base address defaults to DW_AT_low_pc, which is the
7447              base of the text section.  */
7448           if (!separate_line_info_table_in_use && !have_switched_text_section)
7449             {
7450               dw2_asm_output_delta (DWARF2_ADDR_SIZE, blabel,
7451                                     text_section_label,
7452                                     fmt, i * 2 * DWARF2_ADDR_SIZE);
7453               dw2_asm_output_delta (DWARF2_ADDR_SIZE, elabel,
7454                                     text_section_label, NULL);
7455             }
7456
7457           /* Otherwise, we add a DW_AT_entry_pc attribute to force the
7458              compilation unit base address to zero, which allows us to
7459              use absolute addresses, and not worry about whether the
7460              target supports cross-section arithmetic.  */
7461           else
7462             {
7463               dw2_asm_output_addr (DWARF2_ADDR_SIZE, blabel,
7464                                    fmt, i * 2 * DWARF2_ADDR_SIZE);
7465               dw2_asm_output_addr (DWARF2_ADDR_SIZE, elabel, NULL);
7466             }
7467
7468           fmt = NULL;
7469         }
7470       else
7471         {
7472           dw2_asm_output_data (DWARF2_ADDR_SIZE, 0, NULL);
7473           dw2_asm_output_data (DWARF2_ADDR_SIZE, 0, NULL);
7474           fmt = start_fmt;
7475         }
7476     }
7477 }
7478
7479 /* Data structure containing information about input files.  */
7480 struct file_info
7481 {
7482   char *path;           /* Complete file name.  */
7483   char *fname;          /* File name part.  */
7484   int length;           /* Length of entire string.  */
7485   int file_idx;         /* Index in input file table.  */
7486   int dir_idx;          /* Index in directory table.  */
7487 };
7488
7489 /* Data structure containing information about directories with source
7490    files.  */
7491 struct dir_info
7492 {
7493   char *path;           /* Path including directory name.  */
7494   int length;           /* Path length.  */
7495   int prefix;           /* Index of directory entry which is a prefix.  */
7496   int count;            /* Number of files in this directory.  */
7497   int dir_idx;          /* Index of directory used as base.  */
7498   int used;             /* Used in the end?  */
7499 };
7500
7501 /* Callback function for file_info comparison.  We sort by looking at
7502    the directories in the path.  */
7503
7504 static int
7505 file_info_cmp (const void *p1, const void *p2)
7506 {
7507   const struct file_info *s1 = p1;
7508   const struct file_info *s2 = p2;
7509   unsigned char *cp1;
7510   unsigned char *cp2;
7511
7512   /* Take care of file names without directories.  We need to make sure that
7513      we return consistent values to qsort since some will get confused if
7514      we return the same value when identical operands are passed in opposite
7515      orders.  So if neither has a directory, return 0 and otherwise return
7516      1 or -1 depending on which one has the directory.  */
7517   if ((s1->path == s1->fname || s2->path == s2->fname))
7518     return (s2->path == s2->fname) - (s1->path == s1->fname);
7519
7520   cp1 = (unsigned char *) s1->path;
7521   cp2 = (unsigned char *) s2->path;
7522
7523   while (1)
7524     {
7525       ++cp1;
7526       ++cp2;
7527       /* Reached the end of the first path?  If so, handle like above.  */
7528       if ((cp1 == (unsigned char *) s1->fname)
7529           || (cp2 == (unsigned char *) s2->fname))
7530         return ((cp2 == (unsigned char *) s2->fname)
7531                 - (cp1 == (unsigned char *) s1->fname));
7532
7533       /* Character of current path component the same?  */
7534       else if (*cp1 != *cp2)
7535         return *cp1 - *cp2;
7536     }
7537 }
7538
7539 /* Output the directory table and the file name table.  We try to minimize
7540    the total amount of memory needed.  A heuristic is used to avoid large
7541    slowdowns with many input files.  */
7542
7543 static void
7544 output_file_names (void)
7545 {
7546   struct file_info *files;
7547   struct dir_info *dirs;
7548   int *saved;
7549   int *savehere;
7550   int *backmap;
7551   size_t ndirs;
7552   int idx_offset;
7553   size_t i;
7554   int idx;
7555
7556   /* Handle the case where file_table is empty.  */
7557   if (VARRAY_ACTIVE_SIZE (file_table) <= 1)
7558     {
7559       dw2_asm_output_data (1, 0, "End directory table");
7560       dw2_asm_output_data (1, 0, "End file name table");
7561       return;
7562     }
7563
7564   /* Allocate the various arrays we need.  */
7565   files = alloca (VARRAY_ACTIVE_SIZE (file_table) * sizeof (struct file_info));
7566   dirs = alloca (VARRAY_ACTIVE_SIZE (file_table) * sizeof (struct dir_info));
7567
7568   /* Sort the file names.  */
7569   for (i = 1; i < VARRAY_ACTIVE_SIZE (file_table); i++)
7570     {
7571       char *f;
7572
7573       /* Skip all leading "./".  */
7574       f = VARRAY_CHAR_PTR (file_table, i);
7575       while (f[0] == '.' && f[1] == '/')
7576         f += 2;
7577
7578       /* Create a new array entry.  */
7579       files[i].path = f;
7580       files[i].length = strlen (f);
7581       files[i].file_idx = i;
7582
7583       /* Search for the file name part.  */
7584       f = strrchr (f, '/');
7585       files[i].fname = f == NULL ? files[i].path : f + 1;
7586     }
7587
7588   qsort (files + 1, VARRAY_ACTIVE_SIZE (file_table) - 1,
7589          sizeof (files[0]), file_info_cmp);
7590
7591   /* Find all the different directories used.  */
7592   dirs[0].path = files[1].path;
7593   dirs[0].length = files[1].fname - files[1].path;
7594   dirs[0].prefix = -1;
7595   dirs[0].count = 1;
7596   dirs[0].dir_idx = 0;
7597   dirs[0].used = 0;
7598   files[1].dir_idx = 0;
7599   ndirs = 1;
7600
7601   for (i = 2; i < VARRAY_ACTIVE_SIZE (file_table); i++)
7602     if (files[i].fname - files[i].path == dirs[ndirs - 1].length
7603         && memcmp (dirs[ndirs - 1].path, files[i].path,
7604                    dirs[ndirs - 1].length) == 0)
7605       {
7606         /* Same directory as last entry.  */
7607         files[i].dir_idx = ndirs - 1;
7608         ++dirs[ndirs - 1].count;
7609       }
7610     else
7611       {
7612         size_t j;
7613
7614         /* This is a new directory.  */
7615         dirs[ndirs].path = files[i].path;
7616         dirs[ndirs].length = files[i].fname - files[i].path;
7617         dirs[ndirs].count = 1;
7618         dirs[ndirs].dir_idx = ndirs;
7619         dirs[ndirs].used = 0;
7620         files[i].dir_idx = ndirs;
7621
7622         /* Search for a prefix.  */
7623         dirs[ndirs].prefix = -1;
7624         for (j = 0; j < ndirs; j++)
7625           if (dirs[j].length < dirs[ndirs].length
7626               && dirs[j].length > 1
7627               && (dirs[ndirs].prefix == -1
7628                   || dirs[j].length > dirs[dirs[ndirs].prefix].length)
7629               && memcmp (dirs[j].path, dirs[ndirs].path, dirs[j].length) == 0)
7630             dirs[ndirs].prefix = j;
7631
7632         ++ndirs;
7633       }
7634
7635   /* Now to the actual work.  We have to find a subset of the directories which
7636      allow expressing the file name using references to the directory table
7637      with the least amount of characters.  We do not do an exhaustive search
7638      where we would have to check out every combination of every single
7639      possible prefix.  Instead we use a heuristic which provides nearly optimal
7640      results in most cases and never is much off.  */
7641   saved = alloca (ndirs * sizeof (int));
7642   savehere = alloca (ndirs * sizeof (int));
7643
7644   memset (saved, '\0', ndirs * sizeof (saved[0]));
7645   for (i = 0; i < ndirs; i++)
7646     {
7647       size_t j;
7648       int total;
7649
7650       /* We can always save some space for the current directory.  But this
7651          does not mean it will be enough to justify adding the directory.  */
7652       savehere[i] = dirs[i].length;
7653       total = (savehere[i] - saved[i]) * dirs[i].count;
7654
7655       for (j = i + 1; j < ndirs; j++)
7656         {
7657           savehere[j] = 0;
7658           if (saved[j] < dirs[i].length)
7659             {
7660               /* Determine whether the dirs[i] path is a prefix of the
7661                  dirs[j] path.  */
7662               int k;
7663
7664               k = dirs[j].prefix;
7665               while (k != -1 && k != (int) i)
7666                 k = dirs[k].prefix;
7667
7668               if (k == (int) i)
7669                 {
7670                   /* Yes it is.  We can possibly safe some memory but
7671                      writing the filenames in dirs[j] relative to
7672                      dirs[i].  */
7673                   savehere[j] = dirs[i].length;
7674                   total += (savehere[j] - saved[j]) * dirs[j].count;
7675                 }
7676             }
7677         }
7678
7679       /* Check whether we can safe enough to justify adding the dirs[i]
7680          directory.  */
7681       if (total > dirs[i].length + 1)
7682         {
7683           /* It's worthwhile adding.  */
7684           for (j = i; j < ndirs; j++)
7685             if (savehere[j] > 0)
7686               {
7687                 /* Remember how much we saved for this directory so far.  */
7688                 saved[j] = savehere[j];
7689
7690                 /* Remember the prefix directory.  */
7691                 dirs[j].dir_idx = i;
7692               }
7693         }
7694     }
7695
7696   /* We have to emit them in the order they appear in the file_table array
7697      since the index is used in the debug info generation.  To do this
7698      efficiently we generate a back-mapping of the indices first.  */
7699   backmap = alloca (VARRAY_ACTIVE_SIZE (file_table) * sizeof (int));
7700   for (i = 1; i < VARRAY_ACTIVE_SIZE (file_table); i++)
7701     {
7702       backmap[files[i].file_idx] = i;
7703
7704       /* Mark this directory as used.  */
7705       dirs[dirs[files[i].dir_idx].dir_idx].used = 1;
7706     }
7707
7708   /* That was it.  We are ready to emit the information.  First emit the
7709      directory name table.  We have to make sure the first actually emitted
7710      directory name has index one; zero is reserved for the current working
7711      directory.  Make sure we do not confuse these indices with the one for the
7712      constructed table (even though most of the time they are identical).  */
7713   idx = 1;
7714   idx_offset = dirs[0].length > 0 ? 1 : 0;
7715   for (i = 1 - idx_offset; i < ndirs; i++)
7716     if (dirs[i].used != 0)
7717       {
7718         dirs[i].used = idx++;
7719         dw2_asm_output_nstring (dirs[i].path, dirs[i].length - 1,
7720                                 "Directory Entry: 0x%x", dirs[i].used);
7721       }
7722
7723   dw2_asm_output_data (1, 0, "End directory table");
7724
7725   /* Correct the index for the current working directory entry if it
7726      exists.  */
7727   if (idx_offset == 0)
7728     dirs[0].used = 0;
7729
7730   /* Now write all the file names.  */
7731   for (i = 1; i < VARRAY_ACTIVE_SIZE (file_table); i++)
7732     {
7733       int file_idx = backmap[i];
7734       int dir_idx = dirs[files[file_idx].dir_idx].dir_idx;
7735
7736       dw2_asm_output_nstring (files[file_idx].path + dirs[dir_idx].length, -1,
7737                               "File Entry: 0x%lx", (unsigned long) i);
7738
7739       /* Include directory index.  */
7740       dw2_asm_output_data_uleb128 (dirs[dir_idx].used, NULL);
7741
7742       /* Modification time.  */
7743       dw2_asm_output_data_uleb128 (0, NULL);
7744
7745       /* File length in bytes.  */
7746       dw2_asm_output_data_uleb128 (0, NULL);
7747     }
7748
7749   dw2_asm_output_data (1, 0, "End file name table");
7750 }
7751
7752
7753 /* Output the source line number correspondence information.  This
7754    information goes into the .debug_line section.  */
7755
7756 static void
7757 output_line_info (void)
7758 {
7759   char l1[20], l2[20], p1[20], p2[20];
7760   char line_label[MAX_ARTIFICIAL_LABEL_BYTES];
7761   char prev_line_label[MAX_ARTIFICIAL_LABEL_BYTES];
7762   unsigned opc;
7763   unsigned n_op_args;
7764   unsigned long lt_index;
7765   unsigned long current_line;
7766   long line_offset;
7767   long line_delta;
7768   unsigned long current_file;
7769   unsigned long function;
7770
7771   ASM_GENERATE_INTERNAL_LABEL (l1, LINE_NUMBER_BEGIN_LABEL, 0);
7772   ASM_GENERATE_INTERNAL_LABEL (l2, LINE_NUMBER_END_LABEL, 0);
7773   ASM_GENERATE_INTERNAL_LABEL (p1, LN_PROLOG_AS_LABEL, 0);
7774   ASM_GENERATE_INTERNAL_LABEL (p2, LN_PROLOG_END_LABEL, 0);
7775
7776   if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
7777     dw2_asm_output_data (4, 0xffffffff,
7778       "Initial length escape value indicating 64-bit DWARF extension");
7779   dw2_asm_output_delta (DWARF_OFFSET_SIZE, l2, l1,
7780                         "Length of Source Line Info");
7781   ASM_OUTPUT_LABEL (asm_out_file, l1);
7782
7783   dw2_asm_output_data (2, DWARF_VERSION, "DWARF Version");
7784   dw2_asm_output_delta (DWARF_OFFSET_SIZE, p2, p1, "Prolog Length");
7785   ASM_OUTPUT_LABEL (asm_out_file, p1);
7786
7787   /* Define the architecture-dependent minimum instruction length (in
7788    bytes).  In this implementation of DWARF, this field is used for
7789    information purposes only.  Since GCC generates assembly language,
7790    we have no a priori knowledge of how many instruction bytes are
7791    generated for each source line, and therefore can use only the
7792    DW_LNE_set_address and DW_LNS_fixed_advance_pc line information
7793    commands.  Accordingly, we fix this as `1', which is "correct
7794    enough" for all architectures, and don't let the target override.  */
7795   dw2_asm_output_data (1, 1,
7796                        "Minimum Instruction Length");
7797
7798   dw2_asm_output_data (1, DWARF_LINE_DEFAULT_IS_STMT_START,
7799                        "Default is_stmt_start flag");
7800   dw2_asm_output_data (1, DWARF_LINE_BASE,
7801                        "Line Base Value (Special Opcodes)");
7802   dw2_asm_output_data (1, DWARF_LINE_RANGE,
7803                        "Line Range Value (Special Opcodes)");
7804   dw2_asm_output_data (1, DWARF_LINE_OPCODE_BASE,
7805                        "Special Opcode Base");
7806
7807   for (opc = 1; opc < DWARF_LINE_OPCODE_BASE; opc++)
7808     {
7809       switch (opc)
7810         {
7811         case DW_LNS_advance_pc:
7812         case DW_LNS_advance_line:
7813         case DW_LNS_set_file:
7814         case DW_LNS_set_column:
7815         case DW_LNS_fixed_advance_pc:
7816           n_op_args = 1;
7817           break;
7818         default:
7819           n_op_args = 0;
7820           break;
7821         }
7822
7823       dw2_asm_output_data (1, n_op_args, "opcode: 0x%x has %d args",
7824                            opc, n_op_args);
7825     }
7826
7827   /* Write out the information about the files we use.  */
7828   output_file_names ();
7829   ASM_OUTPUT_LABEL (asm_out_file, p2);
7830
7831   /* We used to set the address register to the first location in the text
7832      section here, but that didn't accomplish anything since we already
7833      have a line note for the opening brace of the first function.  */
7834
7835   /* Generate the line number to PC correspondence table, encoded as
7836      a series of state machine operations.  */
7837   current_file = 1;
7838   current_line = 1;
7839
7840   if (cfun && in_cold_section_p)
7841     strcpy (prev_line_label, cfun->cold_section_label);
7842   else
7843     strcpy (prev_line_label, text_section_label);
7844   for (lt_index = 1; lt_index < line_info_table_in_use; ++lt_index)
7845     {
7846       dw_line_info_ref line_info = &line_info_table[lt_index];
7847
7848 #if 0
7849       /* Disable this optimization for now; GDB wants to see two line notes
7850          at the beginning of a function so it can find the end of the
7851          prologue.  */
7852
7853       /* Don't emit anything for redundant notes.  Just updating the
7854          address doesn't accomplish anything, because we already assume
7855          that anything after the last address is this line.  */
7856       if (line_info->dw_line_num == current_line
7857           && line_info->dw_file_num == current_file)
7858         continue;
7859 #endif
7860
7861       /* Emit debug info for the address of the current line.
7862
7863          Unfortunately, we have little choice here currently, and must always
7864          use the most general form.  GCC does not know the address delta
7865          itself, so we can't use DW_LNS_advance_pc.  Many ports do have length
7866          attributes which will give an upper bound on the address range.  We
7867          could perhaps use length attributes to determine when it is safe to
7868          use DW_LNS_fixed_advance_pc.  */
7869
7870       ASM_GENERATE_INTERNAL_LABEL (line_label, LINE_CODE_LABEL, lt_index);
7871       if (0)
7872         {
7873           /* This can handle deltas up to 0xffff.  This takes 3 bytes.  */
7874           dw2_asm_output_data (1, DW_LNS_fixed_advance_pc,
7875                                "DW_LNS_fixed_advance_pc");
7876           dw2_asm_output_delta (2, line_label, prev_line_label, NULL);
7877         }
7878       else
7879         {
7880           /* This can handle any delta.  This takes
7881              4+DWARF2_ADDR_SIZE bytes.  */
7882           dw2_asm_output_data (1, 0, "DW_LNE_set_address");
7883           dw2_asm_output_data_uleb128 (1 + DWARF2_ADDR_SIZE, NULL);
7884           dw2_asm_output_data (1, DW_LNE_set_address, NULL);
7885           dw2_asm_output_addr (DWARF2_ADDR_SIZE, line_label, NULL);
7886         }
7887
7888       strcpy (prev_line_label, line_label);
7889
7890       /* Emit debug info for the source file of the current line, if
7891          different from the previous line.  */
7892       if (line_info->dw_file_num != current_file)
7893         {
7894           current_file = line_info->dw_file_num;
7895           dw2_asm_output_data (1, DW_LNS_set_file, "DW_LNS_set_file");
7896           dw2_asm_output_data_uleb128 (current_file, "(\"%s\")",
7897                                        VARRAY_CHAR_PTR (file_table,
7898                                                         current_file));
7899         }
7900
7901       /* Emit debug info for the current line number, choosing the encoding
7902          that uses the least amount of space.  */
7903       if (line_info->dw_line_num != current_line)
7904         {
7905           line_offset = line_info->dw_line_num - current_line;
7906           line_delta = line_offset - DWARF_LINE_BASE;
7907           current_line = line_info->dw_line_num;
7908           if (line_delta >= 0 && line_delta < (DWARF_LINE_RANGE - 1))
7909             /* This can handle deltas from -10 to 234, using the current
7910                definitions of DWARF_LINE_BASE and DWARF_LINE_RANGE.  This
7911                takes 1 byte.  */
7912             dw2_asm_output_data (1, DWARF_LINE_OPCODE_BASE + line_delta,
7913                                  "line %lu", current_line);
7914           else
7915             {
7916               /* This can handle any delta.  This takes at least 4 bytes,
7917                  depending on the value being encoded.  */
7918               dw2_asm_output_data (1, DW_LNS_advance_line,
7919                                    "advance to line %lu", current_line);
7920               dw2_asm_output_data_sleb128 (line_offset, NULL);
7921               dw2_asm_output_data (1, DW_LNS_copy, "DW_LNS_copy");
7922             }
7923         }
7924       else
7925         /* We still need to start a new row, so output a copy insn.  */
7926         dw2_asm_output_data (1, DW_LNS_copy, "DW_LNS_copy");
7927     }
7928
7929   /* Emit debug info for the address of the end of the function.  */
7930   if (0)
7931     {
7932       dw2_asm_output_data (1, DW_LNS_fixed_advance_pc,
7933                            "DW_LNS_fixed_advance_pc");
7934       dw2_asm_output_delta (2, text_end_label, prev_line_label, NULL);
7935     }
7936   else
7937     {
7938       dw2_asm_output_data (1, 0, "DW_LNE_set_address");
7939       dw2_asm_output_data_uleb128 (1 + DWARF2_ADDR_SIZE, NULL);
7940       dw2_asm_output_data (1, DW_LNE_set_address, NULL);
7941       dw2_asm_output_addr (DWARF2_ADDR_SIZE, text_end_label, NULL);
7942     }
7943
7944   dw2_asm_output_data (1, 0, "DW_LNE_end_sequence");
7945   dw2_asm_output_data_uleb128 (1, NULL);
7946   dw2_asm_output_data (1, DW_LNE_end_sequence, NULL);
7947
7948   function = 0;
7949   current_file = 1;
7950   current_line = 1;
7951   for (lt_index = 0; lt_index < separate_line_info_table_in_use;)
7952     {
7953       dw_separate_line_info_ref line_info
7954         = &separate_line_info_table[lt_index];
7955
7956 #if 0
7957       /* Don't emit anything for redundant notes.  */
7958       if (line_info->dw_line_num == current_line
7959           && line_info->dw_file_num == current_file
7960           && line_info->function == function)
7961         goto cont;
7962 #endif
7963
7964       /* Emit debug info for the address of the current line.  If this is
7965          a new function, or the first line of a function, then we need
7966          to handle it differently.  */
7967       ASM_GENERATE_INTERNAL_LABEL (line_label, SEPARATE_LINE_CODE_LABEL,
7968                                    lt_index);
7969       if (function != line_info->function)
7970         {
7971           function = line_info->function;
7972
7973           /* Set the address register to the first line in the function.  */
7974           dw2_asm_output_data (1, 0, "DW_LNE_set_address");
7975           dw2_asm_output_data_uleb128 (1 + DWARF2_ADDR_SIZE, NULL);
7976           dw2_asm_output_data (1, DW_LNE_set_address, NULL);
7977           dw2_asm_output_addr (DWARF2_ADDR_SIZE, line_label, NULL);
7978         }
7979       else
7980         {
7981           /* ??? See the DW_LNS_advance_pc comment above.  */
7982           if (0)
7983             {
7984               dw2_asm_output_data (1, DW_LNS_fixed_advance_pc,
7985                                    "DW_LNS_fixed_advance_pc");
7986               dw2_asm_output_delta (2, line_label, prev_line_label, NULL);
7987             }
7988           else
7989             {
7990               dw2_asm_output_data (1, 0, "DW_LNE_set_address");
7991               dw2_asm_output_data_uleb128 (1 + DWARF2_ADDR_SIZE, NULL);
7992               dw2_asm_output_data (1, DW_LNE_set_address, NULL);
7993               dw2_asm_output_addr (DWARF2_ADDR_SIZE, line_label, NULL);
7994             }
7995         }
7996
7997       strcpy (prev_line_label, line_label);
7998
7999       /* Emit debug info for the source file of the current line, if
8000          different from the previous line.  */
8001       if (line_info->dw_file_num != current_file)
8002         {
8003           current_file = line_info->dw_file_num;
8004           dw2_asm_output_data (1, DW_LNS_set_file, "DW_LNS_set_file");
8005           dw2_asm_output_data_uleb128 (current_file, "(\"%s\")",
8006                                        VARRAY_CHAR_PTR (file_table,
8007                                                         current_file));
8008         }
8009
8010       /* Emit debug info for the current line number, choosing the encoding
8011          that uses the least amount of space.  */
8012       if (line_info->dw_line_num != current_line)
8013         {
8014           line_offset = line_info->dw_line_num - current_line;
8015           line_delta = line_offset - DWARF_LINE_BASE;
8016           current_line = line_info->dw_line_num;
8017           if (line_delta >= 0 && line_delta < (DWARF_LINE_RANGE - 1))
8018             dw2_asm_output_data (1, DWARF_LINE_OPCODE_BASE + line_delta,
8019                                  "line %lu", current_line);
8020           else
8021             {
8022               dw2_asm_output_data (1, DW_LNS_advance_line,
8023                                    "advance to line %lu", current_line);
8024               dw2_asm_output_data_sleb128 (line_offset, NULL);
8025               dw2_asm_output_data (1, DW_LNS_copy, "DW_LNS_copy");
8026             }
8027         }
8028       else
8029         dw2_asm_output_data (1, DW_LNS_copy, "DW_LNS_copy");
8030
8031 #if 0
8032     cont:
8033 #endif
8034
8035       lt_index++;
8036
8037       /* If we're done with a function, end its sequence.  */
8038       if (lt_index == separate_line_info_table_in_use
8039           || separate_line_info_table[lt_index].function != function)
8040         {
8041           current_file = 1;
8042           current_line = 1;
8043
8044           /* Emit debug info for the address of the end of the function.  */
8045           ASM_GENERATE_INTERNAL_LABEL (line_label, FUNC_END_LABEL, function);
8046           if (0)
8047             {
8048               dw2_asm_output_data (1, DW_LNS_fixed_advance_pc,
8049                                    "DW_LNS_fixed_advance_pc");
8050               dw2_asm_output_delta (2, line_label, prev_line_label, NULL);
8051             }
8052           else
8053             {
8054               dw2_asm_output_data (1, 0, "DW_LNE_set_address");
8055               dw2_asm_output_data_uleb128 (1 + DWARF2_ADDR_SIZE, NULL);
8056               dw2_asm_output_data (1, DW_LNE_set_address, NULL);
8057               dw2_asm_output_addr (DWARF2_ADDR_SIZE, line_label, NULL);
8058             }
8059
8060           /* Output the marker for the end of this sequence.  */
8061           dw2_asm_output_data (1, 0, "DW_LNE_end_sequence");
8062           dw2_asm_output_data_uleb128 (1, NULL);
8063           dw2_asm_output_data (1, DW_LNE_end_sequence, NULL);
8064         }
8065     }
8066
8067   /* Output the marker for the end of the line number info.  */
8068   ASM_OUTPUT_LABEL (asm_out_file, l2);
8069 }
8070 \f
8071 /* Given a pointer to a tree node for some base type, return a pointer to
8072    a DIE that describes the given type.
8073
8074    This routine must only be called for GCC type nodes that correspond to
8075    Dwarf base (fundamental) types.  */
8076
8077 static dw_die_ref
8078 base_type_die (tree type)
8079 {
8080   dw_die_ref base_type_result;
8081   const char *type_name;
8082   enum dwarf_type encoding;
8083   tree name = TYPE_NAME (type);
8084
8085   if (TREE_CODE (type) == ERROR_MARK || TREE_CODE (type) == VOID_TYPE)
8086     return 0;
8087
8088   if (name)
8089     {
8090       if (TREE_CODE (name) == TYPE_DECL)
8091         name = DECL_NAME (name);
8092
8093       type_name = IDENTIFIER_POINTER (name);
8094     }
8095   else
8096     type_name = "__unknown__";
8097
8098   switch (TREE_CODE (type))
8099     {
8100     case INTEGER_TYPE:
8101       /* Carefully distinguish the C character types, without messing
8102          up if the language is not C. Note that we check only for the names
8103          that contain spaces; other names might occur by coincidence in other
8104          languages.  */
8105       if (! (TYPE_PRECISION (type) == CHAR_TYPE_SIZE
8106              && (TYPE_MAIN_VARIANT (type) == char_type_node
8107                  || ! strcmp (type_name, "signed char")
8108                  || ! strcmp (type_name, "unsigned char"))))
8109         {
8110           if (TYPE_UNSIGNED (type))
8111             encoding = DW_ATE_unsigned;
8112           else
8113             encoding = DW_ATE_signed;
8114           break;
8115         }
8116       /* else fall through.  */
8117
8118     case CHAR_TYPE:
8119       /* GNU Pascal/Ada CHAR type.  Not used in C.  */
8120       if (TYPE_UNSIGNED (type))
8121         encoding = DW_ATE_unsigned_char;
8122       else
8123         encoding = DW_ATE_signed_char;
8124       break;
8125
8126     case REAL_TYPE:
8127       encoding = DW_ATE_float;
8128       break;
8129
8130       /* Dwarf2 doesn't know anything about complex ints, so use
8131          a user defined type for it.  */
8132     case COMPLEX_TYPE:
8133       if (TREE_CODE (TREE_TYPE (type)) == REAL_TYPE)
8134         encoding = DW_ATE_complex_float;
8135       else
8136         encoding = DW_ATE_lo_user;
8137       break;
8138
8139     case BOOLEAN_TYPE:
8140       /* GNU FORTRAN/Ada/C++ BOOLEAN type.  */
8141       encoding = DW_ATE_boolean;
8142       break;
8143
8144     default:
8145       /* No other TREE_CODEs are Dwarf fundamental types.  */
8146       gcc_unreachable ();
8147     }
8148
8149   base_type_result = new_die (DW_TAG_base_type, comp_unit_die, type);
8150   if (demangle_name_func)
8151     type_name = (*demangle_name_func) (type_name);
8152
8153   add_AT_string (base_type_result, DW_AT_name, type_name);
8154   add_AT_unsigned (base_type_result, DW_AT_byte_size,
8155                    int_size_in_bytes (type));
8156   add_AT_unsigned (base_type_result, DW_AT_encoding, encoding);
8157
8158   return base_type_result;
8159 }
8160
8161 /* Given a pointer to an arbitrary ..._TYPE tree node, return a pointer to
8162    the Dwarf "root" type for the given input type.  The Dwarf "root" type of
8163    a given type is generally the same as the given type, except that if the
8164    given type is a pointer or reference type, then the root type of the given
8165    type is the root type of the "basis" type for the pointer or reference
8166    type.  (This definition of the "root" type is recursive.) Also, the root
8167    type of a `const' qualified type or a `volatile' qualified type is the
8168    root type of the given type without the qualifiers.  */
8169
8170 static tree
8171 root_type (tree type)
8172 {
8173   if (TREE_CODE (type) == ERROR_MARK)
8174     return error_mark_node;
8175
8176   switch (TREE_CODE (type))
8177     {
8178     case ERROR_MARK:
8179       return error_mark_node;
8180
8181     case POINTER_TYPE:
8182     case REFERENCE_TYPE:
8183       return type_main_variant (root_type (TREE_TYPE (type)));
8184
8185     default:
8186       return type_main_variant (type);
8187     }
8188 }
8189
8190 /* Given a pointer to an arbitrary ..._TYPE tree node, return nonzero if the
8191    given input type is a Dwarf "fundamental" type.  Otherwise return null.  */
8192
8193 static inline int
8194 is_base_type (tree type)
8195 {
8196   switch (TREE_CODE (type))
8197     {
8198     case ERROR_MARK:
8199     case VOID_TYPE:
8200     case INTEGER_TYPE:
8201     case REAL_TYPE:
8202     case COMPLEX_TYPE:
8203     case BOOLEAN_TYPE:
8204     case CHAR_TYPE:
8205       return 1;
8206
8207     case ARRAY_TYPE:
8208     case RECORD_TYPE:
8209     case UNION_TYPE:
8210     case QUAL_UNION_TYPE:
8211     case ENUMERAL_TYPE:
8212     case FUNCTION_TYPE:
8213     case METHOD_TYPE:
8214     case POINTER_TYPE:
8215     case REFERENCE_TYPE:
8216     case OFFSET_TYPE:
8217     case LANG_TYPE:
8218     case VECTOR_TYPE:
8219       return 0;
8220
8221     default:
8222       gcc_unreachable ();
8223     }
8224
8225   return 0;
8226 }
8227
8228 /* Given a pointer to a tree node, assumed to be some kind of a ..._TYPE
8229    node, return the size in bits for the type if it is a constant, or else
8230    return the alignment for the type if the type's size is not constant, or
8231    else return BITS_PER_WORD if the type actually turns out to be an
8232    ERROR_MARK node.  */
8233
8234 static inline unsigned HOST_WIDE_INT
8235 simple_type_size_in_bits (tree type)
8236 {
8237   if (TREE_CODE (type) == ERROR_MARK)
8238     return BITS_PER_WORD;
8239   else if (TYPE_SIZE (type) == NULL_TREE)
8240     return 0;
8241   else if (host_integerp (TYPE_SIZE (type), 1))
8242     return tree_low_cst (TYPE_SIZE (type), 1);
8243   else
8244     return TYPE_ALIGN (type);
8245 }
8246
8247 /* Return true if the debug information for the given type should be
8248    emitted as a subrange type.  */
8249
8250 static inline bool
8251 is_subrange_type (tree type)
8252 {
8253   tree subtype = TREE_TYPE (type);
8254
8255   /* Subrange types are identified by the fact that they are integer
8256      types, and that they have a subtype which is either an integer type
8257      or an enumeral type.  */
8258
8259   if (TREE_CODE (type) != INTEGER_TYPE
8260       || subtype == NULL_TREE)
8261     return false;
8262
8263   if (TREE_CODE (subtype) != INTEGER_TYPE
8264       && TREE_CODE (subtype) != ENUMERAL_TYPE)
8265     return false;
8266
8267   if (TREE_CODE (type) == TREE_CODE (subtype)
8268       && int_size_in_bytes (type) == int_size_in_bytes (subtype)
8269       && TYPE_MIN_VALUE (type) != NULL
8270       && TYPE_MIN_VALUE (subtype) != NULL
8271       && tree_int_cst_equal (TYPE_MIN_VALUE (type), TYPE_MIN_VALUE (subtype))
8272       && TYPE_MAX_VALUE (type) != NULL
8273       && TYPE_MAX_VALUE (subtype) != NULL
8274       && tree_int_cst_equal (TYPE_MAX_VALUE (type), TYPE_MAX_VALUE (subtype)))
8275     {
8276       /* The type and its subtype have the same representation.  If in
8277          addition the two types also have the same name, then the given
8278          type is not a subrange type, but rather a plain base type.  */
8279       /* FIXME: brobecker/2004-03-22:
8280          Sizetype INTEGER_CSTs nodes are canonicalized.  It should
8281          therefore be sufficient to check the TYPE_SIZE node pointers
8282          rather than checking the actual size.  Unfortunately, we have
8283          found some cases, such as in the Ada "integer" type, where
8284          this is not the case.  Until this problem is solved, we need to
8285          keep checking the actual size.  */
8286       tree type_name = TYPE_NAME (type);
8287       tree subtype_name = TYPE_NAME (subtype);
8288
8289       if (type_name != NULL && TREE_CODE (type_name) == TYPE_DECL)
8290         type_name = DECL_NAME (type_name);
8291
8292       if (subtype_name != NULL && TREE_CODE (subtype_name) == TYPE_DECL)
8293         subtype_name = DECL_NAME (subtype_name);
8294
8295       if (type_name == subtype_name)
8296         return false;
8297     }
8298
8299   return true;
8300 }
8301
8302 /*  Given a pointer to a tree node for a subrange type, return a pointer
8303     to a DIE that describes the given type.  */
8304
8305 static dw_die_ref
8306 subrange_type_die (tree type, dw_die_ref context_die)
8307 {
8308   dw_die_ref subtype_die;
8309   dw_die_ref subrange_die;
8310   tree name = TYPE_NAME (type);
8311   const HOST_WIDE_INT size_in_bytes = int_size_in_bytes (type);
8312   tree subtype = TREE_TYPE (type);
8313
8314   if (context_die == NULL)
8315     context_die = comp_unit_die;
8316
8317   if (TREE_CODE (subtype) == ENUMERAL_TYPE)
8318     subtype_die = gen_enumeration_type_die (subtype, context_die);
8319   else
8320     subtype_die = base_type_die (subtype);
8321
8322   subrange_die = new_die (DW_TAG_subrange_type, context_die, type);
8323
8324   if (name != NULL)
8325     {
8326       if (TREE_CODE (name) == TYPE_DECL)
8327         name = DECL_NAME (name);
8328       add_name_attribute (subrange_die, IDENTIFIER_POINTER (name));
8329     }
8330
8331   if (int_size_in_bytes (subtype) != size_in_bytes)
8332     {
8333       /* The size of the subrange type and its base type do not match,
8334          so we need to generate a size attribute for the subrange type.  */
8335       add_AT_unsigned (subrange_die, DW_AT_byte_size, size_in_bytes);
8336     }
8337
8338   if (TYPE_MIN_VALUE (type) != NULL)
8339     add_bound_info (subrange_die, DW_AT_lower_bound,
8340                     TYPE_MIN_VALUE (type));
8341   if (TYPE_MAX_VALUE (type) != NULL)
8342     add_bound_info (subrange_die, DW_AT_upper_bound,
8343                     TYPE_MAX_VALUE (type));
8344   add_AT_die_ref (subrange_die, DW_AT_type, subtype_die);
8345
8346   return subrange_die;
8347 }
8348
8349 /* Given a pointer to an arbitrary ..._TYPE tree node, return a debugging
8350    entry that chains various modifiers in front of the given type.  */
8351
8352 static dw_die_ref
8353 modified_type_die (tree type, int is_const_type, int is_volatile_type,
8354                    dw_die_ref context_die)
8355 {
8356   enum tree_code code = TREE_CODE (type);
8357   dw_die_ref mod_type_die = NULL;
8358   dw_die_ref sub_die = NULL;
8359   tree item_type = NULL;
8360
8361   if (code != ERROR_MARK)
8362     {
8363       tree qualified_type;
8364
8365       /* See if we already have the appropriately qualified variant of
8366          this type.  */
8367       qualified_type
8368         = get_qualified_type (type,
8369                               ((is_const_type ? TYPE_QUAL_CONST : 0)
8370                                | (is_volatile_type
8371                                   ? TYPE_QUAL_VOLATILE : 0)));
8372
8373       /* If we do, then we can just use its DIE, if it exists.  */
8374       if (qualified_type)
8375         {
8376           mod_type_die = lookup_type_die (qualified_type);
8377           if (mod_type_die)
8378             return mod_type_die;
8379         }
8380
8381       /* Handle C typedef types.  */
8382       if (qualified_type && TYPE_NAME (qualified_type)
8383           && TREE_CODE (TYPE_NAME (qualified_type)) == TYPE_DECL
8384           && DECL_ORIGINAL_TYPE (TYPE_NAME (qualified_type)))
8385         {
8386           tree type_name = TYPE_NAME (qualified_type);
8387           tree dtype = TREE_TYPE (type_name);
8388
8389           if (qualified_type == dtype)
8390             {
8391               /* For a named type, use the typedef.  */
8392               gen_type_die (qualified_type, context_die);
8393               mod_type_die = lookup_type_die (qualified_type);
8394             }
8395           else if (is_const_type < TYPE_READONLY (dtype)
8396                    || is_volatile_type < TYPE_VOLATILE (dtype))
8397             /* cv-unqualified version of named type.  Just use the unnamed
8398                type to which it refers.  */
8399             mod_type_die
8400               = modified_type_die (DECL_ORIGINAL_TYPE (type_name),
8401                                    is_const_type, is_volatile_type,
8402                                    context_die);
8403
8404           /* Else cv-qualified version of named type; fall through.  */
8405         }
8406
8407       if (mod_type_die)
8408         /* OK.  */
8409         ;
8410       else if (is_const_type)
8411         {
8412           mod_type_die = new_die (DW_TAG_const_type, comp_unit_die, type);
8413           sub_die = modified_type_die (type, 0, is_volatile_type, context_die);
8414         }
8415       else if (is_volatile_type)
8416         {
8417           mod_type_die = new_die (DW_TAG_volatile_type, comp_unit_die, type);
8418           sub_die = modified_type_die (type, 0, 0, context_die);
8419         }
8420       else if (code == POINTER_TYPE)
8421         {
8422           mod_type_die = new_die (DW_TAG_pointer_type, comp_unit_die, type);
8423           add_AT_unsigned (mod_type_die, DW_AT_byte_size,
8424                            simple_type_size_in_bits (type) / BITS_PER_UNIT);
8425 #if 0
8426           add_AT_unsigned (mod_type_die, DW_AT_address_class, 0);
8427 #endif
8428           item_type = TREE_TYPE (type);
8429         }
8430       else if (code == REFERENCE_TYPE)
8431         {
8432           mod_type_die = new_die (DW_TAG_reference_type, comp_unit_die, type);
8433           add_AT_unsigned (mod_type_die, DW_AT_byte_size,
8434                            simple_type_size_in_bits (type) / BITS_PER_UNIT);
8435 #if 0
8436           add_AT_unsigned (mod_type_die, DW_AT_address_class, 0);
8437 #endif
8438           item_type = TREE_TYPE (type);
8439         }
8440       else if (is_subrange_type (type))
8441         mod_type_die = subrange_type_die (type, context_die);
8442       else if (is_base_type (type))
8443         mod_type_die = base_type_die (type);
8444       else
8445         {
8446           gen_type_die (type, context_die);
8447
8448           /* We have to get the type_main_variant here (and pass that to the
8449              `lookup_type_die' routine) because the ..._TYPE node we have
8450              might simply be a *copy* of some original type node (where the
8451              copy was created to help us keep track of typedef names) and
8452              that copy might have a different TYPE_UID from the original
8453              ..._TYPE node.  */
8454           if (TREE_CODE (type) != VECTOR_TYPE)
8455             mod_type_die = lookup_type_die (type_main_variant (type));
8456           else
8457             /* Vectors have the debugging information in the type,
8458                not the main variant.  */
8459             mod_type_die = lookup_type_die (type);
8460           gcc_assert (mod_type_die);
8461         }
8462
8463       /* We want to equate the qualified type to the die below.  */
8464       type = qualified_type;
8465     }
8466
8467   if (type)
8468     equate_type_number_to_die (type, mod_type_die);
8469   if (item_type)
8470     /* We must do this after the equate_type_number_to_die call, in case
8471        this is a recursive type.  This ensures that the modified_type_die
8472        recursion will terminate even if the type is recursive.  Recursive
8473        types are possible in Ada.  */
8474     sub_die = modified_type_die (item_type,
8475                                  TYPE_READONLY (item_type),
8476                                  TYPE_VOLATILE (item_type),
8477                                  context_die);
8478
8479   if (sub_die != NULL)
8480     add_AT_die_ref (mod_type_die, DW_AT_type, sub_die);
8481
8482   return mod_type_die;
8483 }
8484
8485 /* Given a pointer to an arbitrary ..._TYPE tree node, return true if it is
8486    an enumerated type.  */
8487
8488 static inline int
8489 type_is_enum (tree type)
8490 {
8491   return TREE_CODE (type) == ENUMERAL_TYPE;
8492 }
8493
8494 /* Return the DBX register number described by a given RTL node.  */
8495
8496 static unsigned int
8497 dbx_reg_number (rtx rtl)
8498 {
8499   unsigned regno = REGNO (rtl);
8500
8501   gcc_assert (regno < FIRST_PSEUDO_REGISTER);
8502
8503 #ifdef LEAF_REG_REMAP
8504   regno = LEAF_REG_REMAP (regno);
8505 #endif
8506
8507   return DBX_REGISTER_NUMBER (regno);
8508 }
8509
8510 /* Optionally add a DW_OP_piece term to a location description expression.
8511    DW_OP_piece is only added if the location description expression already
8512    doesn't end with DW_OP_piece.  */
8513
8514 static void
8515 add_loc_descr_op_piece (dw_loc_descr_ref *list_head, int size)
8516 {
8517   dw_loc_descr_ref loc;
8518
8519   if (*list_head != NULL)
8520     {
8521       /* Find the end of the chain.  */
8522       for (loc = *list_head; loc->dw_loc_next != NULL; loc = loc->dw_loc_next)
8523         ;
8524
8525       if (loc->dw_loc_opc != DW_OP_piece)
8526         loc->dw_loc_next = new_loc_descr (DW_OP_piece, size, 0);
8527     }
8528 }
8529
8530 /* Return a location descriptor that designates a machine register or
8531    zero if there is none.  */
8532
8533 static dw_loc_descr_ref
8534 reg_loc_descriptor (rtx rtl)
8535 {
8536   rtx regs;
8537
8538   if (REGNO (rtl) >= FIRST_PSEUDO_REGISTER)
8539     return 0;
8540
8541   regs = targetm.dwarf_register_span (rtl);
8542
8543   if (hard_regno_nregs[REGNO (rtl)][GET_MODE (rtl)] > 1 || regs)
8544     return multiple_reg_loc_descriptor (rtl, regs);
8545   else
8546     return one_reg_loc_descriptor (dbx_reg_number (rtl));
8547 }
8548
8549 /* Return a location descriptor that designates a machine register for
8550    a given hard register number.  */
8551
8552 static dw_loc_descr_ref
8553 one_reg_loc_descriptor (unsigned int regno)
8554 {
8555   if (regno <= 31)
8556     return new_loc_descr (DW_OP_reg0 + regno, 0, 0);
8557   else
8558     return new_loc_descr (DW_OP_regx, regno, 0);
8559 }
8560
8561 /* Given an RTL of a register, return a location descriptor that
8562    designates a value that spans more than one register.  */
8563
8564 static dw_loc_descr_ref
8565 multiple_reg_loc_descriptor (rtx rtl, rtx regs)
8566 {
8567   int nregs, size, i;
8568   unsigned reg;
8569   dw_loc_descr_ref loc_result = NULL;
8570
8571   reg = REGNO (rtl);
8572 #ifdef LEAF_REG_REMAP
8573   reg = LEAF_REG_REMAP (reg);
8574 #endif
8575   gcc_assert ((unsigned) DBX_REGISTER_NUMBER (reg) == dbx_reg_number (rtl));
8576   nregs = hard_regno_nregs[REGNO (rtl)][GET_MODE (rtl)];
8577
8578   /* Simple, contiguous registers.  */
8579   if (regs == NULL_RTX)
8580     {
8581       size = GET_MODE_SIZE (GET_MODE (rtl)) / nregs;
8582
8583       loc_result = NULL;
8584       while (nregs--)
8585         {
8586           dw_loc_descr_ref t;
8587
8588           t = one_reg_loc_descriptor (DBX_REGISTER_NUMBER (reg));
8589           add_loc_descr (&loc_result, t);
8590           add_loc_descr_op_piece (&loc_result, size);
8591           ++reg;
8592         }
8593       return loc_result;
8594     }
8595
8596   /* Now onto stupid register sets in non contiguous locations.  */
8597
8598   gcc_assert (GET_CODE (regs) == PARALLEL);
8599
8600   size = GET_MODE_SIZE (GET_MODE (XVECEXP (regs, 0, 0)));
8601   loc_result = NULL;
8602
8603   for (i = 0; i < XVECLEN (regs, 0); ++i)
8604     {
8605       dw_loc_descr_ref t;
8606
8607       t = one_reg_loc_descriptor (REGNO (XVECEXP (regs, 0, i)));
8608       add_loc_descr (&loc_result, t);
8609       size = GET_MODE_SIZE (GET_MODE (XVECEXP (regs, 0, 0)));
8610       add_loc_descr_op_piece (&loc_result, size);
8611     }
8612   return loc_result;
8613 }
8614
8615 /* Return a location descriptor that designates a constant.  */
8616
8617 static dw_loc_descr_ref
8618 int_loc_descriptor (HOST_WIDE_INT i)
8619 {
8620   enum dwarf_location_atom op;
8621
8622   /* Pick the smallest representation of a constant, rather than just
8623      defaulting to the LEB encoding.  */
8624   if (i >= 0)
8625     {
8626       if (i <= 31)
8627         op = DW_OP_lit0 + i;
8628       else if (i <= 0xff)
8629         op = DW_OP_const1u;
8630       else if (i <= 0xffff)
8631         op = DW_OP_const2u;
8632       else if (HOST_BITS_PER_WIDE_INT == 32
8633                || i <= 0xffffffff)
8634         op = DW_OP_const4u;
8635       else
8636         op = DW_OP_constu;
8637     }
8638   else
8639     {
8640       if (i >= -0x80)
8641         op = DW_OP_const1s;
8642       else if (i >= -0x8000)
8643         op = DW_OP_const2s;
8644       else if (HOST_BITS_PER_WIDE_INT == 32
8645                || i >= -0x80000000)
8646         op = DW_OP_const4s;
8647       else
8648         op = DW_OP_consts;
8649     }
8650
8651   return new_loc_descr (op, i, 0);
8652 }
8653
8654 /* Return a location descriptor that designates a base+offset location.  */
8655
8656 static dw_loc_descr_ref
8657 based_loc_descr (rtx reg, HOST_WIDE_INT offset)
8658 {
8659   unsigned int regno;
8660
8661   /* We only use "frame base" when we're sure we're talking about the
8662      post-prologue local stack frame.  We do this by *not* running
8663      register elimination until this point, and recognizing the special
8664      argument pointer and soft frame pointer rtx's.  */
8665   if (reg == arg_pointer_rtx || reg == frame_pointer_rtx)
8666     {
8667       rtx elim = eliminate_regs (reg, VOIDmode, NULL_RTX);
8668
8669       if (elim != reg)
8670         {
8671           if (GET_CODE (elim) == PLUS)
8672             {
8673               offset += INTVAL (XEXP (elim, 1));
8674               elim = XEXP (elim, 0);
8675             }
8676           gcc_assert (elim == (frame_pointer_needed ? hard_frame_pointer_rtx
8677                       : stack_pointer_rtx));
8678           offset += frame_pointer_cfa_offset;
8679
8680           return new_loc_descr (DW_OP_fbreg, offset, 0);
8681         }
8682     }
8683
8684   regno = dbx_reg_number (reg);
8685   if (regno <= 31)
8686     return new_loc_descr (DW_OP_breg0 + regno, offset, 0);
8687   else
8688     return new_loc_descr (DW_OP_bregx, regno, offset);
8689 }
8690
8691 /* Return true if this RTL expression describes a base+offset calculation.  */
8692
8693 static inline int
8694 is_based_loc (rtx rtl)
8695 {
8696   return (GET_CODE (rtl) == PLUS
8697           && ((REG_P (XEXP (rtl, 0))
8698                && REGNO (XEXP (rtl, 0)) < FIRST_PSEUDO_REGISTER
8699                && GET_CODE (XEXP (rtl, 1)) == CONST_INT)));
8700 }
8701
8702 /* The following routine converts the RTL for a variable or parameter
8703    (resident in memory) into an equivalent Dwarf representation of a
8704    mechanism for getting the address of that same variable onto the top of a
8705    hypothetical "address evaluation" stack.
8706
8707    When creating memory location descriptors, we are effectively transforming
8708    the RTL for a memory-resident object into its Dwarf postfix expression
8709    equivalent.  This routine recursively descends an RTL tree, turning
8710    it into Dwarf postfix code as it goes.
8711
8712    MODE is the mode of the memory reference, needed to handle some
8713    autoincrement addressing modes.
8714
8715    CAN_USE_FBREG is a flag whether we can use DW_AT_frame_base in the
8716    location list for RTL.
8717
8718    Return 0 if we can't represent the location.  */
8719
8720 static dw_loc_descr_ref
8721 mem_loc_descriptor (rtx rtl, enum machine_mode mode)
8722 {
8723   dw_loc_descr_ref mem_loc_result = NULL;
8724   enum dwarf_location_atom op;
8725
8726   /* Note that for a dynamically sized array, the location we will generate a
8727      description of here will be the lowest numbered location which is
8728      actually within the array.  That's *not* necessarily the same as the
8729      zeroth element of the array.  */
8730
8731   rtl = targetm.delegitimize_address (rtl);
8732
8733   switch (GET_CODE (rtl))
8734     {
8735     case POST_INC:
8736     case POST_DEC:
8737     case POST_MODIFY:
8738       /* POST_INC and POST_DEC can be handled just like a SUBREG.  So we
8739          just fall into the SUBREG code.  */
8740
8741       /* ... fall through ...  */
8742
8743     case SUBREG:
8744       /* The case of a subreg may arise when we have a local (register)
8745          variable or a formal (register) parameter which doesn't quite fill
8746          up an entire register.  For now, just assume that it is
8747          legitimate to make the Dwarf info refer to the whole register which
8748          contains the given subreg.  */
8749       rtl = XEXP (rtl, 0);
8750
8751       /* ... fall through ...  */
8752
8753     case REG:
8754       /* Whenever a register number forms a part of the description of the
8755          method for calculating the (dynamic) address of a memory resident
8756          object, DWARF rules require the register number be referred to as
8757          a "base register".  This distinction is not based in any way upon
8758          what category of register the hardware believes the given register
8759          belongs to.  This is strictly DWARF terminology we're dealing with
8760          here. Note that in cases where the location of a memory-resident
8761          data object could be expressed as: OP_ADD (OP_BASEREG (basereg),
8762          OP_CONST (0)) the actual DWARF location descriptor that we generate
8763          may just be OP_BASEREG (basereg).  This may look deceptively like
8764          the object in question was allocated to a register (rather than in
8765          memory) so DWARF consumers need to be aware of the subtle
8766          distinction between OP_REG and OP_BASEREG.  */
8767       if (REGNO (rtl) < FIRST_PSEUDO_REGISTER)
8768         mem_loc_result = based_loc_descr (rtl, 0);
8769       break;
8770
8771     case MEM:
8772       mem_loc_result = mem_loc_descriptor (XEXP (rtl, 0), GET_MODE (rtl));
8773       if (mem_loc_result != 0)
8774         add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_deref, 0, 0));
8775       break;
8776
8777     case LO_SUM:
8778          rtl = XEXP (rtl, 1);
8779
8780       /* ... fall through ...  */
8781
8782     case LABEL_REF:
8783       /* Some ports can transform a symbol ref into a label ref, because
8784          the symbol ref is too far away and has to be dumped into a constant
8785          pool.  */
8786     case CONST:
8787     case SYMBOL_REF:
8788       /* Alternatively, the symbol in the constant pool might be referenced
8789          by a different symbol.  */
8790       if (GET_CODE (rtl) == SYMBOL_REF && CONSTANT_POOL_ADDRESS_P (rtl))
8791         {
8792           bool marked;
8793           rtx tmp = get_pool_constant_mark (rtl, &marked);
8794
8795           if (GET_CODE (tmp) == SYMBOL_REF)
8796             {
8797               rtl = tmp;
8798               if (CONSTANT_POOL_ADDRESS_P (tmp))
8799                 get_pool_constant_mark (tmp, &marked);
8800               else
8801                 marked = true;
8802             }
8803
8804           /* If all references to this pool constant were optimized away,
8805              it was not output and thus we can't represent it.
8806              FIXME: might try to use DW_OP_const_value here, though
8807              DW_OP_piece complicates it.  */
8808           if (!marked)
8809             return 0;
8810         }
8811
8812       mem_loc_result = new_loc_descr (DW_OP_addr, 0, 0);
8813       mem_loc_result->dw_loc_oprnd1.val_class = dw_val_class_addr;
8814       mem_loc_result->dw_loc_oprnd1.v.val_addr = rtl;
8815       VEC_safe_push (rtx, gc, used_rtx_array, rtl);
8816       break;
8817
8818     case PRE_MODIFY:
8819       /* Extract the PLUS expression nested inside and fall into
8820          PLUS code below.  */
8821       rtl = XEXP (rtl, 1);
8822       goto plus;
8823
8824     case PRE_INC:
8825     case PRE_DEC:
8826       /* Turn these into a PLUS expression and fall into the PLUS code
8827          below.  */
8828       rtl = gen_rtx_PLUS (word_mode, XEXP (rtl, 0),
8829                           GEN_INT (GET_CODE (rtl) == PRE_INC
8830                                    ? GET_MODE_UNIT_SIZE (mode)
8831                                    : -GET_MODE_UNIT_SIZE (mode)));
8832
8833       /* ... fall through ...  */
8834
8835     case PLUS:
8836     plus:
8837       if (is_based_loc (rtl))
8838         mem_loc_result = based_loc_descr (XEXP (rtl, 0),
8839                                           INTVAL (XEXP (rtl, 1)));
8840       else
8841         {
8842           mem_loc_result = mem_loc_descriptor (XEXP (rtl, 0), mode);
8843           if (mem_loc_result == 0)
8844             break;
8845
8846           if (GET_CODE (XEXP (rtl, 1)) == CONST_INT
8847               && INTVAL (XEXP (rtl, 1)) >= 0)
8848             add_loc_descr (&mem_loc_result,
8849                            new_loc_descr (DW_OP_plus_uconst,
8850                                           INTVAL (XEXP (rtl, 1)), 0));
8851           else
8852             {
8853               add_loc_descr (&mem_loc_result,
8854                              mem_loc_descriptor (XEXP (rtl, 1), mode));
8855               add_loc_descr (&mem_loc_result,
8856                              new_loc_descr (DW_OP_plus, 0, 0));
8857             }
8858         }
8859       break;
8860
8861     /* If a pseudo-reg is optimized away, it is possible for it to
8862        be replaced with a MEM containing a multiply or shift.  */
8863     case MULT:
8864       op = DW_OP_mul;
8865       goto do_binop;
8866
8867     case ASHIFT:
8868       op = DW_OP_shl;
8869       goto do_binop;
8870
8871     case ASHIFTRT:
8872       op = DW_OP_shra;
8873       goto do_binop;
8874
8875     case LSHIFTRT:
8876       op = DW_OP_shr;
8877       goto do_binop;
8878
8879     do_binop:
8880       {
8881         dw_loc_descr_ref op0 = mem_loc_descriptor (XEXP (rtl, 0), mode);
8882         dw_loc_descr_ref op1 = mem_loc_descriptor (XEXP (rtl, 1), mode);
8883
8884         if (op0 == 0 || op1 == 0)
8885           break;
8886
8887         mem_loc_result = op0;
8888         add_loc_descr (&mem_loc_result, op1);
8889         add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0));
8890         break;
8891       }
8892
8893     case CONST_INT:
8894       mem_loc_result = int_loc_descriptor (INTVAL (rtl));
8895       break;
8896
8897     default:
8898       gcc_unreachable ();
8899     }
8900
8901   return mem_loc_result;
8902 }
8903
8904 /* Return a descriptor that describes the concatenation of two locations.
8905    This is typically a complex variable.  */
8906
8907 static dw_loc_descr_ref
8908 concat_loc_descriptor (rtx x0, rtx x1)
8909 {
8910   dw_loc_descr_ref cc_loc_result = NULL;
8911   dw_loc_descr_ref x0_ref = loc_descriptor (x0);
8912   dw_loc_descr_ref x1_ref = loc_descriptor (x1);
8913
8914   if (x0_ref == 0 || x1_ref == 0)
8915     return 0;
8916
8917   cc_loc_result = x0_ref;
8918   add_loc_descr_op_piece (&cc_loc_result, GET_MODE_SIZE (GET_MODE (x0)));
8919
8920   add_loc_descr (&cc_loc_result, x1_ref);
8921   add_loc_descr_op_piece (&cc_loc_result, GET_MODE_SIZE (GET_MODE (x1)));
8922
8923   return cc_loc_result;
8924 }
8925
8926 /* Output a proper Dwarf location descriptor for a variable or parameter
8927    which is either allocated in a register or in a memory location.  For a
8928    register, we just generate an OP_REG and the register number.  For a
8929    memory location we provide a Dwarf postfix expression describing how to
8930    generate the (dynamic) address of the object onto the address stack.
8931
8932    If we don't know how to describe it, return 0.  */
8933
8934 static dw_loc_descr_ref
8935 loc_descriptor (rtx rtl)
8936 {
8937   dw_loc_descr_ref loc_result = NULL;
8938
8939   switch (GET_CODE (rtl))
8940     {
8941     case SUBREG:
8942       /* The case of a subreg may arise when we have a local (register)
8943          variable or a formal (register) parameter which doesn't quite fill
8944          up an entire register.  For now, just assume that it is
8945          legitimate to make the Dwarf info refer to the whole register which
8946          contains the given subreg.  */
8947       rtl = SUBREG_REG (rtl);
8948
8949       /* ... fall through ...  */
8950
8951     case REG:
8952       loc_result = reg_loc_descriptor (rtl);
8953       break;
8954
8955     case MEM:
8956       loc_result = mem_loc_descriptor (XEXP (rtl, 0), GET_MODE (rtl));
8957       break;
8958
8959     case CONCAT:
8960       loc_result = concat_loc_descriptor (XEXP (rtl, 0), XEXP (rtl, 1));
8961       break;
8962
8963     case VAR_LOCATION:
8964       /* Single part.  */
8965       if (GET_CODE (XEXP (rtl, 1)) != PARALLEL)
8966         {
8967           loc_result = loc_descriptor (XEXP (XEXP (rtl, 1), 0));
8968           break;
8969         }
8970
8971       rtl = XEXP (rtl, 1);
8972       /* FALLTHRU */
8973
8974     case PARALLEL:
8975       {
8976         rtvec par_elems = XVEC (rtl, 0);
8977         int num_elem = GET_NUM_ELEM (par_elems);
8978         enum machine_mode mode;
8979         int i;
8980
8981         /* Create the first one, so we have something to add to.  */
8982         loc_result = loc_descriptor (XEXP (RTVEC_ELT (par_elems, 0), 0));
8983         mode = GET_MODE (XEXP (RTVEC_ELT (par_elems, 0), 0));
8984         add_loc_descr_op_piece (&loc_result, GET_MODE_SIZE (mode));
8985         for (i = 1; i < num_elem; i++)
8986           {
8987             dw_loc_descr_ref temp;
8988
8989             temp = loc_descriptor (XEXP (RTVEC_ELT (par_elems, i), 0));
8990             add_loc_descr (&loc_result, temp);
8991             mode = GET_MODE (XEXP (RTVEC_ELT (par_elems, i), 0));
8992             add_loc_descr_op_piece (&loc_result, GET_MODE_SIZE (mode));
8993           }
8994       }
8995       break;
8996
8997     default:
8998       gcc_unreachable ();
8999     }
9000
9001   return loc_result;
9002 }
9003
9004 /* Similar, but generate the descriptor from trees instead of rtl.  This comes
9005    up particularly with variable length arrays.  WANT_ADDRESS is 2 if this is
9006    a top-level invocation of loc_descriptor_from_tree; is 1 if this is not a
9007    top-level invocation, and we require the address of LOC; is 0 if we require
9008    the value of LOC.  */
9009
9010 static dw_loc_descr_ref
9011 loc_descriptor_from_tree_1 (tree loc, int want_address)
9012 {
9013   dw_loc_descr_ref ret, ret1;
9014   int have_address = 0;
9015   int unsignedp = TYPE_UNSIGNED (TREE_TYPE (loc));
9016   enum dwarf_location_atom op;
9017
9018   /* ??? Most of the time we do not take proper care for sign/zero
9019      extending the values properly.  Hopefully this won't be a real
9020      problem...  */
9021
9022   switch (TREE_CODE (loc))
9023     {
9024     case ERROR_MARK:
9025       return 0;
9026
9027     case PLACEHOLDER_EXPR:
9028       /* This case involves extracting fields from an object to determine the
9029          position of other fields.  We don't try to encode this here.  The
9030          only user of this is Ada, which encodes the needed information using
9031          the names of types.  */
9032       return 0;
9033
9034     case CALL_EXPR:
9035       return 0;
9036
9037     case PREINCREMENT_EXPR:
9038     case PREDECREMENT_EXPR:
9039     case POSTINCREMENT_EXPR:
9040     case POSTDECREMENT_EXPR:
9041       /* There are no opcodes for these operations.  */
9042       return 0;
9043
9044     case ADDR_EXPR:
9045       /* If we already want an address, there's nothing we can do.  */
9046       if (want_address)
9047         return 0;
9048
9049       /* Otherwise, process the argument and look for the address.  */
9050       return loc_descriptor_from_tree_1 (TREE_OPERAND (loc, 0), 1);
9051
9052     case VAR_DECL:
9053       if (DECL_THREAD_LOCAL_P (loc))
9054         {
9055           rtx rtl;
9056
9057           /* If this is not defined, we have no way to emit the data.  */
9058           if (!targetm.asm_out.output_dwarf_dtprel)
9059             return 0;
9060
9061           /* The way DW_OP_GNU_push_tls_address is specified, we can only
9062              look up addresses of objects in the current module.  */
9063           if (DECL_EXTERNAL (loc))
9064             return 0;
9065
9066           rtl = rtl_for_decl_location (loc);
9067           if (rtl == NULL_RTX)
9068             return 0;
9069
9070           if (!MEM_P (rtl))
9071             return 0;
9072           rtl = XEXP (rtl, 0);
9073           if (! CONSTANT_P (rtl))
9074             return 0;
9075
9076           ret = new_loc_descr (INTERNAL_DW_OP_tls_addr, 0, 0);
9077           ret->dw_loc_oprnd1.val_class = dw_val_class_addr;
9078           ret->dw_loc_oprnd1.v.val_addr = rtl;
9079
9080           ret1 = new_loc_descr (DW_OP_GNU_push_tls_address, 0, 0);
9081           add_loc_descr (&ret, ret1);
9082
9083           have_address = 1;
9084           break;
9085         }
9086       /* FALLTHRU */
9087
9088     case PARM_DECL:
9089       if (DECL_HAS_VALUE_EXPR_P (loc))
9090         return loc_descriptor_from_tree_1 (DECL_VALUE_EXPR (loc),
9091                                            want_address);
9092       /* FALLTHRU */
9093
9094     case RESULT_DECL:
9095       {
9096         rtx rtl = rtl_for_decl_location (loc);
9097
9098         if (rtl == NULL_RTX)
9099           return 0;
9100         else if (GET_CODE (rtl) == CONST_INT)
9101           {
9102             HOST_WIDE_INT val = INTVAL (rtl);
9103             if (TYPE_UNSIGNED (TREE_TYPE (loc)))
9104               val &= GET_MODE_MASK (DECL_MODE (loc));
9105             ret = int_loc_descriptor (val);
9106           }
9107         else if (GET_CODE (rtl) == CONST_STRING)
9108           return 0;
9109         else if (CONSTANT_P (rtl))
9110           {
9111             ret = new_loc_descr (DW_OP_addr, 0, 0);
9112             ret->dw_loc_oprnd1.val_class = dw_val_class_addr;
9113             ret->dw_loc_oprnd1.v.val_addr = rtl;
9114           }
9115         else
9116           {
9117             enum machine_mode mode;
9118
9119             /* Certain constructs can only be represented at top-level.  */
9120             if (want_address == 2)
9121               return loc_descriptor (rtl);
9122
9123             mode = GET_MODE (rtl);
9124             if (MEM_P (rtl))
9125               {
9126                 rtl = XEXP (rtl, 0);
9127                 have_address = 1;
9128               }
9129             ret = mem_loc_descriptor (rtl, mode);
9130           }
9131       }
9132       break;
9133
9134     case INDIRECT_REF:
9135       ret = loc_descriptor_from_tree_1 (TREE_OPERAND (loc, 0), 0);
9136       have_address = 1;
9137       break;
9138
9139     case COMPOUND_EXPR:
9140       return loc_descriptor_from_tree_1 (TREE_OPERAND (loc, 1), want_address);
9141
9142     case NOP_EXPR:
9143     case CONVERT_EXPR:
9144     case NON_LVALUE_EXPR:
9145     case VIEW_CONVERT_EXPR:
9146     case SAVE_EXPR:
9147     case MODIFY_EXPR:
9148       return loc_descriptor_from_tree_1 (TREE_OPERAND (loc, 0), want_address);
9149
9150     case COMPONENT_REF:
9151     case BIT_FIELD_REF:
9152     case ARRAY_REF:
9153     case ARRAY_RANGE_REF:
9154       {
9155         tree obj, offset;
9156         HOST_WIDE_INT bitsize, bitpos, bytepos;
9157         enum machine_mode mode;
9158         int volatilep;
9159
9160         obj = get_inner_reference (loc, &bitsize, &bitpos, &offset, &mode,
9161                                    &unsignedp, &volatilep, false);
9162
9163         if (obj == loc)
9164           return 0;
9165
9166         ret = loc_descriptor_from_tree_1 (obj, 1);
9167         if (ret == 0
9168             || bitpos % BITS_PER_UNIT != 0 || bitsize % BITS_PER_UNIT != 0)
9169           return 0;
9170
9171         if (offset != NULL_TREE)
9172           {
9173             /* Variable offset.  */
9174             add_loc_descr (&ret, loc_descriptor_from_tree_1 (offset, 0));
9175             add_loc_descr (&ret, new_loc_descr (DW_OP_plus, 0, 0));
9176           }
9177
9178         bytepos = bitpos / BITS_PER_UNIT;
9179         if (bytepos > 0)
9180           add_loc_descr (&ret, new_loc_descr (DW_OP_plus_uconst, bytepos, 0));
9181         else if (bytepos < 0)
9182           {
9183             add_loc_descr (&ret, int_loc_descriptor (bytepos));
9184             add_loc_descr (&ret, new_loc_descr (DW_OP_plus, 0, 0));
9185           }
9186
9187         have_address = 1;
9188         break;
9189       }
9190
9191     case INTEGER_CST:
9192       if (host_integerp (loc, 0))
9193         ret = int_loc_descriptor (tree_low_cst (loc, 0));
9194       else
9195         return 0;
9196       break;
9197
9198     case CONSTRUCTOR:
9199       {
9200         /* Get an RTL for this, if something has been emitted.  */
9201         rtx rtl = lookup_constant_def (loc);
9202         enum machine_mode mode;
9203
9204         if (!rtl || !MEM_P (rtl))
9205           return 0;
9206         mode = GET_MODE (rtl);
9207         rtl = XEXP (rtl, 0);
9208         ret = mem_loc_descriptor (rtl, mode);
9209         have_address = 1;
9210         break;
9211       }
9212
9213     case TRUTH_AND_EXPR:
9214     case TRUTH_ANDIF_EXPR:
9215     case BIT_AND_EXPR:
9216       op = DW_OP_and;
9217       goto do_binop;
9218
9219     case TRUTH_XOR_EXPR:
9220     case BIT_XOR_EXPR:
9221       op = DW_OP_xor;
9222       goto do_binop;
9223
9224     case TRUTH_OR_EXPR:
9225     case TRUTH_ORIF_EXPR:
9226     case BIT_IOR_EXPR:
9227       op = DW_OP_or;
9228       goto do_binop;
9229
9230     case FLOOR_DIV_EXPR:
9231     case CEIL_DIV_EXPR:
9232     case ROUND_DIV_EXPR:
9233     case TRUNC_DIV_EXPR:
9234       op = DW_OP_div;
9235       goto do_binop;
9236
9237     case MINUS_EXPR:
9238       op = DW_OP_minus;
9239       goto do_binop;
9240
9241     case FLOOR_MOD_EXPR:
9242     case CEIL_MOD_EXPR:
9243     case ROUND_MOD_EXPR:
9244     case TRUNC_MOD_EXPR:
9245       op = DW_OP_mod;
9246       goto do_binop;
9247
9248     case MULT_EXPR:
9249       op = DW_OP_mul;
9250       goto do_binop;
9251
9252     case LSHIFT_EXPR:
9253       op = DW_OP_shl;
9254       goto do_binop;
9255
9256     case RSHIFT_EXPR:
9257       op = (unsignedp ? DW_OP_shr : DW_OP_shra);
9258       goto do_binop;
9259
9260     case PLUS_EXPR:
9261       if (TREE_CODE (TREE_OPERAND (loc, 1)) == INTEGER_CST
9262           && host_integerp (TREE_OPERAND (loc, 1), 0))
9263         {
9264           ret = loc_descriptor_from_tree_1 (TREE_OPERAND (loc, 0), 0);
9265           if (ret == 0)
9266             return 0;
9267
9268           add_loc_descr (&ret,
9269                          new_loc_descr (DW_OP_plus_uconst,
9270                                         tree_low_cst (TREE_OPERAND (loc, 1),
9271                                                       0),
9272                                         0));
9273           break;
9274         }
9275
9276       op = DW_OP_plus;
9277       goto do_binop;
9278
9279     case LE_EXPR:
9280       if (TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (loc, 0))))
9281         return 0;
9282
9283       op = DW_OP_le;
9284       goto do_binop;
9285
9286     case GE_EXPR:
9287       if (TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (loc, 0))))
9288         return 0;
9289
9290       op = DW_OP_ge;
9291       goto do_binop;
9292
9293     case LT_EXPR:
9294       if (TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (loc, 0))))
9295         return 0;
9296
9297       op = DW_OP_lt;
9298       goto do_binop;
9299
9300     case GT_EXPR:
9301       if (TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (loc, 0))))
9302         return 0;
9303
9304       op = DW_OP_gt;
9305       goto do_binop;
9306
9307     case EQ_EXPR:
9308       op = DW_OP_eq;
9309       goto do_binop;
9310
9311     case NE_EXPR:
9312       op = DW_OP_ne;
9313       goto do_binop;
9314
9315     do_binop:
9316       ret = loc_descriptor_from_tree_1 (TREE_OPERAND (loc, 0), 0);
9317       ret1 = loc_descriptor_from_tree_1 (TREE_OPERAND (loc, 1), 0);
9318       if (ret == 0 || ret1 == 0)
9319         return 0;
9320
9321       add_loc_descr (&ret, ret1);
9322       add_loc_descr (&ret, new_loc_descr (op, 0, 0));
9323       break;
9324
9325     case TRUTH_NOT_EXPR:
9326     case BIT_NOT_EXPR:
9327       op = DW_OP_not;
9328       goto do_unop;
9329
9330     case ABS_EXPR:
9331       op = DW_OP_abs;
9332       goto do_unop;
9333
9334     case NEGATE_EXPR:
9335       op = DW_OP_neg;
9336       goto do_unop;
9337
9338     do_unop:
9339       ret = loc_descriptor_from_tree_1 (TREE_OPERAND (loc, 0), 0);
9340       if (ret == 0)
9341         return 0;
9342
9343       add_loc_descr (&ret, new_loc_descr (op, 0, 0));
9344       break;
9345
9346     case MIN_EXPR:
9347     case MAX_EXPR:
9348       {
9349         const enum tree_code code =
9350           TREE_CODE (loc) == MIN_EXPR ? GT_EXPR : LT_EXPR;
9351
9352         loc = build3 (COND_EXPR, TREE_TYPE (loc),
9353                       build2 (code, integer_type_node,
9354                               TREE_OPERAND (loc, 0), TREE_OPERAND (loc, 1)),
9355                       TREE_OPERAND (loc, 1), TREE_OPERAND (loc, 0));
9356       }
9357
9358       /* ... fall through ...  */
9359
9360     case COND_EXPR:
9361       {
9362         dw_loc_descr_ref lhs
9363           = loc_descriptor_from_tree_1 (TREE_OPERAND (loc, 1), 0);
9364         dw_loc_descr_ref rhs
9365           = loc_descriptor_from_tree_1 (TREE_OPERAND (loc, 2), 0);
9366         dw_loc_descr_ref bra_node, jump_node, tmp;
9367
9368         ret = loc_descriptor_from_tree_1 (TREE_OPERAND (loc, 0), 0);
9369         if (ret == 0 || lhs == 0 || rhs == 0)
9370           return 0;
9371
9372         bra_node = new_loc_descr (DW_OP_bra, 0, 0);
9373         add_loc_descr (&ret, bra_node);
9374
9375         add_loc_descr (&ret, rhs);
9376         jump_node = new_loc_descr (DW_OP_skip, 0, 0);
9377         add_loc_descr (&ret, jump_node);
9378
9379         add_loc_descr (&ret, lhs);
9380         bra_node->dw_loc_oprnd1.val_class = dw_val_class_loc;
9381         bra_node->dw_loc_oprnd1.v.val_loc = lhs;
9382
9383         /* ??? Need a node to point the skip at.  Use a nop.  */
9384         tmp = new_loc_descr (DW_OP_nop, 0, 0);
9385         add_loc_descr (&ret, tmp);
9386         jump_node->dw_loc_oprnd1.val_class = dw_val_class_loc;
9387         jump_node->dw_loc_oprnd1.v.val_loc = tmp;
9388       }
9389       break;
9390
9391     case FIX_TRUNC_EXPR:
9392     case FIX_CEIL_EXPR:
9393     case FIX_FLOOR_EXPR:
9394     case FIX_ROUND_EXPR:
9395       return 0;
9396
9397     default:
9398       /* Leave front-end specific codes as simply unknown.  This comes
9399          up, for instance, with the C STMT_EXPR.  */
9400       if ((unsigned int) TREE_CODE (loc)
9401           >= (unsigned int) LAST_AND_UNUSED_TREE_CODE)
9402         return 0;
9403
9404 #ifdef ENABLE_CHECKING
9405       /* Otherwise this is a generic code; we should just lists all of
9406          these explicitly.  We forgot one.  */
9407       gcc_unreachable ();
9408 #else
9409       /* In a release build, we want to degrade gracefully: better to
9410          generate incomplete debugging information than to crash.  */
9411       return NULL;
9412 #endif
9413     }
9414
9415   /* Show if we can't fill the request for an address.  */
9416   if (want_address && !have_address)
9417     return 0;
9418
9419   /* If we've got an address and don't want one, dereference.  */
9420   if (!want_address && have_address)
9421     {
9422       HOST_WIDE_INT size = int_size_in_bytes (TREE_TYPE (loc));
9423
9424       if (size > DWARF2_ADDR_SIZE || size == -1)
9425         return 0;
9426       else if (size == DWARF2_ADDR_SIZE)
9427         op = DW_OP_deref;
9428       else
9429         op = DW_OP_deref_size;
9430
9431       add_loc_descr (&ret, new_loc_descr (op, size, 0));
9432     }
9433
9434   return ret;
9435 }
9436
9437 static inline dw_loc_descr_ref
9438 loc_descriptor_from_tree (tree loc)
9439 {
9440   return loc_descriptor_from_tree_1 (loc, 2);
9441 }
9442
9443 /* Given a value, round it up to the lowest multiple of `boundary'
9444    which is not less than the value itself.  */
9445
9446 static inline HOST_WIDE_INT
9447 ceiling (HOST_WIDE_INT value, unsigned int boundary)
9448 {
9449   return (((value + boundary - 1) / boundary) * boundary);
9450 }
9451
9452 /* Given a pointer to what is assumed to be a FIELD_DECL node, return a
9453    pointer to the declared type for the relevant field variable, or return
9454    `integer_type_node' if the given node turns out to be an
9455    ERROR_MARK node.  */
9456
9457 static inline tree
9458 field_type (tree decl)
9459 {
9460   tree type;
9461
9462   if (TREE_CODE (decl) == ERROR_MARK)
9463     return integer_type_node;
9464
9465   type = DECL_BIT_FIELD_TYPE (decl);
9466   if (type == NULL_TREE)
9467     type = TREE_TYPE (decl);
9468
9469   return type;
9470 }
9471
9472 /* Given a pointer to a tree node, return the alignment in bits for
9473    it, or else return BITS_PER_WORD if the node actually turns out to
9474    be an ERROR_MARK node.  */
9475
9476 static inline unsigned
9477 simple_type_align_in_bits (tree type)
9478 {
9479   return (TREE_CODE (type) != ERROR_MARK) ? TYPE_ALIGN (type) : BITS_PER_WORD;
9480 }
9481
9482 static inline unsigned
9483 simple_decl_align_in_bits (tree decl)
9484 {
9485   return (TREE_CODE (decl) != ERROR_MARK) ? DECL_ALIGN (decl) : BITS_PER_WORD;
9486 }
9487
9488 /* Given a pointer to a FIELD_DECL, compute and return the byte offset of the
9489    lowest addressed byte of the "containing object" for the given FIELD_DECL,
9490    or return 0 if we are unable to determine what that offset is, either
9491    because the argument turns out to be a pointer to an ERROR_MARK node, or
9492    because the offset is actually variable.  (We can't handle the latter case
9493    just yet).  */
9494
9495 static HOST_WIDE_INT
9496 field_byte_offset (tree decl)
9497 {
9498   unsigned int type_align_in_bits;
9499   unsigned int decl_align_in_bits;
9500   unsigned HOST_WIDE_INT type_size_in_bits;
9501   HOST_WIDE_INT object_offset_in_bits;
9502   tree type;
9503   tree field_size_tree;
9504   HOST_WIDE_INT bitpos_int;
9505   HOST_WIDE_INT deepest_bitpos;
9506   unsigned HOST_WIDE_INT field_size_in_bits;
9507
9508   if (TREE_CODE (decl) == ERROR_MARK)
9509     return 0;
9510
9511   gcc_assert (TREE_CODE (decl) == FIELD_DECL);
9512
9513   type = field_type (decl);
9514   field_size_tree = DECL_SIZE (decl);
9515
9516   /* The size could be unspecified if there was an error, or for
9517      a flexible array member.  */
9518   if (! field_size_tree)
9519     field_size_tree = bitsize_zero_node;
9520
9521   /* We cannot yet cope with fields whose positions are variable, so
9522      for now, when we see such things, we simply return 0.  Someday, we may
9523      be able to handle such cases, but it will be damn difficult.  */
9524   if (! host_integerp (bit_position (decl), 0))
9525     return 0;
9526
9527   bitpos_int = int_bit_position (decl);
9528
9529   /* If we don't know the size of the field, pretend it's a full word.  */
9530   if (host_integerp (field_size_tree, 1))
9531     field_size_in_bits = tree_low_cst (field_size_tree, 1);
9532   else
9533     field_size_in_bits = BITS_PER_WORD;
9534
9535   type_size_in_bits = simple_type_size_in_bits (type);
9536   type_align_in_bits = simple_type_align_in_bits (type);
9537   decl_align_in_bits = simple_decl_align_in_bits (decl);
9538
9539   /* The GCC front-end doesn't make any attempt to keep track of the starting
9540      bit offset (relative to the start of the containing structure type) of the
9541      hypothetical "containing object" for a bit-field.  Thus, when computing
9542      the byte offset value for the start of the "containing object" of a
9543      bit-field, we must deduce this information on our own. This can be rather
9544      tricky to do in some cases.  For example, handling the following structure
9545      type definition when compiling for an i386/i486 target (which only aligns
9546      long long's to 32-bit boundaries) can be very tricky:
9547
9548          struct S { int field1; long long field2:31; };
9549
9550      Fortunately, there is a simple rule-of-thumb which can be used in such
9551      cases.  When compiling for an i386/i486, GCC will allocate 8 bytes for the
9552      structure shown above.  It decides to do this based upon one simple rule
9553      for bit-field allocation.  GCC allocates each "containing object" for each
9554      bit-field at the first (i.e. lowest addressed) legitimate alignment
9555      boundary (based upon the required minimum alignment for the declared type
9556      of the field) which it can possibly use, subject to the condition that
9557      there is still enough available space remaining in the containing object
9558      (when allocated at the selected point) to fully accommodate all of the
9559      bits of the bit-field itself.
9560
9561      This simple rule makes it obvious why GCC allocates 8 bytes for each
9562      object of the structure type shown above.  When looking for a place to
9563      allocate the "containing object" for `field2', the compiler simply tries
9564      to allocate a 64-bit "containing object" at each successive 32-bit
9565      boundary (starting at zero) until it finds a place to allocate that 64-
9566      bit field such that at least 31 contiguous (and previously unallocated)
9567      bits remain within that selected 64 bit field.  (As it turns out, for the
9568      example above, the compiler finds it is OK to allocate the "containing
9569      object" 64-bit field at bit-offset zero within the structure type.)
9570
9571      Here we attempt to work backwards from the limited set of facts we're
9572      given, and we try to deduce from those facts, where GCC must have believed
9573      that the containing object started (within the structure type). The value
9574      we deduce is then used (by the callers of this routine) to generate
9575      DW_AT_location and DW_AT_bit_offset attributes for fields (both bit-fields
9576      and, in the case of DW_AT_location, regular fields as well).  */
9577
9578   /* Figure out the bit-distance from the start of the structure to the
9579      "deepest" bit of the bit-field.  */
9580   deepest_bitpos = bitpos_int + field_size_in_bits;
9581
9582   /* This is the tricky part.  Use some fancy footwork to deduce where the
9583      lowest addressed bit of the containing object must be.  */
9584   object_offset_in_bits = deepest_bitpos - type_size_in_bits;
9585
9586   /* Round up to type_align by default.  This works best for bitfields.  */
9587   object_offset_in_bits += type_align_in_bits - 1;
9588   object_offset_in_bits /= type_align_in_bits;
9589   object_offset_in_bits *= type_align_in_bits;
9590
9591   if (object_offset_in_bits > bitpos_int)
9592     {
9593       /* Sigh, the decl must be packed.  */
9594       object_offset_in_bits = deepest_bitpos - type_size_in_bits;
9595
9596       /* Round up to decl_align instead.  */
9597       object_offset_in_bits += decl_align_in_bits - 1;
9598       object_offset_in_bits /= decl_align_in_bits;
9599       object_offset_in_bits *= decl_align_in_bits;
9600     }
9601
9602   return object_offset_in_bits / BITS_PER_UNIT;
9603 }
9604 \f
9605 /* The following routines define various Dwarf attributes and any data
9606    associated with them.  */
9607
9608 /* Add a location description attribute value to a DIE.
9609
9610    This emits location attributes suitable for whole variables and
9611    whole parameters.  Note that the location attributes for struct fields are
9612    generated by the routine `data_member_location_attribute' below.  */
9613
9614 static inline void
9615 add_AT_location_description (dw_die_ref die, enum dwarf_attribute attr_kind,
9616                              dw_loc_descr_ref descr)
9617 {
9618   if (descr != 0)
9619     add_AT_loc (die, attr_kind, descr);
9620 }
9621
9622 /* Attach the specialized form of location attribute used for data members of
9623    struct and union types.  In the special case of a FIELD_DECL node which
9624    represents a bit-field, the "offset" part of this special location
9625    descriptor must indicate the distance in bytes from the lowest-addressed
9626    byte of the containing struct or union type to the lowest-addressed byte of
9627    the "containing object" for the bit-field.  (See the `field_byte_offset'
9628    function above).
9629
9630    For any given bit-field, the "containing object" is a hypothetical object
9631    (of some integral or enum type) within which the given bit-field lives.  The
9632    type of this hypothetical "containing object" is always the same as the
9633    declared type of the individual bit-field itself (for GCC anyway... the
9634    DWARF spec doesn't actually mandate this).  Note that it is the size (in
9635    bytes) of the hypothetical "containing object" which will be given in the
9636    DW_AT_byte_size attribute for this bit-field.  (See the
9637    `byte_size_attribute' function below.)  It is also used when calculating the
9638    value of the DW_AT_bit_offset attribute.  (See the `bit_offset_attribute'
9639    function below.)  */
9640
9641 static void
9642 add_data_member_location_attribute (dw_die_ref die, tree decl)
9643 {
9644   HOST_WIDE_INT offset;
9645   dw_loc_descr_ref loc_descr = 0;
9646
9647   if (TREE_CODE (decl) == TREE_BINFO)
9648     {
9649       /* We're working on the TAG_inheritance for a base class.  */
9650       if (BINFO_VIRTUAL_P (decl) && is_cxx ())
9651         {
9652           /* For C++ virtual bases we can't just use BINFO_OFFSET, as they
9653              aren't at a fixed offset from all (sub)objects of the same
9654              type.  We need to extract the appropriate offset from our
9655              vtable.  The following dwarf expression means
9656
9657                BaseAddr = ObAddr + *((*ObAddr) - Offset)
9658
9659              This is specific to the V3 ABI, of course.  */
9660
9661           dw_loc_descr_ref tmp;
9662
9663           /* Make a copy of the object address.  */
9664           tmp = new_loc_descr (DW_OP_dup, 0, 0);
9665           add_loc_descr (&loc_descr, tmp);
9666
9667           /* Extract the vtable address.  */
9668           tmp = new_loc_descr (DW_OP_deref, 0, 0);
9669           add_loc_descr (&loc_descr, tmp);
9670
9671           /* Calculate the address of the offset.  */
9672           offset = tree_low_cst (BINFO_VPTR_FIELD (decl), 0);
9673           gcc_assert (offset < 0);
9674
9675           tmp = int_loc_descriptor (-offset);
9676           add_loc_descr (&loc_descr, tmp);
9677           tmp = new_loc_descr (DW_OP_minus, 0, 0);
9678           add_loc_descr (&loc_descr, tmp);
9679
9680           /* Extract the offset.  */
9681           tmp = new_loc_descr (DW_OP_deref, 0, 0);
9682           add_loc_descr (&loc_descr, tmp);
9683
9684           /* Add it to the object address.  */
9685           tmp = new_loc_descr (DW_OP_plus, 0, 0);
9686           add_loc_descr (&loc_descr, tmp);
9687         }
9688       else
9689         offset = tree_low_cst (BINFO_OFFSET (decl), 0);
9690     }
9691   else
9692     offset = field_byte_offset (decl);
9693
9694   if (! loc_descr)
9695     {
9696       enum dwarf_location_atom op;
9697
9698       /* The DWARF2 standard says that we should assume that the structure
9699          address is already on the stack, so we can specify a structure field
9700          address by using DW_OP_plus_uconst.  */
9701
9702 #ifdef MIPS_DEBUGGING_INFO
9703       /* ??? The SGI dwarf reader does not handle the DW_OP_plus_uconst
9704          operator correctly.  It works only if we leave the offset on the
9705          stack.  */
9706       op = DW_OP_constu;
9707 #else
9708       op = DW_OP_plus_uconst;
9709 #endif
9710
9711       loc_descr = new_loc_descr (op, offset, 0);
9712     }
9713
9714   add_AT_loc (die, DW_AT_data_member_location, loc_descr);
9715 }
9716
9717 /* Writes integer values to dw_vec_const array.  */
9718
9719 static void
9720 insert_int (HOST_WIDE_INT val, unsigned int size, unsigned char *dest)
9721 {
9722   while (size != 0)
9723     {
9724       *dest++ = val & 0xff;
9725       val >>= 8;
9726       --size;
9727     }
9728 }
9729
9730 /* Reads integers from dw_vec_const array.  Inverse of insert_int.  */
9731
9732 static HOST_WIDE_INT
9733 extract_int (const unsigned char *src, unsigned int size)
9734 {
9735   HOST_WIDE_INT val = 0;
9736
9737   src += size;
9738   while (size != 0)
9739     {
9740       val <<= 8;
9741       val |= *--src & 0xff;
9742       --size;
9743     }
9744   return val;
9745 }
9746
9747 /* Writes floating point values to dw_vec_const array.  */
9748
9749 static void
9750 insert_float (rtx rtl, unsigned char *array)
9751 {
9752   REAL_VALUE_TYPE rv;
9753   long val[4];
9754   int i;
9755
9756   REAL_VALUE_FROM_CONST_DOUBLE (rv, rtl);
9757   real_to_target (val, &rv, GET_MODE (rtl));
9758
9759   /* real_to_target puts 32-bit pieces in each long.  Pack them.  */
9760   for (i = 0; i < GET_MODE_SIZE (GET_MODE (rtl)) / 4; i++)
9761     {
9762       insert_int (val[i], 4, array);
9763       array += 4;
9764     }
9765 }
9766
9767 /* Attach a DW_AT_const_value attribute for a variable or a parameter which
9768    does not have a "location" either in memory or in a register.  These
9769    things can arise in GNU C when a constant is passed as an actual parameter
9770    to an inlined function.  They can also arise in C++ where declared
9771    constants do not necessarily get memory "homes".  */
9772
9773 static void
9774 add_const_value_attribute (dw_die_ref die, rtx rtl)
9775 {
9776   switch (GET_CODE (rtl))
9777     {
9778     case CONST_INT:
9779       {
9780         HOST_WIDE_INT val = INTVAL (rtl);
9781
9782         if (val < 0)
9783           add_AT_int (die, DW_AT_const_value, val);
9784         else
9785           add_AT_unsigned (die, DW_AT_const_value, (unsigned HOST_WIDE_INT) val);
9786       }
9787       break;
9788
9789     case CONST_DOUBLE:
9790       /* Note that a CONST_DOUBLE rtx could represent either an integer or a
9791          floating-point constant.  A CONST_DOUBLE is used whenever the
9792          constant requires more than one word in order to be adequately
9793          represented.  We output CONST_DOUBLEs as blocks.  */
9794       {
9795         enum machine_mode mode = GET_MODE (rtl);
9796
9797         if (SCALAR_FLOAT_MODE_P (mode))
9798           {
9799             unsigned int length = GET_MODE_SIZE (mode);
9800             unsigned char *array = ggc_alloc (length);
9801
9802             insert_float (rtl, array);
9803             add_AT_vec (die, DW_AT_const_value, length / 4, 4, array);
9804           }
9805         else
9806           {
9807             /* ??? We really should be using HOST_WIDE_INT throughout.  */
9808             gcc_assert (HOST_BITS_PER_LONG == HOST_BITS_PER_WIDE_INT);
9809
9810             add_AT_long_long (die, DW_AT_const_value,
9811                               CONST_DOUBLE_HIGH (rtl), CONST_DOUBLE_LOW (rtl));
9812           }
9813       }
9814       break;
9815
9816     case CONST_VECTOR:
9817       {
9818         enum machine_mode mode = GET_MODE (rtl);
9819         unsigned int elt_size = GET_MODE_UNIT_SIZE (mode);
9820         unsigned int length = CONST_VECTOR_NUNITS (rtl);
9821         unsigned char *array = ggc_alloc (length * elt_size);
9822         unsigned int i;
9823         unsigned char *p;
9824
9825         switch (GET_MODE_CLASS (mode))
9826           {
9827           case MODE_VECTOR_INT:
9828             for (i = 0, p = array; i < length; i++, p += elt_size)
9829               {
9830                 rtx elt = CONST_VECTOR_ELT (rtl, i);
9831                 HOST_WIDE_INT lo, hi;
9832
9833                 switch (GET_CODE (elt))
9834                   {
9835                   case CONST_INT:
9836                     lo = INTVAL (elt);
9837                     hi = -(lo < 0);
9838                     break;
9839
9840                   case CONST_DOUBLE:
9841                     lo = CONST_DOUBLE_LOW (elt);
9842                     hi = CONST_DOUBLE_HIGH (elt);
9843                     break;
9844
9845                   default:
9846                     gcc_unreachable ();
9847                   }
9848
9849                 if (elt_size <= sizeof (HOST_WIDE_INT))
9850                   insert_int (lo, elt_size, p);
9851                 else
9852                   {
9853                     unsigned char *p0 = p;
9854                     unsigned char *p1 = p + sizeof (HOST_WIDE_INT);
9855
9856                     gcc_assert (elt_size == 2 * sizeof (HOST_WIDE_INT));
9857                     if (WORDS_BIG_ENDIAN)
9858                       {
9859                         p0 = p1;
9860                         p1 = p;
9861                       }
9862                     insert_int (lo, sizeof (HOST_WIDE_INT), p0);
9863                     insert_int (hi, sizeof (HOST_WIDE_INT), p1);
9864                   }
9865               }
9866             break;
9867
9868           case MODE_VECTOR_FLOAT:
9869             for (i = 0, p = array; i < length; i++, p += elt_size)
9870               {
9871                 rtx elt = CONST_VECTOR_ELT (rtl, i);
9872                 insert_float (elt, p);
9873               }
9874             break;
9875
9876           default:
9877             gcc_unreachable ();
9878           }
9879
9880         add_AT_vec (die, DW_AT_const_value, length, elt_size, array);
9881       }
9882       break;
9883
9884     case CONST_STRING:
9885       add_AT_string (die, DW_AT_const_value, XSTR (rtl, 0));
9886       break;
9887
9888     case SYMBOL_REF:
9889     case LABEL_REF:
9890     case CONST:
9891       add_AT_addr (die, DW_AT_const_value, rtl);
9892       VEC_safe_push (rtx, gc, used_rtx_array, rtl);
9893       break;
9894
9895     case PLUS:
9896       /* In cases where an inlined instance of an inline function is passed
9897          the address of an `auto' variable (which is local to the caller) we
9898          can get a situation where the DECL_RTL of the artificial local
9899          variable (for the inlining) which acts as a stand-in for the
9900          corresponding formal parameter (of the inline function) will look
9901          like (plus:SI (reg:SI FRAME_PTR) (const_int ...)).  This is not
9902          exactly a compile-time constant expression, but it isn't the address
9903          of the (artificial) local variable either.  Rather, it represents the
9904          *value* which the artificial local variable always has during its
9905          lifetime.  We currently have no way to represent such quasi-constant
9906          values in Dwarf, so for now we just punt and generate nothing.  */
9907       break;
9908
9909     default:
9910       /* No other kinds of rtx should be possible here.  */
9911       gcc_unreachable ();
9912     }
9913
9914 }
9915
9916 /* Generate an RTL constant from a decl initializer INIT with decl type TYPE,
9917    for use in a later add_const_value_attribute call.  */
9918
9919 static rtx
9920 rtl_for_decl_init (tree init, tree type)
9921 {
9922   rtx rtl = NULL_RTX;
9923
9924   /* If a variable is initialized with a string constant without embedded
9925      zeros, build CONST_STRING.  */
9926   if (TREE_CODE (init) == STRING_CST && TREE_CODE (type) == ARRAY_TYPE)
9927     {
9928       tree enttype = TREE_TYPE (type);
9929       tree domain = TYPE_DOMAIN (type);
9930       enum machine_mode mode = TYPE_MODE (enttype);
9931
9932       if (GET_MODE_CLASS (mode) == MODE_INT && GET_MODE_SIZE (mode) == 1
9933           && domain
9934           && integer_zerop (TYPE_MIN_VALUE (domain))
9935           && compare_tree_int (TYPE_MAX_VALUE (domain),
9936                                TREE_STRING_LENGTH (init) - 1) == 0
9937           && ((size_t) TREE_STRING_LENGTH (init)
9938               == strlen (TREE_STRING_POINTER (init)) + 1))
9939         rtl = gen_rtx_CONST_STRING (VOIDmode,
9940                                     ggc_strdup (TREE_STRING_POINTER (init)));
9941     }
9942   /* If the initializer is something that we know will expand into an
9943      immediate RTL constant, expand it now.  Expanding anything else
9944      tends to produce unresolved symbols; see debug/5770 and c++/6381.  */
9945   /* Aggregate, vector, and complex types may contain constructors that may
9946      result in code being generated when expand_expr is called, so we can't
9947      handle them here.  Integer and float are useful and safe types to handle
9948      here.  */
9949   else if ((INTEGRAL_TYPE_P (type) || SCALAR_FLOAT_TYPE_P (type))
9950            && initializer_constant_valid_p (init, type) == null_pointer_node)
9951     {
9952       rtl = expand_expr (init, NULL_RTX, VOIDmode, EXPAND_INITIALIZER);
9953
9954       /* If expand_expr returns a MEM, it wasn't immediate.  */
9955       gcc_assert (!rtl || !MEM_P (rtl));
9956     }
9957
9958   return rtl;
9959 }
9960
9961 /* Generate RTL for the variable DECL to represent its location.  */
9962
9963 static rtx
9964 rtl_for_decl_location (tree decl)
9965 {
9966   rtx rtl;
9967
9968   /* Here we have to decide where we are going to say the parameter "lives"
9969      (as far as the debugger is concerned).  We only have a couple of
9970      choices.  GCC provides us with DECL_RTL and with DECL_INCOMING_RTL.
9971
9972      DECL_RTL normally indicates where the parameter lives during most of the
9973      activation of the function.  If optimization is enabled however, this
9974      could be either NULL or else a pseudo-reg.  Both of those cases indicate
9975      that the parameter doesn't really live anywhere (as far as the code
9976      generation parts of GCC are concerned) during most of the function's
9977      activation.  That will happen (for example) if the parameter is never
9978      referenced within the function.
9979
9980      We could just generate a location descriptor here for all non-NULL
9981      non-pseudo values of DECL_RTL and ignore all of the rest, but we can be
9982      a little nicer than that if we also consider DECL_INCOMING_RTL in cases
9983      where DECL_RTL is NULL or is a pseudo-reg.
9984
9985      Note however that we can only get away with using DECL_INCOMING_RTL as
9986      a backup substitute for DECL_RTL in certain limited cases.  In cases
9987      where DECL_ARG_TYPE (decl) indicates the same type as TREE_TYPE (decl),
9988      we can be sure that the parameter was passed using the same type as it is
9989      declared to have within the function, and that its DECL_INCOMING_RTL
9990      points us to a place where a value of that type is passed.
9991
9992      In cases where DECL_ARG_TYPE (decl) and TREE_TYPE (decl) are different,
9993      we cannot (in general) use DECL_INCOMING_RTL as a substitute for DECL_RTL
9994      because in these cases DECL_INCOMING_RTL points us to a value of some
9995      type which is *different* from the type of the parameter itself.  Thus,
9996      if we tried to use DECL_INCOMING_RTL to generate a location attribute in
9997      such cases, the debugger would end up (for example) trying to fetch a
9998      `float' from a place which actually contains the first part of a
9999      `double'.  That would lead to really incorrect and confusing
10000      output at debug-time.
10001
10002      So, in general, we *do not* use DECL_INCOMING_RTL as a backup for DECL_RTL
10003      in cases where DECL_ARG_TYPE (decl) != TREE_TYPE (decl).  There
10004      are a couple of exceptions however.  On little-endian machines we can
10005      get away with using DECL_INCOMING_RTL even when DECL_ARG_TYPE (decl) is
10006      not the same as TREE_TYPE (decl), but only when DECL_ARG_TYPE (decl) is
10007      an integral type that is smaller than TREE_TYPE (decl). These cases arise
10008      when (on a little-endian machine) a non-prototyped function has a
10009      parameter declared to be of type `short' or `char'.  In such cases,
10010      TREE_TYPE (decl) will be `short' or `char', DECL_ARG_TYPE (decl) will
10011      be `int', and DECL_INCOMING_RTL will point to the lowest-order byte of the
10012      passed `int' value.  If the debugger then uses that address to fetch
10013      a `short' or a `char' (on a little-endian machine) the result will be
10014      the correct data, so we allow for such exceptional cases below.
10015
10016      Note that our goal here is to describe the place where the given formal
10017      parameter lives during most of the function's activation (i.e. between the
10018      end of the prologue and the start of the epilogue).  We'll do that as best
10019      as we can. Note however that if the given formal parameter is modified
10020      sometime during the execution of the function, then a stack backtrace (at
10021      debug-time) will show the function as having been called with the *new*
10022      value rather than the value which was originally passed in.  This happens
10023      rarely enough that it is not a major problem, but it *is* a problem, and
10024      I'd like to fix it.
10025
10026      A future version of dwarf2out.c may generate two additional attributes for
10027      any given DW_TAG_formal_parameter DIE which will describe the "passed
10028      type" and the "passed location" for the given formal parameter in addition
10029      to the attributes we now generate to indicate the "declared type" and the
10030      "active location" for each parameter.  This additional set of attributes
10031      could be used by debuggers for stack backtraces. Separately, note that
10032      sometimes DECL_RTL can be NULL and DECL_INCOMING_RTL can be NULL also.
10033      This happens (for example) for inlined-instances of inline function formal
10034      parameters which are never referenced.  This really shouldn't be
10035      happening.  All PARM_DECL nodes should get valid non-NULL
10036      DECL_INCOMING_RTL values.  FIXME.  */
10037
10038   /* Use DECL_RTL as the "location" unless we find something better.  */
10039   rtl = DECL_RTL_IF_SET (decl);
10040
10041   /* When generating abstract instances, ignore everything except
10042      constants, symbols living in memory, and symbols living in
10043      fixed registers.  */
10044   if (! reload_completed)
10045     {
10046       if (rtl
10047           && (CONSTANT_P (rtl)
10048               || (MEM_P (rtl)
10049                   && CONSTANT_P (XEXP (rtl, 0)))
10050               || (REG_P (rtl)
10051                   && TREE_CODE (decl) == VAR_DECL
10052                   && TREE_STATIC (decl))))
10053         {
10054           rtl = targetm.delegitimize_address (rtl);
10055           return rtl;
10056         }
10057       rtl = NULL_RTX;
10058     }
10059   else if (TREE_CODE (decl) == PARM_DECL)
10060     {
10061       if (rtl == NULL_RTX || is_pseudo_reg (rtl))
10062         {
10063           tree declared_type = TREE_TYPE (decl);
10064           tree passed_type = DECL_ARG_TYPE (decl);
10065           enum machine_mode dmode = TYPE_MODE (declared_type);
10066           enum machine_mode pmode = TYPE_MODE (passed_type);
10067
10068           /* This decl represents a formal parameter which was optimized out.
10069              Note that DECL_INCOMING_RTL may be NULL in here, but we handle
10070              all cases where (rtl == NULL_RTX) just below.  */
10071           if (dmode == pmode)
10072             rtl = DECL_INCOMING_RTL (decl);
10073           else if (SCALAR_INT_MODE_P (dmode)
10074                    && GET_MODE_SIZE (dmode) <= GET_MODE_SIZE (pmode)
10075                    && DECL_INCOMING_RTL (decl))
10076             {
10077               rtx inc = DECL_INCOMING_RTL (decl);
10078               if (REG_P (inc))
10079                 rtl = inc;
10080               else if (MEM_P (inc))
10081                 {
10082                   if (BYTES_BIG_ENDIAN)
10083                     rtl = adjust_address_nv (inc, dmode,
10084                                              GET_MODE_SIZE (pmode)
10085                                              - GET_MODE_SIZE (dmode));
10086                   else
10087                     rtl = inc;
10088                 }
10089             }
10090         }
10091
10092       /* If the parm was passed in registers, but lives on the stack, then
10093          make a big endian correction if the mode of the type of the
10094          parameter is not the same as the mode of the rtl.  */
10095       /* ??? This is the same series of checks that are made in dbxout.c before
10096          we reach the big endian correction code there.  It isn't clear if all
10097          of these checks are necessary here, but keeping them all is the safe
10098          thing to do.  */
10099       else if (MEM_P (rtl)
10100                && XEXP (rtl, 0) != const0_rtx
10101                && ! CONSTANT_P (XEXP (rtl, 0))
10102                /* Not passed in memory.  */
10103                && !MEM_P (DECL_INCOMING_RTL (decl))
10104                /* Not passed by invisible reference.  */
10105                && (!REG_P (XEXP (rtl, 0))
10106                    || REGNO (XEXP (rtl, 0)) == HARD_FRAME_POINTER_REGNUM
10107                    || REGNO (XEXP (rtl, 0)) == STACK_POINTER_REGNUM
10108 #if ARG_POINTER_REGNUM != HARD_FRAME_POINTER_REGNUM
10109                    || REGNO (XEXP (rtl, 0)) == ARG_POINTER_REGNUM
10110 #endif
10111                      )
10112                /* Big endian correction check.  */
10113                && BYTES_BIG_ENDIAN
10114                && TYPE_MODE (TREE_TYPE (decl)) != GET_MODE (rtl)
10115                && (GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (decl)))
10116                    < UNITS_PER_WORD))
10117         {
10118           int offset = (UNITS_PER_WORD
10119                         - GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (decl))));
10120
10121           rtl = gen_rtx_MEM (TYPE_MODE (TREE_TYPE (decl)),
10122                              plus_constant (XEXP (rtl, 0), offset));
10123         }
10124     }
10125   else if (TREE_CODE (decl) == VAR_DECL
10126            && rtl
10127            && MEM_P (rtl)
10128            && GET_MODE (rtl) != TYPE_MODE (TREE_TYPE (decl))
10129            && BYTES_BIG_ENDIAN)
10130     {
10131       int rsize = GET_MODE_SIZE (GET_MODE (rtl));
10132       int dsize = GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (decl)));
10133
10134       /* If a variable is declared "register" yet is smaller than
10135          a register, then if we store the variable to memory, it
10136          looks like we're storing a register-sized value, when in
10137          fact we are not.  We need to adjust the offset of the
10138          storage location to reflect the actual value's bytes,
10139          else gdb will not be able to display it.  */
10140       if (rsize > dsize)
10141         rtl = gen_rtx_MEM (TYPE_MODE (TREE_TYPE (decl)),
10142                            plus_constant (XEXP (rtl, 0), rsize-dsize));
10143     }
10144
10145   /* A variable with no DECL_RTL but a DECL_INITIAL is a compile-time constant,
10146      and will have been substituted directly into all expressions that use it.
10147      C does not have such a concept, but C++ and other languages do.  */
10148   if (!rtl && TREE_CODE (decl) == VAR_DECL && DECL_INITIAL (decl))
10149     rtl = rtl_for_decl_init (DECL_INITIAL (decl), TREE_TYPE (decl));
10150
10151   if (rtl)
10152     rtl = targetm.delegitimize_address (rtl);
10153
10154   /* If we don't look past the constant pool, we risk emitting a
10155      reference to a constant pool entry that isn't referenced from
10156      code, and thus is not emitted.  */
10157   if (rtl)
10158     rtl = avoid_constant_pool_reference (rtl);
10159
10160   return rtl;
10161 }
10162
10163 /* We need to figure out what section we should use as the base for the
10164    address ranges where a given location is valid.
10165    1. If this particular DECL has a section associated with it, use that.
10166    2. If this function has a section associated with it, use that.
10167    3. Otherwise, use the text section.
10168    XXX: If you split a variable across multiple sections, we won't notice.  */
10169
10170 static const char *
10171 secname_for_decl (tree decl)
10172 {
10173   const char *secname;
10174
10175   if (VAR_OR_FUNCTION_DECL_P (decl) && DECL_SECTION_NAME (decl))
10176     {
10177       tree sectree = DECL_SECTION_NAME (decl);
10178       secname = TREE_STRING_POINTER (sectree);
10179     }
10180   else if (current_function_decl && DECL_SECTION_NAME (current_function_decl))
10181     {
10182       tree sectree = DECL_SECTION_NAME (current_function_decl);
10183       secname = TREE_STRING_POINTER (sectree);
10184     }
10185   else if (cfun && in_cold_section_p)
10186     secname = cfun->cold_section_label;
10187   else
10188     secname = text_section_label;
10189
10190   return secname;
10191 }
10192
10193 /* Generate *either* a DW_AT_location attribute or else a DW_AT_const_value
10194    data attribute for a variable or a parameter.  We generate the
10195    DW_AT_const_value attribute only in those cases where the given variable
10196    or parameter does not have a true "location" either in memory or in a
10197    register.  This can happen (for example) when a constant is passed as an
10198    actual argument in a call to an inline function.  (It's possible that
10199    these things can crop up in other ways also.)  Note that one type of
10200    constant value which can be passed into an inlined function is a constant
10201    pointer.  This can happen for example if an actual argument in an inlined
10202    function call evaluates to a compile-time constant address.  */
10203
10204 static void
10205 add_location_or_const_value_attribute (dw_die_ref die, tree decl,
10206                                        enum dwarf_attribute attr)
10207 {
10208   rtx rtl;
10209   dw_loc_descr_ref descr;
10210   var_loc_list *loc_list;
10211   struct var_loc_node *node;
10212   if (TREE_CODE (decl) == ERROR_MARK)
10213     return;
10214
10215   gcc_assert (TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == PARM_DECL
10216               || TREE_CODE (decl) == RESULT_DECL);
10217              
10218   /* See if we possibly have multiple locations for this variable.  */
10219   loc_list = lookup_decl_loc (decl);
10220
10221   /* If it truly has multiple locations, the first and last node will
10222      differ.  */
10223   if (loc_list && loc_list->first != loc_list->last)
10224     {
10225       const char *endname, *secname;
10226       dw_loc_list_ref list;
10227       rtx varloc;
10228
10229       /* Now that we know what section we are using for a base,
10230          actually construct the list of locations.
10231          The first location information is what is passed to the
10232          function that creates the location list, and the remaining
10233          locations just get added on to that list.
10234          Note that we only know the start address for a location
10235          (IE location changes), so to build the range, we use
10236          the range [current location start, next location start].
10237          This means we have to special case the last node, and generate
10238          a range of [last location start, end of function label].  */
10239
10240       node = loc_list->first;
10241       varloc = NOTE_VAR_LOCATION (node->var_loc_note);
10242       secname = secname_for_decl (decl);
10243
10244       list = new_loc_list (loc_descriptor (varloc),
10245                            node->label, node->next->label, secname, 1);
10246       node = node->next;
10247
10248       for (; node->next; node = node->next)
10249         if (NOTE_VAR_LOCATION_LOC (node->var_loc_note) != NULL_RTX)
10250           {
10251             /* The variable has a location between NODE->LABEL and
10252                NODE->NEXT->LABEL.  */
10253             varloc = NOTE_VAR_LOCATION (node->var_loc_note);
10254             add_loc_descr_to_loc_list (&list, loc_descriptor (varloc),
10255                                        node->label, node->next->label, secname);
10256           }
10257
10258       /* If the variable has a location at the last label
10259          it keeps its location until the end of function.  */
10260       if (NOTE_VAR_LOCATION_LOC (node->var_loc_note) != NULL_RTX)
10261         {
10262           char label_id[MAX_ARTIFICIAL_LABEL_BYTES];
10263
10264           varloc = NOTE_VAR_LOCATION (node->var_loc_note);
10265           if (!current_function_decl)
10266             endname = text_end_label;
10267           else
10268             {
10269               ASM_GENERATE_INTERNAL_LABEL (label_id, FUNC_END_LABEL,
10270                                            current_function_funcdef_no);
10271               endname = ggc_strdup (label_id);
10272             }
10273           add_loc_descr_to_loc_list (&list, loc_descriptor (varloc),
10274                                      node->label, endname, secname);
10275         }
10276
10277       /* Finally, add the location list to the DIE, and we are done.  */
10278       add_AT_loc_list (die, attr, list);
10279       return;
10280     }
10281
10282   /* Try to get some constant RTL for this decl, and use that as the value of
10283      the location.  */
10284   
10285   rtl = rtl_for_decl_location (decl);
10286   if (rtl && (CONSTANT_P (rtl) || GET_CODE (rtl) == CONST_STRING))
10287     {
10288       add_const_value_attribute (die, rtl);
10289       return;
10290     }
10291   
10292   /* If we have tried to generate the location otherwise, and it
10293      didn't work out (we wouldn't be here if we did), and we have a one entry
10294      location list, try generating a location from that.  */
10295   if (loc_list && loc_list->first)
10296     {
10297       node = loc_list->first;
10298       descr = loc_descriptor (NOTE_VAR_LOCATION (node->var_loc_note));
10299       if (descr)
10300         {
10301           add_AT_location_description (die, attr, descr);
10302           return;
10303         }
10304     }
10305
10306   /* We couldn't get any rtl, so try directly generating the location
10307      description from the tree.  */
10308   descr = loc_descriptor_from_tree (decl);
10309   if (descr)
10310     {
10311       add_AT_location_description (die, attr, descr);
10312       return;
10313     }
10314 }
10315
10316 /* If we don't have a copy of this variable in memory for some reason (such
10317    as a C++ member constant that doesn't have an out-of-line definition),
10318    we should tell the debugger about the constant value.  */
10319
10320 static void
10321 tree_add_const_value_attribute (dw_die_ref var_die, tree decl)
10322 {
10323   tree init = DECL_INITIAL (decl);
10324   tree type = TREE_TYPE (decl);
10325   rtx rtl;
10326
10327   if (TREE_READONLY (decl) && ! TREE_THIS_VOLATILE (decl) && init)
10328     /* OK */;
10329   else
10330     return;
10331
10332   rtl = rtl_for_decl_init (init, type);
10333   if (rtl)
10334     add_const_value_attribute (var_die, rtl);
10335 }
10336
10337 #ifdef DWARF2_UNWIND_INFO
10338 /* Convert the CFI instructions for the current function into a location
10339    list.  This is used for DW_AT_frame_base when we targeting a dwarf2
10340    consumer that does not support the dwarf3 DW_OP_call_frame_cfa.  */
10341
10342 static dw_loc_list_ref
10343 convert_cfa_to_loc_list (void)
10344 {
10345   dw_fde_ref fde;
10346   dw_loc_list_ref list, *list_tail;
10347   dw_cfi_ref cfi;
10348   dw_cfa_location last_cfa, next_cfa;
10349   const char *start_label, *last_label, *section;
10350
10351   fde = &fde_table[fde_table_in_use - 1];
10352
10353   section = secname_for_decl (current_function_decl);
10354   list_tail = &list;
10355   list = NULL;
10356
10357   next_cfa.reg = INVALID_REGNUM;
10358   next_cfa.offset = 0;
10359   next_cfa.indirect = 0;
10360   next_cfa.base_offset = 0;
10361
10362   start_label = fde->dw_fde_begin;
10363
10364   /* ??? Bald assumption that the CIE opcode list does not contain
10365      advance opcodes.  */
10366   for (cfi = cie_cfi_head; cfi; cfi = cfi->dw_cfi_next)
10367     lookup_cfa_1 (cfi, &next_cfa);
10368
10369   last_cfa = next_cfa;
10370   last_label = start_label;
10371
10372   for (cfi = fde->dw_fde_cfi; cfi; cfi = cfi->dw_cfi_next)
10373     switch (cfi->dw_cfi_opc)
10374       {
10375       case DW_CFA_advance_loc1:
10376       case DW_CFA_advance_loc2:
10377       case DW_CFA_advance_loc4:
10378         if (!cfa_equal_p (&last_cfa, &next_cfa))
10379           {
10380             *list_tail = new_loc_list (build_cfa_loc (&last_cfa), start_label,
10381                                        last_label, section, list == NULL);
10382
10383             list_tail = &(*list_tail)->dw_loc_next;
10384             last_cfa = next_cfa;
10385             start_label = last_label;
10386           }
10387         last_label = cfi->dw_cfi_oprnd1.dw_cfi_addr;
10388         break;
10389
10390       case DW_CFA_advance_loc:
10391         /* The encoding is complex enough that we should never emit this.  */
10392       case DW_CFA_remember_state:
10393       case DW_CFA_restore_state:
10394         /* We don't handle these two in this function.  It would be possible
10395            if it were to be required.  */
10396         gcc_unreachable ();
10397
10398       default:
10399         lookup_cfa_1 (cfi, &next_cfa);
10400         break;
10401       }
10402
10403   if (!cfa_equal_p (&last_cfa, &next_cfa))
10404     {
10405       *list_tail = new_loc_list (build_cfa_loc (&last_cfa), start_label,
10406                                  last_label, section, list == NULL);
10407       list_tail = &(*list_tail)->dw_loc_next;
10408       start_label = last_label;
10409     }
10410   *list_tail = new_loc_list (build_cfa_loc (&next_cfa), start_label,
10411                              fde->dw_fde_end, section, list == NULL);
10412
10413   return list;
10414 }
10415
10416 /* Compute a displacement from the "steady-state frame pointer" to
10417    the CFA, and store it in frame_pointer_cfa_offset.  */
10418
10419 static void
10420 compute_frame_pointer_to_cfa_displacement (void)
10421 {
10422   HOST_WIDE_INT offset;
10423   rtx reg, elim;
10424
10425 #ifdef FRAME_POINTER_CFA_OFFSET
10426   reg = frame_pointer_rtx;
10427   offset = FRAME_POINTER_CFA_OFFSET (current_function_decl);
10428 #else
10429   reg = arg_pointer_rtx;
10430   offset = ARG_POINTER_CFA_OFFSET (current_function_decl);
10431 #endif
10432
10433   elim = eliminate_regs (reg, VOIDmode, NULL_RTX);
10434   if (GET_CODE (elim) == PLUS)
10435     {
10436       offset += INTVAL (XEXP (elim, 1));
10437       elim = XEXP (elim, 0);
10438     }
10439   gcc_assert (elim == (frame_pointer_needed ? hard_frame_pointer_rtx
10440                        : stack_pointer_rtx));
10441
10442   frame_pointer_cfa_offset = -offset;
10443 }
10444 #endif
10445
10446 /* Generate a DW_AT_name attribute given some string value to be included as
10447    the value of the attribute.  */
10448
10449 static void
10450 add_name_attribute (dw_die_ref die, const char *name_string)
10451 {
10452   if (name_string != NULL && *name_string != 0)
10453     {
10454       if (demangle_name_func)
10455         name_string = (*demangle_name_func) (name_string);
10456
10457       add_AT_string (die, DW_AT_name, name_string);
10458     }
10459 }
10460
10461 /* Generate a DW_AT_comp_dir attribute for DIE.  */
10462
10463 static void
10464 add_comp_dir_attribute (dw_die_ref die)
10465 {
10466   const char *wd = get_src_pwd ();
10467   if (wd != NULL)
10468     add_AT_string (die, DW_AT_comp_dir, wd);
10469 }
10470
10471 /* Given a tree node describing an array bound (either lower or upper) output
10472    a representation for that bound.  */
10473
10474 static void
10475 add_bound_info (dw_die_ref subrange_die, enum dwarf_attribute bound_attr, tree bound)
10476 {
10477   switch (TREE_CODE (bound))
10478     {
10479     case ERROR_MARK:
10480       return;
10481
10482     /* All fixed-bounds are represented by INTEGER_CST nodes.  */
10483     case INTEGER_CST:
10484       if (! host_integerp (bound, 0)
10485           || (bound_attr == DW_AT_lower_bound
10486               && (((is_c_family () || is_java ()) &&  integer_zerop (bound))
10487                   || (is_fortran () && integer_onep (bound)))))
10488         /* Use the default.  */
10489         ;
10490       else
10491         add_AT_unsigned (subrange_die, bound_attr, tree_low_cst (bound, 0));
10492       break;
10493
10494     case CONVERT_EXPR:
10495     case NOP_EXPR:
10496     case NON_LVALUE_EXPR:
10497     case VIEW_CONVERT_EXPR:
10498       add_bound_info (subrange_die, bound_attr, TREE_OPERAND (bound, 0));
10499       break;
10500
10501     case SAVE_EXPR:
10502       break;
10503
10504     case VAR_DECL:
10505     case PARM_DECL:
10506     case RESULT_DECL:
10507       {
10508         dw_die_ref decl_die = lookup_decl_die (bound);
10509
10510         /* ??? Can this happen, or should the variable have been bound
10511            first?  Probably it can, since I imagine that we try to create
10512            the types of parameters in the order in which they exist in
10513            the list, and won't have created a forward reference to a
10514            later parameter.  */
10515         if (decl_die != NULL)
10516           add_AT_die_ref (subrange_die, bound_attr, decl_die);
10517         break;
10518       }
10519
10520     default:
10521       {
10522         /* Otherwise try to create a stack operation procedure to
10523            evaluate the value of the array bound.  */
10524
10525         dw_die_ref ctx, decl_die;
10526         dw_loc_descr_ref loc;
10527
10528         loc = loc_descriptor_from_tree (bound);
10529         if (loc == NULL)
10530           break;
10531
10532         if (current_function_decl == 0)
10533           ctx = comp_unit_die;
10534         else
10535           ctx = lookup_decl_die (current_function_decl);
10536
10537         decl_die = new_die (DW_TAG_variable, ctx, bound);
10538         add_AT_flag (decl_die, DW_AT_artificial, 1);
10539         add_type_attribute (decl_die, TREE_TYPE (bound), 1, 0, ctx);
10540         add_AT_loc (decl_die, DW_AT_location, loc);
10541
10542         add_AT_die_ref (subrange_die, bound_attr, decl_die);
10543         break;
10544       }
10545     }
10546 }
10547
10548 /* Note that the block of subscript information for an array type also
10549    includes information about the element type of type given array type.  */
10550
10551 static void
10552 add_subscript_info (dw_die_ref type_die, tree type)
10553 {
10554 #ifndef MIPS_DEBUGGING_INFO
10555   unsigned dimension_number;
10556 #endif
10557   tree lower, upper;
10558   dw_die_ref subrange_die;
10559
10560   /* The GNU compilers represent multidimensional array types as sequences of
10561      one dimensional array types whose element types are themselves array
10562      types.  Here we squish that down, so that each multidimensional array
10563      type gets only one array_type DIE in the Dwarf debugging info. The draft
10564      Dwarf specification say that we are allowed to do this kind of
10565      compression in C (because there is no difference between an array or
10566      arrays and a multidimensional array in C) but for other source languages
10567      (e.g. Ada) we probably shouldn't do this.  */
10568
10569   /* ??? The SGI dwarf reader fails for multidimensional arrays with a
10570      const enum type.  E.g. const enum machine_mode insn_operand_mode[2][10].
10571      We work around this by disabling this feature.  See also
10572      gen_array_type_die.  */
10573 #ifndef MIPS_DEBUGGING_INFO
10574   for (dimension_number = 0;
10575        TREE_CODE (type) == ARRAY_TYPE;
10576        type = TREE_TYPE (type), dimension_number++)
10577 #endif
10578     {
10579       tree domain = TYPE_DOMAIN (type);
10580
10581       /* Arrays come in three flavors: Unspecified bounds, fixed bounds,
10582          and (in GNU C only) variable bounds.  Handle all three forms
10583          here.  */
10584       subrange_die = new_die (DW_TAG_subrange_type, type_die, NULL);
10585       if (domain)
10586         {
10587           /* We have an array type with specified bounds.  */
10588           lower = TYPE_MIN_VALUE (domain);
10589           upper = TYPE_MAX_VALUE (domain);
10590
10591           /* Define the index type.  */
10592           if (TREE_TYPE (domain))
10593             {
10594               /* ??? This is probably an Ada unnamed subrange type.  Ignore the
10595                  TREE_TYPE field.  We can't emit debug info for this
10596                  because it is an unnamed integral type.  */
10597               if (TREE_CODE (domain) == INTEGER_TYPE
10598                   && TYPE_NAME (domain) == NULL_TREE
10599                   && TREE_CODE (TREE_TYPE (domain)) == INTEGER_TYPE
10600                   && TYPE_NAME (TREE_TYPE (domain)) == NULL_TREE)
10601                 ;
10602               else
10603                 add_type_attribute (subrange_die, TREE_TYPE (domain), 0, 0,
10604                                     type_die);
10605             }
10606
10607           /* ??? If upper is NULL, the array has unspecified length,
10608              but it does have a lower bound.  This happens with Fortran
10609                dimension arr(N:*)
10610              Since the debugger is definitely going to need to know N
10611              to produce useful results, go ahead and output the lower
10612              bound solo, and hope the debugger can cope.  */
10613
10614           add_bound_info (subrange_die, DW_AT_lower_bound, lower);
10615           if (upper)
10616             add_bound_info (subrange_die, DW_AT_upper_bound, upper);
10617         }
10618
10619       /* Otherwise we have an array type with an unspecified length.  The
10620          DWARF-2 spec does not say how to handle this; let's just leave out the
10621          bounds.  */
10622     }
10623 }
10624
10625 static void
10626 add_byte_size_attribute (dw_die_ref die, tree tree_node)
10627 {
10628   unsigned size;
10629
10630   switch (TREE_CODE (tree_node))
10631     {
10632     case ERROR_MARK:
10633       size = 0;
10634       break;
10635     case ENUMERAL_TYPE:
10636     case RECORD_TYPE:
10637     case UNION_TYPE:
10638     case QUAL_UNION_TYPE:
10639       size = int_size_in_bytes (tree_node);
10640       break;
10641     case FIELD_DECL:
10642       /* For a data member of a struct or union, the DW_AT_byte_size is
10643          generally given as the number of bytes normally allocated for an
10644          object of the *declared* type of the member itself.  This is true
10645          even for bit-fields.  */
10646       size = simple_type_size_in_bits (field_type (tree_node)) / BITS_PER_UNIT;
10647       break;
10648     default:
10649       gcc_unreachable ();
10650     }
10651
10652   /* Note that `size' might be -1 when we get to this point.  If it is, that
10653      indicates that the byte size of the entity in question is variable.  We
10654      have no good way of expressing this fact in Dwarf at the present time,
10655      so just let the -1 pass on through.  */
10656   add_AT_unsigned (die, DW_AT_byte_size, size);
10657 }
10658
10659 /* For a FIELD_DECL node which represents a bit-field, output an attribute
10660    which specifies the distance in bits from the highest order bit of the
10661    "containing object" for the bit-field to the highest order bit of the
10662    bit-field itself.
10663
10664    For any given bit-field, the "containing object" is a hypothetical object
10665    (of some integral or enum type) within which the given bit-field lives.  The
10666    type of this hypothetical "containing object" is always the same as the
10667    declared type of the individual bit-field itself.  The determination of the
10668    exact location of the "containing object" for a bit-field is rather
10669    complicated.  It's handled by the `field_byte_offset' function (above).
10670
10671    Note that it is the size (in bytes) of the hypothetical "containing object"
10672    which will be given in the DW_AT_byte_size attribute for this bit-field.
10673    (See `byte_size_attribute' above).  */
10674
10675 static inline void
10676 add_bit_offset_attribute (dw_die_ref die, tree decl)
10677 {
10678   HOST_WIDE_INT object_offset_in_bytes = field_byte_offset (decl);
10679   tree type = DECL_BIT_FIELD_TYPE (decl);
10680   HOST_WIDE_INT bitpos_int;
10681   HOST_WIDE_INT highest_order_object_bit_offset;
10682   HOST_WIDE_INT highest_order_field_bit_offset;
10683   HOST_WIDE_INT unsigned bit_offset;
10684
10685   /* Must be a field and a bit field.  */
10686   gcc_assert (type && TREE_CODE (decl) == FIELD_DECL);
10687
10688   /* We can't yet handle bit-fields whose offsets are variable, so if we
10689      encounter such things, just return without generating any attribute
10690      whatsoever.  Likewise for variable or too large size.  */
10691   if (! host_integerp (bit_position (decl), 0)
10692       || ! host_integerp (DECL_SIZE (decl), 1))
10693     return;
10694
10695   bitpos_int = int_bit_position (decl);
10696
10697   /* Note that the bit offset is always the distance (in bits) from the
10698      highest-order bit of the "containing object" to the highest-order bit of
10699      the bit-field itself.  Since the "high-order end" of any object or field
10700      is different on big-endian and little-endian machines, the computation
10701      below must take account of these differences.  */
10702   highest_order_object_bit_offset = object_offset_in_bytes * BITS_PER_UNIT;
10703   highest_order_field_bit_offset = bitpos_int;
10704
10705   if (! BYTES_BIG_ENDIAN)
10706     {
10707       highest_order_field_bit_offset += tree_low_cst (DECL_SIZE (decl), 0);
10708       highest_order_object_bit_offset += simple_type_size_in_bits (type);
10709     }
10710
10711   bit_offset
10712     = (! BYTES_BIG_ENDIAN
10713        ? highest_order_object_bit_offset - highest_order_field_bit_offset
10714        : highest_order_field_bit_offset - highest_order_object_bit_offset);
10715
10716   add_AT_unsigned (die, DW_AT_bit_offset, bit_offset);
10717 }
10718
10719 /* For a FIELD_DECL node which represents a bit field, output an attribute
10720    which specifies the length in bits of the given field.  */
10721
10722 static inline void
10723 add_bit_size_attribute (dw_die_ref die, tree decl)
10724 {
10725   /* Must be a field and a bit field.  */
10726   gcc_assert (TREE_CODE (decl) == FIELD_DECL
10727               && DECL_BIT_FIELD_TYPE (decl));
10728
10729   if (host_integerp (DECL_SIZE (decl), 1))
10730     add_AT_unsigned (die, DW_AT_bit_size, tree_low_cst (DECL_SIZE (decl), 1));
10731 }
10732
10733 /* If the compiled language is ANSI C, then add a 'prototyped'
10734    attribute, if arg types are given for the parameters of a function.  */
10735
10736 static inline void
10737 add_prototyped_attribute (dw_die_ref die, tree func_type)
10738 {
10739   if (get_AT_unsigned (comp_unit_die, DW_AT_language) == DW_LANG_C89
10740       && TYPE_ARG_TYPES (func_type) != NULL)
10741     add_AT_flag (die, DW_AT_prototyped, 1);
10742 }
10743
10744 /* Add an 'abstract_origin' attribute below a given DIE.  The DIE is found
10745    by looking in either the type declaration or object declaration
10746    equate table.  */
10747
10748 static inline void
10749 add_abstract_origin_attribute (dw_die_ref die, tree origin)
10750 {
10751   dw_die_ref origin_die = NULL;
10752
10753   if (TREE_CODE (origin) != FUNCTION_DECL)
10754     {
10755       /* We may have gotten separated from the block for the inlined
10756          function, if we're in an exception handler or some such; make
10757          sure that the abstract function has been written out.
10758
10759          Doing this for nested functions is wrong, however; functions are
10760          distinct units, and our context might not even be inline.  */
10761       tree fn = origin;
10762
10763       if (TYPE_P (fn))
10764         fn = TYPE_STUB_DECL (fn);
10765       
10766       fn = decl_function_context (fn);
10767       if (fn)
10768         dwarf2out_abstract_function (fn);
10769     }
10770
10771   if (DECL_P (origin))
10772     origin_die = lookup_decl_die (origin);
10773   else if (TYPE_P (origin))
10774     origin_die = lookup_type_die (origin);
10775
10776   /* XXX: Functions that are never lowered don't always have correct block
10777      trees (in the case of java, they simply have no block tree, in some other
10778      languages).  For these functions, there is nothing we can really do to
10779      output correct debug info for inlined functions in all cases.  Rather
10780      than die, we'll just produce deficient debug info now, in that we will
10781      have variables without a proper abstract origin.  In the future, when all
10782      functions are lowered, we should re-add a gcc_assert (origin_die)
10783      here.  */
10784
10785   if (origin_die)
10786       add_AT_die_ref (die, DW_AT_abstract_origin, origin_die);
10787 }
10788
10789 /* We do not currently support the pure_virtual attribute.  */
10790
10791 static inline void
10792 add_pure_or_virtual_attribute (dw_die_ref die, tree func_decl)
10793 {
10794   if (DECL_VINDEX (func_decl))
10795     {
10796       add_AT_unsigned (die, DW_AT_virtuality, DW_VIRTUALITY_virtual);
10797
10798       if (host_integerp (DECL_VINDEX (func_decl), 0))
10799         add_AT_loc (die, DW_AT_vtable_elem_location,
10800                     new_loc_descr (DW_OP_constu,
10801                                    tree_low_cst (DECL_VINDEX (func_decl), 0),
10802                                    0));
10803
10804       /* GNU extension: Record what type this method came from originally.  */
10805       if (debug_info_level > DINFO_LEVEL_TERSE)
10806         add_AT_die_ref (die, DW_AT_containing_type,
10807                         lookup_type_die (DECL_CONTEXT (func_decl)));
10808     }
10809 }
10810 \f
10811 /* Add source coordinate attributes for the given decl.  */
10812
10813 static void
10814 add_src_coords_attributes (dw_die_ref die, tree decl)
10815 {
10816   expanded_location s = expand_location (DECL_SOURCE_LOCATION (decl));
10817   unsigned file_index = lookup_filename (s.file);
10818
10819   add_AT_unsigned (die, DW_AT_decl_file, file_index);
10820   add_AT_unsigned (die, DW_AT_decl_line, s.line);
10821 }
10822
10823 /* Add a DW_AT_name attribute and source coordinate attribute for the
10824    given decl, but only if it actually has a name.  */
10825
10826 static void
10827 add_name_and_src_coords_attributes (dw_die_ref die, tree decl)
10828 {
10829   tree decl_name;
10830
10831   decl_name = DECL_NAME (decl);
10832   if (decl_name != NULL && IDENTIFIER_POINTER (decl_name) != NULL)
10833     {
10834       add_name_attribute (die, dwarf2_name (decl, 0));
10835       if (! DECL_ARTIFICIAL (decl))
10836         add_src_coords_attributes (die, decl);
10837
10838       if ((TREE_CODE (decl) == FUNCTION_DECL || TREE_CODE (decl) == VAR_DECL)
10839           && TREE_PUBLIC (decl)
10840           && DECL_ASSEMBLER_NAME (decl) != DECL_NAME (decl)
10841           && !DECL_ABSTRACT (decl)
10842           && !(TREE_CODE (decl) == VAR_DECL && DECL_REGISTER (decl)))
10843         add_AT_string (die, DW_AT_MIPS_linkage_name,
10844                        IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl)));
10845     }
10846
10847 #ifdef VMS_DEBUGGING_INFO
10848   /* Get the function's name, as described by its RTL.  This may be different
10849      from the DECL_NAME name used in the source file.  */
10850   if (TREE_CODE (decl) == FUNCTION_DECL && TREE_ASM_WRITTEN (decl))
10851     {
10852       add_AT_addr (die, DW_AT_VMS_rtnbeg_pd_address,
10853                    XEXP (DECL_RTL (decl), 0));
10854       VEC_safe_push (tree, gc, used_rtx_array, XEXP (DECL_RTL (decl), 0));
10855     }
10856 #endif
10857 }
10858
10859 /* Push a new declaration scope.  */
10860
10861 static void
10862 push_decl_scope (tree scope)
10863 {
10864   VEC_safe_push (tree, gc, decl_scope_table, scope);
10865 }
10866
10867 /* Pop a declaration scope.  */
10868
10869 static inline void
10870 pop_decl_scope (void)
10871 {
10872   VEC_pop (tree, decl_scope_table);
10873 }
10874
10875 /* Return the DIE for the scope that immediately contains this type.
10876    Non-named types get global scope.  Named types nested in other
10877    types get their containing scope if it's open, or global scope
10878    otherwise.  All other types (i.e. function-local named types) get
10879    the current active scope.  */
10880
10881 static dw_die_ref
10882 scope_die_for (tree t, dw_die_ref context_die)
10883 {
10884   dw_die_ref scope_die = NULL;
10885   tree containing_scope;
10886   int i;
10887
10888   /* Non-types always go in the current scope.  */
10889   gcc_assert (TYPE_P (t));
10890
10891   containing_scope = TYPE_CONTEXT (t);
10892
10893   /* Use the containing namespace if it was passed in (for a declaration).  */
10894   if (containing_scope && TREE_CODE (containing_scope) == NAMESPACE_DECL)
10895     {
10896       if (context_die == lookup_decl_die (containing_scope))
10897         /* OK */;
10898       else
10899         containing_scope = NULL_TREE;
10900     }
10901
10902   /* Ignore function type "scopes" from the C frontend.  They mean that
10903      a tagged type is local to a parmlist of a function declarator, but
10904      that isn't useful to DWARF.  */
10905   if (containing_scope && TREE_CODE (containing_scope) == FUNCTION_TYPE)
10906     containing_scope = NULL_TREE;
10907
10908   if (containing_scope == NULL_TREE)
10909     scope_die = comp_unit_die;
10910   else if (TYPE_P (containing_scope))
10911     {
10912       /* For types, we can just look up the appropriate DIE.  But
10913          first we check to see if we're in the middle of emitting it
10914          so we know where the new DIE should go.  */
10915       for (i = VEC_length (tree, decl_scope_table) - 1; i >= 0; --i)
10916         if (VEC_index (tree, decl_scope_table, i) == containing_scope)
10917           break;
10918
10919       if (i < 0)
10920         {
10921           gcc_assert (debug_info_level <= DINFO_LEVEL_TERSE
10922                       || TREE_ASM_WRITTEN (containing_scope));
10923
10924           /* If none of the current dies are suitable, we get file scope.  */
10925           scope_die = comp_unit_die;
10926         }
10927       else
10928         scope_die = lookup_type_die (containing_scope);
10929     }
10930   else
10931     scope_die = context_die;
10932
10933   return scope_die;
10934 }
10935
10936 /* Returns nonzero if CONTEXT_DIE is internal to a function.  */
10937
10938 static inline int
10939 local_scope_p (dw_die_ref context_die)
10940 {
10941   for (; context_die; context_die = context_die->die_parent)
10942     if (context_die->die_tag == DW_TAG_inlined_subroutine
10943         || context_die->die_tag == DW_TAG_subprogram)
10944       return 1;
10945
10946   return 0;
10947 }
10948
10949 /* Returns nonzero if CONTEXT_DIE is a class or namespace, for deciding
10950    whether or not to treat a DIE in this context as a declaration.  */
10951
10952 static inline int
10953 class_or_namespace_scope_p (dw_die_ref context_die)
10954 {
10955   return (context_die
10956           && (context_die->die_tag == DW_TAG_structure_type
10957               || context_die->die_tag == DW_TAG_union_type
10958               || context_die->die_tag == DW_TAG_namespace));
10959 }
10960
10961 /* Many forms of DIEs require a "type description" attribute.  This
10962    routine locates the proper "type descriptor" die for the type given
10963    by 'type', and adds a DW_AT_type attribute below the given die.  */
10964
10965 static void
10966 add_type_attribute (dw_die_ref object_die, tree type, int decl_const,
10967                     int decl_volatile, dw_die_ref context_die)
10968 {
10969   enum tree_code code  = TREE_CODE (type);
10970   dw_die_ref type_die  = NULL;
10971
10972   /* ??? If this type is an unnamed subrange type of an integral or
10973      floating-point type, use the inner type.  This is because we have no
10974      support for unnamed types in base_type_die.  This can happen if this is
10975      an Ada subrange type.  Correct solution is emit a subrange type die.  */
10976   if ((code == INTEGER_TYPE || code == REAL_TYPE)
10977       && TREE_TYPE (type) != 0 && TYPE_NAME (type) == 0)
10978     type = TREE_TYPE (type), code = TREE_CODE (type);
10979
10980   if (code == ERROR_MARK
10981       /* Handle a special case.  For functions whose return type is void, we
10982          generate *no* type attribute.  (Note that no object may have type
10983          `void', so this only applies to function return types).  */
10984       || code == VOID_TYPE)
10985     return;
10986
10987   type_die = modified_type_die (type,
10988                                 decl_const || TYPE_READONLY (type),
10989                                 decl_volatile || TYPE_VOLATILE (type),
10990                                 context_die);
10991
10992   if (type_die != NULL)
10993     add_AT_die_ref (object_die, DW_AT_type, type_die);
10994 }
10995
10996 /* Given an object die, add the calling convention attribute for the
10997    function call type.  */
10998 static void
10999 add_calling_convention_attribute (dw_die_ref subr_die, tree type)
11000 {
11001   enum dwarf_calling_convention value = DW_CC_normal;
11002
11003   value = targetm.dwarf_calling_convention (type);
11004
11005   /* Only add the attribute if the backend requests it, and
11006      is not DW_CC_normal.  */
11007   if (value && (value != DW_CC_normal))
11008     add_AT_unsigned (subr_die, DW_AT_calling_convention, value);
11009 }
11010
11011 /* Given a tree pointer to a struct, class, union, or enum type node, return
11012    a pointer to the (string) tag name for the given type, or zero if the type
11013    was declared without a tag.  */
11014
11015 static const char *
11016 type_tag (tree type)
11017 {
11018   const char *name = 0;
11019
11020   if (TYPE_NAME (type) != 0)
11021     {
11022       tree t = 0;
11023
11024       /* Find the IDENTIFIER_NODE for the type name.  */
11025       if (TREE_CODE (TYPE_NAME (type)) == IDENTIFIER_NODE)
11026         t = TYPE_NAME (type);
11027
11028       /* The g++ front end makes the TYPE_NAME of *each* tagged type point to
11029          a TYPE_DECL node, regardless of whether or not a `typedef' was
11030          involved.  */
11031       else if (TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
11032                && ! DECL_IGNORED_P (TYPE_NAME (type)))
11033         t = DECL_NAME (TYPE_NAME (type));
11034
11035       /* Now get the name as a string, or invent one.  */
11036       if (t != 0)
11037         name = IDENTIFIER_POINTER (t);
11038     }
11039
11040   return (name == 0 || *name == '\0') ? 0 : name;
11041 }
11042
11043 /* Return the type associated with a data member, make a special check
11044    for bit field types.  */
11045
11046 static inline tree
11047 member_declared_type (tree member)
11048 {
11049   return (DECL_BIT_FIELD_TYPE (member)
11050           ? DECL_BIT_FIELD_TYPE (member) : TREE_TYPE (member));
11051 }
11052
11053 /* Get the decl's label, as described by its RTL. This may be different
11054    from the DECL_NAME name used in the source file.  */
11055
11056 #if 0
11057 static const char *
11058 decl_start_label (tree decl)
11059 {
11060   rtx x;
11061   const char *fnname;
11062
11063   x = DECL_RTL (decl);
11064   gcc_assert (MEM_P (x));
11065
11066   x = XEXP (x, 0);
11067   gcc_assert (GET_CODE (x) == SYMBOL_REF);
11068
11069   fnname = XSTR (x, 0);
11070   return fnname;
11071 }
11072 #endif
11073 \f
11074 /* These routines generate the internal representation of the DIE's for
11075    the compilation unit.  Debugging information is collected by walking
11076    the declaration trees passed in from dwarf2out_decl().  */
11077
11078 static void
11079 gen_array_type_die (tree type, dw_die_ref context_die)
11080 {
11081   dw_die_ref scope_die = scope_die_for (type, context_die);
11082   dw_die_ref array_die;
11083   tree element_type;
11084
11085   /* ??? The SGI dwarf reader fails for array of array of enum types unless
11086      the inner array type comes before the outer array type.  Thus we must
11087      call gen_type_die before we call new_die.  See below also.  */
11088 #ifdef MIPS_DEBUGGING_INFO
11089   gen_type_die (TREE_TYPE (type), context_die);
11090 #endif
11091
11092   array_die = new_die (DW_TAG_array_type, scope_die, type);
11093   add_name_attribute (array_die, type_tag (type));
11094   equate_type_number_to_die (type, array_die);
11095
11096   if (TREE_CODE (type) == VECTOR_TYPE)
11097     {
11098       /* The frontend feeds us a representation for the vector as a struct
11099          containing an array.  Pull out the array type.  */
11100       type = TREE_TYPE (TYPE_FIELDS (TYPE_DEBUG_REPRESENTATION_TYPE (type)));
11101       add_AT_flag (array_die, DW_AT_GNU_vector, 1);
11102     }
11103
11104 #if 0
11105   /* We default the array ordering.  SDB will probably do
11106      the right things even if DW_AT_ordering is not present.  It's not even
11107      an issue until we start to get into multidimensional arrays anyway.  If
11108      SDB is ever caught doing the Wrong Thing for multi-dimensional arrays,
11109      then we'll have to put the DW_AT_ordering attribute back in.  (But if
11110      and when we find out that we need to put these in, we will only do so
11111      for multidimensional arrays.  */
11112   add_AT_unsigned (array_die, DW_AT_ordering, DW_ORD_row_major);
11113 #endif
11114
11115 #ifdef MIPS_DEBUGGING_INFO
11116   /* The SGI compilers handle arrays of unknown bound by setting
11117      AT_declaration and not emitting any subrange DIEs.  */
11118   if (! TYPE_DOMAIN (type))
11119     add_AT_flag (array_die, DW_AT_declaration, 1);
11120   else
11121 #endif
11122     add_subscript_info (array_die, type);
11123
11124   /* Add representation of the type of the elements of this array type.  */
11125   element_type = TREE_TYPE (type);
11126
11127   /* ??? The SGI dwarf reader fails for multidimensional arrays with a
11128      const enum type.  E.g. const enum machine_mode insn_operand_mode[2][10].
11129      We work around this by disabling this feature.  See also
11130      add_subscript_info.  */
11131 #ifndef MIPS_DEBUGGING_INFO
11132   while (TREE_CODE (element_type) == ARRAY_TYPE)
11133     element_type = TREE_TYPE (element_type);
11134
11135   gen_type_die (element_type, context_die);
11136 #endif
11137
11138   add_type_attribute (array_die, element_type, 0, 0, context_die);
11139 }
11140
11141 #if 0
11142 static void
11143 gen_entry_point_die (tree decl, dw_die_ref context_die)
11144 {
11145   tree origin = decl_ultimate_origin (decl);
11146   dw_die_ref decl_die = new_die (DW_TAG_entry_point, context_die, decl);
11147
11148   if (origin != NULL)
11149     add_abstract_origin_attribute (decl_die, origin);
11150   else
11151     {
11152       add_name_and_src_coords_attributes (decl_die, decl);
11153       add_type_attribute (decl_die, TREE_TYPE (TREE_TYPE (decl)),
11154                           0, 0, context_die);
11155     }
11156
11157   if (DECL_ABSTRACT (decl))
11158     equate_decl_number_to_die (decl, decl_die);
11159   else
11160     add_AT_lbl_id (decl_die, DW_AT_low_pc, decl_start_label (decl));
11161 }
11162 #endif
11163
11164 /* Walk through the list of incomplete types again, trying once more to
11165    emit full debugging info for them.  */
11166
11167 static void
11168 retry_incomplete_types (void)
11169 {
11170   int i;
11171
11172   for (i = VEC_length (tree, incomplete_types) - 1; i >= 0; i--)
11173     gen_type_die (VEC_index (tree, incomplete_types, i), comp_unit_die);
11174 }
11175
11176 /* Generate a DIE to represent an inlined instance of an enumeration type.  */
11177
11178 static void
11179 gen_inlined_enumeration_type_die (tree type, dw_die_ref context_die)
11180 {
11181   dw_die_ref type_die = new_die (DW_TAG_enumeration_type, context_die, type);
11182
11183   /* We do not check for TREE_ASM_WRITTEN (type) being set, as the type may
11184      be incomplete and such types are not marked.  */
11185   add_abstract_origin_attribute (type_die, type);
11186 }
11187
11188 /* Generate a DIE to represent an inlined instance of a structure type.  */
11189
11190 static void
11191 gen_inlined_structure_type_die (tree type, dw_die_ref context_die)
11192 {
11193   dw_die_ref type_die = new_die (DW_TAG_structure_type, context_die, type);
11194
11195   /* We do not check for TREE_ASM_WRITTEN (type) being set, as the type may
11196      be incomplete and such types are not marked.  */
11197   add_abstract_origin_attribute (type_die, type);
11198 }
11199
11200 /* Generate a DIE to represent an inlined instance of a union type.  */
11201
11202 static void
11203 gen_inlined_union_type_die (tree type, dw_die_ref context_die)
11204 {
11205   dw_die_ref type_die = new_die (DW_TAG_union_type, context_die, type);
11206
11207   /* We do not check for TREE_ASM_WRITTEN (type) being set, as the type may
11208      be incomplete and such types are not marked.  */
11209   add_abstract_origin_attribute (type_die, type);
11210 }
11211
11212 /* Generate a DIE to represent an enumeration type.  Note that these DIEs
11213    include all of the information about the enumeration values also. Each
11214    enumerated type name/value is listed as a child of the enumerated type
11215    DIE.  */
11216
11217 static dw_die_ref
11218 gen_enumeration_type_die (tree type, dw_die_ref context_die)
11219 {
11220   dw_die_ref type_die = lookup_type_die (type);
11221
11222   if (type_die == NULL)
11223     {
11224       type_die = new_die (DW_TAG_enumeration_type,
11225                           scope_die_for (type, context_die), type);
11226       equate_type_number_to_die (type, type_die);
11227       add_name_attribute (type_die, type_tag (type));
11228     }
11229   else if (! TYPE_SIZE (type))
11230     return type_die;
11231   else
11232     remove_AT (type_die, DW_AT_declaration);
11233
11234   /* Handle a GNU C/C++ extension, i.e. incomplete enum types.  If the
11235      given enum type is incomplete, do not generate the DW_AT_byte_size
11236      attribute or the DW_AT_element_list attribute.  */
11237   if (TYPE_SIZE (type))
11238     {
11239       tree link;
11240
11241       TREE_ASM_WRITTEN (type) = 1;
11242       add_byte_size_attribute (type_die, type);
11243       if (TYPE_STUB_DECL (type) != NULL_TREE)
11244         add_src_coords_attributes (type_die, TYPE_STUB_DECL (type));
11245
11246       /* If the first reference to this type was as the return type of an
11247          inline function, then it may not have a parent.  Fix this now.  */
11248       if (type_die->die_parent == NULL)
11249         add_child_die (scope_die_for (type, context_die), type_die);
11250
11251       for (link = TYPE_VALUES (type);
11252            link != NULL; link = TREE_CHAIN (link))
11253         {
11254           dw_die_ref enum_die = new_die (DW_TAG_enumerator, type_die, link);
11255           tree value = TREE_VALUE (link);
11256
11257           add_name_attribute (enum_die,
11258                               IDENTIFIER_POINTER (TREE_PURPOSE (link)));
11259
11260           if (host_integerp (value, TYPE_UNSIGNED (TREE_TYPE (value))))
11261             /* DWARF2 does not provide a way of indicating whether or
11262                not enumeration constants are signed or unsigned.  GDB
11263                always assumes the values are signed, so we output all
11264                values as if they were signed.  That means that
11265                enumeration constants with very large unsigned values
11266                will appear to have negative values in the debugger.  */
11267             add_AT_int (enum_die, DW_AT_const_value,
11268                         tree_low_cst (value, tree_int_cst_sgn (value) > 0));
11269         }
11270     }
11271   else
11272     add_AT_flag (type_die, DW_AT_declaration, 1);
11273
11274   return type_die;
11275 }
11276
11277 /* Generate a DIE to represent either a real live formal parameter decl or to
11278    represent just the type of some formal parameter position in some function
11279    type.
11280
11281    Note that this routine is a bit unusual because its argument may be a
11282    ..._DECL node (i.e. either a PARM_DECL or perhaps a VAR_DECL which
11283    represents an inlining of some PARM_DECL) or else some sort of a ..._TYPE
11284    node.  If it's the former then this function is being called to output a
11285    DIE to represent a formal parameter object (or some inlining thereof).  If
11286    it's the latter, then this function is only being called to output a
11287    DW_TAG_formal_parameter DIE to stand as a placeholder for some formal
11288    argument type of some subprogram type.  */
11289
11290 static dw_die_ref
11291 gen_formal_parameter_die (tree node, dw_die_ref context_die)
11292 {
11293   dw_die_ref parm_die
11294     = new_die (DW_TAG_formal_parameter, context_die, node);
11295   tree origin;
11296
11297   switch (TREE_CODE_CLASS (TREE_CODE (node)))
11298     {
11299     case tcc_declaration:
11300       origin = decl_ultimate_origin (node);
11301       if (origin != NULL)
11302         add_abstract_origin_attribute (parm_die, origin);
11303       else
11304         {
11305           add_name_and_src_coords_attributes (parm_die, node);
11306           add_type_attribute (parm_die, TREE_TYPE (node),
11307                               TREE_READONLY (node),
11308                               TREE_THIS_VOLATILE (node),
11309                               context_die);
11310           if (DECL_ARTIFICIAL (node))
11311             add_AT_flag (parm_die, DW_AT_artificial, 1);
11312         }
11313
11314       equate_decl_number_to_die (node, parm_die);
11315       if (! DECL_ABSTRACT (node))
11316         add_location_or_const_value_attribute (parm_die, node, DW_AT_location);
11317
11318       break;
11319
11320     case tcc_type:
11321       /* We were called with some kind of a ..._TYPE node.  */
11322       add_type_attribute (parm_die, node, 0, 0, context_die);
11323       break;
11324
11325     default:
11326       gcc_unreachable ();
11327     }
11328
11329   return parm_die;
11330 }
11331
11332 /* Generate a special type of DIE used as a stand-in for a trailing ellipsis
11333    at the end of an (ANSI prototyped) formal parameters list.  */
11334
11335 static void
11336 gen_unspecified_parameters_die (tree decl_or_type, dw_die_ref context_die)
11337 {
11338   new_die (DW_TAG_unspecified_parameters, context_die, decl_or_type);
11339 }
11340
11341 /* Generate a list of nameless DW_TAG_formal_parameter DIEs (and perhaps a
11342    DW_TAG_unspecified_parameters DIE) to represent the types of the formal
11343    parameters as specified in some function type specification (except for
11344    those which appear as part of a function *definition*).  */
11345
11346 static void
11347 gen_formal_types_die (tree function_or_method_type, dw_die_ref context_die)
11348 {
11349   tree link;
11350   tree formal_type = NULL;
11351   tree first_parm_type;
11352   tree arg;
11353
11354   if (TREE_CODE (function_or_method_type) == FUNCTION_DECL)
11355     {
11356       arg = DECL_ARGUMENTS (function_or_method_type);
11357       function_or_method_type = TREE_TYPE (function_or_method_type);
11358     }
11359   else
11360     arg = NULL_TREE;
11361
11362   first_parm_type = TYPE_ARG_TYPES (function_or_method_type);
11363
11364   /* Make our first pass over the list of formal parameter types and output a
11365      DW_TAG_formal_parameter DIE for each one.  */
11366   for (link = first_parm_type; link; )
11367     {
11368       dw_die_ref parm_die;
11369
11370       formal_type = TREE_VALUE (link);
11371       if (formal_type == void_type_node)
11372         break;
11373
11374       /* Output a (nameless) DIE to represent the formal parameter itself.  */
11375       parm_die = gen_formal_parameter_die (formal_type, context_die);
11376       if ((TREE_CODE (function_or_method_type) == METHOD_TYPE
11377            && link == first_parm_type)
11378           || (arg && DECL_ARTIFICIAL (arg)))
11379         add_AT_flag (parm_die, DW_AT_artificial, 1);
11380
11381       link = TREE_CHAIN (link);
11382       if (arg)
11383         arg = TREE_CHAIN (arg);
11384     }
11385
11386   /* If this function type has an ellipsis, add a
11387      DW_TAG_unspecified_parameters DIE to the end of the parameter list.  */
11388   if (formal_type != void_type_node)
11389     gen_unspecified_parameters_die (function_or_method_type, context_die);
11390
11391   /* Make our second (and final) pass over the list of formal parameter types
11392      and output DIEs to represent those types (as necessary).  */
11393   for (link = TYPE_ARG_TYPES (function_or_method_type);
11394        link && TREE_VALUE (link);
11395        link = TREE_CHAIN (link))
11396     gen_type_die (TREE_VALUE (link), context_die);
11397 }
11398
11399 /* We want to generate the DIE for TYPE so that we can generate the
11400    die for MEMBER, which has been defined; we will need to refer back
11401    to the member declaration nested within TYPE.  If we're trying to
11402    generate minimal debug info for TYPE, processing TYPE won't do the
11403    trick; we need to attach the member declaration by hand.  */
11404
11405 static void
11406 gen_type_die_for_member (tree type, tree member, dw_die_ref context_die)
11407 {
11408   gen_type_die (type, context_die);
11409
11410   /* If we're trying to avoid duplicate debug info, we may not have
11411      emitted the member decl for this function.  Emit it now.  */
11412   if (TYPE_DECL_SUPPRESS_DEBUG (TYPE_STUB_DECL (type))
11413       && ! lookup_decl_die (member))
11414     {
11415       dw_die_ref type_die;
11416       gcc_assert (!decl_ultimate_origin (member));
11417
11418       push_decl_scope (type);
11419       type_die = lookup_type_die (type);
11420       if (TREE_CODE (member) == FUNCTION_DECL)
11421         gen_subprogram_die (member, type_die);
11422       else if (TREE_CODE (member) == FIELD_DECL)
11423         {
11424           /* Ignore the nameless fields that are used to skip bits but handle
11425              C++ anonymous unions and structs.  */
11426           if (DECL_NAME (member) != NULL_TREE
11427               || TREE_CODE (TREE_TYPE (member)) == UNION_TYPE
11428               || TREE_CODE (TREE_TYPE (member)) == RECORD_TYPE)
11429             {
11430               gen_type_die (member_declared_type (member), type_die);
11431               gen_field_die (member, type_die);
11432             }
11433         }
11434       else
11435         gen_variable_die (member, type_die);
11436
11437       pop_decl_scope ();
11438     }
11439 }
11440
11441 /* Generate the DWARF2 info for the "abstract" instance of a function which we
11442    may later generate inlined and/or out-of-line instances of.  */
11443
11444 static void
11445 dwarf2out_abstract_function (tree decl)
11446 {
11447   dw_die_ref old_die;
11448   tree save_fn;
11449   tree context;
11450   int was_abstract = DECL_ABSTRACT (decl);
11451
11452   /* Make sure we have the actual abstract inline, not a clone.  */
11453   decl = DECL_ORIGIN (decl);
11454
11455   old_die = lookup_decl_die (decl);
11456   if (old_die && get_AT (old_die, DW_AT_inline))
11457     /* We've already generated the abstract instance.  */
11458     return;
11459
11460   /* Be sure we've emitted the in-class declaration DIE (if any) first, so
11461      we don't get confused by DECL_ABSTRACT.  */
11462   if (debug_info_level > DINFO_LEVEL_TERSE)
11463     {
11464       context = decl_class_context (decl);
11465       if (context)
11466         gen_type_die_for_member
11467           (context, decl, decl_function_context (decl) ? NULL : comp_unit_die);
11468     }
11469
11470   /* Pretend we've just finished compiling this function.  */
11471   save_fn = current_function_decl;
11472   current_function_decl = decl;
11473
11474   set_decl_abstract_flags (decl, 1);
11475   dwarf2out_decl (decl);
11476   if (! was_abstract)
11477     set_decl_abstract_flags (decl, 0);
11478
11479   current_function_decl = save_fn;
11480 }
11481
11482 /* Generate a DIE to represent a declared function (either file-scope or
11483    block-local).  */
11484
11485 static void
11486 gen_subprogram_die (tree decl, dw_die_ref context_die)
11487 {
11488   char label_id[MAX_ARTIFICIAL_LABEL_BYTES];
11489   tree origin = decl_ultimate_origin (decl);
11490   dw_die_ref subr_die;
11491   tree fn_arg_types;
11492   tree outer_scope;
11493   dw_die_ref old_die = lookup_decl_die (decl);
11494   int declaration = (current_function_decl != decl
11495                      || class_or_namespace_scope_p (context_die));
11496
11497   /* It is possible to have both DECL_ABSTRACT and DECLARATION be true if we
11498      started to generate the abstract instance of an inline, decided to output
11499      its containing class, and proceeded to emit the declaration of the inline
11500      from the member list for the class.  If so, DECLARATION takes priority;
11501      we'll get back to the abstract instance when done with the class.  */
11502
11503   /* The class-scope declaration DIE must be the primary DIE.  */
11504   if (origin && declaration && class_or_namespace_scope_p (context_die))
11505     {
11506       origin = NULL;
11507       gcc_assert (!old_die);
11508     }
11509
11510   /* Now that the C++ front end lazily declares artificial member fns, we
11511      might need to retrofit the declaration into its class.  */
11512   if (!declaration && !origin && !old_die
11513       && DECL_CONTEXT (decl) && TYPE_P (DECL_CONTEXT (decl))
11514       && !class_or_namespace_scope_p (context_die)
11515       && debug_info_level > DINFO_LEVEL_TERSE)
11516     old_die = force_decl_die (decl);
11517
11518   if (origin != NULL)
11519     {
11520       gcc_assert (!declaration || local_scope_p (context_die));
11521
11522       /* Fixup die_parent for the abstract instance of a nested
11523          inline function.  */
11524       if (old_die && old_die->die_parent == NULL)
11525         add_child_die (context_die, old_die);
11526
11527       subr_die = new_die (DW_TAG_subprogram, context_die, decl);
11528       add_abstract_origin_attribute (subr_die, origin);
11529     }
11530   else if (old_die)
11531     {
11532       expanded_location s = expand_location (DECL_SOURCE_LOCATION (decl));
11533       unsigned file_index = lookup_filename (s.file);
11534
11535       if (!get_AT_flag (old_die, DW_AT_declaration)
11536           /* We can have a normal definition following an inline one in the
11537              case of redefinition of GNU C extern inlines.
11538              It seems reasonable to use AT_specification in this case.  */
11539           && !get_AT (old_die, DW_AT_inline))
11540         {
11541           /* Detect and ignore this case, where we are trying to output
11542              something we have already output.  */
11543           return;
11544         }
11545
11546       /* If the definition comes from the same place as the declaration,
11547          maybe use the old DIE.  We always want the DIE for this function
11548          that has the *_pc attributes to be under comp_unit_die so the
11549          debugger can find it.  We also need to do this for abstract
11550          instances of inlines, since the spec requires the out-of-line copy
11551          to have the same parent.  For local class methods, this doesn't
11552          apply; we just use the old DIE.  */
11553       if ((old_die->die_parent == comp_unit_die || context_die == NULL)
11554           && (DECL_ARTIFICIAL (decl)
11555               || (get_AT_unsigned (old_die, DW_AT_decl_file) == file_index
11556                   && (get_AT_unsigned (old_die, DW_AT_decl_line)
11557                       == (unsigned) s.line))))
11558         {
11559           subr_die = old_die;
11560
11561           /* Clear out the declaration attribute and the formal parameters.
11562              Do not remove all children, because it is possible that this
11563              declaration die was forced using force_decl_die(). In such
11564              cases die that forced declaration die (e.g. TAG_imported_module)
11565              is one of the children that we do not want to remove.  */
11566           remove_AT (subr_die, DW_AT_declaration);
11567           remove_child_TAG (subr_die, DW_TAG_formal_parameter);
11568         }
11569       else
11570         {
11571           subr_die = new_die (DW_TAG_subprogram, context_die, decl);
11572           add_AT_specification (subr_die, old_die);
11573           if (get_AT_unsigned (old_die, DW_AT_decl_file) != file_index)
11574             add_AT_unsigned (subr_die, DW_AT_decl_file, file_index);
11575           if (get_AT_unsigned (old_die, DW_AT_decl_line)
11576               != (unsigned) s.line)
11577             add_AT_unsigned
11578               (subr_die, DW_AT_decl_line, s.line);
11579         }
11580     }
11581   else
11582     {
11583       subr_die = new_die (DW_TAG_subprogram, context_die, decl);
11584
11585       if (TREE_PUBLIC (decl))
11586         add_AT_flag (subr_die, DW_AT_external, 1);
11587
11588       add_name_and_src_coords_attributes (subr_die, decl);
11589       if (debug_info_level > DINFO_LEVEL_TERSE)
11590         {
11591           add_prototyped_attribute (subr_die, TREE_TYPE (decl));
11592           add_type_attribute (subr_die, TREE_TYPE (TREE_TYPE (decl)),
11593                               0, 0, context_die);
11594         }
11595
11596       add_pure_or_virtual_attribute (subr_die, decl);
11597       if (DECL_ARTIFICIAL (decl))
11598         add_AT_flag (subr_die, DW_AT_artificial, 1);
11599
11600       if (TREE_PROTECTED (decl))
11601         add_AT_unsigned (subr_die, DW_AT_accessibility, DW_ACCESS_protected);
11602       else if (TREE_PRIVATE (decl))
11603         add_AT_unsigned (subr_die, DW_AT_accessibility, DW_ACCESS_private);
11604     }
11605
11606   if (declaration)
11607     {
11608       if (!old_die || !get_AT (old_die, DW_AT_inline))
11609         {
11610           add_AT_flag (subr_die, DW_AT_declaration, 1);
11611
11612           /* The first time we see a member function, it is in the context of
11613              the class to which it belongs.  We make sure of this by emitting
11614              the class first.  The next time is the definition, which is
11615              handled above.  The two may come from the same source text.
11616
11617              Note that force_decl_die() forces function declaration die. It is
11618              later reused to represent definition.  */
11619           equate_decl_number_to_die (decl, subr_die);
11620         }
11621     }
11622   else if (DECL_ABSTRACT (decl))
11623     {
11624       if (DECL_DECLARED_INLINE_P (decl))
11625         {
11626           if (cgraph_function_possibly_inlined_p (decl))
11627             add_AT_unsigned (subr_die, DW_AT_inline, DW_INL_declared_inlined);
11628           else
11629             add_AT_unsigned (subr_die, DW_AT_inline, DW_INL_declared_not_inlined);
11630         }
11631       else
11632         {
11633           if (cgraph_function_possibly_inlined_p (decl))
11634             add_AT_unsigned (subr_die, DW_AT_inline, DW_INL_inlined);
11635           else
11636             add_AT_unsigned (subr_die, DW_AT_inline, DW_INL_not_inlined);
11637         }
11638
11639       equate_decl_number_to_die (decl, subr_die);
11640     }
11641   else if (!DECL_EXTERNAL (decl))
11642     {
11643       if (!old_die || !get_AT (old_die, DW_AT_inline))
11644         equate_decl_number_to_die (decl, subr_die);
11645
11646       if (!flag_reorder_blocks_and_partition)
11647         {
11648           ASM_GENERATE_INTERNAL_LABEL (label_id, FUNC_BEGIN_LABEL,
11649                                        current_function_funcdef_no);
11650           add_AT_lbl_id (subr_die, DW_AT_low_pc, label_id);
11651           ASM_GENERATE_INTERNAL_LABEL (label_id, FUNC_END_LABEL,
11652                                        current_function_funcdef_no);
11653           add_AT_lbl_id (subr_die, DW_AT_high_pc, label_id);
11654           
11655           add_pubname (decl, subr_die);
11656           add_arange (decl, subr_die);
11657         }
11658       else
11659         {  /* Do nothing for now; maybe need to duplicate die, one for
11660               hot section and ond for cold section, then use the hot/cold
11661               section begin/end labels to generate the aranges...  */
11662           /*
11663             add_AT_lbl_id (subr_die, DW_AT_low_pc, hot_section_label);
11664             add_AT_lbl_id (subr_die, DW_AT_high_pc, hot_section_end_label);
11665             add_AT_lbl_id (subr_die, DW_AT_lo_user, unlikely_section_label);
11666             add_AT_lbl_id (subr_die, DW_AT_hi_user, cold_section_end_label);
11667
11668             add_pubname (decl, subr_die);
11669             add_arange (decl, subr_die);
11670             add_arange (decl, subr_die);
11671            */
11672         }
11673
11674 #ifdef MIPS_DEBUGGING_INFO
11675       /* Add a reference to the FDE for this routine.  */
11676       add_AT_fde_ref (subr_die, DW_AT_MIPS_fde, current_funcdef_fde);
11677 #endif
11678
11679 #ifdef DWARF2_UNWIND_INFO
11680       /* We define the "frame base" as the function's CFA.  This is more
11681          convenient for several reasons: (1) It's stable across the prologue
11682          and epilogue, which makes it better than just a frame pointer,
11683          (2) With dwarf3, there exists a one-byte encoding that allows us
11684          to reference the .debug_frame data by proxy, but failing that,
11685          (3) We can at least reuse the code inspection and interpretation
11686          code that determines the CFA position at various points in the
11687          function.  */
11688       /* ??? Use some command-line or configury switch to enable the use
11689          of dwarf3 DW_OP_call_frame_cfa.  At present there are no dwarf
11690          consumers that understand it; fall back to "pure" dwarf2 and
11691          convert the CFA data into a location list.  */
11692       {
11693         dw_loc_list_ref list = convert_cfa_to_loc_list ();
11694         if (list->dw_loc_next)
11695           add_AT_loc_list (subr_die, DW_AT_frame_base, list);
11696         else
11697           add_AT_loc (subr_die, DW_AT_frame_base, list->expr);
11698       }
11699
11700       /* Compute a displacement from the "steady-state frame pointer" to
11701          the CFA.  The former is what all stack slots and argument slots
11702          will reference in the rtl; the later is what we've told the 
11703          debugger about.  We'll need to adjust all frame_base references
11704          by this displacement.  */
11705       compute_frame_pointer_to_cfa_displacement ();
11706 #else
11707       /* For targets which support DWARF2, but not DWARF2 call-frame info,
11708          we just use the stack pointer or frame pointer.  */
11709       /* ??? Should investigate getting better info via callbacks, or else
11710          by interpreting the IA-64 unwind info.  */
11711       {
11712         rtx fp_reg
11713           = frame_pointer_needed ? hard_frame_pointer_rtx : stack_pointer_rtx;
11714         add_AT_loc (subr_die, DW_AT_frame_base, reg_loc_descriptor (fp_reg));
11715       }
11716 #endif
11717
11718       if (cfun->static_chain_decl)
11719         add_AT_location_description (subr_die, DW_AT_static_link,
11720                  loc_descriptor_from_tree (cfun->static_chain_decl));
11721     }
11722
11723   /* Now output descriptions of the arguments for this function. This gets
11724      (unnecessarily?) complex because of the fact that the DECL_ARGUMENT list
11725      for a FUNCTION_DECL doesn't indicate cases where there was a trailing
11726      `...' at the end of the formal parameter list.  In order to find out if
11727      there was a trailing ellipsis or not, we must instead look at the type
11728      associated with the FUNCTION_DECL.  This will be a node of type
11729      FUNCTION_TYPE. If the chain of type nodes hanging off of this
11730      FUNCTION_TYPE node ends with a void_type_node then there should *not* be
11731      an ellipsis at the end.  */
11732
11733   /* In the case where we are describing a mere function declaration, all we
11734      need to do here (and all we *can* do here) is to describe the *types* of
11735      its formal parameters.  */
11736   if (debug_info_level <= DINFO_LEVEL_TERSE)
11737     ;
11738   else if (declaration)
11739     gen_formal_types_die (decl, subr_die);
11740   else
11741     {
11742       /* Generate DIEs to represent all known formal parameters.  */
11743       tree arg_decls = DECL_ARGUMENTS (decl);
11744       tree parm;
11745
11746       /* When generating DIEs, generate the unspecified_parameters DIE
11747          instead if we come across the arg "__builtin_va_alist" */
11748       for (parm = arg_decls; parm; parm = TREE_CHAIN (parm))
11749         if (TREE_CODE (parm) == PARM_DECL)
11750           {
11751             if (DECL_NAME (parm)
11752                 && !strcmp (IDENTIFIER_POINTER (DECL_NAME (parm)),
11753                             "__builtin_va_alist"))
11754               gen_unspecified_parameters_die (parm, subr_die);
11755             else
11756               gen_decl_die (parm, subr_die);
11757           }
11758
11759       /* Decide whether we need an unspecified_parameters DIE at the end.
11760          There are 2 more cases to do this for: 1) the ansi ... declaration -
11761          this is detectable when the end of the arg list is not a
11762          void_type_node 2) an unprototyped function declaration (not a
11763          definition).  This just means that we have no info about the
11764          parameters at all.  */
11765       fn_arg_types = TYPE_ARG_TYPES (TREE_TYPE (decl));
11766       if (fn_arg_types != NULL)
11767         {
11768           /* This is the prototyped case, check for....  */
11769           if (TREE_VALUE (tree_last (fn_arg_types)) != void_type_node)
11770             gen_unspecified_parameters_die (decl, subr_die);
11771         }
11772       else if (DECL_INITIAL (decl) == NULL_TREE)
11773         gen_unspecified_parameters_die (decl, subr_die);
11774     }
11775
11776   /* Output Dwarf info for all of the stuff within the body of the function
11777      (if it has one - it may be just a declaration).  */
11778   outer_scope = DECL_INITIAL (decl);
11779
11780   /* OUTER_SCOPE is a pointer to the outermost BLOCK node created to represent
11781      a function.  This BLOCK actually represents the outermost binding contour
11782      for the function, i.e. the contour in which the function's formal
11783      parameters and labels get declared. Curiously, it appears that the front
11784      end doesn't actually put the PARM_DECL nodes for the current function onto
11785      the BLOCK_VARS list for this outer scope, but are strung off of the
11786      DECL_ARGUMENTS list for the function instead.
11787
11788      The BLOCK_VARS list for the `outer_scope' does provide us with a list of
11789      the LABEL_DECL nodes for the function however, and we output DWARF info
11790      for those in decls_for_scope.  Just within the `outer_scope' there will be
11791      a BLOCK node representing the function's outermost pair of curly braces,
11792      and any blocks used for the base and member initializers of a C++
11793      constructor function.  */
11794   if (! declaration && TREE_CODE (outer_scope) != ERROR_MARK)
11795     {
11796       /* Emit a DW_TAG_variable DIE for a named return value.  */
11797       if (DECL_NAME (DECL_RESULT (decl)))
11798         gen_decl_die (DECL_RESULT (decl), subr_die);
11799
11800       current_function_has_inlines = 0;
11801       decls_for_scope (outer_scope, subr_die, 0);
11802
11803 #if 0 && defined (MIPS_DEBUGGING_INFO)
11804       if (current_function_has_inlines)
11805         {
11806           add_AT_flag (subr_die, DW_AT_MIPS_has_inlines, 1);
11807           if (! comp_unit_has_inlines)
11808             {
11809               add_AT_flag (comp_unit_die, DW_AT_MIPS_has_inlines, 1);
11810               comp_unit_has_inlines = 1;
11811             }
11812         }
11813 #endif
11814     }
11815   /* Add the calling convention attribute if requested.  */
11816   add_calling_convention_attribute (subr_die, TREE_TYPE (decl));
11817
11818 }
11819
11820 /* Generate a DIE to represent a declared data object.  */
11821
11822 static void
11823 gen_variable_die (tree decl, dw_die_ref context_die)
11824 {
11825   tree origin = decl_ultimate_origin (decl);
11826   dw_die_ref var_die = new_die (DW_TAG_variable, context_die, decl);
11827
11828   dw_die_ref old_die = lookup_decl_die (decl);
11829   int declaration = (DECL_EXTERNAL (decl)
11830                      /* If DECL is COMDAT and has not actually been
11831                         emitted, we cannot take its address; there
11832                         might end up being no definition anywhere in
11833                         the program.  For example, consider the C++
11834                         test case:
11835
11836                           template <class T>
11837                           struct S { static const int i = 7; };
11838
11839                           template <class T>
11840                           const int S<T>::i;
11841
11842                           int f() { return S<int>::i; }
11843                           
11844                         Here, S<int>::i is not DECL_EXTERNAL, but no
11845                         definition is required, so the compiler will
11846                         not emit a definition.  */  
11847                      || (TREE_CODE (decl) == VAR_DECL
11848                          && DECL_COMDAT (decl) && !TREE_ASM_WRITTEN (decl))
11849                      || class_or_namespace_scope_p (context_die));
11850
11851   if (origin != NULL)
11852     add_abstract_origin_attribute (var_die, origin);
11853
11854   /* Loop unrolling can create multiple blocks that refer to the same
11855      static variable, so we must test for the DW_AT_declaration flag.
11856
11857      ??? Loop unrolling/reorder_blocks should perhaps be rewritten to
11858      copy decls and set the DECL_ABSTRACT flag on them instead of
11859      sharing them.
11860
11861      ??? Duplicated blocks have been rewritten to use .debug_ranges.
11862
11863      ??? The declare_in_namespace support causes us to get two DIEs for one
11864      variable, both of which are declarations.  We want to avoid considering
11865      one to be a specification, so we must test that this DIE is not a
11866      declaration.  */
11867   else if (old_die && TREE_STATIC (decl) && ! declaration
11868            && get_AT_flag (old_die, DW_AT_declaration) == 1)
11869     {
11870       /* This is a definition of a C++ class level static.  */
11871       add_AT_specification (var_die, old_die);
11872       if (DECL_NAME (decl))
11873         {
11874           expanded_location s = expand_location (DECL_SOURCE_LOCATION (decl));
11875           unsigned file_index = lookup_filename (s.file);
11876
11877           if (get_AT_unsigned (old_die, DW_AT_decl_file) != file_index)
11878             add_AT_unsigned (var_die, DW_AT_decl_file, file_index);
11879
11880           if (get_AT_unsigned (old_die, DW_AT_decl_line)
11881               != (unsigned) s.line)
11882
11883             add_AT_unsigned (var_die, DW_AT_decl_line, s.line);
11884         }
11885     }
11886   else
11887     {
11888       add_name_and_src_coords_attributes (var_die, decl);
11889       add_type_attribute (var_die, TREE_TYPE (decl), TREE_READONLY (decl),
11890                           TREE_THIS_VOLATILE (decl), context_die);
11891
11892       if (TREE_PUBLIC (decl))
11893         add_AT_flag (var_die, DW_AT_external, 1);
11894
11895       if (DECL_ARTIFICIAL (decl))
11896         add_AT_flag (var_die, DW_AT_artificial, 1);
11897
11898       if (TREE_PROTECTED (decl))
11899         add_AT_unsigned (var_die, DW_AT_accessibility, DW_ACCESS_protected);
11900       else if (TREE_PRIVATE (decl))
11901         add_AT_unsigned (var_die, DW_AT_accessibility, DW_ACCESS_private);
11902     }
11903
11904   if (declaration)
11905     add_AT_flag (var_die, DW_AT_declaration, 1);
11906
11907   if (DECL_ABSTRACT (decl) || declaration)
11908     equate_decl_number_to_die (decl, var_die);
11909
11910   if (! declaration && ! DECL_ABSTRACT (decl))
11911     {
11912       add_location_or_const_value_attribute (var_die, decl, DW_AT_location);
11913       add_pubname (decl, var_die);
11914     }
11915   else
11916     tree_add_const_value_attribute (var_die, decl);
11917 }
11918
11919 /* Generate a DIE to represent a label identifier.  */
11920
11921 static void
11922 gen_label_die (tree decl, dw_die_ref context_die)
11923 {
11924   tree origin = decl_ultimate_origin (decl);
11925   dw_die_ref lbl_die = new_die (DW_TAG_label, context_die, decl);
11926   rtx insn;
11927   char label[MAX_ARTIFICIAL_LABEL_BYTES];
11928
11929   if (origin != NULL)
11930     add_abstract_origin_attribute (lbl_die, origin);
11931   else
11932     add_name_and_src_coords_attributes (lbl_die, decl);
11933
11934   if (DECL_ABSTRACT (decl))
11935     equate_decl_number_to_die (decl, lbl_die);
11936   else
11937     {
11938       insn = DECL_RTL_IF_SET (decl);
11939
11940       /* Deleted labels are programmer specified labels which have been
11941          eliminated because of various optimizations.  We still emit them
11942          here so that it is possible to put breakpoints on them.  */
11943       if (insn
11944           && (LABEL_P (insn)
11945               || ((NOTE_P (insn)
11946                    && NOTE_LINE_NUMBER (insn) == NOTE_INSN_DELETED_LABEL))))
11947         {
11948           /* When optimization is enabled (via -O) some parts of the compiler
11949              (e.g. jump.c and cse.c) may try to delete CODE_LABEL insns which
11950              represent source-level labels which were explicitly declared by
11951              the user.  This really shouldn't be happening though, so catch
11952              it if it ever does happen.  */
11953           gcc_assert (!INSN_DELETED_P (insn));
11954
11955           ASM_GENERATE_INTERNAL_LABEL (label, "L", CODE_LABEL_NUMBER (insn));
11956           add_AT_lbl_id (lbl_die, DW_AT_low_pc, label);
11957         }
11958     }
11959 }
11960
11961 /* A helper function for gen_inlined_subroutine_die.  Add source coordinate
11962    attributes to the DIE for a block STMT, to describe where the inlined
11963    function was called from.  This is similar to add_src_coords_attributes.  */
11964
11965 static inline void
11966 add_call_src_coords_attributes (tree stmt, dw_die_ref die)
11967 {
11968   expanded_location s = expand_location (BLOCK_SOURCE_LOCATION (stmt));
11969   unsigned file_index = lookup_filename (s.file);
11970
11971   add_AT_unsigned (die, DW_AT_call_file, file_index);
11972   add_AT_unsigned (die, DW_AT_call_line, s.line);
11973 }
11974
11975 /* A helper function for gen_lexical_block_die and gen_inlined_subroutine_die.
11976    Add low_pc and high_pc attributes to the DIE for a block STMT.  */
11977
11978 static inline void
11979 add_high_low_attributes (tree stmt, dw_die_ref die)
11980 {
11981   char label[MAX_ARTIFICIAL_LABEL_BYTES];
11982
11983   if (BLOCK_FRAGMENT_CHAIN (stmt))
11984     {
11985       tree chain;
11986
11987       add_AT_range_list (die, DW_AT_ranges, add_ranges (stmt));
11988
11989       chain = BLOCK_FRAGMENT_CHAIN (stmt);
11990       do
11991         {
11992           add_ranges (chain);
11993           chain = BLOCK_FRAGMENT_CHAIN (chain);
11994         }
11995       while (chain);
11996       add_ranges (NULL);
11997     }
11998   else
11999     {
12000       ASM_GENERATE_INTERNAL_LABEL (label, BLOCK_BEGIN_LABEL,
12001                                    BLOCK_NUMBER (stmt));
12002       add_AT_lbl_id (die, DW_AT_low_pc, label);
12003       ASM_GENERATE_INTERNAL_LABEL (label, BLOCK_END_LABEL,
12004                                    BLOCK_NUMBER (stmt));
12005       add_AT_lbl_id (die, DW_AT_high_pc, label);
12006     }
12007 }
12008
12009 /* Generate a DIE for a lexical block.  */
12010
12011 static void
12012 gen_lexical_block_die (tree stmt, dw_die_ref context_die, int depth)
12013 {
12014   dw_die_ref stmt_die = new_die (DW_TAG_lexical_block, context_die, stmt);
12015
12016   if (! BLOCK_ABSTRACT (stmt))
12017     add_high_low_attributes (stmt, stmt_die);
12018
12019   decls_for_scope (stmt, stmt_die, depth);
12020 }
12021
12022 /* Generate a DIE for an inlined subprogram.  */
12023
12024 static void
12025 gen_inlined_subroutine_die (tree stmt, dw_die_ref context_die, int depth)
12026 {
12027   tree decl = block_ultimate_origin (stmt);
12028
12029   /* Emit info for the abstract instance first, if we haven't yet.  We
12030      must emit this even if the block is abstract, otherwise when we
12031      emit the block below (or elsewhere), we may end up trying to emit
12032      a die whose origin die hasn't been emitted, and crashing.  */
12033   dwarf2out_abstract_function (decl);
12034
12035   if (! BLOCK_ABSTRACT (stmt))
12036     {
12037       dw_die_ref subr_die
12038         = new_die (DW_TAG_inlined_subroutine, context_die, stmt);
12039
12040       add_abstract_origin_attribute (subr_die, decl);
12041       add_high_low_attributes (stmt, subr_die);
12042       add_call_src_coords_attributes (stmt, subr_die);
12043
12044       decls_for_scope (stmt, subr_die, depth);
12045       current_function_has_inlines = 1;
12046     }
12047   else
12048     /* We may get here if we're the outer block of function A that was
12049        inlined into function B that was inlined into function C.  When
12050        generating debugging info for C, dwarf2out_abstract_function(B)
12051        would mark all inlined blocks as abstract, including this one.
12052        So, we wouldn't (and shouldn't) expect labels to be generated
12053        for this one.  Instead, just emit debugging info for
12054        declarations within the block.  This is particularly important
12055        in the case of initializers of arguments passed from B to us:
12056        if they're statement expressions containing declarations, we
12057        wouldn't generate dies for their abstract variables, and then,
12058        when generating dies for the real variables, we'd die (pun
12059        intended :-)  */
12060     gen_lexical_block_die (stmt, context_die, depth);
12061 }
12062
12063 /* Generate a DIE for a field in a record, or structure.  */
12064
12065 static void
12066 gen_field_die (tree decl, dw_die_ref context_die)
12067 {
12068   dw_die_ref decl_die;
12069
12070   if (TREE_TYPE (decl) == error_mark_node)
12071     return;
12072
12073   decl_die = new_die (DW_TAG_member, context_die, decl);
12074   add_name_and_src_coords_attributes (decl_die, decl);
12075   add_type_attribute (decl_die, member_declared_type (decl),
12076                       TREE_READONLY (decl), TREE_THIS_VOLATILE (decl),
12077                       context_die);
12078
12079   if (DECL_BIT_FIELD_TYPE (decl))
12080     {
12081       add_byte_size_attribute (decl_die, decl);
12082       add_bit_size_attribute (decl_die, decl);
12083       add_bit_offset_attribute (decl_die, decl);
12084     }
12085
12086   if (TREE_CODE (DECL_FIELD_CONTEXT (decl)) != UNION_TYPE)
12087     add_data_member_location_attribute (decl_die, decl);
12088
12089   if (DECL_ARTIFICIAL (decl))
12090     add_AT_flag (decl_die, DW_AT_artificial, 1);
12091
12092   if (TREE_PROTECTED (decl))
12093     add_AT_unsigned (decl_die, DW_AT_accessibility, DW_ACCESS_protected);
12094   else if (TREE_PRIVATE (decl))
12095     add_AT_unsigned (decl_die, DW_AT_accessibility, DW_ACCESS_private);
12096
12097   /* Equate decl number to die, so that we can look up this decl later on.  */
12098   equate_decl_number_to_die (decl, decl_die);
12099 }
12100
12101 #if 0
12102 /* Don't generate either pointer_type DIEs or reference_type DIEs here.
12103    Use modified_type_die instead.
12104    We keep this code here just in case these types of DIEs may be needed to
12105    represent certain things in other languages (e.g. Pascal) someday.  */
12106
12107 static void
12108 gen_pointer_type_die (tree type, dw_die_ref context_die)
12109 {
12110   dw_die_ref ptr_die
12111     = new_die (DW_TAG_pointer_type, scope_die_for (type, context_die), type);
12112
12113   equate_type_number_to_die (type, ptr_die);
12114   add_type_attribute (ptr_die, TREE_TYPE (type), 0, 0, context_die);
12115   add_AT_unsigned (mod_type_die, DW_AT_byte_size, PTR_SIZE);
12116 }
12117
12118 /* Don't generate either pointer_type DIEs or reference_type DIEs here.
12119    Use modified_type_die instead.
12120    We keep this code here just in case these types of DIEs may be needed to
12121    represent certain things in other languages (e.g. Pascal) someday.  */
12122
12123 static void
12124 gen_reference_type_die (tree type, dw_die_ref context_die)
12125 {
12126   dw_die_ref ref_die
12127     = new_die (DW_TAG_reference_type, scope_die_for (type, context_die), type);
12128
12129   equate_type_number_to_die (type, ref_die);
12130   add_type_attribute (ref_die, TREE_TYPE (type), 0, 0, context_die);
12131   add_AT_unsigned (mod_type_die, DW_AT_byte_size, PTR_SIZE);
12132 }
12133 #endif
12134
12135 /* Generate a DIE for a pointer to a member type.  */
12136
12137 static void
12138 gen_ptr_to_mbr_type_die (tree type, dw_die_ref context_die)
12139 {
12140   dw_die_ref ptr_die
12141     = new_die (DW_TAG_ptr_to_member_type,
12142                scope_die_for (type, context_die), type);
12143
12144   equate_type_number_to_die (type, ptr_die);
12145   add_AT_die_ref (ptr_die, DW_AT_containing_type,
12146                   lookup_type_die (TYPE_OFFSET_BASETYPE (type)));
12147   add_type_attribute (ptr_die, TREE_TYPE (type), 0, 0, context_die);
12148 }
12149
12150 /* Generate the DIE for the compilation unit.  */
12151
12152 static dw_die_ref
12153 gen_compile_unit_die (const char *filename)
12154 {
12155   dw_die_ref die;
12156   char producer[250];
12157   const char *language_string = lang_hooks.name;
12158   int language;
12159
12160   die = new_die (DW_TAG_compile_unit, NULL, NULL);
12161
12162   if (filename)
12163     {
12164       add_name_attribute (die, filename);
12165       /* Don't add cwd for <built-in>.  */
12166       if (filename[0] != DIR_SEPARATOR && filename[0] != '<')
12167         add_comp_dir_attribute (die);
12168     }
12169
12170   sprintf (producer, "%s %s", language_string, version_string);
12171
12172 #ifdef MIPS_DEBUGGING_INFO
12173   /* The MIPS/SGI compilers place the 'cc' command line options in the producer
12174      string.  The SGI debugger looks for -g, -g1, -g2, or -g3; if they do
12175      not appear in the producer string, the debugger reaches the conclusion
12176      that the object file is stripped and has no debugging information.
12177      To get the MIPS/SGI debugger to believe that there is debugging
12178      information in the object file, we add a -g to the producer string.  */
12179   if (debug_info_level > DINFO_LEVEL_TERSE)
12180     strcat (producer, " -g");
12181 #endif
12182
12183   add_AT_string (die, DW_AT_producer, producer);
12184
12185   if (strcmp (language_string, "GNU C++") == 0)
12186     language = DW_LANG_C_plus_plus;
12187   else if (strcmp (language_string, "GNU Ada") == 0)
12188     language = DW_LANG_Ada95;
12189   else if (strcmp (language_string, "GNU F77") == 0)
12190     language = DW_LANG_Fortran77;
12191   else if (strcmp (language_string, "GNU F95") == 0)
12192     language = DW_LANG_Fortran95;
12193   else if (strcmp (language_string, "GNU Pascal") == 0)
12194     language = DW_LANG_Pascal83;
12195   else if (strcmp (language_string, "GNU Java") == 0)
12196     language = DW_LANG_Java;
12197   else
12198     language = DW_LANG_C89;
12199
12200   add_AT_unsigned (die, DW_AT_language, language);
12201   return die;
12202 }
12203
12204 /* Generate a DIE for a string type.  */
12205
12206 static void
12207 gen_string_type_die (tree type, dw_die_ref context_die)
12208 {
12209   dw_die_ref type_die
12210     = new_die (DW_TAG_string_type, scope_die_for (type, context_die), type);
12211
12212   equate_type_number_to_die (type, type_die);
12213
12214   /* ??? Fudge the string length attribute for now.
12215      TODO: add string length info.  */
12216 #if 0
12217   string_length_attribute (TYPE_MAX_VALUE (TYPE_DOMAIN (type)));
12218   bound_representation (upper_bound, 0, 'u');
12219 #endif
12220 }
12221
12222 /* Generate the DIE for a base class.  */
12223
12224 static void
12225 gen_inheritance_die (tree binfo, tree access, dw_die_ref context_die)
12226 {
12227   dw_die_ref die = new_die (DW_TAG_inheritance, context_die, binfo);
12228
12229   add_type_attribute (die, BINFO_TYPE (binfo), 0, 0, context_die);
12230   add_data_member_location_attribute (die, binfo);
12231
12232   if (BINFO_VIRTUAL_P (binfo))
12233     add_AT_unsigned (die, DW_AT_virtuality, DW_VIRTUALITY_virtual);
12234
12235   if (access == access_public_node)
12236     add_AT_unsigned (die, DW_AT_accessibility, DW_ACCESS_public);
12237   else if (access == access_protected_node)
12238     add_AT_unsigned (die, DW_AT_accessibility, DW_ACCESS_protected);
12239 }
12240
12241 /* Generate a DIE for a class member.  */
12242
12243 static void
12244 gen_member_die (tree type, dw_die_ref context_die)
12245 {
12246   tree member;
12247   tree binfo = TYPE_BINFO (type);
12248   dw_die_ref child;
12249
12250   /* If this is not an incomplete type, output descriptions of each of its
12251      members. Note that as we output the DIEs necessary to represent the
12252      members of this record or union type, we will also be trying to output
12253      DIEs to represent the *types* of those members. However the `type'
12254      function (above) will specifically avoid generating type DIEs for member
12255      types *within* the list of member DIEs for this (containing) type except
12256      for those types (of members) which are explicitly marked as also being
12257      members of this (containing) type themselves.  The g++ front- end can
12258      force any given type to be treated as a member of some other (containing)
12259      type by setting the TYPE_CONTEXT of the given (member) type to point to
12260      the TREE node representing the appropriate (containing) type.  */
12261
12262   /* First output info about the base classes.  */
12263   if (binfo)
12264     {
12265       VEC(tree,gc) *accesses = BINFO_BASE_ACCESSES (binfo);
12266       int i;
12267       tree base;
12268
12269       for (i = 0; BINFO_BASE_ITERATE (binfo, i, base); i++)
12270         gen_inheritance_die (base,
12271                              (accesses ? VEC_index (tree, accesses, i)
12272                               : access_public_node), context_die);
12273     }
12274
12275   /* Now output info about the data members and type members.  */
12276   for (member = TYPE_FIELDS (type); member; member = TREE_CHAIN (member))
12277     {
12278       /* If we thought we were generating minimal debug info for TYPE
12279          and then changed our minds, some of the member declarations
12280          may have already been defined.  Don't define them again, but
12281          do put them in the right order.  */
12282
12283       child = lookup_decl_die (member);
12284       if (child)
12285         splice_child_die (context_die, child);
12286       else
12287         gen_decl_die (member, context_die);
12288     }
12289
12290   /* Now output info about the function members (if any).  */
12291   for (member = TYPE_METHODS (type); member; member = TREE_CHAIN (member))
12292     {
12293       /* Don't include clones in the member list.  */
12294       if (DECL_ABSTRACT_ORIGIN (member))
12295         continue;
12296
12297       child = lookup_decl_die (member);
12298       if (child)
12299         splice_child_die (context_die, child);
12300       else
12301         gen_decl_die (member, context_die);
12302     }
12303 }
12304
12305 /* Generate a DIE for a structure or union type.  If TYPE_DECL_SUPPRESS_DEBUG
12306    is set, we pretend that the type was never defined, so we only get the
12307    member DIEs needed by later specification DIEs.  */
12308
12309 static void
12310 gen_struct_or_union_type_die (tree type, dw_die_ref context_die)
12311 {
12312   dw_die_ref type_die = lookup_type_die (type);
12313   dw_die_ref scope_die = 0;
12314   int nested = 0;
12315   int complete = (TYPE_SIZE (type)
12316                   && (! TYPE_STUB_DECL (type)
12317                       || ! TYPE_DECL_SUPPRESS_DEBUG (TYPE_STUB_DECL (type))));
12318   int ns_decl = (context_die && context_die->die_tag == DW_TAG_namespace);
12319
12320   if (type_die && ! complete)
12321     return;
12322
12323   if (TYPE_CONTEXT (type) != NULL_TREE
12324       && (AGGREGATE_TYPE_P (TYPE_CONTEXT (type))
12325           || TREE_CODE (TYPE_CONTEXT (type)) == NAMESPACE_DECL))
12326     nested = 1;
12327
12328   scope_die = scope_die_for (type, context_die);
12329
12330   if (! type_die || (nested && scope_die == comp_unit_die))
12331     /* First occurrence of type or toplevel definition of nested class.  */
12332     {
12333       dw_die_ref old_die = type_die;
12334
12335       type_die = new_die (TREE_CODE (type) == RECORD_TYPE
12336                           ? DW_TAG_structure_type : DW_TAG_union_type,
12337                           scope_die, type);
12338       equate_type_number_to_die (type, type_die);
12339       if (old_die)
12340         add_AT_specification (type_die, old_die);
12341       else
12342         add_name_attribute (type_die, type_tag (type));
12343     }
12344   else
12345     remove_AT (type_die, DW_AT_declaration);
12346
12347   /* If this type has been completed, then give it a byte_size attribute and
12348      then give a list of members.  */
12349   if (complete && !ns_decl)
12350     {
12351       /* Prevent infinite recursion in cases where the type of some member of
12352          this type is expressed in terms of this type itself.  */
12353       TREE_ASM_WRITTEN (type) = 1;
12354       add_byte_size_attribute (type_die, type);
12355       if (TYPE_STUB_DECL (type) != NULL_TREE)
12356         add_src_coords_attributes (type_die, TYPE_STUB_DECL (type));
12357
12358       /* If the first reference to this type was as the return type of an
12359          inline function, then it may not have a parent.  Fix this now.  */
12360       if (type_die->die_parent == NULL)
12361         add_child_die (scope_die, type_die);
12362
12363       push_decl_scope (type);
12364       gen_member_die (type, type_die);
12365       pop_decl_scope ();
12366
12367       /* GNU extension: Record what type our vtable lives in.  */
12368       if (TYPE_VFIELD (type))
12369         {
12370           tree vtype = DECL_FCONTEXT (TYPE_VFIELD (type));
12371
12372           gen_type_die (vtype, context_die);
12373           add_AT_die_ref (type_die, DW_AT_containing_type,
12374                           lookup_type_die (vtype));
12375         }
12376     }
12377   else
12378     {
12379       add_AT_flag (type_die, DW_AT_declaration, 1);
12380
12381       /* We don't need to do this for function-local types.  */
12382       if (TYPE_STUB_DECL (type)
12383           && ! decl_function_context (TYPE_STUB_DECL (type)))
12384         VEC_safe_push (tree, gc, incomplete_types, type);
12385     }
12386 }
12387
12388 /* Generate a DIE for a subroutine _type_.  */
12389
12390 static void
12391 gen_subroutine_type_die (tree type, dw_die_ref context_die)
12392 {
12393   tree return_type = TREE_TYPE (type);
12394   dw_die_ref subr_die
12395     = new_die (DW_TAG_subroutine_type,
12396                scope_die_for (type, context_die), type);
12397
12398   equate_type_number_to_die (type, subr_die);
12399   add_prototyped_attribute (subr_die, type);
12400   add_type_attribute (subr_die, return_type, 0, 0, context_die);
12401   gen_formal_types_die (type, subr_die);
12402 }
12403
12404 /* Generate a DIE for a type definition.  */
12405
12406 static void
12407 gen_typedef_die (tree decl, dw_die_ref context_die)
12408 {
12409   dw_die_ref type_die;
12410   tree origin;
12411
12412   if (TREE_ASM_WRITTEN (decl))
12413     return;
12414
12415   TREE_ASM_WRITTEN (decl) = 1;
12416   type_die = new_die (DW_TAG_typedef, context_die, decl);
12417   origin = decl_ultimate_origin (decl);
12418   if (origin != NULL)
12419     add_abstract_origin_attribute (type_die, origin);
12420   else
12421     {
12422       tree type;
12423
12424       add_name_and_src_coords_attributes (type_die, decl);
12425       if (DECL_ORIGINAL_TYPE (decl))
12426         {
12427           type = DECL_ORIGINAL_TYPE (decl);
12428
12429           gcc_assert (type != TREE_TYPE (decl));
12430           equate_type_number_to_die (TREE_TYPE (decl), type_die);
12431         }
12432       else
12433         type = TREE_TYPE (decl);
12434
12435       add_type_attribute (type_die, type, TREE_READONLY (decl),
12436                           TREE_THIS_VOLATILE (decl), context_die);
12437     }
12438
12439   if (DECL_ABSTRACT (decl))
12440     equate_decl_number_to_die (decl, type_die);
12441 }
12442
12443 /* Generate a type description DIE.  */
12444
12445 static void
12446 gen_type_die (tree type, dw_die_ref context_die)
12447 {
12448   int need_pop;
12449
12450   if (type == NULL_TREE || type == error_mark_node)
12451     return;
12452
12453   if (TYPE_NAME (type) && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
12454       && DECL_ORIGINAL_TYPE (TYPE_NAME (type)))
12455     {
12456       if (TREE_ASM_WRITTEN (type))
12457         return;
12458
12459       /* Prevent broken recursion; we can't hand off to the same type.  */
12460       gcc_assert (DECL_ORIGINAL_TYPE (TYPE_NAME (type)) != type);
12461
12462       TREE_ASM_WRITTEN (type) = 1;
12463       gen_decl_die (TYPE_NAME (type), context_die);
12464       return;
12465     }
12466
12467   /* We are going to output a DIE to represent the unqualified version
12468      of this type (i.e. without any const or volatile qualifiers) so
12469      get the main variant (i.e. the unqualified version) of this type
12470      now.  (Vectors are special because the debugging info is in the
12471      cloned type itself).  */
12472   if (TREE_CODE (type) != VECTOR_TYPE)
12473     type = type_main_variant (type);
12474
12475   if (TREE_ASM_WRITTEN (type))
12476     return;
12477
12478   switch (TREE_CODE (type))
12479     {
12480     case ERROR_MARK:
12481       break;
12482
12483     case POINTER_TYPE:
12484     case REFERENCE_TYPE:
12485       /* We must set TREE_ASM_WRITTEN in case this is a recursive type.  This
12486          ensures that the gen_type_die recursion will terminate even if the
12487          type is recursive.  Recursive types are possible in Ada.  */
12488       /* ??? We could perhaps do this for all types before the switch
12489          statement.  */
12490       TREE_ASM_WRITTEN (type) = 1;
12491
12492       /* For these types, all that is required is that we output a DIE (or a
12493          set of DIEs) to represent the "basis" type.  */
12494       gen_type_die (TREE_TYPE (type), context_die);
12495       break;
12496
12497     case OFFSET_TYPE:
12498       /* This code is used for C++ pointer-to-data-member types.
12499          Output a description of the relevant class type.  */
12500       gen_type_die (TYPE_OFFSET_BASETYPE (type), context_die);
12501
12502       /* Output a description of the type of the object pointed to.  */
12503       gen_type_die (TREE_TYPE (type), context_die);
12504
12505       /* Now output a DIE to represent this pointer-to-data-member type
12506          itself.  */
12507       gen_ptr_to_mbr_type_die (type, context_die);
12508       break;
12509
12510     case FUNCTION_TYPE:
12511       /* Force out return type (in case it wasn't forced out already).  */
12512       gen_type_die (TREE_TYPE (type), context_die);
12513       gen_subroutine_type_die (type, context_die);
12514       break;
12515
12516     case METHOD_TYPE:
12517       /* Force out return type (in case it wasn't forced out already).  */
12518       gen_type_die (TREE_TYPE (type), context_die);
12519       gen_subroutine_type_die (type, context_die);
12520       break;
12521
12522     case ARRAY_TYPE:
12523       if (TYPE_STRING_FLAG (type) && TREE_CODE (TREE_TYPE (type)) == CHAR_TYPE)
12524         {
12525           gen_type_die (TREE_TYPE (type), context_die);
12526           gen_string_type_die (type, context_die);
12527         }
12528       else
12529         gen_array_type_die (type, context_die);
12530       break;
12531
12532     case VECTOR_TYPE:
12533       gen_array_type_die (type, context_die);
12534       break;
12535
12536     case ENUMERAL_TYPE:
12537     case RECORD_TYPE:
12538     case UNION_TYPE:
12539     case QUAL_UNION_TYPE:
12540       /* If this is a nested type whose containing class hasn't been written
12541          out yet, writing it out will cover this one, too.  This does not apply
12542          to instantiations of member class templates; they need to be added to
12543          the containing class as they are generated.  FIXME: This hurts the
12544          idea of combining type decls from multiple TUs, since we can't predict
12545          what set of template instantiations we'll get.  */
12546       if (TYPE_CONTEXT (type)
12547           && AGGREGATE_TYPE_P (TYPE_CONTEXT (type))
12548           && ! TREE_ASM_WRITTEN (TYPE_CONTEXT (type)))
12549         {
12550           gen_type_die (TYPE_CONTEXT (type), context_die);
12551
12552           if (TREE_ASM_WRITTEN (type))
12553             return;
12554
12555           /* If that failed, attach ourselves to the stub.  */
12556           push_decl_scope (TYPE_CONTEXT (type));
12557           context_die = lookup_type_die (TYPE_CONTEXT (type));
12558           need_pop = 1;
12559         }
12560       else
12561         {
12562           declare_in_namespace (type, context_die);
12563           need_pop = 0;
12564         }
12565
12566       if (TREE_CODE (type) == ENUMERAL_TYPE)
12567         gen_enumeration_type_die (type, context_die);
12568       else
12569         gen_struct_or_union_type_die (type, context_die);
12570
12571       if (need_pop)
12572         pop_decl_scope ();
12573
12574       /* Don't set TREE_ASM_WRITTEN on an incomplete struct; we want to fix
12575          it up if it is ever completed.  gen_*_type_die will set it for us
12576          when appropriate.  */
12577       return;
12578
12579     case VOID_TYPE:
12580     case INTEGER_TYPE:
12581     case REAL_TYPE:
12582     case COMPLEX_TYPE:
12583     case BOOLEAN_TYPE:
12584     case CHAR_TYPE:
12585       /* No DIEs needed for fundamental types.  */
12586       break;
12587
12588     case LANG_TYPE:
12589       /* No Dwarf representation currently defined.  */
12590       break;
12591
12592     default:
12593       gcc_unreachable ();
12594     }
12595
12596   TREE_ASM_WRITTEN (type) = 1;
12597 }
12598
12599 /* Generate a DIE for a tagged type instantiation.  */
12600
12601 static void
12602 gen_tagged_type_instantiation_die (tree type, dw_die_ref context_die)
12603 {
12604   if (type == NULL_TREE || type == error_mark_node)
12605     return;
12606
12607   /* We are going to output a DIE to represent the unqualified version of
12608      this type (i.e. without any const or volatile qualifiers) so make sure
12609      that we have the main variant (i.e. the unqualified version) of this
12610      type now.  */
12611   gcc_assert (type == type_main_variant (type));
12612
12613   /* Do not check TREE_ASM_WRITTEN (type) as it may not be set if this is
12614      an instance of an unresolved type.  */
12615
12616   switch (TREE_CODE (type))
12617     {
12618     case ERROR_MARK:
12619       break;
12620
12621     case ENUMERAL_TYPE:
12622       gen_inlined_enumeration_type_die (type, context_die);
12623       break;
12624
12625     case RECORD_TYPE:
12626       gen_inlined_structure_type_die (type, context_die);
12627       break;
12628
12629     case UNION_TYPE:
12630     case QUAL_UNION_TYPE:
12631       gen_inlined_union_type_die (type, context_die);
12632       break;
12633
12634     default:
12635       gcc_unreachable ();
12636     }
12637 }
12638
12639 /* Generate a DW_TAG_lexical_block DIE followed by DIEs to represent all of the
12640    things which are local to the given block.  */
12641
12642 static void
12643 gen_block_die (tree stmt, dw_die_ref context_die, int depth)
12644 {
12645   int must_output_die = 0;
12646   tree origin;
12647   tree decl;
12648   enum tree_code origin_code;
12649
12650   /* Ignore blocks that are NULL.  */
12651   if (stmt == NULL_TREE)
12652     return;
12653
12654   /* If the block is one fragment of a non-contiguous block, do not
12655      process the variables, since they will have been done by the
12656      origin block.  Do process subblocks.  */
12657   if (BLOCK_FRAGMENT_ORIGIN (stmt))
12658     {
12659       tree sub;
12660
12661       for (sub = BLOCK_SUBBLOCKS (stmt); sub; sub = BLOCK_CHAIN (sub))
12662         gen_block_die (sub, context_die, depth + 1);
12663
12664       return;
12665     }
12666
12667   /* Determine the "ultimate origin" of this block.  This block may be an
12668      inlined instance of an inlined instance of inline function, so we have
12669      to trace all of the way back through the origin chain to find out what
12670      sort of node actually served as the original seed for the creation of
12671      the current block.  */
12672   origin = block_ultimate_origin (stmt);
12673   origin_code = (origin != NULL) ? TREE_CODE (origin) : ERROR_MARK;
12674
12675   /* Determine if we need to output any Dwarf DIEs at all to represent this
12676      block.  */
12677   if (origin_code == FUNCTION_DECL)
12678     /* The outer scopes for inlinings *must* always be represented.  We
12679        generate DW_TAG_inlined_subroutine DIEs for them.  (See below.) */
12680     must_output_die = 1;
12681   else
12682     {
12683       /* In the case where the current block represents an inlining of the
12684          "body block" of an inline function, we must *NOT* output any DIE for
12685          this block because we have already output a DIE to represent the whole
12686          inlined function scope and the "body block" of any function doesn't
12687          really represent a different scope according to ANSI C rules.  So we
12688          check here to make sure that this block does not represent a "body
12689          block inlining" before trying to set the MUST_OUTPUT_DIE flag.  */
12690       if (! is_body_block (origin ? origin : stmt))
12691         {
12692           /* Determine if this block directly contains any "significant"
12693              local declarations which we will need to output DIEs for.  */
12694           if (debug_info_level > DINFO_LEVEL_TERSE)
12695             /* We are not in terse mode so *any* local declaration counts
12696                as being a "significant" one.  */
12697             must_output_die = (BLOCK_VARS (stmt) != NULL 
12698                                && (TREE_USED (stmt) 
12699                                    || TREE_ASM_WRITTEN (stmt)
12700                                    || BLOCK_ABSTRACT (stmt)));
12701           else
12702             /* We are in terse mode, so only local (nested) function
12703                definitions count as "significant" local declarations.  */
12704             for (decl = BLOCK_VARS (stmt);
12705                  decl != NULL; decl = TREE_CHAIN (decl))
12706               if (TREE_CODE (decl) == FUNCTION_DECL
12707                   && DECL_INITIAL (decl))
12708                 {
12709                   must_output_die = 1;
12710                   break;
12711                 }
12712         }
12713     }
12714
12715   /* It would be a waste of space to generate a Dwarf DW_TAG_lexical_block
12716      DIE for any block which contains no significant local declarations at
12717      all.  Rather, in such cases we just call `decls_for_scope' so that any
12718      needed Dwarf info for any sub-blocks will get properly generated. Note
12719      that in terse mode, our definition of what constitutes a "significant"
12720      local declaration gets restricted to include only inlined function
12721      instances and local (nested) function definitions.  */
12722   if (must_output_die)
12723     {
12724       if (origin_code == FUNCTION_DECL)
12725         gen_inlined_subroutine_die (stmt, context_die, depth);
12726       else
12727         gen_lexical_block_die (stmt, context_die, depth);
12728     }
12729   else
12730     decls_for_scope (stmt, context_die, depth);
12731 }
12732
12733 /* Generate all of the decls declared within a given scope and (recursively)
12734    all of its sub-blocks.  */
12735
12736 static void
12737 decls_for_scope (tree stmt, dw_die_ref context_die, int depth)
12738 {
12739   tree decl;
12740   tree subblocks;
12741
12742   /* Ignore NULL blocks.  */
12743   if (stmt == NULL_TREE)
12744     return;
12745
12746   if (TREE_USED (stmt))
12747     {
12748       /* Output the DIEs to represent all of the data objects and typedefs
12749          declared directly within this block but not within any nested
12750          sub-blocks.  Also, nested function and tag DIEs have been
12751          generated with a parent of NULL; fix that up now.  */
12752       for (decl = BLOCK_VARS (stmt); decl != NULL; decl = TREE_CHAIN (decl))
12753         {
12754           dw_die_ref die;
12755           
12756           if (TREE_CODE (decl) == FUNCTION_DECL)
12757             die = lookup_decl_die (decl);
12758           else if (TREE_CODE (decl) == TYPE_DECL && TYPE_DECL_IS_STUB (decl))
12759             die = lookup_type_die (TREE_TYPE (decl));
12760           else
12761             die = NULL;
12762           
12763           if (die != NULL && die->die_parent == NULL)
12764             add_child_die (context_die, die);
12765           /* Do not produce debug information for static variables since
12766              these might be optimized out.  We are called for these later
12767              in cgraph_varpool_analyze_pending_decls. */
12768           if (TREE_CODE (decl) == VAR_DECL && TREE_STATIC (decl))
12769             ;
12770           else
12771             gen_decl_die (decl, context_die);
12772         }
12773     }
12774
12775   /* If we're at -g1, we're not interested in subblocks.  */
12776   if (debug_info_level <= DINFO_LEVEL_TERSE)
12777     return;
12778
12779   /* Output the DIEs to represent all sub-blocks (and the items declared
12780      therein) of this block.  */
12781   for (subblocks = BLOCK_SUBBLOCKS (stmt);
12782        subblocks != NULL;
12783        subblocks = BLOCK_CHAIN (subblocks))
12784     gen_block_die (subblocks, context_die, depth + 1);
12785 }
12786
12787 /* Is this a typedef we can avoid emitting?  */
12788
12789 static inline int
12790 is_redundant_typedef (tree decl)
12791 {
12792   if (TYPE_DECL_IS_STUB (decl))
12793     return 1;
12794
12795   if (DECL_ARTIFICIAL (decl)
12796       && DECL_CONTEXT (decl)
12797       && is_tagged_type (DECL_CONTEXT (decl))
12798       && TREE_CODE (TYPE_NAME (DECL_CONTEXT (decl))) == TYPE_DECL
12799       && DECL_NAME (decl) == DECL_NAME (TYPE_NAME (DECL_CONTEXT (decl))))
12800     /* Also ignore the artificial member typedef for the class name.  */
12801     return 1;
12802
12803   return 0;
12804 }
12805
12806 /* Returns the DIE for decl.  A DIE will always be returned.  */
12807
12808 static dw_die_ref
12809 force_decl_die (tree decl)
12810 {
12811   dw_die_ref decl_die;
12812   unsigned saved_external_flag;
12813   tree save_fn = NULL_TREE;
12814   decl_die = lookup_decl_die (decl);
12815   if (!decl_die)
12816     {
12817       dw_die_ref context_die;
12818       tree decl_context = DECL_CONTEXT (decl);
12819       if (decl_context)
12820         {
12821           /* Find die that represents this context.  */
12822           if (TYPE_P (decl_context))
12823             context_die = force_type_die (decl_context);
12824           else
12825             context_die = force_decl_die (decl_context);
12826         }
12827       else
12828         context_die = comp_unit_die;
12829
12830       decl_die = lookup_decl_die (decl);
12831       if (decl_die)
12832         return decl_die;
12833
12834       switch (TREE_CODE (decl))
12835         {
12836         case FUNCTION_DECL:
12837           /* Clear current_function_decl, so that gen_subprogram_die thinks
12838              that this is a declaration. At this point, we just want to force
12839              declaration die.  */
12840           save_fn = current_function_decl;
12841           current_function_decl = NULL_TREE;
12842           gen_subprogram_die (decl, context_die);
12843           current_function_decl = save_fn;
12844           break;
12845
12846         case VAR_DECL:
12847           /* Set external flag to force declaration die. Restore it after
12848            gen_decl_die() call.  */
12849           saved_external_flag = DECL_EXTERNAL (decl);
12850           DECL_EXTERNAL (decl) = 1;
12851           gen_decl_die (decl, context_die);
12852           DECL_EXTERNAL (decl) = saved_external_flag;
12853           break;
12854
12855         case NAMESPACE_DECL:
12856           dwarf2out_decl (decl);
12857           break;
12858
12859         default:
12860           gcc_unreachable ();
12861         }
12862
12863       /* We should be able to find the DIE now.  */
12864       if (!decl_die)
12865         decl_die = lookup_decl_die (decl);
12866       gcc_assert (decl_die);
12867     }
12868
12869   return decl_die;
12870 }
12871
12872 /* Returns the DIE for TYPE.  A DIE is always returned.  */
12873
12874 static dw_die_ref
12875 force_type_die (tree type)
12876 {
12877   dw_die_ref type_die;
12878
12879   type_die = lookup_type_die (type);
12880   if (!type_die)
12881     {
12882       dw_die_ref context_die;
12883       if (TYPE_CONTEXT (type))
12884         {
12885           if (TYPE_P (TYPE_CONTEXT (type)))
12886             context_die = force_type_die (TYPE_CONTEXT (type));
12887           else
12888             context_die = force_decl_die (TYPE_CONTEXT (type));
12889         }
12890       else
12891         context_die = comp_unit_die;
12892
12893       type_die = lookup_type_die (type);
12894       if (type_die)
12895         return type_die;
12896       gen_type_die (type, context_die);
12897       type_die = lookup_type_die (type);
12898       gcc_assert (type_die);
12899     }
12900   return type_die;
12901 }
12902
12903 /* Force out any required namespaces to be able to output DECL,
12904    and return the new context_die for it, if it's changed.  */
12905
12906 static dw_die_ref
12907 setup_namespace_context (tree thing, dw_die_ref context_die)
12908 {
12909   tree context = (DECL_P (thing)
12910                   ? DECL_CONTEXT (thing) : TYPE_CONTEXT (thing));
12911   if (context && TREE_CODE (context) == NAMESPACE_DECL)
12912     /* Force out the namespace.  */
12913     context_die = force_decl_die (context);
12914
12915   return context_die;
12916 }
12917
12918 /* Emit a declaration DIE for THING (which is either a DECL or a tagged
12919    type) within its namespace, if appropriate.
12920
12921    For compatibility with older debuggers, namespace DIEs only contain
12922    declarations; all definitions are emitted at CU scope.  */
12923
12924 static void
12925 declare_in_namespace (tree thing, dw_die_ref context_die)
12926 {
12927   dw_die_ref ns_context;
12928
12929   if (debug_info_level <= DINFO_LEVEL_TERSE)
12930     return;
12931
12932   /* If this decl is from an inlined function, then don't try to emit it in its
12933      namespace, as we will get confused.  It would have already been emitted
12934      when the abstract instance of the inline function was emitted anyways.  */
12935   if (DECL_P (thing) && DECL_ABSTRACT_ORIGIN (thing))
12936     return;
12937
12938   ns_context = setup_namespace_context (thing, context_die);
12939
12940   if (ns_context != context_die)
12941     {
12942       if (DECL_P (thing))
12943         gen_decl_die (thing, ns_context);
12944       else
12945         gen_type_die (thing, ns_context);
12946     }
12947 }
12948
12949 /* Generate a DIE for a namespace or namespace alias.  */
12950
12951 static void
12952 gen_namespace_die (tree decl)
12953 {
12954   dw_die_ref context_die = setup_namespace_context (decl, comp_unit_die);
12955
12956   /* Namespace aliases have a DECL_ABSTRACT_ORIGIN of the namespace
12957      they are an alias of.  */
12958   if (DECL_ABSTRACT_ORIGIN (decl) == NULL)
12959     {
12960       /* Output a real namespace.  */
12961       dw_die_ref namespace_die
12962         = new_die (DW_TAG_namespace, context_die, decl);
12963       add_name_and_src_coords_attributes (namespace_die, decl);
12964       equate_decl_number_to_die (decl, namespace_die);
12965     }
12966   else
12967     {
12968       /* Output a namespace alias.  */
12969
12970       /* Force out the namespace we are an alias of, if necessary.  */
12971       dw_die_ref origin_die
12972         = force_decl_die (DECL_ABSTRACT_ORIGIN (decl));
12973
12974       /* Now create the namespace alias DIE.  */
12975       dw_die_ref namespace_die
12976         = new_die (DW_TAG_imported_declaration, context_die, decl);
12977       add_name_and_src_coords_attributes (namespace_die, decl);
12978       add_AT_die_ref (namespace_die, DW_AT_import, origin_die);
12979       equate_decl_number_to_die (decl, namespace_die);
12980     }
12981 }
12982
12983 /* Generate Dwarf debug information for a decl described by DECL.  */
12984
12985 static void
12986 gen_decl_die (tree decl, dw_die_ref context_die)
12987 {
12988   tree origin;
12989
12990   if (DECL_P (decl) && DECL_IGNORED_P (decl))
12991     return;
12992
12993   switch (TREE_CODE (decl))
12994     {
12995     case ERROR_MARK:
12996       break;
12997
12998     case CONST_DECL:
12999       /* The individual enumerators of an enum type get output when we output
13000          the Dwarf representation of the relevant enum type itself.  */
13001       break;
13002
13003     case FUNCTION_DECL:
13004       /* Don't output any DIEs to represent mere function declarations,
13005          unless they are class members or explicit block externs.  */
13006       if (DECL_INITIAL (decl) == NULL_TREE && DECL_CONTEXT (decl) == NULL_TREE
13007           && (current_function_decl == NULL_TREE || DECL_ARTIFICIAL (decl)))
13008         break;
13009
13010 #if 0
13011       /* FIXME */
13012       /* This doesn't work because the C frontend sets DECL_ABSTRACT_ORIGIN
13013          on local redeclarations of global functions.  That seems broken.  */
13014       if (current_function_decl != decl)
13015         /* This is only a declaration.  */;
13016 #endif
13017
13018       /* If we're emitting a clone, emit info for the abstract instance.  */
13019       if (DECL_ORIGIN (decl) != decl)
13020         dwarf2out_abstract_function (DECL_ABSTRACT_ORIGIN (decl));
13021
13022       /* If we're emitting an out-of-line copy of an inline function,
13023          emit info for the abstract instance and set up to refer to it.  */
13024       else if (cgraph_function_possibly_inlined_p (decl)
13025                && ! DECL_ABSTRACT (decl)
13026                && ! class_or_namespace_scope_p (context_die)
13027                /* dwarf2out_abstract_function won't emit a die if this is just
13028                   a declaration.  We must avoid setting DECL_ABSTRACT_ORIGIN in
13029                   that case, because that works only if we have a die.  */
13030                && DECL_INITIAL (decl) != NULL_TREE)
13031         {
13032           dwarf2out_abstract_function (decl);
13033           set_decl_origin_self (decl);
13034         }
13035
13036       /* Otherwise we're emitting the primary DIE for this decl.  */
13037       else if (debug_info_level > DINFO_LEVEL_TERSE)
13038         {
13039           /* Before we describe the FUNCTION_DECL itself, make sure that we
13040              have described its return type.  */
13041           gen_type_die (TREE_TYPE (TREE_TYPE (decl)), context_die);
13042
13043           /* And its virtual context.  */
13044           if (DECL_VINDEX (decl) != NULL_TREE)
13045             gen_type_die (DECL_CONTEXT (decl), context_die);
13046
13047           /* And its containing type.  */
13048           origin = decl_class_context (decl);
13049           if (origin != NULL_TREE)
13050             gen_type_die_for_member (origin, decl, context_die);
13051
13052           /* And its containing namespace.  */
13053           declare_in_namespace (decl, context_die);
13054         }
13055
13056       /* Now output a DIE to represent the function itself.  */
13057       gen_subprogram_die (decl, context_die);
13058       break;
13059
13060     case TYPE_DECL:
13061       /* If we are in terse mode, don't generate any DIEs to represent any
13062          actual typedefs.  */
13063       if (debug_info_level <= DINFO_LEVEL_TERSE)
13064         break;
13065
13066       /* In the special case of a TYPE_DECL node representing the declaration
13067          of some type tag, if the given TYPE_DECL is marked as having been
13068          instantiated from some other (original) TYPE_DECL node (e.g. one which
13069          was generated within the original definition of an inline function) we
13070          have to generate a special (abbreviated) DW_TAG_structure_type,
13071          DW_TAG_union_type, or DW_TAG_enumeration_type DIE here.  */
13072       if (TYPE_DECL_IS_STUB (decl) && decl_ultimate_origin (decl) != NULL_TREE)
13073         {
13074           gen_tagged_type_instantiation_die (TREE_TYPE (decl), context_die);
13075           break;
13076         }
13077
13078       if (is_redundant_typedef (decl))
13079         gen_type_die (TREE_TYPE (decl), context_die);
13080       else
13081         /* Output a DIE to represent the typedef itself.  */
13082         gen_typedef_die (decl, context_die);
13083       break;
13084
13085     case LABEL_DECL:
13086       if (debug_info_level >= DINFO_LEVEL_NORMAL)
13087         gen_label_die (decl, context_die);
13088       break;
13089
13090     case VAR_DECL:
13091     case RESULT_DECL:
13092       /* If we are in terse mode, don't generate any DIEs to represent any
13093          variable declarations or definitions.  */
13094       if (debug_info_level <= DINFO_LEVEL_TERSE)
13095         break;
13096
13097       /* Output any DIEs that are needed to specify the type of this data
13098          object.  */
13099       gen_type_die (TREE_TYPE (decl), context_die);
13100
13101       /* And its containing type.  */
13102       origin = decl_class_context (decl);
13103       if (origin != NULL_TREE)
13104         gen_type_die_for_member (origin, decl, context_die);
13105
13106       /* And its containing namespace.  */
13107       declare_in_namespace (decl, context_die);
13108
13109       /* Now output the DIE to represent the data object itself.  This gets
13110          complicated because of the possibility that the VAR_DECL really
13111          represents an inlined instance of a formal parameter for an inline
13112          function.  */
13113       origin = decl_ultimate_origin (decl);
13114       if (origin != NULL_TREE && TREE_CODE (origin) == PARM_DECL)
13115         gen_formal_parameter_die (decl, context_die);
13116       else
13117         gen_variable_die (decl, context_die);
13118       break;
13119
13120     case FIELD_DECL:
13121       /* Ignore the nameless fields that are used to skip bits but handle C++
13122          anonymous unions and structs.  */
13123       if (DECL_NAME (decl) != NULL_TREE
13124           || TREE_CODE (TREE_TYPE (decl)) == UNION_TYPE
13125           || TREE_CODE (TREE_TYPE (decl)) == RECORD_TYPE)
13126         {
13127           gen_type_die (member_declared_type (decl), context_die);
13128           gen_field_die (decl, context_die);
13129         }
13130       break;
13131
13132     case PARM_DECL:
13133       gen_type_die (TREE_TYPE (decl), context_die);
13134       gen_formal_parameter_die (decl, context_die);
13135       break;
13136
13137     case NAMESPACE_DECL:
13138       gen_namespace_die (decl);
13139       break;
13140
13141     default:
13142       /* Probably some frontend-internal decl.  Assume we don't care.  */
13143       gcc_assert ((int)TREE_CODE (decl) > NUM_TREE_CODES);
13144       break;
13145     }
13146 }
13147 \f
13148 /* Add Ada "use" clause information for SGI Workshop debugger.  */
13149
13150 void
13151 dwarf2out_add_library_unit_info (const char *filename, const char *context_list)
13152 {
13153   unsigned int file_index;
13154
13155   if (filename != NULL)
13156     {
13157       dw_die_ref unit_die = new_die (DW_TAG_module, comp_unit_die, NULL);
13158       tree context_list_decl
13159         = build_decl (LABEL_DECL, get_identifier (context_list),
13160                       void_type_node);
13161
13162       TREE_PUBLIC (context_list_decl) = TRUE;
13163       add_name_attribute (unit_die, context_list);
13164       file_index = lookup_filename (filename);
13165       add_AT_unsigned (unit_die, DW_AT_decl_file, file_index);
13166       add_pubname (context_list_decl, unit_die);
13167     }
13168 }
13169
13170 /* Output debug information for global decl DECL.  Called from toplev.c after
13171    compilation proper has finished.  */
13172
13173 static void
13174 dwarf2out_global_decl (tree decl)
13175 {
13176   /* Output DWARF2 information for file-scope tentative data object
13177      declarations, file-scope (extern) function declarations (which had no
13178      corresponding body) and file-scope tagged type declarations and
13179      definitions which have not yet been forced out.  */
13180   if (TREE_CODE (decl) != FUNCTION_DECL || !DECL_INITIAL (decl))
13181     dwarf2out_decl (decl);
13182 }
13183
13184 /* Output debug information for type decl DECL.  Called from toplev.c
13185    and from language front ends (to record built-in types).  */
13186 static void
13187 dwarf2out_type_decl (tree decl, int local)
13188 {
13189   if (!local)
13190     dwarf2out_decl (decl);
13191 }
13192
13193 /* Output debug information for imported module or decl.  */
13194
13195 static void
13196 dwarf2out_imported_module_or_decl (tree decl, tree context)
13197 {
13198   dw_die_ref imported_die, at_import_die;
13199   dw_die_ref scope_die;
13200   unsigned file_index;
13201   expanded_location xloc;
13202
13203   if (debug_info_level <= DINFO_LEVEL_TERSE)
13204     return;
13205
13206   gcc_assert (decl);
13207
13208   /* To emit DW_TAG_imported_module or DW_TAG_imported_decl, we need two DIEs.
13209      We need decl DIE for reference and scope die. First, get DIE for the decl
13210      itself.  */
13211
13212   /* Get the scope die for decl context. Use comp_unit_die for global module
13213      or decl. If die is not found for non globals, force new die.  */
13214   if (!context)
13215     scope_die = comp_unit_die;
13216   else if (TYPE_P (context))
13217     scope_die = force_type_die (context);
13218   else
13219     scope_die = force_decl_die (context);
13220
13221   /* For TYPE_DECL or CONST_DECL, lookup TREE_TYPE.  */
13222   if (TREE_CODE (decl) == TYPE_DECL || TREE_CODE (decl) == CONST_DECL)
13223     at_import_die = force_type_die (TREE_TYPE (decl));
13224   else
13225     {
13226       at_import_die = lookup_decl_die (decl);
13227       if (!at_import_die)
13228         {
13229           /* If we're trying to avoid duplicate debug info, we may not have
13230              emitted the member decl for this field.  Emit it now.  */
13231           if (TREE_CODE (decl) == FIELD_DECL)
13232             {
13233               tree type = DECL_CONTEXT (decl);
13234               dw_die_ref type_context_die;
13235
13236               if (TYPE_CONTEXT (type))
13237                 if (TYPE_P (TYPE_CONTEXT (type)))
13238                   type_context_die = force_type_die (TYPE_CONTEXT (type));
13239               else
13240                 type_context_die = force_decl_die (TYPE_CONTEXT (type));
13241               else
13242                 type_context_die = comp_unit_die;
13243               gen_type_die_for_member (type, decl, type_context_die);
13244             }
13245           at_import_die = force_decl_die (decl);
13246         }
13247     }
13248
13249   /* OK, now we have DIEs for decl as well as scope. Emit imported die.  */
13250   if (TREE_CODE (decl) == NAMESPACE_DECL)
13251     imported_die = new_die (DW_TAG_imported_module, scope_die, context);
13252   else
13253     imported_die = new_die (DW_TAG_imported_declaration, scope_die, context);
13254
13255   xloc = expand_location (input_location);
13256   file_index = lookup_filename (xloc.file);
13257   add_AT_unsigned (imported_die, DW_AT_decl_file, file_index);
13258   add_AT_unsigned (imported_die, DW_AT_decl_line, xloc.line);
13259   add_AT_die_ref (imported_die, DW_AT_import, at_import_die);
13260 }
13261
13262 /* Write the debugging output for DECL.  */
13263
13264 void
13265 dwarf2out_decl (tree decl)
13266 {
13267   dw_die_ref context_die = comp_unit_die;
13268
13269   switch (TREE_CODE (decl))
13270     {
13271     case ERROR_MARK:
13272       return;
13273
13274     case FUNCTION_DECL:
13275       /* What we would really like to do here is to filter out all mere
13276          file-scope declarations of file-scope functions which are never
13277          referenced later within this translation unit (and keep all of ones
13278          that *are* referenced later on) but we aren't clairvoyant, so we have
13279          no idea which functions will be referenced in the future (i.e. later
13280          on within the current translation unit). So here we just ignore all
13281          file-scope function declarations which are not also definitions.  If
13282          and when the debugger needs to know something about these functions,
13283          it will have to hunt around and find the DWARF information associated
13284          with the definition of the function.
13285
13286          We can't just check DECL_EXTERNAL to find out which FUNCTION_DECL
13287          nodes represent definitions and which ones represent mere
13288          declarations.  We have to check DECL_INITIAL instead. That's because
13289          the C front-end supports some weird semantics for "extern inline"
13290          function definitions.  These can get inlined within the current
13291          translation unit (and thus, we need to generate Dwarf info for their
13292          abstract instances so that the Dwarf info for the concrete inlined
13293          instances can have something to refer to) but the compiler never
13294          generates any out-of-lines instances of such things (despite the fact
13295          that they *are* definitions).
13296
13297          The important point is that the C front-end marks these "extern
13298          inline" functions as DECL_EXTERNAL, but we need to generate DWARF for
13299          them anyway. Note that the C++ front-end also plays some similar games
13300          for inline function definitions appearing within include files which
13301          also contain `#pragma interface' pragmas.  */
13302       if (DECL_INITIAL (decl) == NULL_TREE)
13303         return;
13304
13305       /* If we're a nested function, initially use a parent of NULL; if we're
13306          a plain function, this will be fixed up in decls_for_scope.  If
13307          we're a method, it will be ignored, since we already have a DIE.  */
13308       if (decl_function_context (decl)
13309           /* But if we're in terse mode, we don't care about scope.  */
13310           && debug_info_level > DINFO_LEVEL_TERSE)
13311         context_die = NULL;
13312       break;
13313
13314     case VAR_DECL:
13315       /* Ignore this VAR_DECL if it refers to a file-scope extern data object
13316          declaration and if the declaration was never even referenced from
13317          within this entire compilation unit.  We suppress these DIEs in
13318          order to save space in the .debug section (by eliminating entries
13319          which are probably useless).  Note that we must not suppress
13320          block-local extern declarations (whether used or not) because that
13321          would screw-up the debugger's name lookup mechanism and cause it to
13322          miss things which really ought to be in scope at a given point.  */
13323       if (DECL_EXTERNAL (decl) && !TREE_USED (decl))
13324         return;
13325
13326       /* For local statics lookup proper context die.  */
13327       if (TREE_STATIC (decl) && decl_function_context (decl))
13328         context_die = lookup_decl_die (DECL_CONTEXT (decl));
13329
13330       /* If we are in terse mode, don't generate any DIEs to represent any
13331          variable declarations or definitions.  */
13332       if (debug_info_level <= DINFO_LEVEL_TERSE)
13333         return;
13334       break;
13335
13336     case NAMESPACE_DECL:
13337       if (debug_info_level <= DINFO_LEVEL_TERSE)
13338         return;
13339       if (lookup_decl_die (decl) != NULL)
13340         return;
13341       break;
13342
13343     case TYPE_DECL:
13344       /* Don't emit stubs for types unless they are needed by other DIEs.  */
13345       if (TYPE_DECL_SUPPRESS_DEBUG (decl))
13346         return;
13347
13348       /* Don't bother trying to generate any DIEs to represent any of the
13349          normal built-in types for the language we are compiling.  */
13350       if (DECL_IS_BUILTIN (decl))
13351         {
13352           /* OK, we need to generate one for `bool' so GDB knows what type
13353              comparisons have.  */
13354           if ((get_AT_unsigned (comp_unit_die, DW_AT_language)
13355                == DW_LANG_C_plus_plus)
13356               && TREE_CODE (TREE_TYPE (decl)) == BOOLEAN_TYPE
13357               && ! DECL_IGNORED_P (decl))
13358             modified_type_die (TREE_TYPE (decl), 0, 0, NULL);
13359
13360           return;
13361         }
13362
13363       /* If we are in terse mode, don't generate any DIEs for types.  */
13364       if (debug_info_level <= DINFO_LEVEL_TERSE)
13365         return;
13366
13367       /* If we're a function-scope tag, initially use a parent of NULL;
13368          this will be fixed up in decls_for_scope.  */
13369       if (decl_function_context (decl))
13370         context_die = NULL;
13371
13372       break;
13373
13374     default:
13375       return;
13376     }
13377
13378   gen_decl_die (decl, context_die);
13379 }
13380
13381 /* Output a marker (i.e. a label) for the beginning of the generated code for
13382    a lexical block.  */
13383
13384 static void
13385 dwarf2out_begin_block (unsigned int line ATTRIBUTE_UNUSED,
13386                        unsigned int blocknum)
13387 {
13388   switch_to_section (current_function_section ());
13389   ASM_OUTPUT_DEBUG_LABEL (asm_out_file, BLOCK_BEGIN_LABEL, blocknum);
13390 }
13391
13392 /* Output a marker (i.e. a label) for the end of the generated code for a
13393    lexical block.  */
13394
13395 static void
13396 dwarf2out_end_block (unsigned int line ATTRIBUTE_UNUSED, unsigned int blocknum)
13397 {
13398   switch_to_section (current_function_section ());
13399   ASM_OUTPUT_DEBUG_LABEL (asm_out_file, BLOCK_END_LABEL, blocknum);
13400 }
13401
13402 /* Returns nonzero if it is appropriate not to emit any debugging
13403    information for BLOCK, because it doesn't contain any instructions.
13404
13405    Don't allow this for blocks with nested functions or local classes
13406    as we would end up with orphans, and in the presence of scheduling
13407    we may end up calling them anyway.  */
13408
13409 static bool
13410 dwarf2out_ignore_block (tree block)
13411 {
13412   tree decl;
13413
13414   for (decl = BLOCK_VARS (block); decl; decl = TREE_CHAIN (decl))
13415     if (TREE_CODE (decl) == FUNCTION_DECL
13416         || (TREE_CODE (decl) == TYPE_DECL && TYPE_DECL_IS_STUB (decl)))
13417       return 0;
13418
13419   return 1;
13420 }
13421
13422 /* Lookup FILE_NAME (in the list of filenames that we know about here in
13423    dwarf2out.c) and return its "index".  The index of each (known) filename is
13424    just a unique number which is associated with only that one filename.  We
13425    need such numbers for the sake of generating labels (in the .debug_sfnames
13426    section) and references to those files numbers (in the .debug_srcinfo
13427    and.debug_macinfo sections).  If the filename given as an argument is not
13428    found in our current list, add it to the list and assign it the next
13429    available unique index number.  In order to speed up searches, we remember
13430    the index of the filename was looked up last.  This handles the majority of
13431    all searches.  */
13432
13433 static unsigned
13434 lookup_filename (const char *file_name)
13435 {
13436   size_t i, n;
13437   char *save_file_name;
13438
13439   /* Check to see if the file name that was searched on the previous
13440      call matches this file name.  If so, return the index.  */
13441   if (file_table_last_lookup_index != 0)
13442     {
13443       const char *last
13444         = VARRAY_CHAR_PTR (file_table, file_table_last_lookup_index);
13445       if (strcmp (file_name, last) == 0)
13446         return file_table_last_lookup_index;
13447     }
13448
13449   /* Didn't match the previous lookup, search the table.  */
13450   n = VARRAY_ACTIVE_SIZE (file_table);
13451   for (i = 1; i < n; i++)
13452     if (strcmp (file_name, VARRAY_CHAR_PTR (file_table, i)) == 0)
13453       {
13454         file_table_last_lookup_index = i;
13455         return i;
13456       }
13457
13458   /* Add the new entry to the end of the filename table.  */
13459   file_table_last_lookup_index = n;
13460   save_file_name = (char *) ggc_strdup (file_name);
13461   VARRAY_PUSH_CHAR_PTR (file_table, save_file_name);
13462   VARRAY_PUSH_UINT (file_table_emitted, 0);
13463
13464   /* If the assembler is emitting the file table, and we aren't eliminating
13465      unused debug types, then we must emit .file here.  If we are eliminating
13466      unused debug types, then this will be done by the maybe_emit_file call in
13467      prune_unused_types_walk_attribs.  */
13468
13469   if (DWARF2_ASM_LINE_DEBUG_INFO && ! flag_eliminate_unused_debug_types)
13470     return maybe_emit_file (i);
13471
13472   return i;
13473 }
13474
13475 /* If the assembler will construct the file table, then translate the compiler
13476    internal file table number into the assembler file table number, and emit
13477    a .file directive if we haven't already emitted one yet.  The file table
13478    numbers are different because we prune debug info for unused variables and
13479    types, which may include filenames.  */
13480
13481 static int
13482 maybe_emit_file (int fileno)
13483 {
13484   if (DWARF2_ASM_LINE_DEBUG_INFO && fileno > 0)
13485     {
13486       if (!VARRAY_UINT (file_table_emitted, fileno))
13487         {
13488           VARRAY_UINT (file_table_emitted, fileno) = ++emitcount;
13489           fprintf (asm_out_file, "\t.file %u ",
13490                    VARRAY_UINT (file_table_emitted, fileno));
13491           output_quoted_string (asm_out_file,
13492                                 VARRAY_CHAR_PTR (file_table, fileno));
13493           fputc ('\n', asm_out_file);
13494         }
13495       return VARRAY_UINT (file_table_emitted, fileno);
13496     }
13497   else
13498     return fileno;
13499 }
13500
13501 /* Initialize the compiler internal file table.  */
13502
13503 static void
13504 init_file_table (void)
13505 {
13506   /* Allocate the initial hunk of the file_table.  */
13507   VARRAY_CHAR_PTR_INIT (file_table, 64, "file_table");
13508   VARRAY_UINT_INIT (file_table_emitted, 64, "file_table_emitted");
13509
13510   /* Skip the first entry - file numbers begin at 1.  */
13511   VARRAY_PUSH_CHAR_PTR (file_table, NULL);
13512   VARRAY_PUSH_UINT (file_table_emitted, 0);
13513   file_table_last_lookup_index = 0;
13514 }
13515
13516 /* Called by the final INSN scan whenever we see a var location.  We
13517    use it to drop labels in the right places, and throw the location in
13518    our lookup table.  */
13519
13520 static void
13521 dwarf2out_var_location (rtx loc_note)
13522 {
13523   char loclabel[MAX_ARTIFICIAL_LABEL_BYTES];
13524   struct var_loc_node *newloc;
13525   rtx prev_insn;
13526   static rtx last_insn;
13527   static const char *last_label;
13528   tree decl;
13529
13530   if (!DECL_P (NOTE_VAR_LOCATION_DECL (loc_note)))
13531     return;
13532   prev_insn = PREV_INSN (loc_note);
13533
13534   newloc = ggc_alloc_cleared (sizeof (struct var_loc_node));
13535   /* If the insn we processed last time is the previous insn
13536      and it is also a var location note, use the label we emitted
13537      last time.  */
13538   if (last_insn != NULL_RTX
13539       && last_insn == prev_insn
13540       && NOTE_P (prev_insn)
13541       && NOTE_LINE_NUMBER (prev_insn) == NOTE_INSN_VAR_LOCATION)
13542     {
13543       newloc->label = last_label;
13544     }
13545   else
13546     {
13547       ASM_GENERATE_INTERNAL_LABEL (loclabel, "LVL", loclabel_num);
13548       ASM_OUTPUT_DEBUG_LABEL (asm_out_file, "LVL", loclabel_num);
13549       loclabel_num++;
13550       newloc->label = ggc_strdup (loclabel);
13551     }
13552   newloc->var_loc_note = loc_note;
13553   newloc->next = NULL;
13554
13555   if (cfun && in_cold_section_p)
13556     newloc->section_label = cfun->cold_section_label;
13557   else
13558     newloc->section_label = text_section_label;
13559
13560   last_insn = loc_note;
13561   last_label = newloc->label;
13562   decl = NOTE_VAR_LOCATION_DECL (loc_note);
13563   if (DECL_DEBUG_EXPR_IS_FROM (decl) && DECL_DEBUG_EXPR (decl) 
13564       && DECL_P (DECL_DEBUG_EXPR (decl)))
13565     decl = DECL_DEBUG_EXPR (decl); 
13566   add_var_loc_to_decl (decl, newloc);
13567 }
13568
13569 /* We need to reset the locations at the beginning of each
13570    function. We can't do this in the end_function hook, because the
13571    declarations that use the locations won't have been outputted when
13572    that hook is called.  */
13573
13574 static void
13575 dwarf2out_begin_function (tree unused ATTRIBUTE_UNUSED)
13576 {
13577   htab_empty (decl_loc_table);
13578 }
13579
13580 /* Output a label to mark the beginning of a source code line entry
13581    and record information relating to this source line, in
13582    'line_info_table' for later output of the .debug_line section.  */
13583
13584 static void
13585 dwarf2out_source_line (unsigned int line, const char *filename)
13586 {
13587   if (debug_info_level >= DINFO_LEVEL_NORMAL
13588       && line != 0)
13589     {
13590       switch_to_section (current_function_section ());
13591
13592       /* If requested, emit something human-readable.  */
13593       if (flag_debug_asm)
13594         fprintf (asm_out_file, "\t%s %s:%d\n", ASM_COMMENT_START,
13595                  filename, line);
13596
13597       if (DWARF2_ASM_LINE_DEBUG_INFO)
13598         {
13599           unsigned file_num = lookup_filename (filename);
13600
13601           file_num = maybe_emit_file (file_num);
13602
13603           /* Emit the .loc directive understood by GNU as.  */
13604           fprintf (asm_out_file, "\t.loc %d %d 0\n", file_num, line);
13605
13606           /* Indicate that line number info exists.  */
13607           line_info_table_in_use++;
13608
13609           /* Indicate that multiple line number tables exist.  */
13610           if (DECL_SECTION_NAME (current_function_decl))
13611             separate_line_info_table_in_use++;
13612         }
13613       else if (DECL_SECTION_NAME (current_function_decl))
13614         {
13615           dw_separate_line_info_ref line_info;
13616           targetm.asm_out.internal_label (asm_out_file, SEPARATE_LINE_CODE_LABEL,
13617                                      separate_line_info_table_in_use);
13618
13619           /* Expand the line info table if necessary.  */
13620           if (separate_line_info_table_in_use
13621               == separate_line_info_table_allocated)
13622             {
13623               separate_line_info_table_allocated += LINE_INFO_TABLE_INCREMENT;
13624               separate_line_info_table
13625                 = ggc_realloc (separate_line_info_table,
13626                                separate_line_info_table_allocated
13627                                * sizeof (dw_separate_line_info_entry));
13628               memset (separate_line_info_table
13629                        + separate_line_info_table_in_use,
13630                       0,
13631                       (LINE_INFO_TABLE_INCREMENT
13632                        * sizeof (dw_separate_line_info_entry)));
13633             }
13634
13635           /* Add the new entry at the end of the line_info_table.  */
13636           line_info
13637             = &separate_line_info_table[separate_line_info_table_in_use++];
13638           line_info->dw_file_num = lookup_filename (filename);
13639           line_info->dw_line_num = line;
13640           line_info->function = current_function_funcdef_no;
13641         }
13642       else
13643         {
13644           dw_line_info_ref line_info;
13645
13646           targetm.asm_out.internal_label (asm_out_file, LINE_CODE_LABEL,
13647                                      line_info_table_in_use);
13648
13649           /* Expand the line info table if necessary.  */
13650           if (line_info_table_in_use == line_info_table_allocated)
13651             {
13652               line_info_table_allocated += LINE_INFO_TABLE_INCREMENT;
13653               line_info_table
13654                 = ggc_realloc (line_info_table,
13655                                (line_info_table_allocated
13656                                 * sizeof (dw_line_info_entry)));
13657               memset (line_info_table + line_info_table_in_use, 0,
13658                       LINE_INFO_TABLE_INCREMENT * sizeof (dw_line_info_entry));
13659             }
13660
13661           /* Add the new entry at the end of the line_info_table.  */
13662           line_info = &line_info_table[line_info_table_in_use++];
13663           line_info->dw_file_num = lookup_filename (filename);
13664           line_info->dw_line_num = line;
13665         }
13666     }
13667 }
13668
13669 /* Record the beginning of a new source file.  */
13670
13671 static void
13672 dwarf2out_start_source_file (unsigned int lineno, const char *filename)
13673 {
13674   if (flag_eliminate_dwarf2_dups)
13675     {
13676       /* Record the beginning of the file for break_out_includes.  */
13677       dw_die_ref bincl_die;
13678
13679       bincl_die = new_die (DW_TAG_GNU_BINCL, comp_unit_die, NULL);
13680       add_AT_string (bincl_die, DW_AT_name, filename);
13681     }
13682
13683   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
13684     {
13685       int fileno;
13686
13687       switch_to_section (debug_macinfo_section);
13688       dw2_asm_output_data (1, DW_MACINFO_start_file, "Start new file");
13689       dw2_asm_output_data_uleb128 (lineno, "Included from line number %d",
13690                                    lineno);
13691
13692       fileno = maybe_emit_file (lookup_filename (filename));
13693       dw2_asm_output_data_uleb128 (fileno, "Filename we just started");
13694     }
13695 }
13696
13697 /* Record the end of a source file.  */
13698
13699 static void
13700 dwarf2out_end_source_file (unsigned int lineno ATTRIBUTE_UNUSED)
13701 {
13702   if (flag_eliminate_dwarf2_dups)
13703     /* Record the end of the file for break_out_includes.  */
13704     new_die (DW_TAG_GNU_EINCL, comp_unit_die, NULL);
13705
13706   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
13707     {
13708       switch_to_section (debug_macinfo_section);
13709       dw2_asm_output_data (1, DW_MACINFO_end_file, "End file");
13710     }
13711 }
13712
13713 /* Called from debug_define in toplev.c.  The `buffer' parameter contains
13714    the tail part of the directive line, i.e. the part which is past the
13715    initial whitespace, #, whitespace, directive-name, whitespace part.  */
13716
13717 static void
13718 dwarf2out_define (unsigned int lineno ATTRIBUTE_UNUSED,
13719                   const char *buffer ATTRIBUTE_UNUSED)
13720 {
13721   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
13722     {
13723       switch_to_section (debug_macinfo_section);
13724       dw2_asm_output_data (1, DW_MACINFO_define, "Define macro");
13725       dw2_asm_output_data_uleb128 (lineno, "At line number %d", lineno);
13726       dw2_asm_output_nstring (buffer, -1, "The macro");
13727     }
13728 }
13729
13730 /* Called from debug_undef in toplev.c.  The `buffer' parameter contains
13731    the tail part of the directive line, i.e. the part which is past the
13732    initial whitespace, #, whitespace, directive-name, whitespace part.  */
13733
13734 static void
13735 dwarf2out_undef (unsigned int lineno ATTRIBUTE_UNUSED,
13736                  const char *buffer ATTRIBUTE_UNUSED)
13737 {
13738   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
13739     {
13740       switch_to_section (debug_macinfo_section);
13741       dw2_asm_output_data (1, DW_MACINFO_undef, "Undefine macro");
13742       dw2_asm_output_data_uleb128 (lineno, "At line number %d", lineno);
13743       dw2_asm_output_nstring (buffer, -1, "The macro");
13744     }
13745 }
13746
13747 /* Set up for Dwarf output at the start of compilation.  */
13748
13749 static void
13750 dwarf2out_init (const char *filename ATTRIBUTE_UNUSED)
13751 {
13752   init_file_table ();
13753
13754   /* Allocate the decl_die_table.  */
13755   decl_die_table = htab_create_ggc (10, decl_die_table_hash,
13756                                     decl_die_table_eq, NULL);
13757
13758   /* Allocate the decl_loc_table.  */
13759   decl_loc_table = htab_create_ggc (10, decl_loc_table_hash,
13760                                     decl_loc_table_eq, NULL);
13761
13762   /* Allocate the initial hunk of the decl_scope_table.  */
13763   decl_scope_table = VEC_alloc (tree, gc, 256);
13764
13765   /* Allocate the initial hunk of the abbrev_die_table.  */
13766   abbrev_die_table = ggc_alloc_cleared (ABBREV_DIE_TABLE_INCREMENT
13767                                         * sizeof (dw_die_ref));
13768   abbrev_die_table_allocated = ABBREV_DIE_TABLE_INCREMENT;
13769   /* Zero-th entry is allocated, but unused.  */
13770   abbrev_die_table_in_use = 1;
13771
13772   /* Allocate the initial hunk of the line_info_table.  */
13773   line_info_table = ggc_alloc_cleared (LINE_INFO_TABLE_INCREMENT
13774                                        * sizeof (dw_line_info_entry));
13775   line_info_table_allocated = LINE_INFO_TABLE_INCREMENT;
13776
13777   /* Zero-th entry is allocated, but unused.  */
13778   line_info_table_in_use = 1;
13779
13780   /* Generate the initial DIE for the .debug section.  Note that the (string)
13781      value given in the DW_AT_name attribute of the DW_TAG_compile_unit DIE
13782      will (typically) be a relative pathname and that this pathname should be
13783      taken as being relative to the directory from which the compiler was
13784      invoked when the given (base) source file was compiled.  We will fill
13785      in this value in dwarf2out_finish.  */
13786   comp_unit_die = gen_compile_unit_die (NULL);
13787
13788   incomplete_types = VEC_alloc (tree, gc, 64);
13789
13790   used_rtx_array = VEC_alloc (rtx, gc, 32);
13791
13792   debug_info_section = get_section (DEBUG_INFO_SECTION,
13793                                     SECTION_DEBUG, NULL);
13794   debug_abbrev_section = get_section (DEBUG_ABBREV_SECTION,
13795                                       SECTION_DEBUG, NULL);
13796   debug_aranges_section = get_section (DEBUG_ARANGES_SECTION,
13797                                        SECTION_DEBUG, NULL);
13798   debug_macinfo_section = get_section (DEBUG_MACINFO_SECTION,
13799                                        SECTION_DEBUG, NULL);
13800   debug_line_section = get_section (DEBUG_LINE_SECTION,
13801                                     SECTION_DEBUG, NULL);
13802   debug_loc_section = get_section (DEBUG_LOC_SECTION,
13803                                    SECTION_DEBUG, NULL);
13804   debug_pubnames_section = get_section (DEBUG_PUBNAMES_SECTION,
13805                                         SECTION_DEBUG, NULL);
13806   debug_str_section = get_section (DEBUG_STR_SECTION,
13807                                    DEBUG_STR_SECTION_FLAGS, NULL);
13808   debug_ranges_section = get_section (DEBUG_RANGES_SECTION,
13809                                       SECTION_DEBUG, NULL);
13810
13811   ASM_GENERATE_INTERNAL_LABEL (text_end_label, TEXT_END_LABEL, 0);
13812   ASM_GENERATE_INTERNAL_LABEL (abbrev_section_label,
13813                                DEBUG_ABBREV_SECTION_LABEL, 0);
13814   ASM_GENERATE_INTERNAL_LABEL (text_section_label, TEXT_SECTION_LABEL, 0);
13815   ASM_GENERATE_INTERNAL_LABEL (cold_text_section_label, 
13816                                COLD_TEXT_SECTION_LABEL, 0);
13817   ASM_GENERATE_INTERNAL_LABEL (cold_end_label, COLD_END_LABEL, 0);
13818
13819   ASM_GENERATE_INTERNAL_LABEL (debug_info_section_label,
13820                                DEBUG_INFO_SECTION_LABEL, 0);
13821   ASM_GENERATE_INTERNAL_LABEL (debug_line_section_label,
13822                                DEBUG_LINE_SECTION_LABEL, 0);
13823   ASM_GENERATE_INTERNAL_LABEL (ranges_section_label,
13824                                DEBUG_RANGES_SECTION_LABEL, 0);
13825   switch_to_section (debug_abbrev_section);
13826   ASM_OUTPUT_LABEL (asm_out_file, abbrev_section_label);
13827   switch_to_section (debug_info_section);
13828   ASM_OUTPUT_LABEL (asm_out_file, debug_info_section_label);
13829   switch_to_section (debug_line_section);
13830   ASM_OUTPUT_LABEL (asm_out_file, debug_line_section_label);
13831
13832   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
13833     {
13834       switch_to_section (debug_macinfo_section);
13835       ASM_GENERATE_INTERNAL_LABEL (macinfo_section_label,
13836                                    DEBUG_MACINFO_SECTION_LABEL, 0);
13837       ASM_OUTPUT_LABEL (asm_out_file, macinfo_section_label);
13838     }
13839
13840   switch_to_section (text_section);
13841   ASM_OUTPUT_LABEL (asm_out_file, text_section_label);
13842   if (flag_reorder_blocks_and_partition)
13843     {
13844       switch_to_section (unlikely_text_section ());
13845       ASM_OUTPUT_LABEL (asm_out_file, cold_text_section_label);
13846     }
13847 }
13848
13849 /* A helper function for dwarf2out_finish called through
13850    ht_forall.  Emit one queued .debug_str string.  */
13851
13852 static int
13853 output_indirect_string (void **h, void *v ATTRIBUTE_UNUSED)
13854 {
13855   struct indirect_string_node *node = (struct indirect_string_node *) *h;
13856
13857   if (node->form == DW_FORM_strp)
13858     {
13859       switch_to_section (debug_str_section);
13860       ASM_OUTPUT_LABEL (asm_out_file, node->label);
13861       assemble_string (node->str, strlen (node->str) + 1);
13862     }
13863
13864   return 1;
13865 }
13866
13867
13868
13869 /* Clear the marks for a die and its children.
13870    Be cool if the mark isn't set.  */
13871
13872 static void
13873 prune_unmark_dies (dw_die_ref die)
13874 {
13875   dw_die_ref c;
13876   die->die_mark = 0;
13877   for (c = die->die_child; c; c = c->die_sib)
13878     prune_unmark_dies (c);
13879 }
13880
13881
13882 /* Given DIE that we're marking as used, find any other dies
13883    it references as attributes and mark them as used.  */
13884
13885 static void
13886 prune_unused_types_walk_attribs (dw_die_ref die)
13887 {
13888   dw_attr_ref a;
13889
13890   for (a = die->die_attr; a != NULL; a = a->dw_attr_next)
13891     {
13892       if (a->dw_attr_val.val_class == dw_val_class_die_ref)
13893         {
13894           /* A reference to another DIE.
13895              Make sure that it will get emitted.  */
13896           prune_unused_types_mark (a->dw_attr_val.v.val_die_ref.die, 1);
13897         }
13898       else if (a->dw_attr == DW_AT_decl_file || a->dw_attr == DW_AT_call_file)
13899         {
13900           /* A reference to a file.  Make sure the file name is emitted.  */
13901           a->dw_attr_val.v.val_unsigned =
13902             maybe_emit_file (a->dw_attr_val.v.val_unsigned);
13903         }
13904     }
13905 }
13906
13907
13908 /* Mark DIE as being used.  If DOKIDS is true, then walk down
13909    to DIE's children.  */
13910
13911 static void
13912 prune_unused_types_mark (dw_die_ref die, int dokids)
13913 {
13914   dw_die_ref c;
13915
13916   if (die->die_mark == 0)
13917     {
13918       /* We haven't done this node yet.  Mark it as used.  */
13919       die->die_mark = 1;
13920
13921       /* We also have to mark its parents as used.
13922          (But we don't want to mark our parents' kids due to this.)  */
13923       if (die->die_parent)
13924         prune_unused_types_mark (die->die_parent, 0);
13925
13926       /* Mark any referenced nodes.  */
13927       prune_unused_types_walk_attribs (die);
13928
13929       /* If this node is a specification,
13930          also mark the definition, if it exists.  */
13931       if (get_AT_flag (die, DW_AT_declaration) && die->die_definition)
13932         prune_unused_types_mark (die->die_definition, 1);
13933     }
13934
13935   if (dokids && die->die_mark != 2)
13936     {
13937       /* We need to walk the children, but haven't done so yet.
13938          Remember that we've walked the kids.  */
13939       die->die_mark = 2;
13940
13941       /* Walk them.  */
13942       for (c = die->die_child; c; c = c->die_sib)
13943         {
13944           /* If this is an array type, we need to make sure our
13945              kids get marked, even if they're types.  */
13946           if (die->die_tag == DW_TAG_array_type)
13947             prune_unused_types_mark (c, 1);
13948           else
13949             prune_unused_types_walk (c);
13950         }
13951     }
13952 }
13953
13954
13955 /* Walk the tree DIE and mark types that we actually use.  */
13956
13957 static void
13958 prune_unused_types_walk (dw_die_ref die)
13959 {
13960   dw_die_ref c;
13961
13962   /* Don't do anything if this node is already marked.  */
13963   if (die->die_mark)
13964     return;
13965
13966   switch (die->die_tag) {
13967   case DW_TAG_const_type:
13968   case DW_TAG_packed_type:
13969   case DW_TAG_pointer_type:
13970   case DW_TAG_reference_type:
13971   case DW_TAG_volatile_type:
13972   case DW_TAG_typedef:
13973   case DW_TAG_array_type:
13974   case DW_TAG_structure_type:
13975   case DW_TAG_union_type:
13976   case DW_TAG_class_type:
13977   case DW_TAG_friend:
13978   case DW_TAG_variant_part:
13979   case DW_TAG_enumeration_type:
13980   case DW_TAG_subroutine_type:
13981   case DW_TAG_string_type:
13982   case DW_TAG_set_type:
13983   case DW_TAG_subrange_type:
13984   case DW_TAG_ptr_to_member_type:
13985   case DW_TAG_file_type:
13986     /* It's a type node --- don't mark it.  */
13987     return;
13988
13989   default:
13990     /* Mark everything else.  */
13991     break;
13992   }
13993
13994   die->die_mark = 1;
13995
13996   /* Now, mark any dies referenced from here.  */
13997   prune_unused_types_walk_attribs (die);
13998
13999   /* Mark children.  */
14000   for (c = die->die_child; c; c = c->die_sib)
14001     prune_unused_types_walk (c);
14002 }
14003
14004
14005 /* Remove from the tree DIE any dies that aren't marked.  */
14006
14007 static void
14008 prune_unused_types_prune (dw_die_ref die)
14009 {
14010   dw_die_ref c, p, n;
14011
14012   gcc_assert (die->die_mark);
14013
14014   p = NULL;
14015   for (c = die->die_child; c; c = n)
14016     {
14017       n = c->die_sib;
14018       if (c->die_mark)
14019         {
14020           prune_unused_types_prune (c);
14021           p = c;
14022         }
14023       else
14024         {
14025           if (p)
14026             p->die_sib = n;
14027           else
14028             die->die_child = n;
14029           free_die (c);
14030         }
14031     }
14032 }
14033
14034
14035 /* Remove dies representing declarations that we never use.  */
14036
14037 static void
14038 prune_unused_types (void)
14039 {
14040   unsigned int i;
14041   limbo_die_node *node;
14042
14043   /* Clear all the marks.  */
14044   prune_unmark_dies (comp_unit_die);
14045   for (node = limbo_die_list; node; node = node->next)
14046     prune_unmark_dies (node->die);
14047
14048   /* Set the mark on nodes that are actually used.  */
14049   prune_unused_types_walk (comp_unit_die);
14050   for (node = limbo_die_list; node; node = node->next)
14051     prune_unused_types_walk (node->die);
14052
14053   /* Also set the mark on nodes referenced from the
14054      pubname_table or arange_table.  */
14055   for (i = 0; i < pubname_table_in_use; i++)
14056     prune_unused_types_mark (pubname_table[i].die, 1);
14057   for (i = 0; i < arange_table_in_use; i++)
14058     prune_unused_types_mark (arange_table[i], 1);
14059
14060   /* Get rid of nodes that aren't marked.  */
14061   prune_unused_types_prune (comp_unit_die);
14062   for (node = limbo_die_list; node; node = node->next)
14063     prune_unused_types_prune (node->die);
14064
14065   /* Leave the marks clear.  */
14066   prune_unmark_dies (comp_unit_die);
14067   for (node = limbo_die_list; node; node = node->next)
14068     prune_unmark_dies (node->die);
14069 }
14070
14071 /* Output stuff that dwarf requires at the end of every file,
14072    and generate the DWARF-2 debugging info.  */
14073
14074 static void
14075 dwarf2out_finish (const char *filename)
14076 {
14077   limbo_die_node *node, *next_node;
14078   dw_die_ref die = 0;
14079
14080   /* Add the name for the main input file now.  We delayed this from
14081      dwarf2out_init to avoid complications with PCH.  */
14082   add_name_attribute (comp_unit_die, filename);
14083   if (filename[0] != DIR_SEPARATOR)
14084     add_comp_dir_attribute (comp_unit_die);
14085   else if (get_AT (comp_unit_die, DW_AT_comp_dir) == NULL)
14086     {
14087       size_t i;
14088       for (i = 1; i < VARRAY_ACTIVE_SIZE (file_table); i++)
14089         if (VARRAY_CHAR_PTR (file_table, i)[0] != DIR_SEPARATOR
14090             /* Don't add cwd for <built-in>.  */
14091             && VARRAY_CHAR_PTR (file_table, i)[0] != '<')
14092           {
14093             add_comp_dir_attribute (comp_unit_die);
14094             break;
14095           }
14096     }
14097
14098   /* Traverse the limbo die list, and add parent/child links.  The only
14099      dies without parents that should be here are concrete instances of
14100      inline functions, and the comp_unit_die.  We can ignore the comp_unit_die.
14101      For concrete instances, we can get the parent die from the abstract
14102      instance.  */
14103   for (node = limbo_die_list; node; node = next_node)
14104     {
14105       next_node = node->next;
14106       die = node->die;
14107
14108       if (die->die_parent == NULL)
14109         {
14110           dw_die_ref origin = get_AT_ref (die, DW_AT_abstract_origin);
14111
14112           if (origin)
14113             add_child_die (origin->die_parent, die);
14114           else if (die == comp_unit_die)
14115             ;
14116           else if (errorcount > 0 || sorrycount > 0)
14117             /* It's OK to be confused by errors in the input.  */
14118             add_child_die (comp_unit_die, die);
14119           else
14120             {
14121               /* In certain situations, the lexical block containing a
14122                  nested function can be optimized away, which results
14123                  in the nested function die being orphaned.  Likewise
14124                  with the return type of that nested function.  Force
14125                  this to be a child of the containing function.
14126
14127                  It may happen that even the containing function got fully
14128                  inlined and optimized out.  In that case we are lost and
14129                  assign the empty child.  This should not be big issue as
14130                  the function is likely unreachable too.  */
14131               tree context = NULL_TREE;
14132
14133               gcc_assert (node->created_for);
14134
14135               if (DECL_P (node->created_for))
14136                 context = DECL_CONTEXT (node->created_for);
14137               else if (TYPE_P (node->created_for))
14138                 context = TYPE_CONTEXT (node->created_for);
14139
14140               gcc_assert (context && TREE_CODE (context) == FUNCTION_DECL);
14141
14142               origin = lookup_decl_die (context);
14143               if (origin)
14144                 add_child_die (origin, die);
14145               else
14146                 add_child_die (comp_unit_die, die);
14147             }
14148         }
14149     }
14150
14151   limbo_die_list = NULL;
14152
14153   /* Walk through the list of incomplete types again, trying once more to
14154      emit full debugging info for them.  */
14155   retry_incomplete_types ();
14156
14157   /* We need to reverse all the dies before break_out_includes, or
14158      we'll see the end of an include file before the beginning.  */
14159   reverse_all_dies (comp_unit_die);
14160
14161   if (flag_eliminate_unused_debug_types)
14162     prune_unused_types ();
14163
14164   /* Generate separate CUs for each of the include files we've seen.
14165      They will go into limbo_die_list.  */
14166   if (flag_eliminate_dwarf2_dups)
14167     break_out_includes (comp_unit_die);
14168
14169   /* Traverse the DIE's and add add sibling attributes to those DIE's
14170      that have children.  */
14171   add_sibling_attributes (comp_unit_die);
14172   for (node = limbo_die_list; node; node = node->next)
14173     add_sibling_attributes (node->die);
14174
14175   /* Output a terminator label for the .text section.  */
14176   switch_to_section (text_section);
14177   targetm.asm_out.internal_label (asm_out_file, TEXT_END_LABEL, 0);
14178   if (flag_reorder_blocks_and_partition)
14179     {
14180       switch_to_section (unlikely_text_section ());
14181       targetm.asm_out.internal_label (asm_out_file, COLD_END_LABEL, 0);
14182     }
14183
14184   /* Output the source line correspondence table.  We must do this
14185      even if there is no line information.  Otherwise, on an empty
14186      translation unit, we will generate a present, but empty,
14187      .debug_info section.  IRIX 6.5 `nm' will then complain when
14188      examining the file.  */
14189   if (! DWARF2_ASM_LINE_DEBUG_INFO)
14190     {
14191       switch_to_section (debug_line_section);
14192       output_line_info ();
14193     }
14194
14195   /* Output location list section if necessary.  */
14196   if (have_location_lists)
14197     {
14198       /* Output the location lists info.  */
14199       switch_to_section (debug_loc_section);
14200       ASM_GENERATE_INTERNAL_LABEL (loc_section_label,
14201                                    DEBUG_LOC_SECTION_LABEL, 0);
14202       ASM_OUTPUT_LABEL (asm_out_file, loc_section_label);
14203       output_location_lists (die);
14204       have_location_lists = 0;
14205     }
14206
14207   /* We can only use the low/high_pc attributes if all of the code was
14208      in .text.  */
14209   if (!separate_line_info_table_in_use && !have_switched_text_section)
14210     {
14211       add_AT_lbl_id (comp_unit_die, DW_AT_low_pc, text_section_label);
14212       add_AT_lbl_id (comp_unit_die, DW_AT_high_pc, text_end_label);
14213     }
14214
14215   /* If it wasn't, we need to give .debug_loc and .debug_ranges an appropriate
14216      "base address".  Use zero so that these addresses become absolute.  */
14217   else if (have_location_lists || ranges_table_in_use)
14218     add_AT_addr (comp_unit_die, DW_AT_entry_pc, const0_rtx);
14219
14220   if (debug_info_level >= DINFO_LEVEL_NORMAL)
14221     add_AT_lbl_offset (comp_unit_die, DW_AT_stmt_list,
14222                        debug_line_section_label);
14223
14224   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
14225     add_AT_lbl_offset (comp_unit_die, DW_AT_macro_info, macinfo_section_label);
14226
14227   /* Output all of the compilation units.  We put the main one last so that
14228      the offsets are available to output_pubnames.  */
14229   for (node = limbo_die_list; node; node = node->next)
14230     output_comp_unit (node->die, 0);
14231
14232   output_comp_unit (comp_unit_die, 0);
14233
14234   /* Output the abbreviation table.  */
14235   switch_to_section (debug_abbrev_section);
14236   output_abbrev_section ();
14237
14238   /* Output public names table if necessary.  */
14239   if (pubname_table_in_use)
14240     {
14241       switch_to_section (debug_pubnames_section);
14242       output_pubnames ();
14243     }
14244
14245   /* Output the address range information.  We only put functions in the arange
14246      table, so don't write it out if we don't have any.  */
14247   if (fde_table_in_use)
14248     {
14249       switch_to_section (debug_aranges_section);
14250       output_aranges ();
14251     }
14252
14253   /* Output ranges section if necessary.  */
14254   if (ranges_table_in_use)
14255     {
14256       switch_to_section (debug_ranges_section);
14257       ASM_OUTPUT_LABEL (asm_out_file, ranges_section_label);
14258       output_ranges ();
14259     }
14260
14261   /* Have to end the macro section.  */
14262   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
14263     {
14264       switch_to_section (debug_macinfo_section);
14265       dw2_asm_output_data (1, 0, "End compilation unit");
14266     }
14267
14268   /* If we emitted any DW_FORM_strp form attribute, output the string
14269      table too.  */
14270   if (debug_str_hash)
14271     htab_traverse (debug_str_hash, output_indirect_string, NULL);
14272 }
14273 #else
14274
14275 /* This should never be used, but its address is needed for comparisons.  */
14276 const struct gcc_debug_hooks dwarf2_debug_hooks;
14277
14278 #endif /* DWARF2_DEBUGGING_INFO */
14279
14280 #include "gt-dwarf2out.h"