OSDN Git Service

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